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 the SRAM folder), 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.

News

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 either via e-mail (address here) or on IRC (irc.freenode.net #nesvideos).

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.

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 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 palette detection will likely not be implemented, and it'll be a while before the VS palettes are added.

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

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!
An official new release is imminent...

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.
As always, the latest binaries and sources can be found below.

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

Latest unstable build (0.965 beta, last updated 2008/09/06 13:04:00)

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!

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.

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!