Skip to content

Commit e69d9ba

Browse files
feat(drivers): EXP17 -- pin R3Z v4.70's FIXED ata_bd; our SDK snapshot predates "atad: fix device probing"
An independent Codex audit did the check I proposed and then talked past: compare the ata_bd BYTES, not the source. They differ. My "OPL and R3Z run the same driver we do" claim was true at the source level and FALSE at the binary level -- and it was load-bearing under every theory I built and every build that wasted a tester's evening. Our container (ps2dev:v2.0.0, SDK 2026-05-16) predates ps2sdk ab3c5a88 "atad: fix device probing". R3Z v4.70, official OPL and RiptOPL PS2DEVLATESTSDK all ship past it. Pre-fix ata_init_devices resets ONCE, assumes device 0 is selected, probes it, then selects device 1 and probes -- with no per-device reset/select. Fixed: per-device soft reset + explicit ata_device_select(i) before each probe. Verified against .codex_refs/ps2sdk (the fixed loop is present; old form survives only under ata_dvrp_workaround). Codex reproduced BOTH release hashes by rebuilding each SDK revision with the pinned compiler. The matrix explains every data point for the first time: fixed ATA + current BDM = works (R3Z v4.70, OPL, RiptOPL LATESTSDK) pre-fix ATA + current BDM = HANGS (our EXP12-15, both testers) pre-fix ATA + old R3Z BDM = works (our rolling; old BDM never pushes the bad probe path -- and has no GPT) An aftermarket SATA bridge + a probe of device 1 on a bus never told which device answers = a wedge inside _start, uninterruptible: the frozen 45. The change: iop/embed/ata_bd.irx, carved byte-for-byte from R3Z v4.70's shipped ELF, sha256 16c5d9f00d64be5ea4848b53da89bb5f89a54004957bae47d01dee3c354742f4 (11,917 bytes vs the pre-fix 11,709 -- the +208 is the fix). Verified here: hash, ELF magic, atad/dev9/bdm module strings. No C++ change: the Makefile vpath already prefers iop/embed/ over $(PS2SDK)/iop/irx, ata_bd.o uses the generic BIN2S rule, and .gitignore:49 whitelists iop/embed/*.irx. BASED ON ROLLING'S TIP (ae0bebe), per the maintainer: experimental must be rolling + ONE variable or the result proves nothing. Delta vs rolling is the blob + 2 version stamps + the notes. Rolling keeps the old ATA: it works, and a working config does not get churned on a theory. HARDWARE-ONLY: sAGA's 4TB GPT listing; the maintainer's drive without the 5-minute stall; USB/MX4SIO unchanged (this file serves the ATA path only). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent ae0bebe commit e69d9ba

4 files changed

Lines changed: 27 additions & 148 deletions

File tree

0 commit comments

Comments
 (0)