All pastes #930723 Raw Edit

Someone

public text v1 · immutable
·published 2008-03-06 20:12 UTC
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;
	
}