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
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start FUN_037F8000
FUN_037F8000: ; 0x037F8000
stmfd sp!, {lr}
sub sp, sp, #4
ldr r0, _037F8028 ; =PMi_Initialized
ldr r0, [r0]
cmp r0, #0
beq _037F801C
bl PM_SelfBlinkProc
_037F801C:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_037F8028: .word PMi_Initialized
arm_func_start FUN_037F802C
FUN_037F802C: ; 0x037F802C
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
sub sp, sp, #4
mov sl, r0
mov r8, #0
bl FUN_037F81E8
cmp r0, #0
beq _037F80F8
bl FUN_037F81C4
mov r7, r0
mov r9, r8
mov r4, #1
mov fp, #138 ; 0x8a
mov r5, #112 ; 0x70
_037F8060:
add r6, sl, r9, lsl #8
ldr r0, _037F81B4 ; =0x0000FFFF
mov r1, r6
mov r2, r5
bl FUN_037F81B8
mov r2, r6
ldrh r1, [r2, #114] ; 0x72
cmp r0, r1
bne _037F80E0
ldrh r0, [r2, #112] ; 0x70
cmp r0, #128 ; 0x80
bcs _037F80E0
ldr r0, _037F81B4 ; =0x0000FFFF
add r1, r6, #116 ; 0x74
mov r2, fp
bl FUN_037F81B8
mov r3, r6
ldrh r1, [r3, #254] ; 0xfe
cmp r0, r1
bne _037F80E0
ldrh r2, [r3, #118] ; 0x76
ldrb r0, [r3, #117] ; 0x75
mov r1, r4, lsl r0
ands r1, r1, r2
beq _037F80E0
ands r1, r7, r2
ldrneh r1, [r6, #100] ; 0x64
bicne r1, r1, #7
andne r0, r0, #7
orrne r0, r1, r0
strneh r0, [r6, #100] ; 0x64
orr r8, r8, r4, lsl r9
_037F80E0:
add r0, r9, #1
mov r0, r0, lsl #16
mov r9, r0, lsr #16
cmp r9, #2
bcc _037F8060
b _037F8158
_037F80F8:
bl FUN_037F81C4
cmp r0, #0
movne r0, #3
bne _037F81A8
mov r7, r8
mov r4, #1
ldr r6, _037F81B4 ; =0x0000FFFF
mov r5, #112 ; 0x70
_037F8118:
mov r0, r6
add r1, sl, r7, lsl #8
mov r2, r5
bl FUN_037F81B8
add r2, sl, r7, lsl #8
ldrh r1, [r2, #114] ; 0x72
cmp r0, r1
bne _037F8144
ldrh r0, [r2, #112] ; 0x70
cmp r0, #128 ; 0x80
orrcc r8, r8, r4, lsl r7
_037F8144:
add r0, r7, #1
mov r0, r0, lsl #16
mov r7, r0, lsr #16
cmp r7, #2
bcc _037F8118
_037F8158:
cmp r8, #1
beq _037F8174
cmp r8, #2
beq _037F8174
cmp r8, #3
beq _037F817C
b _037F81A4
_037F8174:
mov r0, r8
b _037F81A8
_037F817C:
ldrh r0, [sl, #112] ; 0x70
add r0, r0, #1
and r0, r0, #127 ; 0x7f
and r1, r0, #255 ; 0xff
add r0, sl, #256 ; 0x100
ldrh r0, [r0, #112] ; 0x70
cmp r1, r0
moveq r0, #2
movne r0, #1
b _037F81A8
_037F81A4:
mov r0, #0
_037F81A8:
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
bx lr
_037F81B4: .word 0x0000FFFF
arm_func_start FUN_037F81B8
FUN_037F81B8: ; 0x037F81B8
ldr ip, _037F81C0 ; =SVC_GetCRC16
bx ip
_037F81C0: .word SVC_GetCRC16
arm_func_start FUN_037F81C4
FUN_037F81C4: ; 0x037F81C4
mov r0, #0
ldr r1, _037F81E4 ; =0x027FFE1D
ldrb r1, [r1]
cmp r1, #128 ; 0x80
orreq r0, r0, #64 ; 0x40
moveq r0, r0, lsl #16
moveq r0, r0, lsr #16
bx lr
_037F81E4: .word 0x027FFE1D
arm_func_start FUN_037F81E8
FUN_037F81E8: ; 0x037F81E8
stmfd sp!, {lr}
sub sp, sp, #4
mov r0, #29
mov r1, #1
add r2, sp, #0
bl NVRAM_ReadDataBytes
ldrb r0, [sp]
cmp r0, #255 ; 0xff
moveq r0, #0
beq _037F821C
ands r0, r0, #64 ; 0x40
movne r0, #1
moveq r0, #0
_037F821C:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
arm_func_start FUN_037F8228
FUN_037F8228: ; 0x037F8228
stmdb sp!, {r4, lr}
sub sp, sp, #528 ; 0x210
mov r0, #32
mov r1, #2
add r2, sp, #4
bl NVRAM_ReadDataBytes
ldr r0, [sp, #4]
mov r0, r0, lsl #3
str r0, [sp, #4]
mov r1, #256 ; 0x100
add r2, sp, #16
bl NVRAM_ReadDataBytes
ldr r0, [sp, #4]
add r0, r0, #256 ; 0x100
mov r1, #256 ; 0x100
add r2, sp, #272 ; 0x110
bl NVRAM_ReadDataBytes
add r0, sp, #16
bl FUN_037F802C
cmp r0, #3
blt _037F8290
mvn r0, #0
ldr r1, _037F83A4 ; =0x027FFC80
mov r2, #116 ; 0x74
bl MIi_CpuClear32
b _037F834C
_037F8290:
cmp r0, #0
beq _037F833C
mov r2, r0, lsl #8
ldr r1, _037F83A8 ; =0xFFFFFF2A
add r1, sp, r1
ldrb r1, [r1, r0, lsl #8]
cmp r1, #10
bcs _037F82DC
mov ip, #10
mov r3, #0
add r1, sp, #16
add r2, r1, r2
b _037F82D0
_037F82C4:
add r1, r2, ip, lsl #1
strh r3, [r1, #-252] ; 0xffffff04
sub ip, ip, #1
_037F82D0:
ldrb r1, [r2, #-230] ; 0xffffff1a
cmp ip, r1
bgt _037F82C4
_037F82DC:
mov r2, r0, lsl #8
ldr r1, _037F83AC ; =0xFFFFFF60
add r1, sp, r1
ldrb r1, [r1, r0, lsl #8]
cmp r1, #26
bcs _037F8320
mov ip, #26
mov r3, #0
add r1, sp, #16
add r2, r1, r2
b _037F8314
_037F8308:
add r1, r2, ip, lsl #1
strh r3, [r1, #-230] ; 0xffffff1a
sub ip, ip, #1
_037F8314:
ldrb r1, [r2, #-176] ; 0xffffff50
cmp ip, r1
bgt _037F8308
_037F8320:
add r1, sp, #16
sub r0, r0, #1
add r0, r1, r0, lsl #8
ldr r1, _037F83A4 ; =0x027FFC80
mov r2, #116 ; 0x74
bl MIi_CpuCopy32
b _037F834C
_037F833C:
mov r0, #0
ldr r1, _037F83A4 ; =0x027FFC80
mov r2, #116 ; 0x74
bl MIi_CpuClear32
_037F834C:
mov r0, #54 ; 0x36
mov r1, #6
add r2, sp, #8
bl NVRAM_ReadDataBytes
ldr r0, _037F83A4 ; =0x027FFC80
add r4, r0, #116 ; 0x74
add r0, sp, #8
mov r1, r4
mov r2, #6
bl MI_CpuCopy8
mov r0, #60 ; 0x3c
mov r1, #2
add r2, sp, #0
bl NVRAM_ReadDataBytes
ldrh r0, [sp]
mov r0, r0, lsl #15
mov r0, r0, lsr #16
bl WMSP_GetAllowedChannel
strh r0, [r4, #6]
add sp, sp, #528 ; 0x210
ldmia sp!, {r4, lr}
bx lr
_037F83A4: .word 0x027FFC80
_037F83A8: .word 0xFFFFFF2A
_037F83AC: .word 0xFFFFFF60
arm_func_start FUN_037F83B0
FUN_037F83B0: ; 0x037F83B0
stmdb sp!, {r4, lr}
mov r0, #8
bl OS_GetArenaHi
mov r4, r0
mov r0, #8
bl OS_GetArenaLo
mov r1, r0
mov r0, #8
mov r2, r4
mov r3, #1
bl OS_InitAlloc
mov r4, r0
mov r0, #8
bl OS_GetArenaHi
mov r2, r0
mov r0, r4
mov r1, #0
sub r2, r2, r4
bl MI_CpuFill8
mov r0, #8
mov r1, r4
bl OS_SetArenaLo
mov r0, #8
bl OS_GetArenaHi
mov r4, r0
mov r0, #8
bl OS_GetArenaLo
mov r1, r0
mov r0, #8
mov r2, r4
bl OS_CreateHeap
movs r4, r0
bpl _037F8438
bl OS_Terminate
_037F8438:
mov r0, #8
mov r1, r4
bl OS_SetCurrentHeap
mov r0, #8
mov r1, r4
bl OS_CheckHeap
cmp r0, #8448 ; 0x2100
bcs _037F845C
bl OS_Terminate
_037F845C:
mov r0, r4
ldmia sp!, {r4, lr}
bx lr
arm_func_start NitroSpMain
NitroSpMain: ; 0x037F8468
stmdb sp!, {r4, lr}
bl WVR_ShelterExtWram
bl OS_Init
bl OS_InitThread
bl FUN_037F8228
bl PXI_Init
bl FUN_037F83B0
mov r4, r0
mov r0, #6
bl SND_Init
bl PAD_InitXYButton
mov r0, #1
ldr r1, _037F8524 ; =FUN_037F8000
bl OS_SetIrqFunction
mov r0, #1
bl OS_EnableIrqMask
ldr r1, _037F8528 ; =0x04000004
ldrh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #8
strh r0, [r1]
ldr r1, _037F852C ; =0x04000208
ldrh r0, [r1]
mov r0, #1
strh r0, [r1]
bl OS_EnableInterrupts
mvn r0, #0
bl FS_Init
mov r0, #15
bl CARD_SetThreadPriority
mov r0, #12
bl RTC_Init
mov r0, r4
bl WVR_Init
mov r0, #2
bl SPI_Init
mov r4, #0
_037F84FC:
bl FUN_037F8530
bl OS_IsResetOccurred
cmp r0, #0
beq _037F8518
mov r0, r4
bl CTRDG_VibPulseEdgeUpdate
bl OS_ResetSystem
_037F8518:
bl CTRDG_CheckPullOut_Polling
bl CARD_CheckPullOut_Polling
b _037F84FC
_037F8524: .word FUN_037F8000
_037F8528: .word 0x04000004
_037F852C: .word 0x04000208
arm_func_start FUN_037F8530
FUN_037F8530: ; 0x037F8530
ldr ip, _037F8538 ; =SVC_Halt
bx ip
_037F8538: .word SVC_Halt
|