Skip to content

Commit 396c118

Browse files
committed
Final fix for kirby canvas curse
1 parent d23413b commit 396c118

File tree

1 file changed

+87
-52
lines changed

1 file changed

+87
-52
lines changed

bootloader/source/card_patcher.c

Lines changed: 87 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,7 @@ u32 savePatchUniversal (const tNDSHeader* ndsHeader, u32* cardEngineLocation, mo
995995

996996
if(!EepromWriteJump) {
997997
// alternate v1 order
998+
thumbType = 1;
998999
EepromProgJump = getOffsetThumb((u16*)JumpTableFunc, ndsHeader->arm7binarySize,
9991000
a7JumpTableSignatureUniversalThumb_pt2, 2, -1);
10001001

@@ -1041,59 +1042,93 @@ u32 savePatchUniversal (const tNDSHeader* ndsHeader, u32* cardEngineLocation, mo
10411042
u32 srcAddr;
10421043

10431044
if (usesThumb) {
1045+
if(thumbType==1) {
1046+
u32* eepromRead = (u32*) (EepromReadJump + 0xA);
1047+
dbg_printf("Eeprom read:\t");
1048+
dbg_hexa((u32)eepromRead);
1049+
dbg_printf("\n");
1050+
*eepromRead=arm7FunctionThumb[5];
1051+
1052+
u32* eepromPageWrite = (u32*) (EepromWriteJump + 0xA);
1053+
dbg_printf("Eeprom page write:\t");
1054+
dbg_hexa((u32)eepromPageWrite);
1055+
dbg_printf("\n");
1056+
*eepromPageWrite=arm7FunctionThumb[3];
1057+
1058+
u32* eepromPageProg = (u32*) (EepromProgJump + 0xA);
1059+
dbg_printf("Eeprom page prog:\t");
1060+
dbg_hexa((u32)eepromPageProg);
1061+
dbg_printf("\n");
1062+
*eepromPageProg=arm7FunctionThumb[4];
1063+
1064+
u32* eepromPageVerify = (u32*) (EepromVerifyJump + 0xA);
1065+
dbg_printf("Eeprom verify:\t");
1066+
dbg_hexa((u32)eepromPageVerify);
1067+
dbg_printf("\n");
1068+
*eepromPageVerify=arm7FunctionThumb[2];
1069+
1070+
u32* eepromPageErase = (u32*) (EepromEraseJump + 0x8);
1071+
dbg_printf("Eeprom page erase:\t");
1072+
dbg_hexa((u32)eepromPageErase);
1073+
dbg_printf("\n");
1074+
*eepromPageErase=arm7FunctionThumb[1];
1075+
1076+
} else {
1077+
u16 instrs [2];
1078+
1079+
u16* eepromRead = (u16*) (EepromReadJump + 0x6);
1080+
dbg_printf("Eeprom read:\t");
1081+
dbg_hexa((u32)eepromRead);
1082+
dbg_printf("\n");
1083+
srcAddr = EepromReadJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1084+
generateA7InstrThumb(instrs, srcAddr,
1085+
arm7FunctionThumb[5]);
1086+
eepromRead[0]=instrs[0];
1087+
eepromRead[1]=instrs[1];
1088+
1089+
u16* eepromPageWrite = (u16*) (EepromWriteJump + 0x6);
1090+
dbg_printf("Eeprom page write:\t");
1091+
dbg_hexa((u32)eepromPageWrite);
1092+
dbg_printf("\n");
1093+
srcAddr = EepromWriteJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1094+
generateA7InstrThumb(instrs, srcAddr,
1095+
arm7FunctionThumb[3]);
1096+
eepromPageWrite[0]=instrs[0];
1097+
eepromPageWrite[1]=instrs[1];
1098+
1099+
u16* eepromPageProg = (u16*) (EepromProgJump + 0x6);
1100+
dbg_printf("Eeprom page prog:\t");
1101+
dbg_hexa((u32)eepromPageProg);
1102+
dbg_printf("\n");
1103+
srcAddr = EepromProgJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1104+
generateA7InstrThumb(instrs, srcAddr,
1105+
arm7FunctionThumb[4]);
1106+
eepromPageProg[0]=instrs[0];
1107+
eepromPageProg[1]=instrs[1];
1108+
1109+
u16* eepromPageVerify = (u16*) (EepromVerifyJump + 0x6);
1110+
dbg_printf("Eeprom verify:\t");
1111+
dbg_hexa((u32)eepromPageVerify);
1112+
dbg_printf("\n");
1113+
srcAddr = EepromVerifyJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1114+
generateA7InstrThumb(instrs, srcAddr,
1115+
arm7FunctionThumb[2]);
1116+
eepromPageVerify[0]=instrs[0];
1117+
eepromPageVerify[1]=instrs[1];
1118+
1119+
1120+
u16* eepromPageErase = (u16*) (EepromEraseJump + 0x4);
1121+
dbg_printf("Eeprom page erase:\t");
1122+
dbg_hexa((u32)eepromPageErase);
1123+
dbg_printf("\n");
1124+
srcAddr = EepromEraseJump + 0x4 - vAddrOfRelocSrc + 0x37F8000 ;
1125+
generateA7InstrThumb(instrs, srcAddr,
1126+
arm7FunctionThumb[1]);
1127+
eepromPageErase[0]=instrs[0];
1128+
eepromPageErase[1]=instrs[1];
1129+
1130+
}
10441131

1045-
u16 instrs [2];
1046-
1047-
u16* eepromRead = (u16*) (EepromReadJump + 0x6);
1048-
dbg_printf("Eeprom read:\t");
1049-
dbg_hexa((u32)eepromRead);
1050-
dbg_printf("\n");
1051-
srcAddr = EepromReadJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1052-
generateA7InstrThumb(instrs, srcAddr,
1053-
arm7FunctionThumb[5]);
1054-
eepromRead[0]=instrs[0];
1055-
eepromRead[1]=instrs[1];
1056-
1057-
u16* eepromPageWrite = (u16*) (EepromWriteJump + 0x6);
1058-
dbg_printf("Eeprom page write:\t");
1059-
dbg_hexa((u32)eepromPageWrite);
1060-
dbg_printf("\n");
1061-
srcAddr = EepromWriteJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1062-
generateA7InstrThumb(instrs, srcAddr,
1063-
arm7FunctionThumb[3]);
1064-
eepromPageWrite[0]=instrs[0];
1065-
eepromPageWrite[1]=instrs[1];
1066-
1067-
u16* eepromPageProg = (u16*) (EepromProgJump + 0x6);
1068-
dbg_printf("Eeprom page prog:\t");
1069-
dbg_hexa((u32)eepromPageProg);
1070-
dbg_printf("\n");
1071-
srcAddr = EepromProgJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1072-
generateA7InstrThumb(instrs, srcAddr,
1073-
arm7FunctionThumb[4]);
1074-
eepromPageProg[0]=instrs[0];
1075-
eepromPageProg[1]=instrs[1];
1076-
1077-
u16* eepromPageVerify = (u16*) (EepromVerifyJump + 0x6);
1078-
dbg_printf("Eeprom verify:\t");
1079-
dbg_hexa((u32)eepromPageVerify);
1080-
dbg_printf("\n");
1081-
srcAddr = EepromVerifyJump + 0x6 - vAddrOfRelocSrc + 0x37F8000 ;
1082-
generateA7InstrThumb(instrs, srcAddr,
1083-
arm7FunctionThumb[2]);
1084-
eepromPageVerify[0]=instrs[0];
1085-
eepromPageVerify[1]=instrs[1];
1086-
1087-
1088-
u16* eepromPageErase = (u16*) (EepromEraseJump + 0x4);
1089-
dbg_printf("Eeprom page erase:\t");
1090-
dbg_hexa((u32)eepromPageErase);
1091-
dbg_printf("\n");
1092-
srcAddr = EepromEraseJump + 0x4 - vAddrOfRelocSrc + 0x37F8000 ;
1093-
generateA7InstrThumb(instrs, srcAddr,
1094-
arm7FunctionThumb[1]);
1095-
eepromPageErase[0]=instrs[0];
1096-
eepromPageErase[1]=instrs[1];
10971132

10981133
} else {
10991134

0 commit comments

Comments
 (0)