diff --git a/frontend/drivers/platform_psp.c b/frontend/drivers/platform_psp.c index e5f087b243..4e5db6d03f 100644 --- a/frontend/drivers/platform_psp.c +++ b/frontend/drivers/platform_psp.c @@ -319,6 +319,8 @@ static void frontend_psp_exec(const char *path, bool should_load_game) { #if defined(HAVE_KERNEL_PRX) || defined(IS_SALAMANDER) || defined(VITA) char argp[512] = {0}; + char boot_params[1024]; + char core_name[256]; SceSize args = 0; #if !defined(VITA) @@ -338,8 +340,23 @@ static void frontend_psp_exec(const char *path, bool should_load_game) RARCH_LOG("Attempt to load executable: [%s].\n", path); #if defined(VITA) RARCH_LOG("Attempt to load executable: %d [%s].\n", args, argp); - int ret = sceAppMgrLoadExec(path, args==0? NULL : (char * const*)((const char*[]){argp, 0}), NULL); - RARCH_LOG("Attempt to load executable: [%d].\n", ret); +#ifdef IS_SALAMANDER + sceAppMgrGetAppParam(boot_params); + if (strstr(boot_params,"psgm:play")) { + char *param1 = strstr(boot_params, "¶m=")+7; + char *param2 = strstr(boot_params, "¶m2="); + memcpy(core_name, param1, param2 - param1); + core_name[param2-param1] = 0; + sprintf(argp, param2 + 8); + int ret = sceAppMgrLoadExec(core_name, (char * const*)((const char*[]){argp, 0}), NULL); + RARCH_LOG("Attempt to load executable: [%d].\n", ret); + } + else +#endif + { + int ret = sceAppMgrLoadExec(path, args == 0 ? NULL : (char * const*)((const char*[]){argp, 0}), NULL); + RARCH_LOG("Attempt to load executable: [%d].\n", ret); + } #else exitspawn_kernel(path, args, argp); #endif diff --git a/vita/launcher/Makefile b/vita/launcher/Makefile new file mode 100644 index 0000000000..75b0ad0dc9 --- /dev/null +++ b/vita/launcher/Makefile @@ -0,0 +1,34 @@ +TITLE_ID = RAXXXXXXX +TARGET = Launcher +OBJS = main.o + +LIBS = -lSceAppMgr_stub + +PREFIX = arm-vita-eabi +CC = $(PREFIX)-gcc +CFLAGS = -Wl,-q -Wall +ASFLAGS = $(CFLAGS) + +all: builder/eboot.bin + +%.vpk: eboot.bin + vita-mksfoex -s TITLE_ID=$(TITLE_ID) "Launcher" param.sfo + vita-pack-vpk -s param.sfo -b eboot.bin $@ \ + -a contents/icon0.png=sce_sys/icon0.png \ + -a contents/bg.png=sce_sys/livearea/contents/bg.png \ + -a contents/startup.png=sce_sys/livearea/contents/startup.png \ + -a contents/template.xml=sce_sys/livearea/contents/template.xml \ + -a contents/args.txt=args.txt + +builder/eboot.bin: $(TARGET).velf + vita-make-fself -s $< $@ + +%.velf: %.elf + vita-elf-create $< $@ + +$(TARGET).elf: $(OBJS) + $(CC) $(CFLAGS) $^ $(LIBS) -o $@ + +clean: + @rm -rf $(TARGET).vpk $(TARGET).velf $(TARGET).elf $(OBJS) \ + eboot.bin param.sfo diff --git a/vita/launcher/builder/build.bat b/vita/launcher/builder/build.bat new file mode 100644 index 0000000000..9753e749c7 --- /dev/null +++ b/vita/launcher/builder/build.bat @@ -0,0 +1,8 @@ +@set /p title="Insert bubble name: " +@set /p rom="Insert rom fullpath: " +@set /p core="Insert core fullpath: " +@set /p id="Insert bubble title ID (9 characters [NOTE: Only UPPERCASE letters or numbers]): " +@echo|set /p="%core%"> "contents/core.txt" +@echo|set /p="%rom%"> "contents/rom.txt" +vita-mksfoex -s TITLE_ID=%id% "%title%" param.sfo +vita-pack-vpk -s param.sfo -b eboot.bin "%title%.vpk" -a contents/icon0.png=sce_sys/icon0.png -a contents/bg.png=sce_sys/livearea/contents/bg.png -a contents/startup.png=sce_sys/livearea/contents/startup.png -a contents/template.xml=sce_sys/livearea/contents/template.xml -a contents/core.txt=core.txt -a contents/rom.txt=rom.txt \ No newline at end of file diff --git a/vita/launcher/builder/vita-mksfoex.exe b/vita/launcher/builder/vita-mksfoex.exe new file mode 100644 index 0000000000..0da9a2a018 Binary files /dev/null and b/vita/launcher/builder/vita-mksfoex.exe differ diff --git a/vita/launcher/builder/vita-pack-vpk.exe b/vita/launcher/builder/vita-pack-vpk.exe new file mode 100644 index 0000000000..b75a75274d Binary files /dev/null and b/vita/launcher/builder/vita-pack-vpk.exe differ diff --git a/vita/launcher/contents/template.xml b/vita/launcher/contents/template.xml new file mode 100644 index 0000000000..60e0b8ea32 --- /dev/null +++ b/vita/launcher/contents/template.xml @@ -0,0 +1,11 @@ + + + + + bg.png + + + + startup.png + + \ No newline at end of file diff --git a/vita/launcher/main.c b/vita/launcher/main.c new file mode 100644 index 0000000000..0c2ec2c1f1 --- /dev/null +++ b/vita/launcher/main.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +int main(int argc, const char *argv[]) { + char core[256], rom[256]; + memset(core, 0, 256); + memset(rom, 0, 256); + FILE *f = fopen("app0:core.txt", "rb"); + FILE *f2 = fopen("app0:rom.txt", "rb"); + if (f && f2) { + fread(core, 1, 256, f); + fread(rom, 1, 256, f2); + fclose(f); + fclose(f2); + char uri[512]; + sprintf(uri, "psgm:play?titleid=%s¶m=%s¶m2=%s", "RETROVITA", core, rom); + + sceAppMgrLaunchAppByUri(0xFFFFF, uri); + } + + sceKernelExitProcess(0); + + return 0; +}