<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-5633037</atom:id><lastBuildDate>Thu, 04 Mar 2010 22:11:16 +0000</lastBuildDate><title>Chris White - Emulation &amp; Decompilation</title><description>Latest Project: OutRun Decompilation
Past Projects: JSnes, JavaGear, JEmu2</description><link>http://www.massdestruction.co.uk/jsnes/</link><managingEditor>noreply@blogger.com (yt)</managingEditor><generator>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-7154245197139455386</guid><pubDate>Thu, 04 Mar 2010 22:11:00 +0000</pubDate><atom:updated>2010-03-04T22:11:16.271Z</atom:updated><title>This blog has moved</title><atom:summary type='text'>       This blog is now located at __FTP_MIGRATION_NEW_URL__.       You will be automatically redirected in 30 seconds, or you may click here.       For feed subscribers, please update your feed subscriptions to       __FTP_MIGRATION_FEED_URL__.  </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2010/03/this-blog-has-moved.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-7670945567463408084</guid><pubDate>Mon, 22 Feb 2010 17:16:00 +0000</pubDate><atom:updated>2010-03-04T21:53:45.471Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>C Compilers</title><atom:summary type='text'>Following my previous post, where I questioned whether Gauntlet's code was written in C as opposed to assembler, I've come to the realisation that OutRun's slave CPU code was probably generated by a compiler and is not hand-written assembler. 

The slave CPU controls the road rendering. So essentially it generates the curves, height variation, road splitting and appearance, from the level data. 
</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2010/02/c-compilers.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-2987409501405692169</guid><pubDate>Tue, 02 Feb 2010 15:28:00 +0000</pubDate><atom:updated>2010-02-02T15:29:31.555Z</atom:updated><title>C Compilers for 68000</title><atom:summary type='text'>Reading The Making of Gauntlet, I was interested to read the following comment:

With the switchover from the 6502 to the more capable 68000  microprocessor, the development environment at Atari had changed  considerably. “We were actually entering our own code at this point. Our  development tools changed, too. We were now programming in C instead of  assembly language,” says Logg.
Was the game </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2010/02/c-compilers-for-68000.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-7980638853517258019</guid><pubDate>Thu, 14 Jan 2010 14:36:00 +0000</pubDate><atom:updated>2010-02-26T11:26:54.655Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Hidden Voices</title><atom:summary type='text'>If you try OutRun's Sound Test, you'll notice there are four voices you can apparently play. These are the speech samples Get Ready, Congratulations and Check Point. The forth sample, "Voice 4", doesn't work. If, like me, you've lost sleep over such a monumental issue - read on!


The elusive fourth voice is, in fact, still in the ROM files, namely those containing the PCM sample data. You can </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2010/01/hidden-voices.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-6766872717373839230</guid><pubDate>Tue, 12 Jan 2010 12:12:00 +0000</pubDate><atom:updated>2010-01-12T12:12:25.728Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Level Select</title><atom:summary type='text'>Yesterday proved a little more fun. Whilst debugging the slave road CPU code, I figured out how to change the level order in OutRun. Using this, you could easily make a level select. Also found a way to have the road data from one level, with the object data from another. It doesn't always work, but does allow you to make some interesting permutations. Some level data for Stage 1 is also </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2010/01/level-select.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-5741658710621893264</guid><pubDate>Mon, 11 Jan 2010 11:56:00 +0000</pubDate><atom:updated>2010-01-11T11:56:37.616Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Slave CPU Code</title><atom:summary type='text'>Spent most of yesterday working on the code that runs on the slave CPU. On a positive note, there isn't much of it. The code is minimal compared with the main CPU. It's a loop that handles rendering the road. On a negative, progress is slow. I spent most of the afternoon trying to figure out a few hundred lines of assembler and now feel like gouging my eyes out.</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2010/01/slave-cpu-code.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-4739059740998185731</guid><pubDate>Tue, 05 Jan 2010 00:22:00 +0000</pubDate><atom:updated>2010-03-02T13:41:45.535Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Outrun Unidesa Manual</title><atom:summary type='text'>I've had no free time lately. But the following manual arrived in the post:


It's an OutRun arcade manual from a Spanish company called Unidesa (Universal De Desarrollos Electronicos S.A.) who seem to have licensed OutRun at some stage. The company still exists and has a website here.

I expected it to be a straight translation of the common English Sega manual that can be found at KLOV. 

</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2010/01/outrun-unidesa-manual.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-5976000297636553416</guid><pubDate>Fri, 11 Dec 2009 15:27:00 +0000</pubDate><atom:updated>2009-12-11T15:27:42.331Z</atom:updated><title>Pre-Xmas Update</title><atom:summary type='text'>Quick update - pretty busy with both work and some other interesting projects that I can't discuss yet. OutRun work will definitely be continuing as I've made good progress, it's just on hold for a short period.</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/12/pre-xmas-update.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-6629945753090896486</guid><pubDate>Fri, 27 Nov 2009 17:24:00 +0000</pubDate><atom:updated>2009-11-27T17:43:29.500Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Game Objects and Level Format</title><atom:summary type='text'>I've made a lot of progress. After a lot of hard work I've figured out the internal object format used by OutRun for most sprites and game objects which is a big breakthrough. I understand the complete format, with the exception of a single bit that eludes me right now. The internal format is a lot more complex than the values finally written directly to the sprite hardware, as it includes </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/11/gane-objects-and-level-format.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-851002251377233859</guid><pubDate>Wed, 11 Nov 2009 01:03:00 +0000</pubDate><atom:updated>2009-11-11T01:03:08.114Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Look Both Ways!</title><atom:summary type='text'>One interesting aspect of disassembling games you're fond of, is that you might uncover hidden code that was unused in the final build. This can give an insight into some of the features that were planned that didn't make the final cut, either because of time, technical problems or maybe they simply didn't prove fun during playtesting. 

Lately I've been disassembling the traffic handling code, </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/11/look-both-ways.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-3641674095771771015</guid><pubDate>Tue, 10 Nov 2009 10:41:00 +0000</pubDate><atom:updated>2009-11-10T14:37:05.001Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Extend Time!</title><atom:summary type='text'>One of the aspects of OutRun that somewhat puzzled me as a player, was exactly how the "Extend Time!" feature at the end of each level worked.

This is the additional time that is added to the countdown timer on passing a checkpoint. I've never seen details published - until now....

Here's a table that shows the time, in seconds, that is added to your overall counter per stage. The rightmost </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/11/extend-time.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-3326729539963225865</guid><pubDate>Mon, 19 Oct 2009 23:56:00 +0000</pubDate><atom:updated>2009-11-17T15:37:59.362Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>OutRun Gameplay Laserdisc &amp; VHS</title><atom:summary type='text'>I'm still beavering away, reverse engineering the OutRun source. I'm focusing on the sprite routines and level data at the moment. Both of which are quite complex. I've uncovered some pretty intriguing stuff, and understand why OutRun uses the convoluted jump table I mentioned in an earlier post. It's related to rendering the level data, and many of the repeated routines handle sprites. 

But I'm</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/10/outrun-gameplay-laserdisc-vhs.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-5571633030052427976</guid><pubDate>Tue, 29 Sep 2009 21:18:00 +0000</pubDate><atom:updated>2009-09-29T22:35:42.304+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Tools and Tiles</title><atom:summary type='text'>Wrote a quick tool, which takes an Outrun CPU 0 memory dump from the MAME debugger as input. As output it prints the jump table from that stage of the game that has been built and stored in RAM.This is handy, because it formats the data and only shows the addresses which are currently enabled, and doesn't repeat addresses when they're called in succession. The table in RAM itself is 124 entries </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/09/tools-and-tiles.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-1610647974570927851</guid><pubDate>Thu, 17 Sep 2009 10:10:00 +0000</pubDate><atom:updated>2009-09-17T11:23:56.661+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title></title><atom:summary type='text'>Quick progress report: Commented all the code relating to detecting when the car is off-road. Figured out the memory location that determined which wheel was off. Established the memory location that determined the width of the road, and handles splitting the road between number of lanes and individual roads. Commented some slightly less interesting code relating to lap times, output lamps and </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/09/quick-progress-report-commented-all.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-8185799176458468080</guid><pubDate>Thu, 10 Sep 2009 14:08:00 +0000</pubDate><atom:updated>2009-11-10T10:50:53.501Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Debugging</title><atom:summary type='text'>I reached a point where it was time to switch to a competent interactive debugger, instead of working out of a series of text files that were becoming increasingly difficult to manage.

It took me a good few days to transfer my comments and knowledge to the new system. But the payoff is massive - I've immediately spotted mistakes, and identifying blocks of code has become a lot less painful.



</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/09/debugging.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-4727743973546462183</guid><pubDate>Thu, 27 Aug 2009 16:07:00 +0000</pubDate><atom:updated>2009-08-27T17:16:25.190+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Decompilation Update</title><atom:summary type='text'>As predicted, progress is slow and steady.The most satisfying way of working is attempting to solve as many unknowns in a particular area, and then moving on when the going gets tough. Going back to a set of routines with a fresh pair of eyes really helps.Some areas that I've worked on:1/ Car control (X Position, Acceleration, Gear Changes)2/ Road splitting code (High level areas including the '</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/08/decompilation-update.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-2182484465887756807</guid><pubDate>Tue, 11 Aug 2009 22:03:00 +0000</pubDate><atom:updated>2009-09-21T09:55:32.538+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>Outrun Decompilation Oddities</title><atom:summary type='text'>The decompilation is moving along reasonably nicely. I've slowly picking up a decent understanding of the game code.One interesting thing with the decompilation is that it uncovers code routines and text that don't appear to be in the final game.For example, check the strings in the following screenshot:BIN CHAN ECOLOR BANK GA TARINA NOYO !1 STAGE 127 KO INAINI SHITENEIf you set the program </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/08/outrun-decompilation-oddities.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-8538492053800682657</guid><pubDate>Mon, 10 Aug 2009 10:33:00 +0000</pubDate><atom:updated>2009-08-10T12:04:29.756+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>outrun</category><title>OutRun Decompilation Project</title><atom:summary type='text'>I'm something of an OutRun obsessive. I've got the arcade machine in my parent's garage (they keep requesting that I remove it) and I coded the OutRun driver for Jemu2. The game has so many memories attached to it, and it will always hold a lofty place in my heart beyond what it probably deserves.One coding project that I've dabbled with on rainy days, is a full decompilation and reverse </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/08/outrun-decompilation-project.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-4127145279087797611</guid><pubDate>Tue, 24 Mar 2009 21:36:00 +0000</pubDate><atom:updated>2009-03-24T21:37:09.935Z</atom:updated><title>FlashGear</title><atom:summary type='text'>Now it runs pretty well:http://www.javagear.co.uk/flashgearBasically I missed a few Flash related things as I was working too late. I knew the code wasn't that bad! :)</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/03/flashgear.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-1564748543795524098</guid><pubDate>Mon, 23 Mar 2009 10:01:00 +0000</pubDate><atom:updated>2009-03-23T22:30:14.691Z</atom:updated><title>JavaGear Actionscript/Flash Port</title><atom:summary type='text'>I quickly ported JavaGear to Actionscript 3 the other week to see how fast it would run. The actual port was really quick - took just over a day to get it up and running.It seems that Actionscript is a pretty sluggish language for emulation purposes. The main bottleneck in the code is the Z80 emulation. The rendering and flash specific stuff is not really an issue.Using a hacked version of Sonic,</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/03/javagear-actionscriptflash-port.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-2418239622221693445</guid><pubDate>Mon, 23 Mar 2009 09:58:00 +0000</pubDate><atom:updated>2009-03-23T10:01:21.304Z</atom:updated><title>DroidGear</title><atom:summary type='text'>Due to my own laziness at porting JavaGear to Google Android, I'm pleased to say Stephan has taken it upon himself to start a port. The code can be found hereA video can be found hereLooks like something's up with the frameskipping code from the video - I don't think the emulator is skipping frames at all. The interface and auto screen flipping looks cool though.</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2009/03/droidgear.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-311047122315287888</guid><pubDate>Wed, 02 Jul 2008 10:14:00 +0000</pubDate><atom:updated>2008-07-02T11:26:15.355+01:00</atom:updated><title>JavaGear 0.97 Preview</title><atom:summary type='text'>Upcoming in the next version:1/ Big speed increase for mobile version. I've compiled my own customised version of proguard (the java obfuscator) . This results are great, and games run noticeably quicker. I'll have some precise data to back this up in due course.2/ Decent standalone application version with menubar and windows .exe launcher for ease of use. Essentially the menubar is the final </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2008/07/javagear-097-preview.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-1898373099009403473</guid><pubDate>Mon, 02 Jun 2008 16:16:00 +0000</pubDate><atom:updated>2008-06-02T17:17:59.320+01:00</atom:updated><title>JavaGear Updates</title><atom:summary type='text'>So you've probably noticed that there have been a few minor updates to JavaGear recently.I'm also working on implementing 'save state' support. It's a feature I've wanted for ages, but is mind numbingly dull to code. I've finally summed up the courage. It works, I've just got to hook up some UI for it now.Any other feature requests are welcome.</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2008/06/javagear-updates.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-5889149773402989280</guid><pubDate>Tue, 20 May 2008 13:14:00 +0000</pubDate><atom:updated>2008-05-20T14:15:18.419+01:00</atom:updated><title>JavaGear ME 0.92 Released</title><atom:summary type='text'>             JavaGear for MIDP2 Compatible mobile phones.       Also contains a standalone J2SE (PC compatible) build of JavaGear.               New Features:    Screen rotation    Screen can be enlarged with SCALE option (before it was only shrunk)    Lightgun emulation (touchscreen devices and with mouse on J2SE version)    SRAM is saved (Phantasy Star etc.)    NTSC/PAL selection    J2SE: Pass </atom:summary><link>http://www.massdestruction.co.uk/jsnes/2008/05/javagear-me-092-released.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5633037.post-2701025355169248369</guid><pubDate>Sun, 11 May 2008 20:02:00 +0000</pubDate><atom:updated>2008-05-11T21:08:04.445+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>javagear</category><title></title><atom:summary type='text'>JavaGear Android PortI've started to port JavaGear to Google's Android platform. The results are good, although it runs seriously slowly in the emulator. Based on the J2ME version, it will presumably run faster on an actual device.There will be updates to the existing mobile version of JavaGear in due course. I'm hoping to add Lightgun support for touchscreen handsets.There's still some debugging</atom:summary><link>http://www.massdestruction.co.uk/jsnes/2008/05/ive-started-to-port-javagear-to-googles.html</link><author>noreply@blogger.com (yt)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></item></channel></rss>