Arduino Engine Runs Many Games

A few years ago, [Smashcat] ported a ZX Spectrum game called Manic Miner to the Arduino Uno. The Arduino has less memory than the original Spectrum did, so doing all this on an 8-bit microcontroller was no easy lift. Since then, parts of this original port have been adapted to produce a game engine, allowing [Smashcat] to port several other games to the Arduino Uno as well.

The engine is able to host a 2D map with the ability to scroll, at a resolution of 256×256, as well as up to nine sprites at the same time. The graphics are locked to 50 FPS, but only with a real Arduino Uno that has a crystal oscillator. Some replica boards do not have a timekeeping chip accurate enough to replicate the video signal, which is done without a framebuffer. That signal, as well as two PWM audio channels, are still generated directly as well, with only a few resistors needed to hook everything up to a monitor and a controller, including the option of using an NES controller.

With all of that running on the Arduino and it hooked up to the daughterboard that provides the controller interface as well as the resistors for the video signal to function and a driver for a speaker, the system now runs the original Manic Miner as well as three other games: Scramble, Space Invaders, and Pac Man.

The engine and the rest of the code are available on a GitHub page as well, and there’s even a WebAssembly version available to run various pieces of the software without the specific hardware. The original ZX Spectrum was an interesting machine too that still inspires builds like this, despite it being well over 40 years old now.

Playing ZX Spectrum’s Manic Miner On The Arduino Uno

Composite output shield with audio driver and controller inputs for Arduino Uno (Credit: Scott Porter)
Composite output shield with audio driver and controller inputs for Arduino Uno (Credit: Scott Porter)

Although it seems many have moved on to 32-bit MCUs these days for projects, there is still a lot of fun to be had in the 8-bit AVR world, as [Scott Porter] demonstrates with a recent Arduino Uno project featuring his game engine running a port of the Manic Miner game that was originally released in 1983 for the ZX Spectrum. For the video and audio output he created an add-on board for the Uno that creates a composite signal using two resistors, along with an audio driver circuit and control inputs either from the onboard buttons or from a NES controller. Audio can be sent either over the composite output or via the audio jack.

A demonstration of the game is provided in a number of videos on [Scott]’s YouTube account, which shows off a few levels, at 256×256 resolution. It contains all 20 original levels, with a few quality of life upgrades with animation. It also features original music, which may or may not work for you, but music can be turned on or off in the main menu. Compared to the 3.5 MHz Z80 MPU in the ZX Spectrum, the 16 MHz AVR of the Uno is a lot beefier, which raises the hope that a color version like the ZX Spectrum one is also in the future, even if it may require an add-on board with a framebuffer. As [Scott] notes, the weakness of the Uno is that the ZX Spectrum has significantly more RAM, which limits what can be done.

Thanks to [256byteram] for the tip.

Continue reading “Playing ZX Spectrum’s Manic Miner On The Arduino Uno” →