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.
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.
Breakpoints can now be toggled on and off simply by double-clicking on them in the Breakpoint list.
No code changes, but the mapper DLLs are now licensed under the BSD license and their sources are now available on SourceForge.
Fixed a minor typo which prevented breakpoints from being listed properly when closing and reopening the CPU debugger window.
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.
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).
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.
Fixed a rather glaring bug with sprite overflow.
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.
Cleaned up and reorganized some of the build files to speed up compilation - no actual code changes in today's snapshot.
As promised, opcode and interrupt breakpoints have been implemented.
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).
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.
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.
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.