Gameduino 3X Dazzler

by Excamera Labs

An Arduino shield with a GPU, FPGA, HDMI, and Python support for gaming and audiovisuals

View all updates Oct 01, 2020

Asteroids

by James Bowman

For several years now, I’ve wanted to duplicate the original vector-display Atari Asteroids on the Gameduino. There’s something about the this early monochrome vector game that I find very pleasing. This Summer finishing Dazzler presented the perfect excuse.

I followed the MAME-to-oscilloscope instructions and got MAME built so it outputs a vector list. The Asteroids hardware had a clean split: the CPU generated a list of line segments, and the CRT controller drew the segments. There’s no sprites, background, or even colors to think about. Just a list of lines, each with an 8-bit brightness. Once that was extracted from MAME it was just a matter of making some code to draw that vector list on the Dazzler.

Taking the line list and rendering them on the Dazzler gave something that immediately looked promising:

The Atari’s vector display technology was additive: the screen started off dark and the beam painted the phosphor. Places that got painted twice became twice as bright. (At least in principle; nonlinearities throughout the system make the perceived brightness curve more complicated.) The EVE can be set up to do additive blending, very like in OpenGL:

gd.BlendFunc(eve.SRC_ALPHA, eve.ONE)

Note how the spots where the vectors meet are double-brightness from being painted twice.

It’s looking a bit too flat and perfect for a CRT. So the next step is to add barrel distortion, a characteristic artefact of CRTs. This is a simple scale of each point’s (x,y) based on its distance from the center. Here I’ve rendered the display edges to make the barrel distortion clear.

Another important CRT artifact is glow. By drawing a slight glow around each point, the accumulated brightness increase gives a suitable glowy effect.

This isn’t very physically accurate - you’d need some desktop-GPU power to duplicate the actual gaussian glow effect. But it’s close enough:

Adding an image of an original Asteroids screen surround completes it:

Gives the finished look. In real-life, on the LCD, it looks really authentic. It’s very tempting to build a 6502 simulator to get the whole game running on Teensy, which is easily powerful enough to run the Arcade code in simulation and do the vector conversion.

About the Author

James Bowman


$10,369 raised

of $10,000 goal

103% Funded!

Pledge Now

$39

Dazzler Arduino Shield

A single Dazzler, ready to work with your Arduino or Arduino-like.


$89

Dazzler Python Game Pack

A Dazzler Arduino Shield, an Adafruit Metro M4, a 16 GB microSD card, and two Wii Classic-compatible controllers.


$99

Dazzler Core Pack

Three Dazzler Core modules, and a 0.1" adapter board for easier prototyping.

Credits

Excamera Labs


James Bowman

Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects: