NES on a bare ESP32. This should not run this well.
NESpresso32 turns a bare ESP32-WROOM-32 into a tiny VGA NES console. ROMs live in flash, games launch from a lightweight browser, and everything runs without PSRAM.
The fun part is not that it runs. It is how much had to be stripped, inlined, and tuned to make it possible.
- VGA OVER GPIO
- FLASH ROMS
- OSD BROWSER
- NO PSRAM

Why it is interesting
The chip is the boss fight.
Every convenience has a cost: memory, cycles, timing, or stability. NESpresso32 is built around removing those costs one by one.
The project is a small act of engineering stubbornness. Not a polished product, not a black box, but a real open-source build where the fun is seeing how much can be squeezed out of hardware that should probably be doing something easier.
What makes it special
Six small choices that make the whole thing believable
- 01 VGA without a video chip
GPIO lines carry RGB and sync directly, with I2S doing the timing work.
- 02 ROMs become firmware
The build pipeline converts legal
.nesfiles into flash-resident data. - 03 The browser is part of the machine
The launcher is drawn into the same constrained video path as the emulator.
- 04 Hot paths are treated like hardware
Pixel writes, memory reads, and common CPU work are measured and stripped down.
- 05 The current input path is simple
An OKY0272 4x4 keypad keeps control scanning predictable and easy to wire.
- 06 No PSRAM escape hatch
The emulator has to fit the ordinary module, which keeps the design honest.
Boot feel
A tiny console boot ritual
The firmware does not just start. It arrives: a quick CRT flash, a pixel logo, ready states, and a small PRESS START / A moment before the browser.
The preview keeps that ritual light. It is not pretending to be gameplay; it is a little sign that the project has care in the parts you see and the timing work you do not.
Read the ROM pipelineStart here
Build it like a real little machine
The landing gives you the shape. The docs carry the details, caveats, and exact wiring.
- CloneGet the source from GitHub.
- Add ROMsUse homebrew or ROMs you have the right to use.
- Wire hardwareVGA, passive buzzer, and OKY0272 keypad.
- FlashBuild and upload with PlatformIO.
Project alive
Open-source, changing, buildable.
Latest release on GitHub GitHub release data is unavailable during this build.
Frequently asked questions
Common questions about NESpresso32
- What is NESpresso32?
- NESpresso32 is an open-source NES emulator that runs on a bare ESP32-WROOM-32 development board. It outputs video through a VGA connector wired to GPIO pins, stores games in SPI flash, and does not require PSRAM.
- Is NESpresso32 an ESP32 NES emulator?
- Yes. NESpresso32 is a NES emulator specifically built for the ESP32-WROOM-32. It uses the Xtensa LX6 cores to run a 6502 CPU emulator alongside a PPU renderer and an I2S-driven VGA signal generator.
- Does NESpresso32 need PSRAM?
- No. NESpresso32 runs entirely on a standard ESP32-WROOM-32 without PSRAM. ROM data is embedded in SPI flash and loaded into DRAM at startup. All emulation runs from DRAM.
- Does NESpresso32 output VGA?
- Yes. NESpresso32 generates a VGA signal using the ESP32 I2S peripheral to drive GPIO25 (Red), GPIO26 (Green), and GPIO27 (Blue) through 330 ohm resistors, with HSYNC on GPIO23 and VSYNC on GPIO22.