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.
Emulators For:
Windows/DOS
Unix/Linux
BeOS
Macintosh
Amiga
Consoles
Java
Palm OS
Pocket PC
Digital Cameras
Digital Phones
Calculators
QNX
Windows Mobile Smartphone
Microsoft Silverlight
Other Releases
Extenders
Frontends
ROMs (Public Domain)
Hacks
Cheats
Movies
Savestates
Music
Technical Documents
Translations
Utilities:
General
Auditing
Cheating
Development
Game Modification
Music Playback / Manipulation
Plugins
Windows/DOS
Unix/Linux
BeOS
Macintosh
Amiga
Consoles
Java
Palm OS
Pocket PC
Digital Cameras
Digital Phones
Calculators
QNX
Windows Mobile Smartphone
Microsoft Silverlight
Other Releases
Extenders
Frontends
ROMs (Public Domain)
Hacks
Cheats
Movies
Savestates
Music
Technical Documents
Translations
Utilities:
General
Auditing
Cheating
Development
Game Modification
Music Playback / Manipulation
Plugins