v2.3.0
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