For as simple as it appears now, Space Invaders was one machine from the Golden Age of video games that always seemed to have a long line waiting for a chance to lose a couple of quarters. And by way of celebrating the seminal game’s influence, [Nick Cranch] has executed what might just be the world’s smallest Space Invaders replica.
It appears that this started mainly as an exercise in what’s possible with what’s on hand, which included a couple of quite small OLED displays. For the build photos it looks like there’s an Arduino Nano running the show; [Nick] relates that the chosen hardware proved challenging, and that he had to hack the driver library to make it work. Once he got a working game, [Nick] didn’t rest on his laurels. Rather, he went the extra mile and built a miniature cabinet to house everything in.
The video quality below may be poor, but it’s more than enough to see how much work he put into detailing the cabinet. The graphics of the original US release of the game cabinet are accurately represented, right down to the art on the front glass. The cabinet itself is made from 1.5 mm plywood which he cut by hand. It even looks like he recreated the original scheme of cellophane overlays on the monochrome screen to add a little color to the game. Nice touch!
We really appreciate the attention to detail here, with our only quibble being no schematics or code being posted. Hopefully, we’ll see those later, but for now, this looks like a fun project and a nice trip down memory lane. But if you think it’s too small, no worries — we’ve got a much, much bigger version of the game too.
Not only is getting the Arduino and display to run all this a pretty amazing effort, the case alone is a great achievement!
these little screens do a lot in hardware. the ones ive played around with can do sprites pretty well (usually in the form of some kind of character memory). they kind of have to because refreshing every pixel over i2c would be incredibly slow.
are you sure? the display looks like a SSD1306 – this does not support sprites or even characters
datasheet is here: https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
I assume he meant the display is internally buffered, and that he’s sending sprite data over.
128×64 pixels is a common size for this. Which is only 1024 bytes to send over I2C. And these display drivers can go up to 10Mhz clock speed. So a 60FPS refresh isn’t that hard to reach at all.
I²C default clock rate is 100KHz. Sometimes they can go faster, but it depends on the devices attached. The maximum I could get this up to was 800KHz. I really don’t believe it’s possible to get it up to 10MHz.
I made a similar little device I called pocKonso (I posted an Instructable detailing the build, for the curious) using a seeeduino Xiao SAMD21 and an oled.
The OLED has some advantages: bright and sharp pixels, with very low battery consumption.
I made a similar device using a similar OLED (I posted an Instructable – Google for pocKonso, if curious).
The OLED is very bright and crisp, so despite the small size. Also it is very economical on battery as it only lights up the pixels used. The refresh rate is problematic only if in movement (i.e., walking).
I’m working on an updated version, using a Pico. (Used a Seeeduino Xiao for the pocKonso).
I’ve had one of these for maybe 10 years?
https://thepihut.com/products/tiny-arcade-clear
5 years
grats you bought something?
Where does he find the tiny quarters to start the game?
What is this?! A Space Invaders for ANTS?!?
The screen is, as someone else pointed out, an SSD1306. There are no sprites available. To get a decent update speed, the I²C clock has been pushed up to 800KHz rather than the default 100KHz.
Additionally, I modified the graphics driver, so that only areas that have been altered need be updated. The graphics “draw” functions only update the buffer. The screen itself is not updated automatically. Then at the end of every iteration of the main program loop, if the buffer has been altered, the altered region is sent to the screen.
I²C default clock rate is 100KHz. Sometimes they can go faster, but it depends on the devices attached. The maximum I could get this up to was 800KHz. I really don’t believe it’s possible to get it up to 10MHz.