Virtual Jaguar libretro v3.3.0
Hi-res completion and correctness release: the internal-resolution track now
adds real detail on every video mode and on scaled sprite objects, not just
CRY gouraud — which is what finally makes 2D titles benefit. Alongside it, a
run of root-caused game and infrastructure fixes, several of them found by
reading the original Atari/Flare TOM netlists rather than guessing.
Highlights
- Hi-res for RGB16 direct mode (#382). All hi-res detail was previously
CRY-only: every other video mode rendered at 1x and replicated rows. Measured
across ~3,000,000 rendered scaled calls, Val d'Isère and Primal Rage are
100% RGB16 — so an entire class of titles was getting pure upscaling with
zero added detail, including titles whose blits already produced supersampled
content that was then discarded. Alien vs Predator now shows 6.9 million
non-uniform sub-pixel blocks where it previously had none. - Hi-res Stage 3: OP scaled-object supersampling (#367). Scaled bitmap
objects (SCBITOBJ) now carry real sub-pixel content instead of box
replication — the piece the design calls "the second real win", and the one
that helps 2D titles rather than only 3D ones. - Stage 3 extended to scaled CLUT objects (#367 §6.5). A corpus census
found scaled CLUT objects are the dominant scaled traffic in exactly the
2D titles Stage 3 targets — 81.1% of truly-scaled destination pixels in
International Sensible Soccer and 75.7% in Val d'Isère — so Stage 3 had been
reaching under a quarter of the scaled content there. Promoting the 8bpp path
takes Val d'Isère from 0.0000% to 7.16% sub-pixel variance: it had no
hi-res detail at all before this.
Bug fixes
- Val d'Isère Skiing & Snowboarding: ground renders correctly (#354). The
perspective floor was a flat mottled band ("looks like a static image"). Root
cause was the OB register byte order, settled from the original
Flare/Atari TOM design netlists (OB.NET:55-67) after the JTRM turned out not
to specify it: OB exposes the object phrase least-significant-word first
(OB0 $F00010= phrase[15:0]), not straight big-endian. The game's IRQ3
handler gates its floor renderer onload ($F00014)/cmpq #0, which under
the old ordering returned the low long — always carrying TYPE, so never zero.
Every one of ~72,800 interrupts fell through to a do-nothing epilogue. - Doom savestate rollback is deterministic again (#400).
savestate_features = 3promises a bit-exact rollback, which is what RetroArch's single-instance
run-ahead is built on; Doom diverged at replay frame 227. Not a Doom bug — the
hi-res shadow surface's frame epoch was outside the state blob, and its
256-frame wrap (which clears every cached block) replayed at a different frame
after a rollback. Now carried in the state (v11). - Cybermorph projectiles render under the accurate blitter (#425).
- Hi-res 2x pixel-dot noise on texture edges (#396). Stage 2's half-step
sub-sampling could step past the source bitmap's last pixel and line. - Periodic audio skip every ~36 s NTSC / 8 s PAL (#393) — read-cursor drift
against the I2S capture cadence. - Power Driv Rally sound stops mid-game (#355).
- Blit-memo arena-full log spam (#411/#426) — a per-frame INFO line at frame
rate on titles whose blit stream outruns the shadow arena.
Enhancement suite
- Per-title enhancement defaults DB (#368) is in and applies known-safe presets
automatically; user-set values always win. - Soft patching for cartridges documented and its contract guarded (#409).
Timing / accuracy
- Netlist-grounded GPU pipeline cost model, and the 68K charged real blitter bus
time (both experimental, default off). - The Timing core options are reorganised: the two clock-speed multipliers come
first, the three experimental models are grouped beneath them, all three are
marked (Experimental), and the descriptions are cut to what a user needs at
the point of toggling. Both overclock entries now point at the timing models as
the first thing to try when an overclocked title misbehaves.
Testing / diagnostics
- vjtrace flight recorder — event ring, memory watchpoints, per-frame field
CSV, plus four standalone offline analyzers. Costs nothing in shipped builds
and is armed on demand. - Blit memoization (#411) — titledb-gated, bit-identical by construction,
with a verify mode that never skips. test_runahead_determinismnow covers a title carrying per-title enhancement
defaults; it previously ran only stock-path titles, which is why #400 shipped.
Its audio capture is also rewound per pass, so runs above ~300 frames no longer
report false divergence.test_frontend_pacing's fastest-frame bar is recalibrated off the slowest CI
runner (#421). It was failing on roughly half of all develop pushes, on commits
that could not affect pacing.cue2cdiconverter ships as a release binary.
Savestates
State version 11. States written by v3.2.0 (version 8) still load. The new
trailing field is the hi-res shadow epoch (#400).
Stats
108 files changed, 15,993 insertions(+), 301 deletions(-) across 146 commits
since v3.2.0.
Known issues
- Render-bound game loops still tick roughly 2x too fast in Doom and Hover
Strike (#401): the GPU completes a frame in 1-2 fields where hardware needs
4-8. The machine timing itself is correct; the experimental timing models are
the current lever. - Touchscreen taps can trip in-game auto-repeat (#399) — authentic hardware
behaviour meeting 100-200 ms finger taps; an opt-in core option is the planned
fix. - Battle Morph (CD) runs too fast (#331), likely the unmodelled GPU/DSP pipeline
hazards (#313); the experimental timing models are the current lever. Use accurate timing, works with overclock as well then. hires_box_checkasserts the box-replication property Stages 2 and 3
deliberately break. It is wired into neithermake testnor CI, so nothing is
failing, but it is misleading as written and needs a Stage-3-aware successor.
Downloads
CI publishes 16 platform builds with the tagged release.
Maintainers
Joe Mattiello (@JoeMatt)
Artifacts in this release
SHA256SUMS.txt
cue2cdi-linux-x86_64
cue2cdi-macos-universal
cue2cdi-windows-x86_64.exe
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.
b926e41185057ee9204aaa0aaafff53ceec2cbb6d4f37e478edf7a7ddb353332 cue2cdi-linux-x86_64
c19f65c1be0eab40e58f0a4d619704dcfc4632858d00eef78a737d0f26e7a134 cue2cdi-macos-universal
bea2ad4136c1d9bd1f018fc16c134ffef2f0d556e173234c75402ef5ddd57a20 cue2cdi-windows-x86_64.exe
cf4d2952db3713f9ed7df19165f67ffc28c66c5d3a0d23442eeef5acb710f27c virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
3f85f54bd68005ba0b7e5b7b60ccbe25e3bd94ffb08fc10de6c70f3f2c4f99dd virtualjaguar_libretro-android-arm64-v8a.so
4823119ff85af888299e412715aed06739e2178989a2b3cdacab2958dc7003fa virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
d12afd6cd9e9180a0a09d2a1549d9cc29bba1e870c168d34533fdbb1a85d9338 virtualjaguar_libretro-android-armeabi-v7a.so
d765517d75cc7ee6999ced9a2d1278f96b9c8692a2775614662897ca971da74b virtualjaguar_libretro-android-x86-debug.tar.gz
d77476e5b16cdd5f60e0f8b0c2918b1c34f05aed97cea071399d646b50fea55d virtualjaguar_libretro-android-x86.so
9bfc968f68cdf92faf7952b05e65f22851cc2a547caac0800bc2231fc959c3c7 virtualjaguar_libretro-android-x86_64-debug.tar.gz
05b45572b569fd51454410c1d1c709f9ebb611d6d2d6cd550963b3f4a295ac3f virtualjaguar_libretro-android-x86_64.so
7a9c62469b432b143869a3d517e42809781df672e9f629e33b11a8e8855bda95 virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
7a2cc20c2975dda38b9909dac426a76322de5783c6f676447b1e51d8f2334271 virtualjaguar_libretro-emscripten-wasm.bc
89be4d0c7767463a342dd6c37970f013f8adad54127dcdcb2ac3a60d1f932b2a virtualjaguar_libretro-ios-arm64-debug.tar.gz
4d82bd48392e6d039d593be0acaca031e5020e8bc2ae93eb055648ab3e9dc64b virtualjaguar_libretro-ios-arm64.dylib
525c38e34240c04a946704ac49ef5ea552a97b37b9d401c08138f9e3326c99ed virtualjaguar_libretro-linux-aarch64-debug.tar.gz
8be8c8ca23abbb69bccdcacca4bc39aae29f484d8ffa9d600c01497f5570ad28 virtualjaguar_libretro-linux-aarch64.so
d49a47d576676e188cebddf7651f28cbf5561233db50eeeb3a613b7ffc4732f7 virtualjaguar_libretro-linux-i686-debug.tar.gz
0437bf113f79e84fcc14d11111e4d2391d6a0a2b8060738580a327dee7391592 virtualjaguar_libretro-linux-i686.so
c4c036eba4de4ce31eac038e1b199ab89b3b7f76d8f450ac9d71b0a65595755d virtualjaguar_libretro-linux-x86_64-debug.tar.gz
2c7f3b55ea59a88e0a4d67ae49d883a5ac667aa432ed05584456db96c814a69d virtualjaguar_libretro-linux-x86_64.so
ac34f9edb967d5ce0112666cbb03ffed681195415246cc3fb2dc625baa807c29 virtualjaguar_libretro-macos-arm64-debug.tar.gz
e044f040b22314c13c70b6806376b2c75621b14032556a83c0681197bdfc9ae2 virtualjaguar_libretro-macos-arm64.dylib
2f795e5c2ab0cb56c56ab3e88bd07ea72ad2c21961fa858784c6a226e9388765 virtualjaguar_libretro-macos-x86_64-debug.tar.gz
d7df4ab510e2cc99b607a55c5f6f780956b40c9434484e41595856a81d1245ac virtualjaguar_libretro-macos-x86_64.dylib
bd27cdcc44992dae6e3ff6c7e9e731c3a89340758309ef6487d4f081f94dcd8a virtualjaguar_libretro-switch-debug.tar.gz
58772340afd3541d4ea1cb5f7791c34c724e1719b69e8e0624a0dc08e686dbcc virtualjaguar_libretro-switch.a
23d37ea9f4778b8e1d467f8ad7afa4cf929122ea1c4663c62dd4706b6112e4dc virtualjaguar_libretro-tvos-arm64-debug.tar.gz
c9f80c2e14d4777aee31459b95607b8dd725c5a44be95b1c9b3eb96ab1283356 virtualjaguar_libretro-tvos-arm64.dylib
afd8bc4f92db9d3a55e71e5fdc5f4c4547f78d52082bf41b18f7a581b68ae759 virtualjaguar_libretro-vita-debug.tar.gz
7583a0750f893aaff00d5f93317355edd90376d6a93a7c78ccdefa87d04a73db virtualjaguar_libretro-vita.a
8fe5eb0c6c7fd01a9456604f62baa7693c1037ae3cb91cba5f1fb439bb81b0db virtualjaguar_libretro-windows-i686-debug.tar.gz
e8a718833adebf4e340c45bdca34f9305c92bbb45c6ca8e71c994e45ef45b07c virtualjaguar_libretro-windows-i686.dll
b8acd58b77eeb9ee8241530cda90be33e3f3fb6f0391902fc8aa1da7e4bd8219 virtualjaguar_libretro-windows-x86_64-debug.tar.gz
f398feb27d6ca01562a926a51377b005f4672a92bb09bf4dd8b44ec959df57f1 virtualjaguar_libretro-windows-x86_64.dll
7488cb4ecd38075beffb47a2effa9c8693cc3a5ac9aeb9bb842d515b8898f828 virtualjaguar_libretro.info