Subject: CVS commit: pkgsrc/emulators/jgenesis
From: pin
Date: 2024-10-13 22:25:40
Message id: 20241013202541.176D7FC7E@cvs.NetBSD.org

Log Message:
emulators/jgenesis: update to 0.8.0

Highlights
 - Added support for 32X emulation (with a caveat regarding performance)
 - Significant audio quality improvements for Genesis / Mega Drive and SNES
 - Support for loading directly from .zip and .7z files
 - Lots of Genesis / Mega Drive bugfixes

32X Notes
 - All released 32X games plus Doom 32X Resurrection should be playable except \ 
for the 6 FMV games that require the Sega CD 32X combo
     - Doom 32X Resurrection features that require Sega CD do not currently work \ 
(CD-DA music, offloading some audio processing to the Sega CD 68000)
 - SH-2 CPU cache and basic SH-2 memory access timings are emulated, so overall \ 
SH-2 speed should be moderately accurate (though still faster than actual \ 
hardware in some cases)
 - SH-2 emulation is currently not optimized well - full-speed 32X emulation \ 
requires a CPU with decent single-core performance, and fast-forward speed will \ 
be very limited
     - For a comparison point, the Steam Deck CPU barely runs 32X at full speed \ 
from my testing
     - This will likely improve in a future release - the current implementation \ 
is pure interpreter because that was easiest to implement and it (surprisingly) \ 
still runs at full speed with a fast
enough host CPU

New Features
 - Added support for loading directly from .zip and .7z compressed archives for \ 
every console except Sega CD (#91)
     - Archives containing multiple images are only partially supported; in this \ 
case the emulator will always load the first file with a recognized file \ 
extension
 - (SNES) Added an audio enhancement option for cubic Hermite interpolation \ 
between decoded ADPCM samples, which usually makes the audio sound sharper and \ 
less muffled
     - The difference is most noticeable in games that use low sample rate \ 
audio, such as the Donkey Kong Country trilogy
     - This is off by default because it pretty radically changes the sound in \ 
some games
 - (Genesis) Added an option to have no controller plugged into one or both of \ 
the controller ports, for games that behave differently based on the presence or \ 
absence of a controller (#113)
 - (NES) Added support for the UNROM 512 mapper (iNES mapper 30), a homebrew \ 
mapper used by a number of games including Black Box Challenge and Battle Kid 2 \ 
(#73 / #86)
     - This mapper unusually supports flash memory mapped as PRG \ 
"ROM"; for the games that have this (e.g. Black Box Challenge), it's \ 
emulated by persisting the entire current contents of PRG ROM to
the save file whenever the game modifies itself
 - (GB) Added partial support for the Hudson HuC-3 mapper, used by Robopon and a \ 
few Japan-only games (#89)
     - "Partial" because the builtin speaker, the IR sensor, and parts \ 
of the event/alarm functionality are not emulated
 - GUI: Added a new "Open Using" menu option to open a file using a \ 
specific emulator core, rather than always choosing the core based on file \ 
extension (#121)
 - GUI: Added an option to explicitly set the UI theme to light or dark rather \ 
than always using the system default

Improvements
 - (Genesis) YM2612 DAC crossover distortion (aka the "ladder effect") \ 
is now emulated, which significantly improves music accuracy in a number of \ 
games; this is extremely noticeable in Streets of
Rage, Streets of Rage 2, and After Burner II, among others
     - There is also a new option to disable ladder effect emulation, since the \ 
effect was less pronounced on later console models (and also because I think \ 
it's neat to hear how it affects the sound
by toggling a checkbox)
 - (SMS/GG/Genesis) Replaced the PSG and YM2612 low-pass filters with much more \ 
aggressive ones; this should generally improve audio quality, and in some cases \ 
will remove erroneous buzzing/popping
noises that were present before (e.g. in The Adventures of Batman & Robin) (#108)
 - Improved audio output behavior for all emulator backends, which should \ 
significantly reduce the likelihood of audio pops caused by audio buffer \ 
underflow
 - GUI: Added help text to most options menus
 - GUI: Improved performance when the main list table is large

Genesis / Mega Drive Fixes
 - Fixed the PSG's noise channel not oscillating when the period is set to 0 \ 
(which should behave the same as period of 1); this fixes missing high-frequency \ 
noise in Knuckles' Chaotix among other
games
 - Fixed a degenerate case for performance when a game repeatedly writes the \ 
same value to specific VDP registers during active display, as After Burner \ 
Complete does
 - Fixed some 68000 CPU bugs discovered while working on 32X support
     - Implemented line 1010/1111 exception handling for when the 68000 executes \ 
an illegal opcode where the highest 4 bits are 1010 or 1111; Zaxxon's Motherbase \ 
2000 depends on this to boot
     - Fixed divide by zero exception handling pushing the wrong PC value onto \ 
the stack; After Burner Complete frequently divides by zero and depends on \ 
correctly handling the exception
     - Fixed the DIVS instruction finishing way too quickly in some cases where \ 
the division overflows a signed 16-bit result but the CPU doesn't detect the \ 
overflow early
 - Fixed an off-by-one error in determining whether to set the sprite overflow \ 
flag in the VDP status register; this fixes flickering sprite graphics in Alex \ 
Kidd in the Enchanted Castle (#125)
     - This was a regression introduced in v0.6.1 as part of the changes to get \ 
Overdrive 2's textured cube effect working
 - Adjusted how writes to the controller CTRL registers ($A10009 / $A1000B) \ 
affect the controller's TH line; this fixes controls not working properly in \ 
Trouble Shooter (#110)
 - Made it possible for games to read the VINT flag in the VDP status register \ 
as 1 slightly before the 68000 INT6 interrupt is raised; this fixes Tyrants: \ 
Fight Through Time and Ex-Mutants failing
to boot (#127)
 - Implemented undocumented behavior regarding how the Z80 BIT instruction sets \ 
the S and P/V flags; this fixes missing audio in Ex-Mutants, which relies on \ 
this behavior in its audio driver code
 - Implemented approximate emulation of memory refresh delay
     - This is emulated by simply stalling the 68000 for 2 out of every 128 mclk \ 
cycles, unless it executes a very long instruction that doesn't access the bus \ 
mid-instruction (e.g. multiplication or
division)
     - Memory refresh delay is not emulated in 32X mode because it seemed to \ 
break audio synchronization between the Genesis and 32X hardware in some games
 - Added SRAM mappings for several games that have SRAM in the cartridge but \ 
don't declare it in the cartridge header: NHL 96, Might and Magic, and Might and \ 
Magic III (#107 / #116 / #117)
 - Little-endian ROM images are now detected and byteswapped on load; this along \ 
with a custom ROM address mapping fixes Triple Play failing to boot (#112)
 - The emulator will now recognize the unconventionial region string \ 
"EUROPE" as meaning that the game only supports PAL/EU; this fixes \ 
Another World incorrectly defaulting to NTSC/US mode instead of
PAL/EU (#122)
 - Unused bits in the Z80 BUSACK register ($A11100) now read approximate open \ 
bus instead of 0; this fixes Danny Sullivan's Indy Heat failing to boot (#120)
 - Improved VDP DMA timing; this fixes corrupted graphics in OutRunners (#118)
 - The vertical interrupt is now delayed by one 68000 instruction if a game \ 
enables vertical interrupts while a vertical interrupt is pending; this fixes \ 
Sesame Street: Counting Cafe failing to boot
(#119)
 - The Z80 BUSACK line now changes immediately in response to bus arbiter \ 
register writes instead of waiting for the next Z80 instruction time slot; this \ 
fixes the Arkagis Revolution demo failing to
boot (#123)
 - The emulator will now enable the bank-switching Super Street Fighter 2 mapper \ 
if the cartridge header declares the system as "SEGA DOA" in addition \ 
to the standard value of "SEGA SSF"; this fixes
the Demons of Asteborg demo not working properly (#115)

Other Fixes
 - Fixed save state slots not working properly if the ROM filename contains \ 
multiple dots; before this fix, only one slot would ever be used
 - (Sega CD) When a game issues a CDD command while the drive is playing, the \ 
drive now continues to read one more sector before it changes behavior in \ 
response to the new command; this fixes Radical
Rex crashing during the intro (#100)
 - (Sega CD) Writes to PRG RAM by the main CPU and the Z80 are now blocked \ 
unless the sub CPU is removed from the bus; this fixes Dungeon Explorer from \ 
crashing after the title screen (#104)
 - (Sega CD) The sub CPU is now halted if it accesses word RAM in 2M mode while \ 
word RAM is owned by the main CPU, and it remains halted until the main CPU \ 
transfers ownership back to the sub CPU.
This fixes glitched graphics in Marko's Magic Football (#101)
 - (Sega CD) Various fixes to CDC register and DMA behavior; with this plus all \ 
of the above fixes, the emulator now fully passes the mcd-verificator test suite \ 
(#105)
 - (NES) The UxROM mapper code (iNES mapper 2) no longer assumes that the \ 
cartridge has no PRG RAM; this fixes Alwa's Awakening: The 8-Bit Edition failing \ 
to boot (#93)
 - (SNES) Adjusted timing of PPU line rendering to occur 4 mclk cycles later; \ 
this fixes Lemmings having a flickering line at the top of the screen during \ 
gameplay
     - This worked correctly prior to v0.7.2 - it was broken by the CPU timing \ 
adjustment that fixed Rendering Ranger R2 from constantly freezing
 - (GB) Fixed the window X condition incorrectly being able to trigger when \ 
WX=255 and fine X scrolling is used (SCX % 8 != 0); this fixes corrupted \ 
graphics in Pocket Family GB 2
 - Fixed the emulator crashing if prescale factor is set so high that the \ 
upscaled frame size exceeds 8192x8192 in either dimension

Files:
RevisionActionfile
1.4modifypkgsrc/emulators/jgenesis/Makefile
1.4modifypkgsrc/emulators/jgenesis/cargo-depends.mk
1.4modifypkgsrc/emulators/jgenesis/distinfo
1.3addpkgsrc/emulators/jgenesis/patches/patch-Cargo.toml
1.3addpkgsrc/emulators/jgenesis/patches/patch-frontend_jgenesis-renderer_Cargo.toml
1.3removepkgsrc/emulators/jgenesis/patches/patch-frontend_jgenesis-gui_Cargo.toml