mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 18:25:35 -04:00
44ca157481
Adds sio_advance(uint32_t cycles) — drives ONLY the cycle-paced
shifter+ack scheduler. Does NOT touch the legacy sio_irq_pending /
sio_irq_countdown (that's the unconditional-decrement that drained
pad timing in earlier slices when called from the per-block dispatch).
Wires psx_advance_cycles → sio_advance. Until 1.0e-e2 reroutes the TX
path through the shifter, sio_advance returns immediately at the
g_sio_timing_active gate without doing any work. So this slice is
behavior-neutral by construction:
- No TX path change
- No legacy IRQ countdown change
- pad polling, CROSS, card READ_DATA, "MC" bytes — all baseline
Telemetry counters: sio_get_advance_called(), sio_get_advance_with_work().
Validation against 77e66f9:
- t=20s tx_writes=920, t=30s tx_writes=4632 (matches baseline)
- pad arm audit 4680/4680 armed, no_ack=0
- 4x CROSS all succeed
- card txn distribution 8/16/10 (10 txns reach READ_DATA)
- "MC" bytes flow at txn 0 bytes 10-11 (0x4D 0x43)
- psx_cycle_count: 1.72B (t=20s) → 10.11B (post-CROSS)
- byte-15 abort persists (expected; 1.0e-e2 is the slice that fixes it)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>