Nintendulator 0.950
posted in Emulator Release by hcs on Mar 18th, 2005In the author's words: "After trying for perfection for too long (and never reaching it), I've decided to formally release Nintendulator 0.950." What's new in the long-awaited release of this exceptionally accurate NES emulator:
- APU
- Fixed behaviour of square channel pitch bends (silences properly in Mega Man games, Codemasters intros, etc.)
- Fixed behaviour pf square/noise channel volume envelope
- Fixed behaviour of triangle channel linear counter
- Rewrote DPCM IRQ code to work correctly
- Adjusted DPCM sample fetch to take up to 4 cycles
- Reduced PCM volume by 25%
- Reading $4015 now correctly acknowledges a DPCM IRQ
- Fixed behaviour of frame counter when in 5-stage mode
- Disabled frame IRQs on reset (fixes some games)
- Added full APU state information to savestate files
- Added simple linear downsampling filter to audio playback (improves noise channel)
- Audio output is now clamped to prevent clipping
- Improved audio playback code somewhat, should react more smoothly to brief system slowdowns
- Controllers
- Added SNES controller (compatible with NES controller in most games, can be used with homebrew games designed for it)
- Added alternate Famicom keyboard (used in "Study & Game 32-in-1" multicart)
- Added Family Trainer (similar to Power Pad)
- Added Oeka Kids drawing tablet
- Individual controllers are now updated exactly once per frame, to ensure consistent results
- Redesigned controller configuration, now prompts to press a button/key/axis instead of having to select it from a list
- Made controller configuration much more flexible, allowing joypad axes to be used for ANY controller button
- Controllers are now kept acquired at all times, allowing players to control the game while the emulator is not selected.
- CPU
- Removed 'B' (breakpoint) flag from processor status
- Set 'I' flag upon receiving NMI and RESET
- Various optimizations to individual instructions
- Updated sprite DMA to take 513 cycles instead of 512
- Fixed minor bugs in NMI and IRQ handling
- Implemented most of the 'useful' invalid opcodes
- Debugger
- Changed window positions to be relative to each other, rather than fixed
- Debugger now forces window size to at least 2X size, removed half-size nametable viewer.
- Fixed crash bug with placing breakpoint on top instruction line
- Scrolling through I/O registers in the disassembly window no longer reads from them (since it would alter their states)
- No longer causes graphical glitches under Windows 9x
- Added bank status for CPU banks 6/7 and PPU nametables
- Graphics
- Auto-Frameskip now updates the selection in the menu
- NTSC palette is now generated at runtime
- Added the Playchoice-10 RGB palette as well as its own unique way of applying colour emphasis
- Added a palette configuration dialog, allowing users to select between a parameterized NTSC palette, a fixed PAL palette, the Playchoice-10 RGB palette, or one loaded from an external file (.PAL format, as supported by other emulators)
- Separate palette settings are stored for both NTSC and PAL emulation, though NTSC only uses one set of parameters
- Miscellaneous fixes
- Mappers
- Redesigned mapper interface to provide additional functionality
- PPU I/O handlers
- Allow setting PPU open bus
- Allow mapping nametables in arbitrary PPU regions
- Allow mapping custom data into the CPU and PPU
- Removed SRAM save/load handling
- Changed IRQ to select the state (high/low) instead of sending a pulse
- Replaced Mapper menu with a single callback to let the mapper open its own configuration dialog
- Removed MMC5 Attribute Cache update operation, as Nintendulator does not use an attribute cache
- Moved ROM-specific information into a separate 'ROMInfo' structure, passed to the DLL when a game is loaded. Added detailed information for all supported file types. ROMs are now loaded using this information, rather than by only specifying a mapper number or board name
- Replaced mapper-specific Init/Unload functions with Load, Reset, and Unload operations.
- Added a global 'UnloadMapper' operation
- Redesigned mapper interface to provide additional functionality
- NES
- Moved emulation to a thread separate from UI handling
- Failure to open a ROM now gives a reason why it failed.
- Added "Auto-Run on Load" option
- Rewrote file parsing code for all supported ROM types
- Added disk writing support for FDS games
- NSF player 'control' code now resides in the mapper DLL rather than in the emulator itself
- NSF playback speed is now adjusted to the actual NTSC/PAL video rates rather than exactly 60Hz/50Hz.
- Switching from PAL to NTSC no longer causes the program to lock
- Various optimizations to Game Genie support
- Allow compile-time disabling of debugger for improved speed
- Changed default stretch to 2X
- Added the ability to slow down emulation by a particular amount
- Added the ability to pause emulation and advance one frame at a time
- Overall
- Allow specifying a ROM filename on the command-line
- Allow opening a ROM by dragging it onto the program window
- Opening a menu, resizing the window, or opening the Load File dialog no longer results in the last sound segment playing over and over
- Added a status window, where various messages are reported
- Paths for ROMs, movies, palettes, etc. are saved between sessions
- Added an iNES header editor
- PPU
- Added I/O handlers for all PPU memory accesses
- Made all PPU memory accesses synchronous with PPU emulation
- Fixed palette access functionality
- Attempting to read from SPR-RAM while rendering now simulates what a real PPU would return, though it assumes no sprites are drawn
- Various timing fixes and optimizations
- Savestates
- Created a new [custom] savestate format; SNSS had too many problems and did not store certain vital pieces of information
- CPU and PPU state information are stored in separate blocks CPUS and PPUS instead of a single block BASR
- Added numerous fields to CPU and PPU data stored
- Dropped mirroring status from PPU block - the mapper state stores this
- CHR-RAM and PRG-RAM no longer store null data at the end, saving space
- Dropped "SRAM Writable" field - the mapper state stores this
- Mapper data no longer stores PRG/CHR banks separately - the custom data field stores this in a manner appropriate to the mapper
- Custom mapper state data no longer has a size limitation
- Added storage for Game Genie status and FDS disk write information
- When selecting a savestate, the titlebar now also indicates whether a savestate is present in the slot
- Created a new [custom] savestate format; SNSS had too many problems and did not store certain vital pieces of information
- Movie support
- Proper movie support has been added with the following features:
- Record from reset OR from where you are currently playing
- Use (almost) any controllers you want
- Save your state while recording a movie, then load the state to 'rewind' back to that point
- Watch an existing movie, then save and load a savestate to resume recording at that point
- Proper movie support has been added with the following features:
- AVI output
- With a sufficiently fast processor, you can create an AVI of your gameplay.
- Supports video compression using any codecs available.
- Currently does not support audio compression.