Skip to content

v3.5.1

Choose a tag to compare

@github-actions github-actions released this 25 Aug 23:15
· 233 commits to master since this release
e6709d2

Virtual Jaguar libretro v3.5.1 — Settings clarity

A small fast-follow to v3.5.0. No emulation behaviour changes: this release
makes the core options honest about what they do to each other, shortens the
descriptions that had grown into walls of text, and fixes a test fixture that
kept make test red on a clean tree.


The compounding-settings warning (#595)

DSP Idle-Loop Fast-Forward (virtualjaguar_risc_idle_skip) is the largest
speed lever the core has — 66-87% less DSP interpretation on the titles
measured in #569 — and DSPExec() switches it off entirely while certain
other options are active. Nothing said so. A user who raised the RISC
overclock on a borderline-slow title paid the overclock's own cost and
silently forfeited the bigger win, which reads as "overclocking made it much
slower" with no explanation available anywhere.

The core now logs one [perf] line naming the actual suppressor:

[perf] virtualjaguar_risc_idle_skip is enabled but suppressed by:
virtualjaguar_risc_clock_scale -- the DSP idle-loop fast-forward is doing
nothing, so this combination can run slower than idle-skip alone. Your
settings are honored, not overridden.

It warns; it never overrides. User-set values always win — the same rule
the per-title database already honours for known-bad entries (#464). Latched
once per content load, so it does not repeat every time the options menu is
opened.

The four suppressors are virtualjaguar_risc_clock_scale (any non-1x value),
virtualjaguar_dram_timing, virtualjaguar_gpu_pipeline_timing, and
virtualjaguar_blit_memo. Each of those options now says so in its own
description, and the idle-skip option lists what turns it off.

Two options that look like suppressors and are not

Worth stating plainly, because both this feature's original issue text and
some earlier notes claimed otherwise before the gate was read and measured:

  • virtualjaguar_m68k_clock_scale does NOT disable idle-skip.
    m68kClockScalePct appears in the DSP's budget arithmetic but nowhere in
    the gate. The 68K overclock and idle-skip compose fine.
  • virtualjaguar_blitter_timing does not either. vjs.blitterTiming
    never reaches busArbiter.enabled; only virtualjaguar_dram_timing sets
    that.

Measured on Alien vs Predator, 120 frames:

Configuration Idle-skip fires DSP opcodes/frame
idle-skip alone 112,398 419,949
+ m68k_clock_scale 3x 127,525 476,343
+ blitter_timing 112,316 419,776
+ risc_clock_scale 2x 0 917,593
+ dram_timing 0 363,628

Warning on either of the first two would have false-positived on the most
likely overclock combination there is.

Note also that despite the risc_ prefix, idle-skip is DSP-only — the GPU
idles too and gets nothing from it — and it still ships off by default
pending a listening pass, so it has to be enabled by hand.


Core-option text pass (#596)

23 info strings rewritten; the rest already read as a single idea and were
left alone. Net −700 characters even after adding the new interaction text
above.

Cut: internal issue numbers, source and doc paths, wire-protocol names, and
boilerplate restated on option after option. Kept every load-bearing caveat —
"takes effect on restart", "off by default", "bit-identical either way",
cartridge-vs-CD applicability, and "report bugs only at 1x".

Largest reductions: Network Link Speed (1090→893), Cart BIOS (682→513), CD Boot
Mode (734→651), Voice Chat (599→481), Widescreen (297→239).

Category descriptions were considered as a home for the repeated
presentation-only boilerplate and deliberately not used: libretro.h
documents retro_core_option_v2_category.info only as "secondary help text",
which is spec intent rather than evidence that any frontend renders it
somewhere a user actually reads. Losing a caveat costs more than duplicating
one.


make test exits 0 again (#590)

test_pertitle_db cases 4 and 7 asserted against Alien vs Predator's shipped
titledb row expecting a virtualjaguar_true_color pair. #551 removed that pair
after a pixel-diffed A/B found it changed 0.0000% of pixels — so the test had
been failing on unmodified develop ever since, and every contributor since
has had to know which two failures were "expected".

Fixed at the fixture, not the table: a new TitleDBSetPairsForTest() override
(mirroring the existing hooks and negative-pair overrides) lets those two cases
drive off a synthetic row instead of real, evolving shipped data. A test that
breaks every time the database is legitimately edited was the actual defect.


Known limitations

  • The warning's mid-session path — raising the RISC overclock from the
    options menu during play, rather than having it set at load — is reasoned
    from content_loaded being true at that point, not measured. The load-time
    path is verified headlessly.
  • Nothing here changes emulation. Everything still open against v3.5.0 stays
    open, including World Tour Racing's second freeze (#589) and the on-device
    A10X capture (#601).

Stats

6 files changed, 232 insertions(+), 29 deletions(-)
3 commits since v3.5.0

Maintainers

Joseph Mattiello, with the Virtual Jaguar libretro contributors.
Original Virtual Jaguar by David Raingeard (Potato Emulation) and
James Hammons.


Artifacts in this release

SHA256SUMS.txt
cue2cdi-linux-x86_64
cue2cdi-macos-universal
cue2cdi-windows-x86_64.exe
jagcd-tools-linux-x64.zip
jagcd-tools-macos.zip
jagcd-tools-windows-x64.zip
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-rpi1-armv6-debug.tar.gz
virtualjaguar_libretro-linux-rpi1-armv6.so
virtualjaguar_libretro-linux-rpi2-cortex-a7-debug.tar.gz
virtualjaguar_libretro-linux-rpi2-cortex-a7.so
virtualjaguar_libretro-linux-rpi3-cortex-a53-debug.tar.gz
virtualjaguar_libretro-linux-rpi3-cortex-a53.so
virtualjaguar_libretro-linux-rpi3_64-cortex-a53-debug.tar.gz
virtualjaguar_libretro-linux-rpi3_64-cortex-a53.so
virtualjaguar_libretro-linux-rpi4-cortex-a72-debug.tar.gz
virtualjaguar_libretro-linux-rpi4-cortex-a72.so
virtualjaguar_libretro-linux-rpi4_64-cortex-a72-debug.tar.gz
virtualjaguar_libretro-linux-rpi4_64-cortex-a72.so
virtualjaguar_libretro-linux-rpi5-cortex-a76-debug.tar.gz
virtualjaguar_libretro-linux-rpi5-cortex-a76.so
virtualjaguar_libretro-linux-rpi5_64-cortex-a76-debug.tar.gz
virtualjaguar_libretro-linux-rpi5_64-cortex-a76.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
d102e1349ae72690f4e17eab118fd50a504a95916f0a61474546d606bf45e15b  cue2cdi-windows-x86_64.exe
3a108c565454dfc30af7cf32b7cb543b31061e952c085cf4204dad63908ba3da  jagcd-tools-linux-x64.zip
86e43d4cce56ade02df0e3ddcd8d1d8186e47e71892b8e46338d9997fa79bbdf  jagcd-tools-macos.zip
ddc630e01221edabf8247bc9927a09dad5768e03e243c4740c6a7623a3b12d31  jagcd-tools-windows-x64.zip
afc82165993bad50ec3ef16622c489f6db0946084707dfeb564842ca6ddc4aa7  virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
4b48f2f8b0c5986855ab8aaf60e537185e4af28a0863f8a5ea1f354fabd44cb5  virtualjaguar_libretro-android-arm64-v8a.so
e6a6dcd5e93da0e84d61793023f7fee2beb0d5075bdeb88d3b4788a3e3cc55d6  virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
1dd347cca885c43ffd71e49f777ca3d64b6569d82c0b77dcfccf738b4d4e8f65  virtualjaguar_libretro-android-armeabi-v7a.so
d5ea95bd5a62efcede0c91365c189b18e4d04d9ac7469860a840347e22ad3027  virtualjaguar_libretro-android-x86-debug.tar.gz
5ad32d8ce155ffcd91d174fae216e987e1afcd9ec3fc3b24834178ea2ced9162  virtualjaguar_libretro-android-x86.so
1d7669b06171a2856a22398ba43f031fb4dad2b507243904df50513abd591384  virtualjaguar_libretro-android-x86_64-debug.tar.gz
8fbfae58ff62f1520cfb4eccbf1399b078e99174596fe513e697eb0119c2140f  virtualjaguar_libretro-android-x86_64.so
7db862d8c1d616f0deb81fcf7c1b9b7958f077cf8098426d5a9ba3a83c741258  virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
961eb40306315e0e233eab0e1c09b5a861cec56822e87e7ead61fa5c1a2aaf93  virtualjaguar_libretro-emscripten-wasm.bc
582f817a33160a95c968e63bd4259dc71a5cfb76d183e5f2c78526c10728f13e  virtualjaguar_libretro-ios-arm64-debug.tar.gz
ee365c1cbde6e536632bcfc7cea2c88af46e2b7f0218784102846845c03d5ea9  virtualjaguar_libretro-ios-arm64.dylib
701e6ae698809dfda375800869a4a4e321394d0933c7e52f778317aacd83a35d  virtualjaguar_libretro-linux-aarch64-debug.tar.gz
c17ddd1934e97c0fbf947a35d1bce9ae39927d51d8aa935fc93659d015c632b8  virtualjaguar_libretro-linux-aarch64.so
b8d3c5d67d0c434ce3cbb9d4be058ce23ca3f81301ba69b6e508866d73da4101  virtualjaguar_libretro-linux-i686-debug.tar.gz
9af2dc2284ffe5ac5efc1657b1378bce45731af7d0b61310983f94751fddce93  virtualjaguar_libretro-linux-i686.so
63563306148f690fa5350945afc8b376a4e232715077a35e4333add048c54543  virtualjaguar_libretro-linux-rpi1-armv6-debug.tar.gz
d9fb3859787dd9a4dd7a01db121c0c60cbde4b2a35f493eb0addc11c919c6140  virtualjaguar_libretro-linux-rpi1-armv6.so
baabdf7558d0277c59f2ed9148c4b7a572e57035cfb9e2bd6b2211b98d734965  virtualjaguar_libretro-linux-rpi2-cortex-a7-debug.tar.gz
85c0d00baad8f7c6a674e2314b7f53930c10991291c859d93d8a7e76418b439f  virtualjaguar_libretro-linux-rpi2-cortex-a7.so
3edffdabf231c2ffc70c6e99ff01f7f5589cf792d302acd2d945d0c770ac5f9e  virtualjaguar_libretro-linux-rpi3-cortex-a53-debug.tar.gz
390a63d2e356501c3cc00d82a16472918dea30258db65473a1c779f179e5ba0b  virtualjaguar_libretro-linux-rpi3-cortex-a53.so
f87e50b5f70b820bce939e284c7d2ce81645821dfeb7073fe69af7a6274205d7  virtualjaguar_libretro-linux-rpi3_64-cortex-a53-debug.tar.gz
f5348b636b344376702ea54b9bb7d27ada9b7ce8c46a5ca357c3afae723dcacc  virtualjaguar_libretro-linux-rpi3_64-cortex-a53.so
fc0a4f6254d35f2ad09e83583cbb8b3850b43518e810728ac7646a460b74d300  virtualjaguar_libretro-linux-rpi4-cortex-a72-debug.tar.gz
3eb56cb5bca79203cb17fe30ddb6623762872ac69e0d157e82c8fa8096538c3a  virtualjaguar_libretro-linux-rpi4-cortex-a72.so
e9597dce7089542f34bf879c543079e1eb6f6bf35cde525db8cbcaaee70a6fc2  virtualjaguar_libretro-linux-rpi4_64-cortex-a72-debug.tar.gz
b287ee428299180b609bf9ed3eeec031281cdfc7674f2c11bbdb026b7fce4952  virtualjaguar_libretro-linux-rpi4_64-cortex-a72.so
69e1c8dc3b866a9c42ddc13e4cba814de3c05997ac1cb47b86afcfa7b5446109  virtualjaguar_libretro-linux-rpi5-cortex-a76-debug.tar.gz
e0fc27b71bbd245ed7e6a421be414176d5babf2f09ca0ad8d32d226da68c852c  virtualjaguar_libretro-linux-rpi5-cortex-a76.so
d172b7eb397a34a0e6c07951b5efbd9a7ad12252641f031ff309dd9a02713f0f  virtualjaguar_libretro-linux-rpi5_64-cortex-a76-debug.tar.gz
e9fd338cb4e5f4a411003571fdf8b0ca753130cb6becfe394ea2541071339e10  virtualjaguar_libretro-linux-rpi5_64-cortex-a76.so
8db403dcfc2a85e75c15881b1c4aac882a8d6632d268e637f2903e20467902a0  virtualjaguar_libretro-linux-x86_64-debug.tar.gz
5969c93148c91f0d222311bbc1deb84f967d2af69ca5ae0f55832fe9bd01b27a  virtualjaguar_libretro-linux-x86_64.so
d0335b104814d7f38fbf0350f54dc6a31d9e91508730905f46a7024d42e503b8  virtualjaguar_libretro-macos-arm64-debug.tar.gz
b2a1e218a6edd76a304d193ba83d95ba8e2fc62d06238a9c97352eadd1e3d701  virtualjaguar_libretro-macos-arm64.dylib
472eab81d2d4feb820fdf66ec9ee299e32c963468d4218f1ae4ba296120ee354  virtualjaguar_libretro-macos-x86_64-debug.tar.gz
0c521d8cb2b6234a7684bfe67963aec378ff36cbbcaab0f7165ad94c88466b8c  virtualjaguar_libretro-macos-x86_64.dylib
0e896aabe11a23171507cbdc6f81488a0db4abbd51d2d8c84b2e6975e078702d  virtualjaguar_libretro-switch-debug.tar.gz
58278b35182ae7bdc16aa8e87419003e79dbc280f804faac10a1ed9a3e7d93b4  virtualjaguar_libretro-switch.a
4dde60b8ce9c451b9b42b6522d1e556d66896132a02c92ebb3ea6226839c9006  virtualjaguar_libretro-tvos-arm64-debug.tar.gz
bc222e27996b3df6a816540fc9d88190be6862439f47d927b422896924dad6ca  virtualjaguar_libretro-tvos-arm64.dylib
bf4c1bba28e127c608a72bc3d31d0482b7825084fad2bd30577ed7019dd19a30  virtualjaguar_libretro-vita-debug.tar.gz
eb8fe7e5fdfb253b59fec9155cbb98a9eab93d957ad5868a6cc0cc23fc98ca05  virtualjaguar_libretro-vita.a
e397ce7e0181145ae76ffe032246592cb017d1a9ad387945b1349122acbf3a1d  virtualjaguar_libretro-windows-i686-debug.tar.gz
90cfe99425e35fbae19bfaefb67f8c9505176737eb89d10c4663d2bff22e37f6  virtualjaguar_libretro-windows-i686.dll
c5974a32ee3374df80757d07055bd23b6e0744333e77a4c571bef2835271f96b  virtualjaguar_libretro-windows-x86_64-debug.tar.gz
a3f7272d4d4fba0161783419a38c7610fd1ad2a6b25c51a9f33a7e783662917f  virtualjaguar_libretro-windows-x86_64.dll
592bc17dd9ab58ed274010d1c55116f88c2fcf4f32890b8ef7be4dd61ac5c890  virtualjaguar_libretro.info