EE sceCdStatus stub always reports READ (6), hanging games that wait for PAUSE
I maintainer di solito rispondono entro 4 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- Meno di un'ora
- Idoneità per principianti
- 95/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- cpp
- Ambito
- reverse-engineering
Direzione di ricerca
Inizia in ps2xRuntime/src/lib/Kernel/Stubs/CD.cpp, in corrispondenza di sceCdStatus, e confronta il valore restituito nello stato inizializzato con sceCdSync e ps2xIOP/src/emulator/imports/iop_cdvd.cpp. Avvia ICO e verifica che lo stato del CD diventi SCECdStatPause (0x0A), che il ciclo di avvio termini, che vengano caricati tutti e sei i moduli IOP e che non rimangano problemi successivi relativi allo stato del CD.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
EE sceCdStatus stub always reports READ (6), hanging games that wait for PAUSE
Game: ICO (PAL, SCES_507.60)
Found on: c5a9d02, still present on eb8688b (latest main as of 2026-10-18).
The bug
In ps2xRuntime/src/lib/Kernel/Stubs/CD.cpp, sceCdStatus returns a fixed value:
setReturnS32(ctx, g_cdInitialized ? 6 : 0);
6 is SCECdStatRead (a read in progress). sceCdInit sets g_cdInitialized, so from then on the drive reports a read in progress forever, even though the HLE reads are synchronous and nothing is ever pending. This does not match the current synchronous model, which sceCdSync already follows by returning 0 ("completed / not busy").
For ICO's current synchronous HLE path, returning SCECdStatPause (0x0A) after initialization allows the boot loop to proceed.
The IOP-side emulation already does this: in ps2xIOP/src/emulator/imports/iop_cdvd.cpp, sceCdStatus returns kCdvdStatusPause (0x0A). Only the EE stub returns 6.
Effect in ICO
ICO's boot code (0x10ECA8) waits for the paused state before rebooting the IOP and before loading each IOP module:
0x10ED00 addiu $s0, $zero, 0xa
...
0x10ED48 jal sceCdStatus
0x10ED50 bne $v0, $s0, 0x10ED48
With the status stuck at 6, the main thread loops there forever: black screen, no IOP module loaded.
With sceCdStatus returning 0x0A after sceCdInit (0 before), the main thread leaves the loop, the IOP reboot runs and all six modules load (SIO2MAN, PADMAN, MCMAN, MCSERV, LIBSD, SNDN2DRV). No other change was needed for this step. The later problems in our port are unrelated to the CD status.
Notes
- I have been running my ICO port with this fix for about two months. I am sharing it because the same stub is used for any game whose libcdvd the analyzer recognizes, so it may affect other games. I have only tested ICO.
- 0x0A is the right answer for the current synchronous HLE model, not in general. If the CD HLE ever becomes asynchronous, the status should report 6 only while a read is actually pending.
- A game that waits with
while (sceCdStatus() == SCECdStatRead)would hang the same way.
- Lingua principale
- C++
- Stelle
- 3.3k
- Fork
- 149
- Merge medio
- 5g 10h
- PR unite (30g)
- 4
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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ran-j/PS2Recomp
-
VU0 macro VSQI / VSQD: address and source registers swapped in generated codeForse già presa @yanm1103 l’ha presa 4 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 4 giorni
-
Runtime: SampleTexture casts unbounded or NaN texture coordinates to int, which is undefined behaviourForse già presa @luisbraganca l’ha presa 9 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
ran-j/PS2Recomp#273 · 2 commenti ·
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 4 giorni
-
Runtime: writes to D_ENABLEW (0x1000F590) are never visible at D_ENABLER (0x1000F520), hanging any game that suspends the DMACForse già presa @luisbraganca l’ha presa 9 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
ran-j/PS2Recomp#257 · 1 commento ·
I maintainer di solito rispondono entro 4 giorni
Tutte le issue di ran-j/PS2Recomp
Issue simili
-
objdetect(mcc): CCheckerDetector leaves its chart type uninitialized 🤖🤖🤖Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
(S1 - Need confirmation)
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
CleverRaven/Cataclysm-DDA#89182 ·
I maintainer di solito rispondono entro 1 giorno
-
ai_p2
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
ClickHouse/ClickHouse#126833 ·
I maintainer di solito rispondono entro 1 giorno
-
clang:static analyzer
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
llvm/llvm-project#233598 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100