Skip to content
Tech News
← Back to articles

Show HN: Pokémon Emerald Ported to Raspberry Pi Pico 2

read original more articles

Pokémon Emerald running natively on a $6 microcontroller — full game, 60 fps, HDMI out, real buttons, saves that survive a power cycle. No emulator: the pret decompilation is recompiled from ARMv4T to Cortex-M33 and the Game Boy Advance's video hardware is reimplemented in software on the second core.

Target board is a WeAct Studio Core2350B (RP2350B, 16 MB QSPI flash). The whole game — code, graphics, maps, music — is an 11.7 MB image executed in place from flash.

RP2350B @ 252 MHz ┌──────────────┬──────────────┐ │ core 0 │ core 1 │ │ game logic │ PPU render │──▶ 240×160 RGB565 framebuffer │ ~0.3 ms/f │ ~12 ms/f │ │ └──────────────┴──────────────┘ ▼ ▲ HSTX ──▶ DVI/HDMI 640×480p60 GP0–GP9 buttons (2× upscale, DMA control-block ring)

Status

Playable start to finish as far as it has been tested — boots, plays the intro, starts a new game, walks the overworld, battles, and saves. Every scene holds a locked 60 fps except the OBJ-window intro cinematic. It is not a finished product; see Limitations.

Video ✅ Full PPU: modes 0–4, affine, sprites, windows, blending. Byte-exact vs. reference. Frame rate ✅ Locked 60 fps, tear-free, vsync-locked to the scanout beam Input ✅ 10 GPIO buttons Saves ✅ Persist to QSPI flash, survive reboot and reflash Audio ⚠️ Music plays; some instrument classes silent (see below) Link cable / RFU ❌ Not implemented

Hardware

See docs/HARDWARE.md for the full pinout, bill of materials, and wiring notes. In brief: an RP2350B board, an HSTX-to-HDMI breakout wired in the Pico DVI Sock pin order, ten buttons to ground, and optionally a PCM5102A I²S DAC for sound.

Build

See docs/BUILD.md for prerequisites and the full procedure. The short version, from the repo root:

... continue reading