Skip to content
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).