A Nintendo Entertainment System (NES) emulator written for the purpose of understanding how the NES and similar 8-bit computers of that era worked.
Go to file
2024-08-21 17:46:30 -04:00
.gitignore start logging instructions as nestest.log has done 2024-06-28 10:17:37 -04:00
cpu.c rename struct Rom to struct rom 2024-07-21 14:48:29 -04:00
cpu.h fix warnings and move cpu registers+flags to header 2024-07-07 13:04:16 -04:00
LICENSE initial commit 2024-05-20 18:51:56 +05:30
Makefile add CFLAGS 2024-07-21 13:52:48 -04:00
nestest.log add nestest.nes and log that was used for testing the CPU 2024-07-04 15:19:45 -04:00
nestest.nes add nestest.nes and log that was used for testing the CPU 2024-07-04 15:19:45 -04:00
opcodes.h implement all of the nestest unofficial opcodes and fix branch cycles 2024-07-04 15:06:15 -04:00
ppu.c start implementing PPU 2024-07-21 13:53:04 -04:00
ppu.h rename struct Rom to struct rom 2024-07-21 14:48:29 -04:00
README.md added snippet explaining the NES's 6502 variant and long-term goal for the project 2024-08-21 17:46:30 -04:00
rom.c rename struct Rom to struct rom 2024-07-21 14:48:29 -04:00
rom.h rename struct Rom to struct rom 2024-07-21 14:48:29 -04:00

emu_nes

A Nintendo Entertainment System (NES) emulator written for the purpose of understanding how the NES and similar 8-bit computers of that era worked.

The NES used a variant of the MOS 6502 8-bit microcontroller called a Ricoh 2A03 that contained the 6502 without the BCD mode for arithmetic, an audio signal generator (APU), controlling the gamepads, and for DMA. (Source: NESdev)

A major goal for the emulator is finishing the software implementation in C and later implement this in hardware with either an FPGA or another CPU like a RISC-V. Later, I want to generalize the 2A03 simulator into a full 6502 for use with a Commodore 64 and Apple II.

Makes heavy use of the NESdev wiki.

Current State

  • CPU (Ricoh 2A03, variant of MOS 6502)
  • PPU (Graphics)
  • APU (Audio)

Currently, running the emulator with nestest.nes results in incorrect results in the memory space of the APU registers. This is due to the APU not being implemented yet.

Also, the only ROM mapper that is implemented is Mapper 0 to run the test ROM, but it also supports many other ROMs listed here such as Donkey Kong and Super Mario Bros.