Friday, June 02, 2017

Atari Starship 1

After a "short break"...I'm working on MAME again. :) After all the excitement about the discovery of an Easter Egg in Starship 1 earlier this year, I decided to take a look at some of the shortcomings of this driver.



The first issue relates to the way the spaceships explode.  In MAME 0.185, the ships "get brighter" and then disappear in MAME, but in the original game they appear to flip around as well.  Strangely, the wrong sprite is sometimes used when the flipping occurs, so a hack was placed in the driver to stop the flipping.  I honestly don't remember who added the hack - it might have been me :)  (Back in the day there were no handy Youtube videos of the actual gameplay available - like this great one from Arcade Jason)  In any case I removed this hack for MAME 0.186.

In the Easter Egg article, they mention the "Fast/Slow" throttle controller.  It looks like the kind of controller which should toggle, but apparently it actually goes back to Slow if you let go of it.  This is a trivial fix, and I have it in my github already.  See the original controller on the right here:



The next issue relates to the speed of the emulation.  The schematics for Starship 1 are buggy, and the video timing really doesn't make sense.  I used a combination of reference videos and photos of the PCB to conclude that the video timing circuit is very much the same as Atari Destroyer, and Super Breakout.  The Horizontal Line rate (rate to draw one scanline) is 15750Hz and the Frame rate is 60.114Hz, when using a crystal of 12.096Mhz. This also makes the game timings correct. (the game runs for a "certain time" instead of a certain number of lives).  This is fixed in my github as well.

Now, there are two issues left that I know of.  The planets that get created always originate "centered on the screen", which seems to make the MAME version much harder than the actual - I need to look into this, but I think it relates to the calibration procedure of the original game, which was required at setup time and is described in the manual.  This needs more analysis.

And finally - the scaling of the spaceship sprites.  Atari used a patented circuit involving analog circuitry to scale these images.  The patented circuit actually creates sprites which are "directly proportional" to the size that the game requests.  In other words, there is a simple scale factor to sort out.  Unfortunately, it's tough to sort it out definitively, without access to the real hardware, or building up a circuit yourself.  To make matters slightly worse, the real circuit used in the game is slightly simpler, which means there is a more complex relation between what the game commands and the actual size of the sprite on the screen.  I will most likely need to build the circuit and measure it at some point.  For now, the approximation in the code seems to work pretty well.

I created the first driver for Starship 1 way back when, and Stefan Jokisch updated it and submitted to MAME back in the early 2000's.  I put in the one fix for MAME 0.186 and at least the next two fixes should make it for 0.187.  This should be enough to close out the corresponding bug report on mametesters.  Aside from Starship 1, and I have a few more ambitious emulation projects...but I'll save them for the next update.

3 comments:

Unknown said...

If it would be of help and you are located in the USA, I may be able to provide you with a PCB as long as you can keep it intact and working.
Let me know.

TrevEB

Brian Deuel said...

Welcome back, Frank! I realized today that it's been almost 20 years since our trip to Grand Rapids to pick up the Space Invaders II cocktail. Geez!

Kenny White said...

Welcome back to MAME. Looking forward to you retackling the cassette emulation. If you can put your tape dumps on a softlist it will help the rest of us in our purchasing decisions as the tapes become available.

Fun with FPGAs - recreating the Atari TIA, Part 1

I have been playing with recreating the Atari TIA chip as used in the original 2600 in an FPGA.  I know this has been done a few times alrea...