Nintendulator
an NES emulator by Quietust
[Skip to Downloads]
[Return to NES Stuff]

About

Nintendulator is an open source Win32 NES emulator written in C++ (plus some assembly optimization). The original goal was to emulate the NES down to its hardware quirks; though it's fallen behind over the years, recent builds have caught up once again and can emulate certain behaviors 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), 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. Additionally, savestates and battery-backed RAM are saved within the current user's profile rather than in the application's own directory, allowing Nintendulator to function properly on Windows 7 and Vista without requiring the program to be run as an administrator.

News

All - 2010 - 2009 - 2008 - 2007 - 2006 - 2005 - 2004

January 18, 2010

A discussion regarding $2004 read behavior (and inconsistent emulation thereof) revealed a few minor bugs in my own implementation; these should now be fixed.

January 9, 2010

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.

January 4, 2010

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.

January 2, 2010

An even better way to welcome the new year would be to release a new version of Nintendulator. Thus, it has been done.

January 1, 2010

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.

June 13, 2009

Nintendulator's mapper DLL code has been upgraded from C to C++, effectively completing the task from March 19.

Several mapper bugs have been fixed in the process, though it is entirely possible that some other bugs may have been introduced as well, so keep an eye out for problems.

March 21, 2009

The code for handling different controller types (gamepad, Zapper, Power Pad, Four Score, etc.) has been rewritten to take advantage of C++ language features. Initial tests suggest it is working properly, though there may yet be bugs lurking within it.

The savestate format has also been updated - it would seem that controller state data was never being stored correctly, and the actual controller state block was missing some important data.

March 19, 2009

Nintendulator's code has been upgraded from C to C++ in order to make use of namespaces for a much needed improvement in maintainability.

No actual functionality should have changed as a result of this.

March 16, 2009

Fixed a rather glaring bug (pointed out by a user) which caused read/write breakpoints to not trigger on unindexed accesses (e.g. LDA $2002 or STA $4015).

March 15, 2009

The aforementioned "Detail" section has been implemented - simply hover the cursor over a nametable tile, sprite, pattern table tile, or palette entry, and it will bedisplayed magnified and with appropriate details. Right-clicking on an object will cause its details to remain displayed when you move the mouse over an empty area.

March 14, 2009

The PPU Debugger now displays sprites, arranged in a 16 by 4 grid.

A "Detail" section has also been added - while it currently does nothing, it will eventually be made to display details about whatever the mouse cursor is currently pointing at (in similar fashion to rveach's modified Nintendulator debugger).

March 12, 2009

Some minor fixes to the Debugger - pressing the various "Controls" buttons will no longer result in a crash when no ROM is loaded.

February 28, 2009

A few bugs in Nintendulator's NSF player (and the Winamp plugin) have been fixed.

January 16, 2009

Various dialogs within the emulator (particularly the debugger and the NSF player controller) should now properly respond to keyboard input.

December 28, 2008

Nintendulator now stores its savestates, SRAM/FDS data, and debug dumps within the current user account's Application Data folder instead of the "Saves" subdirectory of its installation folder. The first time you run this build, there will be a short delay as your savestates are moved to this new location.

This should improve compatibility with Windows Vista and allow Nintendulator to be installed within the Program Files folder without needing to run as an Administrator.

December 20, 2008

Breakpoints can now be toggled on and off simply by double-clicking on them in the Breakpoint list.

November 8, 2008

No code changes, but the mapper DLLs are now licensed under the BSD license and their sources are now available on SourceForge.

September 28, 2008

Fixed a minor typo which prevented breakpoints from being listed properly when closing and reopening the CPU debugger window.

September 6, 2008

Adding execution breakpoints has just gotten a whole lot easier - just double-click an instruction in the Trace listing and it'll open the Add Breakpoint dialog with the address filled in for you.

September 5, 2008

Today's build adds some minor tweaks to PPU and APU timing to match certain behaviors observed on the real hardware.

Those of you familiar with Blargg's emulator test ROMs will now observe that it passes nearly all of them (aside from power-on palette and MMC3A/MMC3B behavior).

September 4, 2008

Today's build adds dialog boxes for recording movies (to allow users to specify a description for the movie, as well as configure controllers more easily) as well as playing them back.

September 3, 2008

Fixed a rather glaring bug with sprite overflow.

September 2, 2008

This build adds a few special changes. To start off, the debugger menu options now actually make sense, having been updated to match the debugger changes I made over the past months, and the debugger windows now automatically position themselves when they open.

Additionally, I've made some changes to APU DMA fetches - as a result, they should now (correctly) interfere with reading from the controller ports and video memory.

Last, but not least, I've enabled Nintendulator's experimental cycle-accurate sprite emulation code (and fixed a few bugs in the process). This code has been present for quite a long time, but I had neglected to enable it in fear of breaking emulation (though not enabling it sort of prevents it from being tested, rather defeating the purpose). Hopefully, with more people (i.e. almost everybody, excluding those who compiled it themselves) messing around with it, any remaining bugs will be eliminated and the old sprite code can permanently go away.

Note that this increases the minimum system requirements significantly, though a modern system (less than 3-4 years old) should still be able to handle it fine.

August 26, 2008

Cleaned up and reorganized some of the build files to speed up compilation - no actual code changes in today's snapshot.

August 17, 2008

As promised, opcode and interrupt breakpoints have been implemented.

August 3, 2008

Support for execution breakpoints has been readded, along with brand new support for memory read/write breakpoints. Opcode breakpoints (i.e. break when a specific opcode is encountered) and interrupt breakpoints (NMI and IRQ, as well as BRK, which is logically equivalent to opcode 00) are planned - they will be implemented at a later date.

Note that this new breakpoint support has not been fully tested - if you encounter any problems, please contact me via e-mail (address here).

June 29, 2008

After being left untouched for months, I've updated Nintendulator's debugger. Window positioning isn't yet done intelligently, but the new debugger should be a significant improvement over the old one.

Note that this build currently does not support breakpoints - they will be readded in a future build, potentially with additional options.

January 6, 2008

It seems that nVidia GeForce 8 series video chipsets do some strange things at 320x240 (such as stretching the image and heavily filtering it), so fullscreen now uses 640x480 instead.

The introduction of software 2X stretching for this fix also greatly simplified the process of implementing a Scanlines option, intended for Windowed 2X and Fullscreen modes.

December 31, 2007

2007 was an "off" year - after leaving the NESdev community, it was a long time before I did anything with Nintendulator.

July 9, 2006

Fullscreen emulation is mostly complete now - the only thing that remains to be added is preservation of window size and position prior to switching to fullscreen.

June 20, 2006

The RP2C04-0004 palette has been extracted, thus completing the VS Unisystem palette set in Nintendulator.

May 31, 2006

Kevin Horton has extracted accurate palettes from the RP2C04-0002 and RP2C04-0003, allowing me to add 100% accurate palettes for VS (2) and VS (3). All that remains now is the 4th VS palette.

February 14, 2006

The remaining VS Unisystem palettes have been filled with placeholders containing most of the correct colors (based on translation tables found in several games which feature support for all 4 VS palettes as well as the standard NES palette). However, some VS games may still have color problems.

In addition, I have reordered the palette configuration values slightly - as such, the values for "Custom palette" and "VS (1)" have been swapped.

The PAL palette now features a Saturation adjustment, though it currently does nothing (as the PAL palette is still hardcoded).

February 9, 2006

Nintendulator's NTSC palette generator has been updated with more accurate values, as well as a few bug fixes. Hue adjustment now ranges from -30 to +30, rather than from 300 to 360 (settings will be automatically adjusted on program startup), and Saturation is now properly set for each color.

February 6, 2006

A minor fix has been applied to the NSF player's BIOS, allowing it to properly handle NSFs whose init routines loop forever.

January 22, 2006

Today's beta introduces preliminary Fullscreen support. Further work is required, though, in order to prevent Mouse clicks (from Zapper input, for example) from causing the main application window to lose focus.

POV hat support has also been improved, allowing them to be used in two different ways. The standard mapping (which was supported first) is to treat each POV hat as up to 8 mutually exclusive buttons. An additional mapping has now been added to treat them as a pair of axes (technically as 4 overlapping buttons) to make them usable for controller D-pads.

A new option has been added to the Input Configuration dialog to allow using this new mapping. The option is not preserved, so it needs to be re-checked each time you reconfigure your controllers, but it only applies to the configuration process - it is possible to use both POV hat mappings simultaneously, but they need to be configured separately.

January 19, 2006

The first 0.965 beta build is now available, featuring an overhauled DirectInput interface, including proper axis/button names as well as POV hat support.

January 11, 2006

Nintendulator 0.960 is now officially released.

January 7, 2006

After performing numerous tests with my CopyNES and TV tuner card, I've derived much more accurate coefficients for the PPU's Colour Emphasis bits.

November 24, 2005

A few major bugs (dealing with recording movies from savestates) have been fixed, and a few new mappers have been added.

After some consideration, I realized that there's no point in including separate downloads for the beta mapper DLLs when the beta emulator binaries always include them.

November 19, 2005

Partial VS Unisystem support has been readded to Nintendulator, in the form of a new mapper DLL - VS.DLL. Mappers 99 and 151 have been removed from iNES.DLL as a result.

Automatic VS palette detection will likely not be implemented, and it'll be a while before the VS palettes are added.

June 30, 2005

Nintendulator has been modified to support Unicode; separate downloads are now available for ANSI (Windows 9x/ME) and Unicode (Windows NT/2K/XP) binaries.

March 14, 2005

After trying for perfection for too long (and never reaching it), I've decided to formally release Nintendulator 0.950.

December 11, 2004

In an attempt to get rid of annoying bugs which caused movies to desynchronize, Nintendulator is now multithreaded. This means that opening menus and moving windows around will no longer cause emulation to pause. Best of all, the change was successful in fixing the aforementioned movie bugs!

November 2, 2004

Just posting an update on Nintendulator 0.950 development.

Frameskipping code has been vastly improved, and audio data is properly saved in savestates now. Also, slowdown and frame-advance options have been added, allowing users to record movies with extreme precision. Unless some major bugs or feature requests come up, I should be ready to officially release soon.

September 12, 2004

Development on Nintendulator 0.950 has been progressing nicely. Among the many new features added are movie recording/playback (with savestate support), an iNES header editor, AVI capturing, and more.

April 1, 2004

Nintendulator now has a proper homepage. New material will be added as it is deemed necessary.

The current source and binary snapshots for Nintendulator 0.950 are officially available here.

Downloads

Here you may download various versions of Nintendulator and other related applications.

Latest unstable build

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!

Current 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.

Outdated releases

These are old releases of Nintendulator, archived here for posterity. Where present, mapper DLL binaries are also included with the corresponding emulator releases.

Mappers Supported

These mappers are supported in the latest released version of Nintendulator. Mappers listed in bold are only available at the listed compatibility level in the latest beta build (strike indicates mappers whose compatibility has changed in the latest beta build).

Valid XHTML 1.0 Valid CSS!