Nintendulator is an open source Win32 NES emulator written in C++. The original goal was to emulate the NES down to its hardware quirks, and while it's not 100% perfect, it does emulate a variety of special cases that most other emulators neglect to handle. However, this emulation precision comes at a price - a 1500MHz (estimated) or faster CPU is required to emulate at full speed.
Supported file formats include .NES, UNIF, FDS (fwNES format), and NSF. Mappers are handled using external DLLs, complete with extra sound channels for most games which provide them. Other notable features include writing to FDS images (by storing the differences in separate files), authentic Game Genie support (limited to 3 codes), customizeable controllers (including 4 player), input movie recording and playback (with re-recording), AVI capturing, and a debugger with simple breakpoint support. Savestates and battery-backed RAM are saved within the current user's Application Data folder, allowing Nintendulator to function properly when not run as an Administrator.
To contact the author, send email to quietust at either @qmtpro.com or @gmail.com, or look on the NESdev Discord server (link available from the Wiki) or in the #nesdev IRC channel on EFnet.
Support for the SNES Mouse controller has been added - try it out with the game "Thwaite".
Nintendulator will now only attempt to relocate old save data from the "Saves" folder once, rather than doing so every time the program starts.
Apparently, the Oeka Kids tablet controller had the same problem as the Zapper when the pointer was outside the window - this has also been fixed.
A few Zapper bugs have been fixed - now it can react correctly to the scanline currently being rendered, and moving the pointer outside the window will properly set it as seeing "nothing".
64-bit build targets have been added to the Visual Studio 2010 project files, and they seem to run just fine on Windows 7 64-bit. Actual 64-bit builds will not be made available for download until version 0.980 is released.
A rather serious bug in the Game Genie savestate code (would would result in lockups when used with mappers such as MMC3 and MMC5) has been fixed.
Mappers 1, 4, 11, 16, 66, 85, and 159 have been updated to support more than 8KB of CHR RAM when used with NES 2.0 ROM images.
Nintendulator now respects the NES 2.0 header values for PRG RAM and CHR RAM sizes more closely; their default maximum sizes have been updated from 64KB to 1024KB and 32KB to 256KB, respectively. The logic for setting banks will now obey these limits, so an NES 2.0 ROM which indicates zero PRG/CHR RAM will prevent you from mapping any; consequently, an NES 2.0 ROM with both zero CHR ROM and zero CHR RAM is invalid and will report an error when loaded.
Today's build updates some of the inner workings of the APU to more closely match the behavior of the hardware as observed in the Visual 2A03.
A very small bug has been fixed in the PPU savestate code - rather than loading the timing mode (NTSC/PAL/Hybrid) from the savestate, it was taking the current mode and jumping to the next one.
Another very small bug has also been fixed in the movie savestate code - if the movie had a non-empty description, loading a savestate for it would corrupt the description and the input data itself.
Nintendulator's builtin iNES header editor now disallows setting the NES 2.0 battery-backed PRG/CHR RAM fields to nonzero values if the SRAM flag is cleared. Additionally, all unused fields will be properly zeroed out when saving the header.
A rather embarrassing flaw has turned up within Nintendulator's NTSC palette generator, resulting in colors being significantly out of phase. This flaw has now been corrected.
Nintendulator's region handling support has been overhauled, and provisional support for the "Dendy" NTSC/PAL hybrid has been added.
Additionally, partial widescreen support has been added to fullscreen mode - based on your primary monitor's current resolution, Nintendulator will try to use one of several appropriate fullscreen resolutions to prevent the image from being stretched horizontally, falling back to 640x480 if none of them work.
Four new mappers have been added: 82, 101, 155, and 206. Mapper 184 has been fixed so it actually works, and Mapper 185 has been dropped to "Nearly" compatibility since 2 of its 9 games seemingly don't work.
Nintendulator no longer makes use of inline assembly for CPU emulation optimization - in fact, I've managed to further optimize the existing C++ code to make it even faster.
Support has been added for mappers 209-211, all of which are variants of already supported mappers.
To anybody who might be curious, I've just confirmed that the latest ANSI build of Nintendulator actually does run on Windows 95 with DirectX 8; however, that does not mean that you should do such a thing. Nintendulator 0.980, whenever it is released, will be the final version to include ANSI builds.
Nintendulator's mapper interface has been updated to make the MapperInfo "Load" callback return a boolean to indicate success, primarily so that the Famicom Disk System mapper can indicate failure if it is unable to load DISKSYS.ROM. The mapper interface version is not being updated with this change, as it has already been updated once in version 0.975 (back on November 26, 2010).
Nintendulator's builtin .NES header editor has been updated with proper NES 2.0 support, largely imported from a standalone header editor I wrote back in 2006.
Joysticks and gamepads should work correctly again - when adding support for Microsoft Visual Studio 2010, the input code had been updated to use DirectInput 8.0 without actually verifying that everything still worked properly.
As it turns out, my code changes from October 29, 2010 violated relevant guidelines - the appropriate place to store data is indeed within Application Data. This change has thus been reverted, and any data in My Documents will automatically be moved back to Application Data when Nintendulator is opened.
In order to properly accomodate for the difficulty of actually locating the savestate folder, a new menu option "Browse Save Files" has been added to the File menu which will open an Explorer window to the appropriate path; similarly, if any files could not be migrated to the Application Data folder, Explorer will browse to the old location to simplify cleanup.
Project files for Microsoft Visual Studio 2010 have been added, and several code changes have been made to ensure that everything still compiles, including changing the build paths once again.
Unlike the existing project files for Visual Studio 2003, these produce only Unicode binaries, as executables produced by Visual Studio 2010 cannot be run on any operating system prior to Windows XP SP3.Nintendulator's CPU core is now available without inline assembly, and several more invalid opcodes have been implemented.
Emulator and mapper project files have been changed to output Unicode build files in their own directory, just as ANSI builds do. Anybody making their own builds of Nintendulator should update their build scripts accordingly.
Just some code cleanup and optimization for today, part of which resolves some confusion over the difference between WNDPROC and DLGPROC.
The emulator's main window should no longer be positioned off the edge of the screen (unless you use multiple monitors and have them in a non-rectangular arrangement).
The 5 special Vs. Unisystem PPUs which swap registers $2000 and $2001 and add a special readback value at $2002 are now supported (provided your ROMs have appropriate NES 2.0 headers), and mapper 99 now works with Vs. Gumshoe.
The "Debug Information" window should no longer flicker and slow down whenever there's a lot of stuff in it; additionally, Nintendulator will now remember whether or not said window was open when you exit and restart, and the corresponding Debug menu option will now act as a toggle.
iNES mappers #1 and #5 now support nonstandard battery-backed PRG RAM sizes specified via NES 2.0 header fields.
Additionally, Vs. Unisystem ROMs with NES 2.0 headers (and Playchoice-10 ROMs, NES 2.0 or not) will now automatically load the appropriate palette without altering your configuration.
The first build of 2011 boosts almost* all "partially supported" iNES mappers to "nearly supported".
(* - except for #116)
Here you may download various versions of Nintendulator and other related applications.
This is a snapshot of my latest development code. Though this has features not present in the current release below, it may also have significant bugs, so download it at your own risk!
This is NOT a release!
This is the latest officially released version of Nintendulator. You are highly recommended to use this version instead of the latest build above unless you require any of the new functionality added since the last release.
These are old releases of Nintendulator, archived here for historical purposes.
These mappers are supported in the latest released version of Nintendulator. Mappers listed in bold have been added or improved in the latest beta build; for iNES and VS, strike indicates what the compatibility was in the official release, while for UNIF it indicates boards that have been removed.