From a424b252637fab772ddcdc6a8405247fbaecff35 Mon Sep 17 00:00:00 2001 From: TY <47445484+R-YaTian@users.noreply.github.com> Date: Sun, 4 Jan 2026 23:13:24 +0800 Subject: [PATCH] Impl `HandleiQueRegionFreePatching` to bypass region locking on certain iQue games (#83) --- arm7/source/loader/NdsLoader.cpp | 10 ++++++++++ arm7/source/loader/NdsLoader.h | 1 + 2 files changed, 11 insertions(+) diff --git a/arm7/source/loader/NdsLoader.cpp b/arm7/source/loader/NdsLoader.cpp index 7709061..ae13753 100644 --- a/arm7/source/loader/NdsLoader.cpp +++ b/arm7/source/loader/NdsLoader.cpp @@ -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) { @@ -1013,6 +1014,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; diff --git a/arm7/source/loader/NdsLoader.h b/arm7/source/loader/NdsLoader.h index 14bd17a..663cc52 100644 --- a/arm7/source/loader/NdsLoader.h +++ b/arm7/source/loader/NdsLoader.h @@ -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);