FWKES

FWKES and joypads

FWKES1 is an open-source NES emulator targeted at 32-bit microcontroller RP2350. It aims to be precise and cycle-accurate, while still maintaining stable 60 FPS and minimal latency.

Features:

  • SD card for storing games and files.
  • Standard HDMI for video output.
  • 3.5mm audio jack for audio output.
  • Supports raster effects (mid-scanline writes).
  • Emulates NTSC region, i.e. original NES and Famicom (although support for PAL is planned).
  • Implements all instruction set of Ricoh 2A03 (MOS 6502), including unofficial instructions and precise timing.
  • Implements all features of PPU (sprite overflow, emphasis bits, …) and APU.
  • Supports NROM, MMC1, UNROM and MMC3.
  • Supports RP2350-based boards Raspberry Pi Pico 2 and Pimoroni Pico Plus 2 (and any compatible board).

It’s actually more than just a NES emulator - FWKES provides a bridge between emulated program and emulator, called FWX. This hypercall interface is memory-mapped into unused region $4018-$401F, and allows the emulated program to make use of SD card, MCU’s GPIO, tune emulator etc.

As an example of program using FWX, FWKES comes with BIOS, that is no different than a typical NES program, except that it uses FWX to load programs from SD card and change emulator settings.

Screenshot of BIOS
Screenshot of BIOS

Documentation and more info can be found on GitHub.

Supported RP2350-based Boards

Instead of soldering RP2350 directly onto PCB, FWKES has a socket where you can put your RP2350-based board. Currently supported RP2350-based boards are:

  • Raspberry Pi Pico 2
  • Pimoroni Pico Plus 2

On Pimoroni, FWKES extends RAM memory to 8MB using integrated PSRAM chip into Pimoroni. Thanks to that, you can run big ROM files (256KB, 512KB, 1MB, …). When using original Pico 2 board, it uses Flash memory to load programs, but the loading time drastically increases (several seconds).

Basically you can use any RP2350-based board, that exposes the same GPIO layout and basic memory segments are mapped into the same regions of address space.

Downloads & Source Code

Compiled binaries for Pico 2 and Pimoroni Pico Plus 2 can be found in the Releases on GitHub page.

Source code can be found on the same GitHub page. FWKES is licensed under GNU GPL v3.0 (hardware is licensed under CERN Open Hardware License v2). Don’t hesitate to contribute or report bugs.

License & Acknowledgement

Code of FWKES is licensed under GNU GPL v3.0, while hardware is licensed under CERN Open Hardware License v2.

This project is a collaborative work of inunix3 and kubaa-ma.

More info can be found in the README on GitHub.



  1. FWKES is pronounced as fukes (/fʌkɛs/). In old Bible printings, you can find that sometimes letter U is written as V. So we took it further and doubled it! Although it’s not read as double U…