3 Commits

3 changed files with 15 additions and 1 deletions

View File

@@ -220,6 +220,7 @@ void NdsLoader::Load(BootMode bootMode)
if (bootMode == BootMode::Normal)
{
bootType = _romHeader.IsDsiWare() ? BOOT_TYPE_NAND : BOOT_TYPE_CARD;
HandleIQueRegionFreePatching();
}
else if (bootMode == BootMode::Multiboot)
{
@@ -296,6 +297,9 @@ void NdsLoader::Load(BootMode bootMode)
{
SetupDsiDeviceList();
// Set twl wram locking (REG_MBK9) settings from rom header
REG_MBK9 = _romHeader.mbk9Setting[0] | (_romHeader.mbk9Setting[1] << 8) | (_romHeader.mbk9Setting[2] << 16);
u32 scfgExt7 = 0x93FBFB00 | (_romHeader.arm7ScfgExt7 & 0x40407);
REG_SCFG_EXT = scfgExt7;
REG_SCFG_CLK = 0x187;
@@ -1013,6 +1017,15 @@ bool NdsLoader::TryDecryptSecureArea()
return true;
}
void NdsLoader::HandleIQueRegionFreePatching()
{
if ((_romHeader.flags & 0x80) == 0x80)
{
_romHeader.flags &= ~0x80;
_romHeader.headerCrc = swi_getCrc16(0xFFFF, (void*)&_romHeader, 0x15E);
}
}
ConsoleRegion NdsLoader::GetRomRegion(u32 gameCode)
{
u8 gameRegionCode = (gameCode >> 24) & 0xFF;

View File

@@ -73,6 +73,7 @@ private:
void InsertArgv();
bool TrySetupDsiWareSave();
bool TryDecryptSecureArea();
void HandleIQueRegionFreePatching();
ConsoleRegion GetRomRegion(u32 gameCode);
UserLanguage GetLanguageByRomRegion(ConsoleRegion romRegion);
u32 GetSupportedLanguagesByRegion(ConsoleRegion region);

View File

@@ -167,7 +167,7 @@ bool CardiTryReadCardDmaPatch::FindPatchTarget(PatchContext& patchContext)
static u32 getArmBlAddress(const u32* instructionPointer)
{
u32 blInstruction = *instructionPointer;
return (u32)instructionPointer + 8 + ((int)((blInstruction & 0xFFFFFF) << 8) >> 6);
return (u32)instructionPointer + 8 + ((int)((blInstruction & 0xFFFFFF) << 8) >> 6) + ((blInstruction >> 24) == 0xFA ? 1 : 0);
}
void CardiTryReadCardDmaPatch::ApplyPatch(PatchContext& patchContext)