Repository navigation
v3.5.0
Virtual Jaguar libretro v3.5.0 — Texture packs, controllers, and performance
Every Jaguar controller Atari shipped (and one it never did) is now emulated,
community HD texture packs can replace a title's own blitter art, the Voice
Modem can carry an actual voice, and the core can finally be profiled on
the device instead of only on a developer's desktop.
Highlights
Texture replacement packs (#369, #528)
Present community HD art in place of a title's own blitter tiles.
- Texture Dump Mode (
virtualjaguar_texture_dump) writes every unique blitter
source tile a title uses to<system>/vj_texdump/<cart CRC32>/as a PNG, for
pack authoring. Tiles are identified by a hash of their raw source bytes only —
the palette is advisory metadata, never identity, because the Jaguar blitter
never sees one. - Texture Replace (
virtualjaguar_texture_replace) presents packs from
<system>/vj_texpacks/<cart CRC32>/<hash>.png, and the option is shown only
when a pack exists for the loaded title. Packs are true colour; a pack pixel
with alpha below 128 falls through to the stock pixel instead of covering it. - Tier 1 (16bpp source tiles at 1x through straight-copy blits) and tier 3
(pack art on the >1x internal-resolution shadow surface) both ship this
release. Tier 3 required a parallel per-page replacement plane alongside the
existing hi-res shadow surface, since pack RGB isn't a function of the stock
CRY word the hi-res path stores. A follow-up in the same cycle wired the
RGB16-direct presentation path (packs previously didn't show there at any
resolution) and stopped static tiles — a HUD, a menu, a title card left on
screen — from ageing out to flat colour after ~16 frames. - Tier 2, indexed (≤8bpp) sources, is still not implemented. Entries of that
kind are skipped and the stock pixel presents. - Presentation-only by construction: the emulated machine, savestates and
netplay are bit-identical with or without a pack — replacement rides the
existing true-colour shadow framebuffer, gated on a per-pixel straight-copy
witness, and never writes anything the emulated machine can observe.
Every Jaguar controller (#513, #514, #538, #505)
A complete pass over the input hardware:
- Team Tap (#513) — the 16-row-select decode for the 4-player adapter, plus
the socket-3 detection diode and the interleave-immunity rules from TR10. - Pro Controller (#514) — the six-button pad's five extra buttons alias onto
existing standard-matrix keypad slots per Atari's own SDK header; the manual
never documents the device at all, so this ships as a core-option preset with
no published detection method to test against. - 6D flight stick (#538) — six degrees of freedom (X/Y/Z + TX/TY/TZ), seven
buttons plusRezero, three banks of the same bank-switching wire protocol as
the analog/driving controller, built entirely from Technical Reference V10.
This one is a best-attempt, not a verified implementation: no released or
homebrew software using it is known to exist, and the one available real-bus
validation tool (darthcloud's AtariJaguarPadtest) turns out to hardcode socket
0 to a standard pad whenever no Team Tap is present, so it cannot exercise the
6D decoder at all. The docs and the core-option help say this plainly. - Paddle interface (#505) — the
$F17C00motherboard 8-bit ADC (ADC0844),
present only on early Jaguar boards and deleted from production silicon.
BattleSphere / BattleSphere Gold's analog-stick option and Club Drive's
channel-select both read/drive it; the protocol is pinned by cross-checking
both titles' code against the ADC0844 datasheet, since no register spec for
this interface exists.
Team Tap was subsequently validated through the real bus against
darthcloud's published AtariJaguarPadtest ROM — not just at the register level
— and fully corroborated end-to-end. The 6D controller could not be
corroborated this way, for the reason above; it remains register-level-tested
only.
Voice chat over the Jaguar Voice Modem (#485)
v3.4.0 shipped Ultra Vortek's data protocol over netlink; this release adds an
actual voice path so a "phone call" carries voice, not just game state:
- Host-side capture rides the netlink discovery socket for direct/TCP links.
- RetroArch netplay gets its own voice-chat path over netplay's own
transport (#585). - A same-cycle follow-up fixed four independent gates that silently kept
voice from ever activating:read_micreturns all-silence unless a full
request is satisfiable, so a fixed 20 ms pull request never filled from one
60.054 Hz field's worth of samples; Hello negotiation gave up after 5 s
exactly when a host was waiting for a peer; the mic interface was probed once
before RetroArch's mic driver was necessarily up, latching "no mic" for the
whole run; and transmit was gated on link mode beingautospecifically.
Every failure mode was also silent — the log now names which gate applied.
Netlink wire-speed: negotiated auto (#552)
v3.4.0's opt-in 2x/4x wire-speed enhancement (#498) required both sides to pick
the same value by hand. It's replaced this cycle by a single auto mode: the
two instances negotiate the one available divisor out-of-band at link-up over
the existing LAN-discovery UDP socket, and either side falls back to stock the
instant its peer rejects the request, doesn't understand it, or never answers.
Still not authentic — a real Voice Modem or JagLink cable is exactly this
slow — and still off by default.
Widescreen aspect-ratio toggle (#530)
virtualjaguar_widescreen (default off) reports 16:9 to the frontend instead
of the Jaguar's native 4:3, for a cosmetic horizontal stretch. The Jaguar has
no wider-viewport hardware mode, so this is presentation metadata only — the
emulated framebuffer is bit-identical either way. Global option only; no
per-title gating yet, since no corpus evidence exists for which titles look
acceptable stretched.
Per-title known-bad entries (#464)
titledb could previously only opt a title in to a setting. It now carries a
negative[] class that refuses an unsafe per-title default with a warning
while never overriding an explicit user choice. Ships with zero rows —
this is the mechanism, not the data. The motivating case, Cybermorph under RISC
overclock (#463), stays blocked: headless investigation came back clean and
the deciding experiment hasn't run.
Performance (epic #569)
A profiling pass across the whole pipeline, prioritized by where the time
actually goes rather than by intuition:
- RISC idle-loop fast-forward (
virtualjaguar_risc_idle_skip, off by
default) — the DSP and GPU interpreters spend 74–99.7% of every frame inside
a 3–5 instruction wait loop while still fully interpreting it. A tightly
gated extrapolation (whitelisted loop shapes only, verified fixed-point across
three snapshots) skips the redundant iterations. It's disabled by default
because it's turned off entirely under any timing model, non-stock RISC
clock, blit memoization, single-step, or an armed trace/watchpoint — each adds
per-instruction state the extrapolation doesn't model — and hasn't yet earned
default-on status. A/B verified byte-identical (framebuffer, audio, periodic
savestate digest) across seven titles including two CD games. - Build flags: ELF targets now build with
-fvisibility=hiddenand
-fno-semantic-interposition(fewer GOT indirections per global in hot
loops), Android'sAndroid.mknow inherits real optimization flags, and
classic_armv7_a7's-Ofastnow actually takes effect — it had been silently
overridden to-O2by a later-Oflag on the compile line since the
platform block was added (#516). - Fast blitter routing through the inline RAM helpers, cutting redundant
JaguarRead*/Write*dispatch calls per pixel. - RISC interpreter quick wins — one-call long reads in
GPUReadLong, and
single-shiftSH/SHAinstead of 32-iteration loops. - Event scheduler now packs live events instead of scanning all 32 slots per
dispatch. - 68K hook-chain collapse — the CD-HLE/Memory-Track/boot-strategy hook chain
is skipped entirely when none of those subsystems are active. - TOM BG line-buffer clear widened from byte to word stores.
On-device profiling (#510)
RETRO_ENVIRONMENT_GET_PERF_INTERFACE is now wired, with scoped counters
around the real per-frame consumers (68K, GPU, DSP, OP halfline render,
blitter launch, DAC/audio mix). This matters because every profiling tool this
project had was host-side; none of it reaches a locked-down tvOS device.
Gated at runtime on a null callback and proven inert when the frontend
declines. Two RetroArch traps were found and documented in the process:
perfcnt_enable off means every counter reads zero (indistinguishable from
broken instrumentation, not "off"), and RetroArch itself accepts the
environment call unconditionally, so ~2,000 indirect calls/frame happen during
ordinary RetroArch play — negligible, but not the never-taken branch the
header originally claimed for a declining frontend.
The capture tooling for an A10X measurement shipped this cycle (#563), but
the on-device capture itself has not been run. Desktop profiling shows GPU
RISC interpretation at ~74% of instrumented time against the blitter's ~17%,
which is the current best guess at where a real optimization pass should
start — but #509 (the epic this all serves) stays open until that number is
confirmed on the actual hardware it's about.
Purpose-built microbenchmark ROMs (#536)
Five deterministic, engine-isolated benchmark ROMs (68K-only, GPU
arithmetic-loop, GPU branch-heavy-loop, DSP-loop, blitter fill-throughput),
each asserted in CI so a performance regression on one engine shows up without
the noise of a full game trace. Replaces yarc.j64 as the default
make benchmark target, whose GPU spends 73% of its time in a spin loop and
was measuring the wrong thing.
Bug fixes
- Club Drive
SIGABRTatrisc_clock_scale=2x(#565) —OPProcessFixedBitmap's
REFLECT-mode pixel loop walked backward throughcurrentLineBufferwith no
lower bound; a garbage object-list phrase drove the write pointer ~3 KB
behindtomRam8[0]and corrupted an unrelated heap pointer, aborting on the
nextfree(). The crash log'sdsp_pc_escapewas a red herring — a harmless,
already-handled-1PC from a delay-slot write. Fixed by clamping all six
OPProcessFixedBitmappixel-store paths to TOM's actual line-buffer bounds. - World Tour Racing CD FMV freeze, part one (#564) — HLE's
CD_readwrote a
synthesized status word into the same GPU RAM address range where WTR uploads
and runs its own FMV decoder, clobbering a live jump-table slot mid-execution.
The GPU stayed busy afterward (no crash signature) but never produced another
frame. Fixed; FMV now sustains motion through frame ~660 where it previously
froze at ~240. A second, mechanistically distinct freeze remains around
frame 660 — see Known issues (#589). - Android CUE/BIN case-sensitivity (#566) — a CUE sheet's
FILEline and the
extracted.binfilename can differ only in case; NTFS resolves that
silently, Android's case-sensitive storage does not. Adds a case-insensitive
directory-scan fallback for the CUE-referenced path. - RPi / cross-compiled ARM64 shipped the scalar blitter, not NEON (#560) —
the publishedplatform=unixaarch64 buildbot binary (what a Raspberry Pi
user actually installs) never setARCH, so it silently fell through to
scalar despite NEON being architecturally mandatory on that target.ARCHis
now derived from the cross-compiler triple; a regression guard
(simd_matrix_check.sh, 22 rows) is wired intomake test. Android's own
build (Android.mk) was never actually affected — a false alarm in the
original report. - Per-SoC Raspberry Pi tuning —
-mcpu/-O3set per RPi target now that the
SIMD selection above is trustworthy. - Netlink device-mismatch warning was dead on the
vj_netlink.txtand
VJ_NETLINK_HOSTpaths (#501) — it compared against the raw option value
instead of the resolved peer address. - Missing
C_JERENAgate on the DSP's own CPUINT raise path (#499),
closing out the same interrupt-gating class v3.4.0 fixed for the ASI path.
Testing
- Voice modem over libretro netpacket now has automated end-to-end
coverage (#494). - Team Tap validated through the real bus against AtariJaguarPadtest —
closing a blind spot the 6D work itself flagged: register-level tests call
the decode entry point directly and structurally cannot see a
frontend-shaped defect. (The 6D controller could not be validated this way;
see Highlights above.) - Tier-1 private ROM store — ROM-gated tests that previously skipped
silently can now fetch their corpus from a GitHub release asset or S3/R2
backend. - Deterministic A/B in CI (#534) — perf changes are now measured by
cachegrind instruction counts instead of wall-clock time, which is noise on
shared CI runners.
Documentation
docs/jtrm-*.mdprovenance corrected (#522) — 21 of 23Source:lines
cited source code rather than the manual, making the "these supersede
source comments" claim circular. Every line is now labelled honestly, and
the load-bearing clock/timing and interrupt sections carry real manual page
citations. Two real doc/manual disagreements were found and recorded rather
than silently patched.- True-colour A/B capture recipe (#506) — a deterministic pipeline (same
frame, same input, one option changed) plus the measured result that only
Cybermorph shows a visible difference among the titles sampled.
Infrastructure
- Windows
chdmanCI build ~2.2x faster via ccache plus a Windows Defender
exclusion on the build directory. Not user-facing, but worth a line — it was
a meaningful chunk of every Windows CI run.
Known issues
- World Tour Racing freezes a second time, around frame ~660 in HLE CD
mode, after the fix above resolves the first freeze. Preceded by an unusual
CD_read(non-ASCII tag, misaligned destination, targeting a disc region no
prior FMV chunk touched) and confirmed mechanistically distinct from the
first freeze. Tracked in #589. - On-device performance work is not finished. #510 delivered the
measurement plumbing and #563 delivered the capture tooling; the actual
per-subsystem millisecond breakdown on an A10X has not been captured, and
the optimization phase is deliberately blocked on it. Tracked in #509. build-Linux i686can still go red ontest_frontend_pacing's
fastest-frame assertion — that runner's throughput has degraded versus
historical measurement. The assertion now prints CPU steal and load/core on
every run so the next failure is evidence rather than a guess. Tracked in
#421.- 6D flight-stick support is unvalidated against any real program — see
Highlights. Two ambiguities in Technical Reference V10 itself (an axis sign,
three torque signs) are resolved by best guess, not derivation. - titledb's negative-entry mechanism ships with no data — Cybermorph under
RISC overclock (#463), its motivating case, remains unresolved andblocked. - Same-host netlink auto-negotiation usually will not confirm when two
cores share one machine's discovery port. It fails safe — both sides run
stock — and cross-machine play is unaffected. - Defender 2000 still hangs at level start under
m68k_clock_scale=3x
(#460) — root-caused this cycle to a GPU task-dispatcher race (the 68K
outruns the game's own handshake and the GPU consumes an unfilled descriptor
slot) but not fixed. 2x and below are clean in every tested pairing; anyone
hitting this should drop the 68K overclock to 2x.
Stats
186 files changed, 30476 insertions(+), 2199 deletions(-)
184 commits since v3.4.0
Downloads
CI publishes builds for 16 platforms with this release. Nightly builds from
develop are available under the rolling nightly prerelease — note those are
gated on compiling, not on the test suite.
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
5bf107a067d769d7a11f779ee4513090991126c83c9e7bc041ac62f567fb34b4 cue2cdi-windows-x86_64.exe
c83b6fa13092cf3ef1f5e85515b4290c8b848e6820543547e4504eb45298f139 jagcd-tools-linux-x64.zip
70b4b24429317823f90974fff1ae175ea4651022dbf63d8b6a30c7ed7a7d9051 jagcd-tools-macos.zip
e9090b0d22e789fe32cfeab5b2a3bce9e3020eca8764cb5a9e6e4bac45810c86 jagcd-tools-windows-x64.zip
b981ac88272d463a2c40bf087907ce3ef8ea19f35b6bc0124ab047d1a68ec132 virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
f6e940b75a707720a063ddb38e65fa50bba7a8306310935b2f3c38e1de5cd687 virtualjaguar_libretro-android-arm64-v8a.so
1c836d7e29515b426a50bea37853e55fb8625333b7a79bff69e79b280d90a535 virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
56f8bc42a4f92e77880d4213ebd12a0a58575a534ef154e267c1728c15b97702 virtualjaguar_libretro-android-armeabi-v7a.so
25445184bbf0319b39cb26ba7a442f4032d4757cab4da1b7a90a91d7000e5ad6 virtualjaguar_libretro-android-x86-debug.tar.gz
a5e44fed2b9edadbe3a76fac4300627b727fc89f8f4dd034ea25d3eb99dd283c virtualjaguar_libretro-android-x86.so
1fae470061c763dbe31a4b779dcd2c64508420d17bc20f916a96e137f4d42fe4 virtualjaguar_libretro-android-x86_64-debug.tar.gz
f39016a729051c38180e929271cedfe31cf16ccb3a128bf08835f55a571592ce virtualjaguar_libretro-android-x86_64.so
1012c76b49a1a2b6d15b3e6399cb2069936b12339aa97d07b5f2b04b36aba88b virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
840cdc64cb5b1e395b68ca99772d50e2a5a6e688b77b84150796cc32f8af1a48 virtualjaguar_libretro-emscripten-wasm.bc
9315b64a540489011d11aa407aa65bae2077e75134e38c574278053492635ad5 virtualjaguar_libretro-ios-arm64-debug.tar.gz
425d2eb99676f413036b4db179060911d36a1fbdd4412993a4965d6eca8e04f6 virtualjaguar_libretro-ios-arm64.dylib
3d4e4e2d2d03883fa577f92efa2e5782d46b3cfbc4152454c8eb6e8ec6d5f9ac virtualjaguar_libretro-linux-aarch64-debug.tar.gz
8b1bee3ab20a116f9656512b2b4cf4e7710bd4236284f5a5a4116592d7c7dc49 virtualjaguar_libretro-linux-aarch64.so
2d64afab449caa0092c98f69082783985fd4fd87dfb6597ab0846399f0a6fd9a virtualjaguar_libretro-linux-i686-debug.tar.gz
d0fa3fdc106eca130f197194335adaa64ade9e2cc1efb5c4242723213f631063 virtualjaguar_libretro-linux-i686.so
4dd6f7a7f9cd2637b1f3320acd61e5bbadd4daa306909ba9ab0b61bdc6beb2a1 virtualjaguar_libretro-linux-rpi1-armv6-debug.tar.gz
392a65f8381bd0213a7a634c7a29e97bd98f11ef991be3250c5f384ba47aecc3 virtualjaguar_libretro-linux-rpi1-armv6.so
a9b30cffe7939a59812be1435625370050b5cfcc6525d0ac6fbae4c8753c2049 virtualjaguar_libretro-linux-rpi2-cortex-a7-debug.tar.gz
41350509dac2f1a64dcb20bc340d6f031dd21c2b4297e06fb08216fb30e7a377 virtualjaguar_libretro-linux-rpi2-cortex-a7.so
f63606c939f2729fc1328cbc07631636edf8133c9f8f01b2985afcfb85e51deb virtualjaguar_libretro-linux-rpi3-cortex-a53-debug.tar.gz
a47acfd3d86f60d515dfd59ed8668fcb58886fec61992c15c3ff19610c82e892 virtualjaguar_libretro-linux-rpi3-cortex-a53.so
c5f9232ca8cc543caf8a407fbdd58cbd6e01c300ec5da0b55b9ea633c18dc9d6 virtualjaguar_libretro-linux-rpi3_64-cortex-a53-debug.tar.gz
7dfb3d2986104f60488231d37eaa72b51c706a168f02b865efcde99e535f61d8 virtualjaguar_libretro-linux-rpi3_64-cortex-a53.so
795f3f31bee8ddb3fdc7ad5cd6daed77c7e207e8147ac36cad7ccf51ac4a6c51 virtualjaguar_libretro-linux-rpi4-cortex-a72-debug.tar.gz
e19fd13a1286f093f6bc709158f0205b4670c8c9700b792ab82154ba7766dcd1 virtualjaguar_libretro-linux-rpi4-cortex-a72.so
7f9628333d74c18fa67216009c07f4d98498e13026708aad0e39a041ff5bb97e virtualjaguar_libretro-linux-rpi4_64-cortex-a72-debug.tar.gz
5fd564bfd45c5c5776014bb67b113af9358ab3615e2883607d495d090ebd2615 virtualjaguar_libretro-linux-rpi4_64-cortex-a72.so
a0073791f9687297806e925adf1958011c764291aec59880750e0cfad648cc77 virtualjaguar_libretro-linux-rpi5-cortex-a76-debug.tar.gz
655537a6b181159cbf2ab9e8b20c7f7d0ee8568de6296475afd2893cf8f02ca1 virtualjaguar_libretro-linux-rpi5-cortex-a76.so
63f8893e9ecd1973fbbe187a36a27d1fe3f6a53b2923f2ee1b139fd2ee17285c virtualjaguar_libretro-linux-rpi5_64-cortex-a76-debug.tar.gz
7675b8f686e721094e38e9249d690b8c7accdc8de9350bab180c58c07b0577fd virtualjaguar_libretro-linux-rpi5_64-cortex-a76.so
027133f657a012a29459cea91a32b4867be6e5c6efb671a48c17ae0f95e1e413 virtualjaguar_libretro-linux-x86_64-debug.tar.gz
512a209e692ef6b412b50944d8b940b855b82e60195d9cbf02c4d2fbce6c11c1 virtualjaguar_libretro-linux-x86_64.so
f986cb1d83f7dc86286175d282f79e0d592e62e8d03e1efe8cce932da0ebc5d9 virtualjaguar_libretro-macos-arm64-debug.tar.gz
789c207a3a31b13cd67da2058c243b56f60fd6b40d0c65a9f6a0f77530aea346 virtualjaguar_libretro-macos-arm64.dylib
2153194be00e0ea766b09611d1bffb064bcde410109a87b6f53b85b0f374d81a virtualjaguar_libretro-macos-x86_64-debug.tar.gz
05a202ec1310c1ee0f20e2a89a5d1c699f23ae05f5342d08154f8f5733d8e71f virtualjaguar_libretro-macos-x86_64.dylib
569fd7561763fc7e18efde2dcdedb9ec83ff02506ca43aeac5f36c01f3f9bf46 virtualjaguar_libretro-switch-debug.tar.gz
193fa6435bbeb0ec605a427016812aee5849f57da4aaa8d330902f8d6b868263 virtualjaguar_libretro-switch.a
4aed8c4e0583b8f06cc00803c9506487fc506b41ce6bc920a324f3c2c295376b virtualjaguar_libretro-tvos-arm64-debug.tar.gz
ad97c67406d1fa41af5e4877086335de3c4af31ced2ca016c6a556f15758f658 virtualjaguar_libretro-tvos-arm64.dylib
1c00c0bdf1d2bb723d7835a0d3b3632a968a9d7c70de95eebdeab8ddc8de10d6 virtualjaguar_libretro-vita-debug.tar.gz
727bfd70857fd6f3b55172442cb7f8afee2c9bdf75399235c97d0c09643b1d06 virtualjaguar_libretro-vita.a
20fff469dc7174d2081f81b02c8998c402db4af0c5f1c864f5e1bd72eb9bf7ca virtualjaguar_libretro-windows-i686-debug.tar.gz
4b019bef1e307fbd443faf5a8c6d348916237195df86a46e9269de04c468c004 virtualjaguar_libretro-windows-i686.dll
412689294d5841932fac618427f7dee0c67876c5b9765486293f35ccf64cf112 virtualjaguar_libretro-windows-x86_64-debug.tar.gz
99a98f6d84d8e6365cbcf514debaf1a4a3698c339080e70f557adcc09c891a9a virtualjaguar_libretro-windows-x86_64.dll
902307f1fb5f1afa18aeaa6ebe1a94cfdf8c5180b49a8f3f0dcd3f4f94d0997f virtualjaguar_libretro.info