An NES emulator in C++
Go to file
2016-12-08 11:04:20 +05:30
cmake/Modules FindSFML.cmake added and updated CMakeList.txt 2016-07-23 17:58:42 +05:30
include Changed Palette 2016-12-07 18:56:53 +05:30
src Changed Palette 2016-12-07 18:56:53 +05:30
.gitignore Added Cartridge class and worked on it and MainMemory a bit 2016-07-10 20:35:47 +05:30
CMakeLists.txt Add keybindings.conf 2016-12-08 11:04:20 +05:30
keybindings.conf Add keybindings.conf 2016-12-08 11:04:20 +05:30
main.cpp Added second controller and configurable keybindings. 2016-12-07 18:27:21 +05:30
README.md Updated README 2016-12-07 21:08:50 +05:30

SimpleNES

An NES emulator written in C++ for nothing but fun.

Roughly 40-50% of games should work (ie. games that use either no mapper or mappers 1, 2 or 3).

Examples of games that have been tested to run (but NOT limited to):

(USA/Japan or World versions only i.e. NTSC compatible)

  • Super Mario Bros.
  • Contra
  • Adventure Island
  • Ninja Gaiden
  • Wrecking Crew
  • Megaman and Megaman 2
  • Mario Bros.
  • Donky Kong and Donkey Kong Jr.
  • Battle City
  • Paperboy
  • Legend of Zelda
  • Pacman
  • Tennis
  • Excitebike

Here's a big list of games that match the supported specs from SimpleNES.
(Unlike the list above, these aren't tested. Some may or may not work)

Screenshots

Screenshot 1 Screenshot 2 Screenshot 3 Screenshot 4 Screenshot 5 Screenshot 6

Videos

YouTube Playlist

Download

Executables:

Windows 32-bit
Linux 64-bit

ROMs available here for testing.

Compiling

You need:

  • SFML 2.0+ development headers and library
  • C++11 compliant compiler
  • CMake build system

Compiling is straight forward with cmake, just run cmake on the project directory with CMAKE_BUILD_TYPE=Release and you'll get Makefile or equivalent for your platform, with which you can compile the emulator

For e.g., on Linux/OS X/FreeBSD:

$ git clone https://github.com/amhndu/SimpleNES
$ cd SimpleNES
$ mkdir build/ && cd build/
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j4    #Replace 4 with however many cores you have to spare

Running

Just pass the path to a .nes image like

$ ./SimpleNES ~/Games/SuperMarioBros.nes

To set size of the window,

$ ./SimpleNES -w 600 ~/Games/Contra.nes

For supported command line options, try

$ ./SimpleNES -h

Controller

Keybindings can be configured with keybindings.conf

Default keybindings:

Player 1

Button Mapped to
Start Return/Enter
Select Right Shift
A J
B K
Up W
Down S
Left A
Right D

Player 2

Button Mapped to
Start Numpad9
Select Numpad8
A Numpad5
B Numpad6
Up Up
Down Down
Left Left
Right Right

License

This code is in public domain until an Open Source License is picked.
NES ROMs are subject to the respective studio's terms.