Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/louis-tarvin/nes-emulator
A Nintendo Entertainment System emulator written in C++ (hobby project)
https://github.com/louis-tarvin/nes-emulator
Last synced: 12 days ago
JSON representation
A Nintendo Entertainment System emulator written in C++ (hobby project)
- Host: GitHub
- URL: https://github.com/louis-tarvin/nes-emulator
- Owner: Louis-Tarvin
- Created: 2022-07-03T08:56:11.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-08-03T13:54:24.000Z (over 2 years ago)
- Last Synced: 2024-11-13T22:11:58.006Z (2 months ago)
- Language: C++
- Size: 237 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NES Emulator
A Nintendo Entertainment System emulator written in C++. This has only been tested on Linux but should be cross-platform.
---
## Features:
- [x] 6502 CPU
- [x] iNES cartridge loading
- [x] background rendering
- [x] sprite rendering
- [x] user input
- [x] audio
- [x] support for most common mappersCurrently implemented mappers:
- NROM (000)
- MMC1 (001)
- UxROM (002)
- MMC3 (004)
---## Controls
- A button: X
- B button: Z
- Start: S
- Select: A
- D-pad: Arrow keys
- Play/pause: Space
- Step single CPU instruction (while paused): Enter
- Cycle displayed nametable: Tab
- Cycle colour palette: P---
## Screenshot
![screenshot](images/Screenshot.png)
The main screen is drawn to the left, with debug information drawn to the right. This includes the values of internal registers, the selected nametable (changed by pressing tab), and the pattern tables.
---
## Structure
The structure of the code closely resembles the structure of the hardware itself, with busses being used to map addresses to the correct components. The functionality of the PPU bus is encapsulated within the PPU class, whereas the CPU bus is its own class which can be though of as the main class of the emulator.
This structure is shown by the following diagram:
![layout](images/structure.svg)
---
## Acknowledgements
- [Nesdev Wiki](https://www.nesdev.org/wiki/Nesdev_Wiki) - Hardware reference
- [olcPixelGameEngine](https://github.com/OneLoneCoder/olcPixelGameEngine) - Library used to draw window
- [tiny file dialogs](https://sourceforge.net/projects/tinyfiledialogs/) - Library used for the file picker UI
- [javidx9 youtube channel](https://www.youtube.com/c/javidx9) - Great video series on NES emulation