From 4fabe1f704b805bb4b22b63e79288c4f08b70514 Mon Sep 17 00:00:00 2001 From: Aurora Date: Tue, 12 Apr 2016 15:25:36 +0200 Subject: [PATCH] Added new and working N3DS CPU patch from @TuxSH --- injector/source/patcher.c | 18 +++++++++++++++++- source/config.c | 1 + source/firm.c | 6 +++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/injector/source/patcher.c b/injector/source/patcher.c index f5a4da9..6c0adfa 100644 --- a/injector/source/patcher.c +++ b/injector/source/patcher.c @@ -206,7 +206,7 @@ void patchCode(u64 progId, u8 *code, u32 size) case 0x0004001000027000LL: // KOR MSET case 0x0004001000028000LL: // TWN MSET { - if(R_SUCCEEDED(loadConfig()) && ((config >> 5) & 1)) + if(R_SUCCEEDED(loadConfig()) && ((config >> 6) & 1)) { static const u16 verPattern[] = u"Ver."; const u32 currentNand = ((config >> 16) & 3); @@ -242,6 +242,22 @@ void patchCode(u64 progId, u8 *code, u32 size) sizeof(stopCartUpdatesPatch), 2 ); + if(R_SUCCEEDED(loadConfig()) && ((config >> 4) & 1)) + { + static const u8 cfgN3dsCpuPattern[] = { + 0x40, 0xA0, 0xE1, 0x07, 0x00 + }; + + u8 *cfgN3dsCpuLoc = memsearch(code, cfgN3dsCpuPattern, size, sizeof(cfgN3dsCpuPattern)); + + //Patch N3DS CPU Clock and L2 cache setting + if(cfgN3dsCpuLoc != NULL) + { + *(u32 *)(cfgN3dsCpuLoc + 3) = 0xE1A00000; + *(u32 *)(cfgN3dsCpuLoc + 0x1F) = 0xE3A00003; + } + } + break; } diff --git a/source/config.c b/source/config.c index 272243c..9cf57c0 100644 --- a/source/config.c +++ b/source/config.c @@ -24,6 +24,7 @@ void configureCFW(const char *configPath) "( ) Updated SysNAND mode (A9LH-only)", "( ) Force A9LH detection", "( ) Use second EmuNAND as default", + "( ) Force max N3DS clock speed and L2 cache", "( ) Use developer UNITINFO", "( ) Show current NAND in System Settings", "( ) Show GBA boot screen in patched AGB_FIRM", diff --git a/source/firm.c b/source/firm.c index 337b13e..d73d68d 100755 --- a/source/firm.c +++ b/source/firm.c @@ -142,7 +142,7 @@ void main(void) configureCFW(configPath); //If screens are inited or the corresponding option is set, load splash screen - if(PDN_GPU_CNT != 1 || CONFIG(7, 1)) loadSplash(); + if(PDN_GPU_CNT != 1 || CONFIG(8, 1)) loadSplash(); //Determine if we need to boot an emuNAND or sysNAND nandType = (pressed & BUTTON_L1) ? autoBootSys : ((pressed & BUTTON_R1) ? updatedSys : !autoBootSys); @@ -271,7 +271,7 @@ static inline void patchNativeFirm(u32 nandType, u32 emuHeader, u32 a9lhInstalle *(u16 *)sigOffset2 = sigPatch[0]; *((u16 *)sigOffset2 + 1) = sigPatch[1]; - if(CONFIG(4, 1)) + if(CONFIG(5, 1)) { //Apply UNITINFO patch u8 *unitInfoOffset = getUnitInfoValueSet(arm9Section, section[2].size); @@ -383,7 +383,7 @@ static inline void patchTwlAgbFirm(u32 firmType) /* Calculate the amount of patches to apply. Only count the boot screen patch for AGB_FIRM if the matching option was enabled (keep it as last) */ - u32 numPatches = firmType == 1 ? (sizeof(twlPatches) / sizeof(patchData)) : (sizeof(agbPatches) / sizeof(patchData) - !CONFIG(6, 1)); + u32 numPatches = firmType == 1 ? (sizeof(twlPatches) / sizeof(patchData)) : (sizeof(agbPatches) / sizeof(patchData) - !CONFIG(7, 1)); const patchData *patches = firmType == 1 ? twlPatches : agbPatches; //Patch