Check for emuNAND earlier

This commit is contained in:
Aurora 2016-03-21 04:39:00 +01:00
parent a437e533f5
commit 61564e5fcf
2 changed files with 8 additions and 10 deletions

View File

@ -23,10 +23,9 @@ void getEmunandSect(u32 *off, u32 *head, u32 emuNAND){
//Fallback to the first emuNAND if there's no second one //Fallback to the first emuNAND if there's no second one
else if(emuNAND == 2) getEmunandSect(off, head, 1); else if(emuNAND == 2) getEmunandSect(off, head, 1);
//Check if a RedNAND is present //Check if a RedNAND is present
else if(sdmmc_sdcard_readsectors(1, 1, temp) == 0){ else if(sdmmc_sdcard_readsectors(1, 1, temp) == 0)
if(*(u32 *)(temp + 0x100) != NCSD_MAGIC) if(*(u32 *)(temp + 0x100) != NCSD_MAGIC)
*head = 0; *head = 0;
}
} }
} }

View File

@ -154,20 +154,19 @@ static u32 loadEmu(void){
fileRead((u8 *)emuCodeOffset, path, size); fileRead((u8 *)emuCodeOffset, path, size);
//Find and patch emunand related offsets //Find and patch emunand related offsets
u32 *pos_sdmmc = (u32 *)memsearch((void *)emuCodeOffset, "SDMC", size, 4);
u32 *pos_offset = (u32 *)memsearch((void *)emuCodeOffset, "NAND", size, 4);
u32 *pos_header = (u32 *)memsearch((void *)emuCodeOffset, "NCSD", size, 4);
getSDMMC(firmLocation, &sdmmcOffset, firmSize);
getEmunandSect(&emuOffset, &emuHeader, emuNAND); getEmunandSect(&emuOffset, &emuHeader, emuNAND);
//No emuNAND detected
if(!emuHeader) return 0;
getSDMMC(firmLocation, &sdmmcOffset, firmSize);
getEmuRW(firmLocation, firmSize, &emuRead, &emuWrite); getEmuRW(firmLocation, firmSize, &emuRead, &emuWrite);
getMPU(firmLocation, &mpuOffset, firmSize); getMPU(firmLocation, &mpuOffset, firmSize);
u32 *pos_offset = (u32 *)memsearch((void *)emuCodeOffset, "NAND", size, 4);
u32 *pos_header = (u32 *)memsearch((void *)emuCodeOffset, "NCSD", size, 4);
u32 *pos_sdmmc = (u32 *)memsearch((void *)emuCodeOffset, "SDMC", size, 4);
*pos_sdmmc = sdmmcOffset; *pos_sdmmc = sdmmcOffset;
*pos_offset = emuOffset; *pos_offset = emuOffset;
*pos_header = emuHeader; *pos_header = emuHeader;
//No emuNAND detected
if(!*pos_header) return 0;
//Calculate offset for the hooks //Calculate offset for the hooks
*(u32 *)(nandRedir + 4) = emuCodeOffset - (u32)firmLocation - *(u32 *)(nandRedir + 4) = emuCodeOffset - (u32)firmLocation -
section[2].offset + (u32)section[2].address; section[2].offset + (u32)section[2].address;
@ -224,8 +223,8 @@ u32 patchFirm(void){
fileRead((u8 *)rebootOffset, path, size); fileRead((u8 *)rebootOffset, path, size);
//Calculate the fOpen offset and put it in the right location //Calculate the fOpen offset and put it in the right location
u32 *pos_fopen = (u32 *)memsearch((void *)rebootOffset, "OPEN", size, 4);
getfOpen(firmLocation, firmSize, &fOpenOffset); getfOpen(firmLocation, firmSize, &fOpenOffset);
u32 *pos_fopen = (u32 *)memsearch((void *)rebootOffset, "OPEN", size, 4);
*pos_fopen = fOpenOffset; *pos_fopen = fOpenOffset;
//Patch path for emuNAND-patched FIRM //Patch path for emuNAND-patched FIRM