ANESE (Another NES Emulator) is a Nintendo Entertainment System Emulator being written for fun and learning.
Accuracy is a long-term goal, but the primary goal is simply getting ANESE to play some of the more popular titles :smile:
I’m aiming for clean and interesting C++11 code, with a emphasis on keeping the source readable and maintainable. Performance is important, but it’s not a primary focus.
NOTE: The APU is not my code. I wanted to get ANESE partially up and
running before new-years 2018, so I’ve used Blargg’s venerable
library to handle sound (for now). Once I polish up some of the other aspects
of the emulator, I will revisit my own APU implementation (which is currently
ANESE is built with cross-platform in mind, and builds are regularly tested on macOS, Linux (Ubuntu), and Windows regularly. The C++ doesn’t rely on vendor-specific extentions, and is compiled with strict compiler flags. The code is linted regularly.
Lastly, I am trying to avoid looking at the source codes of other NES emulators, since IMO, half the fun of writing a emulator is figuring things out yourself :D
ANESE uses CMake, so make sure it is installed.
ANESE’s emualtion core doesn’t have any major dependencies (aside from clib), but there are a couple used for the UI. Most of these dependencies are bundled with ANESE (see: /thirdparty), although some require additional installation:
apt-get install libsdl2-dev(on Ubuntu)
brew install SDL2
CMakeLists.txtto point to the SDL2 dev libs (or just plop them down into
# in ANESE root mkdir build cd build cmake .. make
Building on Windows has been tested with VS 2017 using MSVC.
If you’re interested in looking under the hood of the PPU, you can pass the
-DDEBUG_PPU flag to cmake and get an
anese build with some neat debug info.
ANESE can run from the shell using
anese [rom.nes] syntax.
If no ROM is provided, a simple dialog window pops-up prompting the user to select a valid NES rom.
For a full list of switches, run
Windows Users: make sure the executable can find
Currently hard-coded to the following:
Any xbox-compatible controller should work.
There are also a couple emulator actions:
|Reset||Ctrl - R|
|Power Cycle||Ctrl - P|
|Toggle CPU logging||Ctrl - C|
|Speed++||Ctrl - =|
|Speed–||Ctrl - -|
main.ccI’M SORRY IN ADVANCE