12 #define JMP(addr) (0x08000000|(0x3ffffff&((addr)>>2)))
13 #define JAL(addr) (0x0c000000 | (0x3ffffff & ((addr) >> 2)))
15 static const u32 g_new_fileio[20] = {
56 static u32 new_fileio[
sizeof(g_new_fileio)/
sizeof(g_new_fileio[0])] ALIGNED(16);
61 memcpy(UNCACHED_SEG(new_fileio), g_new_fileio,
sizeof(g_new_fileio));
62 memset(&mod_info, 0,
sizeof(mod_info));
64 if ((!ret) || (mod_info.version != 0x101))
68 if((patch_addr = SifAllocIopHeap(
sizeof(new_fileio))) == NULL)
72 p_new_fileio = UNCACHED_SEG(new_fileio);
75 p_new_fileio[0] += ((u32)mod_info.text_start >> 2);
76 p_new_fileio[2] += ((u32)mod_info.text_start >> 2);
79 p_new_fileio[8] += ((u32)mod_info.text_start >> 2);
80 p_new_fileio[11] += ((u32)mod_info.text_start >> 2);
81 p_new_fileio[14] += ((u32)mod_info.text_start >> 2);
86 dmat.size=
sizeof(new_fileio);
88 sceSifSetDma(&dmat, 1);
91 new_jump_op = JMP((u32)patch_addr);
92 smem_write_word((
void *)((u8 *)mod_info.text_start + 0x0bb8), new_jump_op);
93 new_jump_op = JAL((u32)patch_addr + 16);
95 smem_write_word((
void *)((u8 *)mod_info.text_start + 0x09cc), new_jump_op);
96 smem_write_word((
void *)((u8 *)mod_info.text_start + 0x0a58), new_jump_op);