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.
Today's build attempts to fix a hang that can happen when rapidly single-stepping through code with the debugger open, particularly when large numbers of PPU updates are taking place (e.g. with the MMC5's graphics extensions). Additional performance optimizations have also been made to the PPU debugger.
The NTSC palette generator has been updated with properly measured voltage levels. Normal colors are largely unchanged, but color emphasis is somewhat lighter than before.
Basic support for iNES Mapper 30 (UNROM 512) has been added; note that this does not include the ability to overwrite Flash ROM contents. Additionally, all mappers which emulate Bus Conflicts now do so in a deterministic manner.
Today's build fixes a bug in Wine 6.0 and later with certain window managers, where the main window shrinks to minimum size and jumps to the upper-left corner of the screen on program startup (as well as when the size multiplier is changed).
Not coincidentally, this is also the first build of Nintendulator produced within Wine (using Visual C++ 2010).
An error in the Debugger has been corrected so that accesses to the Stack now properly trigger memory read/write breakpoints.
The NTSC palette generator has undergone a significant improvement and simplification - the standard palette should be mostly unchanged, but color emphasis should be much more accurate now.
Prompted by an online discussion about optimization, I made a minor optimization to the PPU's FrameSkip rendering code and a major optimization to the APU code when sound is disabled, allowing "fast-forward" to run much more quickly than before.
Today's build features numerous accuracy fixes centered around the APU and DMA, fixing a handful of failing test programs.
The first build for the new year adds support for an extremely obscure feature recently discovered in one revision of the Nintendo MMC1 mapper, along with a UNIF mapper fix for MMC3 boards that could be reconfigured for hardwired mirroring.
A few fixes and improvements before the new year:
- Add PPU Debugger option to rearrange pattern table tiles for 8x16 sprites
- Fix PPU Debugger to correctly flip Sprite tiles
- Update MMC5 to support CHR RAM, allowing it to run various ROM hacks which use it that way
The debugger now permits setting breakpoints at the beginning of any scanline. The pre-render scanline is specified as -1 (as the Debugger normally displays it), but you can also specify scanline 261 for NTSC or 311 for PAL and it will translate it accordingly.
Partial NES 2.0 support has been added to iNES mapper #4, allowing it to emulate the MMC6 when submapper 1 is specified.
When I did the "infrastructure update" to the mapper DLLs two months ago, it turns out I introduced a typo in UNIF support which caused all "HVC-*", "UNL-*", and "BTL-*" boards to incorrectly load as "NES-AMROM". This has now been fixed.
Namcot 163 mapper emulation (mappers 19 and 210) has gotten a significant overhaul - NES 2.0 submappers are now respected, and a few bugs were fixed too. Sound support has also been rewritten from scratch to more closely match the actual hardware, at the expense of making a few games (correctly) sound a bit worse.
Mapper 218 (a "single-chip" cartridge containing only PRG ROM and using the nametable RAM to hold graphical tiles) is now supported.
I've also added project files for Microsoft Visual C++ 2015 (better late than never), and in the process I discovered that a few obscure multicart mappers were broken due to name conflicts between global variables and function parameters (for which Visual C++ 2010 did not emit warnings).
Also, I hear that copyright years are a thing that you actually need to update, so there's that too.
Today's build fixes a small bug in the mapper interface which would have prevented the debugger from working when using Game Genie codes.
It also features an infrastructure update to the mapper DLLs which will simplify the process of adding new mappers.
The main result of this is that I'll be able to easily add support for mapper numbers greater than 255, and the only downside is that iNES mapper loading is now slightly less efficient.
NES 2.0 header support has been improved in the following ways:
- Extremely large ROM sizes (using the exponent-multiplier form) are now recognized. Since the maximum permitted ROM sizes are defined at compile time, the only real benefit is that it'll be able to generate more meaningful error messages.
- ROM images flagged to prefer Hybrid "Dendy" timing will now automatically switch to that mode.
- ROM images which require unsupported Extended Console Types (i.e. any of them) will now display appropriate error messages and refuse to load.
- ROM images which require special Vs. System hardware (beyond a special PPU) will log a warning to report that they might not work correctly.
I've adjusted the Reset logic so that it will now reset the CPU last, since its reset logic was also running the PPU and APU for 7 CPU cycles.
I've also made a further revision to the CPU trace log format - to improve readability, the PPU column now displays the scanline number first and the pixel number second, rather than the other way around.
The reference log for "nestest.nes" (which is linked from the NESdev Wiki) has been updated to incorporate both of these changes.
Having gotten tired of needing to adjust my system's sound volume every time I want to run an NES program, I've added volume controls to Nintendulator. Each internal sound channel can also be adjusted or muted individually, as well as all of the external sound channels combined (because the mapper interface does not expose each one separately).
I also fixed another bug in mapper 16, where a certain game would try to detect a 256-byte EEPROM, fail, then fall back to using a 128-byte EEPROM.
I've made some sweeping changes to all of the Mapper DLLs so that they can more intelligently manage multiple versions of their savestate data. This required updating the mapper interface version number, so any 3rd-party mapper modules will need to be updated.
A rather curious bug in the EEPROM logic for mappers 16 and 159 was pointed out to me which resulted in save data being corrupted. This should hopefully no longer happen.
I've rewritten most of the AVI recording code to unhook it from the rather old "AVI Utilities" library I was using previously. In the process, I also added a workaround for a bug in Wine that causes recordings to fail when saving the second frame worth of audio.
A fair amount of cleanup has been done to the Controllers code - hopefully no bugs were introducd in the process (aside from a crash-on-exit bug I caught prior to commit).
Frameskip settings will now be ignored during AVI capture (as well as whenever a Zapper is plugged in, as was already the case). Additionally, stopping the AVI capture (and/or unplugging the Zapper) will restore your previously configured Frameskip settings.
When the PPU debugger is enabled and you hover over a Sprite (or right-click one to pin it), its location will now be highlighted within the Nametable view.
Nintendulator's source code has been migrated to GitHub (emulator and mappers).
As is bound to happen when I decide to make an unplanned release (in response to the last release having been nine years ago), I managed to introduce a rather unfortunate bug in a last-minute change - all savestates made with the Arkanoid paddle connected to the Famicom Expansion Port would be corrupted. The release has been updated to incorporate a fix for this.
Just barely in time for the new year, I've decided to finally release version 0.980 of Nintendulator.
The debugger now counts CPU cycles elapsed since the last hard reset, starting at 7 due to RESET interrupt handling.
The CPU trace log format has also been updated to include this information, as well as reformat the old scanline/cycle status to be more meaningful.
The debugger now has its own dedicated I/O handlers for safely reading CPU and PPU memory without triggering side effects. Debugging NSFs should now be far easier.
Several issues in MMC5 sound emulation have been fixed, notably correcting a hang in at least one Koei title.
Some minor tweaks have also been made to the various Konami VRC mappers.
Performing a reset or savestate save/load while emulation is active will no longer interrupt audio playback or controller input.
The Arkanoid Paddle and SNES Mouse controllers can now be configured to use custom axes instead of always using the mouse - most notably, it's possible to play Arkanoid II in VS mode using two paddle controllers bound to different axes.
A few adjustments have been made to CPU DMA emulation (for sprite transfers and sound sample fetches), as well as a small tweak to Controller configuration to get it to work in Wine.
Controller configuration should now be able to tolerate Windows enumerating devices in a different order (e.g. if you unplug a USB gamepad you weren't using).
A truly ancient bug related to POV hat configuration and usage has finally been fixed - now, the axis/discrete toggle only affects configuration, and both modes will actually work during gameplay.
The checkbox in Controller Configuration has also been reversed, so that Axis mode (which tends to be more useful for NES controllers) is used by default.
Palette configuration is now specific to the selected region (NTSC, PAL, and Dendy/Hybrid) rather than the CPU/PPU clock divider ratio. Additionally, both PAL and Dendy mode will now swap the Red and Green color emphasis bits as has been observed on actual hardware.
A rather annoying bug with POV hat configuration (which I introduced back in February with some "code cleanup") has been fixed, so you can actually use them again.
Breakpoints now trigger on "dummy reads" that result from page crosses and indirection.
A few fixes to frameskip rendering for today - took me a few tries to get it right, since I was in a hurry to get a working build available.
Today's build includes a number of PPU updates to make emulation better match findings from Visual 2C02. The savestate version number has also been updated, so any new saves will be incompatible with older builds.
Nintendulator's sprite evaluation logic has been partially rewritten in order to match behavior observed from Visual 2C02 and actual hardware.
Some graphics/sound code has been reorganized somewhat in order to avoid needlessly reloading parts of DirectX. In the process, I fixed a bug that caused 64-bit builds (MSVC 2010 only) to crash upon changing video modes.
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)
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.
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.
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.
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.
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).
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 be displayed 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.
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).
Some minor fixes to the Debugger - pressing the various "Controls" buttons will no longer result in a crash when no ROM is loaded.
A few bugs in Nintendulator's NSF player (and the Winamp plugin) have been fixed.
Various dialogs within the emulator (particularly the debugger and the NSF player controller) should now properly respond to keyboard input.
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.
2007 was an "off" year - after leaving the NESdev community, it was a long time before I did anything with Nintendulator.
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.
The RP2C04-0004 palette has been extracted, thus completing the VS Unisystem palette set in Nintendulator.
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.
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).
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.
A minor fix has been applied to the NSF player's BIOS, allowing it to properly handle NSFs whose init routines loop forever.
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.
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.
Nintendulator 0.960 is now officially released.
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.
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.
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.
Nintendulator has been modified to support Unicode; separate downloads are now available for ANSI (Windows 9x/ME) and Unicode (Windows NT/2K/XP) binaries.
After trying for perfection for too long (and never reaching it), I've decided to formally release Nintendulator 0.950.
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!
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.
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.
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.
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.