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; }
/* 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++; }
// Assign/UnAssign Devices static int lua_Unassign(lua_State *L) { int uas1; char temp[40]; const char *device = luaL_checkstring(L, 1); uas1 = sceIoUnassign(device); if(uas1 < 0) { sprintf(temp,"Failed to unassign \'%s\'",temp); return luaL_error(L,temp); } return 1; }
//Subroutine sub_0000018C - Address 0x0000018C static s32 _unmountUMDDevice(s32 mode, const char *aliasName) { s32 status; status = SCE_ERROR_OK; if (g_isAssigned) status = sceIoUnassign(aliasName); if (status != SCE_ERROR_OK) return status; status = sub_00000278(mode); g_isAssigned = SCE_UMD_DEVICE_NOT_ASSIGNED; strncpy(g_umdFileSystem, "UMD:", SCE_UMD_FILE_SYSTEM_NAME_LEN); // TODO: ":DMU" ? return status; }
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; }