[REQ] API para crear Plugin CF, o algo asi

hola:

abro este post para pedir a quienes hayan creado plugins, si pueden compartir las funciones, y "trucos" que se deben usar para que el ejecutable se pueda ejecutar en el firmware.

eso, si compartimos el conocimiento se puede aprender y mejorar entre todos :)

saludos

PD: si tienen paginas o cosas asi tb es bienvenido, si no todo tiene que venir digerido
grishnakhelorco está baneado por "Clon de usuario baneado"
alparras escribió:hola:

abro este post para pedir a quienes hayan creado plugins, si pueden compartir las funciones, y "trucos" que se deben usar para que el ejecutable se pueda ejecutar en el firmware.

eso, si compartimos el conocimiento se puede aprender y mejorar entre todos :)

saludos

PD: si tienen paginas o cosas asi tb es bienvenido, si no todo tiene que venir digerido


Es tan fácil como tener un compilador y las librarias necesarias.

Tienes un código fuente como este:

#include
#include
#include
#include
#include

PSP_MODULE_INFO("2nd Recovery", 0x1000, 1, 1);

PSP_MAIN_THREAD_ATTR(0);

#define printf pspDebugScreenPrintf

/* Exit callback */
int exit_callback(int arg1, int arg2, void *arg)
{
sceKernelExitGame();

return 0;
}

/* Callback thread */
void CallbackThread(void *arg)
{
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();
}

int SetupCallbacks(void)
{
int thid = 0;

thid = sceKernelCreateThread("update_thread", (void*) CallbackThread, 0x11, 0xFA0, 0xa0000000, 0);
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}

return thid;
}

SceUID load_module(const char *path, int flags, int type)
{
SceKernelLMOption option;
SceUID mpid;

if (type == 0) {
mpid = 1;
} else {
mpid = 2;
}

memset(&option, 0, sizeof(option));
option.size = sizeof(option);
option.mpidtext = mpid;
option.mpiddata = mpid;
option.position = 0;
option.access = 1;

return sceKernelLoadModule(path, flags, type > 0 ? &option : NULL);
}

void *getModuleInfo(void);

int main(void)
{
SceUID modid;
SceModule *mod;
int i;
int ret;
int fd;

pspDebugInstallKprintfHandler(NULL);
pspDebugInstallErrorHandler(NULL);
pspDebugInstallStdoutHandler(pspDebugScreenPrintData);
pspSdkInstallNoPlainModuleCheckPatch();
SetupCallbacks();

while (1)
{
SceCtrlData pad;

sceCtrlReadBufferPositive(&pad, 1);

if (pad.Buttons & PSP_CTRL_CROSS)
{

modid = load_module("flash0:/kd/2recovery.prx", 0, 0);
mod = sceKernelFindModuleByUID(modid);
ret = sceKernelStartModule(modid, 0, NULL, &fd, NULL);

}

}

sceKernelExitDeleteThread(0);

return 0;
}


Eso se guarda como main.c desde cualquier IDE (o editor de texto) y se compila usando un makefile como este:

TARGET = 2nd recovery
OBJS = main.o MyLib.o

USE_PSPSDK_LIBC = 1

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =

LIBS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = 2nd recovery

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak


Así es como tengo yo las variables de entorno pero cada cual las puede tener como quiera.
Esta línea "EXTRA_TARGETS = EBOOT.PBP" te crea un eboot, o lo que es lo mismo, un ejecutable prx con un param.sfo empaquetados.
Se puede crear diréctamente el prx (para no tener que extraerlo con el PBP Unpacker, por ejemplo) añadiendo la línea "BUILD_PRX=1"
Así ya te genera lo que se puede denominar el plugin.

Este en concreto sería para kernel 1.50 pero se pueden hacer para otros kernels (si es que necesitas usarlo, porque también pueden ir en modo usuario. Depende de a que recuersos quieras acceder).

Salu2.
gracias grishnakhelorco.

ahora estoy leyendo sobre los modulos de kernel, asi que pronto podré (lo cual no implica que se cumpla) crear mi propio modulo :D

gracias de nuevo por responder, se agradece el aporte.
Yo estoy interesado en generar subfolders en el psp, es decir quiero tener una carpeta para aplicaciones, Juegos de Psp, Juegos Psx dentro de la opcion de juegos. Pero no se donde investigar o meter mano, debo decir que lo mas que he logrado hacer es cambiar hexadecimalmente la ruta para guardar los shots del plugin.
grishnakhelorco está baneado por "Clon de usuario baneado"
JEFF_Mex escribió:Yo estoy interesado en generar subfolders en el psp, es decir quiero tener una carpeta para aplicaciones, Juegos de Psp, Juegos Psx dentro de la opcion de juegos. Pero no se donde investigar o meter mano, debo decir que lo mas que he logrado hacer es cambiar hexadecimalmente la ruta para guardar los shots del plugin.


Difícil esto que quieres. Todas las rutas que usa el custom está en el archivo vshctrl.prx
Este archivo es código y compilación 100% D_A y es uno de los mas importantes, por lo que modificarlo no es muy recomendable.
Además, no podrias cambiar la ruta solo para los juegos de PSX, tendría que ser para todo (juegos, homebrew...).

Salu2.
JEFF_Mex escribió:Yo estoy interesado en generar subfolders en el psp, es decir quiero tener una carpeta para aplicaciones, Juegos de Psp, Juegos Psx dentro de la opcion de juegos. Pero no se donde investigar o meter mano, debo decir que lo mas que he logrado hacer es cambiar hexadecimalmente la ruta para guardar los shots del plugin.



hola:

lo que deseas es esto???

Imagen


o quieres poner los juegos en diferentes carpetas dentro de la carpeta GAMES???
LOL como se hace eso? yo kierooooooooooooo
kytu escribió:LOL como se hace eso? yo kierooooooooooooo


con el GIMP XD

es solo una imagen para ilustrar el concepto :)

pero quiza alguien que anda preguntando como hacer plugins lo haga ;)
puedes explicarmeeso del gimp? es un plugin?

EDITO: vale, ya se k es el gimp xD molaria q se pudiese hacer...
el gimp es un programa GNU de edicion de imagen.
A mi lo que me interesa saber es como poner texto en pantalla con un plugin, tipo cwcheat.
grishnakhelorco está baneado por "Clon de usuario baneado"
suloku escribió:A mi lo que me interesa saber es como poner texto en pantalla con un plugin, tipo cwcheat.


Con pspDebugScreenInit(), con un printf de toda la vida, vamos.
No importa que la PSP esté renderizando, el texto del prx siempre se superpondría...

Salu2.
11 respuestas