summaryrefslogtreecommitdiff
path: root/arm7/asm/CARD_spi.s
blob: bf82b91d823063b5d3180f1f7f4613d1816e1d33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
	.include "asm/macros.inc"
	.include "global.inc"

    .section .bss

	.global _03809764
_03809764: ;0x03809764
	.space 0x03809774 - 0x03809764

    .section .text

	arm_func_start CARDi_SetWriteProtectCore
CARDi_SetWriteProtectCore: ; 0x03800034
	stmdb	sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
	sub	sp, sp, #8
	mov	r4, r0
	bl	CARDi_WaitPrevCommand
	cmp	r0, #0
	beq	_038000BC
	ldr	r0, _038000C8	; =cardi_common
	ldr	sl, [r0]
	mov	r9, #10
	mov	r0, #1
	strb	r0, [sp]
	strb	r4, [sp, #1]
	mov	r8, #2
	add	r7, sp, #0
	mov	r6, #0
	ldr	r5, _038000CC	; =CARDi_CommWriteCore
	mov	r4, #5
_03800078:
	bl	CARDi_WriteEnable
	mov	r0, r8
	bl	CARDi_CommandBegin
	mov	r0, r7
	mov	r1, r6
	mov	r2, r8
	mov	r3, r5
	bl	CARDi_CommArray
	mov	r0, r4
	mov	r1, r6
	bl	CARDi_CommandEnd
	ldr	r0, [sl]
	cmp	r0, #4
	bne	_038000BC
	sub	r9, r9, #1
	cmp	r9, #0
	bgt	_03800078
_038000BC:
	add	sp, sp, #8
	ldmia	sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
	bx	lr
_038000C8:	.word	cardi_common
_038000CC:	.word	CARDi_CommWriteCore

	arm_func_start CARDi_EraseChipCore
CARDi_EraseChipCore: ; 0x038000D0
	stmdb	sp!, {r4, lr}
	bl	CARDi_WaitPrevCommand
	cmp	r0, #0
	beq	_03800114
	ldr	r0, _0380011C	; =cardi_common
	ldr	r4, [r0]
	bl	CARDi_WriteEnable
	mov	r0, #1
	bl	CARDi_CommandBegin
	ldr	r0, _03800120	; =_038072BC
	mov	r1, #0
	mov	r2, #1
	ldr	r3, _03800124	; =CARDi_CommWriteCore
	bl	CARDi_CommArray
	ldr	r0, [r4, #52]	; 0x34
	ldr	r1, [r4, #56]	; 0x38
	bl	CARDi_CommandEnd
_03800114:
	ldmia	sp!, {r4, lr}
	bx	lr
_0380011C:	.word	cardi_common
_03800120:	.word	_038072BC
_03800124:	.word	CARDi_CommWriteCore

	arm_func_start CARDi_EraseBackupSectorCore
CARDi_EraseBackupSectorCore: ; 0x03800128
	stmdb	sp!, {r4, r5, r6, r7, r8, lr}
	mov	r7, r0
	mov	r6, r1
	ldr	r0, _038001B8	; =cardi_common
	ldr	r5, [r0]
	ldr	r4, [r5, #28]
	sub	r1, r4, #1
	orr	r0, r7, r6
	ands	r0, r1, r0
	movne	r0, #2
	strne	r0, [r5]
	bne	_038001B0
	bl	CARDi_WaitPrevCommand
	cmp	r0, #0
	beq	_038001B0
	mov	r8, #216	; 0xd8
	b	_038001A8
_0380016C:
	bl	CARDi_WriteEnable
	ldr	r0, [r5, #36]	; 0x24
	add	r0, r0, #1
	bl	CARDi_CommandBegin
	mov	r0, r7
	mov	r1, r8
	bl	CARDi_SendSpiAddressingCommand
	ldr	r0, [r5, #60]	; 0x3c
	ldr	r1, [r5, #64]	; 0x40
	bl	CARDi_CommandEnd
	ldr	r0, [r5]
	cmp	r0, #0
	bne	_038001B0
	add	r7, r7, r4
	sub	r6, r6, r4
_038001A8:
	cmp	r6, #0
	bne	_0380016C
_038001B0:
	ldmia	sp!, {r4, r5, r6, r7, r8, lr}
	bx	lr
_038001B8:	.word	cardi_common

	arm_func_start CARDi_VerifyBackupCore
CARDi_VerifyBackupCore: ; 0x038001BC
	stmdb	sp!, {r4, r5, r6, r7, lr}
	sub	sp, sp, #4
	mov	r7, r0
	mov	r6, r1
	mov	r5, r2
	bl	CARDi_WaitPrevCommand
	cmp	r0, #0
	beq	_0380024C
	ldr	r0, _03800258	; =cardi_common
	ldr	r4, [r0]
	mov	r1, #1
	ldr	r0, _0380025C	; =_03809764
	str	r1, [r0, #12]
	ldr	r0, [r4, #36]	; 0x24
	add	r0, r0, #1
	add	r0, r0, r5
	bl	CARDi_CommandBegin
	mov	r0, r7
	mov	r1, #3
	bl	CARDi_SendSpiAddressingCommand
	mov	r0, r6
	mov	r1, #0
	mov	r2, r5
	ldr	r3, _03800260	; =CARDi_CommVerifyCore
	bl	CARDi_CommArray
	mov	r0, #0
	mov	r1, r0
	bl	CARDi_CommandEnd
	ldr	r0, [r4]
	cmp	r0, #0
	bne	_0380024C
	ldr	r0, _0380025C	; =_03809764
	ldr	r0, [r0, #12]
	cmp	r0, #0
	moveq	r0, #1
	streq	r0, [r4]
_0380024C:
	add	sp, sp, #4
	ldmia	sp!, {r4, r5, r6, r7, lr}
	bx	lr
_03800258:	.word	cardi_common
_0380025C:	.word	_03809764
_03800260:	.word	CARDi_CommVerifyCore

	arm_func_start CARDi_WriteBackupCore
CARDi_WriteBackupCore: ; 0x03800264
	stmdb	sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
	sub	sp, sp, #4
	mov	sl, r0
	mov	r9, r1
	mov	r8, r2
	bl	CARDi_WaitPrevCommand
	cmp	r0, #0
	beq	_03800314
	ldr	r0, _03800320	; =cardi_common
	ldr	r7, [r0]
	ldr	r6, [r7, #32]
	sub	r4, r6, #1
	mov	fp, #10
	mov	r0, #0
	str	r0, [sp]
	b	_0380030C
_038002A4:
	and	r0, sl, r4
	sub	r5, r6, r0
	cmp	r5, r8
	movhi	r5, r8
	bl	CARDi_WriteEnable
	ldr	r0, [r7, #36]	; 0x24
	add	r0, r0, #1
	add	r0, r0, r5
	bl	CARDi_CommandBegin
	mov	r0, sl
	mov	r1, fp
	bl	CARDi_SendSpiAddressingCommand
	mov	r0, r9
	ldr	r1, [sp]
	mov	r2, r5
	ldr	r3, _03800324	; =CARDi_CommWriteCore
	bl	CARDi_CommArray
	ldr	r0, [r7, #44]	; 0x2c
	ldr	r1, [r7, #48]	; 0x30
	bl	CARDi_CommandEnd
	ldr	r0, [r7]
	cmp	r0, #0
	bne	_03800314
	add	r9, r9, r5
	add	sl, sl, r5
	sub	r8, r8, r5
_0380030C:
	cmp	r8, #0
	bne	_038002A4
_03800314:
	add	sp, sp, #4
	ldmia	sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
	bx	lr
_03800320:	.word	cardi_common
_03800324:	.word	CARDi_CommWriteCore

	arm_func_start CARDi_ProgramBackupCore
CARDi_ProgramBackupCore: ; 0x03800328
	stmdb	sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
	sub	sp, sp, #4
	mov	sl, r0
	mov	r9, r1
	mov	r8, r2
	bl	CARDi_WaitPrevCommand
	cmp	r0, #0
	beq	_038003D8
	ldr	r0, _038003E4	; =cardi_common
	ldr	r7, [r0]
	ldr	r6, [r7, #32]
	sub	r4, r6, #1
	mov	r0, #2
	str	r0, [sp]
	mov	fp, #0
	b	_038003D0
_03800368:
	and	r0, sl, r4
	sub	r5, r6, r0
	cmp	r5, r8
	movhi	r5, r8
	bl	CARDi_WriteEnable
	ldr	r0, [r7, #36]	; 0x24
	add	r0, r0, #1
	add	r0, r0, r5
	bl	CARDi_CommandBegin
	mov	r0, sl
	ldr	r1, [sp]
	bl	CARDi_SendSpiAddressingCommand
	mov	r0, r9
	mov	r1, fp
	mov	r2, r5
	ldr	r3, _038003E8	; =CARDi_CommWriteCore
	bl	CARDi_CommArray
	ldr	r0, [r7, #40]	; 0x28
	mov	r1, fp
	bl	CARDi_CommandEnd
	ldr	r0, [r7]
	cmp	r0, #0
	bne	_038003D8
	add	r9, r9, r5
	add	sl, sl, r5
	sub	r8, r8, r5
_038003D0:
	cmp	r8, #0
	bne	_03800368
_038003D8:
	add	sp, sp, #4
	ldmia	sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
	bx	lr
_038003E4:	.word	cardi_common
_038003E8:	.word	CARDi_CommWriteCore

	arm_func_start CARDi_ReadBackupCore
CARDi_ReadBackupCore: ; 0x038003EC
	stmdb	sp!, {r4, r5, r6, lr}
	mov	r6, r0
	mov	r5, r1
	mov	r4, r2
	bl	CARDi_WaitPrevCommand
	cmp	r0, #0
	beq	_0380044C
	ldr	r0, _03800454	; =cardi_common
	ldr	r0, [r0]
	ldr	r0, [r0, #36]	; 0x24
	add	r0, r0, #1
	add	r0, r0, r4
	bl	CARDi_CommandBegin
	mov	r0, r6
	mov	r1, #3
	bl	CARDi_SendSpiAddressingCommand
	mov	r0, #0
	mov	r1, r5
	mov	r2, r4
	ldr	r3, _03800458	; =CARDi_CommReadCore
	bl	CARDi_CommArray
	mov	r0, #0
	mov	r1, r0
	bl	CARDi_CommandEnd
_0380044C:
	ldmia	sp!, {r4, r5, r6, lr}
	bx	lr
_03800454:	.word	cardi_common
_03800458:	.word	CARDi_CommReadCore

	arm_func_start CARDi_InitStatusRegister
CARDi_InitStatusRegister: ; 0x0380045C
	stmdb	sp!, {r4, lr}
	sub	sp, sp, #8
	ldr	r0, _038004F8	; =cardi_common
	ldr	r0, [r0]
	ldrb	r4, [r0, #72]	; 0x48
	cmp	r4, #255	; 0xff
	beq	_038004EC
	ldr	r0, _038004FC	; =_03809760
	ldr	r0, [r0]
	cmp	r0, #0
	bne	_038004EC
	mov	r0, #5
	strb	r0, [sp]
	mov	r0, #2
	bl	CARDi_CommandBegin
	add	r0, sp, #0
	mov	r1, #0
	mov	r2, #1
	ldr	r3, _03800500	; =CARDi_CommWriteCore
	bl	CARDi_CommArray
	mov	r0, #0
	add	r1, sp, #1
	mov	r2, #1
	ldr	r3, _03800504	; =CARDi_CommReadCore
	bl	CARDi_CommArray
	mov	r0, #0
	mov	r1, r0
	bl	CARDi_CommandEnd
	ldrb	r0, [sp, #1]
	cmp	r0, r4
	beq	_038004E0
	mov	r0, r4
	bl	CARDi_SetWriteProtectCore
_038004E0:
	mov	r1, #1
	ldr	r0, _038004FC	; =_03809760
	str	r1, [r0]
_038004EC:
	add	sp, sp, #8
	ldmia	sp!, {r4, lr}
	bx	lr
_038004F8:	.word	cardi_common
_038004FC:	.word	_03809760
_03800500:	.word	CARDi_CommWriteCore
_03800504:	.word	CARDi_CommReadCore

	arm_func_start CARDi_SendSpiAddressingCommand
CARDi_SendSpiAddressingCommand: ; 0x03800508
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	ldr	r2, _038005AC	; =cardi_common
	ldr	r2, [r2]
	ldr	r2, [r2, #36]	; 0x24
	cmp	r2, #1
	beq	_03800538
	cmp	r2, #2
	beq	_03800554
	cmp	r2, #3
	beq	_0380056C
	b	_0380058C
_03800538:
	and	r3, r0, #255	; 0xff
	mov	r0, r0, lsr #5
	and	r0, r0, #8
	orr	r0, r1, r0
	orr	r0, r0, r3, lsl #8
	str	r0, [sp]
	b	_0380058C
_03800554:
	and	r3, r0, #255	; 0xff
	and	r0, r0, #65280	; 0xff00
	orr	r0, r1, r0
	orr	r0, r0, r3, lsl #16
	str	r0, [sp]
	b	_0380058C
_0380056C:
	and	ip, r0, #255	; 0xff
	and	r3, r0, #65280	; 0xff00
	mov	r0, r0, lsr #8
	and	r0, r0, #65280	; 0xff00
	orr	r0, r1, r0
	orr	r0, r0, r3, lsl #8
	orr	r0, r0, ip, lsl #24
	str	r0, [sp]
_0380058C:
	add	r0, sp, #0
	mov	r1, #0
	add	r2, r2, #1
	ldr	r3, _038005B0	; =CARDi_CommWriteCore
	bl	CARDi_CommArray
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_038005AC:	.word	cardi_common
_038005B0:	.word	CARDi_CommWriteCore

	arm_func_start CARDi_WriteEnable
CARDi_WriteEnable: ; 0x038005B4
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	mov	r0, #1
	bl	CARDi_CommandBegin
	ldr	r0, _038005F0	; =_038072C0
	mov	r1, #0
	mov	r2, #1
	ldr	r3, _038005F4	; =CARDi_CommWriteCore
	bl	CARDi_CommArray
	mov	r0, #0
	mov	r1, r0
	bl	CARDi_CommandEnd
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_038005F0:	.word	_038072C0
_038005F4:	.word	CARDi_CommWriteCore

	arm_func_start CARDi_CommVerifyCore
CARDi_CommVerifyCore: ; 0x038005F8
	mov	r2, #0
	ldr	r1, _03800658	; =0x040001A2
	strh	r2, [r1]
	ldr	r2, _0380065C	; =0x040001A0
_03800608:
	ldrh	r1, [r2]
	ands	r1, r1, #128	; 0x80
	bne	_03800608
	ldr	r1, _03800658	; =0x040001A2
	ldrh	r1, [r1]
	and	r2, r1, #255	; 0xff
	ldr	r1, [r0, #4]
	ldrb	r1, [r1]
	cmp	r2, r1
	beq	_03800648
	mov	r1, #0
	str	r1, [r0, #12]
	ldr	r1, [r0]
	cmp	r1, #1
	movhi	r1, #1
	strhi	r1, [r0]
_03800648:
	ldr	r1, [r0, #4]
	add	r1, r1, #1
	str	r1, [r0, #4]
	bx	lr
_03800658:	.word	0x040001A2
_0380065C:	.word	0x040001A0

	arm_func_start CARDi_CommWriteCore
CARDi_CommWriteCore: ; 0x03800660
	sub	sp, sp, #8
	ldr	r1, [r0, #4]
	ldrb	r2, [r1]
	ldr	r1, _038006A4	; =0x040001A2
	strh	r2, [r1]
	ldr	r1, [r0, #4]
	add	r1, r1, #1
	str	r1, [r0, #4]
	ldr	r1, _038006A8	; =0x040001A0
_03800684:
	ldrh	r0, [r1]
	ands	r0, r0, #128	; 0x80
	bne	_03800684
	ldr	r0, _038006A4	; =0x040001A2
	ldrh	r0, [r0]
	strh	r0, [sp]
	add	sp, sp, #8
	bx	lr
_038006A4:	.word	0x040001A2
_038006A8:	.word	0x040001A0

	arm_func_start CARDi_CommReadCore
CARDi_CommReadCore: ; 0x038006AC
	mov	r2, #0
	ldr	r1, _038006E8	; =0x040001A2
	strh	r2, [r1]
	ldr	r2, _038006EC	; =0x040001A0
_038006BC:
	ldrh	r1, [r2]
	ands	r1, r1, #128	; 0x80
	bne	_038006BC
	ldr	r1, _038006E8	; =0x040001A2
	ldrh	r2, [r1]
	ldr	r1, [r0, #8]
	strb	r2, [r1]
	ldr	r1, [r0, #8]
	add	r1, r1, #1
	str	r1, [r0, #8]
	bx	lr
_038006E8:	.word	0x040001A2
_038006EC:	.word	0x040001A0

	arm_func_start CARDi_CommArray
CARDi_CommArray: ; 0x038006F0
	stmdb	sp!, {r4, r5, r6, r7, r8, lr}
	mov	r7, r2
	mov	r6, r3
	ldr	r5, _03800774	; =_03809764
	str	r0, [r5, #4]
	str	r1, [r5, #8]
	ldr	r0, _03800778	; =0x0000A040
	ldr	r4, _0380077C	; =0x040001A0
	strh	r0, [r4]
	mov	r8, #40960	; 0xa000
	b	_03800750
_0380071C:
	ldr	r0, [r5]
	sub	r0, r0, #1
	str	r0, [r5]
	ldr	r0, [r5]
	cmp	r0, #0
	streqh	r8, [r4]
_03800734:
	ldrh	r0, [r4]
	ands	r0, r0, #128	; 0x80
	bne	_03800734
	mov	r0, r5
	mov	lr, pc
	bx	r6
	sub	r7, r7, #1
_03800750:
	cmp	r7, #0
	bne	_0380071C
	ldr	r0, [r5]
	cmp	r0, #0
	moveq	r1, #0
	ldreq	r0, _0380077C	; =0x040001A0
	streqh	r1, [r0]
	ldmia	sp!, {r4, r5, r6, r7, r8, lr}
	bx	lr
_03800774:	.word	_03809764
_03800778:	.word	0x0000A040
_0380077C:	.word	0x040001A0

	arm_func_start CARDi_WaitPrevCommand
CARDi_WaitPrevCommand: ; 0x03800780
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	mov	r0, #0
	mov	r1, #50	; 0x32
	bl	CARDi_CommandEnd
	ldr	r0, _038007C0	; =cardi_common
	ldr	r1, [r0]
	ldr	r0, [r1]
	cmp	r0, #4
	moveq	r0, #6
	streq	r0, [r1]
	moveq	r0, #0
	movne	r0, #1
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_038007C0:	.word	cardi_common

	arm_func_start CARDi_CommandCheckBusy
CARDi_CommandCheckBusy: ; 0x038007C4
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	mov	r0, #2
	bl	CARDi_CommandBegin
	ldr	r0, _03800824	; =_038072C4
	mov	r1, #0
	mov	r2, #1
	ldr	r3, _03800828	; =CARDi_CommWriteCore
	bl	CARDi_CommArray
	mov	r0, #0
	add	r1, sp, #0
	mov	r2, #1
	ldr	r3, _0380082C	; =CARDi_CommReadCore
	bl	CARDi_CommArray
	mov	r0, #0
	mov	r1, r0
	bl	CARDi_CommandEnd
	ldrb	r0, [sp]
	ands	r0, r0, #1
	moveq	r0, #1
	movne	r0, #0
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_03800824:	.word	_038072C4
_03800828:	.word	CARDi_CommWriteCore
_0380082C:	.word	CARDi_CommReadCore

	arm_func_start CARDi_CommandEnd
CARDi_CommandEnd: ; 0x03800830
	stmdb	sp!, {r4, r5, r6, lr}
	mov	r5, r0
	mov	r4, r1
	adds	r1, r5, r4
	beq	_038008A8
	cmp	r5, #0
	beq	_03800850
	bl	OS_Sleep
_03800850:
	cmp	r4, #0
	beq	_03800890
	sub	r6, r4, r5
	mov	r4, #5
	b	_0380087C
_03800864:
	cmp	r6, #5
	movlt	r5, r6
	movge	r5, r4
	mov	r0, r5
	bl	OS_Sleep
	sub	r6, r6, r5
_0380087C:
	bl	CARDi_CommandCheckBusy
	cmp	r0, #0
	bne	_03800890
	cmp	r6, #0
	bgt	_03800864
_03800890:
	bl	CARDi_CommandCheckBusy
	cmp	r0, #0
	moveq	r1, #4
	ldreq	r0, _038008B0	; =cardi_common
	ldreq	r0, [r0]
	streq	r1, [r0]
_038008A8:
	ldmia	sp!, {r4, r5, r6, lr}
	bx	lr
_038008B0:	.word	cardi_common

	arm_func_start CARDi_CommandBegin
CARDi_CommandBegin: ; 0x038008B4
	ldr	r1, _038008C0	; =_03809764
	str	r0, [r1]
	bx	lr
_038008C0:	.word	_03809764