Code
The Adafruit Arcade Machines library for Arduino contains example games for Feather ESP32 V2 (and Fruit Jam, but that's in a different guide).
These ports were created using Claude Code. See the bottom of this page for development notes from the porting sessions.
The project source code lives here on GitHub. There are instructions at the bottom of this page for compiling and flashing your board inside the Arduino IDE. But rather than compile it, you can download the latest .bin releases here for:
- Space Invaders
- Lunar Rescue
- Galaga
- Pac-Man
- Ms. Pac-Man
- Donkey Kong
- Burger Time
and consoles:
- Nintendo Game Boy
- Nintendo Entertainment System
Head to the latest release and scroll down to the Assets section. Click on the .bin file you want to download.
Install the Game .bin
You can use the Web Serial ESPTool to program the .bin file onto the Feather by following the instructions shown here.
Alternatively, you can install command line esptool on your computer as shown here and then run this command from a shell:
esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART write_flash 0x0 btime_featheresp32.bin
SD Card setup
Format your microSD card as FAT32/MBR. Create two top level directories on the card:
- /rom/
- /samples/
File naming in /rom/: files are loaded in reverse alphabetical order starting at ROM address 0x0000. The standard MAME chip naming (.h → .g → .f → .e) naturally maps to the correct addresses. Other compatible ROMs will work as long as their chip files sort in the right order, or as a single flat 8 KB binary.
The rom/ directory represents the four memory chips on the original hardware, designated as slots h, g, f,e A typical ROM set will look like this:
/rom/
invaders.h
invaders.g
invaders.f
invaders.e
The samples/ directory contains WAV samples (we aren't emulating the original sound chip that synthesized the sounds in real-time, but instead play back samples of the originals):
/samples/
0.wav
1.wav
...
9.wav
Boot-time Errors
Errors show up as a solid-colored screen:
| Screen color | Meaning |
|---|---|
| Red | SD card missing or won't mount (check it's inserted and formatted FAT32 with an MBR partition scheme, not GPT/exFAT) |
| Yellow | Card mounted OK, but /rom/ had no usable ROM files, or every sample in /samples/ failed to load |
| (no color — game runs) | Everything loaded fine |
Per Game Assets
Here are the required assets for your SD card per game. Your best bet legally speaking is to acquire the ROM chips from an original arcade PCB and dump the ROMs onto your computer.
Lunar Rescue
/rom/
lrescue.1 (0x0000)
lrescue.2 (0x0800)
lrescue.3 (0x1000)
lrescue.4 (0x1800)
lrescue.5 (0x4000)
lrescue.6 (0x4800)
/samples/
alienexplosion.wav
rescueshipexplosion.wav
beamgun.wav
thrust.wav
bonus2.wav
bonus3.wav
shootingstar.wav
stepl.wav
steph.wav
/prom/
7643-1.cpu
Galaga
/rom/
gg1-1b.3p
gg1-2b.3m
gg1-3.2m
gg1-4b.2l
gg1-5b.3f
gg1-7b.2c
gg1-9.4l
gg1-11.4d
gg1-10.4f
prom-5.5n
prom-4.2n
prom-3.1c
prom-1.1d
Pac-Man
/rom/
pacman.6e
pacman.6f
pacman.6h
pacman.6j
pacman.5e
pacman.5f
82s123.7f
82s126.1m
82s126.3m
82s126.4a
Ms. Pac-Man
/rom/
pacman.6e pacman.6f pacman.6h pacman.6j <- Pac-Man program ROMs
u5 u6 u7 <- aux board ROMs
5e 5f <- graphics ROMs
82s123.7f 82s126.4a 82s126.1m <- colour + waveform PROMs
Donkey Kong
/rom/
c_5et_g.bin c_5ct_g.bin c_5bt_g.bin c_5at_g.bin <- Z80 program
v_5h_b.bin v_3pt.bin <- tile ROMs
l_4m_b.bin l_4n_b.bin l_4r_b.bin l_4s_b.bin <- sprite ROMs
c-2k.bpr c-2j.bpr v-5e.bpr <- palette + colour-code PROMs
s_3i_b.bin s_3j_b.bin <- 8035 program + sample ROM
Burger Time
/rom/
aa04.9b aa06.13b aa05.10b aa07.15b <- main 6502 program
ab14.12h <- sound 6502 program
aa12.7k ab13.9k ab10.10k <- charset #1 AND sprites
ab11.12k aa8.13k ab9.15k (same bytes, two layouts)
ab00.1b ab01.3b ab02.4b <- charset #2 (background tiles)
ab03.6b <- background TILEMAP, not gfx
Game Boy
On your SD card create a directory named cart and put your game's .gb file inside of it. Note, you can't use .zip files.
/cart/
LinksAwakening.gb
Once you've played a game the console will add files next to the game:
/cart/
LinksAwakening.gb
LinksAwakening.sav <- battery save (games that have one)
LinksAwakening.fruitjam.cfg <- settings used on the Fruit Jam
LinksAwakening.feather.cfg <- settings used on the Feather
NES
On your SD card create a directory named cart and put your game's .nes file inside of it. Note, you can't use .zip files.
/cart/
SuperMarioBros.nes
Once you've played a game the console will add files next to the game:
/cart/
SuperMarioBros.nes
SuperMarioBros.sav <- battery save (games that have one)
SuperMarioBros.fruitjam.cfg <- settings used on the Fruit Jam
SuperMarioBros.feather.cfg <- settings used on the Feather
Here's how to setup, compile, and flash from with the Arduino IDE:
-
Install the esp32 board core (Espressif's, via Boards Manager — add
https://espressif.github.io/arduino-esp32/package_esp32_index.jsonas an additional board URL first). -
Install this library exactly as above. Its dependencies differ from the Fruit Jam's: this board needs
SdFat - Adafruit ForkandAdafruit ILI9341(which pulls inAdafruit GFXandAdafruit BusIO), and does not needPicoDVI - Adafruit Fork. I2S audio comes from the core's ownESP_I2S, so there is nothing to install for sound. -
Select board Adafruit Feather ESP32 V2.
-
Prepare the SD card exactly as for the Fruit Jam (FAT32, MBR) and put it in the FeatherWing's microSD slot.
-
File → Examples → Adafruit Arcade Machines → Games →
_featheresp32, and upload over USB serial.
Page last edited October 02, 2026
Text editor powered by tinymce.