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.
Bandai EEPROM data storage is now emulated, both for mappers 16 (256-byte) and 159 (128-byte).
Not surprisingly, some of the newly added mappers didn't work quite the way they were supposed to, so they should now be mostly fixed. A few other existing mappers have also been fixed.
Today's build adds 21 new iNES mappers and improves at least 7 others.
Today's build includes a minor fix for iNES mapper 116 (specifically dealing with savestates) and a whole bunch of minor code cleanup.
Attempting to start or stop AVI recording while emulation is active should no longer crash the emulator - instead, it should pause emulation temporarily.
Today's build bumps the mapper interface version up to 3.8 in order to fix a few long-standing quirks in some of its data types:
- COMPAT_TYPE's order has been reversed (so that COMPAT_NONE comes first and COMPAT_FULL comes last) and COMPAT_NUMTYPES has been added in order to denote the number of actual compatibility levels recognized.
- In STATE_TYPE, STATE_SIZE is now the first value instead of the last one.
- In ROM_TYPE, ROM_UNDEFINED is now the first value instead of the last one; additionally, ROM_NUMTYPES has been added in order to denote the number of actual ROM types recognized.
Additionally, another 20 UNIF boards have been added, and the "Mappers Supported" section at the bottom of the page is now dynamically generated.
In order to improve usability (and likely improve compliance with any existing standards for program data storage on Windows), Nintendulator's savestates, SRAM files, and debug dumps are now stored within the current user's "My Documents" folder rather than within their roaming "Application Data" folder. The first time you run this build, all relevant files will be migrated to the new location and the old directories will be deleted.
Additionally, the build configurations have been tweaked such that the ANSI version of Nintendulator can now be run properly on Windows 98 again (and possibly even Windows 95), for those inclined to do such a thing; it had apparently stopped working when I first changed it to store save data within the Application Data folder, appropriately enough.
The aforementioned alternate keyboard layout is now labeled as the "Subor Keyboard" for the Chinese famiclone from which it originates, and several of its key bindings have been fixed in the process.
The Family Basic Keyboard controller (as well as the alternate layout used by several Chinese and Russian games) now supports movie recording and playback. However, due to the way they accept input (and block all other keyboard input), it is not possible to use them with the Frame Advance feature while recording movies.
Today's build primarily fixes several input bugs. Firstly, input is no longer monitored when the main window is inactive (as it was intended to be) - previously, it would only behave this way until emulation was stopped and restarted. As a side effect, any currently pressed keys will no longer be registered across a reset. Secondly, joystick controllers will no longer register as being pointed to the top-left when they are unavailable due to the main window being inactive.
By request, iNES Mapper #40 can now be used with CHR RAM instead of CHR ROM (for use with porting FDS games, for example).
A user-reported crash bug (specifically a divide by zero when minimizing the main window while the Zapper controller is selected) has been fixed.
With a small tweak to the NSF player BIOS, switching between tunes without pressing "Stop" first should no longer result in a burst of white noise.
Not much new today - just a few timing tweaks to satisfy a few more of Blargg's test ROMs.
While in prior versions of Nintendulator, PPU debug information (pattern table, nametable, and palette views) was only updated once per frame, the improved debugger (introduced June 29, 2008) had been made to update such information immediately, resulting in considerable slowdowns; today's build restores the original behavior, as well as incorporating various other bits of code cleanup.
Today's build includes brand new logic for DPCM sample fetching - under some circumstances, the old code could skip samples (and get thrown into an infinite loop if there was only 1 sample).
Also, a rather glaring bug (introduced during the C to C++ upgrade back from March 19, 2009) was reported in the Winamp plugin which prevented it from working at all. This has been fixed, and the release file and sources for 0.970 have been reuploaded. In the process of fixing this, I've also updated all of the Winamp plugin structures to match the latest SDK and have added Unicode build targets (and downloads below).
Today's build fixes a few minor APU emulation accuracy issues, as well as solving a potential crash when opening files via drag-and-drop from another application (most notably from ZIP files).
MMC3 (iNES mapper 4) and MMC6 (UNIF-only) emulation has been updated to be more consistent with newly discovered behavior.
Some rather interesting behavior was recently discovered involving accessing $2007 during rendering. Nintendulator should now properly emulate this behavior, fixing several significant display glitches in the game "The Young Indiana Jones Chronicles".
Today's build fixes a minor PPU bug regarding sprites - specifically, the SPR-RAM address register ($2003) is no longer reset at the beginning of each frame.
A discussion regarding $2004 read behavior (and inconsistent emulation thereof) revealed a few minor bugs in my own implementation; these should now be fixed.
As predicted, the process of converting the mapper DLL code from C to C++ introduced at least one bug, causing Namco 106 (iNES mapper 19) sound to break. The latest build includes mapper DLLs which fix this problem.
With rather inconvenient timing, information regarding the inner workings of MMC5 PCM sound were posted yesterday, 1 day after the release of Nintendulator 0.970. Support for this feature (though it is not known to be used by any games) has been added.
Additionally, limited support for NES 2.0 format ROM images has finally been added - for now, this consists solely of handling images with more than 4MB of PRG ROM and 2MB or more CHR ROM.
An even better way to welcome the new year would be to release a new version of Nintendulator. Thus, it has been done.
What better way to welcome the new year than with a simple cosmetic bugfix?
The FPS counter in the titlebar should no longer display negative numbers when the framerate drops too low.
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.