@@ -85,6 +85,12 @@ static const u32 sleepPatch[2] = {0x0A000001, 0xE3A00601};
8585static const u16 sleepPatchThumb [2 ] = {0xD002 , 0x4831 };
8686static const u16 sleepPatchThumbAlt [2 ] = {0xD002 , 0x0440 };
8787
88+ // Sleep input write
89+ static const u32 sleepInputWriteEndSignature1 [2 ] = {0x04000136 , 0x027FFFA8 };
90+ static const u32 sleepInputWriteEndSignature5 [2 ] = {0x04000136 , 0x02FFFFA8 };
91+ static const u32 sleepInputWriteSignature [1 ] = {0x13A04902 };
92+ static const u16 sleepInputWriteBeqSignatureThumb [1 ] = {0xD000 };
93+
8894// RAM clear
8995static const u32 ramClearSignature [2 ] = {0x02FFC000 , 0x02FFF000 };
9096static const u32 ramClearISignature [1 ] = {0x02FE0000 };
@@ -1037,6 +1043,46 @@ u16* findSleepPatchOffsetThumb(const tNDSHeader* ndsHeader) {
10371043 return sleepPatchOffset ;
10381044}
10391045
1046+ u32 * findSleepInputWriteOffset (const tNDSHeader * ndsHeader , const module_params_t * moduleParams ) {
1047+ dbg_printf ("findSleepInputWriteOffset:\n" );
1048+
1049+ u32 * offset = NULL ;
1050+ u32 * endOffset = findOffset (
1051+ (u32 * )ndsHeader -> arm7destination , newArm7binarySize ,
1052+ isSdk5 (moduleParams ) ? sleepInputWriteEndSignature5 : sleepInputWriteEndSignature1 , 2
1053+ );
1054+ if (!endOffset && dsiModeConfirmed && ndsHeader -> unitCode > 0 && * (u32 * )0x02FFE1A0 != 0x00403000 ) {
1055+ endOffset = findOffset (
1056+ (u32 * )__DSiHeader -> arm7idestination , newArm7ibinarySize ,
1057+ sleepInputWriteEndSignature5 , 2
1058+ );
1059+ }
1060+ if (endOffset ) {
1061+ offset = findOffsetBackwards (
1062+ endOffset , 0x38 ,
1063+ sleepInputWriteSignature , 1
1064+ );
1065+ if (!offset ) {
1066+ u32 thumbOffset = (u32 )findOffsetBackwardsThumb (
1067+ (u16 * )endOffset , 0x30 ,
1068+ sleepInputWriteBeqSignatureThumb , 1
1069+ );
1070+ if (thumbOffset ) {
1071+ thumbOffset += 2 ;
1072+ offset = (u32 * )thumbOffset ;
1073+ }
1074+ }
1075+ }
1076+ if (offset ) {
1077+ dbg_printf ("Sleep input write found\n" );
1078+ } else {
1079+ dbg_printf ("Sleep input write not found\n" );
1080+ }
1081+
1082+ dbg_printf ("\n" );
1083+ return offset ;
1084+ }
1085+
10401086u32 * findRamClearOffset (const tNDSHeader * ndsHeader ) {
10411087 dbg_printf ("findRamClearOffset:\n" );
10421088
0 commit comments