EE sceCdStatus stub always reports READ (6), hanging games that wait for PAUSE
Los mantenedores suelen responder en 4 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 1/5
- Tiempo estimado
- Menos de una hora
- Aptitud para principiantes
- 95/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- cpp
- Área
- reverse-engineering
Línea de trabajo
Empieza en ps2xRuntime/src/lib/Kernel/Stubs/CD.cpp, en sceCdStatus, y compara el valor devuelto en el estado inicializado con sceCdSync y ps2xIOP/src/emulator/imports/iop_cdvd.cpp. Ejecuta ICO y verifica que el estado del CD pase a ser SCECdStatPause (0x0A), que el bucle de arranque termine, que se carguen los seis módulos IOP y que no persista ningún problema posterior con el estado del CD.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- C++
- Estrellas
- 3.3k
- Forks
- 149
- Merge medio
- 5 d 10 h
- PR fusionados (30 d)
- 4
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ran-j/PS2Recomp
-
VU0 macro VSQI / VSQD: address and source registers swapped in generated codePosiblemente ocupada @yanm1103 la tomó hace 5 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 4 días
-
Runtime: SampleTexture casts unbounded or NaN texture coordinates to int, which is undefined behaviourPosiblemente ocupada @luisbraganca la tomó hace 11 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
ran-j/PS2Recomp#273 · 2 comentarios ·
Los mantenedores suelen responder en 4 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 4 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 4 días
-
Runtime: writes to D_ENABLEW (0x1000F590) are never visible at D_ENABLER (0x1000F520), hanging any game that suspends the DMACPosiblemente ocupada @luisbraganca la tomó hace 11 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
ran-j/PS2Recomp#257 · 1 comentario ·
Los mantenedores suelen responder en 4 días
Todos los issues de ran-j/PS2Recomp
Issues similares
-
v9.6.0: CMake incorrectly enforces presence of libevdevPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
Los mantenedores suelen responder en 1 día
-
Rowan (2017) electron heating gives NaN for beta > beta_max; clip() then sets electrons to kel_minAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
parthenon-hpc-lab/kharma#213 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
metasequoiaime/msime#9113 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
tone-3000/tone3000-plugin#257 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Locked plugin flip-flops position on every refresh after being disabledPosiblemente ocupada @Illustar0 la tomó hoy. Abiertoissue report
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
ModOrganizer2/modorganizer#2449 ·