ANESE (Another NES Emulator) is a Nintendo Entertainment System Emulator written for fun and learning.
While accuracy and performance are long-term goals, ANESE’s primary focus is to get some of the more popular titles up and running. Most basic Mappers have been implemented, so many popular titles should be working! :smile:
ANESE is built with cross-platform in mind, and is regularly tested on all major platforms (macOS, Windows, and Linux). ANESE doesn’t use any vendor-specific language extensions, and is compiled with strict compiler flags. It is also linted (fairly) regularly.
Lastly, ANESE strives to keep a clean and interesting C++11 codebase, emphasizing readability, maintainability, and approachability. The code is well commented, providing sources and insights for much of the logic.
Official releases can be found on the Releases tab on GitHub.
Alternatively, for the most up-to-date version of ANESE, you can download nightly builds. These are compiled directly from the latest ANESE commit, so there may (will) be bugs.
Windows: You can download nightly versions of ANESE from AppVeyor’s build artifacts page.
macOS: Travis uploads nightly ANESE.app bundles to this GDrive folder.
While ANESE’s emulation core (src/nes) doesn’t have any major dependencies, there are a couple of libraries the UI uses. Most of these dependencies are bundled with ANESE (see: /thirdparty), although some do require additional installation:
apt-get install libsdl2-dev(on Ubuntu)
brew install SDL2
SDLenvironment variable to point to the dev libs
C:\sdl2\(Where I put them)
CMakeLists.txtto point to the SDL2 dev libs
ANESE builds with CMake. Nothing too fancy here.
# in ANESE root mkdir build cd build cmake .. make make install # on macOS: creates ANESE.app in ANESE/bin/
On Windows, building is very similar:
mkdir build cd build cmake .. msbuild anese.sln /p:Configuration=Release
If you’re interested in looking under the hood of the PPU, you can pass the
-DDEBUG_PPU flag to cmake and have ANESE display PPU debug windows.
Running ANESE with no arguments throws you into a directory-browser, from which you can navigate to your ROM and launch it.
Alternatively, ANESE can run from the shell using
anese [rom.nes] syntax.
Certain features are only accessible from the command-line at the moment (e.g:
movie recording / playback, PPU timing hacks). For a full list of switches,
Windows Users: make sure the executable can find
SDL2.dll! Download the
runtime DLLs from the SDL website, and plop them in the same directory as
There aren’t too many mappers implemented at the moment, but the ones that are cover a sizable chunk of the popular NES library.
|000||NROM||Super Mario Bros. 1, Donkey Kong, Duck Hunt|
|001||MMC1||Legend of Zelda, Dr. Mario, Metroid|
|002||UxROM||Megaman, Contra, Castlevania|
|003||CNROM||Arkanoid, Cybernoid, Solomon’s Key|
|004||MMC3||Super Mario Bros 2 & 3, Kirby’s Adventure|
|007||AxROM||Marble Madness, Battletoads|
If a game you love doesn’t work in ANESE, feel free to implement it’s mapper and open a PR for it :D
Currently hard-coded to the following:
Any xbox-compatible controller should work.
There are also a couple of emulator actions:
|Pause / Open Menu||Esc||Left Thumbstick Button|
|Reset||Ctrl - R|
|Power Cycle||Ctrl - P|
|Toggle CPU logging||Ctrl - C|
|Speed +25%||Ctrl - =|
|Speed -25%||Ctrl - -|
|Fast-Forward||Space||Right Thumbstick Button|
|Make Save-State||Ctrl - (1-4)|
|Load Save-State||Ctrl - Shift - (1-4)|
(there are 4 save-state slots)
blargg-apubranch has an older version of ANESE that uses Blargg’s awesome
nes_snd_emulibrary for the APU, and while my integration was a bit unstable at times, it did sound a lot better when it did work.
--alt-nmi-timingflag might fix some of these games.
These are features that will add major value to ANESE:
peek, i.e: a
constread. As such, a debugger could easily inspect any/all memory locations with no side effects!
Here’s a couple that have been crossed off already:
main.cc- push everything into
gui.ccinto more files!
And here are some ongoing low-priority goals:
.fm2movie format better