Pinky is an NES emulator written entirely in Rust from scratch, based on publicly available documentation. You can even run it in your Web browser.
Despite these limitations, Pinky can effectively emulate several popular NES games like Super Mario Brothers, Donkey Kong, and Tetris.
Pinky is split into multiple crates for modularity:
pinky-libretro: Contains the libretro core. To compile:
This builds a shared object (e.g., libpinky_libretro.so
) that can be used with RetroArch:
pinky-devui: A simple SDL2-based frontend. Run it by passing the path to your game ROM on the command line.
nes-testsuite: Contains an emulator-agnostic test suite of NES ROMs, which can be integrated with other emulators by implementing a single trait (see nes/src/testsuite.rs
).
rp2c02-testsuite: A PPU test suite autogenerated with Visual2C02, a transistor-level simulator of an actual NES PPU.
nes: Contains the core emulator. mos6502
includes the 6502 interpreter, useful for emulating other 6502-based systems.
Creating a game console emulator is a rewarding and enjoyable project. Writing an NES emulator is particularly accessible due to the extensive documentation available for the NES hardware. Emulating the NES provides a great learning experience and the satisfaction of playing classic games on software you've built yourself.
Pinky is designed for enthusiasts and developers who appreciate the technical challenge and joy of creating an emulator from scratch.
For more information and to contribute to the project, visit the Pinky repository.