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
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start CARDi_TaskThread
CARDi_TaskThread: ; 0x03800B20
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
sub sp, sp, #4
ldr r9, _03800D28 ; =cardi_common
add r5, r9, #72 ; 0x48
mov r8, #0
add r7, r9, #252 ; 0xfc
mov r6, #1
mov r4, #3
mov fp, #11
_03800B44:
mov sl, r8
bl OS_DisableInterrupts
str r0, [sp]
_03800B50:
ldr r0, [r9, #252] ; 0xfc
ands r0, r0, #4
bne _03800B88
ldr r0, [r9, #252] ; 0xfc
ands r0, r0, #16
beq _03800B94
ldr r0, [r7]
orr r0, r0, #4
str r0, [r7]
ldr r0, [r7]
bic r0, r0, #16
str r0, [r7]
mov sl, r6
b _03800BA4
_03800B88:
ldr r0, [r9, #252] ; 0xfc
ands r0, r0, #8
bne _03800BA4
_03800B94:
str r5, [r9, #236] ; 0xec
mov r0, r8
bl OS_SleepThread
b _03800B50
_03800BA4:
ldr r0, [sp]
bl OS_RestoreInterrupts
cmp sl, #0
beq _03800D14
ldr r0, [r9]
str r8, [r0]
ldr r2, [r9]
ldr r1, [r2, #76] ; 0x4c
ldr r0, [r9, #4]
mov r0, r6, lsl r0
ands r0, r1, r0
streq r4, [r2]
ldr r0, [r9, #4]
cmp r0, #12
addls pc, pc, r0, lsl #2
b _03800CB8
b _03800CC0
b _03800CC0
b _03800C18
b _03800C20
b _03800C30
b _03800CB8
b _03800C3C
b _03800C54
b _03800C6C
b _03800C84
b _03800CB8
b _03800C9C
b _03800CB0
_03800C18:
bl CARDi_InitStatusRegister
b _03800CC0
_03800C20:
bl CARDi_ReadRomIDCore
ldr r1, [r9]
str r0, [r1, #8]
b _03800CC0
_03800C30:
ldr r0, [r9]
str r4, [r0]
b _03800CC0
_03800C3C:
ldr r2, [r9]
ldr r0, [r2, #12]
ldr r1, [r2, #16]
ldr r2, [r2, #20]
bl CARDi_ReadBackupCore
b _03800CC0
_03800C54:
ldr r2, [r9]
ldr r0, [r2, #16]
ldr r1, [r2, #12]
ldr r2, [r2, #20]
bl CARDi_WriteBackupCore
b _03800CC0
_03800C6C:
ldr r2, [r9]
ldr r0, [r2, #16]
ldr r1, [r2, #12]
ldr r2, [r2, #20]
bl CARDi_ProgramBackupCore
b _03800CC0
_03800C84:
ldr r2, [r9]
ldr r0, [r2, #16]
ldr r1, [r2, #12]
ldr r2, [r2, #20]
bl CARDi_VerifyBackupCore
b _03800CC0
_03800C9C:
ldr r1, [r9]
ldr r0, [r1, #16]
ldr r1, [r1, #20]
bl CARDi_EraseBackupSectorCore
b _03800CC0
_03800CB0:
bl CARDi_EraseChipCore
b _03800CC0
_03800CB8:
ldr r0, [r9]
str r4, [r0]
_03800CC0:
mov r0, fp
mov r1, r6
mov r2, r6
bl PXI_SendWordByFifo
cmp r0, #0
blt _03800CC0
bl OS_DisableInterrupts
mov sl, r0
ldr r0, [r9, #252] ; 0xfc
bic r0, r0, #76 ; 0x4c
str r0, [r9, #252] ; 0xfc
add r0, r9, #244 ; 0xf4
bl OS_WakeupThread
ldr r0, [r9, #252] ; 0xfc
ands r0, r0, #16
beq _03800D08
mov r0, r5
bl OS_WakeupThreadDirect
_03800D08:
mov r0, sl
bl OS_RestoreInterrupts
b _03800B44
_03800D14:
mov r0, r9
ldr r1, [r9, #68] ; 0x44
mov lr, pc
bx r1
b _03800B44
_03800D28: .word cardi_common
|