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
|
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global _038099AC
_038099AC: ;0x038099AC
.space 0x038099B0 - 0x038099AC
.global _038099B0
_038099B0: ;0x038099B0
.space 0x038099B8 - 0x038099B0
.global _038099B8
_038099B8: ;0x038099B8
.space 0x03809C5C - 0x038099B8
.global _03809C5C
_03809C5C: ;0x03809C5C
.space 0x03809C7C - 0x03809C5C
.global _03809C7C
_03809C7C: ;0x03809C7C
.space 0x03809CBC - 0x03809C7C
.global _03809CBC
_03809CBC: ;0x03809CBC
.space 0x03809CC0 - 0x03809CBC
.global _03809CC0
_03809CC0: ;0x03809CC0
.space 0x03809E40 - 0x03809CC0
.global _03809E40
_03809E40: ;0x03809E40
.space 0x03809E4C - 0x03809E40
.section .text
arm_func_start FUN_03801150
FUN_03801150: ;@ 0x03801150
stmfd sp!, {lr}
sub sp, sp, #4
cmp r2, #0
bne _038011B4
sub r0, r0, #4
cmp r0, #5
addls pc, pc, r0, lsl #2
b _038011B4
b _038011AC
b _038011B4
b _03801188
b _038011B4
b _038011A0
b _03801194
_03801188:
mov r0, r1
bl TP_AnalyzeCommand
b _038011B4
_03801194:
mov r0, r1
bl MIC_AnalyzeCommand
b _038011B4
_038011A0:
mov r0, r1
bl PM_AnalyzeCommand
b _038011B4
_038011AC:
mov r0, r1
bl NVRAM_AnalyzeCommand
_038011B4:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
arm_func_start FUN_038011C0
FUN_038011C0: ;@ 0x038011C0
stmdb sp!, {r4, r5, r6, lr}
sub sp, sp, #8
ldr r6, _03801228 ;@ =_03809C5C
add r5, sp, #0
mov r4, #1
_038011D4:
mov r0, r6
mov r1, r5
mov r2, r4
bl OS_ReceiveMessage
ldr r0, [sp]
ldr r1, [r0]
cmp r1, #3
addls pc, pc, r1, lsl #2
b _038011D4
b _03801208
b _03801220
b _03801210
b _03801218
_03801208:
bl TP_ExecuteProcess
b _038011D4
_03801210:
bl MIC_ExecuteProcess
b _038011D4
_03801218:
bl PM_ExecuteProcess
b _038011D4
_03801220:
bl NVRAM_ExecuteProcess
b _038011D4
_03801228: .word _03809C5C
arm_func_start SPIi_CheckEntry
SPIi_CheckEntry: ;@ 0x0380122C
stmfd sp!, {lr}
sub sp, sp, #4
ldr r0, _03801250 ;@ =_03809C5C
add r1, sp, #0
mov r2, #0
bl OS_ReadMessage
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_03801250: .word _03809C5C
arm_func_start SPIi_SetEntry
SPIi_SetEntry: ;@ 0x03801254
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
mov r4, r1
ldrh r0, [sp, #24]
cmp r0, #4
movhi r0, #0
bhi _0380130C
bl OS_DisableInterrupts
ldr r2, _03801318 ;@ =_038099B0
ldr r3, [r2, #1164] ;@ 0x48c
mov r1, #24
mul ip, r3, r1
ldr r3, _0380131C ;@ =_03809CBC
str r5, [r3, ip]
ldr r3, [r2, #1164] ;@ 0x48c
mul r5, r3, r1
ldr r3, _03801320 ;@ =_03809CC0
str r4, [r3, r5]
add r3, sp, #24
bic r3, r3, #3
add r6, r3, #4
mov lr, #0
ldrh ip, [sp, #24]
b _038012D4
_038012B8:
add r6, r6, #4
ldr r5, [r6, #-4]
ldr r4, [r2, #1164] ;@ 0x48c
mla r3, r4, r1, r2
add r3, r3, lr, lsl #2
str r5, [r3, #788] ;@ 0x314
add lr, lr, #1
_038012D4:
cmp lr, ip
blt _038012B8
ldr r1, _03801318 ;@ =_038099B0
ldr r4, [r1, #1164] ;@ 0x48c
add r2, r4, #1
and r2, r2, #15
str r2, [r1, #1164] ;@ 0x48c
bl OS_RestoreInterrupts
ldr r0, _03801324 ;@ =_03809C5C
ldr r2, _0380131C ;@ =_03809CBC
mov r1, #24
mla r1, r4, r1, r2
mov r2, #0
bl OS_SendMessage
_0380130C:
ldmia sp!, {r4, r5, r6, lr}
add sp, sp, #16
bx lr
_03801318: .word _038099B0
_0380131C: .word _03809CBC
_03801320: .word _03809CC0
_03801324: .word _03809C5C
arm_func_start SPIi_ReleaseException
SPIi_ReleaseException: ;@ 0x03801328
stmfd sp!, {lr}
sub sp, sp, #4
ldr r1, _03801364 ;@ =_038099B0
ldr r2, [r1, #4]
cmp r2, r0
bne _03801358
mov r0, #5
str r0, [r1, #4]
mov r0, #0
str r0, [r1]
ldr r0, _03801368 ;@ =_03809E40
bl OS_WakeupThread
_03801358:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_03801364: .word _038099B0
_03801368: .word _03809E40
arm_func_start SPIi_GetException
SPIi_GetException: ;@ 0x0380136C
mov r2, #1
ldr r1, _03801380 ;@ =_038099B0
str r2, [r1]
str r0, [r1, #4]
bx lr
_03801380: .word _038099B0
arm_func_start SPIi_CheckException
SPIi_CheckException: ;@ 0x03801384
ldr r0, _0380139C ;@ =_038099B0
ldr r0, [r0]
cmp r0, #0
moveq r0, #1
movne r0, #0
bx lr
_0380139C: .word _038099B0
arm_func_start SPIi_ReturnResult
SPIi_ReturnResult: ;@ 0x038013A0
stmdb sp!, {r4, r5, r6, lr}
and r2, r0, #112 ;@ 0x70
cmp r2, #48 ;@ 0x30
bgt _038013E0
cmp r2, #48 ;@ 0x30
bge _03801434
cmp r2, #16
bgt _038013D4
cmp r2, #16
bge _0380141C
cmp r2, #0
beq _0380141C
b _03801438
_038013D4:
cmp r2, #32
beq _03801434
b _03801438
_038013E0:
cmp r2, #80 ;@ 0x50
bgt _038013FC
cmp r2, #80 ;@ 0x50
bge _03801424
cmp r2, #64 ;@ 0x40
beq _03801424
b _03801438
_038013FC:
cmp r2, #96 ;@ 0x60
bgt _03801410
cmp r2, #96 ;@ 0x60
beq _0380142C
b _03801438
_03801410:
cmp r2, #112 ;@ 0x70
beq _0380142C
b _03801438
_0380141C:
mov r4, #6
b _03801438
_03801424:
mov r4, #9
b _03801438
_0380142C:
mov r4, #8
b _03801438
_03801434:
mov r4, #4
_03801438:
and r0, r0, #255 ;@ 0xff
orr r0, r0, #128 ;@ 0x80
mov r0, r0, lsl #8
orr r2, r0, #50331648 ;@ 0x3000000
and r0, r1, #255 ;@ 0xff
orr r6, r2, r0
mov r5, #0
_03801454:
mov r0, r4
mov r1, r6
mov r2, r5
bl PXI_SendWordByFifo
cmp r0, #0
blt _03801454
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_start SPI_Unlock
SPI_Unlock: ;@ 0x03801474
stmfd sp!, {lr}
sub sp, sp, #4
ldr r1, _038014D8 ;@ =_038099B0
ldr r2, [r1]
cmp r2, #0
beq _038014CC
ldr r2, [r1, #4]
cmp r2, #4
bne _038014CC
ldr r1, [r1, #1176] ;@ 0x498
cmp r1, r0
bne _038014CC
bl OS_DisableInterrupts
mov r2, #5
ldr r1, _038014D8 ;@ =_038099B0
str r2, [r1, #4]
mov r2, #0
str r2, [r1]
str r2, [r1, #1176] ;@ 0x498
bl OS_RestoreInterrupts
ldr r0, _038014DC ;@ =_03809E40
bl OS_WakeupThread
_038014CC:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_038014D8: .word _038099B0
_038014DC: .word _03809E40
arm_func_start SPI_Lock
SPI_Lock: ;@ 0x038014E0
stmdb sp!, {r4, r5, r6, r7, lr}
sub sp, sp, #4
mov r7, r0
ldr r5, _0380153C ;@ =_03809E40
ldr r4, _03801540 ;@ =_038099B0
_038014F4:
bl OS_DisableInterrupts
mov r6, r0
ldr r1, [r4]
cmp r1, #0
beq _03801518
bl OS_RestoreInterrupts
mov r0, r5
bl OS_SleepThread
b _038014F4
_03801518:
mov r0, #4
bl SPIi_GetException
ldr r0, _03801540 ;@ =_038099B0
str r7, [r0, #1176] ;@ 0x498
mov r0, r6
bl OS_RestoreInterrupts
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
_0380153C: .word _03809E40
_03801540: .word _038099B0
arm_func_start SPI_Init
SPI_Init: ;@ 0x03801544
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #8
mov r4, r0
ldr r0, _03801640 ;@ =_038099AC
ldrh r1, [r0]
cmp r1, #0
bne _03801634
mov r1, #1
strh r1, [r0]
mov r1, #0
ldr r0, _03801644 ;@ =_038099B0
str r1, [r0]
mov r1, #5
str r1, [r0, #4]
bl TP_Init
bl NVRAM_Init
bl MIC_Init
bl PM_Init
bl PXI_Init
mov r0, #6
ldr r1, _03801648 ;@ =FUN_03801150
bl PXI_SetFifoRecvCallback
mov r0, #9
ldr r1, _03801648 ;@ =FUN_03801150
bl PXI_SetFifoRecvCallback
mov r0, #8
ldr r1, _03801648 ;@ =FUN_03801150
bl PXI_SetFifoRecvCallback
mov r0, #4
ldr r1, _03801648 ;@ =FUN_03801150
bl PXI_SetFifoRecvCallback
ldr r0, _0380164C ;@ =_03809C5C
ldr r1, _03801650 ;@ =_03809C7C
mov r2, #16
bl OS_InitMessageQueue
mov r8, #0
ldr r7, _03801654 ;@ =_03809CBC
mov r6, r8
mov r5, #24
_038015E0:
mla r0, r8, r5, r7
mov r1, r6
mov r2, r5
bl MI_CpuFill8
add r8, r8, #1
cmp r8, #16
blt _038015E0
mov r2, #0
ldr r0, _03801644 ;@ =_038099B0
str r2, [r0, #1164] ;@ 0x48c
str r2, [r0, #1172] ;@ 0x494
str r2, [r0, #1168] ;@ 0x490
mov r0, #512 ;@ 0x200
str r0, [sp]
str r4, [sp, #4]
ldr r0, _03801658 ;@ =_038099B8
ldr r1, _0380165C ;@ =FUN_038011C0
ldr r3, _0380164C ;@ =_03809C5C
bl OS_CreateThread
ldr r0, _03801658 ;@ =_038099B8
bl OS_WakeupThreadDirect
_03801634:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
_03801640: .word _038099AC
_03801644: .word _038099B0
_03801648: .word FUN_03801150
_0380164C: .word _03809C5C
_03801650: .word _03809C7C
_03801654: .word _03809CBC
_03801658: .word _038099B8
_0380165C: .word FUN_038011C0
arm_func_start FUN_03801660
FUN_03801660: ;@ 0x03801660
stmfd sp!, {lr}
sub sp, sp, #4
cmp r0, #0
bne _03801680
mov r0, #3
mov r1, #2
bl SPIi_ReturnResult
b _03801698
_03801680:
ldr r1, _038016A4 ;@ =_03809E54
str r0, [r1, #36] ;@ 0x24
str r0, [r1, #40] ;@ 0x28
mov r0, #3
mov r1, #0
bl SPIi_ReturnResult
_03801698:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_038016A4: .word _03809E54
arm_func_start FUN_038016A8
FUN_038016A8: ;@ 0x038016A8
stmdb sp!, {r4, lr}
sub sp, sp, #8
mov r4, r0
mov r0, #0
mov r1, #16
mov r2, #1
mov r3, r4
bl SPIi_SetEntry
cmp r0, #0
bne _0380170C
ldr r0, [sp]
bic r0, r0, #100663296 ;@ 0x6000000
orr r0, r0, #100663296 ;@ 0x6000000
str r0, [sp]
ldrh r1, [sp]
ldr r0, _03801718 ;@ =0x027FFFAA
strh r1, [r0]
ldrh r1, [sp, #2]
ldr r0, _0380171C ;@ =0x027FFFAC
strh r1, [r0]
mov r0, #16
and r1, r4, #255 ;@ 0xff
mov r1, r1, lsl #16
mov r1, r1, lsr #16
bl SPIi_ReturnResult
_0380170C:
add sp, sp, #8
ldmia sp!, {r4, lr}
bx lr
_03801718: .word 0x027FFFAA
_0380171C: .word 0x027FFFAC
|