Six systems
NES (Famicom), Game Boy, Game Boy Color, Sega Master System, Game Gear and CHIP-8 / SUPER-CHIP — all in one firmware.
Free firmware · ESP32 · 4.0″ CYD
Turn a Cheap Yellow Display into a pocket retro console.
Free firmware for the 4.0″ ESP32 touch board that plays NES, Game Boy, Game Boy Color, Sega Master System, Game Gear and CHIP-8 homebrew from a microSD card. Flash it straight from your browser — no toolchain, no command line.
Stylised illustration · 4.0″ ESP32-32E (E32R40T) running the RetroCYD launcher. Game titles shown are made-up examples.
What you get
Everything below is in the firmware today. Things that aren't done yet live on the roadmap, not here.
NES (Famicom), Game Boy, Game Boy Color, Sega Master System, Game Gear and CHIP-8 / SUPER-CHIP — all in one firmware.
System tiles, a recently-played list, an A–Z quick-jump bar and touch-drag scrolling. Big folders get a sorted index on the SD card the first time (a few seconds for ~10,000 files), then open instantly. Subfolders welcome.
Games are copied from SD into a 2 MB flash partition and run from there. A new game takes a couple of seconds (with a progress bar); relaunching the same one is instant. ZIPs with a single ROM work too.
Battery saves (.sav) are written to the SD card when you open the menu, quit, and periodically while playing. Plus 4 save-state slots per game.
In game: resume, save/load state, reset, screen scale, volume, quit — open it with BOOT, the on-screen MENU button, or HOME on a controller. Settings: backlight, fast display, FPS counter, touch calibration, Game Boy palette and more.
An on-screen gamepad for quick play, a Wii Classic Controller (Pro) or NES / SNES Classic Mini controller on the I2C header, or a PS5, Xbox or Switch pad through a Bluetooth bridge board. Hot-plug, auto-detected.
Audio through the board's DAC and on-board amplifier to the 1.25 mm speaker connector. Add a small 8 Ω or 4 Ω speaker and you're done.
Pick your Wi-Fi in Settings and RetroCYD downloads about 1,300 free homebrew games from Homebrew Hub, the CHIP-8 Archive and SMS Power! — automatically at startup, or when you tap “Download now”. Each file is checked before it's kept. Firmware updates install over Wi-Fi too.
Web installer
Uses ESP Web Tools and the Web Serial API. Works in desktop Chrome, Edge and Opera.
Use a USB-C data cable. Many cables in drawers are charge-only and the board simply won't show up.
RetroCYD is built for the 4.0″ ESP32-32E (E32R40T with touch, E32N40T without). Other CYD variants use different displays and pins.
Click the button and pick the port called something like USB-SERIAL CH340 or USB Serial. Nothing listed? You may need the CH340 driver.
On a first install tick Erase device — it wipes old firmware and settings from the flash chip only. Your SD card is never touched.
Wait for the progress bar to finish (usually a minute or two). The board restarts into RetroCYD. Now set up the SD card.
“Failed to connect”? Hold BOOT while you click Connect, release once it starts. More fixes in Troubleshooting.
Flashing needs desktop Chrome, Edge or Opera.
Prefer the command line? Download the .bin below and use esptool.
Optional · Bluetooth
Add a second ESP32 board for a few euros as a Bluetooth receiver. It connects to your controller and passes the buttons to the CYD like a wired Wii Classic controller, so the CYD gives the games all its RAM as before.
D25/D26 or G25/G26, and VIN may be marked 5V. Leave the I2C header's 3V3 pin free.The bridge takes 5 V from the CYD's 4-pin serial header, which carries the power of the CYD's USB-C port. Don't use the 3V3 pin instead: the CYD's small 3.3 V regulator already powers the CYD and its backlight, and the extra load could overheat it and reset the CYD. On battery, the serial header has no 5 V. In that case, power the bridge from its own USB-C port with a power bank, and don't connect the 5V wire. Use one power source for the bridge, not both.
Any ESP32-WROOM-32 board: “ESP32 DevKit”, “NodeMCU-32S”, CH340 or CP2102, USB-C or micro-USB. Not an ESP32-S3 or C3: they lack the Classic Bluetooth that PlayStation and Switch controllers use.
Plug the bridge board (not the CYD) into your computer and install with the button on the right. Tick Erase device. Then unplug it.
Four wires, as in the picture: 5V from the serial header, plus GND, SDA and SCL from the I2C header. A wired Wii controller can't be connected at the same time.
Power the CYD over USB. The bridge searches by itself; on most boards its blue LED blinks. Put the controller in pairing mode. On a PS5 or PS4 pad, hold Create (or Share) and PS until the light flashes. Next time, just press PS.
PAD appears in the top-right corner of the CYD. Circle = A, Cross = B, Options = START, Create = SELECT, PS = menu.
Xbox, Switch Pro and 8BitDo pairing, the full button table and troubleshooting are in the guide.
Both are ESP32 boards, so the installer can't tell them apart. If you flash this onto the CYD by mistake, just install RetroCYD again above.
The bridge runs BlueRetro by Jacques Gagnon, unmodified. RetroCYD isn't affiliated with BlueRetro.
FAT32. Cards up to 32 GB work out of the box; bigger cards must be reformatted to FAT32.
RetroCYD creates /roms/nes, /roms/gb, /roms/gbc, /roms/chip8 and /saves for you.
Drop homebrew ROMs (or ZIPs) into the right folder. Not sure where to get them legally? We made a list.
Tap a system tile, pick a game. BOOT, on-screen MENU or HOME opens the in-game menu.
Compatibility
Nintendo Entertainment System / Famicom. Full speed with automatic frame-skip. Mappers 0–4, 7, 9–11, 66 and 71 (NROM, MMC1, UxROM, CNROM, MMC3, AxROM, MMC2/4 and more).
/roms/nes · .nes .zipThe original monochrome handheld, with selectable palettes.
/roms/gb · .gb .gbc .zipColour games and dual-mode cartridges.
/roms/gbc · .gbc .gb .zipCHIP-8 and SUPER-CHIP programs. Runs trivially fast.
/roms/chip8 · .ch8 .c8 .sc8 .zipSega's 8-bit console (Mark III). Full speed, Sega mapper with battery saves, and the older TMS9918 picture modes some homebrew uses. Button 1 / 2 are B / A, START is PAUSE.
/roms/sms · .sms .zipSega's colour handheld: the Master System hardware with a 160×144 screen and 4096 colours.
/roms/gg · .gg .zipThe board has one ESP32 (dual-core Xtensa LX6, 240 MHz) with 520 KB of internal RAM, no PSRAM, 4 MB of flash, and a display that is fed pixel-by-pixel over SPI. That's plenty for 8-bit machines and nowhere near enough for these:
Honesty box
Yes — with realistic expectations. Here's how it feels in practice.
The emulator aims for full speed and skips displayed frames, not game frames. Settings › Show FPS shows the real game speed and CPU load on your board.
Depends on screen scale and the “fast display” setting.
Every pixel travels to the ST7796S as 16 bits over SPI. Raw transfer ceilings (before any emulation work):
| Picture | Pixels | 40 MHz | 80 MHz* |
|---|---|---|---|
| Game Boy 160×144 | 23,040 | ≈108 fps | ≈217 fps |
| Game Boy ×2 → 320×288 | 92,160 | ≈27 fps | ≈54 fps |
| NES 256×240 | 61,440 | ≈41 fps | ≈81 fps |
| Full screen 480×320 | 153,600 | ≈16 fps | ≈33 fps |
* “Fast display” in Settings overclocks the display SPI from 40 to 80 MHz. Many panels handle it; if you see glitches, switch it off. As long as the CPU keeps up, the game itself runs at its real speed and only the number of frames shown changes.
These are worst cases with every pixel changing. RetroCYD only sends the rows that changed, starts sending while the frame is still being emulated, and while the picture scrolls updates every other line per frame (Settings › Smooth motion), which halves the data.
Next up
Ideas we're working towards. None of these are in the firmware yet — no promises on dates.
Keep reading
Hardware, SD card, controls, wiring a controller, settings, pinout, troubleshooting, FAQ and building from source.
OPEN GUIDE →Hand-picked homebrew archives, game jams and how to back up your own cartridges.
FIND GAMES →Found a problem or want a feature? Open an issue on GitHub.
OPEN AN ISSUE →