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