Skip to content

Commit 55aac0d

Browse files
committed
Fix *Iron Man 2* not booting
1 parent 0ae5e0e commit 55aac0d

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

retail/bootloaderi/include/patch.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050

5151
//extern bool cardReadFound; // patch_arm9.c
5252

53-
#define patchOffsetCacheFileVersion 108 // Change when new functions are being patched, some offsets removed,
53+
#define patchOffsetCacheFileVersion 109 // Change when new functions are being patched, some offsets removed,
5454
// the offset order changed, and/or the function signatures changed (not added)
5555

5656
typedef struct patchOffsetCacheContents {

retail/bootloaderi/source/arm7/find_arm7.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ static const u32 relocateValidateSignature[1] = {0x400010C};
2222
static const u32 swiHaltSignature1[1] = {0xE59FC004};
2323
static const u32 swiHaltSignature2[1] = {0xE59FC000};
2424
static const u16 swiHaltCmpSignature[1] = {0x2800};
25+
static const u16 swiHaltMovSignature[1] = {0x200C};
2526
static const u32 swiHaltConstSignature[1] = {0x4000004};
2627
static const u32 swiHaltConstSignatureAlt[1] = {0x4000208};
2728

@@ -365,6 +366,20 @@ u16* findSwiHaltThumbOffset(const tNDSHeader* ndsHeader, const module_params_t*
365366
(u32)findOffsetThumb((u16*)vAddrOfRelocSrc, 0x200,
366367
swiHaltCmpSignature, 1
367368
);
369+
if (!findOffsetBackwardsThumb((u16*)swiHaltOffset, 0x20, swiHaltMovSignature, 1)) {
370+
const u32 oldOffset = swiHaltOffset;
371+
const u16 cmpBak = *(u16*)swiHaltOffset;
372+
*(u16*)oldOffset = 0; // Avoid re-searching for wrong offset
373+
374+
swiHaltOffset =
375+
(u32)findOffsetThumb((u16*)vAddrOfRelocSrc, 0x200,
376+
swiHaltCmpSignature, 1
377+
);
378+
*(u16*)oldOffset = cmpBak;
379+
// if (!findOffsetBackwardsThumb((u16*)swiHaltOffset, 0x20, swiHaltMovSignature, 1)) {
380+
// swiHaltOffset = 0;
381+
// }
382+
}
368383
}
369384
if (!swiHaltOffset) {
370385
u32 dispStatAddr = (u32)findOffset(

0 commit comments

Comments
 (0)