A simple NES emulator written in C++ (or rather, C with some C++ features sprinkled on).
- Cycle-accurate CPU emulation, including dummy reads and double writes
- Supported INES mappers: 000 (NROM), 001 (MMC1), 002 (UxROM), 003 (CNROM), 004 (MMC3)
CMake is required to generate the build files for the project. To generate the build files, type the following:
mkdir build
cd build
cmake ..
After the build files have been generated, build the project using the platform compiler toolkit (e.g. Visual Studio on Windows).
Pass | Test | Author | Description |
---|---|---|---|
✔️ | branch_timing_tests |
blargg | Timing of the branch instruction, including edge cases |
✔️ | cpu_dummy_reads |
blargg | Test addressing modes that have dummy reads |
✔️ | cpu_dummy_writes |
bisqwit | Verify double writes by read-modify-write instructions |
✔️ | cpu_exec_space |
bisqwit | Verify that CPU can execute code from any memory location |
❌ | cpu_interrupts_v2 |
blargg | Behavior and timing of CPU interrupts (NMI and IRQ) |
✔️ | cpu_timing_test6 |
blargg | Instruction timing (official and unofficial) |
✔️ | instr_misc |
blargg | Miscellaneous instruction test |
✔️ | instr_timing |
blargg | Instruction timing (official and unofficial) |
✔️ | nestest |
kevtris | Instruction behavior (official and unofficial) |
Pass | Test | Author | Description |
---|---|---|---|
✔️ | oam_read |
blargg | Reading from OAMDATA returns data at OAMADDR |
✔️ | oam_stress |
blargg | Thoroughly test OAMDATA and OAMADDR |
✔️ | ppu_open_bus |
blargg | Test PPU open bus behavior |
✔️ | ppu_read_buffer |
bisqwit | PPU test suite mostly concentrating on the PPU read buffer |
❌ | ppu_vbl_nmi |
blargg | Test PPU VBL flag behavior and timing |
❌ | scanline |
Quietust | Test PPU scanline timing accuracy |
✔️ | sprite_hit_tests_2005.10.05 |
blargg | Sprite 0 hit behavior and timing |
❌ | sprite_overflow_tests |
blargg | Test sprite overflow behavior and timing |