open-hardware

NesEmulatorPicoSeries runs bare-metal NES on Raspberry Pi Pico W and Pi 4

Key Takeaway

A developer released a bare-metal NTSC NES emulator for Raspberry Pi Pico W, Pico 2 W, and Pi 4 that runs without any SDK or RTOS, using a custom toolchain called PureMetalForge.

Summary

Developer ajtaji published NesEmulatorPicoSeries on GitHub, an MIT-licensed NES emulator written in PureMetal and compiled to bare-metal machine code. It targets the Raspberry Pi Pico W, Pico 2 W, and Pi 4 under Anvil. A Python tool lets users flash their own .nes ROM files to the board. The RP2350 port uses both Cortex-M33 cores at 150 MHz with 75 MHz LCD SPI. Audio output is via Bluetooth A2DP at 48 kHz stereo over the CYW43439 radio, though users must build their own firmware to set a speaker address.

Hardware targets and display options

  • No SDK or RTOS: Runs as bare-metal machine code compiled with PureMetalForge, eliminating abstraction layers
  • RP2350 performance: Dual Cortex-M33 cores at nominal 150 MHz; 75 MHz LCD SPI on Pico 2 W
  • Display plugins (compile-time): LAFVIN ST7796 default; ILI9341, Adafruit HX8357D, ST7789 Display Pack in various test states
  • Audio: Bluetooth A2DP, SBC codec at 48 kHz stereo via CYW43439; silent in published builds until speaker address is configured at compile time
  • Test coverage: 1,926,732 on-board checks pass with zero failures on physical Pico 2 W
  • Accuracy limits: PPU is not dot-exact; only documented CPU opcodes implemented

Why it matters

The project demonstrates that complex emulation is feasible on resource-constrained microcontrollers without traditional SDK overhead, potentially informing future bare-metal projects on RP2350-class hardware. The modular plugin architecture for video and audio may be reusable for other retro emulation ports.

Original reference: blog.adafruit.com →

Ask AI & Compare Archive