Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <pspsdk.h>
- #include <pspkernel.h>
- #include <pspdebug.h>
- #include <pspctrl.h>
- #include <pspsuspend.h>
- #include <psppower.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- //#define IMMEDIATE_SHUTDOWN
- PSP_MODULE_INFO("PspShutdown", 0, 1, 1);
- PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
- #define KERNELVERSION (sceKernelDevkitVersion()>>8)
- #define printf pspDebugScreenPrintf
- #define PSP_FIRMWARE(f) ((((f >> 8) & 0xF) << 24) | (((f >> 4) & 0xF) << 16) | ((f & 0xF) << 8) | 0x10)
- static u32 GetSetBaseAddrNid(u32 HASH,u32 FW500,u32 FW620,u32 FW635,u32 FW660){
- u32 devkit = sceKernelDevkitVersion();
- if(devkit<PSP_FIRMWARE(0x500))return HASH;
- if(devkit<PSP_FIRMWARE(0x620))return FW500; //should be 0x555?
- if(devkit<PSP_FIRMWARE(0x630))return FW620;
- if(devkit<PSP_FIRMWARE(0x660))return FW635;
- return FW660;
- }
- int LoadStartModule(char *module, int partition){
- //SceUID mod = kuKernelLoadModule(module, 0, NULL);
- SceUID mod = sceKernelLoadModule(module, 0, NULL);
- if (mod < 0)
- return mod;
- return sceKernelStartModule(mod, 0, NULL, NULL, NULL);
- }
- int executeBasic(const char *path){
- struct SceKernelLoadExecParam param;
- memset(¶m,0,sizeof(param));
- param.argp=path;
- param.args=strlen(path)+1;
- param.key=NULL;//"game";
- param.size=sizeof(param)+param.args;
- return sceKernelLoadExec(path,¶m);
- }
- int main(int argc, char **argv){
- #ifdef IMMEDIATE_SHUTDOWN
- scePowerRequestStandby();
- #else
- pspDebugScreenInit();
- //SceUID mod = LoadStartModule("libpsardumper.prx", PSP_MEMORY_PARTITION_KERNEL);
- //if (mod < 0)
- //{
- // ErrorExit(5000, "Error 0x%08X loading/starting libpsardumper.prx.\n", mod);
- //}
- //mod = LoadStartModule("pspdecrypt.prx", PSP_MEMORY_PARTITION_KERNEL);
- //if (mod < 0)
- //{
- // ErrorExit(5000, "Error 0x%08X loading/starting pspdecrypt.prx.\n", mod);
- //}
- printf("Circle: return to XMB\n");
- printf("Cross: shutdown PSP\n");
- printf("\n");
- for(;;){
- SceCtrlData pad;
- sceCtrlReadBufferPositive(&pad, 1);
- if(pad.Buttons & PSP_CTRL_CIRCLE){
- sceKernelExitGame();
- break;
- }
- if(pad.Buttons & PSP_CTRL_CROSS){
- scePowerRequestStandby();
- break;
- }
- #if 1
- if(pad.Buttons & PSP_CTRL_TRIANGLE){
- typedef void(*TscePowerRequestColdReset)(int);
- TscePowerRequestColdReset PscePowerRequestColdReset;
- u32 NID=GetSetBaseAddrNid(0x0442D852,0x80A2AAD4,0x599A2901,0xF50DA013,0x9DAF25A0);
- printf("NID: %08X\n",NID);
- s32 addr=sctrlHENFindFunction("scePower_Service","scePower_driver",NID);
- printf("scePowerRequestColdReset: %08X\n",addr);
- if(addr>0){ //it fails... it is kernel mode function...
- PscePowerRequestColdReset=(TscePowerRequestColdReset)addr;
- PscePowerRequestColdReset(0);
- }
- break;
- }
- #endif
- if(pad.Buttons & PSP_CTRL_SQUARE){
- executeBasic("ms0:/PSP/GAME/FastRecovery/EBOOT.PBP");
- break;
- }
- sceKernelDelayThread(1000);
- }
- printf("seems failed\n");
- sceKernelDelayThread(2000000);
- #endif
- sceKernelExitGame();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement