// the find
ducalex/retro-go
Retro emulation for the ODROID-GO and other ESP32 devices
Retro-Go is a firmware image for ESP32 handhelds, mainly the ODROID-GO and MRGC-G32. It packages a launcher with emulators for NES, SNES, Game Boy, Master System, Game Gear, Mega Drive, PC Engine, Lynx, ColecoVision, and a DOOM port. It suits people who own one of these devices and want more than stock firmware, and ESP32 developers who want a working example of running several emulator cores in very little RAM.
- The emulators are ports of established cores (Snes9x 2005, libretro-handy, PrBoom 2.5.0, Gwenesis, fMSX) rather than fresh rewrites, so compatibility rests on code that has already been run against many ROMs. The project's own work is fitting those cores into the ESP32's memory budget.
- The launcher covers features most ESP32 emulator projects skip: multiple save slots per game, favourites, recently played, cover art loaded from the SD card, and a file manager served over WiFi. Crash and freeze detection is automatic.
- Hardware is abstracted per board. Each device gets its own config.h, env.py and sdkconfig under components/retro-go/targets, and there is an SDL2 target, so at least part of the code can run on a desktop without flashing hardware.
- The docs are split by task (BUILDING, PORTING, THEMING, LOCALIZATION, plus a netplay design note), which makes it realistic to add a board or a theme without reading the whole tree.
- The licensing is less simple than the headline. The top-level COPYING says GPLv2, but the fmsx MSX core uses a custom non-commercial license and the Lynx core is zlib. Anyone building a product on this needs to read the per-component licenses.
- The repo is heavy to audit. Whole emulator cores and libraries like cJSON, lodepng and miniz are vendored in, and a compiled Z80.o object file is checked into the gwenesis tree. That is a build artifact and does not belong in version control.
- The README's Issues section is effectively the support documentation. Boot loops need a manual hold-DOWN to reach the launcher, the ODROID-GO audio is too loud at the top and distorted at the bottom without a resistor mod, and Game Boy SRAM saves are only reliable through save states.
- ZIP loading depends on free memory, so larger ROMs can fail on some devices, and there is no table of which games or ROM sizes work on which board. You find out by trying.