[PSP] Ejecutar PBP y PRX desde programa propio??

El titulo lo dice todo...me gustaria saber que comandos usar para decirle a mi programa que ejecute el archivo "X.PBP" o "X.prx" que esta en "ms0:/lo q sea"
Comandos y librerias que necesite para hacerlo :P (o tutorial del q aprender)y que añadir en el makefile si hay q poner algo raro
edito q se me olvidaba xD
Y si alguien me dice donde puedo aprender a hacer los makefile se lo agradeceria

muchas gracias de antemano
#include
#include
#include

#define printf pspDebugScreenPrintf
#define PROGRAMA "ms0:/PSP/GAME/UPDATE/EBOOT.PBP"

int main()
{

printf("Pulsa el boton para arrancar el eboot o el prx\n");

while(1)
{
SceCtrlData pad;
sceCtrlReadBufferPositive(&pad, 1);

if (pad.Buttons & PSP_CTRL_BOTON)
{

struct SceKernelLoadExecVSHParam param;
memset(¶m, 0, sizeof(param));
param.size = sizeof(param);
param.args = strlen(PROGRAM)+1;
param.argp = PROGRAMA;
param.key = "updater";

vshKernelLoadExecVSHMs1(PROGRAMA, ¶m);
keyprocessed = 1;
}
}
return 0;
}

creo que era asi.......

PSP_CTRL_BOTON , lo de boton me refiero a que pongas el boton que quieras ......

te dejo aqui una lista :
   /** Select button. */
   PSP_CTRL_SELECT     = 0x000001,
   /** Start button. */
   PSP_CTRL_START      = 0x000008,
   /** Up D-Pad button. */
   PSP_CTRL_UP         = 0x000010,
   /** Right D-Pad button. */
   PSP_CTRL_RIGHT      = 0x000020,
   /** Down D-Pad button. */
   PSP_CTRL_DOWN         = 0x000040,
   /** Left D-Pad button. */
   PSP_CTRL_LEFT         = 0x000080,
   /** Left trigger. */
   PSP_CTRL_LTRIGGER   = 0x000100,
   /** Right trigger. */
   PSP_CTRL_RTRIGGER   = 0x000200,
   /** Triangle button. */
   PSP_CTRL_TRIANGLE   = 0x001000,
   /** Circle button. */
   PSP_CTRL_CIRCLE     = 0x002000,
   /** Cross button. */
   PSP_CTRL_CROSS      = 0x004000,
   /** Square button. */
   PSP_CTRL_SQUARE     = 0x008000,
   /** Home button. */
   PSP_CTRL_HOME       = 0x010000,
   /** Hold button. */
   PSP_CTRL_HOLD       = 0x020000,
   /** Music Note button. */
   PSP_CTRL_NOTE       = 0x800000,
   /** Screen button. */
   PSP_CTRL_SCREEN     = 0x400000,
   /** Volume up button. */
   PSP_CTRL_VOLUP      = 0x100000,
   /** Volume down button. */
   PSP_CTRL_VOLDOWN    = 0x200000,
   /** Wlan switch up. */
   PSP_CTRL_WLAN_UP    = 0x040000,
   /** Remote hold position. */
   PSP_CTRL_REMOTE     = 0x080000,   
   /** Disc present. */
   PSP_CTRL_DISC       = 0x1000000,
   /** Memory stick present. */
   PSP_CTRL_MS         = 0x2000000,


esta lista la puedes encontrar en la libreria pspctrl.h
no vi antes la respuesta :s mil perdones
muchas gracias x tu ayuda [tadoramo] voy a probar ya mismo xD
Puff, lo siento, soy bastante novatillo y no consigo ponerlo en marcha :( Si quito la parte del main y del bucle, me queda (en el programa lo tengo puesto para que desde mi menu, al pulsar una tecla, las siguientes lineas sean):


memset(¶m, 0, sizeof(param));
param.size = sizeof(param);
param.args = strlen(PROGRAMA)+1;
param.argp = PROGRAMA;
param.key = "updater";

vshKernelLoadExecVSHMs1(PROGRAMA, ¶m);




y previamente, he definido el struct como



typedef struct {
   int size;
   unsigned char args[255];
   unsigned char argp[255];
   unsigned char key[255];
   } SceKernelLoadExecVSHParam;

SceKernelLoadExecVSHParam param;



pero no hay manera :( Alguien puede echarme una mano?

Thanks ;)
sceKernelLoadExec("ms0...", NULL);

Con esto te sobra.
Si lo único que quieres es pulsar un botón y que se cargue el eboot o el prx no hace falta que uses un bucle while.
Usa esto :

[COLOR=orangered]// Código principal. Main.c[/COLOR]
#include <pspkernel.h>
#include <pspctrl.h>
#include <pspdebug.h>
#include <psploadexec.h>

PSP_MODULE_INFO("bla", 0x1000, 1, 1);
PSP_MAIN_THREAD_ATTR(0);

int main()
{
SceCtrlData pad;
pspDebugScreenInit();
pspDebugScreenPrintf("Pulsa X para cargar un archivo PBP, O para uno prx y [] para salir.");

sceCtrlReadBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_CROSS)
sceKernelLoadExec("ms0...", NULL);
else if(pad.Buttons & PSP_CTRL_CIRCLE)
sceKernelLoadExec("ms0...", NULL);
else if(pad.Buttons & PSP_CTRL_SQUARE)
sceKernelExitGame();

sceKernelSleepThread();
return 0;
}
Becus.

Pongo
else if(pad.Buttons & PSP_CTRL_CIRCLE)
sceKernelLoadExec("ms0:/psp/game150/ts/recovery.prx", NULL);

Y crashea la PSP....
Alguna idea?

EDITO: Y no solo en ese.. si toco cualquier boton crashea
yo tambien he probado con

sceKernelLoadExec("path al .prx", NULL);

y al cargar el prx la psp se cuelga :(
rubensvaldemo escribió:Becus.

Pongo
else if(pad.Buttons & PSP_CTRL_CIRCLE)
sceKernelLoadExec("ms0:/psp/game150/ts/recovery.prx", NULL);

Y crashea la PSP....
Alguna idea?

EDITO: Y no solo en ese.. si toco cualquier boton crashea

En que custom firmware ?
becus25 escribió:En que custom firmware ?


3.71 m33-2

Probado en Kernel 1.5 y 3.51 y nada..
Yo lo he probado en un 3.03
Vale, ya lo he conseguido..
Era un simple comando...

sceKernelLoadExec("ms0:/eboot.pbp", NULL);

Es el que tengo yo vamos..
Esto funciona tambien con .prx ?

Es que tengo un programa que quiero que corra en versiones 3.XX de PSP. El tema es que necesito cambiarle la frecuencia de muestreo y he visto que la instruccion que lo hace se ejecuta en kernel mode y por no se que razones no puedo hacer que funcione. Para solucionarlo hay un tio que se curro un codigo, que al compilarlo da un .prx y que teoricamente al ejecutarlo, hace este cambio de frecuencia.

El problema que tengo es que estoy tratando de cargar el .prx tal y como habeis dicho, pero cuando llega al momento de cargarlo, la psp se cuelga y no se si es problema mio, o cosa del prx :(
12 respuestas