We’ve often sung the praises of the Arduino – see the roundup The many faces of Arduino, for example – but this has never involved the subject of gaming.
Well, you can now connect your Arduino system to a VGA monitor and speakers, to enable writing an Arduino sketch to create video games (via Forth)…
Thanks to Technabob for highlighting this interesting Arduino-based development – support for 8-bit video gaming via the Gameduino, based on a Xilinx FPGA. It is a properly designed, tested, and documented project created by Gadget Master James Bowman, and it is made available as open-source hardware (BSD license).
“It’s packed full of 8-bit game goodness: hundreds of sprites, smooth scrolling, multi-channel stereo sound,” promises Kickstarter, which ships ready-made versions of the system in return for pledges of $53.
James provides full details of how to make a Gameduino board – see Gameduino: a game adapter for microcontrollers. He writes:
Gameduino is a game adapter for Arduino – or anything else with an SPI interface – built as a single shield that stacks up on top of the Arduino and has plugs for a VGA monitor and stereo speakers. The sound and graphics are definitely old-school, but thanks to the latest FPGA technology, the sprite capabilities are a step above those in machines from the past.
The adapter is controlled via SPI read/write operations, and looks to the CPU like a 32Kbyte RAM. (Unlike many 8-bit machines, there are no restrictions on when you can access this RAM). There is a handy reference poster showing how the whole system works, and a set of sample programs and library.
Points he notes:
- All the design files for Gameduino are open-source.
- The Eagle board layout is under http://excamera.com/files/gameduino/eagle/
- The Verilog source for ISE Webpack 11.1 is under http://excamera.com/files/gameduino/verilog/
- This should be enough to get the Gameduino up and running. To load the SPI flash with the Gameduino image, see Xilinx application note XAPP974.
In terms of the spec, it supports video output of 400×300 pixels in 512 colours. Audio output is a stereo 12-bit frequency synthesizer (16 independent voices of 10-4000 Hz, per-voice sine wave or white noise).
For foreground graphics, each sprite is 16×16 pixels with per-pixel transparency, and can use 256, 16 or 4 colours. There are 96 sprites per scan-line, and 1536 texels per line. For background graphics, there is 512×512 pixel character background, supporting 256 characters, each with independent 4 colour palette.
How fast can the Arduino write to Gameduino memory? According to James, in the best case – a bulk transfer – for a 16MHz Arduino the peak rate is 1 Megabyte/s. The Arduino writes bytes via SPI directly into Gameduino RAM, he says.
Other features of the system include being able to save high-score tables, running on USB power or an external power supply, reload the FPGA via a JTAG programmer. You can also reload the onboard flash with a new boot image.