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.

14 thoughts on “Playing ZX Spectrum’s Manic Miner On The Arduino Uno

    1. But then, why not a Game Boy? And then why not a PlayStation 5?

      Of the many reasons for wanting a ZX Spectrum, I don’t think anyone ever mentioned technical excellence.

  1. Thanks for listing my project! I should mention the flickering is only due to recording the CRT with my phone. It’s not visible in real life. I did also test on some LCD panels with composite in (like the cheap reversing camera screens from Amazon) and my TV, but I like the look of the CRT – it “fits” better 😁

    1. Not sure if you noticed, this guy used an original UNO. It’s an 8-bit micro at 16Mhz, with 32KB of flash and 2KB of RAM. I haven’t seen an UNO do something like this before. I’m trying to modify it to work with my NTSC screen – I think it only works with PAL? Yeah you can just take an easy path and use a much more powerful device but this is more about optimised code. Using a 32bit R4 is like telling someone who ran a marathon that they should just buy a car.

  2. LOL! Not sure if you noticed dude, this guy used an original UNO. It’s an 8-bit micro at 16Mhz, with 32KB of flash and 2KB of RAM. I haven’t seen an UNO do something like this before. I’m trying to modify it to work with my NTSC screen. Yeah you can just take an easy path and use a much more powerful device but that’s like telling someone who ran a marathon that they should just buy a car.

    1. I was aware of the TVout library, but this resolution is next level; I wonder how reusable the sprite engine is? Well done to the project author though, it’s certainly impressive!

    1. Hi! All the code for the project is in the repo. There are no .cpp files – just .h files containing the C code and the .S assembler file. It should compile without any changes in Arduino.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.