Relive the 8-Bit Glory Days with This DIY Handheld NES

Build a custom handheld NES using an ESP32-S3 and open source code for a smooth retro gaming experience that fits in your pocket.

nickbild
about 7 hours ago Gaming
A DIY NES emulator (📷: Derda Cavga)

Are you craving a hit of 8-bit nostalgia but don’t feel like digging through your attic for your old NES and figuring out how to hook it up to a modern TV? Don’t worry, you’ve got plenty of other options. You could fire up an emulator on your PC, tinker around with a Raspberry Pi, or roll the dice on a gray-market handheld from an online vendor.

Or better yet, you could do what Derda Cavga did — build your own NES. Cavga built a handheld NES from commonly used, hobbyist-grade hardware that you probably already have on hand. He also developed custom emulation software that plays games as smoothly as the real deal did back in the day. As a bonus, this DIY approach will not only give you a new game console to toy around with, but also an education.

The project is designed around an ESP32-S3 development board (📷: Derda Cavga)

Instead of a full single-board computer, the console relies on an ESP32-S3 development board equipped with 16 MB of flash storage and 8 MB of PSRAM. Paired with a 1.69-inch 280×240 ST7789 TFT display and a simple array of eight tactile buttons, the result looks something like a cross between a perfboard experiment and a purpose-built retro system.

The project uses an upgraded fork of the ESP32 Nofrendo emulator, but this one is optimized for the S3 chip. A custom graphics driver is built directly into the library, meaning no separate display libraries are required. The Arduino IDE must be set to the ESP32-S3 Dev Module at 240 MHz, USB CDC enabled on boot, the “Huge APP” partition scheme selected, and — most critically — OPI PSRAM turned on. Without that memory setting, many games won’t run.

A closer look at the hardware (📷: Derda Cavga)

Games are stored on a standard SD card. After formatting the card to FAT32, you simply copy NES ROM files — specifically those using the .nes extension — directly into the root directory. Shortening file names helps them display cleanly in the menu. Navigation is straightforward: up and down buttons scroll the list, “Select” opens a title, and “Start” begins the game.

Performance appears to be quite good, with classics like Super Mario Bros. running very smoothly. Audio is technically supported through an optional MAX98357A I2S amplifier and speaker, though the creator admits sound quality still needs work and ships disabled by default.

The circuit design and source code are open source and are publicly available on GitHub for anyone who needs to get their retro fix.


nickbild

R&D, creativity, and building the next big thing you never knew you wanted are my specialties.

Latest Articles