Skip to content

Commit

Permalink
Fix *Power Rangers: Samurai* not booting
Browse files Browse the repository at this point in the history
  • Loading branch information
RocketRobz committed Dec 24, 2024
1 parent 2fa79d9 commit 0571736
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 15 deletions.
3 changes: 2 additions & 1 deletion retail/bootloader/source/arm7/find_arm9.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ static const u32 mpuInitRegion1Data5[1] = {0x2000031}; // SDK 5
static const u32 mpuInitRegion2Signature[1] = {0xEE060F12};
static const u32 mpuInitRegion2Data1[1] = {0x27C0023}; // SDK <= 2
static const u32 mpuInitRegion2Data3[1] = {0x27E0021}; // SDK >= 2 (Late)
//static const u32 mpuInitRegion2Data5[1] = {0x27FF017}; // SDK 5
static const u32 mpuInitRegion2Data5[1] = {0x27FF017}; // SDK 5
static const u32 mpuInitRegion3Signature[1] = {0xEE060F13};
static const u32 mpuInitRegion3Data[1] = {0x8000035};
static const u32 mpuFlagsSetSignature[4] = {0xE3A0004A, 0xEE020F30, 0xE3A0004A, 0xEE020F10}; // SDK 5
Expand Down Expand Up @@ -1587,6 +1587,7 @@ u32* findMpuDataOffset(const module_params_t* moduleParams, u32 patchMpuRegion,
}
if (moduleParams->sdk_version > 0x5000000) {
mpuInitRegion1Data = mpuInitRegion1Data5;
mpuInitRegion2Data = mpuInitRegion2Data5;
}

const u32* mpuInitRegionData = mpuInitRegion1Data;
Expand Down
4 changes: 2 additions & 2 deletions retail/bootloader/source/arm7/patch_arm9.c
Original file line number Diff line number Diff line change
Expand Up @@ -942,7 +942,7 @@ static void patchMpu(const tNDSHeader* ndsHeader, const module_params_t* moduleP
}

static void patchMpu2(const tNDSHeader* ndsHeader, const module_params_t* moduleParams, const bool usesCloneboot) {
if (((moduleParams->sdk_version < 0x2008000) && !extendedMemory) || moduleParams->sdk_version > 0x5000000) {
if ((moduleParams->sdk_version < 0x2008000) && !extendedMemory) {
return;
}

Expand All @@ -962,7 +962,7 @@ static void patchMpu2(const tNDSHeader* ndsHeader, const module_params_t* module
if (!patchOffsetCache.mpuDataOffset2) {
mpuDataOffset = findMpuDataOffset(moduleParams, 2, mpuStartOffset);
}
if (mpuDataOffset) {
if (mpuDataOffset && moduleParams->sdk_version < 0x5000000) {
// Change the region 2 configuration (Makes loading slow, so new code is used)

/*u32 mpuInitRegionNewData = PAGE_32M | 0x02000000 | 1;
Expand Down
2 changes: 1 addition & 1 deletion retail/bootloaderi/include/find.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ u16* findGbaSlotInitOffsetThumb(const tNDSHeader* ndsHeader);
u32* a9FindCardIrqEnableOffset(const tNDSHeader* ndsHeader, const module_params_t* moduleParams, bool* usesThumb);
const u32* getMpuInitRegionSignature(u32 patchMpuRegion);
u32* findMpuStartOffset(const tNDSHeader* ndsHeader, u32 patchMpuRegion);
u32* findMpuDataOffset(const module_params_t* moduleParams, u32 patchMpuRegion, const u32* mpuStartOffset);
u32* findMpuDataOffset(const bool twl, const module_params_t* moduleParams, u32 patchMpuRegion, const u32* mpuStartOffset);
u32* findMpuDataOffsetAlt(const tNDSHeader* ndsHeader);
u32* findMpuChange(const tNDSHeader* ndsHeader);
u32* findMpuInitTwlEnd(const u32* heapPointer2Offset);
Expand Down
7 changes: 4 additions & 3 deletions retail/bootloaderi/source/arm7/find_arm9.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,8 @@ static const u32 mpuInitRegion2Signature[1] = {0xEE060F12};
static const u32 mpuInitRegion2SignatureElab[2] = {0xEE060F12, 0xE59F00B4};
static const u32 mpuInitRegion2Data1[1] = {0x27C0023}; // SDK <= 2
static const u32 mpuInitRegion2Data3[1] = {0x27E0021}; // SDK >= 2 (Late)
static const u32 mpuInitRegion2Data5[1] = {0x2F80025}; // SDK 5 (TWL)
static const u32 mpuInitRegion2Data5[1] = {0x27FF017}; // SDK 5
static const u32 mpuInitRegion2Data5Twl[1] = {0x2F80025}; // SDK 5 (TWL)
static const u32 mpuInitRegion3Signature[1] = {0xEE060F13};
static const u32 mpuInitRegion3Data[1] = {0x8000035};
static const u32 mpuChangeRegion1Signature[3] = {0xE3A00001, 0xE3A01402, 0xE3A0202A};
Expand Down Expand Up @@ -1849,7 +1850,7 @@ u32* findMpuStartOffset(const tNDSHeader* ndsHeader, u32 patchMpuRegion) {
return mpuStartOffset;
}

u32* findMpuDataOffset(const module_params_t* moduleParams, u32 patchMpuRegion, const u32* mpuStartOffset) {
u32* findMpuDataOffset(const bool twl, const module_params_t* moduleParams, u32 patchMpuRegion, const u32* mpuStartOffset) {
if (!mpuStartOffset) {
return NULL;
}
Expand All @@ -1863,7 +1864,7 @@ u32* findMpuDataOffset(const module_params_t* moduleParams, u32 patchMpuRegion,
}
if (moduleParams->sdk_version > 0x5000000) {
mpuInitRegion1Data = mpuInitRegion1Data5;
mpuInitRegion2Data = mpuInitRegion2Data5;
mpuInitRegion2Data = twl ? mpuInitRegion2Data5Twl : mpuInitRegion2Data5;
}

const u32* mpuInitRegionData = mpuInitRegion1Data;
Expand Down
10 changes: 5 additions & 5 deletions retail/bootloaderi/source/arm7/patch_arm9.c
Original file line number Diff line number Diff line change
Expand Up @@ -890,7 +890,7 @@ static void patchMpu(const tNDSHeader* ndsHeader, const module_params_t* moduleP
dbg_printf("\n\n");
}
if (!patchOffsetCache.mpuDataOffset) {
mpuDataOffset = findMpuDataOffset(moduleParams, patchMpuRegion, mpuStartOffset);
mpuDataOffset = findMpuDataOffset(false, moduleParams, patchMpuRegion, mpuStartOffset);
}
if (mpuDataOffset) {
if (!isSdk5(moduleParams)) {
Expand Down Expand Up @@ -995,9 +995,9 @@ static void patchMpu(const tNDSHeader* ndsHeader, const module_params_t* moduleP
}

void patchMpu2(const tNDSHeader* ndsHeader, const module_params_t* moduleParams, const bool usesCloneboot) {
if (moduleParams->sdk_version > 0x5000000 && (ndsHeader->unitCode == 0 || !dsiModeConfirmed)) {
/* if (moduleParams->sdk_version > 0x5000000 && (ndsHeader->unitCode == 0 || !dsiModeConfirmed)) {
return;
}
} */

unpatchedFunctions* unpatchedFuncs = (unpatchedFunctions*)UNPATCHED_FUNCTION_LOCATION;

Expand All @@ -1013,9 +1013,9 @@ void patchMpu2(const tNDSHeader* ndsHeader, const module_params_t* moduleParams,
dbg_printf("\n\n");
}
if (!patchOffsetCache.mpuDataOffset2) {
mpuDataOffset = findMpuDataOffset(moduleParams, 2, mpuStartOffset);
mpuDataOffset = findMpuDataOffset((ndsHeader->unitCode > 0), moduleParams, 2, mpuStartOffset);
}
if (mpuDataOffset) {
if (mpuDataOffset && (moduleParams->sdk_version < 0x5000000 || (ndsHeader->unitCode > 0 && dsiModeConfirmed))) {
// Change the region 2 configuration

//force DSi mode settings. THESE TOOK AGES TO FIND. -s2k
Expand Down
7 changes: 4 additions & 3 deletions retail/cardenginei/arm7/source/cardengine.c
Original file line number Diff line number Diff line change
Expand Up @@ -1683,13 +1683,14 @@ void myIrqHandlerVBlank(void) {
*unpatchedFuncs->mpuDataOffsetAlt = unpatchedFuncs->mpuInitRegionOldDataAlt;
}

if (unpatchedFuncs->mpuInitOffset2) {
*unpatchedFuncs->mpuInitOffset2 = 0xEE060F12;
}
if (unpatchedFuncs->mpuDataOffset2) {
*unpatchedFuncs->mpuDataOffset2 = unpatchedFuncs->mpuInitRegionOldData2;
}
}

if (unpatchedFuncs->mpuInitOffset2) {
*unpatchedFuncs->mpuInitOffset2 = 0xEE060F12;
}
#endif

funcsUnpatched = true;
Expand Down

0 comments on commit 0571736

Please sign in to comment.