From 61564e5fcfdc2fd7164ec919b434cd9a3d292211 Mon Sep 17 00:00:00 2001 From: Aurora Date: Mon, 21 Mar 2016 04:39:00 +0100 Subject: [PATCH] Check for emuNAND earlier --- source/emunand.c | 3 +-- source/firm.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/source/emunand.c b/source/emunand.c index 9fae7cb4..c892a35f 100644 --- a/source/emunand.c +++ b/source/emunand.c @@ -23,10 +23,9 @@ void getEmunandSect(u32 *off, u32 *head, u32 emuNAND){ //Fallback to the first emuNAND if there's no second one else if(emuNAND == 2) getEmunandSect(off, head, 1); //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) *head = 0; - } } } diff --git a/source/firm.c b/source/firm.c index 35367c70..92b8e339 100755 --- a/source/firm.c +++ b/source/firm.c @@ -154,20 +154,19 @@ static u32 loadEmu(void){ fileRead((u8 *)emuCodeOffset, path, size); //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); + //No emuNAND detected + if(!emuHeader) return 0; + getSDMMC(firmLocation, &sdmmcOffset, firmSize); getEmuRW(firmLocation, firmSize, &emuRead, &emuWrite); 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_offset = emuOffset; *pos_header = emuHeader; - //No emuNAND detected - if(!*pos_header) return 0; - //Calculate offset for the hooks *(u32 *)(nandRedir + 4) = emuCodeOffset - (u32)firmLocation - section[2].offset + (u32)section[2].address; @@ -224,8 +223,8 @@ u32 patchFirm(void){ fileRead((u8 *)rebootOffset, path, size); //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); + u32 *pos_fopen = (u32 *)memsearch((void *)rebootOffset, "OPEN", size, 4); *pos_fopen = fOpenOffset; //Patch path for emuNAND-patched FIRM