finds.dev← search

// the find

henrikpersson/potatis

★ 671 · Rust · MIT · updated Jun 2026

🥔 MOS-6502 and NES emulator in Rust (SDL/WebAssembly/Android/Embedded/Cloud)

A NES/6502 emulator in Rust that runs on an absurd range of targets: desktop SDL, browser WASM, Android via JNI, Raspberry Pi Pico (264kB RAM), and a netcat-over-TCP cloud gaming mode. The CPU core passes all standard test suites including illegal opcodes. For Rust developers interested in emulation, embedded, or cross-platform targets, this is a well-structured reference.

The HostPlatform trait is a clean abstraction — you implement two methods (render, poll_events) and the NES core works anywhere, which is how they shipped six wildly different targets without forking the core. The embedded port running on a Pico at 5 FPS via dual-core rendering with 243kB heap is genuinely impressive engineering, not a toy demo. The 6502 core passes full functional tests including illegal ops, which most hobbyist emulators skip. The cloud gaming mode (netcat + Sixel/Unicode rendering) is a legitimately clever hack that requires zero client software.

Only 5 mappers implemented (NROM, MMC1, UxROM, CNROM, MMC3), so a large portion of the NES library won't run — no mapper 7 (AOROM), no mapper 9 (MMC2, Punch-Out), no mapper 69. APU is missing entirely, meaning no sound on any target. The WASM build uses Snowpack, which is abandoned; that build toolchain will rot. Android setup requires manually editing ~/.cargo/config with hardcoded NDK paths, and install.sh only targets arm64 — getting it running on a real device is more work than the README implies.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →