Highlights
MMC5 mapper support (Castlevania III and others) plus a batch of PPU, APU, and mapper accuracy fixes.
New mappers
- Mapper 5 (MMC5) — Castlevania III, Uncharted Waters, Laser Invasion, and other late-era titles. Dual CHR bank sets, ExRAM modes, split-screen nametable, direct-CHR sprite 0 hit.
Hardware accuracy
PPU
- Sprite evaluation rewritten for hardware-accurate OAM scan.
- Sprite 0 hit pre-computed for the next scanline for dot-accurate timing.
- Color emphasis bits (NTSC) mapped correctly.
- Grayscale mask fixed (
0x20→0x30). - General rendering pipeline and register accuracy improvements.
APU
- Frame counter IRQ timing fixed for hardware accuracy.
- Square sweep negate and overflow mute threshold corrected.
CPU
- NMI handler now sets the I flag.
Mappers
- MMC3: register writes decoded via mirrored address bits.
- Mapper 180: initial PRG bank at
$C000corrected.
Controller
- Strobe now models APU-clock-gated OUT0 updates.
Save states
CPU dataBus and controller state are now persisted. Save states from 2.0.x still load, but dataBus will be zero until the next bus operation.
Packaging
main/requireexports now point to the UMD bundle, fixing Node/CommonJS consumers.- Game Genie and controller JSON serialization added to type declarations.