Nintendulator 0.950

posted in Emulator Release by hcs on Mar 18th, 2005

In 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
  • 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
  • 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
  • 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.
Whoa. Get Nintendulator on the NES Emulators page