A C++ NES emulator implementation featuring a modular and well-structured design. The project emulates the NES hardware and includes a CPU implementation, memory mapping, and a basic disassembler for debugging purposes.
- Overview
- Project Structure
- Features
- Building and Running
- Instruction Implementation Status
- Contributing
- License
This NES emulator is written in modern C++ and aims to faithfully emulate the Nintendo Entertainment System (NES) with a focus on modularity and extensibility. The emulator leverages a component-based design to make the codebase easy to navigate and modify.
- src/
- Cartridge/: Handles loading and parsing of NES ROMs.
- Cpu/: Implements the 6502 CPU, including opcodes and addressing modes.
- Bus/: Manages memory and communication between the CPU and peripherals.
- Disassembler/: Provides a disassembler for debugging purposes.
- CMakeLists.txt: Build configuration for the project.
- Emulates the 6502 CPU core of the NES.
- Supports loading
.nes
ROM files. - Modular design for easy debugging and extension.
- Basic disassembler to inspect ROM instructions.
- CMake (version 3.16 or higher)
- A C++17-compatible compiler
- Raylib for rendering (automatically linked via CMake on macOS)
- Clone the repository:
git clone <repository-url>
- Navigate to the project directory:
cd NES_Emulator_CPP
- Create a build directory:
mkdir build && cd build
- Run CMake:
cmake ..
- Build the project:
make
- Run the emulator:
./output/bin/nes-emulator
Instruction | Addressing Modes Implemented | Status |
---|---|---|
LDA | Immediate, Absolute | Done |
STA | Absolute | Done |
LDY | Immediate | Not Done |
SEI | Implied | Done |
BPL | Relative | Done |
CLD | Implied | Done |
BRK | None | Not Done |
... | ... | ... |
Contributions are welcome! Please submit issues or pull requests for any enhancements or bug fixes.
This project is licensed under the MIT License. See the LICENSE
file for details.