Skip to content

v2.3.0

Choose a tag to compare

@github-actions github-actions released this 07 May 00:47
· 23 commits to master since this release
9333e6f

Virtual Jaguar libretro v2.3.0

Performance and accuracy release — 158 commits since v2.2.0. Major blitter
and RISC performance work, hardware accuracy fixes across TOM/JERRY/DSP, and
improved iOS/Provenance stability. No new features; this is a polish release.

Highlights

  • Significant blitter performance improvements: collapsed inner loops, SIMD
    ADDARRAY, ADDRGEN caching, fast-path RAM bypass, branchless COMP_CTRL.
  • GPU and DSP computed-goto dispatch + inlined delay slots — measurable
    speedup on all platforms.
  • AvP alpha noise / red artifact fix (bkgwren + dstd read).
  • PIT timer corrected to full 26.59 MHz system clock rate.
  • TOM visible window now derived from hardware registers (VDB/VDE/HDB/HDE).
  • DAC resamples I2S output when SCLK changes at runtime — fixes audio pitch
    drift in games that reconfigure the sound clock.
  • iOS / Provenance stability: all statics properly reset on core unload/deinit.
  • Expanded test suite: 56,500+ automated assertions, framebuffer integrity
    checks, EEPROM lifecycle, audio pipeline, and timing diagnostics.

What's new

Bug fixes

  • AvP: fixed alpha noise / red visual artifacts — blitter now skips
    destination data read when BKGWREN is set (PR #166).
  • DSP: don't kill DSP when it's actively producing audio — prevents
    audio dropouts in games that restart the DSP mid-frame.
  • DSP: correct ABS flags, DIV zero-guard, STORE alignment (PR #162).
  • DAC: resample I2S output when SCLK changes at runtime (PR #163) —
    fixes audio pitch issues in games that reconfigure the I2S clock.
  • TOM: derive visible window from VDB/VDE/HDB/HDE registers (PR #164)
    — proper overscan handling instead of hardcoded dimensions.
  • TOM: restore fixed left-edge origin for scanline positioning.
  • PIT: correct timer clock rate to 26.59 MHz (full system clock). Was
    previously running at half rate, affecting game timing (PR #154).
  • Blitter: restore 64-bit register longword swap in BlitterWriteByte.
  • Blitter: always read framebuffer in phrase mode for byte_merge.
  • Blitter: multiple correctness fixes in collapsed inner loop paths
    (daddmode, zmode, patfill eligibility guards).
  • Libretro: reset all static state on unload/deinit with NULL checks
    (PR #160) — fixes crashes on iOS/Provenance when relaunching the core.
  • Libretro: move externs into proper headers (PR #161).

Performance

  • RISC (GPU/DSP): computed-goto opcode dispatch for GCC/Clang (PR #146).
  • RISC: inline delay-slot execution (PR #147).
  • RISC: predecode opcode cache (PR #144).
  • Blitter: SIMD-accelerated ADDARRAY cascade (PR #148).
  • Blitter: cache ADDRGEN y*width outside inner loop (PR #149).
  • Blitter: inline ADDRGEN and helper functions (PR #152).
  • Blitter: fast-path RAM reads/writes bypassing full address dispatch
    (PR #155).
  • Blitter: collapsed inner loops for simple copy blits (PR #157) and
    pattern fill blits (PR #156).
  • Blitter: branchless COMP_CTRL dbinh + Kogge-Stone maskt prefix
    (PR #158).
  • Blitter: inlined fast-RAM helpers in collapsed paths.

Testing

  • Test suite expanded to 56,500+ automated assertions across 15 test
    binaries.
  • New test harnesses: framebuffer integrity (alpha corruption + screen
    position), TOM visible window registers, EEPROM lifecycle (write/read/
    persist across reload), audio pipeline, PIT clock rate verification.
  • Shared test harness library (test/harness/) with common CLI, JSON
    output, audio/video stats, and probe modules (DSP, timing).
  • Per-frame timing diagnostic tool for detecting halfline/cycle anomalies.
  • Visual regression tests: determinism, frameskip invariance, save-state
    round-trip, rewind simulation.

Known issues (unchanged from v2.2.0)

  • Doom: runs at approximately 2x speed (GPU-rendered game, bus
    contention not yet modeled). Game music silent.
  • Wolfenstein 3D: no game music (DSP audio engine issue).
  • Skyhammer / Iron Soldier 2: saturated square-wave audio on HLE
    (DSP engine state not fully replicated).
  • Battle Sphere: menu navigation issues.
  • Jaguar CD support in progress on a separate branch, not in this release.
  • The accurate blitter is still notably slower than the fast blitter;
    some games may need the fast blitter on lower-end hardware.

Compared to v2.2.0

263 files changed, +25,240 / -2,805 lines across 158 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).


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.

80267fd9bb726f0cf8daf152584f8b6125ba82b39f352398f28799a6f37aebd7  virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
776ca1608872a73b3d2710dff42b926f224969e8e2a65d27fa20fe9a8bf12b08  virtualjaguar_libretro-android-arm64-v8a.so
3e8f66e5ff6b3e58802d6f647bb43beb9803821f00fe428c8704cf1038695ee9  virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
00f37f8ac2c83862f00c40eedb0a4dd0f06c3f34cdea4977f55826c229a56c63  virtualjaguar_libretro-android-armeabi-v7a.so
95888f82d9b5a6be73f5ecea10dd911c09718ca48959cac6e1d5b5a77e60619f  virtualjaguar_libretro-android-x86-debug.tar.gz
7f49ac86ba8787e958f80c83a23014ea74e7906b76ac8df3ef72aad0847436ca  virtualjaguar_libretro-android-x86.so
8289e0cf967316fea81349d7cf0d8aa514cc8ae87bef4613c748b62a4aa1bea2  virtualjaguar_libretro-android-x86_64-debug.tar.gz
731f1a2fa7b85024b8da8820404ec76d81959f9c849c6ebff19a5089f2a36655  virtualjaguar_libretro-android-x86_64.so
a748fcae9d91d493e60623b349127e8b1ba7851d2b6ea98ea899c5374193e683  virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
9a604935c0c3ee03826af86beee0b5fbcd42db32bb6523962661175b064e24ed  virtualjaguar_libretro-emscripten-wasm.bc
cfc669e7f75ea0ad6454d0bb296ec018e0f993fdad7f99ece6529874290593f8  virtualjaguar_libretro-ios-arm64-debug.tar.gz
473d6bb22dd7b39254777691b28f601ac2c830e1c2eeb78a37b0f4325109254c  virtualjaguar_libretro-ios-arm64.dylib
c0b502f34cf525198db692f0a045e172fa6d363c3f00e7e5a73b61d8cdd82f62  virtualjaguar_libretro-linux-aarch64-debug.tar.gz
8c50a0116c1fe3e6f95d160213c3355e00044a73fd9ccef7816eb845c2d642ca  virtualjaguar_libretro-linux-aarch64.so
afd7cfc90d03e033de13b0cec6e9d61e25385046d04320116616a46fd68ca934  virtualjaguar_libretro-linux-i686-debug.tar.gz
e3e832f8dcfc0f10797b9e22fc5226d37ac6a1f2c2e456b511a73e20f6ff6334  virtualjaguar_libretro-linux-i686.so
f8c5bf8054b30dcec2ca3512e2e76fb7ff8b0104bff847eeba9226e85911c35d  virtualjaguar_libretro-linux-x86_64-debug.tar.gz
5d32bee745c4ea3758a82a686dba7fe97b7cf582b6426d0a447b4706d2ebcbec  virtualjaguar_libretro-linux-x86_64.so
b8a43ba2eb2ed37771db10d3b0b265ce560a9da1e7c3703f57486777731ea796  virtualjaguar_libretro-macos-arm64-debug.tar.gz
716bc4faa46e5f36cd23173ac9c1eefdff22bd3438035429fdc8c4b0f3a901cb  virtualjaguar_libretro-macos-arm64.dylib
e7430cda083a1c912582aa34b211167511378ca5a8b63e03d7239020be2f24c4  virtualjaguar_libretro-macos-x86_64-debug.tar.gz
c2db6a124b60b34741e87a8cdf6b015541bb87cda10b255de7443b9a8a09dc4c  virtualjaguar_libretro-macos-x86_64.dylib
678e272b4b83f2e18551ea3214c13e4cbe0b7c060b4d96dacda46646891a2cc9  virtualjaguar_libretro-switch-debug.tar.gz
a8ab88ff4d8af18d500210492bcecc3f74c2fd2deff2771dbc1de5743b5cfefb  virtualjaguar_libretro-switch.a
5a4babfe854f52342734821a092584bb812f7d8ad904946aaefde43176b4fe6d  virtualjaguar_libretro-tvos-arm64-debug.tar.gz
3a403abd10ff2288568b47fca4643c1f5122ad0b95c4bc505e9ff05a99a068cc  virtualjaguar_libretro-tvos-arm64.dylib
fe4cdbbea8f8c3e8638680f0f22d8c6d80470e11e097be207fb3ca0eaae1dc16  virtualjaguar_libretro-vita-debug.tar.gz
f89c10d0a30285e591b4294727e89d0ceaa88902f9cc32ad8427c60a51c57e8c  virtualjaguar_libretro-vita.a
7d6db469972da8d8380fcf6f8b2d9fcd52fbb4f07156b79028b165eb4686ae94  virtualjaguar_libretro-windows-i686-debug.tar.gz
da645d181e5c02430dde1871ad5be15416c2fb6aff561e9f62d0d1555c186955  virtualjaguar_libretro-windows-i686.dll
9b3042131f3505585df870a25f1c5bb4f950041fbc0ead1be2d6a1bb35955f7f  virtualjaguar_libretro-windows-x86_64-debug.tar.gz
d7c05da790fd85414263c3cfe35ffbb82dfa83ae572ac789793697338dabf5e3  virtualjaguar_libretro-windows-x86_64.dll
9c0d9c158a9edddafee17fd4ce4573be23aaff99f5286b47aea71475e5c6b8e8  virtualjaguar_libretro.info