Raises IRQ1 from code poked into RAM, saves, acks with GP1(02h), loads, and checks the flag is back. Fails with the restore in GPU::deserialize removed.
Bumps nugget to d9e0baca (pcsx-redux/nugget#161 on the current pin line): OpenBIOS waits long enough for Init's completion, and its free survives a user heap the game wrote over. Fixes WipEout (USA) under OpenBIOS (#1913). The new cdrom tests boot the test disc through OpenBIOS without -loadexe.
An acked response whose bytes were never read kept its slot, so the next one was never delivered. OpenBIOS's shell acks GetID's INT3 without reading it and sat waiting for INT2 forever; no disc booted. The unread bytes stay readable until the next response replaces them.
The interpreter traps a COPz branch when SR.CUz is clear, COP0 included,
but both dynarecs only ever branched. Test SR.CUz at runtime and, when it
is clear, take the exception and leave the block before the delay slot,
committing a pending load first as the interpreter does. Adds the dynarec
run of cop-branch, whose CU-clear cases all failed before this.
The register path masked the guest register in place and never wrote Cause, so mtc0 $reg, $13 left Cause untouched and cleared bits 10-15 of $reg. Mask into a scratch register and store it, as the constant path does. src/mips moves to nugget's mtc0-cause-redux-pin, which adds the sr-write case for it.
ADD/ADDI/SUB overflow in a taken branch's delay slot left the branch
pending, so it overwrote the exception vector. SYSCALL and BREAK cleared it
themselves but looked in the wrong delayed load slot and aborted. Fixes
#2224 and #2225.
A branch in the delay slot of a taken branch leaves its own jump pending
when branchTest runs. Taking an interrupt there let that jump land after
the first instruction of the exception handler, so the handler never ran
and SR kept interrupts disabled. Drop the pending jump and take the
interrupt with BD set and EPC on the branch, which RFE then runs again.
Threads of Fate stalled on this in the interpreter.
A relative branch adds its offset to the PC register, which in the delay
slot of a taken branch already holds that branch's target, and the second
branch's own delay slot is the instruction at that target. The interpreter
takes its base from the pending PC load; both dynarecs compile the taken
case as its own path when the first target is known at compile time.
A -dofile or -exec error took the emergency exit, which leaves the uv
thread unjoined and aborts the process with "terminate called without an
active exception" after the traceback is printed.
Each ReadN reset the drive to idle and pushed the seek 20 ms out, so a game that resends Setloc and ReadN faster than that never got a sector (Giftscop, #2260). On an SCPH-9002 the resent loop still reads. Bumps nugget to the branch carrying simpleReadingResendLoop.
A cue-less image recognised as Mode 1/2048 still had its track length computed from 2352-byte sectors, so the last ~13% of the disc fell outside the track. The new CD-ROM code rejects seeks and reads there, which hangs games whose files sit near the end of the image.
The CD-ROM rewrite merge brought back an EDC/ECC recompute in
writeSectorAt's M2_RAW case, which overwrites the tail of a raw payload
whose subheader says form 1. M2_RAW means the caller owns those bytes,
as everywhere else in the builder.