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 |
