Skip to content

v2.3.1

Choose a tag to compare

@github-actions github-actions released this 09 May 23:42
1882804

Virtual Jaguar libretro v2.3.1

Polish release — 17 commits since v2.3.0. No new emulation features;
this is an infrastructure / triage / safety pass that was on develop
between v2.3.0 (April 2026) and now. None of the long-standing audio
or game-compatibility issues changed; the difference is that future
bug reports about them have a real chance of being actionable.

Highlights

  • Runtime crash watchdog — a new opt-out core option,
    Crash Detect, logs gpu_pc_escape / dsp_pc_escape / gpu_wedge
    / dsp_wedge / video_stall events to the RetroArch log when a
    game hangs or goes black. Bug reports about freezes can now be
    triaged from the log alone, without save states or replays.
  • DSP wedge fix — when the DSP PC escapes into unmapped memory,
    the inner exec loop now drains the timeslice instead of busy-looping
    for minutes. This was a v2.3.0 regression that made the headless
    test harness hang on Wolfenstein 3D for 12+ minutes per session.
  • Audio presence test (test/test_audio_presence.c) — counterpart
    to the existing clipping check. Catches the silencing-regression
    class where a "fix" drops a game's RMS to zero (clipping check
    passes silence as PASS). Iron Soldier 1 is the in-tree baseline
    (RMS ~1175 on develop). Both audio tests now run in make test
    and CLAUDE.md documents that audio / DSP changes must clear both
    before being declared done.
  • Bug-report template clarified — the BIOS-mode dropdown
    previously implied users needed to supply jagboot.rom in
    system/, which has never been the case for this libretro core
    (the BIOS is bundled in the dylib). The template now distinguishes
    the boot path users had selected, which is what bug triage
    actually cares about.

What's new

Bug fixes

  • DSP: bail out of the exec loop when the DSP PC is in unmapped
    memory. Avoids a busy-loop that burned the entire timeslice
    emulating opcodes fetched from bus-default 0xFFFF. Wolf3D headless
    test now completes in <30 seconds, matching v2.2.0 wall-clock.

Tooling

  • src/core/crash_detect.c — opt-out runtime watchdog. Once-per-
    frame hook with cheap PC-range checks and a 256-pixel rolling
    framebuffer hash; off-mode short-circuits at the first instruction.
    Modes: enabled (default) / disabled / verbose (heartbeat
    every 600 frames).
  • test/test_audio_presence.c — asserts the audio onset is
    reached and the window RMS lies in [floor, ceiling], with no
    long zero runs. Per-ROM thresholds via CLI args. Wired into
    make test against Iron Soldier 1.
  • test/tools/test_video_dim_log.c — diagnostic harness that
    prints every video resolution change and black-frame streak.
    Useful for correlating "crash after N seconds" reports against
    actual hardware events.

CI / infrastructure

  • Dependabot bumps for GitHub Actions (codecov-action 5→6,
    actions/cache 4→5, actions/labeler 5→6, actions/upload-artifact
    4→7, cirrus-actions/rebase 1.4→1.8).
  • test/tools/test_frame_timing added to .gitignore.

Documentation

  • CLAUDE.md — new "Runtime crash watchdog" and "Audio / DSP work
    — required tests" sections. Pins the rule that DSP/audio PRs must
    clear both test_audio_clipping AND test_audio_presence, with
    PR #170 cited as the precedent (clipping passed on a "fix" that
    silenced Iron Soldier 2).
  • Bug-report template — clarified HLE vs Real BIOS distinction.

Known issues (unchanged from v2.3.0)

  • Doom: runs at ~2x speed, music silent. Bus arbitration / cycle
    accuracy modeling not implemented; PR #169 (draft) is in design
    limbo.
  • Wolfenstein 3D: no audio. The dsp-diag tool shows the DSP
    PC drifting to $0006EE in main RAM around frame 48 (Bank1
    registers never finish initializing); the runtime watchdog
    subsequently logs dsp_pc_escape pc=$00FFF004E8 once the
    drift hits unmapped register space, and the new wedge bail-out
    (this release) prevents the headless harness from hanging on it.
    Long-standing — present in v2.2.0 too, not a v2.3.x regression.
  • Skyhammer / Iron Soldier 2: saturated square-wave audio in HLE
    (DSP engine state not fully replicated). Both tests deliberately
    flag these as EXPECTED-FAIL in the suite manifest until a real
    fix lands.
  • Battle Sphere: menu navigation issues.
  • Jaguar CD: PR #120 is rebased and builds, but multi-track CD
    games still break mid-game; not in this release.

Compared to v2.3.0

18 files changed, +1,004 / -17 lines across 17 commits.

Downloads

Pre-built libretro cores for 16 platforms:

  • Linux: x86_64, aarch64, i686
  • macOS: arm64, x86_64
  • Windows: x86_64, i686 (MSYS2/MinGW)
  • iOS: arm64; tvOS: arm64
  • Android: arm64-v8a, armeabi-v7a, x86_64, x86
  • Web: Emscripten WASM
  • Consoles: PS Vita, Nintendo Switch

Each binary has a matching *-debug.tar.gz with split debug symbols.
SHA256 checksums in SHA256SUMS.txt.

Maintainers

libretro/Provenance fork: Joseph Mattiello (@JoeMatt, Provenance-Emu).

Thanks to @checktext00 for the bug-report template fix (#179).


Artifacts in this release

SHA256SUMS.txt
virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
virtualjaguar_libretro-android-arm64-v8a.so
virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
virtualjaguar_libretro-android-armeabi-v7a.so
virtualjaguar_libretro-android-x86-debug.tar.gz
virtualjaguar_libretro-android-x86.so
virtualjaguar_libretro-android-x86_64-debug.tar.gz
virtualjaguar_libretro-android-x86_64.so
virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
virtualjaguar_libretro-emscripten-wasm.bc
virtualjaguar_libretro-ios-arm64-debug.tar.gz
virtualjaguar_libretro-ios-arm64.dylib
virtualjaguar_libretro-linux-aarch64-debug.tar.gz
virtualjaguar_libretro-linux-aarch64.so
virtualjaguar_libretro-linux-i686-debug.tar.gz
virtualjaguar_libretro-linux-i686.so
virtualjaguar_libretro-linux-x86_64-debug.tar.gz
virtualjaguar_libretro-linux-x86_64.so
virtualjaguar_libretro-macos-arm64-debug.tar.gz
virtualjaguar_libretro-macos-arm64.dylib
virtualjaguar_libretro-macos-x86_64-debug.tar.gz
virtualjaguar_libretro-macos-x86_64.dylib
virtualjaguar_libretro-switch-debug.tar.gz
virtualjaguar_libretro-switch.a
virtualjaguar_libretro-tvos-arm64-debug.tar.gz
virtualjaguar_libretro-tvos-arm64.dylib
virtualjaguar_libretro-vita-debug.tar.gz
virtualjaguar_libretro-vita.a
virtualjaguar_libretro-windows-i686-debug.tar.gz
virtualjaguar_libretro-windows-i686.dll
virtualjaguar_libretro-windows-x86_64-debug.tar.gz
virtualjaguar_libretro-windows-x86_64.dll
virtualjaguar_libretro.info

SHA-256 checksums

Verify with sha256sum --check SHA256SUMS.txt (Linux) or
shasum -a 256 --check SHA256SUMS.txt (macOS).
See SECURITY.md
for full verification instructions and antivirus false-positive guidance.

eca87cd9824530d0d4672b7aed6d4c6df32016689e08e72863d3f266718da86a  virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
d74bdc89a2f5ed6e3c0ae5068dc6c62f2b6502c45aa2df5cfe23c36b806fb177  virtualjaguar_libretro-android-arm64-v8a.so
2e5904fa9571a447940cd99bd4e8c0a8706e87b5a469c7023c6b050c6a90db4d  virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
e739f17807260b3869ba7b94253679b92c03c5af02d716ed85e0f4d6e670bbca  virtualjaguar_libretro-android-armeabi-v7a.so
591b28f2117d699d1b1b4c8669e8a71113211d3ecc796508bc9a63f38b32b228  virtualjaguar_libretro-android-x86-debug.tar.gz
367d615385ac8320f986bf6befc8cd78d785b01ca458bcf10d82cca7ed686c5f  virtualjaguar_libretro-android-x86.so
3d370d03f70425de34bd0987ecf150991895eb3e2527dfbb3f1d3de10b85cb58  virtualjaguar_libretro-android-x86_64-debug.tar.gz
a8b2b61a011ca7d3669b8d4ee754dc32928d47bfe8d30204541ac7050b71f1ab  virtualjaguar_libretro-android-x86_64.so
8330ddd9dac162b7e386f3a5e91c6e487b47259362bd37b62eaa8ea27d3e0d3d  virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
14c5c53fffbfacb17ee43fa3746a9938f96845bc1f42a7a7bd7396e544a4c58f  virtualjaguar_libretro-emscripten-wasm.bc
bcd9047182c7fb9ea7fe3b72649d5764518910a47e19eb1ab5cf6f84e7d60ef6  virtualjaguar_libretro-ios-arm64-debug.tar.gz
7171a10ff5bba1ed82ace2f8550d7cc6cf618a9f58cbcb9c43c6142553ea79e4  virtualjaguar_libretro-ios-arm64.dylib
248d8e804b89af537edd14016087dc7e28653f12c918a521baed0df2d80db369  virtualjaguar_libretro-linux-aarch64-debug.tar.gz
e3baf788e30eca8bdddbe3faa65cbe35289ec79ad85fb95b7286c89c3d39575b  virtualjaguar_libretro-linux-aarch64.so
6e5d8dbb63daf8b021dfabe27ad09a0aa9f9f6704d8999b314be567af4ffb185  virtualjaguar_libretro-linux-i686-debug.tar.gz
ed15ded18eb239a51710ebabd222b42a27dbf5b0c4c4612dd63d546e0153e4fa  virtualjaguar_libretro-linux-i686.so
0caddbface7e99af5af4bebab58b27ccd7031cbb5b9610a38f5b59f19a6880df  virtualjaguar_libretro-linux-x86_64-debug.tar.gz
1966355a9f566ecd80664cce88fd736c44a557cc6f614c61c8e0f854612e1f8a  virtualjaguar_libretro-linux-x86_64.so
6ed58706ac5a78158baaee1d5e430fafa135c60a2ad8b832232e5e6e2cf30572  virtualjaguar_libretro-macos-arm64-debug.tar.gz
bc54eb843ee321a769a7b30cf6d9bc4ccf52394eecdbb2172c2ee47b12170d8d  virtualjaguar_libretro-macos-arm64.dylib
db22aca25afb51a130edb40121e72fc6f289107707fd16191e25efe8904b171a  virtualjaguar_libretro-macos-x86_64-debug.tar.gz
2d1520077cc372ba5378bbffc5883e50bd54d3df06a0bc546a268ac8500c6eca  virtualjaguar_libretro-macos-x86_64.dylib
7e9f3328612085f121cd0d0dbfd3d9660df72e69ea7c9295ae3356e7fbf961da  virtualjaguar_libretro-switch-debug.tar.gz
b8ef183d0206d7c7c969b25aaa7337cb418f141ad3b9a193bfc04d6ced6d4b36  virtualjaguar_libretro-switch.a
647a0871490a760559bdf6d8edd421b838d1d6144e297359977a88a150758f5f  virtualjaguar_libretro-tvos-arm64-debug.tar.gz
698d5907a986bc8ad4e9e1fd66174435f26dc1e88518225839879f05a3505f10  virtualjaguar_libretro-tvos-arm64.dylib
feda83df2b9bb159889e414f487af9ebaf7b1be2c430bc2bd5bf146e691a7a4d  virtualjaguar_libretro-vita-debug.tar.gz
505c2c601549689ac47bd8c0ab368de250df66590b8f9632dc9f86389ebd2da9  virtualjaguar_libretro-vita.a
bfff7cccd568f129f4c9fc353a128bb377b66881ed9a9ec34883c60d6e61e72d  virtualjaguar_libretro-windows-i686-debug.tar.gz
039d3ff9412b41dabf5b6c53d109250e0c38c0a0dee7db192cf1bd6579ee260e  virtualjaguar_libretro-windows-i686.dll
5599c56dd3529f133e4d9846c55747f6cf986aa0bac5852017e260b6ba816606  virtualjaguar_libretro-windows-x86_64-debug.tar.gz
eac6138d8c185875555e74e83ccd3401a08905a2e50e7982299875a30ab4642b  virtualjaguar_libretro-windows-x86_64.dll
511208f08a6f891886cdc77f2cade2acee9f80171a0d46cfec66530188fa9428  virtualjaguar_libretro.info