mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
b82e72cb0b
GetID's last four response bytes were hardcoded 'SCEI' (NTSC-J). Real hardware reports the region of the INSERTED disc. Kula World uses the BIOS CD API, and the kernel CD driver revalidates the disc (ReadTOC + GetID, polled with irq_enable=0x18) when it reinitializes after the game's first file load. Seeing a 'Japanese' disc, it fell into the endless GetStat/Init retry loop: CD delivery froze at sector 307 (LBA 318, just before the first level directory) and the game waited forever on a black screen. Diagnosed from the always-on cdrom trace ring (grabbed via gdb from the live process): 307 sectors stream cleanly, Pause completes, then the BIOS's own ROM CD firmware (0xBFC0Dxxx) masks INTC delivery, issues ReadTOC + GetID, reads the response... and rejects it. Beetle PSX (the oracle; boots the same dump + BIOS to demo gameplay) derives the SCEx string from the disc's SYSTEM.CNF boot serial - so we now do the same: cdrom_set_disc_scex() is fed at launch from the existing disc_identity module (PAL->SCEE, NTSC-J->SCEI, NTSC-U->SCEA; default SCEA matches the one supported BIOS). Verified so far: launch log reports 'disc region PAL (serial SCES-01000)'; the sector-counter wall-break run is in flight. Framework-wide note: Tomba/MMX6 (NTSC-U, own CD drivers) never hit this path but now get 'SCEA' - matching real hardware - instead of 'SCEI'; regression-test before any master merge. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BdjxoRB1f9VQsNzZayCgGS