Files
psxrecomp/runtime
Alex Vanderveen 2676edbfb0 cdrom: the no-IRQ refill must advance the read pointer
The probe answered it: ring_starved = 1,128,960 drains found their slot
exhausted while another slot held unread data, and ring_norq_refill = 70
continuations landed where nothing could reach them -- exactly the 70
that surfaced as int1_lost in all three failed ring attempts, with every
Setloc retried.

deliver_read_sector_without_irq() raises no INT1 because it is a
CONTINUATION of a drain already in progress, not a new notification.
With one buffer that refill landed in the very buffer being drained, so
the DMA flowed seamlessly. A ring reproduces that only if the read
pointer follows the refill; leaving it behind strands the continuation
and stalls the transfer mid-sector.

This is why all three earlier attempts failed identically: they differed
only in the notification path, and the notification path was never
involved. One line.

With it, the sequence the oracle performs becomes reachable: 111 drained
from its slot, the continuation 112 held in the next and announced by
the pended INT1, 113 in a third -- rather than 113 overwriting 112 and
being drained twice.

Instrumentation kept: ring_starved is now the regression tripwire.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 12:55:58 -04:00
..
2026-08-15 14:46:26 -07:00
2026-08-13 10:37:18 -04:00
2026-07-29 03:18:10 -04:00