签到天数: 1701 天 [LV.Master]伴坛终老
|
Summary: Multiple save state slots, NES Zapper support, and a laundry list of bugfixes (mostly for Game Boy / Game Boy Color)
Save states from earlier versions are not compatible, in-game saves will still work
Features
(NES) Added support for the Zapper light gun used by Duck Hunt, Wild Gunman, and some other games (#25)
The emulator now supports up to 10 save state slots per game (#22)
There are new next/previous slot hotkeys to select a slot for quick save/load via hotkey, and there is a new sub-menu in the GUI to save/load any slot
The CLI now reads the same jgenesis-config.toml config file as the GUI (#24)
It reads from the same path by default, and there is also an optional --config arg to override the config file location
Most of the previously-existing command line args are still present, but they now function as temporary config overrides rather than being the only way to configure the CLI
Improvements
(Master System / Game Gear) Cartridge RAM is now assumed to be battery-backed if a game ever accesses it, after which it will be persisted to disk any time it's modified
There was already a "database" of games that have battery-backed RAM, but that solution was checksum-based and thus did not work for patched games (e.g. fan translations)
Replaced the egui_wgpu_backend library with the offical egui-wgpu integration; this fixes various rendering issues in the Memory Viewer window, most notably the aliased text
Game Boy [Color] Fixes
The serial port registers and interrupt are now properly emulated; this fixes a number of games from failing to boot (e.g. Razor Freestyle Scooter, Initial D Gaiden, LEGO Racers) or having game-breaking bugs (e.g. Alleyway, Stargate) (#27 / #28 / #29 / #45)
Peripherals (e.g. link cable) are not currently emulated, but these games all depend on how the serial port behaves when no device is connected
The joypad interrupt is now properly emulated; this fixes controls not working in The Lawnmower Man (#46)
Disabling the LCD now clears the screen after about a frame's worth of cycles instead of clearing it immediately; this fixes screen flashing during movies in A Bug's Life (#26)
Fixed the PPU blocking CPU access to VRAM and CGB palettes slightly too early when rendering begins; this fixes flickering colors in LEGO Racers (#29)
Added an exception to the DMG STAT write/interrupt bug where the spurious interrupt will no longer trigger if the HBlank STAT interrupt was previously enabled and the STAT write occurred during OAM scan; this fixes Initial D Gaiden from crashing upon starting a race (#28)
I'm not 100% confident this is accurate to actual hardware, but it doesn't break the two games that depend on this hardware bug (Zerd no Densetsu and Road Rash)
Fixed the DMG STAT bug incorrectly being able to trigger while the LCD is disabled; this fixes the splash screen not showing in Star Trek: 25th Anniversary
Implemented (part of) an obscure DMG-only window behavior where a single glitched pixel with color BGP[0] is drawn at the start of the line when the window is disabled, the window has previously rendered pixels in the current frame, and WX + SCX are aligned in a specific way; this fixes a minor visual glitch on the title screen of Star Trek: 25th Anniversary
Fixed incorrect logic in the window Y triggered check; this fixes corrupted graphics in Warriors of Might and Magic and Zen: Intergalactic Ninja (#30 / #40)
The previous logic was simply checking if WY==line at the start of a line, ignoring whether the window was enabled in LCDC. The check is now (WY==line AND window_enabled) and it's checked at the start and end of every line (checking only at the start of the line breaks the fairylake test ROM)
APU wavetable RAM is now pre-populated with values approximate to actual hardware at power-on; this fixes missing sound effects / music in Altered Space, R-Type, and Spot (#32 / #49)
In DMG mode, VRAM is now pre-populated with the Nintendo logo (copied out of the cartridge header) and a trademark symbol; this fixes the intro animations in X, Altered Space, and probably other games
HDMAs initiated during HBlank now begin immediately instead of waiting until the start of HBlank on the next line; this fixes corrupted graphics in The Little Mermaid II: Pinball Frenzy and 3-D Ultra Pinball: Thrillride (#35 / #58)
HBlank STAT interrupts no longer block LY=LYC STAT interrupts when both are enabled; this fixes corrupted graphics in Ken Griffey Jr.'s Slugfest (#37)
Fixed multiple bugs around the LY=LYC bit in the STAT register when LYC=0; together with the above two fixes, this fixes Worms Armageddon from crashing upon starting a new game (#44)
WRAM contents are now mostly randomized at power-on; this fixes the homebrew Minesweeper for Windows from freezing upon starting a new game (#31)
Implemented the obscure behavior of reading wavetable RAM while the wave channel is playing; this gets the emulator to pass the Demotronic demo's emulator detection (#34)
Timing is not cycle-accurate; the emulator still fails the relevant tests in both dmg_sound.gb and cgb_sound.gb
Improved timing around mid-scanline SCY/SCX writes; this fixes various effects in the Demotronic demo (#34)
Fixed timing of the LY=LYC STAT interrupt when LYC=0; combined with the above fix, this fixes the "gin & tonic trick" in the Mental Respirator demo (#41)
Fixed the CPU seeing mode 0->2 transitions in the STAT register slightly too early; this fixes the Space Waste demo from crashing at the start of the first effect (#48)
The (officially) undocumented PCM12 and PCM34 registers are now emulated; this fixes the GBVisualizer demo (#36)
In CGB mode, the first 67 bytes of HRAM are now pre-populated in the same way that the CGB boot ROM would populate them; this fixes GBVisualizer from playing music immediately instead of waiting for 2 seconds like it's supposed to (#36)
Non-GB Fixes
(Genesis) YM2612 channel L/R panning flags are now initialized to 1 instead of 0; this fixes missing audio channels in After Burner II as well as the missing low-volume ambient noise during the first ~45 seconds of the Overdrive 2 demo
(Genesis) Fixed the 3-button vs. 6-button controller setting being applied only after making a config change, not at game boot
(NES) Fixed a bug in parsing ROM sizes out of non-NES 2.0 ROM headers that caused certain test ROMs to crash the emulator due to having nonsense in the later iNES header bytes
(NES) Mapper bus conflicts are now emulated for CNROM (iNES mapper 3); this fixes corrupted graphics in Cybernoid (#79)
(SNES) Adjusted how INIDISP brightness affects colors, which fixes the image being slightly too bright when brightness is not min or max
(SNES) Added rudimentary support for mid-scanline brightness changes; this fixes the missing plane shadows in Air Strike Patrol
(SNES) Fixed how mid-scanline writes to BG scroll registers are handled; this fixes glitchy lines on the title screen of NHL '94 and fixes the glitchy "Good Luck" animation in Air Strike Patrol (#68)
(SNES) Fixed rendering when 512x448 interlaced mode is enabled mid-frame; this fixes briefing screens in Air Strike Patrol not rendering correctly
(SNES) Adjusted timings of 65816 CPU reads/writes so that reads occur at the beginning of the CPU cycle while writes occur at the end; this fixes Rendering Ranger R2 from almost always freezing during screen transitions
This game's CPU/APU communication code is extraordinarily timing-sensitive
(SNES) Improved handling of cartridges with non-power-of-two ROM sizes (which in actual hardware generally contained multiple ROM chips of different sizes)
(SNES) Super FX GSU memory accesses now ignore the highest bank bit; this fixes the VOXEL.smc Super FX demo from crashing (#62)
The emulator also now detects this demo and gives it 64KB of Super FX RAM instead of using the default 32KB, which fixes the demo rendering garbage after starting
(SNES) Fixed the 34 sprite-tiles-per-line limit not being applied correctly if the 34th tile is partway through a sprite that is more than 1 tile wide
(SNES) Fixed OAM priority rotation incorrectly rotating using bits 1-7 of OAM address instead of bits 2-8
(SNES) Implemented the "interlaced smaller OBJs" PPU flag (SETINI bit 1); together with the above fix, this fixes a broken effect in the SNES test cartridge's PPU test (stars at the end of the Mode 0 test)
|
|