Simplify loadNintendoFirm after the previous commit

This commit is contained in:
Aurora Wright 2018-02-09 05:03:22 +01:00
parent 9509a86998
commit 0b41ed04d5

View File

@ -123,7 +123,7 @@ static inline u32 loadFirmFromStorage(FirmwareType firmType)
"cetk_sysupdater" "cetk_sysupdater"
}; };
u32 firmSize = fileRead(firm, firmType == NATIVE_FIRM1X2X ? firmwareFiles[0] : firmwareFiles[(u32)firmType], 0x400000 + sizeof(Cxi) + 0x200); u32 firmSize = fileRead(firm, firmwareFiles[(u32)firmType], 0x400000 + sizeof(Cxi) + 0x200);
if(!firmSize) return 0; if(!firmSize) return 0;
@ -137,7 +137,7 @@ static inline u32 loadFirmFromStorage(FirmwareType firmType)
u8 cetk[0xA50]; u8 cetk[0xA50];
if(fileRead(cetk, firmType == NATIVE_FIRM1X2X ? cetkFiles[0] : cetkFiles[(u32)firmType], sizeof(cetk)) != sizeof(cetk)) if(fileRead(cetk, cetkFiles[(u32)firmType], sizeof(cetk)) != sizeof(cetk))
error("The cetk is missing or corrupted."); error("The cetk is missing or corrupted.");
firmSize = decryptNusFirm((Ticket *)(cetk + 0x140), (Cxi *)firm, firmSize); firmSize = decryptNusFirm((Ticket *)(cetk + 0x140), (Cxi *)firm, firmSize);
@ -150,19 +150,6 @@ static inline u32 loadFirmFromStorage(FirmwareType firmType)
return firmSize; return firmSize;
} }
static void check1x2xFirm(FirmwareType *firmType, FirmwareSource nandType, bool isSafeMode)
{
if(!ISN3DS && *firmType == NATIVE_FIRM && firm->section[0].address == (u8 *)0x1FF80000)
{
//We can't boot < 3.x EmuNANDs
if(nandType != FIRMWARE_SYSNAND) error("An old unsupported EmuNAND has been detected.\nLuma3DS is unable to boot it.");
if(isSafeMode) error("SAFE_MODE is not supported on 1.x/2.x FIRM.");
*firmType = NATIVE_FIRM1X2X;
}
}
u32 loadNintendoFirm(FirmwareType *firmType, FirmwareSource nandType, bool loadFromStorage, bool isSafeMode) u32 loadNintendoFirm(FirmwareType *firmType, FirmwareSource nandType, bool loadFromStorage, bool isSafeMode)
{ {
u32 firmVersion, u32 firmVersion,
@ -180,12 +167,7 @@ u32 loadNintendoFirm(FirmwareType *firmType, FirmwareSource nandType, bool loadF
{ {
firmSize = decryptExeFs((Cxi *)firm); firmSize = decryptExeFs((Cxi *)firm);
if(!firmSize) ctrNandError = true; if(!firmSize || !checkFirm(firmSize)) ctrNandError = true;
else
{
if(!checkFirm(firmSize)) ctrNandError = true;
else check1x2xFirm(firmType, nandType, isSafeMode);
}
} }
} }
@ -197,7 +179,6 @@ u32 loadNintendoFirm(FirmwareType *firmType, FirmwareSource nandType, bool loadF
if(result != 0) if(result != 0)
{ {
if(ctrNandError) check1x2xFirm(firmType, nandType, isSafeMode);
loadedFromStorage = true; loadedFromStorage = true;
firmSize = result; firmSize = result;
} }
@ -208,6 +189,16 @@ u32 loadNintendoFirm(FirmwareType *firmType, FirmwareSource nandType, bool loadF
if((firm->section[3].offset != 0 ? firm->section[3].address : firm->section[2].address) != (ISN3DS ? (u8 *)0x8006000 : (u8 *)0x8006800)) if((firm->section[3].offset != 0 ? firm->section[3].address : firm->section[2].address) != (ISN3DS ? (u8 *)0x8006000 : (u8 *)0x8006800))
error("The %s FIRM is not for this console.", loadedFromStorage ? "external" : "CTRNAND"); error("The %s FIRM is not for this console.", loadedFromStorage ? "external" : "CTRNAND");
if(!ISN3DS && *firmType == NATIVE_FIRM && firm->section[0].address == (u8 *)0x1FF80000)
{
//We can't boot < 3.x EmuNANDs
if(nandType != FIRMWARE_SYSNAND) error("An old unsupported EmuNAND has been detected.\nLuma3DS is unable to boot it.");
if(isSafeMode) error("SAFE_MODE is not supported on 1.x/2.x FIRM.");
*firmType = NATIVE_FIRM1X2X;
}
if(loadedFromStorage || ISDEVUNIT) if(loadedFromStorage || ISDEVUNIT)
{ {
firmVersion = 0xFFFFFFFF; firmVersion = 0xFFFFFFFF;