Skip to content

v3.1.0

Choose a tag to compare

@github-actions github-actions released this 06 Aug 23:28
· 1298 commits to master since this release
59f7f9c

Virtual Jaguar libretro v3.1.0

New-feature release: Jaguar GameDrive support, clock-scale (overclock) options,
audio-CD / Virtual Light Machine playback, and savestate compatibility restored
for every format any released core ever wrote — plus a substantially hardened
test suite that now covers the CD path in CI with no commercial discs.

Highlights

  • Jaguar GameDrive (JagGD) cartridge support (#312, #320). Detection plus
    full 16 MB bank switching (6×1 MB pages over 16 banks), implemented from
    RetroHQ's published GDBIOS bindings. GD-locked homebrew that previously hung
    forever now boots. New core option virtualjaguar_jgd = auto (default) /
    enabled (force, for GD-locked <6 MB images) / disabled. Also fixes a
    pre-existing loader buffer overflow for >6 MB images.
  • M68K / RISC clock-scale options (#314, #316). Overclock or underclock
    each domain independently (virtualjaguar_m68k_clock_scale 0.5x–3x,
    virtualjaguar_risc_clock_scale 0.5x–2x) for framerate-limited titles.
    Defaults are bit-identical to previous behaviour; bus/DRAM costs stay in
    real time so the timing model is not distorted, and audio pacing is proven
    unchanged at every scale (no pitch shift).
  • Audio CDs play, and the Virtual Light Machine now works (#291, #300,
    #325). Single-session audio discs no longer stall the BIOS, and the VLM
    unmutes on its own: its mute gate turned out to be the Q-channel
    CONTROL/ADR data-track flag, which we never served because BUTCH's subcode
    registers were unimplemented. Set CD Boot Mode to Auto/Real BIOS —
    audio-only discs have no session-2 boot stub for the HLE path.
  • Savestates: every released format loads again (#268, #301). States from
    v2.2.0 / v2.3.0 / v2.3.1 / v2.3.2 were either rejected or — worse —
    silently mis-parsed from the CD chunk onward. All four released layouts now
    load exactly; the loader is exact, not best-effort. Savestate format bumps
    to v8 (JagGD state).

Performance

  • Binary is ~22% smaller (#321, #326). The UAE 68K core shipped two
    complete 68000 handler tables and dispatched only one; the linker now
    garbage-collects the dead table and its exclusively-reachable handlers.
    Makefile-only, per-platform gated, emulation bit-identical.
  • Accurate blitter ~16% faster on blit-heavy titles (#332, #334). The
    SIMD helpers were reached through a function-pointer table across
    translation units with no LTO, so nothing inlined — 20.6% of runtime sat
    in five tiny leaf functions. Tempest 2000 +16.2%, other titles +6%.
    Bit-identical output (132,912 blits compared, zero differences).
  • MSVC x64/x86 and every Android ABI were silently falling back to the
    scalar blitter
    (#333, #335) — they now get the SIMD path they should
    always have had.

Bug fixes

  • AvP: red background behind the shotgun with the accurate blitter
    (#267, #292) — DCOMPEN transparency now keys on the unshaded source pixel,
    so SRCSHADE can no longer make transparent pixels opaque.
  • CD: a redundant seek re-framed the in-flight stream (#306, #307) —
    rewinding both the FIFO and SSI audio heads (up to ~13 ms of replayed
    CD-DA). Found by the new synthetic tests; pinned in both byte and audio
    domains.
  • External CD BIOS files are validated (#296, #299) — a truncated or
    wrong-console file at the override path now falls back to the embedded
    BIOS with a log line instead of booting to a black screen. The developer
    CD BIOS dump is now accepted.
  • AvP overscan artefacts investigated and closed as hardware-faithful
    (#266) — the green dot/bar lives at x≥320, where 67 corpus titles render
    real content; masking would damage them and miss the artefact.

Accuracy / investigation record

  • The FMV scene-jump investigation (#297) ran every hypothesis to ground with
    measurements now in docs/fmv-drift-notes.md: the presentation clock is
    video-field-locked (drift structurally impossible), transfer rates are
    within +0.15 % of hardware, FIFO scheduling charges no ISR latency, and a
    BigPEmu reference capture bounds seek latency to tens of ms. A reproducible
    Dragon's Lair scene-branch fixture ships in test/fixtures/.

Testing

  • Three synthetic CD test suites run in CI with zero commercial discs:
    HLE read delivery (#303), real-BIOS BUTCH/DSA/FIFO (#304), and CD-DA over
    the SSI on a multi-track chirp disc whose decoded audio identifies track,
    position, and channel (#309).
  • Silently-skipping checks eliminated (#308): ten real-BIOS assertions
    and the Skyhammer clipping sentinel had been inert; the suite now prints a
    named skip ledger ("Skipped checks: none" on a full corpus) and
    VJ_REQUIRE_ROMS=1 escalates skips to failures.
  • JagGD probe-ROM harness (32 checks, synthetic) and non-1x clock-scale
    audio-contract rows run in CI.
  • The netlink latency test no longer flakes under load (#310, #317) —
    absolute frame-ceiling assertions replaced a load-sensitive ratio.

Stats

  • 79 files changed, ~14,450 insertions, ~1,020 deletions across 30 merged
    PRs since v3.0.0 (git diff --shortstat v3.0.0..develop).

Known issues

  • Battle Morph (CD) runs too fast (#331) — most likely the unmodelled
    GPU/DSP pipeline hazards (#313); a reporter with real hardware has offered
    comparisons.
  • Pipeline-hazard timing (#313) and dram_timing domain audit (#318) are
    tracked under the timing-accuracy epic (#319).
  • See docs/cd-known-issues.md for the CD backlog.

Downloads

Built for 16 platforms by CI on the v3.1.0 tag.


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.

51b730aeeebb7431388865d932d1b834312e1c2e4bb1dde5b3e48573497cfd26  virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
8e87edd936c5c6a18add214a7a039966a5b0434469fa36682c506e119c63f7f5  virtualjaguar_libretro-android-arm64-v8a.so
a930f7d40175a424a42181b2f352ff35ca817dc1806948fe8c2e9e36e1081418  virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
2ae81a883f6cf31058718a9ab6f30e0e6e7fe6eb88ee18e63dd8eb65bbe50f42  virtualjaguar_libretro-android-armeabi-v7a.so
2ad0b287efb1451b391cb5b951f29cab342ae3de9977c6d3f591728670c40389  virtualjaguar_libretro-android-x86-debug.tar.gz
4f6227c84858940458212308ac24318cfc49ee47093d92f82a89239ed7ce1d5f  virtualjaguar_libretro-android-x86.so
fd8e681f14ea5b89f8da1678cc33ef41043d09a9c8bde9e3dd92d5bbb837c677  virtualjaguar_libretro-android-x86_64-debug.tar.gz
11922cb276668c8e4afae985b8052a50544fcf48246f4b909ac55453a9181d74  virtualjaguar_libretro-android-x86_64.so
17b27764ad4723dfc4c6cc072f3b591c544261e9e63369a7f334ce1b7025763d  virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
6e83057e886bebf6fbc4e5210851fbdb93d0a637fc02da005262d80f19d0fbb5  virtualjaguar_libretro-emscripten-wasm.bc
4ed39cac6c91498dd7d73360166b37cf749cd01d33e6beff93bd97367dfe3f04  virtualjaguar_libretro-ios-arm64-debug.tar.gz
d1bff93824f56354f7bd6e6a2579b3219b14b28574b76d4919b760d091127bc3  virtualjaguar_libretro-ios-arm64.dylib
19def144d2b530b3e46df1dda5da5d13e07c0a50673fdda0ae91f8b7fc44cd0f  virtualjaguar_libretro-linux-aarch64-debug.tar.gz
b4cf1919d63f87f48470d4fb31ff0aa8a880b155e1c5d8c68162b6b70026593a  virtualjaguar_libretro-linux-aarch64.so
15802f06cf1ca69a663e39bfa763f8a3967ec5be0538e3cbcc47c2725855a788  virtualjaguar_libretro-linux-i686-debug.tar.gz
d76fcfca5084f23d05b3da28eae7ff97b057ab05bdd7058535fb5adfa97813b3  virtualjaguar_libretro-linux-i686.so
bf1cf10b7ad09e583ef3d48c5ac7b85b873cf6e61d68a5c66c60de3ffd5da073  virtualjaguar_libretro-linux-x86_64-debug.tar.gz
37e790f71fb6841ba23826aed643fc78706a90f445d3130ba46dbcd93cf00ca1  virtualjaguar_libretro-linux-x86_64.so
b8d87df2b48bd63d7d8d3806f55f75c3f2b5b5e15d8c18e0474b875841c328a3  virtualjaguar_libretro-macos-arm64-debug.tar.gz
60863e2487dad2c7bf359f77b092e93740ea4c1552805431cf8a9f21d560b59f  virtualjaguar_libretro-macos-arm64.dylib
e3530036b307b26502a38fbacf8fcd53c5d87401f3bacbbca4e047b7ffd2a51d  virtualjaguar_libretro-macos-x86_64-debug.tar.gz
2b3f92b1fc2493171d94f3de1beead97cc823d3db9d572e2e679591108a6b894  virtualjaguar_libretro-macos-x86_64.dylib
0d2569c3d66c85a295a6dfd2e5393082062f81bc35a754f1fe61dd4d187a5d57  virtualjaguar_libretro-switch-debug.tar.gz
809c6424ec6032f7f44d4643f43fb9daf1f33f1a3918be902358d975d987eeff  virtualjaguar_libretro-switch.a
3f463766b46a4287137402846ffa2a7e8eeb67e27f61c286ad217e85bb233190  virtualjaguar_libretro-tvos-arm64-debug.tar.gz
2e0331000622264400a484fbed2cf852010810eea7ebf2c74efa7e1dc50ce8de  virtualjaguar_libretro-tvos-arm64.dylib
7f87a3395eebdc5de0b832a78b4ba2b08c5cb400b1f9c2a054b10b6ef574ab25  virtualjaguar_libretro-vita-debug.tar.gz
4da7161f7cceeb33f19902804f1953d4aaed69b8b436b0509432f848d6016bb1  virtualjaguar_libretro-vita.a
7b3cd51fab3e153c94f944ebbeba95bbc88177461d639cc092092a606f8e0254  virtualjaguar_libretro-windows-i686-debug.tar.gz
c31f80563198ed3af05e6b6a04136c6e98dc39f8d1c8b3201827dca3f8b129d6  virtualjaguar_libretro-windows-i686.dll
8e80a7a970603ff52f7fa5298b4b007416f01db5c08118141884d9b2193cb6f9  virtualjaguar_libretro-windows-x86_64-debug.tar.gz
ed334ba7894ef7311dd2eb19ce0ef2cc1d2f5f42cb7e8583567d6f5b999032c5  virtualjaguar_libretro-windows-x86_64.dll
37a96ab60ab4dbf5a36ed6d4524e7d5eb5d89dee7f94b339fc1a53863bcfb7df  virtualjaguar_libretro.info