About This File
Nintendulator started out as NinthStar NES, written by David "Akilla"
De Regt. Written in C++, it was a reasonably accurate (and slow) NES
emulator which used NESten 0.61's mapper DLLs. Numerous other systems
were planned to be emulated within NinthStar (as well as complex
debuggers for each of them), but somewhere along the line, the project
was abandoned.
At that point, I took the existing NES sources and started improving
them. First, the PPU was rewritten to be much more accurate than
before, running cycle-by-cycle according to documentation that had been
released at the time. After that, the CPU was rewritten to execute
instructions more accurately. Then the APU was mostly completed, giving
the emulator proper sound. Somewhere along the line, it was determined
that the C++ usage in the code was very poorly done and was slowing the
program down, so I converted it to plain C and named the program
"Nintendulator".
The eventual goal of Nintendulator is to be *the* most accurate NES
emulator, right down to the hardware quirks. In the meanwhile, it can
certainly be used to test NES code with confidence that if it works
properly in Nintendulator, it will probably work properly on the real
hardware as well.
What's New in Version 0.970
Released
- - Overall:
- Updated all code to use C++ with namespaces, significantly reducing
- code size.
- Added various debugging statements.
- Various code cleanup and bugfixes.
- - APU:
- Added code to properly emulate race conditions when writing to APU
- registers at specific times.
- Add noise playback frequencies for PAL emulation.
- Fixed DPCM playback to properly emulate cycle stealing from DMA.
- Rewrote APU frame timer to properly handle clock jitter.
- - AVI:
- Major cleanup of AVI capture code.
- Optimized AVI code to cache video frame information between frames.
- - Controllers:
- Rewrote code for all controllers to use proper C++ classes.
- Fix data/movie storage for several controllers to allocate the
- correct amount of memory.
- Changed Zapper code to determine "hit" based on overall brightness
- of the target region.
- Added support for Vs. Unisystem Zapper controller.
- Added ability to configure POV hats, either as 2 overlapping axes or
- as 8 buttons.
- Updated configuration code to query DirectInput for key/axis/button
- names rather than hardcoding them.
- Fix mouse input code to disregard axes that are not present.
- - Debugger:
- Completely rewrote debugger. New features include:
- - Edit CPU registers
- - Toggle individual IRQ sources
- - Browse CPU, PPU, Sprite, and Palette memory
- - Add breakpoints based on execution address, operand address (read
- or write), specific opcodes, or interrupts.
- - View detailed properties of nametable entries, sprites, pattern
- table tiles, and palette entries.
- - Game Genie:
- Fixed several bugs which could cause entered codes to not work.
- - Graphics:
- Added support for fullscreen display.
- Added option to add scanlines for 2x Windowed and Fullscreen modes.
- Configuring a Zapper controller now disables frameskip.
- Added RGB palettes for Vs. Unisystem PPUs 0002, 0003, and 0004.
- Rewrote NTSC palette generation code to correctly apply color
- emphasis.
- Adjusted color emphasis coefficients used when loading external
- palettes.
- After adjusting palette and saving changes, immediately redraw the
- screen using the updated colors.
- Add option to preview appearance of palette using various color
- emphasis modes.
- - Mapper Interface:
- Updated Mapper Interface version from 3.6 to 3.7.
- Updated ROM Information structure to support iNES 2.0 format fields.
- - Movies:
- Added a dialog for movie recording, allowing a description to be
- added (Unicode version only) for the movie being recorded.
- Added a dialog for movie playback, allowing the movie's properties
- to be previewed before movie playback actually begins.
- Fix problems with playing back movies of games whose mappers
- maintain state information between resets.
- - Main Program:
- Savestates, movies, SRAM, and debug memory dumps are now stored
- within the currently logged in user's Application Data folder
- rather than within the program's own directory.
- Nintendulator will now attempt to prevent any configured screensaver
- from activating while emulation is active.
- Builtin iNES header editor now detects and automatically cleans ROM
- headers bearing the "DiskDude!" signature.
- Fixed several bugs with configuration storage.
- Allow keyboard shortcuts to work properly with various dialogs.
- - PPU:
- Enabled per-cycle emulation of sprite evaluation.
- Improve emulation of PPU I/O registers to properly handle several
- race conditions.
- - Savestates:
- Rewrote savestate code for Controlelrs to correctly store all data,
- as well as data lengths for each individual port.
- Fixed case where savestates from a previous version might not be
- loaded correctly.
- - Mappers:
- Fixed some MMC5 emulation errors.
- Reduced VS Unisystem coin insert delay.
- Fixed several bugs in NSF player BIOS.
- Enabled 8KB PRG RAM on iNES mapper 0.
- Fixed several issues with iNES mappers 22 and 23.
- Added support for iNES mappers 37 and 38.
- Rewrote IRQ logic for iNES mapper 91.
- Fixed support for NES-SUROM board.
- Added support for NES-SXROM board.
- Fixed savestate data for several UNL boards.
- Fix Vs. Unisystem mappers to force 4-screen VRAM.