mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
fd2570ff13
Pinned the exact leaking crossing (xprobe detail): entry to func_8001A954 is a single JAL, src 0x8001A630 (the main loop's only call site), once/frame. Implemented (A): surface interp JAL/JALR to game-text targets to the owner trampoline (gated by psx_game_address_in_text so overlay-native keeps the nesting contract). §19 result: leak STILL CLIMBS (~0.875 KB/frame, down from 1.17) -> reduced, not eliminated -> REVERTED. It is a guest CALL-CYCLE (main_loop 0x8001A51C <-> func_8001A954): surfacing the interp side just relocates the nest to the compiled-side jal back to the main loop. Can't fix a call-cycle by surfacing one crossing. Leak is ~1 host frame PER FRAME (not per cycle iteration) -> the loop mostly returns; exactly one call/frame fails to unwind. Real HW idles forever (balanced), so either we mishandle one specific return/frame (Hyp C, contained) or it needs the §11 continuation-passing redesign. DECISIVE NEXT = oracle (psxref): does real HW return from func_8001A954 to 0x8001A634 each frame, or never? Stop surfacing single crossings (block-loop §20 + JAL/JALR §22 both dead ends). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>