Skip to content

Commit 604d6c3

Browse files
authored
Merge pull request #22 from ahezard/card
Merge stable card build
2 parents d46850c + 4b08002 commit 604d6c3

File tree

3 files changed

+102
-73
lines changed

3 files changed

+102
-73
lines changed

.travis.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ addons:
2929

3030
after_success:
3131
- >
32-
if [ "$TRAVIS_BRANCH" == "master" ]; then
32+
if [ "$TRAVIS_BRANCH" == "master" ] || [ "$TRAVIS_BRANCH" == "card" ]; then
3333
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
3434
GITREV="`git show -s --format='%h'`"
35-
REV_NAME="bootstrap-dldi-${GITDATE}-${GITREV}.nds"
35+
REV_NAME="bootstrap-${TRAVIS_BRANCH}-${GITDATE}-${GITREV}.nds"
3636
cp bootstrap-dldi.nds $REV_NAME
37-
lftp -c "open -u nds-bootstrap,$BUILD_PASSWORD sftp://joshuadoes.com; put -O ' /home/nds-bootstrap' '${REV_NAME}'"
37+
lftp ftp://nds-bootstrap:$BUILD_PASSWORD@joshuadoes.com -e "set net:timeout 5; set net:max-retries 2; cd files; put ${REV_NAME}; bye"
38+
lftp sftp://twlbuild:$BUILD_PASSWORD2@labs.projectkaeru.xyz -e "set net:timeout 5; set net:max-retries 2; cd files; put ${REV_NAME}; bye"
3839
fi

bootloader/source/card_patcher.c

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,14 @@ u32 cardPullOutSignature1[4] = {0xE92D4000,0xE24DD004,0xE201003F,0xE3500011};
4444
u32 cardPullOutSignature4[4] = {0xE92D4008,0xE201003F,0xE3500011,0x1A00000D};
4545
u32 a9cardSendSignature[7] = {0xE92D40F0,0xE24DD004,0xE1A07000,0xE1A06001,0xE1A01007,0xE3A0000E,0xE3A02000};
4646
u32 cardCheckPullOutSignature[4] = {0xE92D4018,0xE24DD004,0xE59F204C,0xE1D210B0};
47-
u32 cardReadCachedSignature[4] = {0xE92D4030,0xE24DD004,0xE59F5090,0xE3A01C02};
47+
u32 cardReadCachedStartSignature1[2] = {0xE92D4030,0xE24DD004};
48+
u32 cardReadCachedEndSignature1[4] = {0xE5950020,0xE3500000,0x13A00001,0x03A00000};
4849

50+
u32 cardReadCachedEndSignature3[4] = {0xE5950024,0xE3500000,0x13A00001,0x03A00000};
51+
52+
u32 cardReadCachedStartSignature4[2] = {0xE92D4038,0xE59F407C};
53+
u32 cardReadCachedEndSignature4[4] = {0xE5940024,0xE3500000,0x13A00001,0x03A00000};
54+
4955
// irqEnable
5056
u32 irqEnableStartSignature[4] = {0xE59FC02C,0xE1DC30B0,0xE3A01000,0xE1CC10B0};
5157

@@ -153,10 +159,16 @@ u32 patchCardNds (const tNDSHeader* ndsHeader, u32* cardEngineLocation, module_p
153159
u32* a9cardReadSignature = a9cardReadSignature1;
154160
u32* cardReadStartSignature = cardReadStartSignature1;
155161
u32* cardPullOutSignature = cardPullOutSignature1;
156-
if(moduleParams->sdk_version > 0x4000000) {
162+
u32* cardReadCachedStartSignature = cardReadCachedStartSignature1;
163+
u32* cardReadCachedEndSignature = cardReadCachedEndSignature1;
164+
if(moduleParams->sdk_version > 0x3000000 && moduleParams->sdk_version < 0x4000000) {
165+
cardReadCachedEndSignature = cardReadCachedEndSignature3;
166+
} else if(moduleParams->sdk_version > 0x4000000) {
157167
a9cardReadSignature = a9cardReadSignature4;
158168
cardReadStartSignature = cardReadStartSignature4;
159169
cardPullOutSignature = cardPullOutSignature4;
170+
cardReadCachedStartSignature = cardReadCachedStartSignature4;
171+
cardReadCachedEndSignature = cardReadCachedEndSignature4;
160172
}
161173

162174
// Find the card read
@@ -189,17 +201,6 @@ u32 patchCardNds (const tNDSHeader* ndsHeader, u32* cardEngineLocation, module_p
189201
nocashMessage("Card check pull out found\n");
190202
}
191203

192-
u32 cardReadCachedOffset =
193-
getOffsetA9((u32*)ndsHeader->arm9destination, 0x00400000,//, ndsHeader->arm9binarySize,
194-
(u32*)cardReadCachedSignature, 4, 1);
195-
if (!cardReadCachedOffset) {
196-
nocashMessage("Card read cached not found\n");
197-
return 0;
198-
} else {
199-
debug[0] = cardReadCachedOffset;
200-
nocashMessage("Card read cached found\n");
201-
}
202-
203204
u32 cardIrqEnableOffset =
204205
getOffsetA9((u32*)ndsHeader->arm7destination, 0x00400000,//, ndsHeader->arm9binarySize,
205206
(u32*)irqEnableStartSignature, 4, 1);
@@ -230,6 +231,25 @@ u32 patchCardNds (const tNDSHeader* ndsHeader, u32* cardEngineLocation, module_p
230231
debug[0] = cardPullOutOffset;
231232
nocashMessage("Card pull out handler found\n");
232233

234+
235+
u32 cardReadCachedEndOffset =
236+
getOffsetA9((u32*)ndsHeader->arm9destination, 0x00300000,//ndsHeader->arm9binarySize,
237+
(u32*)cardReadCachedEndSignature, 4, 1);
238+
if (!cardReadCachedEndOffset) {
239+
nocashMessage("Card read cached end not found\n");
240+
return 0;
241+
}
242+
debug[1] = cardReadCachedEndOffset;
243+
u32 cardReadCachedOffset =
244+
getOffsetA9((u32*)cardReadCachedEndOffset, -0xFF,
245+
(u32*)cardReadCachedStartSignature, 2, -1);
246+
if (!cardReadStartOffset) {
247+
nocashMessage("Card read cached start not found\n");
248+
return 0;
249+
}
250+
debug[0] = cardReadCachedOffset;
251+
nocashMessage("Card read cached found\n");
252+
233253
/*
234254
// Find the card id
235255
u32 cardIdEndOffset =
@@ -250,7 +270,7 @@ u32 patchCardNds (const tNDSHeader* ndsHeader, u32* cardEngineLocation, module_p
250270
debug[0] = cardIdStartOffset;
251271
nocashMessage("Card id found\n"); */
252272

253-
u32 arenaLoOffset =
273+
/*u32 arenaLoOffset =
254274
getOffsetA9((u32*)ndsHeader->arm9destination, 0x00300000,//, ndsHeader->arm9binarySize,
255275
(u32*)arenaLowSignature, 4, 1);
256276
if (!arenaLoOffset) {
@@ -276,7 +296,7 @@ u32 patchCardNds (const tNDSHeader* ndsHeader, u32* cardEngineLocation, module_p
276296
//*((u32*)arenaLo2Offset) = *((u32*)arenaLo2Offset) + 0x800; // shrink heap by 8 kb
277297
278298
debug[13] = arenaLo2Offset;
279-
}
299+
}*/
280300

281301
debug[2] = cardEngineLocation;
282302

@@ -337,7 +357,7 @@ u32 patchCardNds (const tNDSHeader* ndsHeader, u32* cardEngineLocation, module_p
337357
if(cardCheckPullOutOffset>0)
338358
copyLoop ((u32*)cardCheckPullOutOffset, cardCheckPullOutPatch, 0x4);
339359

340-
copyLoop ((u32*)cardPullOutOffset, cardPullOutPatch, 0x6C);
360+
copyLoop ((u32*)cardPullOutOffset, cardPullOutPatch, 0x5C);
341361

342362
copyLoop ((u32*)cardIrqEnableOffset, cardIrqEnablePatch, 0x30);
343363

cardengine/source/card_engine_header.s

Lines changed: 62 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -102,81 +102,87 @@ patches:
102102
card_read_arm9:
103103
@---------------------------------------------------------------------------------
104104
stmfd sp!, {r0-r11,lr}
105-
106-
@ registers used r0,r1,r2,r3,r5,r6,r7,r8
105+
str r0, cacheRef
106+
107+
begin:
108+
@ registers used r0,r1,r2,r3,r5,r8,r11
107109
ldr r3,=0x4000100 @IPC_SYNC & command value
108-
ldr r8,=0x027FFB08 @shared area command
109-
ldr r4, cardStructArm9
110+
ldr r8,=0x027FFB08 @shared area command
111+
ldr r4, cardStructArm9
110112
ldr r5, [R4] @SRC
113+
ldr r1, [R4,#0x8] @LEN
111114
ldr r0, [R4,#0x4] @DST
112-
ldr r1, [R4,#0x8] @LEN
113-
mov r2, #0x2400
115+
mov r2, #0x2400
116+
117+
@page computation
118+
mov r9, #0x200
119+
rsb r10, r9, #0
120+
and r11, r5, r10
121+
122+
@ check for cmd2
123+
cmp r11, r5
124+
bne cmd1
125+
cmp r1, #1024
126+
blt cmd1
127+
sub r7, r8, #(0x027FFB08 - 0x026FFB08) @below dtcm
128+
cmp r0, r7
129+
bgt cmd1
130+
sub r7, r8, #(0x027FFB08 - 0x019FFB08) @above itcm
131+
cmp r0, r7
132+
blt cmd1
133+
ands r10, r0, #3
134+
bne cmd1
114135
115-
@sub r7, r8, #(0x027FFB08 - 0x026FFB08) @below dtcm
116-
@cmp r0, r7
117-
@bgt check_partial
118-
b check_partial @deactivate cmd2 optimization
119136
cmd2:
120137
sub r7, r8, #(0x027FFB08 - 0x025FFB08) @cmd2 marker
121138
@r0 dst, r1 len
122139
ldr r9, cacheFlushRef
123140
blx r9 @ cache flush code
124-
b partial_cmd2
125-
126-
check_partial:
127-
cmp r1, #512
128-
blt partial
129-
130-
chunck_loop:
131-
mov r4, #512
132-
sub r7, r8, #(0x027FFB08 - 0x027ff800) @shared area data
133-
@dst, len, src, marker
134-
stmia r8, {r0,r4,r5,r7}
135-
136-
@sendIPCSync
137-
strh r2, [r3,#0x80]
138-
139-
chunck_loop_wait:
140-
ldr r9, [r8,#12]
141-
cmp r9,#0
142-
bne chunck_loop_wait
143-
chunck_loop_copy:
144-
ldrb r9, [r7], #1
145-
strb r9, [r0], #1
146-
subs r4, #1
147-
bgt chunck_loop_copy
141+
b send_cmd
148142

149-
chunk_end_copy:
150-
add r5, #512
151-
subs r1, #512
152-
beq exitfunc
153-
b check_partial
143+
cmd1:
144+
mov R1, #0x200
145+
mov r5, r11 @ current page
146+
sub r7, r8, #(0x027FFB08 - 0x027ff800) @cmd1 marker
154147

155-
partial:
156-
sub r7, r8, #(0x027FFB08 - 0x027ff800) @shared area data
157-
partial_cmd2:
148+
send_cmd:
158149
@dst, len, src, marker
159150
stmia r8, {r0,r1,r5,r7}
160151
161152
@sendIPCSync
162153
strh r2, [r3,#0x80]
163154

164-
partial_loop_wait:
155+
loop_wait:
165156
ldr r9, [r8,#12]
166157
cmp r9,#0
167-
bne partial_loop_wait
158+
bne loop_wait
159+
160+
@ check for cmd2
161+
cmp r1, #0x200
162+
bne exitfunc
168163
169-
sub r8, r8, #(0x027FFB08 - 0x027ff800) @shared area data
170-
cmp r7, r8
171-
bne exitfunc
164+
ldr r9, cacheRef
165+
add r9,r9,#0x20 @ cache buffer
166+
mov r10,r7
172167

173-
partial_loop_copy:
174-
ldrb r9, [r7], #1
175-
strb r9, [r0], #1
176-
subs r1, #1
177-
bgt partial_loop_copy
168+
@ copy 512 bytes
169+
mov r8, #512
170+
loop_copy:
171+
ldmia r10!, {r0-r7}
172+
stmia r9!, {r0-r7}
173+
subs r8, r8, #32 @ 4*8 bytes
174+
bgt loop_copy
178175

179-
exitfunc:
176+
ldr r0, cacheRef
177+
str r11, [r0, #8] @ cache page
178+
179+
ldr r9, readCachedRef
180+
blx r9
181+
182+
cmp r0,#0
183+
bne begin
184+
185+
exitfunc:
180186
ldmfd sp!, {r0-r11,lr}
181187
bx lr
182188

@@ -186,6 +192,8 @@ cacheFlushRef:
186192
.word 0x00000000
187193
readCachedRef:
188194
.word 0x00000000
195+
cacheRef:
196+
.word 0x00000000
189197
.pool
190198
@---------------------------------------------------------------------------------
191199

@@ -259,4 +267,4 @@ DC_WaitWriteBufferEmpty:
259267
260268
ldmfd sp!, {r0-r11,lr}
261269
bx lr
262-
.pool
270+
.pool

0 commit comments

Comments
 (0)