/* Small test for changing music folder by JumpR Made for by retard_gamer =D Note: Will probably break on the next CF revesion (yes, CF, so a new M33 update will probably break it too) But for now, it's good :) */ #include #include #include #include #include #include #include #include #define MIPS_J(x) ((((u32)x & 0xFFFFFFC) >> 2) | 0x08000000) PSP_MODULE_INFO("musictest", 0x1007, 0, 1); PSP_MAIN_THREAD_ATTR(0); void FixMusicFolder(const char *str){ char temp[100]; strcpy(temp, str); strcpy(str, "ms0:/PSP/GAME/PSPR/SONGS"); strcat(str, temp+14); } SceUID sceIoDopen_patched(const char *dirname){ u32 k1 = pspSdkSetK1(0); if(strncmp(dirname, "ms0:/PSP/MUSIC", 14) == 0) FixMusicFolder(dirname); pspSdkSetK1(k1); return sceIoDopen(dirname); } SceUID sceIoOpen_patched(const char *file, int flags, SceMode mode){ u32 k1 = pspSdkSetK1(0); if(strncmp(file, "ms0:/PSP/MUSIC", 14) == 0) FixMusicFolder(file); pspSdkSetK1(k1); return sceIoOpen(file, flags, mode); } int sceIoGetstat_patched(const char *file, SceIoStat *stat){ u32 k1 = pspSdkSetK1(0); if(strncmp(file, "ms0:/PSP/MUSIC", 14) == 0) FixMusicFolder(file); pspSdkSetK1(k1); return sceIoGetstat(file, stat); } int sceIoRemove_patched(const char *file){ u32 k1 = pspSdkSetK1(0); if(strncmp(file, "ms0:/PSP/MUSIC", 14) == 0) FixMusicFolder(file); pspSdkSetK1(k1); return sceIoRemove(file); } int sceIoRmdir_patched(const char *path){ u32 k1 = pspSdkSetK1(0); if(strncmp(path, "ms0:/PSP/MUSIC", 14) == 0) FixMusicFolder(path); pspSdkSetK1(k1); return sceIoRmdir(path); } int main_thread(SceSize args, void* argp) { sceKernelDelayThread(2000000); u32 *start = (u32 *)sceKernelFindModuleByName("VshControl"); u32 text_addr = *(start+27); _sw(MIPS_J((u32)sceIoDopen_patched), text_addr+0x3C30); _sw(MIPS_J((u32)sceIoOpen_patched), text_addr+0x3C08); _sw(MIPS_J((u32)sceIoRemove_patched), text_addr+0x3C48); _sw(MIPS_J((u32)sceIoGetstat_patched), text_addr+0x3C60); _sw(MIPS_J((u32)sceIoRmdir_patched), text_addr+0x3C58); return 0; } int module_start(SceSize args, void *argp) { SceUID thid; thid = sceKernelCreateThread("musictest", main_thread, 0x18, 0x1000, 0, NULL); if (thid >= 0) sceKernelStartThread(thid, args, argp); return 0; } int module_stop (void) { return 0; }