This is a "cycle-accurate" NES emulator, meaning the hardware is emulated at the granularity of individual CPU/PPU cycles rather than one CPU instruction at a time. This allows for emulating games that depend on hardware quirks (open bus behaviour, dummy reads, tight interrupt timings) without relying on game-specific hacks.
This project is not based on any existing emulator and was not developed with reference to any existing emulator code. It has been written to match the behaviour of NES hardware as described by/on/in:
- NESdev Wiki
- NESDev Forums
- Visual 6502
- Michael Steil's 65XX CPU reference
- John West and Marko Mäkelä's 65XX instruction set documentation
- Adam Vardy's unofficial opcode documentation
- This photocopy of a Synertek 65XX hardware manual
- NES test roms
- Cycle-accurate emulation with full audio/video support (CPU, PPU and APU implemented)
- Support for both keyboard & controller input with multiple mappings
- "Rewind" save-state feature (shown below ⬇️)
- Adjustable emulation speed
- CPU debugger (in development)
- iNES mapper 0 / NROM
- iNES mapper 1 / MMC1
- iNES mapper 2 / UxROM
- iNES mapper 3 / CNROM
- iNES mapper 4 / MMC3
- iNES mapper 7 / AxROM
These mappers cover over 1000 games!