01 Hardware
RetroCYD targets the 4.0″ ESP32-32E display board documented on LCDwiki, sold as E32R40T (with resistive touch) and E32N40T (no touch). It's an ESP32 with a 320×480 ST7796S screen, microSD slot, audio amplifier and USB-C on one board — a bigger sibling of the original “Cheap Yellow Display”.
Shopping list
| Item | Needed? | Notes |
|---|---|---|
| 4.0″ ESP32-32E board | Yes | E32R40T (touch) recommended. The E32N40T has no touch panel, so it needs a controller. |
| microSD card | Yes | SDHC, up to 32 GB, formatted FAT32. Even 4 GB holds thousands of 8-bit games. |
| USB-C data cable | Yes | For flashing and power. Must carry data — charge-only cables won't work. |
| Small speaker | Recommended | 8 Ω 1.5 W or 4 Ω 2 W with a 1.25 mm 2-pin plug (often listed as “JST 1.25” or “MX1.25”). |
| Wii extension breakout adapter | Optional | Small PCB the controller plugs into; exposes + − d c pads. Needed for a wired controller. |
| Classic-style controller | Optional | Wii Classic Controller, Classic Controller Pro, or the NES / SNES Classic Mini controller. |
| ESP32-WROOM-32 dev board | Optional | Bluetooth bridge for PS5, PS4, Xbox, Switch Pro and 8BitDo controllers (“ESP32 DevKit”, “NodeMCU-32S”). Not an ESP32-S3 or C3. See Bluetooth controller. |
| 4-pin 1.25 mm cable | Optional | To connect the board's I2C header to the breakout. Some boards ship with one. |
| 3.7 V LiPo battery | Optional | Single-cell LiPo with a 1.25 mm 2-pin plug. Check polarity before plugging in — these plugs are not wired the same way by every seller. |
Supported boards
| Board | Display | Touch | Status |
|---|---|---|---|
| E32R40T (4.0″ ESP32-32E) | ST7796S · 320×480 | Resistive, XPT2046, single touch | Primary |
| E32N40T (4.0″ ESP32-32E) | ST7796S · 320×480 | None — controller required | Primary |
Other CYD variants (for example the original 2.8″ ESP32-2432S028) use different displays and pins and have no RetroCYD build. Flashing a build for the wrong board is harmless — you'll just get a white or garbled screen until you flash the right one.
Inside: ESP32-D0WD-V3 (dual-core Xtensa LX6, up to 240 MHz), 520 KB SRAM, 4 MB flash, no PSRAM, on-board USB-serial chip (CH340-type), BOOT and RESET buttons. Full pin map in section 11.
02 Flashing
The easiest way is the web installer. It runs entirely in your browser using ESP Web Tools and the Web Serial API.
- Plug the board into your computer with a USB-C data cable.
- Open this site in desktop Chrome, Edge or Opera (Windows, macOS, Linux, ChromeOS). Firefox, Safari and mobile browsers don't support Web Serial.
- On the flasher, pick your board.
- Click Connect & install and choose the serial port — usually named USB-SERIAL CH340, USB Serial or wchusbserial.
- Click Install. On a first install, tick Erase device. It clears the board, not your SD card (see Erasing).
- Wait for the progress bar to finish. The board reboots into RetroCYD.
Hold BOOT while you click Connect (or press and release RST while holding BOOT), then let go once the flasher starts talking to it.
USB-serial drivers
The board's USB port goes through a CH340-type USB-to-serial chip. If no port shows up in the list:
- Windows: Windows Update often installs the driver automatically. If not, install WCH's CH341SER driver, then check Device Manager → Ports (COM & LPT) for USB-SERIAL CH340 (COMx).
- macOS: recent versions usually recognise it out of the box. If not, install WCH's CH34x macOS driver and allow it in System Settings → Privacy & Security.
- Linux: the driver is built into the kernel. If the port appears but can't be opened, add yourself to the serial group (
sudo usermod -aG dialout $USER, oruucpon Arch) and log in again. Some distros'brlttypackage grabs CH340 devices — removing it helps.
Only one program can use a serial port at a time: close Arduino IDE / PlatformIO serial monitors and other flashing tools first.
03 Erasing & recovery
What does “Erase device” do?
When the web installer asks whether to erase, it means erase the flash chip before writing. That clears old firmware, RetroCYD's settings (volume, brightness, calibration…) and the ROM cache. Your SD card — games and saves — is not touched. It's fully reversible: the next install puts everything back, and settings return to defaults. Erasing is recommended on a first install or when switching from other firmware.
Why the board can always be recovered
The ESP32 has a built-in bootloader in its ROM, which flashing can't overwrite. Holding BOOT (IO0) at reset always starts its download mode, so whatever happens to the firmware, you can flash again.
Recovery steps
- Hold BOOT.
- Tap RST (EN) once while still holding BOOT.
- Release BOOT. The board is now in download mode and waits for the flasher (RetroCYD won't start — that's expected).
- Flash again with the web installer (tick Erase device) or with esptool below.
Manual flashing with esptool
Prefer the command line? Download the merged .bin from the flasher panel, install esptool (pip install esptool) and run:
$ esptool.py --chip esp32 write_flash 0x0 retrocyd-cyd40-merged.bin
- Add
--port COM5(Windows) or--port /dev/ttyUSB0(Linux) after--chip esp32if esptool picks the wrong port. - For a clean slate first,
esptool.py --chip esp32 erase_flashis the same as the web installer's “Erase device”. - Newer esptool releases also accept the spelling
esptool --chip esp32 write-flash 0x0 …; it's the same command. - The image is a single merged file that goes at offset
0x0. Don't split it or use other offsets.
04 SD card
Format: FAT32
Use a microSD (SDHC) card formatted FAT32. Cards up to 32 GB usually come that way and work out of the box. Bigger cards (SDXC) ship as exFAT and must be reformatted to FAT32:
- macOS: Disk Utility → select the card → Erase → Format MS-DOS (FAT), Scheme Master Boot Record.
- Linux:
sudo mkfs.vfat -F 32 /dev/sdX1— double-check the device name first. - Windows: the built-in formatter only offers FAT32 up to 32 GB. For larger cards use a third-party FAT32 formatter, or simply buy a 32 GB card — games for these systems are tiny.
Folder layout
Insert the card and boot RetroCYD once — it creates this structure for you:
microSD (FAT32)
├── roms/
│ ├── nes/ .nes .zip
│ ├── gb/ .gb .gbc .zip
│ ├── gbc/ .gbc .gb .zip
│ ├── sms/ .sms .zip Master System
│ ├── gg/ .gg .zip Game Gear
│ └── chip8/ .ch8 .c8 .sc8 .zip
├── saves/
│ └── <system>/ battery saves (.sav) + save states (.st0 – .st3)
└── retrocyd/ library index cache — safe to delete, it's rebuilt
- Game Boy vs. Game Boy Color: both folders accept
.gband.gbc. Sort them however you like — e.g. monochrome games ingb/, colour games ingbc/. - Subfolders are fine (
/roms/nes/puzzle/…) — handy for big collections. - Backups: copy
/saves/to your computer now and then. That's all your progress.
Adding games
- Get games from a legitimate source — see Free & legal games.
- Unzipping is optional: a
.zipcontaining a single ROM works. - Copy each ROM into the matching
/roms/<system>/folder. - The file name is the title shown in the launcher — rename files to something readable.
- Keep every ROM at 2 MB or less (uncompressed).
- Eject the card safely, insert it, and if new games don't appear use Settings → Rescan library.
05 Launcher & library
The home screen shows a tile per system and a recently played list so you can jump straight back into a game. Inside a system, games are listed alphabetically; drag to scroll, or use the A–Z bar on the edge to jump to a letter.
Built for thousands of games
Reading a huge directory from FAT32 on every visit would be slow, so the first time you open a big folder RetroCYD builds a sorted index and stores it in /retrocyd/ on the card. That takes a few seconds for around 10,000 files. After that, the folder opens instantly. Delete /retrocyd/ or use Rescan library at any time to rebuild it.
The ROM cache
The ESP32 has only 520 KB of RAM — less than many ROMs — and no PSRAM. So when you launch a game, RetroCYD copies it from the SD card into a dedicated 2 MB “ROM cache” partition in flash and runs it from there.
- Launching a different game takes a couple of seconds, with a progress bar.
- Relaunching the same game is instant — it's already in the cache.
- The cache size is also the maximum ROM size: 2 MB. Every Game Boy ROM up to 2 MB fits; the few 4 MB and 8 MB titles don't.
- ZIP files with a single ROM inside (deflate or stored) are unpacked straight into the cache.
06 Controls
On-screen touch gamepad (E32R40T)
In game, the screen shows a D-pad on the left, A and B on the right, SELECT and START at the bottom and a MENU button. The E32R40T's touch panel is resistive and single-point: it can only sense one touch at a time. To make that playable, RetroCYD adds:
- Diagonal D-pad zones — press between two arrows for up-left, down-right and so on.
- A combined A+B zone for games that need both buttons at once.
Touch is great for menus, puzzle games and anything turn-based. For platformers and shooters, a wired controller is much better. If taps land in the wrong place, run Settings → Touch calibration.
The E32N40T has no touch panel at all, so a wired controller is required on that board.
Board buttons
- BOOT (IO0)
- Opens the in-game menu while playing. Held at reset, it enters flashing mode.
- RST (EN)
- Hardware reset — restarts the board.
Wired controller (recommended)
RetroCYD supports controllers that use the Wii extension protocol over I2C:
- Wii Classic Controller and Classic Controller Pro
- NES Classic Mini and SNES Classic Mini controllers
They plug into a cheap Wii extension breakout adapter, which you wire to the board's 4-pin 1.25 mm I2C header. Controllers are hot-pluggable and auto-detected — just plug one in. Third-party clones exist; most follow the same protocol, but if one isn't detected, try an original.
| Board header | ESP32 pin | Breakout pad |
|---|---|---|
| 3V3 | 3.3 V supply | + |
| GND | Ground | − |
| SDA | IO32 | d (data) |
| SCL | IO25 | c (clock) |
In game the D-pad, A, B, SELECT (−) and START (+) do what you'd expect. On the Master System and Game Gear, B is button 1, A is button 2 and START is PAUSE (Master System) or START (Game Gear). HOME opens the in-game menu; on controllers without HOME (NES / SNES Classic Mini) press SELECT + START.
Bluetooth controller (with a bridge board)
While a game runs, the CYD has no RAM to spare for Bluetooth. Bluetooth controllers therefore connect through a second ESP32 board, the bridge. It runs BlueRetro, free open-source firmware by Jacques Gagnon. The bridge receives the controller over Bluetooth and answers on the I2C header like a Wii Classic Controller Pro, so to the CYD it is just another wired controller.
- Bridge board: any ESP32-WROOM-32 dev board (“ESP32 DevKit”, “NodeMCU-32S”, CH340 or CP2102, USB-C or micro-USB). ESP32-S2, S3, C3 and C6 boards won't work: they lack the Classic Bluetooth that PlayStation and Switch controllers use.
- Wires: four jumper wires, plus 4-pin 1.25 mm cables for the CYD's serial and I2C headers, or soldered wires.
- Controller: PS5 DualSense, PS4 DualShock 4, Xbox Wireless (One S and later), Switch Pro, 8BitDo and many more.
1. Flash the bridge
Use the bridge installer on the flash page and tick Erase device. Connect the bridge board, not the CYD: the installer can't tell two ESP32 boards apart. If you install the bridge firmware onto the CYD by mistake, just flash RetroCYD again. To flash manually instead, download the merged image and run esptool.py --chip esp32 write_flash 0x0 blueretro-wii-extension-merged.bin. The bridge firmware is BlueRetro's unmodified v25.04 “Wii extension” release.
2. Wire it to the CYD
Unplug both boards first.
D25, G25, IO25 or just 25. VIN may be marked 5V.| Bridge pin | CYD pin | CYD header |
|---|---|---|
| VIN (5V) | 5V | Serial header (4-pin, the one with TX and RX) |
| GND | GND | I2C header |
| IO26 | SDA (IO32) | I2C header |
| IO25 | SCL (IO25) | I2C header |
| — | 3V3 | I2C header: leave free |
Power. The serial header's 5V pin carries the power of the CYD's USB-C port. The bridge adds roughly 100–150 mA, so use a USB power supply that delivers at least 1 A. Not sure which pin is 5V? With the CYD on USB, a multimeter shows about 5 V between 5V and GND. Don't take power from the I2C header's 3V3 pin. The CYD's 3.3 V regulator is a small ME6217 that already powers the CYD and its 142 mA backlight, and the extra load could overheat it and reset the CYD.
On battery, the serial header has no 5 V. Power the bridge from its own USB-C port with a power bank instead, and leave the 5V wire off. Always use one power source for the bridge, not both.
The bridge uses the same I2C address as a Wii controller, so you can't connect both at once.
3. Pair the controller
Switch the CYD on. Whenever no controller is connected, the bridge searches for one by itself; on most boards its blue LED blinks while it searches and stays on once a controller is connected. Then put the controller in pairing mode:
| Controller | Pairing mode |
|---|---|
| PS5 DualSense · PS4 DualShock 4 | Hold Create (PS4: Share) and PS until the light flashes quickly. |
| Xbox Wireless | Switch it on, then hold the pair button on top until the Xbox logo flashes quickly. |
| Switch Pro | Hold the sync button on top until the player lights run. |
| 8BitDo | Most models need X-input mode (see the controller's manual), then hold its pair button. |
The bridge remembers the controller. Next time, just press PS, the Xbox button or Home. For other controllers, see BlueRetro's pairing guide.
4. Buttons
The face buttons work by position, as on a SNES pad: the right button is A and the bottom button is B.
| PlayStation | Xbox | Switch | RetroCYD |
|---|---|---|---|
| D-pad · left stick | D-pad · left stick | D-pad · left stick | D-pad |
| Circle · Triangle | B · Y | A · X | A |
| Cross · Square | A · X | B · Y | B |
| Options | Menu | + | START |
| Create / Share | View | − | SELECT |
| PS | Xbox button | Home | In-game menu |
To change the mapping, use BlueRetro's web configuration at blueretro.io. It runs in desktop or Android Chrome, connects to the bridge over Bluetooth, and only works while no controller is connected to the bridge.
Good to know
- The CYD shows PAD as soon as the bridge has power, even before a controller is paired. That's normal.
- Leave Touch switched on in Settings. With the bridge connected the CYD always finds a controller, so touch doesn't come back on by itself at startup. If the controller's battery runs out, unplug the bridge and touch returns at the next start.
- Bluetooth adds a few milliseconds of input delay, which you're unlikely to notice in 8-bit games.
- BlueRetro is © Jacques Gagnon and licensed under the Apache License 2.0. RetroCYD publishes the release unmodified and isn't affiliated with the BlueRetro project.
08 Saves & states
Battery saves (.sav)
Games that saved progress on the cartridge's battery-backed RAM do the same here. RetroCYD writes the save to /saves/<system>/ on the SD card when you open the menu, when you quit, and periodically while you play.
Save in the game, then open the menu or choose Quit. That guarantees the latest save has been written to the card.
Save states (.st0–.st3)
Every game gets 4 save-state slots — instant snapshots you can make anywhere, even in games without a save feature. They live next to the battery saves in /saves/<system>/.
States are emulator snapshots; a future firmware update could make old ones unloadable. For long-term progress, rely on the game's own saves.
09 Settings
- Wi-Fi
- Choose, test or forget the Wi-Fi network used for game downloads. See Wi-Fi & free games.
- Firmware update
- Checks the website for a newer version and installs it over Wi-Fi. See Updating.
- Game downloads
- Download new free games now, turn the automatic download at startup on or off, and pick the systems (NES, Game Boy, Game Boy Color, CHIP-8, Master System, Game Gear).
- Volume
- Master sound volume.
- Brightness
- Backlight level.
- Fast display
- Runs the display SPI bus at 80 MHz instead of the default 40 MHz — roughly double the pixel bandwidth, so more frames are shown. Many panels handle it; if you see glitches or noise, turn it off. If the picture is too garbled to find the setting: press RESET, then straight away press and hold BOOT for about 3 seconds. RetroCYD switches Fast display off and restarts.
- Smooth motion
- On by default. When most of the picture changes at once (scrolling), only every other line of the screen is updated per frame, the other half on the next frame, so twice as many frames reach the display. Still pictures are always drawn in full. Turn it off if you prefer every frame complete, at a lower frame rate while scrolling.
- Show FPS
- Performance overlay in the top-right corner: Game = frames emulated per second (60 is full speed), LCD = frames per second that reach the screen, CPU = how busy the emulator core is.
- Touch calibration
- Tap the targets to line up touch with the display. Run it if taps land off-target.
- DMG palette
- Choose the colours used for original (monochrome) Game Boy games.
- Rescan library
- Rebuild the game index — use it after adding, removing or renaming games.
- About
- Firmware version and a QR code that links back to this website.
Settings are stored in the NVS area of the flash chip. “Erase device” resets them to defaults; your SD card is unaffected.
10 Wi-Fi & free games
RetroCYD can fill your SD card by itself: about 1,300 free homebrew games for NES, Game Boy, Game Boy Color, Master System, Game Gear and CHIP-8, from Homebrew Hub, SMS Power! and the CHIP-8 Archive. See the full list.
- Open Settings → Wi-Fi → Choose network, tap your network and type the password on the on-screen keyboard (?123 switches to symbols, show reveals what you typed). With a controller: D-pad to move, A to type, B to delete, START for OK.
- RetroCYD connects once to check the password, then saves the network.
- Open Settings → Game downloads → Download new games now. It shows how many games are new and how many MB they take, then downloads them into
/roms/<system>/. - With Download at startup on (the default), every start checks for new games and downloads them automatically. Tap the screen or press B to skip; finished games are kept and the rest continue next time.
How it works
- The list of games is a catalog file on this website, rebuilt every week from the Homebrew Hub NES and Game Boy databases, the SMS Power! homebrew list and the CHIP-8 Archive. It includes only entries marked as games, only ones the RetroCYD cores can run, and no fan games built on other companies' characters.
- Every game is downloaded straight from its source over HTTPS (certificates are checked). RetroCYD doesn't host any ROMs. Each file must match the size and SHA-1 listed in the catalog or it is thrown away.
- Games are named by their title, e.g.
/roms/gb/Tobu Tobu Girl.gb. Your own files are never overwritten. Master System and Game Gear games stay zipped as SMS Power publishes them; RetroCYD unzips them when you start them. - RetroCYD remembers what it downloaded (
/retrocyd/downloaded.txt), so a game you delete stays deleted. Forget download history brings deleted games back on the next download. - The full set is about 250 MB. The first download takes a while (expect several minutes); later checks only fetch what's new.
- Wi-Fi is only switched on for downloads and is always off while you play, so games get all of the RAM and CPU. If a game can't get enough memory (for example after Wi-Fi was used), RetroCYD restarts and starts that game straight away (you'll see “Freeing memory”).
Updating RetroCYD over Wi-Fi
Open Settings → Firmware update → Check for update. If the website has a newer build, RetroCYD shows its version, downloads it (about 1.5 MB) and restarts twice; it takes about a minute. Your games, saves and settings stay. If Download at startup is on, the startup check also tells you when an update is available.
- Every version has a number like
1.0.0and a build number. Updates are offered only for a higher build, never a downgrade. - The update is checked three ways before it is used: the download size and SHA-256 must match, and ESP-IDF checks the firmware image itself.
- Keep the board powered until the launcher is back. Even if it isn't, the board still starts: it keeps the last complete copy and finishes the update on the next start.
- If a new version fails to start, the bootloader goes back to the previous one and RetroCYD tells you on the next start.
- The rare update that changes the flash layout can't be installed over Wi-Fi; RetroCYD then asks you to use the web flasher instead. The web flasher can always reinstall RetroCYD.
About the stored password: the Wi-Fi password is saved in the board's settings area without encryption. Anyone holding the board could read it, so a guest network is a good idea.
2.4 GHz networks only (the ESP32 has no 5 GHz radio). WPA2 and WPA3 personal networks and open networks work; enterprise (802.1X) networks and hotel-style sign-in pages don't.
11 Audio
Sound comes from the ESP32's built-in DAC (IO26) into the board's amplifier (enabled on IO4) and out through the 1.25 mm 2-pin speaker connector. Use an 8 Ω 1.5 W or 4 Ω 2 W speaker. It's an 8-bit DAC — perfect for 8-bit chiptunes, not hi-fi.
Change the level under Settings → Volume, or from the in-game menu.
12 Pinout & flash layout
Pin assignments of the 4.0″ ESP32-32E board (per LCDwiki), as used by RetroCYD:
| Function | Pins | Notes |
|---|---|---|
| LCD (ST7796S) | SCK IO14 · MOSI IO13 · MISO IO12 · CS IO15 · DC IO2 | Reset tied to EN |
| Backlight | IO27 | Active high |
| Touch (XPT2046) | CS IO33 · IRQ IO36 | Shares the LCD SPI bus |
| microSD | SCK IO18 · MISO IO19 · MOSI IO23 · CS IO5 | Separate SPI bus |
| Audio | DAC IO26 · amp enable IO4 | Amp on when IO4 is low |
| RGB LED | R IO22 · G IO16 · B IO17 | Active low |
| Battery sense | IO34 | ADC input |
| I2C header | SCL IO25 · SDA IO32 | Wired controller · 3.3 V |
| Serial header | 5V · GND · TX IO1 · RX IO3 | 5 V from USB-C (none on battery) · powers a Bluetooth bridge |
| Expansion (input-only) | IO35 · IO39 | No output, no pull-ups |
| BOOT button | IO0 | Menu in game · download mode at reset |
| USB-C | UART0 via CH340-type USB-serial | Flashing & power |
| Memory | 4 MB SPI flash · 520 KB SRAM | No PSRAM |
Flash layout (4 MB)
The web installer writes the bootloader (0x1000), partition table (0x8000) and app (0x10000) separately, so your settings survive updates. The merged download image starts at offset 0x0. The ROM cache is filled at runtime when you launch a game.
13 Troubleshooting
No serial port in the list
- The cable is probably charge-only — try a known data cable.
- Install the CH340 driver (Windows / older macOS).
- Try another USB port; skip hubs and front-panel ports.
- Close other programs that may hold the port (serial monitors, slicers, other flashers).
“Failed to connect” / timed out
Hold BOOT while you click Connect, then release once it starts. Still failing? Hold BOOT, tap RST, release BOOT, and try again.
Install stops half-way
Usually a flaky cable or USB port. Use a short cable straight into the computer and install again with Erase device ticked.
White screen after flashing
Your board is probably a different CYD variant: RetroCYD is built for the 4.0″ ESP32-32E (E32R40T / E32N40T) only. Other models use different displays and pins. Flashing is harmless; put your previous firmware back if needed.
SD card not detected
- It must be FAT32 — not exFAT or NTFS. Cards over 32 GB need reformatting.
- Power off, re-seat the card until it clicks, power on.
- Try another card; some very old or no-name cards are unreliable.
Games don't show up
- Check the folder (
/roms/nes,/roms/gb,/roms/gbc,/roms/sms,/roms/gg,/roms/chip8) and the file extension. - Run Settings → Rescan library.
- ROMs over 2 MB, and ZIPs with more than one file, won't load.
Wi-Fi won't connect / downloads fail
- Use a 2.4 GHz network; the ESP32 can't see 5 GHz ones. Hidden networks: Choose network → Other / hidden network.
- “Wrong password”: passwords are case-sensitive. Tap show to check what you typed.
- Downloads that fail are retried on the next run. If the SD card is full, the download stops with a message.
Touch is offset or doesn't respond
- Run Settings → Calibrate touch. Press and hold each target until the dot fills; a fingernail or stylus tip works best on the resistive panel.
- Can't reach Settings? Restart the board and hold BOOT while the start screen shows: the calibration starts.
- If touch was switched off and no controller is connected, RetroCYD turns it back on at the next start.
Only one button works at a time
That's the resistive single-touch panel. Use the diagonal D-pad zones and the A+B zone, or plug in a wired controller.
Game list slow the first time
That's the one-time index build — a few seconds for ~10,000 files. Let it finish; afterwards the folder opens instantly.
Choppy picture
The display link sends at most about 5 MB per second, and a scrolling Game Boy picture at 2x is 180 KB per frame. Keep Smooth motion on, turn on Fast display in Settings (double the bandwidth, on panels that take it) and/or choose a smaller Screen scale in the in-game menu: Game Boy “1x” or NES “1x sharp”. “Fit screen” is the biggest picture and the slowest to send. That raises the LCD number in the Show FPS overlay; game speed itself is unaffected.
Game runs slowly
Turn on Show FPS. If Game stays below 60, check Settings › About › Flash: it should say QIO 80 MHz. If it doesn't, install once with the web flasher (no erase needed) — an over-the-air update can't change how the flash chip is read. Still slow? Open an issue with the game and the three overlay numbers.
Controller not detected
- Re-check the wiring by label: SDA →
d, SCL →c, 3V3 →+, GND →−. - Push the controller plug fully into the breakout.
- Some cheap clones misbehave — try an original controller.
No sound
Check the speaker is plugged into the speaker connector and that Volume isn't at zero (Settings or in-game menu).
Lost progress
Battery saves reach the card on menu-open, quit and periodically. Save in-game, then open the menu or Quit before you cut power.
14 FAQ
Is RetroCYD free?
Yes. The firmware, the web flasher and the guide are free to use.
Is this legal?
Emulators themselves are legal. What matters is where your games come from. RetroCYD ships with no games and is meant for homebrew, public-domain and freely licensed games — plus backups of cartridges you own where your local law allows. See Free & legal games.
Can flashing brick my board?
No. Flashing only rewrites the firmware, and the ESP32's built-in bootloader is always there to flash again. See Erasing & recovery.
Will “Erase device” delete my games or saves?
No. It only erases the board's flash chip (firmware, settings, ROM cache). Games and saves live on the SD card and are never touched.
How do I update to a new version?
Flash it again from the web installer. Erasing isn't required for updates. Your SD card is never touched, and the web installer keeps RetroCYD's settings (including touch calibration) unless you tick “Erase device”.
Can I flash from my phone, Firefox or Safari?
No — the web installer needs the Web Serial API, which only desktop Chrome, Edge and Opera provide. Alternatively, download the .bin and use esptool on any OS.
Does it work on the 2.8″ CYD or other variants?
No. RetroCYD is built for the 4.0″ ESP32-32E (E32R40T / E32N40T) only. Other variants use different displays and pins.
Why no SNES, GBA, Genesis, N64 or PS1?
One ESP32 with 520 KB of RAM, no PSRAM and an SPI-connected display can't emulate those at a playable speed — and many of their games don't fit in the 2 MB ROM cache. Details here.
What's the biggest ROM I can play?
2 MB, the size of the ROM cache. Almost all NES, Game Boy, Master System, Game Gear and CHIP-8 homebrew is far smaller.
Does the ROM cache wear out the flash?
Not in any practical sense. The cache is only rewritten when you launch a different game, and flash chips like this are typically rated for around 100,000 erase cycles per sector.
A NES game says “Mapper N not supported”
NES cartridges used different circuit boards (“mappers”). RetroCYD supports mappers 0 (NROM), 1 (MMC1), 2 (UxROM), 3 (CNROM), 4 (MMC3 / MMC6), 7 (AxROM), 9 (MMC2), 10 (MMC4), 11 (Color Dreams), 66 (GxROM) and 71 (Camerica). That covers most homebrew and most of the NES library. Games on other boards show this message and return to the browser; nothing is changed on the SD card.
How do I update RetroCYD?
On the board: Settings → Firmware update (needs Wi-Fi). From a computer: run the web flasher again without erasing; your settings and SD card are kept. More about updates.
Are the downloaded games legal?
Yes. They are homebrew games their authors publish for free on Homebrew Hub and SMS Power!, and CHIP-8 programs released into the public domain (CC0). RetroCYD downloads each one straight from that source, just as clicking “Download” on the website would. Respect each game's licence if you share them.
Does Wi-Fi slow down games?
No. The radio is switched off before a game starts and only comes back on for downloads in the launcher.
Do I need to unzip my games?
No. A ZIP that contains a single ROM (deflate or stored) works directly.
Can I press two touch buttons at once?
No — the resistive panel senses one touch at a time. Use the A+B zone and the diagonal D-pad zones, or a wired controller.
Are Bluetooth controllers supported?
Yes, through a second ESP32 board that acts as a Bluetooth receiver: PS5, PS4, Xbox, Switch Pro, 8BitDo and more. See Bluetooth controller.
Does CHIP-8 support include XO-CHIP?
RetroCYD runs CHIP-8 and SUPER-CHIP programs. XO-CHIP — the extended variant used by many recent Octojam games — isn't supported, so check a game's platform before copying it over.
Can it run on a battery?
The board has a 1.25 mm 2-pin connector for a single-cell 3.7 V LiPo. Check the plug's polarity against the board markings before connecting — sellers wire these plugs differently.
How can I help?
Report bugs and share ideas in the issue tracker. Telling homebrew developers you enjoyed their game helps too.