Build a NES Emulator and Run NES ROMs

Students will build a C/C++ or language of choice emulator that can load and run NES ROM files. The emulator will replicate the behavior of the NES by emulating individual components, such as the CPU, PPU (graphics), APU (sound), and controller input. Students will focus on creating a fully functional emulator capable of playing NES games with basic graphics and sound, providing a deep dive into computer architecture and low-level system programming.

Objectives


Goals:

  • CPU (6502 Emulation): Emulate the NES's 8-bit 6502 processor, handling all the instructions, addressing modes, and interrupt handling to run the game logic.
  • PPU (Graphics Emulation): Emulate the Picture Processing Unit to render sprites, backgrounds, and handle scrolling, as well as manage the memory for video output.
  • APU (Sound Emulation): Emulate the Audio Processing Unit, which manages multiple sound channels and generates the music and sound effects in NES games.
  • Memory and Mapper Support: Implement memory mapping for ROM, RAM, and cartridge mappers used by different NES games.

Stretch Goals:

  • Cycle-Accurate Emulation: Ensure timing is precise for each instruction cycle, emulating the NES hardware at a low level for highly accurate performance.
  • Save State Functionality: Add the ability to save and restore the emulator's state at any point in the game.
  • Web-Based Emulator: Compile the code to web assembly WASM and deploy it to the web

Resources:

NES Emulator Guide (Comprehensive Resource): https://www.nesdev.org/wiki/Nesdev_Wiki

Motivations


This project explores CPU architecture, memory management, graphics, sound emulation, and performance optimization. It offers a comprehensive understanding of low-level programming and system design, valuable for those pursuing a career in game development or computer systems.

Qualifications


Minimum Qualifications:
None Listed

Preferred Qualifications:
None Listed


Details


Project Partner:

William Pfeil

NDA/IPA:

No Agreement Required

Number Groups:

1

Project Status:

Accepting Applicants

Website:
https://www.nesdev.org/wiki/Nesdev_Wiki
Card Image Capstone