µGame – a Python-based handheld game console
Posted: Thu Nov 30, 2017 11:55 pm
I present to you a tiny little handheld game console, which you can program in Python to make your own games: https://hackaday.io/project/27629-game
This is still very much a work in progress, but with the 5th iteration of the prototype I feel confident enough to show it and to ask for feedback. You can read my development logs on the project page.
This is a project that I wanted to make ever since I first saw the PyBoard — unfortunately, at the time I couldn't even afford more than one myself, and the resulting consoles would be quite expensive for a toy. My hopes revived when I heard about the ESP8266 — I immediately started some preliminary tests, and after the Kickstarter, I was sure I was going to do it, even though a lot of things were missing software-wise. I started to slowly push the bits and pieces that I will need — the support for the hardware SPI peripheral, improvements to the framebuf module, etc. I very quickly realized that my goals don't align very well with the goals of the project in general, and the ESP8266 port in particular, and that it will take a really long time to get anything even barely working. So I gave up on the upstream-first approach, and started experimenting on a fork. But the impetus was lost, soon the project was shelved, and I directed my attention to other projects.
But then more ports of MicroPython appeared, and among them the CircuitPython port to Atmel's SAMD21 microcontrollers, which brought the ease of access to the filesystem known from the PyBoard with part prices close to that of the ESP8266. I decided to try and make a shield for the Adafruit's Feather boards, that would let you play simple games on an 8x8 LED matrix — and thus I spent the last year working on the PewPew FeatherWing. While it is potentially a great educational tool, it still needs much more work in terms of community building to actually amount to anything — we will see how that works. But that project also gave me the motivation and the experience to revive my original dream, and try to make a game console with a proper tile and sprite engine. So I started playing with the Adafruit's M0 boards and display modules, initially implementing everything in Python, and then rewriting the critical parts in C for speed. The CircuitPython project merged my patches, and I'm slowly polishing the console prototype into a usable and manufacturable state. I also wrote a couple of simple games and demos, and I'm working on expanding and improving the Python part of the game library. I'm trying to make it generally useful, not just on this one device, but without making it too generic at the cost of performance.
I'm hoping that in a couple of months I will have something that can be actually bought and used by a wider audience, and that there will be other projects using the same game library (not necessarily only for games).
Of course it wouldn't be possible without the great work of Damien, Paul, Scott and Dan, and all the other people in the MicroPython and CircuitPython community — but I hope that a small addition, like the game library I wrote, can bring a whole new audience and new energy into the project.
This is still very much a work in progress, but with the 5th iteration of the prototype I feel confident enough to show it and to ask for feedback. You can read my development logs on the project page.
This is a project that I wanted to make ever since I first saw the PyBoard — unfortunately, at the time I couldn't even afford more than one myself, and the resulting consoles would be quite expensive for a toy. My hopes revived when I heard about the ESP8266 — I immediately started some preliminary tests, and after the Kickstarter, I was sure I was going to do it, even though a lot of things were missing software-wise. I started to slowly push the bits and pieces that I will need — the support for the hardware SPI peripheral, improvements to the framebuf module, etc. I very quickly realized that my goals don't align very well with the goals of the project in general, and the ESP8266 port in particular, and that it will take a really long time to get anything even barely working. So I gave up on the upstream-first approach, and started experimenting on a fork. But the impetus was lost, soon the project was shelved, and I directed my attention to other projects.
But then more ports of MicroPython appeared, and among them the CircuitPython port to Atmel's SAMD21 microcontrollers, which brought the ease of access to the filesystem known from the PyBoard with part prices close to that of the ESP8266. I decided to try and make a shield for the Adafruit's Feather boards, that would let you play simple games on an 8x8 LED matrix — and thus I spent the last year working on the PewPew FeatherWing. While it is potentially a great educational tool, it still needs much more work in terms of community building to actually amount to anything — we will see how that works. But that project also gave me the motivation and the experience to revive my original dream, and try to make a game console with a proper tile and sprite engine. So I started playing with the Adafruit's M0 boards and display modules, initially implementing everything in Python, and then rewriting the critical parts in C for speed. The CircuitPython project merged my patches, and I'm slowly polishing the console prototype into a usable and manufacturable state. I also wrote a couple of simple games and demos, and I'm working on expanding and improving the Python part of the game library. I'm trying to make it generally useful, not just on this one device, but without making it too generic at the cost of performance.
I'm hoping that in a couple of months I will have something that can be actually bought and used by a wider audience, and that there will be other projects using the same game library (not necessarily only for games).
Of course it wouldn't be possible without the great work of Damien, Paul, Scott and Dan, and all the other people in the MicroPython and CircuitPython community — but I hope that a small addition, like the game library I wrote, can bring a whole new audience and new energy into the project.