Asteroids Mini Arcade Machine

7:14 pm Uncategorized

Here’s a tiny Asteroids arcade machine I built from scratch. It uses a vintage 3″ round cathode ray tube driven from an amplifier board and high voltage supply of my own design.

A friend of mine ported his 6502 emulator to an STM32F4 Discovery board so this arcade machine is able to run the original Asteroids program without any modifications. The STM32F407 processor has two DAC outputs which work perfectly for driving the X and Y deflection inputs on the amplifier board.

Turns out the ST Micro part is really good for driving displays like this. Not only do the DAC outputs work great for deflection, but the hardware floating point really speeds up things like 3D vector rotation.

Come find me at the Bay Area Maker Faire! (May 17 and 18–go buy your tickets now!) I will be located in the Fiesta Hall (the dark room with the Tesla coils). I’ll set up a second arcade machine running some additional demos, including a Super Secret Game. You’ll just have to come and find out what it is.

14 Responses
  1. Sebastian :

    Date: May 26, 2014 @ 12:38 pm

    Wow, i love this design! I have a bold request: i have an asteroids board, i have several CRT-tubes (from tiny b/w tv to a slightly larger color-tv). I’m really looking for a driverboard that takes the deflection outputs of my board and pumps that to the tube. Can you share your design for inspiration?

  2. eric :

    Date: May 26, 2014 @ 2:32 pm

    glad you like it, Sebastian! what you’re asking about is a fairly complicated project. your TV CRTs require magnetic deflection, so your best bet is to rewind the yoke that came with the TV so that it will work with the Asteroids deflection amplifier board (getting the coil impedances right is pretty important). then you’ll have to figure out how to add a load inductance to the TV power supply circuit so that it can run without the horizontal coil attached and still drive the flyback transformer. my board simply won’t work in this case because it’s designed for electrostatically-deflected CRTs.

  3. Tobias :

    Date: June 7, 2014 @ 1:46 pm

    Very nice work!
    Would your friend publish the port, instructions or files to the discovery board? I do not usually re-create someone’s else project, but this one is worth it! =)

  4. eric :

    Date: June 8, 2014 @ 6:34 pm

    good idea, i’ll have to ask. it’s my friend’s code.

  5. Tobias :

    Date: June 15, 2014 @ 9:34 am


    I went forward and bought a set of boards, expecting your friend will say yes =)

    Just having trouble with the ZDT1048. Mouser, Digikey and any other well known supplier I tried does not have it in stock. Or any SM-8 dual NPN with similar specs for that matter.
    Do you mind sharing where did you buy this component?


  6. eric :

    Date: June 21, 2014 @ 3:08 pm

    Tobias: Mouser has 1K on order. They must have just run out of stock because I ordered a few just two weeks ago.

  7. Tobias :

    Date: June 22, 2014 @ 7:12 am

    That is my lack of luck working against me! Hahaha
    I just placed an order with Quest. They had plenty stock. It just took me a while to find them. Thanks!

  8. Bill :

    Date: October 27, 2014 @ 2:31 pm

    Any word on publishing the port? My 12 year old is chomping at the bit to built it.

  9. Christian :

    Date: June 16, 2015 @ 11:32 pm

    Hi Eric,

    very cool project.

    why do you scale by a factor 3 in plot function?

    plot(s32 x, s32 y, s32 z)
    // scale by 3x
    dac_out((x << 1) + x, (y << 1) + y, z);

    i wonder if this scaling results in a certain graininess on my scope …

    Another thing is: Atari Text on the bottom of the screen seems distorted… is this a result of the stm32 DACs being too slow?

    Thank you very much.


  10. eric :

    Date: June 20, 2015 @ 6:36 pm

    Christian–IIRC the scaling is to fix the coordinate mapping from Asteroids to the STM32 DACs. You could check an individual DAC output to see if there is any “stepping” on your scope which could cause graininess. Since the text is also distorted, you might want to play with the g_vctr_post_delay variable. Try setting it really high, like 1000, to see if it reduces the distortion, and then back it down to make the game more playable. You should be able to adjust it while running in gdb.

  11. Christian :

    Date: June 28, 2015 @ 11:04 am

    Thank you very much! I will try … and report … 🙂

  12. Tomas Kozeluh :

    Date: January 13, 2022 @ 8:46 am

    Hello Eric, please is it possible somewhere to download description of your project (schematic and firmware)? I would like to build asteroids vector emulator for me so much. Thanks a lot.

  13. eric :

    Date: January 18, 2022 @ 11:54 pm

    firmware is available here: the design uses the vector deflection boards that I built, wired up to an STM32F407 discovery board.

  14. jeff :

    Date: September 11, 2022 @ 11:03 pm

    Have you seen the VST and the color variant?

    It’s interesting these folks went with multiple DACs (mcp4922) on a SPI bus. It’s also notable that like you, the original Atari Tempest (arguably the most famous color vector game), used a R-2R ladder DACs for Z axis (and RGB mixing).

    Any thoughts on supporting larger HV and deflector for bigger CRTs? Say 17kv and +/-15V? A yoke rewind is all that’s required to revive old CRTs as big vector displays! 🙂

Leave a Comment

Your comment

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.