Skip to content

v0.6.0

Compare
Choose a tag to compare
@jsgroth jsgroth released this 05 Jan 22:12
· 216 commits to master since this release

tl;dr: Added an NES core and fixed a bunch of Genesis VDP bugs (Titan Overdrive 1.1 demo now works)

Features

  • (NES) Added a new backend core for the Nintendo Entertainment System (NES) / Famicom, forked/merged from my standalone NES emulator
    • Emulation should be very accurate aside from some APU DMC DMA quirks that aren't emulated (which no games depend on as far as I know)
    • Supports the most commonly used mappers (NROM, common NROM variants, MMC1, MMC3) as well as some less commonly used mappers (MMC2/4/5/6, Konami VRC2/4/6/7, a number of Namco and Bandai mappers, Sunsoft 5A/5B/FME-7, and a few others)
    • This fork adds a nametable/sprite/palette viewer, although since it updates per-frame it won't work completely correctly with games that make mid-frame rendering changes (fairly common in later NES titles, e.g. Super Mario Bros. 3 and Kirby's Adventure which both use MMC3 scanline interrupts to do a mid-frame CHR ROM bank switch from the background tile bank to the status bar tile bank)
  • (All) Added a new menu button to the GUI to open the Memory Viewer window, in addition to the previously existing hotkey
  • (All) Added a filter-by-title box to the GUI's main panel
  • (All) Added a per-console filter setting to the GUI to individually toggle which of the 6 supported consoles show up in the ROM list

Fixes/Improvements

  • (Genesis) Fixed a bunch of VDP bugs discovered while testing the Titan Overdrive 1.1 demo
    • Fixed a PAL-specific bug where the VBlank flag in the VDP status register was incorrectly reading 1 during part of the last scanline before active display; this fixes the demo from running way too fast at the start and then crashing
    • Fixed the VDP FIFO write delay implementation being pretty wildly incorrect; this fixes the spinning "no nintendo inside" board animation and the 512-color screen
    • Fixed the VDP not ignoring the lowest bit of register 5 (sprite attribute table address) in H40 mode; this fixes garbage sprites displaying over the scrolling 3D background screen
    • Fixed V interrupt timing to be closer to actual hardware; this fixes broken effects on the "we <3 evoke" screen and one of the later screens
      • VINT was previously delayed by ~100 mclk cycles (12.5 pixels in H40 mode / 10 pixels in H32 mode) compared to actual hardware because this fixed music tempo bugs in Earthworm Jim, but it seems I fixed whatever the actual cause was because those bugs did not reappear after removing the delay
    • Fixed a bug where changes to nametable address registers (2/3/4) during HBlank were taking effect after the next rendered scanline instead of taking effect immediately; this fixes jittery lines on the spinning 3D cube screen
      • This also fixes some graphical glitches in The Adventures of Batman & Robin which similarly changes nametable addresses during HBlank and expects the new addresses to take effect on the very next scanline
    • Implemented (somewhat) proper handling for reducing the number of sprites scanned and the number of sprite pixels displayed when display is disabled during part of HBlank; this removes the "your emulator suxx" text from the 512-color screen
      • This also enabled removing a sprite masking hack to fix some graphical glitches in Mickey Mania's 3D stages, which do something very similar
  • (Genesis) Fixed the VDP's control port write toggle not getting reset if a game attempts to write to the VDP data port while it is in read mode; this fixes Dynamite Headdy sometimes displaying extremely corrupted graphics during the intro depending on when exactly Start was pressed
  • (All) Fixed an annoying GUI issue where, if you changed input configuration while an emulator was running, the new configuration would not take effect until you moved the mouse over the main GUI window