Subject: CVS commit: pkgsrc/emulators/jgenesis
From: pin
Date: 2025-04-26 12:22:32
Message id: 20250426102233.0F2E9FBE3@cvs.NetBSD.org

Log Message:
emulators/jgenesis: update to 0.9.0

Notable changes since the last release (v0.8.3):

    Revamped low-pass filter options for Genesis / Sega CD / 32X that should be \ 
significantly more accurate to actual hardware than the v0.8.3 settings
    Improved audio quality for all emulated systems via much higher-quality \ 
audio resampling
    A rather large number of bugfixes for Genesis, Sega CD, 32X, SMS, Game Gear, \ 
SNES, Game Boy [Color]
    Major bugfixes for Linux AppImage builds in Wayland
    Save state files are now internally compressed using zstd, which should \ 
reduce save state file size by 70-80% in most cases
    Basic CPU + CD-ROM drive overclocking options for Sega CD, which have fairly \ 
low compatibility but do help in some games

Full changelog below.
New Features

    (Genesis / Sega CD / 32X) Replaced the low-pass filtering settings added in \ 
v0.8.3 with a new set of options that should be more accurate to actual hardware
        New option to apply a first-order 3.39 KHz low-pass filter to Genesis \ 
audio output; this is ON by default (biggest change from previous default \ 
settings)
        New option to apply a second-order 7.97 KHz low-pass filter to Sega CD \ 
PCM audio output; this is ON by default
        New options to individually configure whether the Genesis low-pass \ 
filter is applied to Sega CD and 32X audio output; these are all OFF by default
    (Genesis / SNES) Added a new video setting to disable deinterlacing in the \ 
handful of games that use interlaced display modes (e.g. Sonic the Hedgehog 2 in \ 
2P Vs. mode, Ys III (Genesis) with the in-game "Int Mode" option \ 
enabled, Air Strike Patrol in mission briefing screens)
        Deinterlacing enabled matches the behavior in previous versions: \ 
normal-resolution interlaced modes display the same as progressive mode, and \ 
high-res interlaced modes make the graphics processor render all 448/480 lines \ 
every frame
    (Sega CD) Added an option to overclock the sub CPU by decreasing the master \ 
clock divider (#138)
    (Sega CD) Added an option to increase the disc drive speed when reading data \ 
tracks (#138)
        This has low compatibility but can shorten loading times in some games. \ 
Compatibility is slightly higher when the sub CPU is overclocked
    (Sega CD) Added an additional PCM chip interpolation option for 6-point \ 
cubic Hermite interpolation, which in some cases produces a slightly cleaner \ 
sound than 4-point cubic Hermite (the existing setting)
    Added a new hotkey to quickly toggle whether overclocking settings are \ 
enabled, for the systems that support overclocking (this includes Sega CD's new \ 
drive speed setting)
        This is mainly useful for Sega CD, where increasing the drive speed can \ 
shorten loading times during gameplay but almost always breaks FMVs and animated \ 
cutscenes

Improvements

    Audio resampling code has been rewritten to use the windowed sinc \ 
interpolation algorithm, which is much higher quality than the previous \ 
resampling implementation at a relatively low performance cost (for most \ 
emulated systems)
        Windowed sinc interpolation can be very performance-intensive for NES \ 
and GB/GBC audio resampling, so these two systems have a new audio setting to \ 
choose between windowed sinc interpolation and the old resampling algorithm \ 
(low-pass filter followed by nearest neighbor interpolation)
    (Genesis) Slightly improved performance by optimizing VDP rendering and tile \ 
fetching code
    (Genesis) Frontends now recognize .gen and .smd as file extensions for \ 
Genesis / Mega Drive ROM images (#149)
        This includes attempting to auto-detect when a ROM image is interleaved \ 
(common for .smd files), and deinterleaving it during load
    (SMS) The "crop vertical borders" video setting now defaults to \ 
enabled instead of disabled; unlike the left border, the vertical borders will \ 
only ever show the current backdrop color
    (SMS) The SMS model setting now defaults to SMS1, which emulates a VDP \ 
hardware quirk that is required for the Japanese version of Ys to render \ 
correctly (#182)
    (SMS / Game Gear) Reduced log level of a warning message that caused \ 
excessively verbose log output in Virtua Fighter Mini (#199)
    (SNES) In games that use the SA-1 coprocessor, the SA-1 CPU now gets a wait \ 
cycle every time it accesses SA-1 BW-RAM, similar to actual hardware
        The SA-1 CPU still runs faster than actual hardware in some cases \ 
because bus conflict wait cycles are not emulated
    GUI: When opening a game that requires a BIOS ROM or firmware ROM (e.g. any \ 
Sega CD game), if the BIOS/firmware ROM path is not configured, the error window \ 
now contains a button to configure the appropriate ROM path and immediately \ 
launch the game
    CLI: If no config file exists, the CLI will now attempt to write out the \ 
default config to the config path so that it can be edited manually if desired
    Save state files are now internally compressed using zstd which should \ 
reduce save state file size by at least 50%, often by 70-80%
    Frontends should now correctly handle files with uppercase file extensions

Multi-System Fixes

    Fixed a performance bug in the audio resampling code that could have caused \ 
intermittent extremely poor performance due to performing arithmetic on \ 
subnormal floating-point numbers, which can be up to 100 times slower than \ 
normal floating-point arithmetic on some CPUs (#135)
    Linux: AppImage builds now exclude all Wayland-related system libraries \ 
during packaging; this fixes the emulator failing to launch in some distros, \ 
e.g. Solus Plasma (#143)
    Linux: AppImage builds now interpret relative paths in command-line \ 
arguments as being relative to the original working directory where the AppImage \ 
was launched from, not the AppImage internal runner directory (#147)
    Linux/BSD CLI: For these platforms only and for the CLI only, reverted the \ 
change to estimate window scale factor because SDL_GetDisplayDPI does not return \ 
reliable values on Linux/BSD
    Adjusted frame time sync's sleep implementation to fix frame time sync \ 
potentially causing slowdown on some platforms
    Save state files are now explicitly versioned, which fixes potential \ 
crashing when attempting to load an incompatible save state file from a \ 
different version

Genesis / Mega Drive Fixes

    Fixed the 68000 incorrectly being allowed to access audio RAM while the Z80 \ 
is on the bus; this fixes freezing in Joe & Mac (#144)
    Fixed Z80 RESET not clearing the Z80's HALT status
    Fixed writes to YM2612 F-num high / block registers ($A4-$A6 and $AC-$AE) \ 
taking effect immediately instead of after the next F-num low register write; \ 
this fixes some music glitches in Valis
    Implemented more accurate emulation of how the YM2612 computes operator \ 
amplitude from phase and envelope attenuation
    Fixed in-game saves not working correctly when Sonic & Knuckles is \ 
locked on to a cartridge with SRAM (e.g. Sonic 3)
    Fixed certain revisions of QuackShot not loading correctly due to having \ 
non-standard cartridge ROM address mappings (#174)
    Fixed some illegal 68000 opcodes incorrectly decoding to "valid" \ 
instructions (#184 / #185)
    Fixed an edge case related to how sprite tile/pixel overflow interacts with \ 
H=0 sprite masking (#186)

Sega CD Fixes

    Implemented a higher minimum seek time for small seek distances; this fixes \ 
Thunder Storm FX (JP) failing to boot (#178)
    Fixed a regression introduced in v0.8.3 that caused PCM chip channels to \ 
skip the first sample after being enabled (this made little-to-no audible \ 
difference in practice because the first sample is usually 0)
    Fixed slightly inaccurate emulation of PCM chip looping behavior at sample \ 
rates higher than 0x0800 / 32552 Hz
    Fixed inaccurate emulation of CD-DA fader volumes 1-3 out of 1024 (should be \ 
50-60 dB of attenuation instead of complete silence)
    Unmapped/unknown address accesses will now log an error instead of crashing \ 
the emulator

32X Fixes

    Fixed a major bug in the PWM resampling code that caused PWM audio output to \ 
sound significantly more poppy and crackly than it's supposed to
    Fixed a bug around synchronizing SH-2 accesses to 32X communication ports \ 
that could have caused writes to be skipped in some cases; this fixes freezing \ 
in the Sonic Robo Blast 32X demo (#160)
    Significantly improved timing of 32X VDP interrupts for the SH-2s (#166)
    Significantly improved synchronization between the SH-2s and the 68000
    Fixed PWM DMA transfer rate via DREQ1 not taking the PWM timer interval into \ 
account; this fixes broken sound effects in BC Racers (#179)

Master System / Game Gear Fixes

    Fixed the Z80's RETI instruction not correctly copying IFF2 to IFF1 like \ 
RETN does; this fixes Desert Strike from freezing when you press Start/Pause \ 
(#181)
    Fixed incorrect handling of non-power-of-two ROM sizes, which fixes several \ 
homebrew games and demos (#201 / #203 / #204)
    (Game Gear) Fixed the emulator crashing if a game enables the VDP's 224-line \ 
mode, as the homebrew GG Turrican does (#202)

SNES Fixes

    Implemented more accurate clipping and truncation in Mode 7 intermediate \ 
calculations; this fixes glitched Mode 7 graphics in Tiny Toon Adventures: Wacky \ 
Sports Challenge (#161)
    Mode 7 registers are now latched about 12 pixels before line rendering \ 
begins; this fixes a glitchy line near the bottom of the play area in Battle \ 
Clash, where the screen transitions from Mode 1 to Mode 7
    Implemented an obscure behavior regarding the effects of writing to OAM \ 
during active display; this fixes incorrect sprite display in Uniracers' Vs. \ 
mode (#164)
    Made a best effort at implementing the effects on sprites of toggling forced \ 
blanking during active display; this mostly fixes some test ROMs that exercise \ 
this (#162)
    Adjusted behavior of APU communication ports when the 65816 writes to a port \ 
on the same cycle that the SPC700 cle

    ars the port; this fixes Kishin Douji Zenki: Tenchi Meidou failing...

Files:
RevisionActionfile
1.9modifypkgsrc/emulators/jgenesis/Makefile
1.7modifypkgsrc/emulators/jgenesis/cargo-depends.mk
1.7modifypkgsrc/emulators/jgenesis/distinfo