Boot hangs when CD search and IOP module loading depend on BIOS LOADFILE/CDVDFSV servers

Aperta
#358 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 5 giorni

@AlenDavid ci sta già lavorando.

Dal 18/10/2026.

  • #359 di @AlenDavid — aperta
  • #403 di @LeandroSSB — aperta

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
25/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
cpp

Direzione di ricerca

Start from IopEmulator::loadModuleBuffer, the untracked-stub handling, and the guest implementations of sceCdLayerSearchFile and sceSifSearchModuleByAddress. Verify that CDVDFSV/LOADFILE calls cannot enter indefinite retry loops and that IRX module buffers are read from IOP RAM, then boot SLUS-21735 and confirm all 13 modules load. The separate sceSifAllocIopHeap failure is explicitly out of scope; an open linked pull request already targets this issue.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Mana Khemia: Alchemists of Al-Revis (SLUS-21735), recompiled with the analyzer-generated config, hangs during boot without any error message. There are three separate causes, each hit only after the previous one is fixed.

1. sceCdLayerSearchFile spins on CDVDFSV's RPC

The game looks up \RPK.BIN;1 with sceCdLayerSearchFile (0x00485230). The runtime has no handler by that name, so the analyzer lists it under untracked_stubs and the guest libcdvd code runs. That code binds SID 0x80000597, which only CDVDFSV registers. The IOP emulator runs without a BIOS and sceSifRebootIop ignores the IOPRP310.IMG path, so the server never appears and the SDK keeps retrying the bind (cd->server == NULL) forever.

2. sceSifLoadModuleBuffer reads the module from the wrong memory

The game copies each IRX to IOP RAM with sceSifSetDma and passes that IOP address to _sceSifLoadModuleBuffer. The runtime writes the DMA into the emulator's separate IOP RAM, but IopEmulator::loadModuleBuffer reads the address from EE RAM (IopHost::readGuest), finds no ELF header and returns -1 without logging anything. None of the game's 13 modules load (DBCMAN, SDRDRV, EzMIDI, CRI ADX…), so it then waits on DBCMAN's SID 0x80001300 forever.

3. sceSifSearchModuleByAddress spins on LOADFILE's RPC

After the first module loads, the game calls sceSifSearchModuleByAddress (0x00476098). The runtime has no handler for it either, so the guest version binds LOADFILE (SID 0x80000006), which is also a BIOS module, and spins in _lf_bind.

After fixing all three

All 13 IRX modules load and start. The game then stops at a separate, unrelated problem: PS2RNA: E01112903: Failed, sceSifAllocIopHeap(%d) in ps2rna_init_psj, followed by the game's own for(;;) error loop.

Found on macOS arm64 with eb8688b.

Lingua principale
C++
Stelle
3.3k
Fork
149
Merge medio
8h 46m
PR unite (30g)
1

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ran-j/PS2Recomp

Tutte le issue di ran-j/PS2Recomp

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.