Commit Graph

169 Commits

Author SHA1 Message Date
Matthew Stanley 5a4b74f5d3 fix: report AOT recall with exact semantics 2026-07-19 17:39:55 -07:00
Matthew Stanley 205438eb98 tools: clean TinyCC staging sidecars 2026-07-18 11:15:13 -07:00
Matthew Stanley 4af125cf07 tools: align TinyCC overlay build contract 2026-07-18 11:08:16 -07:00
Matthew Stanley dbe14dfadb aot: recover safe frameless and interior overlay coverage 2026-07-18 10:13:18 -07:00
Matthew Stanley 6af5437058 tools: publish overlay shards atomically 2026-07-18 09:05:41 -07:00
Matthew Stanley ae1f1e7f19 tools: report true AOT coverage gaps 2026-07-18 08:59:26 -07:00
Matthew Stanley 32cc2e81f4 aot: bound header dispatch fallback discovery 2026-07-18 08:27:09 -07:00
Matthew Stanley 5e8cc5b8e5 aot: enrich archive discovery with safe fallback 2026-07-18 07:49:29 -07:00
Matthew Stanley 41f498fd09 aot: recover linked archives and static aliases 2026-07-18 07:25:49 -07:00
Matthew Stanley 8f90df9b43 aot: preload exact-hash BIOS resident shards 2026-07-18 05:31:03 -07:00
Matthew Stanley baf8b5928c aot: recover cross-boundary branch roots 2026-07-18 04:40:07 -07:00
Matthew Stanley 4fb144a4fd aot: preserve additive static discovery 2026-07-18 04:16:51 -07:00
Matthew Stanley 65d89a06d7 runtime: compact persisted capture addenda 2026-07-18 02:56:53 -07:00
Matthew Stanley f53569dfea aot: account for native BIOS coverage 2026-07-18 01:32:49 -07:00
Matthew Stanley 6c67f81a33 docs: record Tomba 2 static attract recovery 2026-07-18 01:21:05 -07:00
Matthew Stanley 88e471274f aot: separate code-range recall from entry parity 2026-07-18 01:18:48 -07:00
Matthew Stanley bc24934048 aot: recover raw and adjacent overlay producers 2026-07-18 00:38:26 -07:00
Matthew Stanley a544809edf aot: persist overlay capture history atomically 2026-07-17 23:56:58 -07:00
Matthew Stanley 2834f0468d aot: recover call-sparse overlay bases 2026-07-17 23:29:38 -07:00
Matthew Stanley 43cd37624a aot: discover frameless static call targets 2026-07-17 22:58:09 -07:00
Matthew Stanley 414314d412 aot_overlay_spike: robust header-table base recovery via jal self-consistency
The old delta-sweep matched export-table pointers against 0x27BD prologues,
but those pointers point at mid-function DISPATCH entries, not prologues
(measured: 0/29 hit a prologue at the true base). It scattered bases by
2-16KB and decoded data as code.

Fix: j/jal targets are BASE-INDEPENDENT (0x80000000 | (imm26<<2), since all
game code lives in 0x800xxxxx). At the true base, the maximum number of
intra-overlay jal targets land on a real prologue. recover_base() votes every
(jal-target, prologue-offset) pair for base t-o within the pointer-containment
window; the peak is unique and sharp (~2x margin). Records are emitted
page-aligned with a FILL prefix, because the runtime keys shards by a
page-aligned region_start and compile_overlays takes load_addr verbatim.
Weak-signal files are skipped (score<4 or <1.5x runner-up) -- safe coverage
loss under the per-function code_crc dispatch guard. Also dedup overlays by
content CRC (position-fixed BINs are reused across AREA folders).

Validation: generic output is byte-identical (base, region envelope, seed set)
to the live-proven tomba1_extract.py hand tool for ALL 22 Tomba 1 overlays,
with no hardcoded constants. Tomba 2's 21 A*.BIN overlays converge on a single
consistent base 0x80108F9C (region 0x80108000 +3996).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 20:19:03 -07:00
Matthew Stanley 855f253dec overlay: ABI v14 gte_precision_store_word shim + splitgen gating; AOT spike
Two provably-correct framework fixes (independent of the AOT work) plus the
play-free overlay-extraction spike tooling and design doc.

Framework fixes (accurate, safe, complete):
- ABI v14: add gte_precision_store_word to OverlayCallbacks + preamble shim +
  runtime population. The emitter emits a direct call for every swc2 (GTE
  store-word); it is stateful runtime code (gte.cpp) so overlay DLLs must
  forward or fail to LINK (undefined reference). Play-captured shards rarely
  compiled a swc2; fuller static coverage surfaced the gap. Same pattern as
  the v13 ws_player_x_bound / v10 gte_read_ctrl shims.
- Gate splitgen OFF in overlay mode (main_psx.cpp): the current recompiler's
  unconditional split-TU output deletes <stem>_full.c and emits only shards,
  which broke ALL overlay compilation (compile_overlays.py reads _full.c).
  Overlays are single small TUs with no parallel-compile benefit; emit the
  monolith. Restores overlay compile on the current tree.

AOT spike (docs/AOT_OVERLAY_PLAN.md + tools/aot_overlay_spike/, WIP):
- Play-free static overlay extraction from the disc image. Validated:
  Tomba 1 reproduces 90% of played functions + ~1964 unplayed, live-verified
  in-game (Dwarf Village runs native, zero runtime compile). Tomba 2 yields
  661 functions byte-identical to the shipped/played vault (provably real),
  all from the self-describing MAIN.EXE producer; the header-table BIN
  producer needs loader-table RE (base recovery unreliable). Generality is
  producer-dependent. Spike scripts are Tomba-specific proofs of concept
  with hardcoded paths, not a finished tool.
- Correctness is guaranteed by the existing per-function code_crc dispatch
  guard: a mis-positioned shard fails audit at compile or never fires at
  runtime -> coverage loss, never wrong execution. Autocompile self-heals gaps.

CROSS-CUTTING: the ABI v14 change is part of the overlay codegen-hash source
set, so it ROLLS the cg tag (1f2ad026 -> e8484213). On master + a fw bump,
every title's overlay cache invalidates and needs regen+reshard. Branch only;
NOT pushed; other games' caches untouched. Needs user validation before merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 18:48:30 -07:00
Matthew Stanley 3ebddf408b docs: record MMX5 and MMX6 load smoke passes 2026-07-14 23:59:50 -07:00
Matthew Stanley 411532bd87 Merge remote-tracking branch 'origin/master' into spike/load-time-zero 2026-07-14 23:09:27 -07:00
Matthew Stanley 6b069bedb8 feat: park duplicate-frame presentation smoothing
Adapted from https://github.com/mstan/psxrecomp/commit/ec889d6e5956fc4f34acfee41d87f30b24123b7f

Co-authored-by: Kareem Olim <kareemolim@gmail.com>
2026-07-14 23:07:14 -07:00
Matthew Stanley 2ceaf5abee feat: park projection and perspective correction
Adapted from https://github.com/mstan/psxrecomp/commit/ec889d6e5956fc4f34acfee41d87f30b24123b7f

Co-authored-by: Kareem Olim <kareemolim@gmail.com>
2026-07-14 23:06:38 -07:00
douglasjv 28165d6421 Expand Einhander player bounds for native widescreen 2026-07-14 23:06:05 -07:00
douglasjv 9a8cdb6772 Add typed native-wide textured edge expansion 2026-07-14 23:04:55 -07:00
Matthew Stanley 44b895e331 Merge remote-tracking branch 'origin/master' into spike/load-time-zero 2026-07-14 22:48:36 -07:00
Matthew Stanley 64b084e2a7 load: add opt-in event horizon, warm routes, and audio sink 2026-07-14 22:44:31 -07:00
Matthew Stanley 0e5c38d558 feat: add generic CD-DA playback and CUE pregaps
Adapted from https://github.com/mstan/psxrecomp/commit/0e9df70ca2da6ec67c8e7a1f3e5aaa025fddc369

Co-authored-by: Kareem Olim <kareemolim@gmail.com>
2026-07-14 20:03:02 -07:00
Matthew Stanley 7ae052534a spu: add hardware Gaussian interpolation
Port the reusable Gaussian interpolation slice from PR #16 while keeping its reverb engine on a separate branch.

Co-authored-by: Martin Penkava <mpenkava1337@gmail.com>

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 18:56:51 -07:00
Matthew Stanley 19e526d57d gpu: reject oversized hardware primitives
Apply the PS1 1023x511 size rule to every polygon triangle, line, and polyline continuation before widescreen transforms while preserving textured-command state latching.

Co-authored-by: Martin Penkava <mpenkava1337@gmail.com>

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 18:35:07 -07:00
Matthew Stanley 928085d5fb gpu: use exclusive PS1 software-raster edges
Adapt PR #14's biased 32.32 triangle edge DDA and half-open bottom/right coverage across the software raster paths, with a focused pure edge-math regression test.

Source: https://github.com/mstan/psxrecomp/pull/14

Source-commit: https://github.com/mstan/psxrecomp/commit/91a654f61dff18806f3eea43f72a30cb34430695

Co-authored-by: Kareem Olim <kareemolim@gmail.com>
2026-07-14 18:34:32 -07:00
Matthew Stanley 35684c5385 gpu: recognize shaded-polyline terminators in either phase
Adapted from NyperYuhgard's PR #13.

Co-authored-by: NyperYuhgard <93950153+NyperYuhgard@users.noreply.github.com>
2026-07-14 18:34:14 -07:00
Matthew Stanley c2b9d467e5 runtime: discover decodable unmarked overlay code
Admit post-EXE RAM to the dirty interpreter only after a real control transfer and an existing MIPS decodability check. Keep the already-merged overlay initialization guard out of this focused change.

Co-authored-by: Martin Penkava <mpenkava1337@gmail.com>

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 18:12:08 -07:00
Codex 347b6ffb01 Experiment with CPU-copied overlay discovery
Co-authored-by: douglasjv <vanderveerdouglas@gmail.com>
2026-07-14 16:13:29 -07:00
Codex edc3fd4e30 Preserve one-frame debug input pulses
Co-authored-by: douglasjv <vanderveerdouglas@gmail.com>
2026-07-14 16:02:13 -07:00
Codex b156770bbd Configure the runtime OpenGL 3.3 core context
Co-authored-by: douglasjv <vanderveerdouglas@gmail.com>
2026-07-14 15:59:39 -07:00
Matthew Stanley e247155cd6 overlay: use platform-native shared-library suffixes
Adapted from NyperYuhgard's PR #13 POSIX overlay work.

Co-authored-by: NyperYuhgard <93950153+NyperYuhgard@users.noreply.github.com>
2026-07-14 15:58:34 -07:00
Matt Stanley e5b5e309b5 Merge pull request #30 from mstan/feat/debug-client-command-parity-douglas
tools: expose existing debug-server commands in the client
2026-07-14 15:29:50 -07:00
Matt Stanley 4e31c6b71d Merge pull request #29 from mstan/feat/debug-analog-input-douglas
debug: expose analog input and stick status
2026-07-14 15:29:47 -07:00
Matt Stanley b1759ee8e1 Merge pull request #28 from mstan/park/pr13-misaligned-dispatch-diagnostics
traps: enrich misaligned dispatch diagnostics
2026-07-14 15:29:44 -07:00
Matt Stanley 75691a4546 Merge pull request #27 from mstan/park/pr13-overlay-cache-inventory
overlay: add opt-in cache inventory telemetry
2026-07-14 15:29:40 -07:00
Matthew Stanley 12934ed2c5 data-shards spike: memoized pure-function replay (capture/verify/replay + cycle-faithful credit)
- runtime/src/data_shards.c + include: read-before-write recorder fed from
  the memory chokepoints; byte-verified replay (kernel-bless pattern);
  recorded-cycle credit in slices through psx_advance_cycles +
  psx_check_interrupts_at; purity poisons (MMIO/DMA/thread-switch/budget);
  .dss persistence under the unified cache dir; TCP data_shards cmd.
- emitter: [data_shards] funcs -> psx_datashard_enter at entry +
  psx_datashard_ret at jr-$ra sites (rolls cg-hash).
- obs: phase_hot set=static keyed on new g_psx_last_fn_entry entry stamp
  (current_func dispatch stamp survives post-IRQ resumption and pooled 55%
  of static samples on kernel 0xF40); TCP starv_ring query for the
  always-on PC-sample ring.
- docs/DATA_SHARDS.md: design, soundness model, gates, FMV exclusion.
2026-07-14 11:08:02 -07:00
Matthew Stanley 7350f2413a traps: enrich misaligned dispatch diagnostics
Adapted from NyperYuhgard's PR #13.

Co-authored-by: NyperYuhgard <93950153+NyperYuhgard@users.noreply.github.com>
2026-07-14 10:20:08 -07:00
Matthew Stanley 43e5f286b3 overlay: add opt-in cache inventory telemetry
Adapted from NyperYuhgard's PR #13.

Co-authored-by: NyperYuhgard <93950153+NyperYuhgard@users.noreply.github.com>
2026-07-14 10:19:54 -07:00
Matthew Stanley 7d1fadb07c runtime: report simulated-vblank FPS telemetry
Adapted from NyperYuhgard's PR #13.

Co-authored-by: NyperYuhgard <93950153+NyperYuhgard@users.noreply.github.com>
2026-07-14 10:19:50 -07:00
Codex dbaebaf37a Expose analog input through debug controls
Co-authored-by: douglasjv <vanderveerdouglas@gmail.com>
2026-07-14 10:01:12 -07:00
Codex 1211d09bf7 Expose existing debug server commands in the client
Co-authored-by: douglasjv <vanderveerdouglas@gmail.com>
2026-07-14 10:01:01 -07:00