jgenesis v0.9.0 is released. Cross-platform multi-console emulator supporting a number of 8-bit and 16-bit gaming consoles: Sega Genesis / Sega CD / SNES / Master System / Game Gear emulator.
jgenesis Changelog:
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 clears the port; this fixes Kishin Douji Zenki: Tenchi Meidou failing…