void init_flash() { int ret; ret = sceIoUnassign("flash0:"); while(ret < 0) { ret = sceIoUnassign("flash0:"); sceKernelDelayThread(500000); } sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", 0, NULL, 0); sceIoUnassign("flash1:"); sceIoAssign("flash1:", "lflash0:0,1", "flashfat1:", 0, NULL, 0); }
int assign_flash_zero() { int ret = sceIoUnassign("flash0:"); ret += sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", IOASSIGN_RDWR, NULL, 0); return ret; }
//Subroutine sub_00000090 - Address 0x00000090 static s32 _mountUMDDevice(s32 mode, const char *aliasName) { s32 status; s32 data; s32 len; if (strcmp(aliasName, g_umdFileSystem) != 0) { if (g_isAssigned) return SCE_ERROR_ERRNO_DEVICE_BUSY; status = sceIoAssign(aliasName, SCE_UMD_BLOCK_DEVICE_NAME, SCE_UMD_FILE_SYSTEM_DEVICE_NAME, SCE_MT_RDONLY, &data, sizeof data); if (status != SCE_ERROR_OK) { g_isAssigned = SCE_UMD_DEVICE_NOT_ASSIGNED; return status; } } status = sub_0000021C(mode); if (status != SCE_ERROR_OK) { g_isAssigned = SCE_UMD_DEVICE_NOT_ASSIGNED; return status; } len = strlen(aliasName); memcpy(g_umdFileSystem, aliasName, len); g_isAssigned = SCE_UMD_DEVICE_ASSIGNED; g_umdFileSystem[len] = '\0'; return SCE_ERROR_OK; }
static int lua_Assign(lua_State *L) { int as1; char temp[40]; const char *dev1=luaL_checkstring(L, 1), *dev2=luaL_checkstring(L, 2), *dev3=luaL_checkstring(L, 3); as1 = sceIoAssign(dev1, dev2, dev3, IOASSIGN_RDWR, NULL, 0); if(as1 < 0) { sprintf(temp,"Failed to assign \'%s\'",dev1); return luaL_error(L,temp); } return 1; }
int module_start( SceSize args, void *argp ) { int fw = initPatches(); sceIoAssign("ms0:", "msstor0p1:", "fatms0:", IOASSIGN_RDWR, NULL, 0); log( "Firmware Version: %08x\n", fw ); cxmb_magic = getMagic(); if ( cxmb_magic == 0 ) { log( "Not supported firmware version!\n" ); } log( "CXMB Magic: %08x\n", cxmb_magic ); initUtils(); install_cxmb(); int thid = sceKernelCreateThread("cxmb_thread", main_thread, 47, 0x400, 0x00100001, NULL); if( thid >= 0 ) sceKernelStartThread(thid, 0, 0); return 0; }
/* Write files to or from the flash0. */ int fileCopy(const char* sFileSrc , const char* sFileDest) { if (fileExist(sFileSrc)) { int fd1, fd2, len; char buf[128*1024]; sceIoUnassign("flash0:"); sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", 0, NULL, 0); fd1 = sceIoOpen(sFileSrc, PSP_O_RDONLY, 0); fd2 = sceIoOpen(sFileDest, PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777); while(1) { len = sceIoRead(fd1, buf, sizeof(buf)); if (len == 0) break; sceIoWrite(fd2, buf, len); } sceIoClose(fd1); sceIoClose(fd2); sceIoUnassign("flash0:"); sprintf(buffer, " %s > %s Done.", sFileSrc, sFileDest); swapBuffers(); sceGuStart(GU_DIRECT, list); drawStringCenter(buffer, 50 + (10 * i), 0xFF000000, 7); drawObjects(); i++; return 1; } else { sprintf(buffer, " File not found: %s", sFileSrc); swapBuffers(); sceGuStart(GU_DIRECT, list); drawStringCenter(buffer, 50 + (10 * i), 0xFF000099, 7); drawObjects(); i++; return 0; } i++; }
void setPassword() { Config cfg; char input[11]; int len; #ifndef DEBUG footer_changemode = loadImageFromMemory(images[FOOTER_CHANGEMODE].data, images[FOOTER_CHANGEMODE].hdr.size); #endif while(1) { #ifdef DEBUG printf("\nEnter new password: "******"\nConfirm password: "******"\nPassword changed."); #else int temp; blitImageToScreen(0, 0, images[BACKGROUND].hdr.w, images[BACKGROUND].hdr.h, background, images[BACKGROUND].hdr.x, images[BACKGROUND].hdr.y); blitAlphaImageToScreen(0, 0, images[FOOTER_CHANGEMODE].hdr.w, images[FOOTER_CHANGEMODE].hdr.h, footer_changemode, images[FOOTER_CHANGEMODE].hdr.x, images[FOOTER_CHANGEMODE].hdr.y); blitAlphaImageToScreen(0, 0, images[TITLE_CONFIRMPASSWORD].hdr.w, images[TITLE_CONFIRMPASSWORD].hdr.h, title_confirmpassword, images[TITLE_CONFIRMPASSWORD].hdr.x, images[TITLE_CONFIRMPASSWORD].hdr.y); freeImage(title_confirmpassword); msg_passwordchanged = loadImageFromMemory(images[MSG_PASSWORDCHANGED].data, images[MSG_PASSWORDCHANGED].hdr.size); blitAlphaImageToScreen(0, 0, images[MSG_PASSWORDCHANGED].hdr.w, images[MSG_PASSWORDCHANGED].hdr.h, msg_passwordchanged, images[MSG_PASSWORDCHANGED].hdr.x, images[MSG_PASSWORDCHANGED].hdr.y); freeImage(msg_passwordchanged); for(temp = 0; temp < len; temp++) { blitAlphaImageToScreen(0, 0, images[MASK].hdr.w, images[MASK].hdr.h, mask, images[MASK].hdr.x+(temp*images[MASK].hdr.w), images[MASK].hdr.y); } sceDisplayWaitVblankStart(); flipScreen(); #endif sceKernelDelayThread(3000*1000); #ifdef DEBUG printf("\n\nPress X to require password only at reboot.\n\nPress O to require password always at XMB."); #else blitImageToScreen(0, 0, images[BACKGROUND].hdr.w, images[BACKGROUND].hdr.h, background, images[BACKGROUND].hdr.x, images[BACKGROUND].hdr.y); blitAlphaImageToScreen(0, 0, images[FOOTER_CHANGEMODE].hdr.w, images[FOOTER_CHANGEMODE].hdr.h, footer_changemode, images[FOOTER_CHANGEMODE].hdr.x, images[FOOTER_CHANGEMODE].hdr.y); title_requirepassword = loadImageFromMemory(images[TITLE_REQUIREPASSWORD].data, images[TITLE_REQUIREPASSWORD].hdr.size); blitAlphaImageToScreen(0, 0, images[TITLE_REQUIREPASSWORD].hdr.w, images[TITLE_REQUIREPASSWORD].hdr.h, title_requirepassword, images[TITLE_REQUIREPASSWORD].hdr.x, images[TITLE_REQUIREPASSWORD].hdr.y); freeImage(title_requirepassword); buttons = loadImageFromMemory(images[BUTTONS].data, images[BUTTONS].hdr.size); blitAlphaImageToScreen(0, 0, images[BUTTONS].hdr.w, images[BUTTONS].hdr.h, buttons, images[BUTTONS].hdr.x, images[BUTTONS].hdr.y); freeImage(buttons); sceDisplayWaitVblankStart(); flipScreen(); #endif SceCtrlLatch latch; sceCtrlSetSamplingCycle(0); sceCtrlSetSamplingMode(PSP_CTRL_MODE_DIGITAL); int skipped=0; while(1) { sceCtrlReadLatch(&latch); if(!skipped) { skipped=1; continue; } if (latch.uiMake & PSP_CTRL_CROSS) { cfg.onlyBoot = 1; break; } if (latch.uiMake & PSP_CTRL_CIRCLE) { cfg.onlyBoot = 0; break; } sceKernelDelayThread(10*1000); } sceKernelDelayThread(2000*1000); break; } else { #ifdef DEBUG printf("\nPasswords do not match."); #else int temp; blitImageToScreen(0, 0, images[BACKGROUND].hdr.w, images[BACKGROUND].hdr.h, background, images[BACKGROUND].hdr.x, images[BACKGROUND].hdr.y); blitAlphaImageToScreen(0, 0, images[FOOTER_CHANGEMODE].hdr.w, images[FOOTER_CHANGEMODE].hdr.h, footer_changemode, images[FOOTER_CHANGEMODE].hdr.x, images[FOOTER_CHANGEMODE].hdr.y); blitAlphaImageToScreen(0, 0, images[TITLE_CONFIRMPASSWORD].hdr.w, images[TITLE_CONFIRMPASSWORD].hdr.h, title_confirmpassword, images[TITLE_CONFIRMPASSWORD].hdr.x, images[TITLE_CONFIRMPASSWORD].hdr.y); freeImage(title_confirmpassword); msg_notmatch = loadImageFromMemory(images[MSG_NOTMATCH].data, images[MSG_NOTMATCH].hdr.size); blitAlphaImageToScreen(0, 0, images[MSG_NOTMATCH].hdr.w, images[MSG_NOTMATCH].hdr.h, msg_notmatch, images[MSG_NOTMATCH].hdr.x, images[MSG_NOTMATCH].hdr.y); freeImage(msg_notmatch); for(temp = 0; temp < len; temp++) { blitAlphaImageToScreen(0, 0, images[MASK].hdr.w, images[MASK].hdr.h, mask, images[MASK].hdr.x+(temp*images[MASK].hdr.w), images[MASK].hdr.y); } sceDisplayWaitVblankStart(); flipScreen(); #endif sceKernelDelayThread(3000*1000); } } #ifndef DEBUG freeImage(footer_changemode); #endif int result; result = sceIoUnassign("flash0:"); if(result < 0) { #ifdef DEBUG printf("\nError in unassign flash0."); #endif } else { result = sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", IOASSIGN_RDWR, NULL, 0); if(result < 0) { #ifdef DEBUG printf("\nError in assigning flash0 for write."); #endif } else { SceUID fp; fp = sceIoOpen("flash0:/buttons.ini", PSP_O_WRONLY|PSP_O_TRUNC|PSP_O_CREAT, 0777); if(fp < 0) { #ifdef DEBUG printf("\nError writing flash0:/buttons.ini."); #endif } else { sceIoWrite(fp, &cfg, sizeof(cfg)); sceIoClose(fp); #ifdef DEBUG printf("\nPassword written successfully."); #endif } } } }
int main() { pspDebugScreenInit(); pspDebugScreenSetBackColor(0xFF0000); pspDebugScreenSetTextColor(0x00FFFF); pspDebugScreenClear(); printf("Recovery Mode by Dark_Alex, in-eboot by BlackSith\n\n\n\n"); printf("Press start to activate USB Mass.\n"); printf("Press triangle to flash ms0:/index.dat to flash0.\n"); printf("Press cross to start the program under ms0:/PSP/GAME/UPDATE/EBOOT.PBP\n"); printf("Press home to exit.\n\n\n\n"); sceIoUnassign("flash0:"); sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", IOASSIGN_RDWR, NULL, 0); while (1) { SceCtrlData pad; int keyprocessed = 0; sceCtrlReadBufferPositive(&pad, 1); if (pad.Buttons & PSP_CTRL_START) { start_usb(); printf("Usb started.\n"); keyprocessed = 1; } else if (pad.Buttons & PSP_CTRL_TRIANGLE) { if (copy_file("ms0:/index.dat", "flash0:/vsh/etc/index.dat") < 0) printf("Cannot copy file. (file missing?).\n"); else printf("File copied succesfully.\n"); keyprocessed = 1; } else if (pad.Buttons & PSP_CTRL_CROSS) { struct SceKernelLoadExecParam param; memset(¶m, 0, sizeof(param)); param.size = sizeof(param); param.args = strlen(PROGRAM)+1; param.argp = PROGRAM; param.key = "updater"; printf("Starting program...\n"); sceKernelLoadExec(PROGRAM, ¶m); keyprocessed = 1; } else if (pad.Buttons & PSP_CTRL_HOME) { break; } sceKernelDelayThread((keyprocessed) ? 200000 : 50000); } sceKernelExitGame(); return 0; }