Skip to content

v3.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Aug 06:36
385c4d4

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 on load ($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 = 3 promises 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_determinism now 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.
  • cue2cdi converter 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_check asserts the box-replication property Stages 2 and 3
    deliberately break. It is wired into neither make test nor 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