<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-565966936284948595</id><updated>2011-12-30T07:31:16.764-08:00</updated><category term='Wiimote'/><category term='Games'/><category term='cubing'/><category term='ROM hacking'/><category term='NES'/><category term='programming'/><category term='Sharepoint'/><category term='PSP'/><category term='PC'/><category term='hacking'/><category term='dotnet'/><category term='SNES'/><category term='musings'/><category term='WinAPI'/><category term='hardware'/><title type='text'>Nerdy Nerdy!</title><subtitle type='html'>Let out that nerd in you!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-4584796253121677372</id><published>2010-03-10T20:08:00.000-08:00</published><updated>2010-03-11T18:34:46.847-08:00</updated><title type='text'>Chome and XSLT</title><content type='html'>&lt;div style="text-align: left;"&gt;I've built a web portal for my own use that integrates search engines, categorized favorite links and custom styled RSS feeds into a single page.  It's a hodgepodge of ASP, VBScript and JavaScript with an XML as the backend and jQuery/UI to liven things up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Initially working with FireFox as my default browser, everything was working fine until I decided to install Chrome. That when I got the error message: Extra content at end of document. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;img src="http://lh3.ggpht.com/_NTFyN8Kn724/S5htmNEyzyI/AAAAAAAAAEI/KIXLNdKsL3Q/s912/chrome-error.PNG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 589px; height: 329px;" border="0" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;This gave me quite a headache until I traced it to the XSL processing in my JavaScript. I didn't quite understand what was causing the problem until I realized that Chrome didn't like what I was doing inside my {xsl:template}&lt;xsl:template&gt;.  &lt;/xsl:template&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It turns out Chrome expects a only single child node (or document if you like) inside an xsl template and was complaining about anything coming after it. So you can't have this: (sorry about the curly braces, it seems blogger doesn't play nicely with code tags) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;{xsl:template match="/rdf:RDF|/rss"}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   {img src="...."}{/img}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   {div}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   {/div}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;{xsl:template}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;To fix this problem, all I did was wrap everything in another div.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;{xsl:template match="/rdf:RDF|/rss"}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   {div}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;      {img src="...."}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;      {div}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;       ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;      {/div}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   {/div}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;{xsl:template}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... et voila ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;img src="http://lh5.ggpht.com/_NTFyN8Kn724/S5h1XA7AAhI/AAAAAAAAAEs/yDmbQKvV5Cw/s800/chrome-fixed.PNG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 588px; height: 370px;" border="0" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-4584796253121677372?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/4584796253121677372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=4584796253121677372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4584796253121677372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4584796253121677372'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2010/03/chome-and-xslt.html' title='Chome and XSLT'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_NTFyN8Kn724/S5htmNEyzyI/AAAAAAAAAEI/KIXLNdKsL3Q/s72-c/chrome-error.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-7454655153743679296</id><published>2010-01-21T19:13:00.000-08:00</published><updated>2010-03-08T19:14:05.603-08:00</updated><title type='text'>Hackintoshing</title><content type='html'>I installed OSX on my PC last year, and I thought I'd document what I did and what I went through to get it up and running, in case a future me decides to reinstall all over again, or install in another PC.&lt;br /&gt;&lt;br /&gt;OSX is visually appealing, and although it's interface might take some getting used to when coming from a Windows background, its responsiveness and intuitiveness wins you over easily.&lt;br /&gt;&lt;br /&gt;OSX is based off Darwin, which is a UNIX variant, and while there are many tools to help you setting up, sometimes you might have to go through a command line and sudo your way into the system, so it helps to brush up on unix commands.&lt;br /&gt;&lt;br /&gt;Installing OSX on an x86 platform is possible now due to the fact that Apple switched from a PPC architecture to the x86, with Intel as its target.  There are subtle differences between PC hardware and a Mac, and OSX is specifically designed for Mac hardware.&lt;br /&gt;&lt;br /&gt;iDeneb contains many patches to get OSX running on your system, however as Hackintoshing is a very much experimental field, and with the variety of PC hardware out there, you might have a rig that is not 100% compatible with the distro and you will need to go hunting for drivers for your specific hardware.&lt;br /&gt;&lt;br /&gt;Installer: iDeneb v1.1 10.5.4&lt;br /&gt;&lt;br /&gt;System:&lt;br /&gt;Intel Core 2 Duo E4500&lt;br /&gt;ASUS P5B-MX WiFi MoBo&lt;br /&gt;3GB RAM&lt;br /&gt;Inno3D GeForce 8500 GT 512MB&lt;br /&gt;Windows XP SP2 on C:\&lt;br /&gt;&lt;br /&gt;First off, my DVD-ROM is broken, so I had to resort to using Leopard  HD install helper.  This tool will dump your ISO into a hard disk and  make it bootable.&lt;br /&gt;&lt;br /&gt;I partitioned my 2nd hard disk into&lt;br /&gt;&lt;br /&gt;8GB - format as FAT32 (through command prompt in XP)&lt;br /&gt;20GB - leave unformatted&lt;br /&gt;The rest - data partition&lt;br /&gt;&lt;br /&gt;Using the helper I installed the iDeneb ISO to the 8GB.  The default  options make the HDD bootable and add a "Mac OS X System" option to  your windows XP boot menu.&lt;br /&gt;&lt;br /&gt;Rebooting, I chose the second option in the boot menu and it booted  into the Mac OSX installer.&lt;br /&gt;&lt;br /&gt;Using Tools &gt; Disk Utility I "erased" (formatted in OSX lingo)  the 20GB with the Mac OSX Journaled partition type. Close the Disk  Utility and select the 20GB from the choice of target HDDs.&lt;br /&gt;&lt;br /&gt;Before continuing the installation I clicked the Customize button  and set the following:&lt;br /&gt;&lt;br /&gt;AMD patch: Not needed (Intel CPU)&lt;br /&gt;Audio: AC97 (from mobo's built-in audio)&lt;br /&gt;Fix: AppleSMBIOS: 800 (an article suggested ASUS mobos need this)&lt;br /&gt;Video: None for now&lt;br /&gt;Network: none for now:&lt;br /&gt;Chipset: ICHx and JMicron&lt;br /&gt;Other: OSX86Tools&lt;br /&gt;&lt;br /&gt;I found out that the version of Firefox included was Italian, so I  wouldn't recommend installing that right now.&lt;br /&gt;&lt;br /&gt;Installer took 10-15 minutes then rebooted.&lt;br /&gt;&lt;br /&gt;The chipset is important and should match your chipset, otherwise  your OS will hang when booting.&lt;br /&gt;&lt;br /&gt;Booting successfully into the OS you are greeted with the Mac "Welcome"  video, after which you go through a wizard to adjust settings.&lt;br /&gt;&lt;br /&gt;However (for me), when prompted whether to restore data from another  Mac or from Time Machine, I of course chose not to do so, and the disk  whirred and the busy icon came up and I was thrown all the way back to  the Welcome video.&lt;br /&gt;&lt;br /&gt;Some people say that you can get past this by re-enabling the serial  and parallel ports and legacy usb in the BIOS.&lt;br /&gt;&lt;br /&gt;If that doesn't work, you can bypass the first time setup by doing  this:&lt;br /&gt;&lt;br /&gt;When booting into OSX, you have 5 seconds to press any key to get  the boot options command line. At the boot prompt, enter the option for  single-user mode (with command line) and press enter.&lt;br /&gt;&lt;br /&gt;&gt; -s&lt;br /&gt;&lt;br /&gt;At the root commandline, enter the following, waiting for the prompt  to appear again before typing the next line:&lt;br /&gt;&lt;br /&gt;&gt; sbin/fsck -fy&lt;br /&gt;&gt; sbin/mount -uw /&lt;br /&gt;&gt; passwd root&lt;br /&gt;&lt;br /&gt;Now enter the new root password and the confirmation. You won't see  the password being typed.&lt;br /&gt;&lt;br /&gt;This ensures the password is set so that we can login later. Now we  create the file that notifies OSX that setup is complete:&lt;br /&gt;&lt;br /&gt;&gt; touch /var/db/.AppleSetupDone&lt;br /&gt;&lt;br /&gt;Now reboot with the command:&lt;br /&gt;&lt;br /&gt;&gt; reboot&lt;br /&gt;&lt;br /&gt;Instead of the welcome screen we get the login prompt for root. Go  ahead and enter your password to login as Administrator.  Since we  skipped the user account creation in setup make sure to create your own  Admin account in System Prefs &gt; Accounts.&lt;br /&gt;&lt;br /&gt;Now I have a working OSX installation, all I need to do is install  the correct drivers.  A bit of googling got me the drivers for my  AttansicL1 ethernet.  Drivers come in the form of Kernel Extensions  (kext) which you can install using Applications &gt; iDeneb tools &gt;  OSX86Tools.&lt;br /&gt;&lt;br /&gt;I downloaded FireFox and Adobe Flash and got that working  seamlessly, and I was browsing, facebooking and even playing FarmVille  in no time, and with no problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-7454655153743679296?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/7454655153743679296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=7454655153743679296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7454655153743679296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7454655153743679296'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2010/01/hackintoshing.html' title='Hackintoshing'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-2306725467190297847</id><published>2009-04-07T07:46:00.000-07:00</published><updated>2009-04-07T08:11:05.563-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Excel Office 2003 Documents opening as read-only in SharePoint</title><content type='html'>&lt;span style="font-size:+0;"&gt;Recently I've been getting issues with users complaining that their old Excel files are now opening as Read-Only, and that in order to update the document they have to Save-As to their desktop then re-upload - which kind of defeats the purpose of SharePoint.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've tried some of the recommended fixes from various sites, including &lt;a href="http://support.microsoft.com/kb/870853"&gt;the one from Microsoft&lt;/a&gt; which says that it won't work for Sharepoint (but other users say it does), and they just don't work on my machine. I don't want to try to do those fixes manually on the user's machines either.&lt;br /&gt;&lt;br /&gt;In desperation I tried to find out exactly what was going on, using RegMon from Sysinternals.&lt;br /&gt;&lt;br /&gt;What I found is that when a user clicks on a Document URL from the web, IE launches Excel using the OpenAsReadOnly shell command (by default).&lt;br /&gt;&lt;br /&gt;By modifying the registry so that the command to Open as Read Only would essentially do the same thing as the regular Open command, I was able to workaround the situation, although for some users this was temporary - the next day something restored the settings back, and they had to run the registry hack again.&lt;br /&gt;&lt;br /&gt;I don't know when Microsoft decided to change this policy of how documents are opened from the web, or how it was distributed to our network or our users. There are sites that say that this is by design, which begs the question, why did it work the way it did before?&lt;br /&gt;&lt;br /&gt;I do agree that it should be fixed by using the Edit in Microsoft &lt;application&gt;link, which incidentally launches an ActiveX object to open the document in Read/Write mode, but it just doesn't satisfy my curiosity as to how things were before they started working "as they should".&lt;br /&gt;&lt;br /&gt;For anyone interested, I am on WinXP SP3, MS Office 2003 Standard Edition, with Compatibility Pack for the 2007 Office system (&lt;a href="http://support.microsoft.com/kb/923505"&gt;KB923505&lt;/a&gt;) installed.&lt;br /&gt;&lt;br /&gt;Copy and paste the below into a text file and save as .REG:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\OpenAsReadOnly\command]@="\"C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE\" /e"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-2306725467190297847?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/2306725467190297847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=2306725467190297847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/2306725467190297847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/2306725467190297847'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2009/04/excel-office-2003-documents-opening-as.html' title='Excel Office 2003 Documents opening as read-only in SharePoint'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-4422300528384540279</id><published>2009-03-23T02:14:00.000-07:00</published><updated>2009-03-23T03:18:02.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='musings'/><title type='text'>Hiatus</title><content type='html'>I haven't done any programming in a while now.  It's probably because the PSP plugin I was trying to make was totally pwned by another person's plugin. &lt;br /&gt;&lt;br /&gt;The plugin is another attempt to allow a user to organize games and applications into folders on the PSP, and it does the job in a much better way both interactively and programatically, and I wave the white flag and now use it myself.&lt;br /&gt;&lt;br /&gt;It's also because I can seem to find the time I need to really get into programming.  I really don't want to break my time down for you in order to illustrate, but four hours of programming sometimes just doesn't seem to cut it in order to learn or make something useful.&lt;br /&gt;&lt;br /&gt;Perhaps it's just that I don't have a focus right now.&lt;br /&gt;&lt;br /&gt;So I've dropped programming for a while and now I'm going back to playing games.&lt;br /&gt;&lt;br /&gt;Recently I've started playing &lt;strong&gt;Final Fantasy VIII &lt;/strong&gt;again.  It's one of the RPGs I've already finished, but more or less enjoyed enough the first time around to warrant a second playthrough.&lt;br /&gt;&lt;br /&gt;The first time I played it, I was in college, and I only rented to play the game, so I didn't have much time to really get into it, nor did I finish it.&lt;br /&gt;&lt;br /&gt;The savegame slept on my memory card until the day PSX emulation became feasible, and following instructions, I made a memory card reader out of a floppy disk connector and some instructions on the web.&lt;br /&gt;&lt;br /&gt;The second time I played it, I between jobs and had so many games to play that I didn't really bother to spend the time to get to know the game that well.&lt;br /&gt;&lt;br /&gt;I'm playing it on my PSP nowadays, more or less for nostalgia than the need to finish it.  I could be spending more time on Patapon 2,  but I've grown a bit tired of killing bosses over and over again in order to level up my army so I can go back to killing bosses over and over again.&lt;br /&gt;&lt;br /&gt;Maybe it's my video card, but &lt;strong&gt;Resident Evil 4 &lt;/strong&gt;gets me motion sick after a few minutes of play.  Then again I was never really a fan of first-person-shooters.&lt;br /&gt;&lt;br /&gt;I haven't touched &lt;strong&gt;Final Fantasy X &lt;/strong&gt;in a while.  I'm using PCSX2 to emulate it (I don't own a PS2), and fortunately my video card can crank enough polygons per second to make it playable.&lt;br /&gt;&lt;br /&gt;It'd be nice to own a PS2 and play all those great games, but I can't bring myself to shell out some money to buy a second hand unit and some games with scratched or second-rate DVDs.&lt;br /&gt;&lt;br /&gt;Maybe if someone sold me one for Php 4,000, I'd bite.  But that's almost a new Inno3D GForce 9600 GTS DDR3.&lt;br /&gt;&lt;br /&gt;Thing is, I'm not even much of an avid PC gamer.&lt;br /&gt;&lt;br /&gt;*sigh*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-4422300528384540279?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/4422300528384540279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=4422300528384540279' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4422300528384540279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4422300528384540279'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2009/03/hiatus.html' title='Hiatus'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-7067661913685107427</id><published>2009-03-10T06:50:00.001-07:00</published><updated>2009-03-10T08:05:32.654-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='musings'/><title type='text'>Hitched!</title><content type='html'>After five years, we finally got married!&lt;br /&gt;&lt;br /&gt;My dear Fransly and I tied the knot on February 28, 2009 at the Hearts of Jesus and Mary Parish Church, at West Triangle subdivision in Quezon City.&lt;br /&gt;&lt;br /&gt;My father decided to come late to the church, but I didn't let that ruin the day for me. The road leading to the front of the church was torn up for repairs/renewal, but I didn't let that ruin the day for me.&lt;br /&gt;&lt;br /&gt;The cloudless day brought a heat wave but also gave perfect lighting for picture-taking. Hats off to the &lt;a href="http://www.arieljavelosa.ph/"&gt;Ariel Javelosa&lt;/a&gt; team for grabbing such lovely pictures. Thank you Max!&lt;br /&gt;&lt;br /&gt;Reception was held at the &lt;a href="http://www.gazeboroyale.com/"&gt;Gazebo Royale's&lt;/a&gt; &lt;a href="http://www.gazeboroyale.com/spg/photogallery/venue-details.asp?vid=11"&gt;Champagne hall&lt;/a&gt;, where we surprised everyone (photographers especially) by running down the red carpet to the front of the pavillion where we had our first dance that rocked the crowd and really set the mood. I have Donna to thank for coreographing, and Tina and Onchit for joining us in the dance.&lt;br /&gt;&lt;br /&gt;Dinner was quickly served. We didn't get to eat much with all the photos being taken, but everyone seemed to enjoy the food served by &lt;a href="http://www.eloquentecatering.com/"&gt;Eloquente&lt;/a&gt;, while &lt;a href="http://serene8.multiply.com/"&gt;Seren8&lt;/a&gt; played our choice of music.&lt;br /&gt;&lt;br /&gt;After the AVPs, the games, and everything to everyone's surprise I sang "Beautiful in My Eyes" and though I botched it a bit at the second stanza, nobody seemed to notice. &lt;br /&gt;&lt;br /&gt;The deal was, Fransly wanted me to sing either that or "Danny's Song" (I really didn't want to sing the part "I  think I'm gonna have a son" because then &lt;em&gt;people&lt;/em&gt; might interpret it &lt;em&gt;literally&lt;/em&gt;), but wanted it to be a "surprise", so she didn't know &lt;em&gt;when &lt;/em&gt;I was going to sing. &lt;br /&gt;&lt;br /&gt;I would have wanted to sing "The Way You Look Tonight" using Steve Tyrell's version, which IMO is more jaunty than the original or Buble's, since I know the lyrics better, I might not have botched it. Oh well.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hitchedweddings.com/main2.html"&gt;Hitched!&lt;/a&gt; provided us with on-the-day wedding coordination and lots of help hooking us up with the wedding band and other details we missed. We couldn't have done it without you.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.partypicslive.com/"&gt;Partypics&lt;/a&gt; provided the &lt;a href="http://www.partypicslive.com/pictures?name=20090228_David_Fransly"&gt;photobooth&lt;/a&gt; which doubled as our souvenirs.&lt;br /&gt;&lt;br /&gt;Overall, it was the best wedding I could have wished for.&lt;br /&gt;&lt;br /&gt;To cap it off, we spent another day at the Linden suites, which I didn't really get to enjoy all that much as I had a really bad cough.&lt;br /&gt;&lt;br /&gt;Finally, I must thank my dear wifey for rubbing her nose against mine and stealing that kiss (I know it was you!) If not for that fateful day, none of this would have happened, and I wouldn't be as happy as I am now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-7067661913685107427?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/7067661913685107427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=7067661913685107427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7067661913685107427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7067661913685107427'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2009/03/hitched.html' title='Hitched!'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-276446486220438923</id><published>2008-12-30T00:47:00.000-08:00</published><updated>2008-12-30T01:04:35.704-08:00</updated><title type='text'>Plugins for the PSP - 2</title><content type='html'>My efforts to ask for any help of the QJ.Net forums on hacking the PSP to add something similar to folders in the GAME menu created a rather lengthy thread that was filled with a lot of critiscm.&lt;br /&gt;&lt;br /&gt;Eventually I posted some information that more or less showed that I knew what I was doing, and then the tides turned. Those who were telling me that what I was doing (disassembling the game_plugin module) was next to impossible, was silly, and was clearly the wrong approach, now nodded and said that what I had found was correct, and that they knew that information all along, and even offered me to join a group they were building devoted to hacking the VSH modules.&lt;br /&gt;&lt;br /&gt;I don't really see why they are so uptight about sharing that information, when all the stuff they can actually do to hack the PSP was made possible by the sharing of information.&lt;br /&gt;&lt;br /&gt;Anyway, I'm once again on my own. I've been a bit busy and I haven't had time to work on this.  I shouldn't be spending so much time working on this project, as I'm about to get married in 2 months and there's a still lot of things that need planning and preparation.&lt;br /&gt;&lt;br /&gt;With the slightest bit of help I have found the code that executes when the user selects a game, so I'm that much closer to realizing my goal.  All I need to find know is how the code passes around the information containing the selected game, but finding this is a bit harder than I expected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-276446486220438923?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/276446486220438923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=276446486220438923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/276446486220438923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/276446486220438923'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/12/plugins-for-psp-2.html' title='Plugins for the PSP - 2'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-6319551464065553491</id><published>2008-12-10T06:35:00.000-08:00</published><updated>2008-12-10T08:17:03.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Plugins for the PSP</title><content type='html'>I've been working on a pet project of mine that I thought would be fun to do.  I've been able to write and compile code for running on custom firmware on the PSP for a while now, but I haven't decided on what to do.&lt;br /&gt;&lt;br /&gt;I've wanted to make a decent game, perhaps a bike-physics game clone of the one on teagames that I enjoyed so much playing during dull hours at the office,  or a tower defense game with nice graphics and interesting weapons.&lt;br /&gt;&lt;br /&gt;I've finally got more or less of a hang on the use of makefiles, enough that tweaking them a bit doesn't faze me like it used to.  I don't exactly bother to write one from scratch though, as there are still some things I don't fully understand.&lt;br /&gt;&lt;br /&gt;I've also enjoyed using plugins, which are really fantastic as it really lets you do so many more things with the PSP than what it can out-of-the-box.&lt;br /&gt;&lt;br /&gt;So now I've tried to write my own plugin, based on an existing one, but with different features. It's been considered by some extremely difficult to put folders for games in the XMB. And I wholly agree.&lt;br /&gt;&lt;br /&gt;But I've come up with an idea that might work. &lt;br /&gt;&lt;br /&gt;When you place a folder in your /PSP/GAME folder that doesn't contain an EBOOT.PBP (the executable) , the XMB will display it as "Corrupted Data". This is just the way it's designed, zero levels deep.&lt;br /&gt;&lt;br /&gt;There are plugins that allow you to categorize your games, and by placing them in different folders, you can select which category is currently active, and it displays only those games in the xmb.&lt;br /&gt;&lt;br /&gt;These plugins use a button combination or a menu  to select the category.&lt;br /&gt;&lt;br /&gt;I thought of a way to let a folder show up in GAME, by spoofing an EBOOT when the firmware is trying to read the name and icon for the EBOOT.&lt;br /&gt;&lt;br /&gt;The firmware tries to load an EBOOT for each folder it sees in /PSP/GAME. In the empty folder, it tries to load an EBOOT.PBP and as there is none, it fails and tells the firmware that the game is probably corrupt.&lt;br /&gt;&lt;br /&gt;With my plugin in place, the code fails, but the plugin catches it and instead generates a fake EBOOT on the fly using the name of the folder and a default icon stored somewhere accessible, and tells the firmware &lt;em&gt;everything is OK, don't worry, there is an EBOOT here&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Right now this is all the plugin does - it just allows folders to be displayed as EBOOTs in the XMB.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;[screenshot goes here]&lt;/div&gt;&lt;br /&gt;Now comes the hard part - intercepting when the user tries to open my fake EBOOT.&lt;br /&gt;&lt;br /&gt;Normally the firmware tries to load the game, displaying the gameboot intro before launching the game.&lt;br /&gt;&lt;br /&gt;What I need to do is catch the keypress before the firmware does, figure out what EBOOT the user is pointed at, check if it is one of mine, and if so, cancel loading the EBOOT and switch "categories" - folders really - and flush the memory stick cache.&lt;br /&gt;&lt;br /&gt;This is where it gets interesting.&lt;br /&gt;&lt;br /&gt;The PSP firmware is made up of several modules that load other modules as needed.  The vshmain module (?) is the module that displays the top-level menu, the XMB.&lt;br /&gt;&lt;br /&gt;When you select a top level item, vshmain (?) loads the approriate module - game_plugin in my case.&lt;br /&gt;&lt;br /&gt;game_plugin is now responsible for reading the memory stick, drawing the icons, handling the menu.  I'm not sure if it is entirely responsible though, it probably makes calls to other existing modules.&lt;br /&gt;&lt;br /&gt;I makes sense that the game_plugin module contains a subroutine for checking if the user has pressed a button, or acting on button presses.  What I need to do is patch the module to jump to my own code for checking button presses, before I call the original code.&lt;br /&gt;&lt;br /&gt;As of now, I only have a fleeting understanding of how this can be done.  With my previous knowlege of patching ROM code, I have some idea, but this is a 32-bit RISC platform with relocatable code, making things much more difficult for someone from a 8/16-bit fixed code background.  There is probably some mechanism to locate the module's base entry point, and offset from there to some function.&lt;br /&gt;&lt;br /&gt;I don't know how to find that function yet. But I have some ideas.&lt;br /&gt;&lt;br /&gt;Learn MIPS assembly.&lt;br /&gt;&lt;br /&gt;The module loads gameboot.pmf prior to launching the game.  Look for the string gameboot.pmf, and to the code that references it and backtrack until you can find where the button presses are.  Hopefully button polling/testing can be easily identified in assembly. (HAH!) NOPping out code is a time-honored method of isolating code.&lt;br /&gt;&lt;br /&gt;Patch the code somewhere appropriate to jump to a function in my plugin.&lt;br /&gt;&lt;br /&gt;This function needs to know what EBOOT the game_plugin module is currently "looking" at. Even after finding the right place to patch and patching the code, this is much more difficult to do.  Perhaps the module's memory space contains an array of paths, and an index to the current entry.&lt;br /&gt;&lt;br /&gt;Or perhaps there is a function that does this.  With the caching that the XMB implements, this makes things much more difficult.  Perhaps recoding a game_plugin &lt;em&gt;is&lt;/em&gt; easier in the long run.&lt;br /&gt;&lt;br /&gt;One thing fir sure, I would have learned a lot more by the time I'm done with this project, whether it is complete or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-6319551464065553491?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/6319551464065553491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=6319551464065553491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6319551464065553491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6319551464065553491'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/12/plugins-for-psp.html' title='Plugins for the PSP'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-1879611765758302534</id><published>2008-10-14T07:20:00.000-07:00</published><updated>2008-10-14T08:33:16.790-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Dead and Alive</title><content type='html'>Few things that I can really count as strange happen to me.&lt;br /&gt;&lt;br /&gt;I would have ignored the fact that my PSP inexplicably died on me, only to have it suddenly return to life, then intermittently work, and finally start working again. I would have relegated it to &lt;a href="http://vidicon.dandello.net/vidicon.htm"&gt;the perversity of the inanimate&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So it only served to raise the event to even higher levels of mystery when the same thing &lt;a href="http://forums.qj.net/showthread.php?t=144913"&gt;happened to someone else&lt;/a&gt;, at around the same time, and stranger still, to someone sharing my first name.&lt;br /&gt;&lt;br /&gt;I'm just glad that my PSP is back and better (except for that piece of tape holding the LCD backlight flex cable to the connector)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-1879611765758302534?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/1879611765758302534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=1879611765758302534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/1879611765758302534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/1879611765758302534'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/10/dead-and-alive.html' title='Dead and Alive'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-4209431505144710984</id><published>2008-10-02T21:16:00.000-07:00</published><updated>2008-10-02T21:25:40.164-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wiimote'/><title type='text'>WiiMote in Action</title><content type='html'>As you know I got a WiiMote a few months a go for my birthday, but I haven't been using it lately. The lack of buttons makes it difficult to play Final Fantasy X, which is what I'm spending my gaming time on nowadays.&lt;br /&gt;&lt;br /&gt;Well, here's a couple of videos of my WiiMote setup in action. &lt;br /&gt;&lt;br /&gt;I hadn't setup the Wii "sensor" bar I DIY'd when I made these videos, so there's no point n' click action here yet.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/tR00pRBR4Gw&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/tR00pRBR4Gw&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;i&gt;TrackMania Sunrise&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-RDwWVkepUU&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-RDwWVkepUU&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;i&gt;Portal&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-4209431505144710984?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/4209431505144710984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=4209431505144710984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4209431505144710984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4209431505144710984'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/10/wiimote-in-action.html' title='WiiMote in Action'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-3346664294374236803</id><published>2008-10-01T04:26:00.000-07:00</published><updated>2008-10-03T04:00:14.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='PC'/><title type='text'>Doh!</title><content type='html'>Fans of Point-and-click games would do well to be aware that &lt;a href="http://www.brokensword25.com/news/news.htm"&gt;Broken Sword 2.5 is out!&lt;/a&gt; And it's totally free!&lt;br /&gt;&lt;br /&gt;I love point-and-click games (and their precursor, the click-and-type games?) Never mind that I probably haven't solved one yet without the help of a walkthrough.&lt;br /&gt;&lt;br /&gt;In fact, I can't wait to have kids, have them grow up a bit and so I can install a PC-based media center with a 42-inch LCD, (or will OLED be the display of choice in the far future?) WiiMotes and ScummVM installed, and introduce them to Those Games Their Father Played Back In Those Days, encouraging them to play them as they will be the only games installed on the PC, and declaring lazy Saturday afternoons as Family Point-and-Click Time.&lt;br /&gt;&lt;br /&gt;Oh they will hate me.&lt;br /&gt;&lt;br /&gt;When I heard Broken Sword 2.5 even existed, my first thought was -&lt;em&gt; is it ScummVM compatible? Does it use the same engine even?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;My second thought was - &lt;em&gt;if it did, maybe I could play it on my...&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;a href="http://endersoft.blogspot.com/2008/09/woe-is-me-part-deux.html"&gt;PSP...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Doh!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;(&lt;em&gt;The happy music playing in my head slowed to a stop like an audio tape stuck in the mechanism. Audio tapes? How archaic...&lt;/em&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-3346664294374236803?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/3346664294374236803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=3346664294374236803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/3346664294374236803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/3346664294374236803'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/10/doh.html' title='Doh!'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-7780784583298710350</id><published>2008-10-01T03:27:00.000-07:00</published><updated>2008-10-03T04:02:05.005-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Returning Strings from WinAPI in VB.Net</title><content type='html'>I know this has been covered a lot in other places, but the things is, all their examples have failed to work for me. Here I offer another method, one that worked for me.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Declare Auto Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Integer, ByVal lpString As String, ByVal cch As Integer) As Integer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is the usual declaration of the API function GetWindowText. As we know &lt;strong&gt;lpString&lt;/strong&gt; should be marshalled as a LPCSTR, but according to &lt;a href="http://www.devx.com/tips/Tip/15264"&gt;this article&lt;/a&gt;, VB.Net doesn't allow you to specify the marshaling attribute on parameters, and purportedly the above declaration works just fine.&lt;br /&gt;&lt;br /&gt;When I tried this version of the API call, using GetWindowTextLength to determine the length of the string to be filled with spaces before passing to GetWindowText, I ended up with a bunch of non-ASCII characters. When I tried using the MarshalAs attribute, all I got was an empty string of the "correct" length.&lt;br /&gt;&lt;br /&gt;After some exasperation I decided that since the API was expecting a pointer to a string, I might as well give one, or the closest to one, a byte array. The declaration was then:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Declare Auto Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Integer, ByVal lpByteArray As Byte(), ByVal cch As Integer) As Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;Then:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Dim Ret As Integer&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:85%;"&gt;sByte As Byte() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Ret = GetWindowTextLength(hwnd) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;If Ret &gt; 0 Then &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;ReDim sByte(Ret + 1) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;lret = GetWindowText(hwnd, sByte, Ret + 1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Return System.Text.Encoding.ASCII.GetString(sByte)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;End if&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;Just as a sanity check (and before I found the Encoding.ASCII.GetString function), I stepped through the function to see what was being stored in sByte. They looked to be ASCII-flavored bytes (mmmm) so I looked for a function to convert them to a string, &lt;em&gt;e&lt;/em&gt;&lt;/span&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;em&gt;t voila!&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;I was actually expecting to be required to pass the first member of the byte array as a parameter to GetWindowText, but apparently .Net did the math and converted the byte array into a pointer of sorts.&lt;br /&gt;&lt;br /&gt;I must admit I'm a bit new to .Net (two years of actual usage) and newer to managed and unmanaged code mixing, so I can't tell you that this is the right way to do it, but this method worked where others failed.&lt;br /&gt;&lt;br /&gt;I'm on .NET 2003, in case you were wondering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-7780784583298710350?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/7780784583298710350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=7780784583298710350' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7780784583298710350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7780784583298710350'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/10/returning-strings-from-winapi-in-vbnet.html' title='Returning Strings from WinAPI in VB.Net'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-772350010039267881</id><published>2008-09-30T00:36:00.001-07:00</published><updated>2008-10-01T06:26:42.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><title type='text'>Woe is me - part deux</title><content type='html'>It's official - my PSP is really bricked.&lt;br /&gt;&lt;br /&gt;I tried reviving it with Despertar del Cementerio, and initially it looked fine - the DC7 menu booted up, I selected the option to install firmware 4.01 M33, it went through the motions of formatting flash rom and installing the firmware.&lt;br /&gt;&lt;br /&gt;But when it was all done I rebooted with a normal battery and it was still dead. Even trying to boot into the firmware off the memory stick (Test M33 option) produced the same results.&lt;br /&gt;&lt;br /&gt;I have repartitioned, regen'ed the IDStorage, restored the NAND from corly's "clean" flashdump, all to no avail.&lt;br /&gt;&lt;br /&gt;I have a brain-dead PSP. The heart works, but the head is empty. I'm still thinking of an explanation why it quit on me like that, all of a sudden.&lt;br /&gt;&lt;br /&gt;I guess now I have to decide to give it a new lease on life, or let it go.&lt;br /&gt;&lt;br /&gt;There is the third option to gut it and make a crude display adapter for it, or turn it into a digital frame. Good luck with that&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-772350010039267881?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/772350010039267881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=772350010039267881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/772350010039267881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/772350010039267881'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/09/woe-is-me-part-deux.html' title='Woe is me - part deux'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-5043553329336935932</id><published>2008-09-29T05:11:00.000-07:00</published><updated>2008-09-29T06:27:31.367-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Woe is me</title><content type='html'>Yesterday my girlfriend was towing me around while looking for a new pair of shoes, and while we were in one store, I plopped down on a sofa and whipped out my almost 1-year old PSP.&lt;br /&gt;&lt;br /&gt;I was playing N+, and all of a sudden the unit just... died.&lt;br /&gt;&lt;br /&gt;I thought, &lt;em&gt;ok, it's just the battery, but I just charged it, so maybe its that RemoteJoyLite plugin -- it's always crashing --, I'll just do cold boot&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;So I tried pulling the power switch up for ten seconds. The power LED turns green for a few seconds, then dies. I try it again. The same thing. I have never seen a bricked PSP before, but I hope that that is all it is - a corrupt firmware.&lt;br /&gt;&lt;br /&gt;When I got home I try to plug in the AC adapter, to no avail. I went as far as disassembling my PSP. I got as far as removing the LCD frame, but it was almost morning and my girlfriend has work early, so after a few tries I finally got the PSP back together.&lt;br /&gt;&lt;br /&gt;Right now I have my PSP with me, at the office. I was hoping to borrow somebody's PSP and make a Pandora battery.&lt;br /&gt;&lt;br /&gt;I already have the magic memstick, so unbricking is my last course of action before having the unit fixed (which will cost me the half price of second-hand PSP phat, at least, that's what replacing the motherboard will cost me)&lt;br /&gt;&lt;br /&gt;But in my rush not to get to work late, it seems I left the magic memstick at home, bugger that.&lt;br /&gt;&lt;br /&gt;The thing is, I haved dropped my PSP (from about 1 foot), and it did fall a bit hard -- hard enough to somehow get the battery cover lock out, but still leave the whole PSP &lt;em&gt;and &lt;/em&gt;battery cover lock mechanism intact.&lt;br /&gt;&lt;br /&gt;I really wouldn't want to lose my PSP. It's almost a part of me, and 1 year isn't good enough for me to say goodbye to it yet. If I ever resurrect it I promise never to drop it, ever again.&lt;br /&gt;&lt;br /&gt;I feel guilty for shelling out some money to fix it after my girlfriend has repeatedly told me how badly I treat it, I almost feel like I &lt;em&gt;don't &lt;/em&gt;deserve to have it fixed.&lt;br /&gt;&lt;br /&gt;But leaving it broken just doesn't feel right... and if it could never be fixed, I would at least like to scrap the LCD and build a driver for it, turn it into a digital frame or a mini monitor. Good luck with that though - Alexan doesn't even stock up on PICs, much less FPGAs.&lt;br /&gt;&lt;br /&gt;If anyone has a phat compatible motherboard to sell (for cheap), let me know?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-5043553329336935932?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/5043553329336935932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=5043553329336935932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/5043553329336935932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/5043553329336935932'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/09/woe-is-me.html' title='Woe is me'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-4983776096995697465</id><published>2008-07-15T07:02:00.000-07:00</published><updated>2008-10-03T03:53:07.841-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='Wiimote'/><title type='text'>My new toy</title><content type='html'>My girlfriend got me an early gift for my birthday.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cise.ufl.edu/~brossen/ve/images/wiimote.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Yeah. No. Not a Wii, just the Wiimote.&lt;br /&gt;&lt;br /&gt;I've been pining for one for the past few months, comparing everything to the price of a Wiimote, and she finally caved in and decided to get me one.&lt;br /&gt;&lt;br /&gt;She probably didn't see the point in getting a Wiimote without the console, but I've been watching those videos and drooling with envy at the all geeky things you can do with a Wiimote and a PC with a Bluetooth adapter.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing the damn thing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;My Bluetooth adapter is the cheapo Billionton BT-dongle that seems to do the job well enough.&lt;br /&gt;&lt;br /&gt;It comes with IVT BlueSoleil drivers. My first try with this set of drivers kept me awake for most of the morning. The Wiimote was being detected, but GlovePIE and Wiinmote refused to detect it.&lt;br /&gt;&lt;br /&gt;I got a copy of the BlueSoleil drivers v1.6.2.1, and these worked fine, but since my dongle was detected as an unlicensed device, I was only limited to 5MB data transfer before needing to restart BlueTooth.&lt;br /&gt;&lt;br /&gt;GlovePIE and Wiinmote worked perfectly here, and before long I was playing TrackMania Sunrise with the Wiimote as a steering wheel,&lt;br /&gt;and Portal with some difficulty.&lt;br /&gt;&lt;br /&gt;Before long I exceeded the 5MB limit and my game of Portal was abruptly halted due to lack of control. This wouldn't do.&lt;br /&gt;&lt;br /&gt;I finally tried going back to a newly downloaded copy of v1.6.1.4, and now BlueSoleil is not complaining about about an unlicensed device, while GlovePIE continue to work happily.&lt;br /&gt;&lt;br /&gt;To get everything working you will need:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A BlueTooth dongle (BillionTon was used here)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bluetooth drivers (BlueSoleil v1.6.1.4 was used here)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;GlovePIE v???&lt;/li&gt;&lt;br /&gt;&lt;li&gt;PPPJoy&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some patience&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I'll not post complete instuctions on how to set things up here. Google can help you find that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-4983776096995697465?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/4983776096995697465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=4983776096995697465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4983776096995697465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4983776096995697465'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/07/blog-post.html' title='My new toy'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-2699210028854364349</id><published>2008-06-10T18:26:00.000-07:00</published><updated>2008-10-03T03:54:16.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='SNES'/><title type='text'>Nostalgia Hack - Super UFO</title><content type='html'>&lt;div style="TEXT-ALIGN: center"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NTFyN8Kn724/SE8qmjQLR3I/AAAAAAAAAB8/kK4bpooGw5o/s1600-h/ufo1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5210430135677437810" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_NTFyN8Kn724/SE8qmjQLR3I/AAAAAAAAAB8/kK4bpooGw5o/s320/ufo1.JPG" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NTFyN8Kn724/SE8qv97hoAI/AAAAAAAAACE/u3bS5Vxb9hs/s1600-h/ufo2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5210430297457401858" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_NTFyN8Kn724/SE8qv97hoAI/AAAAAAAAACE/u3bS5Vxb9hs/s320/ufo2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;This is a fairly useless hack - it simply makes the copier ROM playable on an emulator.&lt;br /&gt;&lt;br /&gt;I did it for the nostalgia - the SNES unit my brother bought had a Super UFO. Needless to say, many summer nights were spent loading up games from this copier's menu.&lt;br /&gt;&lt;br /&gt;What I did was basically NOP out instructions that were causing infinite loops, these were most likely disk access checks. I was also having trouble getting the sound to work until I discovered a routine that for some reason was copying the sound init code to non-existant memory (probably on-board custom RAM)&lt;br /&gt;&lt;br /&gt;Strangely enough the code wasn't exactly self-modifying and could have been called from ROM instead, which is what I did.&lt;br /&gt;&lt;br /&gt;The patched ROM doesn't play music initially for some reason - I might have NOPped out a bit more than needed - but the music can be set through the menu.&lt;br /&gt;&lt;br /&gt;As I said, this is a fairly useless hack. If you never owned the Super UFO you probably won't appreciate this.&lt;br /&gt;&lt;br /&gt;You nostalgic nerds can &lt;a href="http://www.sendspace.com/file/afn08e"&gt;&lt;/a&gt;&lt;a href="http://www.sendspace.com/file/afn08e"&gt;download the patch and ROM&lt;/a&gt; here.&lt;br /&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;&lt;br /&gt;Found the problem why it wasn't working on Snes9xTYL for the PSP. Looks like there was a difference in what value was returned when reading from an undefined port in the different emulator versions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-2699210028854364349?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/2699210028854364349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=2699210028854364349' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/2699210028854364349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/2699210028854364349'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/06/nostalgia-hack-super-ufo.html' title='Nostalgia Hack - Super UFO'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NTFyN8Kn724/SE8qmjQLR3I/AAAAAAAAAB8/kK4bpooGw5o/s72-c/ufo1.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-6985932605906162921</id><published>2008-03-20T10:41:00.000-07:00</published><updated>2008-10-01T06:30:05.514-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>LCD Monitor Troubles</title><content type='html'>Remember my 19" Hanspree LCD monitor I got last Christmas?&lt;br /&gt;&lt;br /&gt;Just today I noticed that it was developing horizontal streaks across the screen towards the right especially during sharp brightness level changes.&lt;br /&gt;&lt;br /&gt;I was at work when Frans told me it was getting really bad, so I Googled and found an article that said frame rates above 60Hz weren't good for LCDs, so I had her reset it from 75 to 60. It seemed to fix it a little bit, but the streaks were still there.&lt;br /&gt;&lt;br /&gt;In desperation I asked her to secure the monitor cable at the back of the LCD and the PC. She did so for the back of the LCD, and the problem went away.&lt;br /&gt;&lt;br /&gt;Or so I thought...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The source of the problem was a loose AC power cord. Some arcing was probably messing up the timing circuits and causing the streaks. After securing the power cord, the screen was back to normal.&lt;br /&gt;&lt;br /&gt;Phew&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-6985932605906162921?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/6985932605906162921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=6985932605906162921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6985932605906162921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6985932605906162921'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/03/lcd-monitor-troubles.html' title='LCD Monitor Troubles'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-4590633092553341827</id><published>2008-03-20T06:41:00.000-07:00</published><updated>2008-03-20T06:50:39.277-07:00</updated><title type='text'>Steampunk Calculator</title><content type='html'>This isn't technically steampunk, nor was it invented in Victorian-era England, but with a few brass trimmings, it would fit right in. And...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vcalc.net/images2/curta.gif"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://www.vcalc.net/images2/curta.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;...It could fit right in your pocket!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Curta01.JPG/250px-Curta01.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Curta01.JPG/250px-Curta01.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-4590633092553341827?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/4590633092553341827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=4590633092553341827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4590633092553341827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4590633092553341827'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/03/steampunk-calculator.html' title='Steampunk Calculator'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-6964729588257121525</id><published>2008-03-14T23:03:00.001-07:00</published><updated>2008-10-03T03:55:41.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='NES'/><title type='text'>Willow Hack - Almost There</title><content type='html'>The main part of this hack - setting aside some SRAM to save to and load from, the actual routines for accomplishing this, and the basic interface to select from 3 slots where to save or load - is complete.&lt;br /&gt;&lt;br /&gt;I still need to write a routine that displays Willow's stats for each save game, and do something better than SELECT+B in order to access the save menu. There is also a bug where the background music isn't restored after leaving the save menu.&lt;br /&gt;&lt;br /&gt;I also did a few kludges to make things work, such as shamelessly copy/pasting some code from other parts of the code without knowing exactly what the function calls did. Seems to work fine though.&lt;br /&gt;&lt;br /&gt;I also need to check if I've overwritten any code that shouldn't be. Fortunately (I noticed) the assembler does export symbols from the source. This means that any labels I've used in the source code are noted down along with their memory locations in the ROM. By placing labels at the end of functions and data tables, I can compare with the original disassembly and find out if I've overrun any code.&lt;br /&gt;&lt;br /&gt;I also noticed and rooted out a little bug where the stack head kept moving up after selecting continue. Turns out the original code forced a stack reset which I failed to include (yes, copy/paste). Although there seemed to be no ill effects right off, it might have caused problems after the player continued 20 or so times.&lt;br /&gt;&lt;br /&gt;However aside from the savegame text and a few bugs, there are a few things I want to add before I call this patch finished and release it into the world.&lt;br /&gt;&lt;br /&gt;I want to add the name of the area into the save game, just so the player knows more-or-less where he left off, and a percent complete value would be nice. I suppose the calculation for percent completed would be computed from the items Willow has acquired. Then there's a minor hack to the saver/loader routines which should use a checksum to verify if the savegame is valid or corrupt.&lt;br /&gt;&lt;br /&gt;One last thing, I'd like to add my name into the credits on the PRESS START screen, but the data is tightly packed with no free memory right after it, so my last hack will entail either moving that bit of data into some place more agreeable, or add and extend the "string" writing code to allow jumping to another location in memory. Right now I've just shamelessly replaced the TM &amp;amp; © "LUCASFILM" with "ENDERSOFT".&lt;br /&gt;&lt;br /&gt;For now, here's what the selection screen will look like. The data is actually a mock-up - no values are read from SRAM - but the screen is actually running off the emulator (i.e. no Photoshop tricks)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NTFyN8Kn724/R9tm5zJ9keI/AAAAAAAAAB0/foynak2YE-8/s1600-h/loadscreen1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5177845339763085794" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_NTFyN8Kn724/R9tm5zJ9keI/AAAAAAAAAB0/foynak2YE-8/s320/loadscreen1.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-6964729588257121525?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/6964729588257121525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=6964729588257121525' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6964729588257121525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6964729588257121525'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/03/willow-hack-almost-there.html' title='Willow Hack - Almost There'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NTFyN8Kn724/R9tm5zJ9keI/AAAAAAAAAB0/foynak2YE-8/s72-c/loadscreen1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-4418153628465183188</id><published>2008-03-10T01:19:00.000-07:00</published><updated>2008-10-03T03:56:07.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='NES'/><title type='text'>Willow Hack News</title><content type='html'>I'm in the middle of unraveling the code to draw the backgrounds used for the START and PASSWORD screens.&lt;br /&gt;&lt;br /&gt;Interestingly, it uses the same routines for drawing the in-game backgrounds. This is the background you see when walking through the game as Willow.&lt;br /&gt;&lt;br /&gt;Now this routine uses two variables to specify what background is loaded to be scrolled into the screen while Willow walks to the edge of the visible screen.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Each variable seems to change independent of each other&lt;/li&gt;&lt;li&gt;One variable changes if Willow walks out the top/bottom of the screen, I designate this as mapY.&lt;/li&gt;&lt;li&gt;The other variable changes if Willow walks out left/right of the screen, I designate this as mapX.&lt;/li&gt;&lt;li&gt;The variables don't seem to be a direct index, as useful values seem to be in the 1A-1F range.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The "coordinates" for the START screen is (1A,1E). I'm not sure where the password screen is stored yet. When switching to the password screen, no backgrounds are drawn (i.e. the code for drawing backgrounds is not called). Instead, the code merely switches the active nametable implying that the password screen is already drawn into memory.&lt;br /&gt;&lt;br /&gt;So far I've determined that these values decode into a memory address where the code picks up another byte that decodes into &lt;em&gt;another &lt;/em&gt;address, which is where the char which will be copied to the nametable is stored. I still haven't fully decoded the routine, but it's another step towards finalization.&lt;br /&gt;&lt;br /&gt;I think it uses some form of compression in order to save space, as the routine seems to read from certain locations multiple times, instead of simple packed data. It is probably RLE, which would be ideal given the repetative nature of the backgrounds.&lt;br /&gt;&lt;br /&gt;Meanwhile, I think I should focus on what can be done, which is implementing the load/save screens - sans backgrounds - and adding support for multiple saves.&lt;br /&gt;&lt;br /&gt;I just feel so close to understanding how it works that I don't want to let it by.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-4418153628465183188?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/4418153628465183188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=4418153628465183188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4418153628465183188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/4418153628465183188'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/03/willow-hack-news.html' title='Willow Hack News'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-5061129296066604948</id><published>2008-03-05T05:23:00.000-08:00</published><updated>2008-03-05T05:36:43.042-08:00</updated><title type='text'>Willow Hack: Update</title><content type='html'>Remember how I said I wanted a feature to "skip" the dialog in WIllow?  I really meant, make it print faster. Well, I was looking through the code today, trying to make sense of it all when I came upon some code that seemed to be reading the joystick in the dialog routine.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Aha! &lt;/em&gt;I thought, and noticed that the bit being tested was the one for the up button.  That's when I "remembered" that in order to speed up the dialog you had to hold Up on the D-Pad.  I thought this "Up" business to skip dialog was a bit silly when it's almost universally held that the B button was for "cancelling".  So I remapped it to B.&lt;br /&gt;&lt;br /&gt;I also stumbled upon how it draws text to the screen, and isolated a function call that seems to draw the background.&lt;br /&gt;&lt;br /&gt;A little more work will be needed disassembling all this twisting code before I can figure out how it does the backgrounds.   When that's done, I can be on my way to writing the Load / Save screens, and making this Proof-of-concept a full working patch!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-5061129296066604948?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/5061129296066604948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=5061129296066604948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/5061129296066604948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/5061129296066604948'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/03/willow-hack-update.html' title='Willow Hack: Update'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-3173045895985455096</id><published>2008-02-29T01:38:00.000-08:00</published><updated>2008-10-03T03:55:30.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='NES'/><title type='text'>Willow Hack PoC complete!</title><content type='html'>My Proof-of-concept hack is done, and I now have a Willow ROM that allows saving current progress by pressing SELECT-B and resuming the saved game by selecting PASS WORD in the opening screen or CONTINUE after losing all your HP.&lt;br /&gt;&lt;br /&gt;So far the hack works well on FCEUltra. I tried on NesterJ for the PSP but it crashed every time I tried to save my progress. Maybe it doesn't have support for battery backed RAM?&lt;br /&gt;&lt;br /&gt;On a side note I called in sick, because I'm feeling really lousy, but apparently not enough to stop me from sitting in front of my PC for 6 hours straight.&lt;br /&gt;&lt;br /&gt;Right now I'd like to change the intro screen text to "CONTINUE" instead of "PASS WORD", but I really should be getting some rest.&lt;br /&gt;&lt;br /&gt;Once I figure out how the screens are set up and how text is drawn I'd like to put int a real save game selection screen, with allowance for 3 save games, showing info about each save game.&lt;br /&gt;&lt;br /&gt;UPDATE: Just tested it on NesterJ version 1.20 beta, and it works perfectly! The version that the hack wasn't working with was 1.1 RM.&lt;br /&gt;&lt;br /&gt;Download the patch and source &lt;a href="http://rapidshare.com/files/96100577/WillowPatch.zip.html"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-3173045895985455096?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/3173045895985455096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=3173045895985455096' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/3173045895985455096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/3173045895985455096'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/02/willow-hack-poc-complete.html' title='Willow Hack PoC complete!'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-3474539558413793483</id><published>2008-02-28T02:26:00.000-08:00</published><updated>2008-10-03T03:51:52.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='NES'/><title type='text'>Willow Hack News</title><content type='html'>I'm using a cross assembler for the SNES, but since the 65816 processor mostly extends the 6502, getting it to work for this project was easy.&lt;br /&gt;&lt;br /&gt;Well, mostly.&lt;br /&gt;&lt;br /&gt;I spent most of the morning trying to get the assembler to produce a valid IPS file, but I'm glad I did.&lt;br /&gt;&lt;br /&gt;The samples I downloaded for compiling SNES patches from asm files had scripts for checking addresses when creating patch files.&lt;br /&gt;&lt;br /&gt;I was getting symbol not found errors when trying to subtract a hex address from a variable, but had no problems adding (or any other operation, I suppose).&lt;br /&gt;&lt;br /&gt;The error went away when I decided to use base 10 to represent the value I was trying to subtract.&lt;br /&gt;&lt;br /&gt;So, instead of&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;@STEP2 = @STEP1 - $C000&lt;/span&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;It was&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;@STEP2 = @STEP1 - 49152&lt;/span&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;I decided to hijack the password routine and copy a bit of code from the "new game" routine. For now I just loaded up the SRAM with some default values.&lt;br /&gt;&lt;br /&gt;It almost worked.&lt;br /&gt;&lt;br /&gt;I had a black screen with Willow in it. Switching to inventory and back brought the screen colors to life but the palette seems messed up, though I think I have some idea of how to fix this.&lt;br /&gt;&lt;br /&gt;With the code analysis practically complete and most critical variables identified, I can now focus on writing code. The assembler/patcher toolchain makes things much easier as all I have to do is edit the assembly code and re-run my compiler script.&lt;br /&gt;&lt;br /&gt;Already I'm halfway to my goal of a Proof-of-concept hack, with a full hack not too far off.&lt;br /&gt;&lt;br /&gt;Although state-saves have all but made this hack useless, it's been a fun ride. Maybe I'll put a little how-to together, for the sake of posterity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-3474539558413793483?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/3474539558413793483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=3474539558413793483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/3474539558413793483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/3474539558413793483'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/02/willow-hack-news.html' title='Willow Hack News'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-368115606166881420</id><published>2008-02-26T06:44:00.000-08:00</published><updated>2008-10-03T03:55:16.427-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='NES'/><title type='text'>Useless Hacks Update</title><content type='html'>I have managed to isolate most of the code that takes up the password entry, testing and stats loading for the NES game Willow. I've also identified where stats are saved in memory, how Willow's map and screen position is stored, and the all-important events and inventory flags.&lt;br /&gt;&lt;br /&gt;Coding a replacement function that will load data from SRAM should be pretty easy, and free up a lot of ROM space in the process.&lt;br /&gt;&lt;br /&gt;I have yet to figure out how the screens are loaded, so I can load my own custom save game screen, but that's not really part of the Proof of Concept hack.&lt;br /&gt;&lt;br /&gt;Just to make things interesting I'll change the PASS WORD text into LOAD GAME.&lt;br /&gt;&lt;br /&gt;That's the easy part.&lt;br /&gt;&lt;br /&gt;Saving for my PoC requires me to tap into the main game joystick routine and save everything to RAM once a combinaion (SELECT+B) is pressed. However in a real hack it'd be nice to have save points.&lt;br /&gt;&lt;br /&gt;Adding code to a NES ROM is a bit more problematic because of it's memory restrictions and the memory mappers designed to handle this.&lt;br /&gt;&lt;br /&gt;You can't just add code to another bank if the original bank doesn't have any space to give up. Since only one bank is mapped at any time, you'd have to push some registers or save in RAM and switch banks to run code from another bank.&lt;br /&gt;&lt;br /&gt;I hope to do the loading code tomorrow, that is, if Patapon doesn't distract me long enough.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-368115606166881420?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/368115606166881420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=368115606166881420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/368115606166881420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/368115606166881420'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/02/useless-hacks-update.html' title='Useless Hacks Update'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-7019152416747092980</id><published>2008-02-26T06:20:00.000-08:00</published><updated>2008-10-03T03:54:36.902-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='musings'/><title type='text'>Last farewell</title><content type='html'>A faint sensation, not altogether unpleasant, a feeling of coldness deep inside, while bathed in the warmth of a setting sun, while looking out upon a tower white cliff to a golden orange horizon, with feathery clouds lost in the distance.&lt;br /&gt;&lt;br /&gt;A sadness that resembled a deep yearning for something that would, now, be forever out of reach, threatening to drown me in a torrent of tears. I was borne aloft only by the unending beauty of all that I had seen and experienced in just my two visits to this world, and yes, this beauty also brought tears to my eyes.&lt;br /&gt;&lt;br /&gt;I felt Aslan's hot breath upon my back as I gazed for one last time upon my beloved Narnia.&lt;br /&gt;&lt;br /&gt;It was bittersweet... yet somehow... perfect.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;The last sentence was paraphrased from an interview with Anna Popplewell, regarding the film Prince Caspian being her last for The Chronicles of Narnia, and was the inspiration for this entry.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-7019152416747092980?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/7019152416747092980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=7019152416747092980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7019152416747092980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7019152416747092980'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/02/last-farewell.html' title='Last farewell'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-7546330767403160310</id><published>2008-02-06T09:23:00.000-08:00</published><updated>2008-10-03T04:19:01.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NES'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>NES Hacks: Coin Tricks</title><content type='html'>Here in the Philippines, we had the Japanese version of the Nintendo console, known as the Family Computer (aka Famicon), instead of the dull-grey clunky unit with excessively large cartridges known as the Nintendo Entertainment System.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/5/54/Famicom.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://upload.wikimedia.org/wikipedia/commons/5/54/Famicom.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Famicon design featured joysticks that were permanently connected to the console and had a port at the front which was used for the optional light gun. This port was usually covered by a red plastic cap when not in use.&lt;br /&gt;&lt;br /&gt;There was something mysterious about that port. It has little pins in it, and wat I remember is that my uncles and cousins would take a 10 centavo coin and run it across the ports pins with Contra plugged into the game slot and the unit turned on. After a few tries they would get a level select screen.&lt;br /&gt;&lt;br /&gt;It's a wonder how anybody figured out how to do this trick, let alone that it worked at all. The regular way to do this utilizes a variation of the Konami Code.&lt;/p&gt;&lt;p align="left"&gt;It would be real nice if someone could come up with a solid explanation of why it works.  Unless someone already has, and I haven't found the right keywords to google it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-7546330767403160310?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/7546330767403160310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=7546330767403160310' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7546330767403160310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7546330767403160310'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/02/other-nostalgia.html' title='NES Hacks: Coin Tricks'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-257981460490441578</id><published>2008-02-06T05:06:00.001-08:00</published><updated>2008-02-06T07:58:15.765-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><title type='text'>Useless Hacks: Willow on the NES</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Willow_(video_game)"&gt;Willow&lt;/a&gt; was the first RPG I played. From then on I was hooked.&lt;br /&gt;&lt;br /&gt;It was developed by Capcom and based on George Lucas' movie of the same name, though with a somewhat different plot. Despite (or because of) this its been hailed as one of the few movie-to-game translations that are arguably better than their silverscreen counterpart.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://hg101.classicgaming.gamespy.com/willow/willownes-8.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://hg101.classicgaming.gamespy.com/willow/willownes-8.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;I didn't own the cart, I borrowed it from a neighbor. It was the Japanese version, and although it did not use any kanji, my Japanese skills were non-existant back then, leaving much of the plot to guess, making most of the gameplay trial and error. It was very time consuming moving back and forth between towns, talking to every NPC more than twice, just to get the story to move forward.&lt;/p&gt;&lt;p&gt;The thing was, and I still had a blast playing it. The background song during password entry would play in my mind for some time (this was probably because it took so long to enter the password, being in Japanese) .&lt;br /&gt;&lt;br /&gt;Recently I took up playing the game in English, just for the heck of it, and reliving fond memories of childhood.&lt;br /&gt;&lt;br /&gt;I read somewhere that the password entry system was used in order to cut costs and development time. I believe the original plan was to have the data battery backed, just as Zelda did.&lt;/p&gt;&lt;p&gt;This is where the hacking comes in. I thought, why not add a save game feature to Willow?&lt;/p&gt;&lt;p&gt;Now, in a real NES the cart would have a set of RAM with batteries attached. It would be just another address accessible by memory. In an emulator, a header in the .nes file tells the emu that it has battery backed RAM, by convention this starts at $6000.&lt;/p&gt;&lt;p&gt;So, just modify the header to include battery backed RAM and poof! It became Koko Crunch!&lt;/p&gt;&lt;p&gt;When the emulator loads the ROM it looks for a corresponding file in the battery-backed-data folder, usually called SAVE or something. Using FCEUltra, it looks just like a raw dump of $6000 - $7FFF. For efficiency, the emulator only updates this file whenever another game is loaded or the emulator shuts down.&lt;/p&gt;&lt;p&gt;I tested this with your typical "Hello World!" text hexed into the RAM dump and booted the ROM. Using FCEU's debugging capabilities, I looked into RAM memory and there it was.&lt;/p&gt;&lt;p&gt;That was the easy part.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;For a Proof of Concept Hack:&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Modify the header to make it have battery-backed RAM. (Done) &lt;/li&gt;&lt;li&gt;Find where the stats are located. &lt;/li&gt;&lt;li&gt;Redirect the password routine to copy battery-backed RAM to game stats. &lt;/li&gt;&lt;li&gt;Implement a hack in the game joytick routine to detect an unused button combination (Select-B?) and jump to a routine that saves current stats into battery-backed RAM. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For a complete hack a load and save screen should be implmented, and multiple save slots would be nice.&lt;/p&gt;&lt;p&gt;So far I've found where the password is checked, but nothing too in-depth as I am currently disassembling from the emulator. I've also found the main game joystick routine, so I should be able to insert a jump to my own routine to trap the special button combination for the PoC.&lt;/p&gt;&lt;p&gt;Hopefully I can insert the needed code and (later on) screens without having to expand the ROM.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-257981460490441578?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/257981460490441578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=257981460490441578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/257981460490441578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/257981460490441578'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/02/useless-hacks-willow-on-nes.html' title='Useless Hacks: Willow on the NES'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-7476093097931938418</id><published>2008-01-30T21:35:00.000-08:00</published><updated>2008-10-03T06:23:58.278-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Some Sharepoint Stuff</title><content type='html'>&lt;span style="font-size:+0;"&gt;In my real job, I do a bit of Sharepoint support, not much development, so I don't really get to work with the dotNet side of things.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I do get to work with the database, which gives quite a bit of insight on how Sharepoint works internally.&lt;br /&gt;&lt;br /&gt;One of the things stored in the Sharepoint database is the individual settings for each webpart.&lt;br /&gt;&lt;br /&gt;Now, our client has a Sharepoint based site, with some custom dotNet stuff thrown into the defaut.aspx of the template's web Homepage. This Homepage really gives us headaches because some users have the ability to close webparts. This could be easily fixed by getting into the Modify view, but something with the additional code prevents Modify view from working.&lt;br /&gt;&lt;br /&gt;What happens is when you place the web in Modify mode, the browser gets stuck and stops responding, and CPU usage goes up. I've debugged it and partially traced it to an infinite loop in the resize functions in Sharepoint's Javascript code.&lt;br /&gt;&lt;br /&gt;I'm not too eager just yet to go messing around with the dotNet code, as some loaded controls might be involved in messing up the page's DOM heirarchy or something that could cause an infinite loop.&lt;br /&gt;&lt;br /&gt;To restore the missing webpart, we have a backup default.aspx of the vanilla Sharepoint web Hompage which we use to temporarily replace the dotNet-messed-up one.&lt;br /&gt;&lt;br /&gt;With the vanilla page in place we can safely call Modify mode and restore the webpart.&lt;br /&gt;&lt;br /&gt;Now I was asked how we could prevent users from closing the webpart accidentally, and one of the things that came up was to disable the close button. This can only be done in Modify mode, which requires the vanilla page, which requires that no one is using the site, which can only be done during non-business hours.&lt;br /&gt;&lt;br /&gt;With a global user base, and a shift nearly opposite to the business users, the window where we can use the vanilla page to do our stuff is only 2-3 hours. Coupled with the fact that there are hundreds of sites to change, it begins to be impractical.&lt;br /&gt;&lt;br /&gt;So with some determination I set out to find where Sharepoint stored the settings for webparts, and the field &lt;strong&gt;tp_AllUsersProperties&lt;/strong&gt; seemed to invite further investigation. It's an image field, used to store an arbitrarily large binary value. Here is what I have so far:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;"Header" - Always present: Doesn't seem to change&lt;/strong&gt;&lt;br /&gt;0105 0000 0002 2A00 4A00 2900 033D 0000 022A 0049 0029 0003 3E00 0001&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"Separator" - Seems to separate entities&lt;/strong&gt;&lt;br /&gt;0F01&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"Close Disabled" - Present if "Allow Close" is unchecked.&lt;/strong&gt;&lt;br /&gt;15 0029 0003 4800&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"Zone Change Disabled" - Present if "Allow Zone Change" is unchecked&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2B 0029 0003 4800&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"Minimise Disabled" - Present if "Allow Minimise" is unchecked.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;16 0029 0003 4800&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;Description - Text&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;02 0029 0003 FFFF nn &lt;ascii-encoded&gt;&lt;/ASCII-ENCODED&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;nn is the length of the text in bytes, no null termination &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;&lt;strong&gt;Detail Link - URL&lt;br /&gt;&lt;/strong&gt;1A 0029 0003 FFFF nn &lt;ascii-encoded&gt;&lt;br /&gt;&lt;br /&gt;nn is the length of the text in bytes, no null termination&lt;br /&gt;&lt;br /&gt;&lt;/ASCII-ENCODED&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;Help Link - URL&lt;br /&gt;&lt;/strong&gt;1B 0029 0003 FFFF nn &lt;ascii-encoded&gt;&lt;br /&gt;&lt;br /&gt;nn is the length of the text in bytes, no null termination&lt;br /&gt;&lt;br /&gt;&lt;/ASCII-ENCODED&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;Icon (Small) - Image URL&lt;br /&gt;&lt;/strong&gt;1F 0029 0003 FFFF nn &lt;ascii-encoded&gt;&lt;br /&gt;&lt;br /&gt;nn is the length of the text in bytes, no null termination&lt;br /&gt;&lt;br /&gt;&lt;/ASCII-ENCODED&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;Missing Assembly - Text&lt;br /&gt;&lt;/strong&gt;27 0029 0003 FFFF nn &lt;ascii-encoded&gt;&lt;br /&gt;&lt;br /&gt;nn is the length of the text in bytes, no null termination&lt;br /&gt;&lt;br /&gt;&lt;/ASCII-ENCODED&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;Icon (Large) - Image URL&lt;br /&gt;&lt;/strong&gt;20 0029 0003 FFFF nn &lt;ascii-encoded&gt;&lt;br /&gt;&lt;br /&gt;nn is the length of the text in bytes, no null termination &lt;/ASCII-ENCODED&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;&lt;strong&gt;"EOF" - Always appears at the end&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;0F0F&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;It only seems to encode the Advanced Settings.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If it is null, default settings are used when in Modify mode.&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;If no text entities are defined, there must be at least one text entity before the EOF marker. The entity can be any text entity such as Detail but it should be truncated as:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;1A 0029 00&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;each entity is followed by the separator, unless it is the last entity, where is will be followed by the EOF marker.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;If entities have an identifier (first byte), a robust parser should be able to read the entities even if they were written in any order, unless it expects an order in which they are written.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;nn is only a byte wide so the maximum number of characters in the text entities is 255.&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Having incorrect values results in an error with Sharepoint not being able to "serialize" the webpart.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;I have no idea what the recurring values "0029 0003 FFFF" mean. Changing them results in the same error as above.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I haven't tried this on another Sharepoint, or across multiple sites.&lt;br /&gt;&lt;br /&gt;You should join tp_PagerUrlId to the Docs table in order to find the page that the webpart is on.&lt;br /&gt;&lt;br /&gt;tp_WebPartId ias actually a GUID of a hash of the webpart name. See about that &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2231193&amp;amp;SiteID=1"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As we are looking to eliminate the ability to Modify I've since moved on to more simpler Javascript to hide the webparts Modify buttons.&lt;br /&gt;&lt;br /&gt;Anyway, I hope this is useful to somebody.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-7476093097931938418?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/7476093097931938418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=7476093097931938418' title='45 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7476093097931938418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7476093097931938418'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/01/some-sharepoint-stuff.html' title='Some Sharepoint Stuff'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>45</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-540618531552139286</id><published>2008-01-23T04:37:00.000-08:00</published><updated>2008-10-03T03:49:09.188-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>PSP-Dev Woes</title><content type='html'>Today was by far the most painless install of the psp toolchain I ever did.  While this is only the second time, and I hope I won't have to do it again soon, I did learn a few things along the way.&lt;br /&gt;&lt;br /&gt;The first thing I did was to jot down exactly how I installed the toolchain and what problems popped up, so I wouldn't have to rely on my now-rusty memory.&lt;br /&gt;&lt;br /&gt;It helped bucket loads that I was using Dan Peori's toolchain/library installers.  It took a while but when everything was done, most of the source code I had on me was compiling without a glitch.&lt;br /&gt;&lt;br /&gt;I wasn't supposed to go back to trying to code for the PSP.  I wanted very much to give up on it, since I couldn't think of anything useful to begin to write and start learning that PSPDEV-lore.  Everything about programming for the PSP seems so complicated and it's hard to get your hands on some easy-to-understand documentation.&lt;br /&gt;&lt;br /&gt;I was also beaten to the Multi-Update folder idea, something that allows you to switch the contents of your update folder, as only one update folder is allowed on your PSP.&lt;br /&gt;&lt;br /&gt;A tower defense game has already been made.  It would be nice to make one with nice graphics though.  At this point it thinking about developing for the PSP brings me back to SDL, as there is a port available for the PSP, it would be so much easier to develop on the PC, work out the main bugs, then port it to the PSP.&lt;br /&gt;&lt;br /&gt;Maybe I should go back to square one, write a bouncing ball app, and move on from there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-540618531552139286?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/540618531552139286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=540618531552139286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/540618531552139286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/540618531552139286'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/01/psp-dev-woes.html' title='PSP-Dev Woes'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-452728586087486240</id><published>2008-01-14T04:20:00.000-08:00</published><updated>2008-10-02T05:55:09.403-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='musings'/><title type='text'>A Sense of Accomplishment</title><content type='html'>I've been missing a sense of accomplishment that comes with the things I used to do. Things I rarely get to do now, because of work and the fact that I dont own all my time (i.e. have a girlfriend).&lt;br /&gt;&lt;br /&gt;Sometimes I really miss doing things what others might consider wasting time, things like sketching landscapes and mecha and anime girls (usually in skimpy outfits), playing a musical instrument like a guitar or a piano, finishing an RPG, putting together electronic gadgets out of spare parts, writing semi-useless programs that have no real use beyond the esoteric, writing stories from imagination, reading countless books all day.&lt;br /&gt;&lt;br /&gt;When it comes down to it, these things don't really mean anything to anyone in the long run and in the context of the real world can be dropped in favor of something more productive, like coding for profit, watching the news, or heck, catching up on sleep.&lt;br /&gt;&lt;br /&gt;I guess I had a lot of time to do those things and I got used to doing them, and now I'm out of my comfort zone I'm just having to adjust all my priorities.&lt;br /&gt;&lt;br /&gt;And sometimes I find I've replaced those things with something similar, but not exactly the same, like blogging, and reading articles and blogs.&lt;br /&gt;&lt;br /&gt;Maybe it's all part of growing up, and sacrificing time for yourself for time for others.&lt;br /&gt;&lt;br /&gt;Maybe I have a lot to look forward to, when I'm sixty, then my own family can let me have my own time in my "lab" with all those gutted electronic parts and half-assembled computers and books and magazines.&lt;br /&gt;&lt;br /&gt;For now though, it's an accomplshment enough to get work done and come back home.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-452728586087486240?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/452728586087486240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=452728586087486240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/452728586087486240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/452728586087486240'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/01/sense-of-accomplishment.html' title='A Sense of Accomplishment'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-6437734667451891833</id><published>2008-01-08T19:09:00.000-08:00</published><updated>2008-01-08T19:17:40.038-08:00</updated><title type='text'>Igor, it's ALIVE!</title><content type='html'>As you know, I've been having problems reading my old backup DVDs with my Samsung DVD-writer (model SH-S182M)&lt;br /&gt;&lt;br /&gt;This morning I tried a firmware update, first, using the same fimware version as it currently had (SB04).  When that didn't work, I tried the latest version SB05.&lt;br /&gt;&lt;br /&gt;After flashing the utility rebooted my computer, and I popped in a backup DVD expecting nothing, as usual, when all of a sudden XP's autoplay feature kicked in and scanned the DVD.&lt;br /&gt;&lt;br /&gt;I must admit I am a bit skeptical, only time and a few reboots will tell.&lt;br /&gt;&lt;br /&gt;Meanwhile, I greedily grab all my porn backups just in case it stops working soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-6437734667451891833?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/6437734667451891833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=6437734667451891833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6437734667451891833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6437734667451891833'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/01/igor-its-alive.html' title='Igor, it&apos;s ALIVE!'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-6532835177761859883</id><published>2008-01-04T05:20:00.000-08:00</published><updated>2008-10-03T03:59:05.411-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>New-Computer Woes</title><content type='html'>I've had my new PC for almost a month now, and for the most part, it's not had any problems. I say for the most part, because there were some issues I had with it.&lt;br /&gt;&lt;br /&gt;The motherboard, an &lt;strong&gt;ASUS P5B-MX WiFI Solo AP&lt;/strong&gt; sports 4 SATA ports and 1 IDE port. As I was upgrading everything &lt;em&gt;besides the drives&lt;/em&gt;, this proved to be an almost fatal mistake. I had a 80GB, a 160GB and a DVD-ROM that were &lt;em&gt;all &lt;/em&gt;IDE. One of these drives would be left out.&lt;br /&gt;&lt;br /&gt;My first thought was to go USB and buy an enclosure, but I didn't really think that the transfer speeds would be up to par, and another plug on my power strip and wires running to my PC wasn't going to make that corner of my room any prettier.&lt;br /&gt;&lt;br /&gt;Instead of buying a new SATA drive and saving myself a headache I stubbornly decided to try the roundabout, unorthodox, alternative way, using a SATA-to-IDE converter.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://www.computervideogear.com/sata/images/ad3300-2.gif" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I knew my chances of finding one were slim as these devices weren't exactly regularly-used items, but I was loath to buy a new hard disk.&lt;br /&gt;&lt;br /&gt;After asking around several computer stores in the Megamall area with no luck, I asked my uncle who happened to know someone who sold the very device I was looking for. Hindsight, I should have taken his advice and sold him the 160GB so my losses in buying a new SATA drive would be minimized but I still thought I could save more money with the converter.&lt;br /&gt;&lt;br /&gt;The first unit I recieved was a dud. It failed to detect &lt;em&gt;any &lt;/em&gt;of the drives. I had it replaced and the new one finally worked.&lt;br /&gt;&lt;br /&gt;It wasn't without fault, it failed to detect either the 160GB or the DVD-ROM. There were no instructions with the device. It only detected my 80GB (single partition, jumpers set to Master) which was fine with me, as I could now use all my drives at the same time. My 80GB hosted my OS, but it posed no problem as the BIOS allowed booting from any drive.&lt;br /&gt;&lt;br /&gt;Just to satiate my curiosity, I ran Nero's Disc Speed test to see if the SATA-IDE converter made things worse. Although I didn't have a proper control for the results, it was just as fast as the 160GB on the IDE.&lt;br /&gt;&lt;br /&gt;With the IDE connected to the 160GB and the DVD-ROM, and my PC booting from the SATA-IDE connection, I mopped my brow of sweat and thought - &lt;em&gt;problem solved&lt;/em&gt;!&lt;br /&gt;&lt;br /&gt;No such luck.&lt;br /&gt;&lt;br /&gt;This time, the problem came from the DVD-ROM. Up until I got the SATA-IDE converter, I was forced to switch between the DVD-ROM and the hard disk manually, shutting down every time I needed a file from one or the other media.&lt;br /&gt;&lt;br /&gt;I recall having used the DVD-ROM to install most of the software on my PC with no problems. Now it was acting up and refusing to read most of my backup DVDs! CDs seemed to work fine, as did pirated DVDs such as containing the entire fourth season of the series 24.&lt;br /&gt;&lt;br /&gt;Just my backup DVDs that contained my PC installers, PSP games and girl-on-girl porn collection was unreadable! I kept getting an error: "incorrect function" when trying to read my backups. I managed to get it working &lt;em&gt;sometimes&lt;/em&gt;, but only if I did the following:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Remove the hard disk from the IDE. DVD is the only device on it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Boot into Windows. Run Doug Knox's XP CD fix. This removes filters that CD-burning software may have installed and left when uninstalled.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Reboot. Make sure desired DVD-R is already inside the DVD-ROM.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Windows then detects the DVD-R and can read it in explorer. However, opening and closing the tray caused the problem to re-appear.&lt;br /&gt;&lt;br /&gt;I tried a System Restore and a new install of Windows XP but neither was able to get my drive working the way it used to.&lt;br /&gt;&lt;br /&gt;Strangely enough, when I boot into DOS via UBCD, it can read the DVD backups just fine. The only problem is the DVD is flaky when it comes to booting. So booting into UBCD is a hit-and-miss affair. It has been this way since I got it, so maybe the DVD hardware really does have a problem.&lt;br /&gt;&lt;br /&gt;Maybe I should just get a new SATA DVD-ROM save myself a headache.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-6532835177761859883?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/6532835177761859883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=6532835177761859883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6532835177761859883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/6532835177761859883'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2008/01/new-computer-woes.html' title='New-Computer Woes'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-1466591992638150186</id><published>2007-12-21T04:34:00.000-08:00</published><updated>2008-10-02T05:35:52.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='musings'/><title type='text'>A Very Different Christmas</title><content type='html'>This year's Christmas is going to be the first I will spend in the city.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On top of that, I am gaining a new family, that of my would-be step mother. It's all very sudden as I have never even met her, and I'm quite sure my father has known her for only a few months.&lt;br /&gt;&lt;br /&gt;It seems a bit strange, not going home for the holidays, but maybe in the coming years I will see this not as the end of my old life, but as the start of a new one.&lt;br /&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;Well, they broke up. So much for that part of the "new life"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-1466591992638150186?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/1466591992638150186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=1466591992638150186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/1466591992638150186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/1466591992638150186'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2007/12/very-different-christmas.html' title='A Very Different Christmas'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-8530712226780193851</id><published>2007-12-17T03:00:00.000-08:00</published><updated>2008-10-03T04:01:14.015-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Upgrade Complete!</title><content type='html'>My Cousin Marie called to offer me a modelling stint. As I'm 50 pounds over 200, it obviously didn't have anything to do with a runway, flashy lights, half-naked women...&lt;br /&gt;&lt;br /&gt;I need to flesh out 6 characters in 3D for an advert for some industrial insectiside called "Chix".&lt;br /&gt;&lt;br /&gt;It vaguely occured to me that my 2.1Ghz Celeron 512MB with 8MB shared video memory just wasn't gonna slice the pie, so to speak, and I was planning an upgrade anyway so Franz and I went out to Gilmore to pick up our brand new PC. Here are the things I bought:&lt;br /&gt;&lt;br /&gt;Intel E4500 Core 2 Duo @ 2.2Ghz&lt;br /&gt;1GB Kingston DDR2&lt;br /&gt;ASUS P5B-MX WiFi AP&lt;br /&gt;Inno3D GeForce 8600 GT 512MB DDR2&lt;br /&gt;Epson Stylus C90&lt;br /&gt;19" HannSpree LCD display HDMI (1440 x 900 native resolution)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The CPU and Memory&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I haven't actually had time to push this thing to breaking point. Yesterday Firefox was acting all weird and hogging memory and the computer was doing &lt;em&gt;bullet time&lt;/em&gt;, so there must have been some bottleneck somewhere. It was &lt;em&gt;really &lt;/em&gt;annoying to see a Core 2 Duo getting stuck up like that. You'd expect threading to save the day. Even the mouse pointer was freezing, so it had to be somewhere low level.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The MotherBoard&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;The annoying thing about this board is that it only has one IDE (PATA) slot. While I understand the need to replace it with SATA, it doesn't make sense to alienate your customers with ony one PATA slot when there are still many PATA drives lying about. Now I need to find an IDE to SATA converter, or else settle for USB.&lt;br /&gt;&lt;br /&gt;I should have gone over the specs more and read up on the latest chipsets, so I don't really know what's going on under the hood of this one. I had to upgrade the BIOS in order for it to recognize my CPU.&lt;br /&gt;&lt;br /&gt;It's saving grace is the built-in WiFi card that can act as a Station and as an Access Point - all literally at the click of a button. I was able to connect my PSP while in AP mode all without configuring anything.&lt;br /&gt;&lt;br /&gt;Granted, surfing the web on my PSP while Franz is chatting away on a 19" LCD screen isn't exactly fun, but if you happen to have a wifi laptop lying around and you don't have a wifi router yet, this is really neat.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Video Card&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I was more of an ATI person, since my brother's 5500 FX broke 3 times, but since all the nice games love NVidia, I decided to follow the higher path as well. I always considered Inno3D being the cheaper, thus inferior brand, but the 8600 GT for Php 2,600 is a bargain.&lt;br /&gt;&lt;br /&gt;I don't see why it's DDR3 version is 3 times the price, and I don't really think that DDR3 will provide a large performance boost.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Display&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;You can find out what this looks like over &lt;a href="http://www.hannspree.com/global/product_detail.aspx?id=3705&amp;amp;c=308"&gt;here&lt;/a&gt;. Personally, Franz didn't like the design. Strongly disagreed. Hated. Like she hates vegetables. I thought it was okay. The guys over at Gilmore couldn't stop flouting it, I should have smelled a sales pitch. They said that the Hannspree was a new entry into the market that they's sold several over the past few months with no returnees.&lt;br /&gt;&lt;br /&gt;It's HDMI, which means absolutely nothing unless you have Blu-Ray or a PS3. As that's unlikely to happen within the next 2 years, it's nice to know I'm at least prepared for the possibility. The 1440 x 900 resolution is crisp and clear, and of course you'll need a newer video card that supports the resolution.&lt;br /&gt;&lt;br /&gt;What this looks really good with is a see though case and/or a acrylic glass table top.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The #@$!*% Printer&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;The damn thing refused to work even once. I'm returning it tomorrow. I think the ink cartridges have "expired".&lt;br /&gt;&lt;br /&gt;UPDATE: Franz called Gilmore to report the problem. They said they'd replace it... IF we bought new cartridges and found that it still didn't work! Rubbish! A new set of ink cartridges costs almost as much as the printer!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Tests&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;ePSXe - the PlayStation emulator&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This actually used to be my benchmark for PCs. Prolly cause I read about how it was a good test of performance due to emulation and vdeo card requirements. I just ran the BIOS, with Pete's OpenGL2 plugin set to "Nice". As expected, all went smoothly.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tomb Raider: Legends&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;This is actually the &lt;em&gt;only &lt;/em&gt;decent game I had on hand, so I whipped it out right away. I turned on all the display options: New Generation Content, Full Screen Effects, Depth of Field, Reflections and all.&lt;br /&gt;&lt;br /&gt;Having only played this before on an GeCube X550, seeing it in all its glory blew me away. Widescreen support is a nice touch.&lt;br /&gt;&lt;br /&gt;When I enabled Anti Aliasing the game slowed noticeably with each level of AA.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PCSX2&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Emulation? I could have just bought a PS2. Instead I need a dual core CPU, a kickass video card, and hope that your game works.&lt;br /&gt;&lt;br /&gt;But...&lt;br /&gt;&lt;br /&gt;...you can't surf porn sites on a PS2.&lt;br /&gt;&lt;br /&gt;With my first few settings I got it running, but rather slowly. After a few more settings I got the BIOS up to speed running at almost 60 fps.&lt;br /&gt;&lt;br /&gt;The only game I had on hand was Shadow of the Colossus. It booted (yay!) and then immediately crawled to 0.9 fps. Thankfully, I found out that SotC isn't one of those games that plays well on PCSX2. I'm just going to have to wait until I get a copy of FFX.&lt;br /&gt;&lt;br /&gt;Same thing with Anti Aliasing, rendering slowed noticeably with each level of AA.&lt;br /&gt;&lt;br /&gt;I find it hard to believe there was that much of a slowdown with AA turned on.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3D Studio Max&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;I haven't got an installer yet, so the jury's still out on how fast my rig can render a scene. What I want to know is if there are GPGPU plugins that can help boost rendering time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-8530712226780193851?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/8530712226780193851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=8530712226780193851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/8530712226780193851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/8530712226780193851'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2007/12/upgrade-complete.html' title='Upgrade Complete!'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-1228106743506478930</id><published>2007-12-04T05:59:00.000-08:00</published><updated>2008-10-03T04:00:07.722-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROM hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='SNES'/><title type='text'>Back on Track</title><content type='html'>After more than a year, I have once again picked up the threads of my Akazukin Cha Cha RPG Translation project. Unfortunately the last updates on &lt;a href="http://www.geocities.com/saintender.geo/trans.html"&gt;my Geocities site&lt;/a&gt; actually don't reflect the last work I did before abandoning the project (again).&lt;br /&gt;&lt;br /&gt;Here is a list of things that have been completed&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Variable width font routine&lt;/li&gt;&lt;li&gt;Simple dictionary compression routine&lt;/li&gt;&lt;li&gt;Auto line-wrapping routine&lt;/li&gt;&lt;li&gt;Dialog engine hacks&lt;/li&gt;&lt;li&gt;New font GFX&lt;/li&gt;&lt;/ul&gt;Although not essential to produce a working patch, the two routines are important in making the translation a lot easier and goes a long way to make the patch more professional-looking.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Variable Width Font&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Japanese characters usually take up the same amount of space on screen, whether kanji or kana. The original character size was 16x14, but I was able to trim it down to 8x14. However, the roman alphabet wasn't designed to be evenly spaced. So thin letters like i, l and t are around half the width. The routine was quite daunting at first, but easy once I understood how SNES graphics worked. This also had the added benefit that you could place more letters on a line at a time, depending on the characters used.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;[screenshot - no VFW][screenshot - VFW]&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Line Wrapping&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Shock! The original code for Akazukin Cha Cha contained NO line wrapping code. That meant developers had to manually insert line breaks into the script at the end of each line! &lt;em&gt;Horrors&lt;/em&gt;! I looked at myself in the mirror and told myself, &lt;em&gt;this won't do&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Dictionary Compression&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;From the onset of the project I anticipated that the translated script would take up more bytes in the ROM than the original. Case in point, Cha Cha's name:&lt;br /&gt;&lt;br /&gt;Japanese: [CHI][ya][CHI][ya] - 4 letters&lt;br /&gt;English: [C][h][a][ ][C][h][a] - 7 letters (or 6 if you don't count the space)&lt;br /&gt;&lt;br /&gt;So the best way to handle this is to use replacement codes for letter combinations that commonly occur in the script.&lt;br /&gt;&lt;br /&gt;[01] = Cha Cha&lt;br /&gt;[02] = Riiya&lt;br /&gt;...&lt;br /&gt;[08] = the&lt;br /&gt;&lt;br /&gt;This is the same way that Chrono Trigger (English version) handles its script, which is quite large. I didn't expect a large script from Cha Cha, but the size of the ROM was small to begin with.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Dialog Engine&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I spent quite some time looking at how this part of the game worked, and there were still some things I didn't understand when I put down the project. I'll have to go back and take a look at those things.&lt;br /&gt;&lt;br /&gt;The modifications applied to the engine were removing two-byte (Kanji) codes and integrating the dictionary routine.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;New Font Graphics&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The font doesn't really match that well to the cartoonish style of Akazukin Cha Cha, but that's just details. The nitty gritty of the ASM coding is complete. There may be a few things that need smoothing later on, but looking back on my work I'm very happy with how the code turned out, and pleasantly surprised that as was able to get it to work as expected.&lt;br /&gt;&lt;br /&gt;Now we go back to the script. I actually thought that this would be the easy part, but it turns out to be quite a major bump in the project roadmap.&lt;br /&gt;&lt;br /&gt;I've discovered a few things (just this morning, in fact, which could explain why I was late for work) with the scripting and event engine. I've found out that the dialogue engine was just a subset of the scripting engine, and I've decoded a few bits and pieces of how an event plays out.&lt;br /&gt;&lt;br /&gt;This is quite a step forward in fully decoding the script, and one step closer to a complete translation. This is also a huge boost in morale, giving me a reason to keep forging on.&lt;br /&gt;&lt;br /&gt;Once I have the script format pinned down, a proper script-ripper or and editor is in order. I do have a very simple script-ripper and inserter, but it is fairly complicated and existing in the realm of it-just-works! and will have to be re-written to be really useful.&lt;br /&gt;&lt;br /&gt;As usual, I'm back to looking for a few good translators who can accomodate the wackiness of Akazukin Cha Cha into the translation. I realize a straight translation will leave many scratching their heads, and purists will flame me for modifying any single bit of it, but I'd rather have more people enjoying the game.&lt;br /&gt;&lt;br /&gt;Shamefully, I haven't played the game very far myself, so I can't vouch for how good the game is, but the presentation is unique, and it's something I always look for in a game.&lt;br /&gt;&lt;br /&gt;Check out the screenshots below!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-1228106743506478930?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/1228106743506478930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=1228106743506478930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/1228106743506478930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/1228106743506478930'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2007/12/back-on-track.html' title='Back on Track'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-8876989921563053304</id><published>2007-11-27T01:00:00.000-08:00</published><updated>2008-10-03T03:56:49.648-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cubing'/><title type='text'>F2L the Easy Way</title><content type='html'>I've decided to post some tutorials in cubing. There are a lot of how-to cubing pages out there but in this tutorial I will attempt to teach the First-Two-Layers method (F2L) in a manner that is hopefully easier to understand.&lt;br /&gt;&lt;br /&gt;If you're new to cubing then this tutorial isn't for you. If you can solve a cube in an average of two minutes using the vanilla layer-by-layer (cross-&gt;corners-&gt;second layer edges) method, F2L should save you about 30-40 seconds depending on how fast you can actually pull off the moves.&lt;br /&gt;&lt;br /&gt;Vanilla layer-by-layer can be pulled off pretty fast, but is inherently slower because you build the first layer, then you have to destroy it to join it with the second layer. It is the choice for beginners because it has the fewest cases needed to be memorized to be able to solve the cube.&lt;br /&gt;&lt;br /&gt;F2L was pioneered by Jessica Freidrich among others, but looking at her web page can put off anyone looking for an introduction to F2L.&lt;br /&gt;&lt;br /&gt;When performing F2L there will be two pieces of interest, the corner piece and the matching edge piece. Before F2L you should have your First Layer Cross already solved.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xxxxxxxbxxoxxxxxxxxxxxxxxxx&amp;amp;size=100" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;This is an attempt to teach the moves in terms of relative colors, and not absolute face turns. This has the advantage of automatically learning the "mirror" moves. There is no mention of clockwise or counterclockwise. As long as you follow the steps, it shouldn't matter if you get a mirrored case or a normal case.&lt;br /&gt;&lt;br /&gt;Instead, I will be referring to the "base", "top" and "side" colors of a cubie. The edge cubie will be used as a reference. With the edge cubie in the top layer, the top color will be the sticker of the cubie showing on to top, and the side color will be the color of the other cubie's face. The corner cubie will then either be "oriented" or "flipped".&lt;br /&gt;&lt;br /&gt;Oriented - Corner cubie's top color same as Edge's top color&lt;br /&gt;&lt;br /&gt;Flipped - Corner cubie's top color is the same as Edge's side color&lt;br /&gt;&lt;br /&gt;Some people (my girlfriend) seem to find this method more intuitive and easier to understand.&lt;br /&gt;&lt;br /&gt;In each case the goal is to unite the Edge (E) and Corner (C) cubies in the top layer in a series of quick, smoothly flowing moves. Once united, it is a simple matter to place them into the proper corner of the cube.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Case 1: Corner and Edge are both in Top Layer.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A) Corner and Edge colors have same orientation.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Identify: &lt;/strong&gt;The corner cubie will have have the &lt;strong&gt;base color on one side&lt;/strong&gt;, and the top and side colors of the edge and corner cubies will be the same. The edge and corner will be separated from each other.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; First, turn top layer so that the corner's side color is aligned to its center cubie. Here the side color is orange. You should have something similar to the one of the cubes below. This is merely a setup step. As you practice more, you will be skipping directly to the next step.&lt;br /&gt;&lt;br /&gt;"side color is orange, align side color with orange center"&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xxxbyxxxbxxoxoxxoxwxxxbxxbx&amp;amp;size=100" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 2: &lt;/strong&gt;Turn top layer to align corner's base color (white) with side color's center face (orange).&lt;br /&gt;&lt;br /&gt;"side color is orange, align base color of corner with orange center"&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xbxxyxbxxwxxxoxxoxxxxxbxxbx&amp;amp;size=100" border="0" /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xxxxybbxxwxxxoxxoxxoxxbxxbx&amp;amp;size=100" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Turn side color's center face to place corner in bottom layer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xbxxyxxxxxxxxoowxxxxxwbxxbx&amp;amp;size=100" border="0" /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xxxxybxxxxxxxoowxxxoxwbxxbx&amp;amp;size=100" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Rotate top layer to place edge cubie opposite top color's center cube.&lt;br /&gt;&lt;br /&gt;"place edge opposite top color's center"&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xxxbyxxxxxxxxoowxxxxxwbxxbx&amp;amp;size=100" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 5. &lt;/strong&gt;Turn side color's center face back to place corner in top layer&lt;br /&gt;&lt;br /&gt;"bring back corner"&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 100px; CURSOR: hand" alt="" src="http://www.cosine-systems.com/cubestation/imagecube/imagecube.php?stickers=xxxbyxbxxwxxxoxxoxxxxxbxxbx&amp;amp;size=100" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Corner and edge should be joined.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;B) Corner and edge colors have flipped orientation.&lt;br /&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-8876989921563053304?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/8876989921563053304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=8876989921563053304' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/8876989921563053304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/8876989921563053304'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2007/11/f2l-easy-way.html' title='F2L the Easy Way'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-2191586378524859005</id><published>2007-11-21T04:21:00.000-08:00</published><updated>2008-10-03T03:59:30.407-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='musings'/><title type='text'>Something Rather Unexpected</title><content type='html'>I haven't had a crush like this since highschool.&lt;br /&gt;&lt;br /&gt;Jade Raymond is &lt;a href="http://www.jade-raymond.com/pictures.php"&gt;seriously cute&lt;/a&gt;. She is so cute, you wouldn't even believe she has a computer science degree from McGill University, let alone believe that she is the producer of UbiSoft's &lt;a href="http://en.wikipedia.org/wiki/Assassin"&gt;Assassin's Creed&lt;/a&gt; coming out onthe PS3 and XBox 360.&lt;br /&gt;&lt;br /&gt;I mean, where were all the cute chicks in Computer Science back in college?!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand" alt="" src="http://pub.tv2.no/multimedia/TV2/archive/00266/Jade_Raymond_300_266520c.jpg" border="0" /&gt;&lt;i&gt;&lt;span style="font-size:85%;"&gt;Jade Raymond. Gamer. Geek. Really cute chick.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;I would buy Assassin's Creed because it's a Prince of Persia-type game i.e. has unique gameplay and amazing graphics, and because hopefully there will be a producers commentary in HD slipped somewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-2191586378524859005?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/2191586378524859005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=2191586378524859005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/2191586378524859005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/2191586378524859005'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2007/11/i-havent-had-crush-like-this-since.html' title='Something Rather Unexpected'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-565966936284948595.post-7333661513804464502</id><published>2007-11-06T01:34:00.000-08:00</published><updated>2008-10-03T03:59:50.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>Another Reason To Own A DS</title><content type='html'>If I was looking for a few reasons to buy a DS, this would be one.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://www.blogsmithmedia.com/www.dsfanboy.com/media/2007/10/battle09.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://www.blogsmithmedia.com/www.dsfanboy.com/media/2007/10/battle09.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.frontmission.org/front/fm1info.htm"&gt;Front Mission&lt;/a&gt; is an armored mecha turn-based strategy RPG that first came out on the SNES in 1995. It captured my eye with its unique graphical look and catchy music.&lt;br /&gt;&lt;br /&gt;It was only released in Japanese but with the advent of emulation it was translated to English by several fans.&lt;br /&gt;&lt;br /&gt;I admit I never finished the game, even with the translation. I didn't finish Front Mission 3 either (I have an excuse, the emulator crashed at a certain point into the game making it difficult to progress). I am a casual fan of mecha, having written a short-lived story regarding a young mecha pilot who was discovered and recruited by a sexy, slightly older female mecha pilot who is part of some covert ops (or is that another story I was working on... but I digress...).&lt;br /&gt;&lt;br /&gt;Front Mission for the DS doesn't add anything new to the game itself, aside from updated graphics and touch screen functionality, which should make playing the game much more intuitive.&lt;br /&gt;&lt;br /&gt;Along with Mario &amp;amp; Luigi - Partners in Time FM(DS) makes it to my &lt;strong&gt;Top 10 Reasons To Own A DS&lt;/strong&gt;. Actually, I still have to fill up the other eight.&lt;br /&gt;&lt;br /&gt;With all these remakes coming to the DS, you'd think Square would finally do a fanservice and port great classics such as Seiken Densetsu III, Chrono Trigger and Secret of Mana.&lt;br /&gt;&lt;br /&gt;I can't justify buying a Nintendo DS just now because I haven't even played all the games on my PSP yet, but if I were filthy rich, I'd go and buy a DS right &lt;em&gt;now&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/565966936284948595-7333661513804464502?l=endersoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://endersoft.blogspot.com/feeds/7333661513804464502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=565966936284948595&amp;postID=7333661513804464502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7333661513804464502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/565966936284948595/posts/default/7333661513804464502'/><link rel='alternate' type='text/html' href='http://endersoft.blogspot.com/2007/11/if-i-was-looking-for-reason-to-buy-ds.html' title='Another Reason To Own A DS'/><author><name>Ender</name><uri>http://www.blogger.com/profile/13050783166384547480</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_NTFyN8Kn724/SOSzNGungBI/AAAAAAAAACk/IB1NNt3JayU/S220/pic.JPG'/></author><thr:total>0</thr:total></entry></feed>
