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.
I only got as far as the penguins…
They’re slippery ones :)
MSX please. Same cpu but better computer.
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.
There were many technically better computers than a ZX Spectrum, but none could have brought colour computing to millions of British kids like the Speccy did & it’s its radical simplicity that attracts interest today.
Also, the Speccy helped to bring down Communism in Poland ;-) !
https://hackaday.com/2016/07/05/retrotechtacular-how-solidarity-hacked-polish-tv/
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 😁
Awesome work!
Great project, and I have to admit I like those old-fashioned mono CRTs too, especially in green or amber :-)
Arduino Uno R4 to the rescue.
Arm Cortex M4 48MHz, 256 kB Flash, 32 kB RAM, 12 and 8 bit DACs, 3 OpAmps,…
Seems like you can do a lot of nice things with these.
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.
TVOut works fine with NTSC on an Uno R3. R4 timers are quite odd. I think there has been a recent update to get around some issues with the frame work. DAC is slow.
I think you could abuse the SPI bus: https://forum.arduino.cc/t/tvout-using-spi/313826
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.
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!
Quite impressive work. Some .cpp files seem to be missing on his repo. The headers are all there though.
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.