Skip to content

Tags

Tags give the ability to mark specific points in history as being important
This project is mirrored from https://*****@github.com/libretro/virtualjaguar-libretro.git. Pull mirroring updated .
Successfully updated .
  • v2.3.1

    Polish release — 17 commits since v2.3.0.  No new emulation features;
    this is an infrastructure / triage / safety pass that was on develop
    between v2.3.0 (April 2026) and now.  None of the long-standing audio
    or game-compatibility issues changed; the difference is that future
    bug reports about them have a real chance of being actionable.
    
    - **Runtime crash watchdog** — a new opt-out core option,
      `Crash Detect`, logs `gpu_pc_escape` / `dsp_pc_escape` / `gpu_wedge`
      / `dsp_wedge` / `video_stall` events to the RetroArch log when a
      game hangs or goes black.  Bug reports about freezes can now be
      triaged from the log alone, without save states or replays.
    - **DSP wedge fix** — when the DSP PC escapes into unmapped memory,
      the inner exec loop now drains the timeslice instead of busy-looping
      for minutes.  This was a v2.3.0 regression that made the headless
      test harness hang on Wolfenstein 3D for 12+ minutes per session.
    - **Audio presence test** (`test/test_audio_presence.c`) — counterpart
      to the existing clipping check.  Catches the silencing-regression
      class where a "fix" drops a game's RMS to zero (clipping check
      passes silence as PASS).  Iron Soldier 1 is the in-tree baseline
      (RMS ~1175 on develop).  Both audio tests now run in `make test`
      and CLAUDE.md documents that audio / DSP changes must clear both
      before being declared done.
    - **Bug-report template** clarified — the BIOS-mode dropdown
      previously implied users needed to supply `jagboot.rom` in
      `system/`, which has never been the case for this libretro core
      (the BIOS is bundled in the dylib).  The template now distinguishes
      the boot **path** users had selected, which is what bug triage
      actually cares about.
    
    - **DSP**: bail out of the exec loop when the DSP PC is in unmapped
      memory.  Avoids a busy-loop that burned the entire timeslice
      emulating opcodes fetched from bus-default 0xFFFF.  Wolf3D headless
      test now completes in <30 seconds, matching v2.2.0 wall-clock.
    
    - **`src/core/crash_detect.c`** — opt-out runtime watchdog.  Once-per-
      frame hook with cheap PC-range checks and a 256-pixel rolling
      framebuffer hash; off-mode short-circuits at the first instruction.
      Modes: `enabled` (default) / `disabled` / `verbose` (heartbeat
      every 600 frames).
    - **`test/test_audio_presence.c`** — asserts the audio onset is
      reached and the window RMS lies in `[floor, ceiling]`, with no
      long zero runs.  Per-ROM thresholds via CLI args.  Wired into
      `make test` against Iron Soldier 1.
    - **`test/tools/test_video_dim_log.c`** — diagnostic harness that
      prints every video resolution change and black-frame streak.
      Useful for correlating "crash after N seconds" reports against
      actual hardware events.
    
    - Dependabot bumps for GitHub Actions (codecov-action 5→6,
      actions/cache 4→5, actions/labeler 5→6, actions/upload-artifact
      4→7, cirrus-actions/rebase 1.4→1.8).
    - `test/tools/test_frame_timing` added to `.gitignore`.
    
    - **CLAUDE.md** — new "Runtime crash watchdog" and "Audio / DSP work
      — required tests" sections.  Pins the rule that DSP/audio PRs must
      clear both `test_audio_clipping` AND `test_audio_presence`, with
      PR #170 cited as the precedent (clipping passed on a "fix" that
      silenced Iron Soldier 2).
    - **Bug-report template** — clarified HLE vs Real BIOS distinction.
    
    - **Doom**: runs at ~2x speed, music silent.  Bus arbitration / cycle
      accuracy modeling not implemented; PR #169 (draft) is in design
      limbo.
    - **Wolfenstein 3D**: no audio.  The dsp-diag tool shows the DSP
      PC drifting to $0006EE in main RAM around frame 48 (Bank1
      registers never finish initializing); the runtime watchdog
      subsequently logs `dsp_pc_escape pc=$00FFF004E8` once the
      drift hits unmapped register space, and the new wedge bail-out
      (this release) prevents the headless harness from hanging on it.
      Long-standing — present in v2.2.0 too, not a v2.3.x regression.
    - **Skyhammer / Iron Soldier 2**: saturated square-wave audio in HLE
      (DSP engine state not fully replicated).  Both tests deliberately
      flag these as `EXPECTED-FAIL` in the suite manifest until a real
      fix lands.
    - **Battle Sphere**: menu navigation issues.
    - **Jaguar CD**: PR #120 is rebased and builds, but multi-track CD
      games still break mid-game; not in this release.
    
    18 files changed, +1,004 / -17 lines across 17 commits.
    
    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`.
    
    libretro/Provenance fork: Joseph Mattiello (@JoeMatt, Provenance-Emu).
    
    Thanks to @checktext00 for the bug-report template fix (#179).
  • 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.
    
    - 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.
    
    - **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).
    
    - **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.
    
    - 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.
    
    - **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.
    
    263 files changed, +25,240 / -2,805 lines across 158 commits.
    
    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`.
    
    libretro/Provenance fork: Joseph Mattiello (@JoeMatt, Provenance-Emu).
  • v2.2.0

    v2.2.0 — Provenance fork release. See docs/RELEASE_NOTES_v2.2.0.md and docs/WHATSNEW for the curated changelog.