The original version of this contribution to #CircuitPython2021 was hosted on Gist: https://gist.github.com/dglaude/54a13c7b04250328fff4f054e7d71c26
The original content is just copied here for ease of consultation.
Honestly, CircuitPython is pretty mature and has already a lot of features like Bluetooth and Wifi. Supporting new MCU could be interesting, but I am not sure what it could bring that is not already possible with nRF52 and AirLift.
So rather than discuss about many subject, I prefer to have a single “goal” and have all the suggestion to make this “goal” possible. The idea I will talk about is not new, a few attempts have already been done and I have already discussed this “in the weed”.
I have already invested a bit of time to demonstrate the possibilities, testing and promoting project like Quico.
Year 2021 should be the year of CircuitPython Retro Gaming Personal Computer.
The CircuitPython Retro Gaming Personal Computer (CPRGPC or CPC for short) has at the minimum a screen (or video output) and a keyboard. It boot instantly into the REPL and lets you start programming.
TL;DR: Show me what it could be…
Here are similar project that more or less do the thing I would like to exist:
- Quico: https://retro.moe/2020/12/31/building-quico-improved-sound-and-more-part-iii/ this offer sound, joystick, MatrixDisplay and is game minded.
- cyberDÛCK: https://hackaday.io/project/171269-cyberdck-a-circuitpython-anatidae#menu-description this is more terminal minded, support keyboard input and provide an editor.
- Keyboard Featherwing: https://www.solder.party/docs/keyboard-featherwing/ has all the hardware for a portable CPC but is just missing some feature in CP core to make it real.
- BasicPython: https://github.com/tannewt/basicpython offer one possible interface for editing Python code in Basic style and what could be used on a Pi400 or a PiZero
- PewPew M4: https://pewpew.readthedocs.io/en/latest/pewpew-m4/hardware.html Great hardware and library for gaming, just missing the keyboar?
- Gameduino 3X Dazzler: https://excamera.com/sphinx/gameduino3/ a Metro addon with GPU, HD HDMI out, dual Wii controllers, perfect to do
- Colour Maximite 2: https://geoffg.net/maximite.html a STM32 Basic computer with VGA output, keyboard and Wii controller input
With more words
Just like BASIC Computer of the past, on a CPC you can interact directly (REPL) but it has an edition mode to modify code.py main.py or any file you want.
Because it’s a computer, most of the time, except for serious upgrade, you don’t need a computer to use a CPC, it is your computer.
Because the CPC has files, it also act as a basic Disk Operating System to be able to copy/move/delete file.
Most user of CPC will want to play games, because that is the main reason for Computer to exist. So it has many ways to connect Joystick, wired or wireless should exist.
Let’s try to do a gap analysis to what we have and what we miss.
Software for making games
It is totally possible to make games with DisplayIO and the Stage library is another option to do it. Despite devices dedicated to games like the PyGamer, I do not feel that a lot of games have been produced in Circuit Python for that hardware. Maybe the possibility to use Make Code Arcade reduced the interest of writing Circuit Python games.
The REPL is there but there is no way except the console over USB to talk to it.
To have a CPC we need some proper way to have a keyboard connected to it, but that need to be integrated to be able to talk to the REPL.
For the hardware part of the keyboard: There are solutions like Keyboard FeatherWing or it I2C Keyboard PMOD with Stemma QT connector. There could be BLE keyboard but pure BLE this is rare and not currently supported, CP does support emulating a keyboard but not accepting a keyboard. There is a potential support for PS2 keyboard, it is easy to connect to an MCU even if in theory it requires 5V input. Maybe those are harder to find nowdays and I am not sure if the PR for PS2 support has been accepted. USB keyboard would need USB Host support, there are pieces in TinyUSB but not many boards currently supported by CP have USB Host hardware. One way to add USB host coprocessor that transform into UART, like a Trinket with usbhostcopro from gdsports.
Adafruit already has a few hardware with Joystick or a few button:
- PyGamer (Joystick and more)
- Clue (A and B)
- Adafruit Mini TFT with Joystick Featherwing
- Adafruit Mini Color TFT with Joystick FeatherWing dafruit Joy FeatherWing for all Feathers
But there are other ways to connect a Joystick and any I2C device made to be connected to a WiiMote.
And even more fun, any AirLift board with the special Bluepad32 firmware can be used to receive all kind of wireless joystick from a WiiMote to the new PS5 Joystick.
No special things are needed in CircuitPython to handle that, except maybe some library to abstract the variety of different API for those different kind of joystic.
There are already a lot of very mature screen or board with screen available from Adafruit. Those are perfect for portable CPC. But for real Retro nostalgia, it need output on the big screen.
For lowres nostalgia, the Hub75 LED matrix is another kind of screen, but hard to use for programming due to the low number of pixels. However Pico8 is usable on 128x128 pixels, so it depends a bit on the font you use.
Here are a few ways to get serious output on a big screen: Gameduino 3X Dazzler is now delivering and plug on a Metro board and has an HDMI output with GPU assistance. Scott want to work on Baremetal Circuit Python on Raspberry Pi Hardware, if supported the HDMI output would available. It is rather easy to make a VGA output from a few pin and a digital to analog conversion made of resistor. The difficult part is the precise timing for the sync signal, but the Maximite 2 Colour does that without problem on an STM32 chip.
I am not too much into sound, but part of the experience of a game is to have some kind of sound or noise. Many option are already supported: Beep and buzzer are already supported and can do basic thing like RTTTL. Midi output is a bit niche and required external hardware, but it is well supported in CircuitPython. Midi can be done in USB or on older interfaces. Maybe some very basic, lowcost and standard Midi synthesizer exist and can be an extension. The concept of modular computer where you can plug extension is very retro and can have some appeal and reduce the cost of a minimal computer that would not have sound. Wav and even MP3 playing is supported in CircuitPython, that might be an option. The solution I like the most is the Chiptune extension from Quico but this requires chips that are maybe hard to source nowdays, so good for DIY but hard for Adafruit to produce: https://retro.moe/2020/12/13/designing-a-modern-retro-console-for-my-kids-adding-chiptune-music/
The way to get there
There are a few project that are almost there and just need a few features in CP to get there. And they mostly related to the keyboard input and maybe removing the Blinka logo on the screen.
The editor is an important point, but there are already solutions like in CyberDuck or BasicPython.
From a hardware point of view, Adafruit could build the perfect hardware for a portable or a TV attached CPC. It could have “add-on” for some feature like a Stemma QT bus to attach a sound adapter.
It is also possible to enhance existing board like the PyPortal and just attach a keyboard and joystic. Take the PyGamer and add the keyboard option. Also a lot of PewPew board are game centric, but maybe only the PewPew M4 has a screen big enough.
Finally this could piggyback on somebody else hardware like the Colour Maximite 2 or the Pi 400, but of course this bring less value to Adafruit.
UPDATE 1: RP2040
The new RP 2040 from Rasberry has two M0+ core but CP only use one.
In the day0 project:
- Pimoroni has a VGA interface and some LCD display, including something portable game console shaped
- DVI interface
- MatrixLED Hub75
The chip is also USB Host capable. There is a BBC Micro emulator demonstrated.
So that board could be the center of a CircuitPython Game Computer:
- CP one one core
- USB Host to accept keyboard
- Second core and PIO to have a screen
- (2) I2C bus for Wii Classical Controler
So possibly a very promissing MCU for that goal.
UPDATE 2: People
Here is a list of inspirating people:
- @ricardoquesada for Quico game console
- @deshipu for Stage library and PewPew portable console
- @tannewt for CircuitPython and goal to have video output and BasicPython
- @kmatch98 for cyberDÛCK edit and run CircuitPython on the go
- @arturo182 for Keyboard Featherwing
- @jamesbowman for Gameduino 3X Dazzler
- Geoff Graham for Colour Maximite 2