Port of the wonderful Octo (just the emulator, not the complete IDE) by John Earnest to ESP32-2432S024C with capacitive touch.
The UI is self-contained. The 320x240 pixel display shows the classic CHIP-8 hex display, extended by four buttons to browse games from the CHIP-8 archive ("<", ">", "G") or switch to the built-in monitor and disassembler ("M").
The goal is to create a cheap, self-contained gadget that allows to examine and write fun games completely without a connected computer.
There are versions for small ESP32-based boards as well as a simulator for desktop PCs (currently tested on Linux; should work on macOS).
Use "git clone --recursive" to get the required submodules.
The touch interface is a CST820, connected with I2C. This is not supported by LovyanGFX. The board file specifies a CST816S, connected with SPI. I couldn't get this to work. Instead, I use files CST820.{cpp,hpp} from https://github.com/NoosaHydro/2.4inch_ESP32-2432S024.git
There are ~100 games from the CHIP-8 archive in "vendor/chip8Archive/roms".
The emulator needs the files to be in a special format, which is created by running make fs
. Put the folder ec8
with the ROMs *.ec8 (or the contents of file ec8.zip
in the release) in the root of your SDcard.
The ESP32-2432S024C is one of the Sunton branded yellow ESP32 boards with a display. It is an even smaller and cheaper sibbling to the _Cheap Yellow Display. I have attached a rechargable battery (3,7V 3000mAh LiPo Akku - affiliate link) and a small speaker (Adafruit Mini-Lautsprecher, oval, 8 Ohm, 1 Watt (3923) - affiliate link) to their respective JST 1.25 connectors.
Here are some pictures:
Obviously, the assembly needs to get a 3d-printed case.
The Nunchuk controller for the Wii connects via I2C. This makes it easy, with a small adapter, to support these as game controller.
by thingm - Clone - affiliate link
- Clone - affiliate link
2024-02-18:
Sadly, I could not get neither of my Nunchuks to work with the example code.
Also sad: Including ESP Async WebServer leads to "DRAM segment data does not fit. Region `dram0_0_seg' overflowed by 11768 bytes". It seams it won't be possible to have a webserver in addition to the emulator.
It helps to dynamically allocate the emulator.