Asteroids Deluxe on the Papilio Pro


Recommended Posts

It works!!


I'd started this a couple years ago but only recently have become proficient enough with VHDL to get it working. This started as MikeJ's implementation of Asteroids Deluxe, a classic Atari vector game. I have chopped off the rasterizer and added some PWM DACs from the Black Widow project on and ported everything to the Spartan6. If you haven't played Asteroids on a real vector monitor, you haven't really played Asteroids IMHO, there's no better example I know of a game taking full advantage of the unique capabilities of the monitor with those blinding bright missiles.There is information on the SpritesMods site on converting a CRT TV to a vector monitor, or with a couple of op-amps to boost the voltage levels this could drive a real vector monitor such as the Electrohome G05 or Wells-Gardner 19V2000. You can also play it on an oscilloscope that has a XY mode. I had a look over the schematics and the original Asteroids appears to be almost identical to AD except the latter uses a POKEY instead of the cool analog sound circuits. s That means that this hardware *might* run the original Asteroids which IMO is a better game than Deluxe, I haven't tried yet.


The attached zip should have everything needed to get this going except I have removed the ROM images to keep the lawyers happy. The MAME ROM '' can be found various places and has the files you need. If you get stuck, feel free to contact me directly and I'd be happy to send you the files.

Link to comment
Share on other sites

This snippet of code shows the button mapping to the input registers.


    -- self test, slam, diag step, fire, shields
    control_ip0_l <= "11111";
    control_ip0_l(4) <= SELF_TEST_SWITCH_L;
    control_ip0_l(1) <= BUTTON(0);
    control_ip0_l(0) <= BUTTON(6);
    test_l           <= SELF_TEST_SWITCH_L;
    -- left, right, thrust, start2, start1, coinr, coinc, coinl
    control_ip1_l <= "11111111";

    control_ip1_l(7) <= BUTTON(3);
    control_ip1_l(6) <= BUTTON(1);
    control_ip1_l(5) <= BUTTON(4);
    control_ip1_l(4) <= BUTTON(7);
    control_ip1_l(3) <= BUTTON(5);
    control_ip1_l(0) <= BUTTON(2);



These are mapped to C0-C8 in the constraints file. You can of course change this to anything you like.

Link to comment
Share on other sites

Well you might be able to port the original fpgaarcade code. It has a rasterizer that uses external SRAM but you may be able to use the SDRAM on the Papilio Pro. Personally I think if you want to play Asteroids on a VGA monitor you may as well fire up MAME on your PC but it would be interesting to see if this would work.


Attached is the original code if you want to have a go at this.

Link to comment
Share on other sites

That may actually work. I know there was a MAME driven peripheral made at one point to drive real vector monitors and the Vectrex was one of the supported platforms but the name escapes me at the moment. Also if you look on that spritesmods site he details modification of a small portable CRT TV into a vector monitor. Ideally you need to rewind the vertical portion of the deflection yoke but this is not as scary as it sounds. If you use a B&W TV there is no purity or convergence to deal with and you can find those little Chinese portable sets cheaply at thrift stores and garage sales, especially now that analog broadcast TV is gone. For a minimalist design,  you can retain the original chassis for the HV and video amplifier and add his deflection driver which is simple enough that it could be built on perfboard.


If you want to wait a while, I've been puttering away at a more complete vector monitor design taking the integrated amplifier IC's and combining them with aspects of the G05 and 19K6100 monitors, dispensing with the need for any of the original electronics from the TV. The one pitfall is that the HV board will be somewhat specific to the flyback/LOPT used in the particular TV I harvest that and the CRT from. CRT displays are disappearing fast so I'm not sure how much longer it will be easy to find donors.


Another idea in the back of my head is a vector output wing for the Papilio. This would consist of R/C filters, some op-amps and a DC-DC converter and output the deflection and video voltages needed to drive a G05, 19V2000 or 19K6100 monitor. The circuit is trivial, it's just a matter of getting it drawn up in KiCad and doing a board layout. I suspect the market to be limited though as there are likely not a whole lot of Papilio owners who also happen to have a 35 year old vector monitor laying around. It would be possible to make an adapter to plug into a real Atari vector game cabinet to play other games though.

Link to comment
Share on other sites


This topic is now archived and is closed to further replies.