mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 10:59:16 -04:00
c78eeb72cc
The cycle-accuracy emitter emits calls to 12 timing runtime functions (psx_cyc_load_*, psx_icache_fetch, psx_muldiv_*, psx_gte_*, psx_slice_block, ...) + debug_server_cyc_observe + g_debug_last_store_pc. Overlay DLLs never got these symbols, so every overlay failed to link -> 0 native shards -> 100% interpreter (unplayable). Fix (option A): expose the 12 via the overlay callback ABI. - overlay_api.h: +12 timing callbacks in OverlayCallbacks, ABI 8 -> 9. - overlay_loader.c: populate the 12; add warn_on_cgtag_mismatch() (loud warning when shards exist under the wrong cg-hash). - compile_overlays.py: 12 preamble forwarders + local g_debug_last_store_pc + -DPSX_NO_DEBUG_TOOLS. - cosim.c/main.cpp: input-cosim setpad + held pad (deterministic input). - cosim.py: env-overridable COSIM_EXE/CWD/GAME. KNOWN REGRESSION (patched on a follow-up branch): Tomba pause menu (triangle) wedges. Root-caused: an IRQ taken mid-block resumes at the function entry leader instead of the interrupted PC, re-zeroing the menu's VSync wait counter (scratchpad 0x1F8001E8) every frame so it never reaches its target. Not the scheduler (LLE reproduces) and not timing math -- interrupt-resume re-entry. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>