mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 19:07:47 -04:00
cd99b7c9bc
Nymashock measures a seek with CalcSeekTime(CurSector, SeekTarget). CurSector is the physical read head, and an established read keeps it two sectors ahead of the sector handed to the guest because HandlePlayRead fills the two-slot SectorPipe before the guest drains it. source_explicit_seek_cycles timed a SeekL/SeekP from the delivery cursor instead, so a seek issued mid-read travelled two sectors too far and completed 209 cycles late at double speed. Command_Reset already applied the same +2 lead. Bio Hazard return 233568 is the first place this is observable: a mid-read SeekL to LBA 141535 completed 209 cycles late, which pushed the driver's following ReadS past the frontend return boundary and left the guest one CD command behind for the rest of the ending tail. Evidence, resuming the admitted capture state at return 233500: - armed completion moves 132227220226 -> 132227220017, the value the source's own PSRCounter samples at returns 233560-233568 independently imply - all 5702 compared returns 233501-239202 match the admitted reference on RAM page hashes and return clocks - raw RAM at 233567/233568/233569/235000/239202 matches the stock capture byte for byte, closing the nine-byte terminal difference Cold full-route requalification and the Tekken 3 / Pepsiman cold-prefix regressions are still outstanding; this commit records the component result only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>