Varias Dudas
Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06
- gokuhs
- Experto
- Mensajes: 1142
- Registrado: 23 Sep 2009, 15:16
- PSN ID: gokuhs
- Steam ID: gokuhss
- Twitter: gokuhss
- Ubicación: Alicante
- Contactar:
Varias Dudas
Lo primero lamento el título tan poco descriptivo, y bueno hay van las dudas.
Algunos homebrew llevan incorporado un sistema que cuando cascan por algún lado te muestra una pantalla con la información de volcado y el error (la misma que te da psp-link cuando ocurre una excepción) ¿Existe alguna librería o algo para incorporarlo en el homebrew? Me fastidia bastante que cuando hay un casque se quede como 15 segundos empanada asta que se apaga y mucho mas si no se donde se a producido ni cual es la excepción.
La segunda es algo mas complicada, ¿Como hago para que mi homebrew se ejecute en modo Kernel? He leído por foros, incluido en el de m0skit0, pero solo explican la diferencia entre "User mode y Kenel Mode". Si me podeís incorporar un pequeño ejemplo os lo agradecería.
Por ultimo, os pongo en situación, actualmente estaba aprendiendo un poco del reducido OpenGL de PSP. Tenia el problema que cuando cargo en este caso 6 texturas (256x256px cada una) al renderizar la escena la PSP Crashea, las texturas se aplican a 6 planos, no habiendo nada mas en la escena. Mi teoría es que se le agota la RAM, lo cual es extraño si son solo 6 texturas no muy grandes. ¿Es posible con PSP-Link, que te muestre la memoria libre? Y ¿Por defecto la PSP le asigna X cantidad de memoria a un Thread o este tira de memoria asta que se agote? Si no es así ¿Como le asigno mas memoria?
Bueno muchas gracias de antemano.
Algunos homebrew llevan incorporado un sistema que cuando cascan por algún lado te muestra una pantalla con la información de volcado y el error (la misma que te da psp-link cuando ocurre una excepción) ¿Existe alguna librería o algo para incorporarlo en el homebrew? Me fastidia bastante que cuando hay un casque se quede como 15 segundos empanada asta que se apaga y mucho mas si no se donde se a producido ni cual es la excepción.
La segunda es algo mas complicada, ¿Como hago para que mi homebrew se ejecute en modo Kernel? He leído por foros, incluido en el de m0skit0, pero solo explican la diferencia entre "User mode y Kenel Mode". Si me podeís incorporar un pequeño ejemplo os lo agradecería.
Por ultimo, os pongo en situación, actualmente estaba aprendiendo un poco del reducido OpenGL de PSP. Tenia el problema que cuando cargo en este caso 6 texturas (256x256px cada una) al renderizar la escena la PSP Crashea, las texturas se aplican a 6 planos, no habiendo nada mas en la escena. Mi teoría es que se le agota la RAM, lo cual es extraño si son solo 6 texturas no muy grandes. ¿Es posible con PSP-Link, que te muestre la memoria libre? Y ¿Por defecto la PSP le asigna X cantidad de memoria a un Thread o este tira de memoria asta que se agote? Si no es así ¿Como le asigno mas memoria?
Bueno muchas gracias de antemano.
Re: Varias Dudas
gokuhs escribió:Algunos homebrew llevan incorporado un sistema que cuando cascan por algún lado te muestra una pantalla con la información de volcado y el error (la misma que te da psp-link cuando ocurre una excepción) ¿Existe alguna librería o algo para incorporarlo en el homebrew? Me fastidia bastante que cuando hay un casque se quede como 15 segundos empanada asta que se apaga y mucho mas si no se donde se a producido ni cual es la excepción.
Usa PSPLINK como plugin, es lo mejor. Si quieres tu propio manejador de excepciones, usa pspDebugInstallErrorHandler.
gokuhs escribió:¿Como hago para que mi homebrew se ejecute en modo Kernel? He leído por foros, incluido en el de m0skit0, pero solo explican la diferencia entre "User mode y Kenel Mode". Si me podeís incorporar un pequeño ejemplo os lo agradecería.
Has buscado mal, pues

PSP_MODULE_INFO("Nombredelhomebrew", 0x1000, version_grande, version_pequeña);
gokuhs escribió:Tenia el problema que cuando cargo en este caso 6 texturas (256x256px cada una) al renderizar la escena la PSP Crashea, las texturas se aplican a 6 planos, no habiendo nada mas en la escena.
Pues yo no tengo ni pajotera de gráficos. Aún así voy a intentar aclararte tus dudas. A ver si soulless se pasa por aquí

gokuhs escribió:Mi teoría es que se le agota la RAM, lo cual es extraño si son solo 6 texturas no muy grandes
No creo... ¿Has visto God of War?

gokuhs escribió:¿Es posible con PSP-Link, que te muestre la memoria libre?
¿Es una pregunta retórica? meminfo
gokuhs escribió:¿Por defecto la PSP le asigna X cantidad de memoria a un Thread o este tira de memoria asta que se agote?
Depende. Si te refieres a la pila, se la asignas tú cuando lo creas. Si te refieres al heap, tiene todo el que pida, max. 24 MiB menos lo que ya haya ocupado, que es el tamaño de la partición 2 de RAM.
gokuhs escribió:Si no es así ¿Como le asigno mas memoria?
Si te refieres a asignarle más espacio de pila:
SceUID sceKernelCreateThread (const char *name, SceKernelThreadEntry entry, int initPriority, int stackSize, SceUInt attr, SceKernelThreadOptParam *option);
Muchas de nadas.

- gokuhs
- Experto
- Mensajes: 1142
- Registrado: 23 Sep 2009, 15:16
- PSN ID: gokuhs
- Steam ID: gokuhss
- Twitter: gokuhss
- Ubicación: Alicante
- Contactar:
Re: Varias Dudas
Joer m0skit0 estás echo todo un crack, muchísimas gracias me has resuelto la gran mayoría de las dudas solo una pregunta muy muy noob:
Me dices que utilice meminfo en PSP-Link cierto ya lo habia echo pero el problema que no entiendo la salida que me da, (Fíjate que creía que me decía las direcciones de las diferentes particiones en la RAM) -_-'
Sobre lo del PlugIN cierto así es como lo utilizo, pero mi intención es poderlo usar junto a IRShell, hace poco leí en algún hilo que nunca lo habías utilizado, yo te explico porque lo utilizo; Dos razones básicamente, puedo activar y desactivar el USB pulsando una tecla desde el mismo explorador de archivos, y puedo arrancar os Eboot sin tener que ver la Splash de PSP todo el rato.La desventaja de IRShell, que si lo utilizas junto el plugin del autoloader (para no tener que pasar por el VSH) no carga el plugin del PSP-Link...
De todas formas muchísimas gracias, a lo largo de hoy o mañana te explico las experiencias con lo del sceKernelCreateThread y el Stack que es lo que utilizo para crear el hilo encargado del OpenGL
Me dices que utilice meminfo en PSP-Link cierto ya lo habia echo pero el problema que no entiendo la salida que me da, (Fíjate que creía que me decía las direcciones de las diferentes particiones en la RAM) -_-'
Sobre lo del PlugIN cierto así es como lo utilizo, pero mi intención es poderlo usar junto a IRShell, hace poco leí en algún hilo que nunca lo habías utilizado, yo te explico porque lo utilizo; Dos razones básicamente, puedo activar y desactivar el USB pulsando una tecla desde el mismo explorador de archivos, y puedo arrancar os Eboot sin tener que ver la Splash de PSP todo el rato.La desventaja de IRShell, que si lo utilizas junto el plugin del autoloader (para no tener que pasar por el VSH) no carga el plugin del PSP-Link...
De todas formas muchísimas gracias, a lo largo de hoy o mañana te explico las experiencias con lo del sceKernelCreateThread y el Stack que es lo que utilizo para crear el hilo encargado del OpenGL
Re: Varias Dudas
gokuhs escribió:Me dices que utilice meminfo en PSP-Link cierto ya lo habia echo pero el problema que no entiendo la salida que me da, (Fíjate que creía que me decía las direcciones de las diferentes particiones en la RAM) -_-'
A ver, salida de meminfo (por ejemplo):
Código: Seleccionar todo
Memory Partitions:
N | BASE | SIZE | TOTALFREE | MAXFREE | ATTR |
---|------------|----------|-----------|-----------|------|
1 | 0x88000000 | 3145728 | 260096 | 249600 | 000C |
2 | 0x08800000 | 25165824 | 508928 | 507648 | 000F |
3 | 0x88000000 | 3145728 | 260096 | 249600 | 000C |
4 | 0x88300000 | 1048576 | 1048576 | 1048576 | 000C |
5 | 0x08400000 | 4194304 | 4194304 | 4194304 | 000F |
6 | 0x08800000 | 25165824 | 508928 | 507648 | 000F |
11 | 0x88000000 | 3145728 | 260096 | 249600 | 000C |
BASE -> dirección base donde comienza la partición (las direcciones de memoria SIEMPRE se dan sólo en hexadecimal)
SIZE -> tamaño de la partición en bytes (la verdad yo prefiero darlo todo en hexadecimal, pero bueno, cada uno a lo suyo)
TOTALFREE -> total de memoria libre
MAXFREE -> máximo de memoria libre para alocaciones
ATTR -> atributos de la partición (C -> kernel, F -> usuario)
gokuhs escribió:Dos razones básicamente, puedo activar y desactivar el USB pulsando una tecla desde el mismo explorador de archivos, y puedo arrancar os Eboot sin tener que ver la Splash de PSP todo el rato.La desventaja de IRShell, que si lo utilizas junto el plugin del autoloader (para no tener que pasar por el VSH) no carga el plugin del PSP-Link...
Todo eso lo hace PSPLINK, y mucho más. PSPLINK puede arrancar ELFs desde el PC, ni siquiera hace falta que estén en la PSP. Aparte, puedes navegar en toda la PSP (flash, MS) e incluso en el PC. Copiar ficheros PC <-> PSP, poner puntos de control, inspeccionar los registros... En fin, PSPLINK es el dios del desarrollo en PSP. Sólo con decirte que lo hizo TyRaNiD (uno de los máximos responsables del PSPSDK) ya debería sobrar

¡Suerte!

- gokuhs
- Experto
- Mensajes: 1142
- Registrado: 23 Sep 2009, 15:16
- PSN ID: gokuhs
- Steam ID: gokuhss
- Twitter: gokuhss
- Ubicación: Alicante
- Contactar:
Re: Varias Dudas
Gracias por la utilísima ayuda m0skit0, te comento los problemas nuevos que estoy teniendo:
Al incluir pspDebugInstallErrorHandler me sale el erro al inicial el homebrew 8002013C, te pongo el codigo que he utilizado (Es el mismo que para los errores de mas abajo):
main.cpp
Al intentar ejecutar el hombrew en modo kernel (bueno tanto con mi homebrew como con los ejemplos que vienen con el SDK que utilicen modo kernel) la PSP me escupe el error 80020148 al iniciar si no genero PRX y 800200D9 si genero PRX (en el make file con BUILD_PRX=1) (En el código de arriba tienes comentadas las lineas que puse para el kernel mode.
Ahora que me explicaste lo de meminfo tengo algo mas claro que el problema está en el código, lo revisaré con tranquilidad de todas maneras te pongo unas cuantas salidas:
Ejecutando el código de arriba (sin lo de pspDebugInstallErrorHandler) me da la siguiente salida.
Y con este código en el MAIN:
(Simplemente
Por lo que si no deduzco mal las entradas en negrita corresponden al hilo principal (y con lo que me decías 25mb) pero si me fijo ya me lo está ejecutando en el modo kernel ¿Es correcto? Si es así ¿como es posible con el código que te pongo?
Sobre lo del stack de los hilos aún no me metí con ello.
Y en fin me tendré que empapar unos cuantos manuales del psplink...
Gracias por tu atención!
Al incluir pspDebugInstallErrorHandler me sale el erro al inicial el homebrew 8002013C, te pongo el codigo que he utilizado (Es el mismo que para los errores de mas abajo):
main.cpp
Código: Seleccionar todo
//Nombre del modulo y modo
//PSP_MODULE_INFO ("PruebasOpenGL" , 0x1000,1,1 ); //Kernel Mode
PSP_MODULE_INFO ("PruebasOpenGL" , 0,1,1 ); //User Mode
//PSP_MAIN_THREAD_ATTR(0);
PSP_HEAP_SIZE_MAX();
#define printf pspDebugScreenPrintf
/* Llamada de salida */
int exit_callback ( int arg1, int arg2, void *common )
{
sceKernelExitGame();
return 0;
}
int CallbackThread ( SceSize args, void *argp )
{
int cbid;
cbid = sceKernelCreateCallback ( "Exit Callback", exit_callback, NULL );
sceKernelRegisterExitCallback ( cbid );
sceKernelSleepThreadCB();
return 0;
}
int SetupCallbacks ( void )
{
int thid = 0;
thid = sceKernelCreateThread ( "update_thread", CallbackThread, 0x11, 0xFA0, 0, 0 );
if ( thid >= 0 )
{
sceKernelStartThread ( thid, 0, 0 );
}
return thid;
}
void MyExceptionHandler(PspDebugRegBlock *regs)
{
pspDebugScreenInit();
pspDebugScreenSetBackColor(0x0000FF00); //Azul muerte...
pspDebugScreenSetTextColor(0xFFFFFFFF);
pspDebugScreenClear();
pspDebugScreenPrintf("Oh no la PSP ha creasheado\n");
pspDebugScreenPrintf("Lo siento, sabias que podia pasar al ser un software casero :-(\n\n");
pspDebugScreenPrintf("Detalles de la exception:\n");
pspDebugDumpException(regs);
getch();
sceKernelExitGame();
}
// -- INICIO DE MAIN -----------------------------------------------------------
int main(int argc, char *argv[]) {
int numeroHiloPrincipal,numeroHiloDebug;
pspDebugScreenInit();
if(pspDebugInstallErrorHandler(MyExceptionHandler) < 0)
{
printf("Fallo al instalar el manejador de excepciones\n");
}
printf("Cargando...\n");
SetupCallbacks();
GestProces *procesos;
clMotor *sdl_con_opengl = new clMotor;
printf("Creando Procesos");
procesos = new GestProces();
ActivaDebug();
numeroHiloDebug = procesos->addSubProceso(Debug::start,"Proceso Depuracion",false);
procesos->Start(numeroHiloDebug);
debug("AddSubProcess");
numeroHiloPrincipal = procesos->addSubProceso(sdl_con_opengl->start,"Proceso Principal",false);
debug("Iniciando el Hilo");
procesos->Start(numeroHiloPrincipal);
sceKernelSleepThread();
delete sdl_con_opengl;
return 0;
};
Al intentar ejecutar el hombrew en modo kernel (bueno tanto con mi homebrew como con los ejemplos que vienen con el SDK que utilicen modo kernel) la PSP me escupe el error 80020148 al iniciar si no genero PRX y 800200D9 si genero PRX (en el make file con BUILD_PRX=1) (En el código de arriba tienes comentadas las lineas que puse para el kernel mode.
Ahora que me explicaste lo de meminfo tengo algo mas claro que el problema está en el código, lo revisaré con tranquilidad de todas maneras te pongo unas cuantas salidas:
Ejecutando el código de arriba (sin lo de pspDebugInstallErrorHandler) me da la siguiente salida.
Código: Seleccionar todo
Memory Partitions:
N | BASE | SIZE | TOTALFREE | MAXFREE | ATTR |
---|------------|----------|-----------|-----------|------|
1 | 0x88000000 | 3145728 | 304384 | 292864 | 000C |
2 | 0x08800000 | 25165824 | 75008 | 73984 | 000F |
3 | 0x88000000 | 3145728 | 304384 | 292864 | 000C |
4 | 0x88300000 | 1048576 | 1048576 | 1048576 | 000C |
5 | 0x08400000 | 4194304 | 4194304 | 4194304 | 000F |
6 | 0x08800000 | 25165824 | 75008 | 73984 | 000F |
11 | 0x88000000 | 3145728 | 304384 | 292864 | 000C |
Y con este código en el MAIN:
Código: Seleccionar todo
int main(int argc, char *argv[]) {
int numeroHiloPrincipal,numeroHiloDebug;
pspDebugScreenInit();
/*if(pspDebugInstallErrorHandler(MyExceptionHandler) < 0)
{
printf("Fallo al instalar el manejador de excepciones\n");
}*/
printf("Cargando...\n");
SetupCallbacks();
GestProces *procesos;
/*clMotor *sdl_con_opengl = new clMotor;
printf("Creando Procesos");
procesos = new GestProces();
ActivaDebug();
numeroHiloDebug = procesos->addSubProceso(Debug::start,"Proceso Depuracion",false);
procesos->Start(numeroHiloDebug);
debug("AddSubProcess");
numeroHiloPrincipal = procesos->addSubProceso(sdl_con_opengl->start,"Proceso Principal",false);
debug("Iniciando el Hilo");
procesos->Start(numeroHiloPrincipal);*/
sceKernelSleepThread();
//delete sdl_con_opengl;
return 0;
};
(Simplemente
Código: Seleccionar todo
Memory Partitions:
N | BASE | SIZE | TOTALFREE | MAXFREE | ATTR |
---|------------|----------|-----------|-----------|------|
1 | 0x88000000 | 3145728 | 320768 | 294912 | 000C |
[b]2 | 0x08800000 | 25165824 | 23799552 | 23541504 | 000F |[/b]
3 | 0x88000000 | 3145728 | 320768 | 294912 | 000C |
4 | 0x88300000 | 1048576 | 1048576 | 1048576 | 000C |
5 | 0x08400000 | 4194304 | 4194304 | 4194304 | 000F |
[b]6 | 0x08800000 | 25165824 | 23799552 | 23541504 | 000F |[/b]
11 | 0x88000000 | 3145728 | 320768 | 294912 | 000C |
Por lo que si no deduzco mal las entradas en negrita corresponden al hilo principal (y con lo que me decías 25mb) pero si me fijo ya me lo está ejecutando en el modo kernel ¿Es correcto? Si es así ¿como es posible con el código que te pongo?
Sobre lo del stack de los hilos aún no me metí con ello.
Y en fin me tendré que empapar unos cuantos manuales del psplink...
Gracias por tu atención!
Re: Varias Dudas
gokuhs escribió:Al intentar ejecutar el hombrew en modo kernel (bueno tanto con mi homebrew como con los ejemplos que vienen con el SDK que utilicen modo kernel) la PSP me escupe el error 80020148 al iniciar si no genero PRX y 800200D9 si genero PRX (en el make file con BUILD_PRX=1) (En el código de arriba tienes comentadas las lineas que puse para el kernel mode.
¿Cuándo y dónde te da esos errores? Aparte, no creo que puedas usar la librería OpenGL desde el kernel, aunque, como ya dije, no te fíes de mis conocimientos sobre librerías gráficas.
gokuhs escribió:Ejecutando el código de arriba (sin lo de pspDebugInstallErrorHandler) me da la siguiente salida.
¿En qué quedamos? ¿Es el primer meminfo que pones o el segundo?

Veo que usas C++. Hay clases que no defines, por tanto evidentemente no voy a ser capaz de saber dónde consume la memoria sin saber qué implementación tienen dichas clases. Además veo un poco confuso que llames "procesos" cuando la PSP no tiene procesos...
Ah y por favor usa spoiler para cachos de código relativamente grandes, que si no es un dolor responder

EDITO: ah y los errores que te da los puedes consultar aquí: http://psp.jim.sh/pspsdk-doc/pspkerror_8h-source.html

- gokuhs
- Experto
- Mensajes: 1142
- Registrado: 23 Sep 2009, 15:16
- PSN ID: gokuhs
- Steam ID: gokuhss
- Twitter: gokuhss
- Ubicación: Alicante
- Contactar:
Re: Varias Dudas
m0skit0 escribió:¿Cuándo y dónde te da esos errores? Aparte, no creo que puedas usar la librería OpenGL desde el kernel, aunque, como ya dije, no te fíes de mis conocimientos sobre librerías gráficas.
Si los errores me los da al inicial el homebrew, en cuanto doy a la X en el menú de la consola, como dato te diré que la animación de la consola no hace el "difuminado del final" si no antes de ello pantalla negra y salta el error volviendo al XMB.
m0skit0 escribió:¿En qué quedamos? ¿Es el primer meminfo que pones o el segundo?
Te explico, el primero me lo da con el código que te tengo puesto arriba, y el segundo con el segundo main que te pongo con casi todo comentado.
Sobre el tema de la memoria """""creo"""" que ya lo solucioné; quité la línea PSP_HEAP_SIZE_MAX(); y ya meminfo me da :
Spoiler:
Y si no me he equivocado y la partición en memoria es la N 2 ya los registros son mas coherentes.
Gracias y perdón por el desorden.
Re: Varias Dudas
gokuhs escribió:Y si no me he equivocado y la partición en memoria es la N 2 ya los registros son mas coherentes.
Hm ¿cómo coherentes? Eso simplemente te muestra el espacio libre. No hay algo coherente o no... O no entiendo qué quieres decir.
Aparte comentarte que aunque he recibido tu código, no puedo probarlo ya que no tengo la libraría de desarrollo de OGL. A ver si se pasa el maestro soulless que es el que realmente te va a solucionar esto. Reza por ello


Re: Varias Dudas
has hecho pruebas con solo una textura y un plano (o con absolutamente nada) a ver si crashea???
has comprobado que no estas cargando las texturas de manera repetida (suena algo raro la pregunta, pero suele suceder)???
no estaras liberando algun recurso y luego tratando de utilizarlo (otro caso muy comun)???
estas controlando de manera correcta el acceso a los arrays (si es que los hay)???
podrias postear el codigo de carga de las texturas, estas comprobando que las imagenes sean compatibles???
PD: con PSPLINK hay posibilidades de conseguir la linea exacta (del codigo fuente) que provoca el crash.
has comprobado que no estas cargando las texturas de manera repetida (suena algo raro la pregunta, pero suele suceder)???
no estaras liberando algun recurso y luego tratando de utilizarlo (otro caso muy comun)???
estas controlando de manera correcta el acceso a los arrays (si es que los hay)???
podrias postear el codigo de carga de las texturas, estas comprobando que las imagenes sean compatibles???
PD: con PSPLINK hay posibilidades de conseguir la linea exacta (del codigo fuente) que provoca el crash.
"Quiero irme cuando quiero. Es de mal gusto prolongar artificialmente la vida. He hecho mi parte, es hora de irse. Yo lo haré con elegancia." -Albert Einstein.-
- gokuhs
- Experto
- Mensajes: 1142
- Registrado: 23 Sep 2009, 15:16
- PSN ID: gokuhs
- Steam ID: gokuhss
- Twitter: gokuhss
- Ubicación: Alicante
- Contactar:
Re: Varias Dudas
Hola soulles, si, las pruebas que hice se trataba de 6 texturas 128x128 (probe el mismo código con 256 x 256 y en la 5 textura daba error glTexImage2D (segun psplink) y si mal no recuerdo era 500 o 501, no lo recuerdo muy bien.
El trozo de código donde cargo las texturas es:
Siendo entorno_nombres un Array bidimensional de Char donde está almacenada la dirección de la imagen a cargar y tex_fondo un array de enteros donde alamaceno el numero que le asigna OpenGL a la textura.
A la hora de pintar utilizo el siguiente código:
Siendo env un entero con valor 1000.
Me interesaría saber también como saber con psplink en el punto que hace Crash.
Un saludo y gracias por contestar.
El trozo de código donde cargo las texturas es:
Siendo entorno_nombres un Array bidimensional de Char donde está almacenada la dirección de la imagen a cargar y tex_fondo un array de enteros donde alamaceno el numero que le asigna OpenGL a la textura.
Spoiler:
A la hora de pintar utilizo el siguiente código:
Siendo env un entero con valor 1000.
Spoiler:
Me interesaría saber también como saber con psplink en el punto que hace Crash.
Un saludo y gracias por contestar.