mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
b00b81f5e9
P3 step 1 (FAITHFUL_TIMING_PLAN.md): both backends now account guest CPU cycles through ONE function, runtime/include/psx_instr_cost.h::psx_instr_base_cycles(insn), so they can never disagree (the -8 drift class). Interp routes its 3 per-insn charges (exec_delay_slot, dirty dispatch loop, precise slice) through it; the recompiler sums it over each block (+ the outside delay-slot clone) to fold into the compile-time block charge. Stage 1 = identity (1 cycle/insn) = the proven baseline, so the seam is BEHAVIOR-PRESERVING: regen is byte-identical (verified, full.c + dispatch.c) and Tomba 2 still reaches the intro FMV (i_stat 0x8D streaming). Stage 2 edits ONLY psx_instr_base_cycles (transcribe real R3000A costs from in-tree Beetle cpu.cpp/gte.cpp + psx-spx, verify each vs Beetle) and both backends update together. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>