rendered paste body/*
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 <pspsdk.h>
#include <pspkernel.h>
#include <psputility.h>
#include <pspsyscon.h>
#include <psputilsforkernel.h>
#include <pspreg.h>
#include <string.h>
#include <stdlib.h>
#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;
}