//Nand redirection void loadEmu(void){ //Read emunand code from SD u32 code = emuCode(); fileRead(code, "/rei/emunand/emunand.bin", 0); u32 *pos_offset = memsearch(code, "NAND", 0x218, 4); u32 *pos_header = memsearch(code, "NCSD", 0x218, 4); if (pos_offset && pos_header) { *pos_offset = emuOffset; *pos_header = emuHeader; } //Add emunand hooks memcpy((u8*)emuHook(1), nandRedir, sizeof(nandRedir)); memcpy((u8*)emuHook(2), nandRedir, sizeof(nandRedir)); }
//Nand redirection void loadEmu(void){ //Read emunand code from SD u32 code = emuCode(); const char path[] = "/rei/emunand/emunand.bin"; u32 size = fileSize(path); fileRead(code, path, size); //Find and patch emunand related offsets u32 *pos_sdmmc = memsearch(code, "SDMC", size, 4); u32 *pos_offset = memsearch(code, "NAND", size, 4); u32 *pos_header = memsearch(code, "NCSD", size, 4); getSDMMC(firmLocation, &sdmmcOffset, firmSize); getEmunandSect(&emuOffset, &emuHeader); getEmuRW(firmLocation, firmSize, &emuRead, &emuWrite); *pos_sdmmc = sdmmcOffset; *pos_offset = emuOffset; *pos_header = emuHeader; //Add emunand hooks memcpy((u8*)emuRead, nandRedir, sizeof(nandRedir)); memcpy((u8*)emuWrite, nandRedir, sizeof(nandRedir)); memcpy((u8*)mpuCode(), mpu, sizeof(mpu)); }