summaryrefslogtreecommitdiff
path: root/arm7/asm/wram2.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/wram2.s')
-rw-r--r--arm7/asm/wram2.s7573
1 files changed, 7573 insertions, 0 deletions
diff --git a/arm7/asm/wram2.s b/arm7/asm/wram2.s
new file mode 100644
index 00000000..57fd39e1
--- /dev/null
+++ b/arm7/asm/wram2.s
@@ -0,0 +1,7573 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .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
+
+ arm_func_start TP_ExecuteProcess
+TP_ExecuteProcess: ;@ 0x03801720
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #16
+ mov sl, r0
+ ldr r1, [sl, #4]
+ cmp r1, #2
+ bhi _03801754
+ cmp r1, #0
+ beq _0380176C
+ cmp r1, #1
+ beq _03801834
+ cmp r1, #2
+ beq _038018E0
+ b _0380192C
+_03801754:
+ cmp r1, #16
+ bne _0380192C
+ ldr r0, _03801938 ;@ =_03809E54
+ ldr r0, [r0, #32]
+ cmp r0, #2
+ bne _0380192C
+_0380176C:
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #0
+ bl SPIi_CheckException
+ cmp r0, #0
+ bne _038017A4
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, [sl, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _0380192C
+_038017A4:
+ mov r0, #0
+ bl SPIi_GetException
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add r0, sp, #8
+ ldr r1, _03801938 ;@ =_03809E54
+ ldr r1, [r1, #36] ;@ 0x24
+ add r2, sp, #4
+ bl TP_ExecSampling
+ add r0, sp, #8
+ ldrh r1, [sp, #4]
+ bl FUN_03801954
+ ldrh r1, [sp, #8]
+ ldr r0, _0380193C ;@ =0x027FFFAA
+ strh r1, [r0]
+ ldrh r1, [sp, #10]
+ ldr r0, _03801940 ;@ =0x027FFFAC
+ strh r1, [r0]
+ ldr r0, [sl, #4]
+ cmp r0, #0
+ bne _0380180C
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _03801828
+_0380180C:
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr r1, [sl, #8]
+ and r1, r1, #255 ;@ 0xff
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ bl SPIi_ReturnResult
+_03801828:
+ mov r0, #0
+ bl SPIi_ReleaseException
+ b _0380192C
+_03801834:
+ ldr r7, _03801938 ;@ =_03809E54
+ ldr r0, [r7, #32]
+ cmp r0, #1
+ bne _038018CC
+ mov r9, #0
+ ldr r8, _03801944 ;@ =0x00000107
+ ldr r6, _03801948 ;@ =_03809E80
+ mov r5, #10
+ ldr r4, _0380194C ;@ =FUN_038016A8
+ b _0380189C
+_0380185C:
+ mul r0, r9, r8
+ bl _u32_div_f
+ ldr r1, [sl, #12]
+ add r0, r1, r0
+ mov r1, r8
+ bl _u32_div_f
+ add r2, r7, r9, lsl #1
+ strh r1, [r2, #204] ;@ 0xcc
+ str r9, [sp]
+ mov r0, #40 ;@ 0x28
+ mla r0, r9, r0, r6
+ ldrsh r1, [r2, #204] ;@ 0xcc
+ mov r2, r5
+ mov r3, r4
+ bl OS_SetPeriodicVAlarm
+ add r9, r9, #1
+_0380189C:
+ ldr r1, [sl, #8]
+ cmp r9, r1
+ bcc _0380185C
+ ldr r0, [sl, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl SPIi_ReturnResult
+ mov r1, #2
+ ldr r0, _03801938 ;@ =_03809E54
+ str r1, [r0, #32]
+ b _0380192C
+_038018CC:
+ mov r0, r1, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _0380192C
+_038018E0:
+ ldr r0, _03801938 ;@ =_03809E54
+ ldr r0, [r0, #32]
+ cmp r0, #3
+ bne _0380191C
+ ldr r0, _03801950 ;@ =0x54505641
+ bl OS_CancelVAlarms
+ ldr r0, [sl, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl SPIi_ReturnResult
+ mov r1, #0
+ ldr r0, _03801938 ;@ =_03809E54
+ str r1, [r0, #32]
+ b _0380192C
+_0380191C:
+ mov r0, r1, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+_0380192C:
+ add sp, sp, #16
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_03801938: .word _03809E54
+_0380193C: .word 0x027FFFAA
+_03801940: .word 0x027FFFAC
+_03801944: .word 0x00000107
+_03801948: .word _03809E80
+_0380194C: .word FUN_038016A8
+_03801950: .word 0x54505641
+
+ arm_func_start FUN_03801954
+FUN_03801954: ;@ 0x03801954
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, [r0]
+ mov r2, r0, lsl #7
+ movs r2, r2, lsr #31
+ bne _03801984
+ mov r1, #0
+ ldr r0, _03801A3C ;@ =_03809E50
+ strb r1, [r0]
+ ldr r0, _03801A40 ;@ =_03809E4C
+ strb r1, [r0]
+ b _03801A30
+_03801984:
+ mov r0, r0, lsl #5
+ movs r0, r0, lsr #30
+ beq _038019D4
+ mov r2, #0
+ ldr r0, _03801A40 ;@ =_03809E4C
+ strb r2, [r0]
+ ldr r0, _03801A3C ;@ =_03809E50
+ ldrb r1, [r0]
+ add r1, r1, #1
+ strb r1, [r0]
+ ldrb r1, [r0]
+ cmp r1, #4
+ bcc _03801A30
+ strb r2, [r0]
+ ldr r0, _03801A44 ;@ =_03809E54
+ ldr r1, [r0, #36] ;@ 0x24
+ cmp r1, #35 ;@ 0x23
+ addlt r1, r1, #1
+ strlt r1, [r0, #36] ;@ 0x24
+ b _03801A30
+_038019D4:
+ mov lr, #0
+ ldr r3, _03801A3C ;@ =_03809E50
+ strb lr, [r3]
+ ldr r2, _03801A44 ;@ =_03809E54
+ ldr ip, [r2, #36] ;@ 0x24
+ cmp r1, ip, asr #1
+ ldrge r0, _03801A40 ;@ =_03809E4C
+ strgeb lr, [r0]
+ bge _03801A30
+ ldr r0, _03801A40 ;@ =_03809E4C
+ ldrb r1, [r0]
+ add r1, r1, #1
+ strb r1, [r0]
+ ldrb r1, [r0]
+ cmp r1, #4
+ bcc _03801A30
+ strb lr, [r0]
+ ldr r0, [r2, #40] ;@ 0x28
+ cmp ip, r0
+ subgt r0, ip, #1
+ strgt r0, [r2, #36] ;@ 0x24
+ movgt r0, #3
+ strgtb r0, [r3]
+_03801A30:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801A3C: .word _03809E50
+_03801A40: .word _03809E4C
+_03801A44: .word _03809E54
+
+ arm_func_start TP_AnalyzeCommand
+TP_AnalyzeCommand: ;@ 0x03801A48
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _03801A78
+ mov r4, #0
+ mov r3, r4
+ ldr r1, _03801C00 ;@ =_03809E54
+_03801A64:
+ mov r2, r4, lsl #1
+ strh r3, [r1, r2]
+ add r4, r4, #1
+ cmp r4, #16
+ blt _03801A64
+_03801A78:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #1
+ ldr r2, _03801C00 ;@ =_03809E54
+ strh r0, [r2, r1]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03801BF4
+ ldrh r1, [r2]
+ and r0, r1, #65280 ;@ 0xff00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ cmp r4, #3
+ addls pc, pc, r4, lsl #2
+ b _03801BE8
+ b _03801AD4
+ b _03801AFC
+ b _03801B98
+ b _03801AC0
+_03801AC0:
+ and r0, r1, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ bl FUN_03801660
+ b _03801BF4
+_03801AD4:
+ mov r0, #0
+ mov r1, r4
+ mov r2, r0
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03801BF4
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03801BF4
+_03801AFC:
+ ldr r0, [r2, #32]
+ cmp r0, #0
+ beq _03801B18
+ mov r0, r4
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _03801BF4
+_03801B18:
+ and r0, r1, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ movs r3, r0, lsr #16
+ beq _03801B30
+ cmp r3, #4
+ bls _03801B40
+_03801B30:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03801BF4
+_03801B40:
+ ldrh r1, [r2, #2]
+ ldr r0, _03801C04 ;@ =0x00000107
+ cmp r1, r0
+ bcc _03801B60
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03801BF4
+_03801B60:
+ str r1, [sp]
+ mov r0, #0
+ mov r1, r4
+ mov r2, #2
+ bl SPIi_SetEntry
+ cmp r0, #0
+ movne r1, #1
+ ldrne r0, _03801C00 ;@ =_03809E54
+ strne r1, [r0, #32]
+ bne _03801BF4
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03801BF4
+_03801B98:
+ ldr r0, [r2, #32]
+ cmp r0, #2
+ beq _03801BB4
+ mov r0, r4
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _03801BF4
+_03801BB4:
+ mov r0, #0
+ mov r1, r4
+ mov r2, r0
+ bl SPIi_SetEntry
+ cmp r0, #0
+ movne r1, #3
+ ldrne r0, _03801C00 ;@ =_03809E54
+ strne r1, [r0, #32]
+ bne _03801BF4
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03801BF4
+_03801BE8:
+ mov r0, r4
+ mov r1, #1
+ bl SPIi_ReturnResult
+_03801BF4:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03801C00: .word _03809E54
+_03801C04: .word 0x00000107
+
+ arm_func_start TP_Init
+TP_Init: ;@ 0x03801C08
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r3, #0
+ ldr r0, _03801CFC ;@ =_03809E54
+ str r3, [r0, #32]
+ mov r1, #20
+ str r1, [r0, #36] ;@ 0x24
+ str r1, [r0, #40] ;@ 0x28
+ mov r2, r3
+_03801C28:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _03801C28
+ bl OS_IsVAlarmAvailable
+ cmp r0, #0
+ bne _03801C4C
+ bl OS_InitVAlarm
+_03801C4C:
+ mov r7, #0
+ ldr r6, _03801D00 ;@ =_03809E80
+ ldr r5, _03801D04 ;@ =0x54505641
+ mov r4, #40 ;@ 0x28
+_03801C5C:
+ mla r8, r7, r4, r6
+ mov r0, r8
+ bl OS_CreateVAlarm
+ mov r0, r8
+ mov r1, r5
+ bl OS_SetVAlarmTag
+ add r7, r7, #1
+ cmp r7, #4
+ blt _03801C5C
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801C84:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801C84
+ ldr r0, _03801D0C ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #132 ;@ 0x84
+ ldr r0, _03801D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801CA8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801CA8
+ mov r1, #0
+ ldr r0, _03801D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801CC4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801CC4
+ ldr r0, _03801D14 ;@ =0x00008201
+ strh r0, [r1]
+ mov r1, #0
+ ldr r0, _03801D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801CE8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801CE8
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03801CFC: .word _03809E54
+_03801D00: .word _03809E80
+_03801D04: .word 0x54505641
+_03801D08: .word 0x040001C0
+_03801D0C: .word 0x00008A01
+_03801D10: .word 0x040001C2
+_03801D14: .word 0x00008201
+
+ arm_func_start TP_ExecSampling
+TP_ExecSampling: ;@ 0x03801D18
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #12
+ mov r7, r0
+ movs r6, r1
+ mov r5, r2
+ mov r0, #0
+ strh r0, [r5]
+ rsbmi r6, r6, #0
+ bl FUN_03802160
+ movs r4, r0
+ bne _03801D94
+ ldr r1, [r7]
+ mov r0, #4096 ;@ 0x1000
+ rsb r0, r0, #0
+ and r0, r1, r0
+ str r0, [r7]
+ ldr r1, [r7]
+ ldr r0, _03801F4C ;@ =0xFF000FFF
+ and r0, r1, r0
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #100663296 ;@ 0x6000000
+ orr r0, r0, #100663296 ;@ 0x6000000
+ str r0, [r7]
+ mov r1, #0
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ b _03801F40
+_03801D94:
+ add r0, sp, #0
+ mov r1, r6
+ mov r2, #0
+ add r3, sp, #2
+ bl FUN_03801F68
+ ldr r1, [r7]
+ bic r1, r1, #100663296 ;@ 0x6000000
+ and r0, r0, #3
+ orr r0, r1, r0, lsl #25
+ str r0, [r7]
+ ldr r1, [r7]
+ mov r0, #4096 ;@ 0x1000
+ rsb r0, r0, #0
+ and r2, r1, r0
+ ldrh r1, [sp]
+ ldr r0, _03801F54 ;@ =0x00000FFF
+ and r0, r1, r0
+ orr r0, r2, r0
+ str r0, [r7]
+ add r0, sp, #0
+ mov r1, r6
+ mov r2, #1
+ add r3, sp, #4
+ bl FUN_03801F68
+ cmp r0, #2
+ bne _03801E1C
+ ldr r0, [r7]
+ bic r1, r0, #100663296 ;@ 0x6000000
+ mov r0, r0, lsl #5
+ mov r0, r0, lsr #30
+ orr r0, r0, #2
+ and r0, r0, #3
+ orr r0, r1, r0, lsl #25
+ str r0, [r7]
+_03801E1C:
+ ldr r1, [r7]
+ ldr r0, _03801F4C ;@ =0xFF000FFF
+ and r2, r1, r0
+ ldrh r1, [sp]
+ ldr r0, _03801F54 ;@ =0x00000FFF
+ and r0, r1, r0
+ orr r0, r2, r0, lsl #12
+ str r0, [r7]
+ ldr r0, _03801F58 ;@ =0x00008A01
+ ldr r3, _03801F5C ;@ =0x040001C0
+ strh r0, [r3]
+ mov r6, #0
+ mov r2, r6
+ ldr r1, _03801F60 ;@ =0x040001C2
+_03801E54:
+ strh r2, [r1]
+_03801E58:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801E58
+ add r6, r6, #1
+ cmp r6, #12
+ blt _03801E54
+ ldr r0, _03801F64 ;@ =0x00008201
+ strh r0, [r3]
+ mov r1, #0
+ ldr r0, _03801F60 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801F5C ;@ =0x040001C0
+_03801E88:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801E88
+ cmp r4, #2
+ ldreq r0, [r7]
+ biceq r0, r0, #100663296 ;@ 0x6000000
+ orreq r0, r0, #100663296 ;@ 0x6000000
+ streq r0, [r7]
+ bl FUN_03802160
+ cmp r0, #0
+ beq _03801F20
+ cmp r0, #1
+ beq _03801EF0
+ cmp r0, #2
+ bne _03801F3C
+ ldr r0, [r7]
+ orr r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #100663296 ;@ 0x6000000
+ orr r0, r0, #100663296 ;@ 0x6000000
+ str r0, [r7]
+ mov r1, #0
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ b _03801F40
+_03801EF0:
+ ldr r0, [r7]
+ orr r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ mov r1, #1
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ ldrh r0, [sp, #4]
+ ldrh r1, [sp, #2]
+ cmp r1, r0
+ movcc r1, r0
+ strh r1, [r5]
+ b _03801F40
+_03801F20:
+ ldr r0, [r7]
+ bic r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ mov r1, #0
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ b _03801F40
+_03801F3C:
+ bl OS_Terminate
+_03801F40:
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03801F4C: .word 0xFF000FFF
+_03801F50: .word _03809F28
+_03801F54: .word 0x00000FFF
+_03801F58: .word 0x00008A01
+_03801F5C: .word 0x040001C0
+_03801F60: .word 0x040001C2
+_03801F64: .word 0x00008201
+
+ arm_func_start FUN_03801F68
+FUN_03801F68: ;@ 0x03801F68
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #24
+ cmp r2, #0
+ moveq r5, #209 ;@ 0xd1
+ moveq r6, #1
+ movne r5, #145 ;@ 0x91
+ movne r6, #2
+_03801F84:
+ ldr r4, _0380214C ;@ =0x040001C0
+ ldrh r2, [r4]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03801F84
+ ldr r2, _03802150 ;@ =0x00008A01
+ strh r2, [r4]
+ and r5, r5, #255 ;@ 0xff
+ ldr r2, _03802154 ;@ =0x040001C2
+ strh r5, [r2]
+_03801FA8:
+ ldrh r2, [r4]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03801FA8
+ mov r7, #0
+ ldr ip, _0380214C ;@ =0x040001C0
+ ldr lr, _03802154 ;@ =0x040001C2
+ add r2, sp, #0
+ mov r4, r7
+ ldr r9, _03802158 ;@ =0x00007FF8
+_03801FCC:
+ strh r4, [lr]
+_03801FD0:
+ ldrh r8, [ip]
+ ands r8, r8, #128 ;@ 0x80
+ bne _03801FD0
+ ldrh r8, [lr]
+ and r8, r8, #255 ;@ 0xff
+ mov r8, r8, lsl #16
+ mov r8, r8, lsr #8
+ str r8, [r2, r7, lsl #2]
+ strh r5, [lr]
+_03801FF4:
+ ldrh r8, [ip]
+ ands r8, r8, #128 ;@ 0x80
+ bne _03801FF4
+ ldrh r8, [lr]
+ and r8, r8, #255 ;@ 0xff
+ mov r8, r8, lsl #16
+ ldr sl, [r2, r7, lsl #2]
+ orr r8, sl, r8, lsr #16
+ str r8, [r2, r7, lsl #2]
+ ldr r8, [r2, r7, lsl #2]
+ and r8, r8, r9
+ mov r8, r8, asr #3
+ str r8, [r2, r7, lsl #2]
+ add r7, r7, #1
+ cmp r7, #5
+ blt _03801FCC
+ ldr r2, _0380215C ;@ =0x00008201
+ strh r2, [ip]
+ mov r2, #0
+ strh r2, [lr]
+ ldr r4, _0380214C ;@ =0x040001C0
+_03802048:
+ ldrh r2, [r4]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03802048
+ mov r8, #0
+ mov r7, r8
+ add r5, sp, #0
+_03802060:
+ add r9, r7, #1
+ ldr r4, [r5, r7, lsl #2]
+ b _03802084
+_0380206C:
+ ldr r2, [r5, r9, lsl #2]
+ subs r2, r4, r2
+ rsbmi r2, r2, #0
+ cmp r2, r8
+ movgt r8, r2
+ add r9, r9, #1
+_03802084:
+ cmp r9, #5
+ blt _0380206C
+ add r7, r7, #1
+ cmp r7, #4
+ blt _03802060
+ strh r8, [r3]
+ mov r4, #0
+ add r2, sp, #0
+ b _0380211C
+_038020A8:
+ add r3, r4, #1
+ ldr r7, [r2, r4, lsl #2]
+ b _03802110
+_038020B4:
+ ldr r8, [r2, r3, lsl #2]
+ subs r5, r7, r8
+ rsbmi r5, r5, #0
+ cmp r5, r1
+ bgt _0380210C
+ add r9, r3, #1
+ b _03802104
+_038020D0:
+ ldr r5, [r2, r9, lsl #2]
+ subs sl, r7, r5
+ rsbmi sl, sl, #0
+ cmp sl, r1
+ bgt _03802100
+ add r1, r8, r7, lsl #1
+ add r1, r5, r1
+ mov r1, r1, asr #2
+ bic r1, r1, #7
+ strh r1, [r0]
+ mov r0, #0
+ b _03802140
+_03802100:
+ add r9, r9, #1
+_03802104:
+ cmp r9, #5
+ blt _038020D0
+_0380210C:
+ add r3, r3, #1
+_03802110:
+ cmp r3, #4
+ blt _038020B4
+ add r4, r4, #1
+_0380211C:
+ cmp r4, #3
+ blt _038020A8
+ ldr r2, [sp]
+ ldr r1, [sp, #16]
+ add r1, r2, r1
+ mov r1, r1, asr #1
+ bic r1, r1, #7
+ strh r1, [r0]
+ mov r0, r6
+_03802140:
+ add sp, sp, #24
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_0380214C: .word 0x040001C0
+_03802150: .word 0x00008A01
+_03802154: .word 0x040001C2
+_03802158: .word 0x00007FF8
+_0380215C: .word 0x00008201
+
+ arm_func_start FUN_03802160
+FUN_03802160: ;@ 0x03802160
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802174:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802174
+ ldr r0, _038022A8 ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #132 ;@ 0x84
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802198:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802198
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_038021B4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038021B4
+ ldr r0, _038022B0 ;@ =0x00008201
+ strh r0, [r1]
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_038021D8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038021D8
+ ldr r0, _038022B4 ;@ =_03809F28
+ ldrh r0, [r0]
+ cmp r0, #0
+ bne _0380220C
+ ldr r0, _038022B8 ;@ =0x04000136
+ ldrh r0, [r0]
+ ands r0, r0, #64 ;@ 0x40
+ moveq r0, #1
+ movne r0, #0
+ b _03802298
+_0380220C:
+ ldr r0, _038022B8 ;@ =0x04000136
+ ldrh r0, [r0]
+ ands r0, r0, #64 ;@ 0x40
+ moveq r0, #1
+ beq _03802298
+ ldr r0, _038022A8 ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #132 ;@ 0x84
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802238:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802238
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802254:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802254
+ ldr r0, _038022B0 ;@ =0x00008201
+ strh r0, [r1]
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802278:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802278
+ ldr r0, _038022B8 ;@ =0x04000136
+ ldrh r0, [r0]
+ ands r0, r0, #64 ;@ 0x40
+ movne r0, #0
+ moveq r0, #2
+_03802298:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038022A4: .word 0x040001C0
+_038022A8: .word 0x00008A01
+_038022AC: .word 0x040001C2
+_038022B0: .word 0x00008201
+_038022B4: .word _03809F28
+_038022B8: .word 0x04000136
+
+ arm_func_start PM_ExecuteProcess
+PM_ExecuteProcess: ;@ 0x038022BC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, #3
+ bl SPIi_CheckException
+ cmp r0, #0
+ bne _03802300
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _0380242C
+_03802300:
+ mov r0, #3
+ bl SPIi_GetException
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r1, [r4, #4]
+ sub r0, r1, #97 ;@ 0x61
+ cmp r0, #5
+ addls pc, pc, r0, lsl #2
+ b _03802414
+ b _0380233C
+ b _03802414
+ b _038023E0
+ b _03802368
+ b _038023A4
+ b _03802408
+_0380233C:
+ mov r1, #1
+ ldr r0, _03802438 ;@ =PMi_Work
+ str r1, [r0, #32]
+ ldr r1, [r4, #8]
+ ldr r0, _0380243C ;@ =PMi_TriggerBL
+ strh r1, [r0]
+ ldr r1, [r4, #12]
+ ldr r0, _03802440 ;@ =PMi_KeyPattern
+ strh r1, [r0]
+ bl PMi_DoSleep
+ b _03802424
+_03802368:
+ mov r1, #4
+ ldr r0, _03802438 ;@ =PMi_Work
+ str r1, [r0, #32]
+ ldr r2, [r4, #8]
+ str r2, [r0, #40] ;@ 0x28
+ ldr r1, [r4, #12]
+ str r1, [r0, #36] ;@ 0x24
+ mov r0, r2, lsl #16
+ mov r0, r0, lsr #16
+ and r1, r1, #255 ;@ 0xff
+ bl PMi_SetRegister
+ mov r0, #100 ;@ 0x64
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _03802424
+_038023A4:
+ mov r1, #3
+ ldr r0, _03802438 ;@ =PMi_Work
+ str r1, [r0, #32]
+ ldr r1, [r4, #8]
+ str r1, [r0, #40] ;@ 0x28
+ mov r0, r1, lsl #16
+ mov r4, r0, lsr #16
+ mov r0, r4
+ bl PMi_GetRegister
+ mov r1, r0
+ add r0, r4, #112 ;@ 0x70
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ bl SPIi_ReturnResult
+ b _03802424
+_038023E0:
+ mov r0, #2
+ ldr r1, _03802438 ;@ =PMi_Work
+ str r0, [r1, #32]
+ ldr r0, [r4, #8]
+ str r0, [r1, #36] ;@ 0x24
+ bl PMi_SwitchUtilityProc
+ mov r0, #99 ;@ 0x63
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _03802424
+_03802408:
+ ldr r0, [r4, #8]
+ bl PMi_SetLED
+ b _03802424
+_03802414:
+ mov r0, r1, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #1
+ bl SPIi_ReturnResult
+_03802424:
+ mov r0, #3
+ bl SPIi_ReleaseException
+_0380242C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03802438: .word PMi_Work
+_0380243C: .word PMi_TriggerBL
+_03802440: .word PMi_KeyPattern
+
+ arm_func_start PM_AnalyzeCommand
+PM_AnalyzeCommand: ;@ 0x03802444
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _03802474
+ mov r4, #0
+ mov r3, r4
+ ldr r1, _03802610 ;@ =PMi_Work
+_03802460:
+ mov r2, r4, lsl #1
+ strh r3, [r1, r2]
+ add r4, r4, #1
+ cmp r4, #16
+ blt _03802460
+_03802474:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #1
+ ldr ip, _03802610 ;@ =PMi_Work
+ strh r0, [ip, r1]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03802604
+ ldrh r3, [ip]
+ and r0, r3, #65280 ;@ 0xff00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ sub r0, r4, #96 ;@ 0x60
+ cmp r0, #7
+ addls pc, pc, r0, lsl #2
+ b _038025F8
+ b _038024D0
+ b _038024E0
+ b _038025F8
+ b _03802588
+ b _0380251C
+ b _03802558
+ b _038025C4
+ b _038025DC
+_038024D0:
+ mov r0, #96 ;@ 0x60
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _03802604
+_038024E0:
+ ldrh r1, [ip, #2]
+ ldr r0, _03802614 ;@ =0x0000FFFF
+ and r0, r1, r0
+ str r0, [sp]
+ mov r0, #3
+ mov r1, r4
+ mov r2, #2
+ and r3, r3, #255 ;@ 0xff
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03802604
+_0380251C:
+ ldrh r1, [ip, #2]
+ ldr r0, _03802614 ;@ =0x0000FFFF
+ and r0, r1, r0
+ str r0, [sp]
+ mov r0, #3
+ mov r1, r4
+ mov r2, #2
+ and r3, r3, #255 ;@ 0xff
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03802604
+_03802558:
+ mov r0, #3
+ mov r1, r4
+ mov r2, #1
+ ldr ip, _03802614 ;@ =0x0000FFFF
+ and r3, r3, ip
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03802604
+_03802588:
+ mov r0, #3
+ mov r1, r4
+ mov r2, #1
+ and lr, r3, #255 ;@ 0xff
+ ldrh ip, [ip, #2]
+ ldr r3, _03802614 ;@ =0x0000FFFF
+ and r3, ip, r3
+ orr r3, r3, lr, lsl #16
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03802604
+_038025C4:
+ and r0, r3, #255 ;@ 0xff
+ bl PM_SetLEDPattern
+ mov r0, #102 ;@ 0x66
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _03802604
+_038025DC:
+ bl PM_GetLEDPattern
+ mov r1, r0
+ mov r0, #103 ;@ 0x67
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ bl SPIi_ReturnResult
+ b _03802604
+_038025F8:
+ mov r0, r4
+ mov r1, #1
+ bl SPIi_ReturnResult
+_03802604:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03802610: .word PMi_Work
+_03802614: .word 0x0000FFFF
+
+ arm_func_start PM_Init
+PM_Init: ;@ 0x03802618
+ mov r1, #1
+ ldr r0, _0380264C ;@ =PMi_Initialized
+ str r1, [r0]
+ mov r3, #0
+ ldr r0, _03802650 ;@ =PMi_Work
+ str r3, [r0, #32]
+ mov r2, r3
+_03802634:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _03802634
+ bx lr
+_0380264C: .word PMi_Initialized
+_03802650: .word PMi_Work
+
+ arm_func_start PMi_SendPxiCommand
+PMi_SendPxiCommand: ;@ 0x03802654
+ ldr r3, _03802678 ;@ =0x0000FFFF
+ and r3, r2, r3
+ and r0, r0, #62914560 ;@ 0x3c00000
+ mov r2, r0, lsl #22
+ and r0, r1, #4128768 ;@ 0x3f0000
+ orr r0, r2, r0, lsl #16
+ orr r0, r3, r0
+ ldr ip, _0380267C ;@ =PMi_SendPxiData
+ bx ip
+_03802678: .word 0x0000FFFF
+_0380267C: .word PMi_SendPxiData
+
+ arm_func_start PMi_SendPxiData
+PMi_SendPxiData: ;@ 0x03802680
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, #8
+ mov r4, #0
+_03802690:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ bne _03802690
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start PMi_ResetControl
+PMi_ResetControl: ;@ 0x038026B0
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #0
+ bl PMi_GetRegister
+ mvn r1, r4
+ and r0, r0, r1
+ and r1, r0, #255 ;@ 0xff
+ mov r0, #0
+ bl PMi_SetRegister
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start PMi_SetControl
+PMi_SetControl: ;@ 0x038026DC
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #0
+ bl PMi_GetRegister
+ orr r1, r0, r4
+ mov r0, #0
+ bl PMi_SetRegister
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start PMi_GetRegister
+PMi_GetRegister: ;@ 0x03802700
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r1, _0380278C ;@ =0x040001C0
+_0380270C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380270C
+ bl FUN_03802808
+ mov r0, #1
+ bl FUN_03802820
+ orr r0, r4, #128 ;@ 0x80
+ and r0, r0, #255 ;@ 0xff
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03802790 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380278C ;@ =0x040001C0
+_0380273C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380273C
+ mov r0, #0
+ bl FUN_03802820
+ mov r1, #0
+ ldr r0, _03802790 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380278C ;@ =0x040001C0
+_03802760:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802760
+ ldr r0, _03802790 ;@ =0x040001C2
+ ldrh r0, [r0]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ ldmia sp!, {r4, lr}
+ bx lr
+_0380278C: .word 0x040001C0
+_03802790: .word 0x040001C2
+
+ arm_func_start PMi_SetRegister
+PMi_SetRegister: ;@ 0x03802794
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ ldr r1, _03802800 ;@ =0x040001C0
+_038027A8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038027A8
+ bl FUN_03802808
+ mov r0, #1
+ bl FUN_03802820
+ and r0, r5, #255 ;@ 0xff
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03802804 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03802800 ;@ =0x040001C0
+_038027D4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038027D4
+ mov r0, #0
+ bl FUN_03802820
+ and r1, r4, #255 ;@ 0xff
+ ldr r0, _03802804 ;@ =0x040001C2
+ strh r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03802800: .word 0x040001C0
+_03802804: .word 0x040001C2
+
+ arm_func_start FUN_03802808
+FUN_03802808: ;@ 0x03802808
+ ldr r1, _03802818 ;@ =0x00008202
+ ldr r0, _0380281C ;@ =0x040001C0
+ strh r1, [r0]
+ bx lr
+_03802818: .word 0x00008202
+_0380281C: .word 0x040001C0
+
+ arm_func_start FUN_03802820
+FUN_03802820: ;@ 0x03802820
+ ldr r1, _03802834 ;@ =0x00008002
+ orr r1, r1, r0, lsl #11
+ ldr r0, _03802838 ;@ =0x040001C0
+ strh r1, [r0]
+ bx lr
+_03802834: .word 0x00008002
+_03802838: .word 0x040001C0
+
+ arm_func_start PMi_SetLED
+PMi_SetLED: ;@ 0x0380283C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ cmp r4, #1
+ beq _03802860
+ cmp r4, #2
+ beq _03802878
+ cmp r4, #3
+ beq _0380286C
+ b _0380288C
+_03802860:
+ mov r0, #16
+ bl PMi_ResetControl
+ b _03802890
+_0380286C:
+ mov r0, #48 ;@ 0x30
+ bl PMi_SetControl
+ b _03802890
+_03802878:
+ mov r0, #32
+ bl PMi_ResetControl
+ mov r0, #16
+ bl PMi_SetControl
+ b _03802890
+_0380288C:
+ bl OS_Terminate
+_03802890:
+ ldr r0, _038028A0 ;@ =PMi_LEDStatus
+ str r4, [r0]
+ ldmia sp!, {r4, lr}
+ bx lr
+_038028A0: .word PMi_LEDStatus
+
+ arm_func_start PMi_SwitchUtilityProc
+PMi_SwitchUtilityProc: ;@ 0x038028A4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r0, #15
+ addls pc, pc, r0, lsl #2
+ b _038029C4
+ b _038029C4
+ b _038028F8
+ b _0380290C
+ b _03802920
+ b _03802934
+ b _03802940
+ b _0380294C
+ b _03802958
+ b _03802964
+ b _03802970
+ b _0380297C
+ b _03802988
+ b _03802994
+ b _038029A0
+ b _038029B8
+ b _038029AC
+_038028F8:
+ mov r0, #1
+ bl PM_SetLEDPattern
+ mov r0, #1
+ bl PMi_SetLED
+ b _038029C4
+_0380290C:
+ mov r0, #3
+ bl PM_SetLEDPattern
+ mov r0, #3
+ bl PMi_SetLED
+ b _038029C4
+_03802920:
+ mov r0, #2
+ bl PM_SetLEDPattern
+ mov r0, #2
+ bl PMi_SetLED
+ b _038029C4
+_03802934:
+ mov r0, #4
+ bl PMi_SetControl
+ b _038029C4
+_03802940:
+ mov r0, #4
+ bl PMi_ResetControl
+ b _038029C4
+_0380294C:
+ mov r0, #8
+ bl PMi_SetControl
+ b _038029C4
+_03802958:
+ mov r0, #8
+ bl PMi_ResetControl
+ b _038029C4
+_03802964:
+ mov r0, #12
+ bl PMi_SetControl
+ b _038029C4
+_03802970:
+ mov r0, #12
+ bl PMi_ResetControl
+ b _038029C4
+_0380297C:
+ mov r0, #1
+ bl PMi_SetControl
+ b _038029C4
+_03802988:
+ mov r0, #1
+ bl PMi_ResetControl
+ b _038029C4
+_03802994:
+ mov r0, #2
+ bl PMi_ResetControl
+ b _038029C4
+_038029A0:
+ mov r0, #2
+ bl PMi_SetControl
+ b _038029C4
+_038029AC:
+ mov r0, #64 ;@ 0x40
+ bl PMi_ResetControl
+ b _038029C4
+_038029B8:
+ bl SND_BeginSleep
+ mov r0, #64 ;@ 0x40
+ bl PMi_SetControl
+_038029C4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start PMi_DoSleep
+PMi_DoSleep: ;@ 0x038029D0
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r5, #0
+ ldr r0, _03802B94 ;@ =0x04000208
+ ldrh r4, [r0]
+ strh r5, [r0]
+ bl OS_DisableInterrupts
+ mov r9, r0
+ mvn r0, #-33554432 ;@ 0xfe000000
+ bl OS_DisableIrqMask
+ mov r8, r0
+ mov r0, r5
+ bl PMi_GetRegister
+ mov r7, r0
+ mov r0, #2
+ bl PM_SetLEDPattern
+ mov r0, #2
+ bl PMi_SetLED
+ mov r0, #2
+ bl PMi_SetLED
+ bl SND_BeginSleep
+ mov r0, #1
+ bl PMi_ResetControl
+ ldr r0, _03802B98 ;@ =PMi_TriggerBL
+ ldrh r0, [r0]
+ ands r0, r0, #1
+ beq _03802A58
+ ldr r0, _03802B9C ;@ =PMi_KeyPattern
+ ldrh r0, [r0]
+ orr r1, r0, #16384 ;@ 0x4000
+ ldr r0, _03802BA0 ;@ =0x04000132
+ strh r1, [r0]
+ mov r0, #4096 ;@ 0x1000
+ bl OS_EnableIrqMask
+_03802A58:
+ ldr r0, _03802B98 ;@ =PMi_TriggerBL
+ ldrh r0, [r0]
+ ands r0, r0, #4
+ beq _03802A70
+ mov r0, #4194304 ;@ 0x400000
+ bl OS_EnableIrqMask
+_03802A70:
+ ldr r0, _03802B98 ;@ =PMi_TriggerBL
+ ldrh r0, [r0]
+ ands r0, r0, #2
+ beq _03802AB4
+ ldr r0, _03802BA4 ;@ =0x04000134
+ ldrh r6, [r0]
+ mov r5, #1
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #64 ;@ 0x40
+ mov r1, #0
+ bl EXIi_SetBitRcnt0L
+ mov r0, #256 ;@ 0x100
+ mov r1, r0
+ bl EXIi_SetBitRcnt0L
+ mov r0, #128 ;@ 0x80
+ bl OS_EnableIrqMask
+_03802AB4:
+ ldr r0, _03802B98 ;@ =PMi_TriggerBL
+ ldrh r0, [r0]
+ ands r0, r0, #8
+ beq _03802ACC
+ mov r0, #1048576 ;@ 0x100000
+ bl OS_EnableIrqMask
+_03802ACC:
+ ldr r0, _03802B98 ;@ =PMi_TriggerBL
+ ldrh r0, [r0]
+ ands r0, r0, #16
+ beq _03802AE4
+ mov r0, #8192 ;@ 0x2000
+ bl OS_EnableIrqMask
+_03802AE4:
+ mov r0, r9
+ bl OS_RestoreInterrupts
+ ldr r1, _03802B94 ;@ =0x04000208
+ ldrh r0, [r1]
+ mov r0, #1
+ strh r0, [r1]
+ bl FUN_03802BAC
+ mov r0, #0
+ mov r1, r7
+ bl PMi_SetRegister
+ ldr r0, _03802B98 ;@ =PMi_TriggerBL
+ ldrh r1, [r0]
+ ands r0, r1, #32
+ movne r0, #6
+ moveq r0, #7
+ ands r1, r1, #64 ;@ 0x40
+ movne r7, #4
+ moveq r7, #5
+ bl PMi_SwitchUtilityProc
+ mov r0, r7
+ bl PMi_SwitchUtilityProc
+ cmp r5, #0
+ ldrne r0, _03802BA4 ;@ =0x04000134
+ strneh r6, [r0]
+ mov r0, #1
+ bl PMi_SetControl
+ bl SND_EndSleep
+ mov r1, #0
+ ldr r0, _03802BA8 ;@ =PMi_Work
+ str r1, [r0, #32]
+ mov r0, #98 ;@ 0x62
+ mov r2, r1
+ bl PMi_SendPxiCommand
+ bl OS_DisableInterrupts
+ mov r0, r8
+ bl OS_SetIrqMask
+ mov r0, r9
+ bl OS_RestoreInterrupts
+ ldr r1, _03802B94 ;@ =0x04000208
+ ldrh r0, [r1]
+ strh r4, [r1]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_03802B94: .word 0x04000208
+_03802B98: .word PMi_TriggerBL
+_03802B9C: .word PMi_KeyPattern
+_03802BA0: .word 0x04000132
+_03802BA4: .word 0x04000134
+_03802BA8: .word PMi_Work
+
+ arm_func_start FUN_03802BAC
+FUN_03802BAC: ;@ 0x03802BAC
+ ldr ip, _03802BB4 ;@ =SVC_Stop
+ bx ip
+_03802BB4: .word SVC_Stop
+
+ arm_func_start PM_GetLEDPattern
+PM_GetLEDPattern: ;@ 0x03802BB8
+ ldr r0, _03802BC4 ;@ =PMi_BlinkPatternNo
+ ldr r0, [r0]
+ bx lr
+_03802BC4: .word PMi_BlinkPatternNo
+
+ arm_func_start PM_SetLEDPattern
+PM_SetLEDPattern: ;@ 0x03802BC8
+ cmp r0, #15
+ ldrle r1, _03802BE4 ;@ =PMi_BlinkPatternNo
+ strle r0, [r1]
+ movle r1, #0
+ ldrle r0, _03802BE8 ;@ =_03809F64
+ strle r1, [r0]
+ bx lr
+_03802BE4: .word PMi_BlinkPatternNo
+_03802BE8: .word _03809F64
+
+ arm_func_start PM_SelfBlinkProc
+PM_SelfBlinkProc: ;@ 0x03802BEC
+ stmdb sp!, {r4, r5, r6, lr}
+ ldr r0, _03802D04 ;@ =PMi_BlinkPatternNo
+ ldr r3, [r0]
+ cmp r3, #0
+ bne _03802C28
+ mov r0, #3
+ mov r1, #102 ;@ 0x66
+ mov r2, #1
+ mov r3, r2
+ bl SPIi_SetEntry
+ cmp r0, #0
+ beq _03802CFC
+ mov r0, #1
+ bl PM_SetLEDPattern
+ b _03802CFC
+_03802C28:
+ cmp r3, #4
+ bge _03802C54
+ ldr r0, _03802D08 ;@ =PMi_LEDStatus
+ ldr r0, [r0]
+ cmp r3, r0
+ beq _03802CFC
+ mov r0, #3
+ mov r1, #102 ;@ 0x66
+ mov r2, #1
+ bl SPIi_SetEntry
+ b _03802CFC
+_03802C54:
+ ldr r6, _03802D0C ;@ =PMi_BlinkPatternData
+ sub r1, r3, #4
+ mov r0, #12
+ mul r5, r1, r0
+ add r4, r6, r5
+ ldr r0, _03802D10 ;@ =_03809F64
+ ldr r0, [r0]
+ ldrh r1, [r4, #10]
+ bl _u32_div_f
+ ldr r5, [r6, r5]
+ ldr lr, [r4, #4]
+ mov r3, #0
+ mov r2, #-2147483648 ;@ 0x80000000
+ mov ip, r3, lsr r0
+ rsb r1, r0, #32
+ orr ip, ip, r2, lsl r1
+ sub r1, r0, #32
+ orr ip, ip, r2, lsr r1
+ and r0, lr, r2, lsr r0
+ and r1, r5, ip
+ cmp r0, r3
+ cmpeq r1, r3
+ movne r3, #1
+ moveq r3, #2
+ ldr r0, _03802D10 ;@ =_03809F64
+ ldr r1, [r0]
+ add ip, r1, #1
+ str ip, [r0]
+ ldrh r2, [r4, #8]
+ ldrh r1, [r4, #10]
+ mul r1, r2, r1
+ cmp ip, r1
+ movcs r1, #0
+ strcs r1, [r0]
+ ldr r0, _03802D08 ;@ =PMi_LEDStatus
+ ldr r0, [r0]
+ cmp r3, r0
+ beq _03802CFC
+ mov r0, #3
+ mov r1, #102 ;@ 0x66
+ mov r2, #1
+ bl SPIi_SetEntry
+_03802CFC:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_03802D04: .word PMi_BlinkPatternNo
+_03802D08: .word PMi_LEDStatus
+_03802D0C: .word PMi_BlinkPatternData
+_03802D10: .word _03809F64
+
+ arm_func_start FUN_03802D14
+FUN_03802D14: ;@ 0x03802D14
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ ldr r4, _03802E6C ;@ =_03809F6C
+ ldrh r5, [r4, #38] ;@ 0x26
+ and r0, r5, #4
+ cmp r0, #4
+ ldrh r6, [r4, #56] ;@ 0x38
+ ldrneh r7, [r4, #58] ;@ 0x3a
+ ldreq r7, _03802E70 ;@ =0x0000FFFF
+ bl SPIi_CheckEntry
+ cmp r0, #0
+ bne _03802D80
+ mov r0, #2
+ bl SPIi_CheckException
+ cmp r0, #0
+ beq _03802D80
+ and r0, r5, #1
+ cmp r0, #1
+ bne _03802D70
+ bl MIC_ExecSampling12
+ tst r5, #2
+ moveq r7, r0
+ eorne r7, r0, #32768 ;@ 0x8000
+ b _03802D80
+_03802D70:
+ bl MIC_ExecSampling8
+ tst r5, #2
+ moveq r7, r0
+ eorne r7, r0, #128 ;@ 0x80
+_03802D80:
+ and r0, r5, #1
+ ldr r3, _03802E74 ;@ =0x027FFC00
+ ldr r1, [r4, #44] ;@ 0x2c
+ cmp r0, #1
+ bne _03802DB0
+ ldr r2, [r4, #40] ;@ 0x28
+ strh r7, [r2, r1]!
+ str r2, [r3, #912] ;@ 0x390
+ add r3, r3, #916 ;@ 0x394
+ strh r7, [r3]
+ add r1, r1, #2
+ b _03802DE8
+_03802DB0:
+ and r7, r7, #255 ;@ 0xff
+ tst r1, #1
+ bne _03802DC8
+ mov r6, r7
+ add r1, r1, #1
+ b _03802DE8
+_03802DC8:
+ orr r0, r6, r7, lsl #8
+ ldr r2, [r4, #40] ;@ 0x28
+ sub r1, r1, #1
+ strh r0, [r2, r1]!
+ str r2, [r3, #912] ;@ 0x390
+ add r3, r3, #916 ;@ 0x394
+ strh r0, [r3]
+ add r1, r1, #2
+_03802DE8:
+ strh r6, [r4, #56] ;@ 0x38
+ strh r7, [r4, #58] ;@ 0x3a
+ ldr r0, [r4, #48] ;@ 0x30
+ cmp r1, r0
+ movcs r1, #0
+ str r1, [r4, #44] ;@ 0x2c
+ bcc _03802E64
+ ldrh r0, [r4, #36] ;@ 0x24
+ and r0, r0, #16
+ cmp r0, #16
+ bne _03802E24
+ mov r0, #81 ;@ 0x51
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _03802E64
+_03802E24:
+ mov r0, #2
+ mov r1, #66 ;@ 0x42
+ mov r2, #0
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03802E4C
+ mov r0, #81 ;@ 0x51
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03802E64
+_03802E4C:
+ mov r0, #4
+ str r0, [r4, #32]
+ ldr r1, _03802E78 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+_03802E64:
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03802E6C: .word _03809F6C
+_03802E70: .word 0x0000FFFF
+_03802E74: .word 0x027FFC00
+_03802E78: .word 0x0400010E
+
+ arm_func_start FUN_03802E7C
+FUN_03802E7C: ;@ 0x03802E7C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl FUN_03802D14
+ ldr r1, _03802EB0 ;@ =0x0380FFF8
+ ldr r0, [r1]
+ orr r0, r0, #64 ;@ 0x40
+ str r0, [r1]
+ mov r1, #64 ;@ 0x40
+ ldr r0, _03802EB4 ;@ =0x04000214
+ str r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03802EB0: .word 0x0380FFF8
+_03802EB4: .word 0x04000214
+
+ arm_func_start MIC_ExecuteProcess
+MIC_ExecuteProcess: ;@ 0x03802EB8
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r2, [r5, #4]
+ cmp r2, #64 ;@ 0x40
+ beq _03802EE4
+ cmp r2, #65 ;@ 0x41
+ beq _03802FB0
+ cmp r2, #66 ;@ 0x42
+ beq _0380304C
+ b _038030F0
+_03802EE4:
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #2
+ bl SPIi_CheckException
+ cmp r0, #0
+ bne _03802F1C
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, [r5, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _038030F0
+_03802F1C:
+ mov r0, #2
+ bl SPIi_GetException
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, [r5, #8]
+ and r0, r0, #1
+ cmp r0, #1
+ bne _03802F68
+ bl MIC_ExecSampling12
+ ldr r1, [r5, #8]
+ ands r1, r1, #2
+ eorne r0, r0, #32768 ;@ 0x8000
+ movne r0, r0, lsl #16
+ movne r0, r0, lsr #16
+ ldr r1, _038030FC ;@ =0x027FFF94
+ strh r0, [r1]
+ ldr r0, _03803100 ;@ =0x027FFF90
+ str r1, [r0]
+ b _03802F90
+_03802F68:
+ bl MIC_ExecSampling8
+ ldr r1, [r5, #8]
+ ands r1, r1, #2
+ eorne r0, r0, #128 ;@ 0x80
+ movne r0, r0, lsl #16
+ movne r0, r0, lsr #16
+ ldr r1, _038030FC ;@ =0x027FFF94
+ strh r0, [r1]
+ ldr r0, _03803100 ;@ =0x027FFF90
+ str r1, [r0]
+_03802F90:
+ ldr r0, [r5, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl SPIi_ReturnResult
+ mov r0, #2
+ bl SPIi_ReleaseException
+ b _038030F0
+_03802FB0:
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldr r1, [r0, #32]
+ cmp r1, #1
+ bne _03803038
+ mov r1, #0
+ strh r1, [r0, #58] ;@ 0x3a
+ strh r1, [r0, #56] ;@ 0x38
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #64 ;@ 0x40
+ bl OS_EnableIrqMask
+ mov r0, #64 ;@ 0x40
+ ldr r1, _03803108 ;@ =FUN_03802E7C
+ bl MIC_SetIrqFunction
+ bl MIC_EnableMultipleInterrupt
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldrh r2, [r0, #52] ;@ 0x34
+ ldr r1, _0380310C ;@ =0x0400010C
+ strh r2, [r1]
+ ldrh r0, [r0, #54] ;@ 0x36
+ orr r1, r0, #192 ;@ 0xc0
+ ldr r0, _03803110 ;@ =0x0400010E
+ strh r1, [r0]
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, [r5, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl SPIi_ReturnResult
+ mov r1, #2
+ ldr r0, _03803104 ;@ =_03809F6C
+ str r1, [r0, #32]
+ b _038030F0
+_03803038:
+ mov r0, r2, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _038030F0
+_0380304C:
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldr r1, [r0, #32]
+ sub r0, r1, #3
+ cmp r0, #1
+ bhi _038030CC
+ ldr r1, _03803110 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #64 ;@ 0x40
+ mov r1, #0
+ bl MIC_SetIrqFunction
+ bl MIC_DisableMultipleInterrupt
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldr r0, [r0, #32]
+ cmp r0, #3
+ bne _038030B0
+ mov r0, #66 ;@ 0x42
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _038030BC
+_038030B0:
+ mov r0, #81 ;@ 0x51
+ mov r1, #0
+ bl SPIi_ReturnResult
+_038030BC:
+ mov r1, #0
+ ldr r0, _03803104 ;@ =_03809F6C
+ str r1, [r0, #32]
+ b _038030F0
+_038030CC:
+ cmp r1, #3
+ bne _038030E4
+ mov r0, #66 ;@ 0x42
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _038030F0
+_038030E4:
+ mov r0, #81 ;@ 0x51
+ mov r1, #3
+ bl SPIi_ReturnResult
+_038030F0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_038030FC: .word 0x027FFF94
+_03803100: .word 0x027FFF90
+_03803104: .word _03809F6C
+_03803108: .word FUN_03802E7C
+_0380310C: .word 0x0400010C
+_03803110: .word 0x0400010E
+
+ arm_func_start FUN_03803114
+FUN_03803114: ;@ 0x03803114
+ cmp r0, #65536 ;@ 0x10000
+ bcs _03803138
+ mov r2, #0
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, #1
+ bx lr
+_03803138:
+ cmp r0, #4194304 ;@ 0x400000
+ bcs _03803160
+ mov r2, #1
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ mov r0, r0, lsr #6
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, r2
+ bx lr
+_03803160:
+ cmp r0, #16777216 ;@ 0x1000000
+ bcs _03803188
+ mov r2, #2
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ mov r0, r0, lsr #8
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, #1
+ bx lr
+_03803188:
+ cmp r0, #67108864 ;@ 0x4000000
+ movcs r0, #0
+ bxcs lr
+ mov r2, #3
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ mov r0, r0, lsr #10
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, #1
+ bx lr
+_038031B4: .word _03809F6C
+
+ arm_func_start MIC_AnalyzeCommand
+MIC_AnalyzeCommand: ;@ 0x038031B8
+ stmdb sp!, {r4, lr}
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _038031E4
+ mov r4, #0
+ mov r3, r4
+ ldr r1, _03803478 ;@ =_03809F6C
+_038031D0:
+ mov r2, r4, lsl #1
+ strh r3, [r1, r2]
+ add r4, r4, #1
+ cmp r4, #16
+ blt _038031D0
+_038031E4:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r2, r1, lsl #1
+ ldr r1, _03803478 ;@ =_03809F6C
+ strh r0, [r1, r2]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03803470
+ ldrh r3, [r1]
+ and r0, r3, #65280 ;@ 0xff00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ sub r0, r4, #64 ;@ 0x40
+ cmp r0, #3
+ addls pc, pc, r0, lsl #2
+ b _03803464
+ b _03803230
+ b _03803270
+ b _03803378
+ b _038033DC
+_03803230:
+ mov r0, #2
+ mov r1, r4
+ mov r2, #1
+ and r3, r3, #255 ;@ 0xff
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03803258
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+_03803258:
+ mov r1, #0
+ ldr r0, _0380347C ;@ =0x027FFF94
+ strh r1, [r0]
+ ldr r0, _03803480 ;@ =0x027FFF90
+ str r1, [r0]
+ b _03803470
+_03803270:
+ ldr r0, [r1, #32]
+ cmp r0, #0
+ beq _0380328C
+ mov r0, r4
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _03803470
+_0380328C:
+ and r0, r3, #255 ;@ 0xff
+ strh r0, [r1, #36] ;@ 0x24
+ ldrh r2, [r1, #2]
+ ldrh r0, [r1, #4]
+ orr r3, r0, r2, lsl #16
+ cmp r3, #33554432 ;@ 0x2000000
+ bcc _038032B0
+ cmp r3, #37748736 ;@ 0x2400000
+ bcc _038032C0
+_038032B0:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03803470
+_038032C0:
+ str r3, [r1, #40] ;@ 0x28
+ ldrh r2, [r1, #6]
+ ldrh r0, [r1, #8]
+ orr r2, r0, r2, lsl #16
+ add r0, r3, r2
+ cmp r0, #37748736 ;@ 0x2400000
+ bls _038032EC
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03803470
+_038032EC:
+ str r2, [r1, #48] ;@ 0x30
+ ldrh r2, [r1, #10]
+ ldrh r0, [r1, #12]
+ orr r0, r0, r2, lsl #16
+ bl FUN_03803114
+ cmp r0, #0
+ bne _03803318
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03803470
+_03803318:
+ mov r2, #0
+ ldr r0, _03803478 ;@ =_03809F6C
+ str r2, [r0, #44] ;@ 0x2c
+ ldrh r1, [r0, #36] ;@ 0x24
+ and r1, r1, #7
+ strh r1, [r0, #38] ;@ 0x26
+ mov r0, #2
+ mov r1, r4
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03803354
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03803470
+_03803354:
+ mov r1, #0
+ ldr r0, _0380347C ;@ =0x027FFF94
+ strh r1, [r0]
+ ldr r0, _03803480 ;@ =0x027FFF90
+ str r1, [r0]
+ mov r1, #1
+ ldr r0, _03803478 ;@ =_03809F6C
+ str r1, [r0, #32]
+ b _03803470
+_03803378:
+ ldr r0, [r1, #32]
+ cmp r0, #2
+ beq _03803394
+ mov r0, r4
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _03803470
+_03803394:
+ mov r0, #2
+ mov r1, r4
+ mov r2, #0
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _038033BC
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _03803470
+_038033BC:
+ mov r1, #3
+ ldr r0, _03803478 ;@ =_03809F6C
+ str r1, [r0, #32]
+ ldr r1, _03803484 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+ b _03803470
+_038033DC:
+ ldr r0, [r1, #32]
+ cmp r0, #2
+ beq _038033F8
+ mov r0, r4
+ mov r1, #3
+ bl SPIi_ReturnResult
+ b _03803470
+_038033F8:
+ ldrh r2, [r1, #2]
+ ldrh r0, [r1, #4]
+ orr r0, r0, r2, lsl #16
+ bl FUN_03803114
+ cmp r0, #0
+ bne _03803420
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03803470
+_03803420:
+ bl OS_DisableInterrupts
+ ldr ip, _03803484 ;@ =0x0400010E
+ ldrh r1, [ip]
+ bic r1, r1, #128 ;@ 0x80
+ strh r1, [ip]
+ ldr r1, _03803478 ;@ =_03809F6C
+ ldrh r3, [r1, #52] ;@ 0x34
+ ldr r2, _03803488 ;@ =0x0400010C
+ strh r3, [r2]
+ ldrh r1, [r1, #54] ;@ 0x36
+ orr r1, r1, #192 ;@ 0xc0
+ strh r1, [ip]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ mov r1, #0
+ bl SPIi_ReturnResult
+ b _03803470
+_03803464:
+ mov r0, r4
+ mov r1, #1
+ bl SPIi_ReturnResult
+_03803470:
+ ldmia sp!, {r4, lr}
+ bx lr
+_03803478: .word _03809F6C
+_0380347C: .word 0x027FFF94
+_03803480: .word 0x027FFF90
+_03803484: .word 0x0400010E
+_03803488: .word 0x0400010C
+
+ arm_func_start MIC_Init
+MIC_Init: ;@ 0x0380348C
+ mov r3, #0
+ ldr r0, _038034C4 ;@ =_03809F6C
+ str r3, [r0, #32]
+ mov r2, r3
+_0380349C:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _0380349C
+ ldr r1, _038034C8 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+ bx lr
+_038034C4: .word _03809F6C
+_038034C8: .word 0x0400010E
+
+ arm_func_start MIC_ExecSampling12
+MIC_ExecSampling12: ;@ 0x038034CC
+ ldr r1, _03803580 ;@ =0x040001C0
+_038034D0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038034D0
+ ldr r0, _03803584 ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #228 ;@ 0xe4
+ ldr r0, _03803588 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03803580 ;@ =0x040001C0
+_038034F4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038034F4
+ mov r1, #0
+ ldr r0, _03803588 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r2, _03803580 ;@ =0x040001C0
+_03803510:
+ ldrh r0, [r2]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03803510
+ ldr r1, _03803588 ;@ =0x040001C2
+ ldrh r0, [r1]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r0, r0, lsl #24
+ mov r3, r0, lsr #16
+ ldr r0, _0380358C ;@ =0x00008201
+ strh r0, [r2]
+ mov r0, #0
+ strh r0, [r1]
+ ldr r1, _03803580 ;@ =0x040001C0
+_0380354C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380354C
+ ldr r0, _03803588 ;@ =0x040001C2
+ ldrh r0, [r0]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ orr r1, r3, r0, lsr #16
+ ldr r0, _03803590 ;@ =0x00007FF8
+ and r0, r1, r0
+ mov r0, r0, lsl #17
+ mov r0, r0, lsr #16
+ bx lr
+_03803580: .word 0x040001C0
+_03803584: .word 0x00008A01
+_03803588: .word 0x040001C2
+_0380358C: .word 0x00008201
+_03803590: .word 0x00007FF8
+
+ arm_func_start MIC_ExecSampling8
+MIC_ExecSampling8: ;@ 0x03803594
+ ldr r1, _03803648 ;@ =0x040001C0
+_03803598:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03803598
+ ldr r0, _0380364C ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #236 ;@ 0xec
+ ldr r0, _03803650 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03803648 ;@ =0x040001C0
+_038035BC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038035BC
+ mov r1, #0
+ ldr r0, _03803650 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r2, _03803648 ;@ =0x040001C0
+_038035D8:
+ ldrh r0, [r2]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038035D8
+ ldr r1, _03803650 ;@ =0x040001C2
+ ldrh r0, [r1]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r0, r0, lsl #24
+ mov r3, r0, lsr #16
+ ldr r0, _03803654 ;@ =0x00008201
+ strh r0, [r2]
+ mov r0, #0
+ strh r0, [r1]
+ ldr r1, _03803648 ;@ =0x040001C0
+_03803614:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03803614
+ ldr r0, _03803650 ;@ =0x040001C2
+ ldrh r0, [r0]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ orr r1, r3, r0, lsr #16
+ ldr r0, _03803658 ;@ =0x00007F80
+ and r0, r1, r0
+ mov r0, r0, lsl #9
+ mov r0, r0, lsr #16
+ bx lr
+_03803648: .word 0x040001C0
+_0380364C: .word 0x00008A01
+_03803650: .word 0x040001C2
+_03803654: .word 0x00008201
+_03803658: .word 0x00007F80
+_0380365C:
+ mov ip, #67108864 ;@ 0x4000000
+ add r1, ip, #520 ;@ 0x208
+ ldrh r0, [r1]
+ tst r0, r0
+ bxeq lr
+ ldr r3, [ip, #528] ;@ 0x210
+ ldr r1, [ip, #532] ;@ 0x214
+ ands r2, r1, r3
+ bxeq lr
+ ldr r0, _038037C8 ;@ =0x01DF3FFF
+ tst r2, r0
+ streq r2, [ip, #532] ;@ 0x214
+ bxeq lr
+ stmfd sp!, {lr}
+ mrs r0, SPSR
+ stmfd sp!, {r0}
+ stmdb sp, {sp, lr}^
+ sub sp, sp, #8
+ mov r0, #159 ;@ 0x9f
+ msr CPSR_c, r0
+ ldr r1, _038037CC ;@ =OSi_ThreadInfo
+ ldrh r0, [r1, #2]
+ add r0, r0, #1
+ strh r0, [r1, #2]
+ ldr r1, _038037D0 ;@ =_03809FA8
+ cmp r0, #1
+ moveq r0, sp
+ ldreq sp, [r1, #4]
+ streq r0, [r1, #4]
+ stmfd sp!, {r3}
+ ldr r1, _038037D4 ;@ =_038072C8
+ ldr r0, [r1]
+ tst r0, r2
+ strne r0, [ip, #532] ;@ 0x214
+ ldrne r0, [r1, #4]
+ ldrne r3, _038037D8 ;@ =OS_IRQTable
+ ldrne r0, [r3, r0, lsl #2]
+ bne _03803738
+ mov r3, #1
+_038036F8:
+ ldr r0, [r1, r3, lsl #3]
+ tst r0, r2
+ addeq r3, r3, #1
+ beq _038036F8
+ str r0, [ip, #532] ;@ 0x214
+ add r0, r1, r3, lsl #3
+ ldr r2, [r0, #4]
+ ldr r3, _038037D8 ;@ =OS_IRQTable
+ ldr r0, [r3, r2, lsl #2]
+ ldr r2, _038037CC ;@ =OSi_ThreadInfo
+ ldrh r3, [r2, #2]
+ cmp r3, #1
+ ldreq r2, [r1]
+ streq r2, [ip, #528] ;@ 0x210
+ moveq r2, #31
+ msreq CPSR_c, r2
+_03803738:
+ ldr r1, [ip, #528] ;@ 0x210
+ stmfd sp!, {r1}
+ adr lr, _03803748
+ bx r0
+_03803748:
+ mov r0, #159 ;@ 0x9f
+ msr CPSR_c, r0
+ mov ip, #67108864 ;@ 0x4000000
+ ldmia sp!, {r0}
+ ldr r1, [ip, #528] ;@ 0x210
+ eor r2, r0, r1
+ and r1, r2, r1
+ and r0, r2, r0
+ ldmia sp!, {r3}
+ orr r3, r3, r1
+ bic r3, r3, r0
+ str r3, [ip, #528] ;@ 0x210
+ ldr r2, _038037CC ;@ =OSi_ThreadInfo
+ ldr r3, _038037D0 ;@ =_03809FA8
+ ldrh r0, [r2, #2]
+ subs r1, r0, #1
+ strh r1, [r2, #2]
+ moveq r0, sp
+ ldreq sp, [r3, #4]
+ streq r0, [r3, #4]
+ mov r0, #146 ;@ 0x92
+ msr CPSR_c, r0
+ ldmia sp, {sp, lr}^
+ nop ;@ (mov r0, r0)
+ add sp, sp, #8
+ ldmia sp!, {r0}
+ msr SPSR_fc, r0
+ tst r1, r1
+ ldreq r0, _038037DC ;@ =OS_IrqHandler_ThreadSwitch
+ addeq lr, pc, #0
+ bxeq r0
+ ldmia sp!, {pc}
+_038037C8: .word 0x01DF3FFF
+_038037CC: .word OSi_ThreadInfo
+_038037D0: .word _03809FA8
+_038037D4: .word _038072C8
+_038037D8: .word OS_IRQTable
+_038037DC: .word OS_IrqHandler_ThreadSwitch
+
+ arm_func_start MIC_DisableMultipleInterrupt
+MIC_DisableMultipleInterrupt: ;@ 0x038037E0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03803820 ;@ =0x0380FFFC
+ ldr r1, [r0]
+ ldr r0, _03803824 ;@ =_0380365C
+ cmp r1, r0
+ bne _03803814
+ bl OS_DisableInterrupts
+ ldr r1, _03803828 ;@ =_03809FA8
+ ldr r2, [r1, #12]
+ ldr r1, _03803820 ;@ =0x0380FFFC
+ str r2, [r1]
+ bl OS_RestoreInterrupts
+_03803814:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803820: .word 0x0380FFFC
+_03803824: .word _0380365C
+_03803828: .word _03809FA8
+
+ arm_func_start MIC_EnableMultipleInterrupt
+MIC_EnableMultipleInterrupt: ;@ 0x0380382C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03803888 ;@ =0x0380FFFC
+ ldr r2, [r0]
+ ldr r0, _0380388C ;@ =_0380365C
+ cmp r2, r0
+ beq _0380387C
+ mov r1, #0
+ ldr r0, _03803890 ;@ =_03809FA8
+ str r1, [r0]
+ ldr r1, _03803894 ;@ =0x0380FE80
+ str r1, [r0, #4]
+ mov r1, #64 ;@ 0x40
+ str r1, [r0, #8]
+ str r2, [r0, #12]
+ bl OS_DisableInterrupts
+ ldr r2, _0380388C ;@ =_0380365C
+ ldr r1, _03803888 ;@ =0x0380FFFC
+ str r2, [r1]
+ bl OS_RestoreInterrupts
+_0380387C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803888: .word 0x0380FFFC
+_0380388C: .word _0380365C
+_03803890: .word _03809FA8
+_03803894: .word 0x0380FE80
+
+ arm_func_start MIC_SetIrqFunction
+MIC_SetIrqFunction: ;@ 0x03803898
+ mov ip, #0
+ ldr r2, _038038BC ;@ =OS_IRQTable
+_038038A0:
+ ands r3, r0, #1
+ strne r1, [r2, ip, lsl #2]
+ mov r0, r0, lsr #1
+ add ip, ip, #1
+ cmp ip, #25
+ blt _038038A0
+ bx lr
+_038038BC: .word OS_IRQTable
+
+ arm_func_start CTRDGi_SendtoPxi
+CTRDGi_SendtoPxi: ;@ 0x038038C0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, #1
+ mov r5, #13
+ mov r4, #0
+ b _038038E4
+_038038DC:
+ mov r0, r6
+ bl FUN_037F8CB4
+_038038E4:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ bne _038038DC
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start CTRDGi_UnlockByProcessor
+CTRDGi_UnlockByProcessor: ;@ 0x03803908
+ stmdb sp!, {r4, lr}
+ mov r4, r1
+ ldr r1, [r4]
+ cmp r1, #0
+ bne _03803920
+ bl OS_UnLockCartridge
+_03803920:
+ ldr r0, [r4, #4]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start CTRDGi_LockByProcessor
+CTRDGi_LockByProcessor: ;@ 0x03803930
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ bl OS_DisableInterrupts
+ str r0, [r4, #4]
+ ldr r0, _0380398C ;@ =0x027FFFE8
+ bl OS_ReadOwnerOfLockWord
+ and r0, r0, #128 ;@ 0x80
+ str r0, [r4]
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _03803974
+ mov r0, r5
+ bl OS_TryLockCartridge
+ cmp r0, #0
+ bne _0380397C
+_03803974:
+ mov r0, #1
+ b _03803980
+_0380397C:
+ mov r0, #0
+_03803980:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_0380398C: .word 0x027FFFE8
+
+ arm_func_start CTRDGi_RestoreAccessCycle
+CTRDGi_RestoreAccessCycle: ;@ 0x03803990
+ ldr r3, [r0]
+ ldr r2, _038039C0 ;@ =0x04000204
+ ldrh r1, [r2]
+ bic r1, r1, #12
+ orr r1, r1, r3, lsl #2
+ strh r1, [r2]
+ ldr r1, [r0, #4]
+ ldrh r0, [r2]
+ bic r0, r0, #16
+ orr r0, r0, r1, lsl #4
+ strh r0, [r2]
+ bx lr
+_038039C0: .word 0x04000204
+
+ arm_func_start CTRDGi_ChangeLatestAccessCycle
+CTRDGi_ChangeLatestAccessCycle: ;@ 0x038039C4
+ ldr r2, _03803A08 ;@ =0x04000204
+ ldrh r1, [r2]
+ and r1, r1, #12
+ mov r1, r1, asr #2
+ str r1, [r0]
+ ldrh r1, [r2]
+ and r1, r1, #16
+ mov r1, r1, asr #4
+ str r1, [r0, #4]
+ ldrh r0, [r2]
+ bic r0, r0, #12
+ orr r0, r0, #12
+ strh r0, [r2]
+ ldrh r0, [r2]
+ bic r0, r0, #16
+ strh r0, [r2]
+ bx lr
+_03803A08: .word 0x04000204
+
+ arm_func_start CTRDG_IsExisting
+CTRDG_IsExisting: ;@ 0x03803A0C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #16
+ mov r4, #1
+ ldr r2, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r2]
+ ldr r0, _03803B24 ;@ =0x0000FFFF
+ cmp r1, r0
+ moveq r0, #0
+ beq _03803B14
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+ cmp r0, #1
+ moveq r0, #0
+ beq _03803B14
+ ldr r0, _03803B28 ;@ =CTRDGi_Work
+ ldrh r0, [r0, #2]
+ add r1, sp, #0
+ bl CTRDGi_LockByProcessor
+ cmp r0, #0
+ bne _03803A70
+ ldr r0, [sp, #4]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ b _03803B14
+_03803A70:
+ add r0, sp, #8
+ bl CTRDGi_ChangeLatestAccessCycle
+ mov r2, #134217728 ;@ 0x8000000
+ ldrb r3, [r2, #178] ;@ 0xb2
+ cmp r3, #150 ;@ 0x96
+ bne _03803A9C
+ ldr r0, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r0]
+ ldrh r0, [r2, #190] ;@ 0xbe
+ cmp r1, r0
+ bne _03803AE4
+_03803A9C:
+ cmp r3, #150 ;@ 0x96
+ beq _03803ABC
+ ldr r0, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r0]
+ ldr r0, _03803B2C ;@ =0x0801FFFE
+ ldrh r0, [r0]
+ cmp r1, r0
+ bne _03803AE4
+_03803ABC:
+ ldr r2, _03803B20 ;@ =0x027FFC30
+ ldr r1, [r2, #8]
+ mov r0, #134217728 ;@ 0x8000000
+ ldr r0, [r0, #172] ;@ 0xac
+ cmp r1, r0
+ beq _03803AF8
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ beq _03803AF8
+_03803AE4:
+ ldr r1, _03803B20 ;@ =0x027FFC30
+ ldrb r0, [r1, #5]
+ orr r0, r0, #2
+ strb r0, [r1, #5]
+ mov r4, #0
+_03803AF8:
+ add r0, sp, #8
+ bl CTRDGi_RestoreAccessCycle
+ ldr r0, _03803B28 ;@ =CTRDGi_Work
+ ldrh r0, [r0, #2]
+ add r1, sp, #0
+ bl CTRDGi_UnlockByProcessor
+ mov r0, r4
+_03803B14:
+ add sp, sp, #16
+ ldmia sp!, {r4, lr}
+ bx lr
+_03803B20: .word 0x027FFC30
+_03803B24: .word 0x0000FFFF
+_03803B28: .word CTRDGi_Work
+_03803B2C: .word 0x0801FFFE
+
+ arm_func_start CTRDG_IsPulledOut
+CTRDG_IsPulledOut: ;@ 0x03803B30
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _03803B80 ;@ =0x027FFC30
+ ldrh r1, [r2]
+ ldr r0, _03803B84 ;@ =0x0000FFFF
+ cmp r1, r0
+ moveq r0, #0
+ beq _03803B74
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #30
+ movs r0, r0, lsr #31
+ bne _03803B64
+ bl CTRDG_IsExisting
+_03803B64:
+ ldr r0, _03803B80 ;@ =0x027FFC30
+ ldrb r0, [r0, #5]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+_03803B74:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803B80: .word 0x027FFC30
+_03803B84: .word 0x0000FFFF
+
+ arm_func_start CTRDGi_InitCommon
+CTRDGi_InitCommon: ;@ 0x03803B88
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ str r0, [sp]
+ add r0, sp, #0
+ ldr r1, _03803BC0 ;@ =CTRDGi_Work
+ ldr r2, _03803BC4 ;@ =0x05000001
+ bl FUN_03803BC8
+ bl OS_GetLockID
+ ldr r1, _03803BC0 ;@ =CTRDGi_Work
+ strh r0, [r1, #2]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803BC0: .word CTRDGi_Work
+_03803BC4: .word 0x05000001
+
+ arm_func_start FUN_03803BC8
+FUN_03803BC8: ;@ 0x03803BC8
+ ldr ip, _03803BD0 ;@ =SVC_CpuSet
+ bx ip
+_03803BD0: .word SVC_CpuSet
+
+ arm_func_start FUN_03803BD4
+FUN_03803BD4: ;@ 0x03803BD4
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ;@ 0x3f
+ cmp r0, #3
+ bne _03803C40
+ ldr r0, _03803C50 ;@ =0x01FFFFC0
+ and r0, r1, r0
+ mov r2, r0, lsr #6
+ ldr r1, _03803C54 ;@ =0x04000204
+ ldrh r0, [r1]
+ bic r0, r0, #96 ;@ 0x60
+ orr r0, r0, r2, lsl #5
+ strh r0, [r1]
+ mov r7, #1
+ mov r6, #17
+ mov r5, #18
+ mov r4, #0
+ b _03803C24
+_03803C1C:
+ mov r0, r7
+ bl FUN_037F8CB4
+_03803C24:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ bne _03803C1C
+ b _03803C44
+_03803C40:
+ bl OS_Terminate
+_03803C44:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03803C50: .word 0x01FFFFC0
+_03803C54: .word 0x04000204
+
+ arm_func_start FUN_03803C58
+FUN_03803C58: ;@ 0x03803C58
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ bl CTRDG_VibPulseEdgeUpdate
+ bl SND_BeginSleep
+ bl WVR_Shutdown
+ bl OS_Terminate
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_CheckPullOut_Polling
+CTRDG_CheckPullOut_Polling: ;@ 0x03803C80
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r1, _03803D80 ;@ =_03807708
+ ldr r3, [r1]
+ mvn r0, #0
+ cmp r3, r0
+ ldreq r0, _03803D84 ;@ =0x027FFC3C
+ ldreq r0, [r0]
+ addeq r0, r0, #10
+ streq r0, [r1]
+ beq _03803D74
+ ldr r0, _03803D88 ;@ =_03809FCC
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03803D74
+ ldr r0, _03803D8C ;@ =_03809FC8
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03803D74
+ ldr r2, _03803D84 ;@ =0x027FFC3C
+ ldr r0, [r2]
+ cmp r0, r3
+ bcc _03803D74
+ ldr r0, [r2]
+ add r0, r0, #10
+ str r0, [r1]
+ bl CTRDG_IsPulledOut
+ ldr r1, _03803D8C ;@ =_03809FC8
+ str r0, [r1]
+ bl CTRDG_IsExisting
+ cmp r0, #0
+ bne _03803D28
+ ldr r0, _03803D90 ;@ =_03807704
+ ldr r0, [r0]
+ cmp r0, #0
+ movne r1, #1
+ ldrne r0, _03803D88 ;@ =_03809FCC
+ strne r1, [r0]
+ bne _03803D74
+ mov r1, #1
+ ldr r0, _03803D8C ;@ =_03809FC8
+ str r1, [r0]
+_03803D28:
+ mov r7, #0
+ ldr r0, _03803D90 ;@ =_03807704
+ str r7, [r0]
+ ldr r0, _03803D8C ;@ =_03809FC8
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _03803D74
+ mov r6, #100 ;@ 0x64
+ mov r5, #13
+ mov r4, #17
+ b _03803D5C
+_03803D54:
+ mov r0, r6
+ bl OS_Sleep
+_03803D5C:
+ mov r0, r5
+ mov r1, r4
+ mov r2, r7
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ bne _03803D54
+_03803D74:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03803D80: .word _03807708
+_03803D84: .word 0x027FFC3C
+_03803D88: .word _03809FCC
+_03803D8C: .word _03809FC8
+_03803D90: .word _03807704
+
+ arm_func_start FUN_03803D94
+FUN_03803D94: ;@ 0x03803D94
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r0
+ mov r0, #134217728 ;@ 0x8000000
+ add r6, r0, #4
+ mov r4, #1
+ bl OS_GetLockID
+ mov r0, r0, lsl #16
+ mov r5, r0, lsr #16
+ mov r0, r5
+ bl OS_LockCartridge
+ mov r1, #0
+ ldr r0, _03803E3C ;@ =0x0000FFFF
+ eor r2, r0, #3
+ mov r2, r2, lsl #16
+ mov lr, r2, lsr #16
+ eor r2, r0, #132 ;@ 0x84
+ mov r2, r2, lsl #16
+ mov r8, r2, lsr #16
+ b _03803E18
+_03803DE0:
+ mov ip, r0
+ cmp r1, #76 ;@ 0x4c
+ moveq ip, r8
+ beq _03803DF8
+ cmp r1, #77 ;@ 0x4d
+ moveq ip, lr
+_03803DF8:
+ mov r3, r1, lsl #1
+ ldrh r2, [r7, r3]
+ and ip, ip, r2
+ ldrh r2, [r6, r3]
+ cmp ip, r2
+ movne r4, #0
+ bne _03803E20
+ add r1, r1, #1
+_03803E18:
+ cmp r1, #78 ;@ 0x4e
+ blt _03803DE0
+_03803E20:
+ mov r0, r5
+ bl OS_UnLockCartridge
+ mov r0, r5
+ bl OS_ReleaseLockID
+ mov r0, r4
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03803E3C: .word 0x0000FFFF
+
+ arm_func_start FUN_03803E40
+FUN_03803E40: ;@ 0x03803E40
+ ldr r1, _03803E54 ;@ =current_vib
+ str r0, [r1]
+ ldr r1, _03803E58 ;@ =0x08001000
+ strh r0, [r1]
+ bx lr
+_03803E54: .word current_vib
+_03803E58: .word 0x08001000
+
+ arm_func_start CTRDG_VibPulseEdgeUpdate
+CTRDG_VibPulseEdgeUpdate: ;@ 0x03803E5C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ movs r5, r0
+ beq _03803E9C
+ ldr r0, [r5]
+ cmp r0, #0
+ bne _03803E9C
+ ldr r0, [r5, #68] ;@ 0x44
+ add r0, r0, #1
+ str r0, [r5, #68] ;@ 0x44
+ ldr r1, [r5, #64] ;@ 0x40
+ cmp r1, #0
+ beq _03803E9C
+ ldr r0, [r5, #68] ;@ 0x44
+ cmp r0, r1
+ movhi r5, #0
+_03803E9C:
+ cmp r5, #0
+ beq _03803EB0
+ ldr r0, [r5, #60] ;@ 0x3c
+ cmp r0, #0
+ bne _03803F48
+_03803EB0:
+ bl OS_DisableInterrupts
+ mov r9, r0
+ ldr r0, _03804068 ;@ =current_vib
+ ldr r0, [r0]
+ cmp r0, #2
+ bne _03803F34
+ mov r8, #0
+ ldr r7, _0380406C ;@ =0x027FFFE8
+ ldr r4, _03804070 ;@ =_03809FBC
+ ldr fp, _03804074 ;@ =0x000080E8
+ mov r6, r8
+ mov r5, #1
+ b _03803F2C
+_03803EE4:
+ mov r0, r7
+ bl OS_ReadOwnerOfLockWord
+ ands sl, r0, #128 ;@ 0x80
+ bne _03803F04
+ ldrh r0, [r4]
+ bl OS_TryLockCartridge
+ cmp r0, #0
+ bne _03803F24
+_03803F04:
+ mov r0, r6
+ bl FUN_03803E40
+ mov r8, r5
+ cmp sl, #0
+ bne _03803F2C
+ ldrh r0, [r4]
+ bl OS_UnlockCartridge
+ b _03803F2C
+_03803F24:
+ mov r0, fp
+ bl OS_SpinWait
+_03803F2C:
+ cmp r8, #0
+ beq _03803EE4
+_03803F34:
+ ldr r0, _03804078 ;@ =_03809FEC
+ bl OS_CancelAlarm
+ mov r0, r9
+ bl OS_RestoreInterrupts
+ b _0380405C
+_03803F48:
+ cmp r5, #0
+ beq _0380405C
+ ldr r0, _0380406C ;@ =0x027FFFE8
+ bl OS_ReadOwnerOfLockWord
+ ands r4, r0, #128 ;@ 0x80
+ bne _03803F74
+ ldr r0, _03804070 ;@ =_03809FBC
+ ldrh r0, [r0]
+ bl OS_TryLockCartridge
+ cmp r0, #0
+ bne _03804044
+_03803F74:
+ ldr r1, [r5]
+ ldr r0, [r5, #4]
+ cmp r1, r0
+ bne _03803FB0
+ mov r0, #0
+ bl FUN_03803E40
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, [r5, #8]
+ mov r2, #0
+ ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate
+ bl OS_SetAlarm
+ mov r0, #0
+ str r0, [r5]
+ b _0380402C
+_03803FB0:
+ ands r0, r1, #1
+ beq _03803FF4
+ mov r0, #0
+ bl FUN_03803E40
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, [r5]
+ mov r1, r1, lsr #1
+ add r1, r5, r1, lsl #2
+ ldr r1, [r1, #36] ;@ 0x24
+ mov r2, #0
+ ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate
+ bl OS_SetAlarm
+ ldr r0, [r5]
+ add r0, r0, #1
+ str r0, [r5]
+ b _0380402C
+_03803FF4:
+ mov r0, #2
+ bl FUN_03803E40
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, [r5]
+ mov r1, r1, lsr #1
+ add r1, r5, r1, lsl #2
+ ldr r1, [r1, #12]
+ mov r2, #0
+ ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate
+ bl OS_SetAlarm
+ ldr r0, [r5]
+ add r0, r0, #1
+ str r0, [r5]
+_0380402C:
+ cmp r4, #0
+ bne _0380405C
+ ldr r0, _03804070 ;@ =_03809FBC
+ ldrh r0, [r0]
+ bl OS_UnlockCartridge
+ b _0380405C
+_03804044:
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, _03804080 ;@ =0x0000020B
+ mov r2, #0
+ ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate
+ bl OS_SetAlarm
+_0380405C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_03804068: .word current_vib
+_0380406C: .word 0x027FFFE8
+_03804070: .word _03809FBC
+_03804074: .word 0x000080E8
+_03804078: .word _03809FEC
+_0380407C: .word CTRDG_VibPulseEdgeUpdate
+_03804080: .word 0x0000020B
+_03804084:
+ mov r0, r1
+ ldr ip, _03804090 ;@ =CTRDG_VibPulseEdgeUpdate
+ bx ip
+_03804090: .word CTRDG_VibPulseEdgeUpdate
+
+ arm_func_start FUN_03804094
+FUN_03804094: ;@ 0x03804094
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ;@ 0x3f
+ cmp r0, #2
+ bne _038040B0
+ bl FUN_03803C58
+ b _038040B4
+_038040B0:
+ bl OS_Terminate
+_038040B4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038040C0
+FUN_038040C0: ;@ 0x038040C0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ;@ 0x3f
+ cmp r0, #1
+ ldreq r0, _038040F4 ;@ =_03809FD4
+ streq r1, [r0]
+ moveq r1, #1
+ streq r1, [r0, #16]
+ beq _038040E8
+ bl OS_Terminate
+_038040E8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038040F4: .word _03809FD4
+
+ arm_func_start CTRDGi_InitModuleInfo
+CTRDGi_InitModuleInfo: ;@ 0x038040F8
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r0, _038041C8 ;@ =_03809FC4
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _038041BC
+ mov r1, #1
+ str r1, [r0]
+ ldr r0, _038041CC ;@ =0x04000300
+ ldrh r0, [r0]
+ ands r0, r0, #1
+ beq _038041BC
+ mov r0, #262144 ;@ 0x40000
+ bl OS_SetIrqMask
+ mov r5, r0
+ ldr r1, _038041D0 ;@ =0x04000208
+ ldrh r4, [r1]
+ mov r0, #1
+ strh r0, [r1]
+ mov r7, #256 ;@ 0x100
+ ldr r6, _038041D4 ;@ =_03809FD4
+ b _03804158
+_03804150:
+ mov r0, r7
+ bl FUN_037F8CB4
+_03804158:
+ ldr r0, [r6, #16]
+ cmp r0, #1
+ bne _03804150
+ ldr r1, [r6]
+ ldr r0, _038041D8 ;@ =0x01FFFFC0
+ and r0, r1, r0
+ mov r0, r0, lsr #6
+ mov r0, r0, lsl #5
+ add r0, r0, #33554432 ;@ 0x2000000
+ add r0, r0, #4
+ bl FUN_03803D94
+ ldr r2, _038041DC ;@ =0x027FFC30
+ ldrb r1, [r2, #5]
+ bic r1, r1, #1
+ and r0, r0, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0
+ strb r0, [r2, #5]
+ mov r0, #1
+ bl CTRDGi_SendtoPxi
+ ldr r1, _038041D0 ;@ =0x04000208
+ ldrh r0, [r1]
+ strh r4, [r1]
+ mov r0, r5
+ bl OS_SetIrqMask
+_038041BC:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_038041C8: .word _03809FC4
+_038041CC: .word 0x04000300
+_038041D0: .word 0x04000208
+_038041D4: .word _03809FD4
+_038041D8: .word 0x01FFFFC0
+_038041DC: .word 0x027FFC30
+
+ arm_func_start CTRDG_Init
+CTRDG_Init: ;@ 0x038041E0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl OS_InitTick
+ bl OS_InitAlarm
+ ldr r0, _03804270 ;@ =_03809FEC
+ bl OS_CreateAlarm
+ ldr r0, _03804274 ;@ =_03809FD0
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _03804264
+ mov r1, #1
+ str r1, [r0]
+ bl CTRDGi_InitCommon
+ bl OS_GetLockID
+ mvn r1, #2
+ cmp r0, r1
+ beq _03804264
+ ldr r1, _03804278 ;@ =_03809FBC
+ strh r0, [r1]
+ bl PXI_Init
+ mov r0, #13
+ ldr r1, _0380427C ;@ =FUN_038040C0
+ bl PXI_SetFifoRecvCallback
+ bl CTRDGi_InitModuleInfo
+ mov r0, #13
+ ldr r1, _03804280 ;@ =FUN_03804094
+ bl PXI_SetFifoRecvCallback
+ mov r0, #16
+ ldr r1, _03804284 ;@ =_03804084
+ bl PXI_SetFifoRecvCallback
+ mov r0, #17
+ ldr r1, _03804288 ;@ =FUN_03803BD4
+ bl PXI_SetFifoRecvCallback
+_03804264:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03804270: .word _03809FEC
+_03804274: .word _03809FD0
+_03804278: .word _03809FBC
+_0380427C: .word FUN_038040C0
+_03804280: .word FUN_03804094
+_03804284: .word _03804084
+_03804288: .word FUN_03803BD4
+
+ arm_func_start FUN_0380428C
+FUN_0380428C: ;@ 0x0380428C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl NVRAM_ReadStatusRegister
+ ldrh r1, [sp]
+ ands r0, r1, #1
+ movne r0, #0
+ bne _038042B8
+ ands r0, r1, #2
+ movne r0, #1
+ moveq r0, #0
+_038042B8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038042C4
+FUN_038042C4: ;@ 0x038042C4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl NVRAM_ReadStatusRegister
+ ldrh r0, [sp]
+ ands r0, r0, #1
+ moveq r0, #1
+ movne r0, #0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start NVRAM_ExecuteProcess
+NVRAM_ExecuteProcess: ;@ 0x038042F0
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, #1
+ bl SPIi_CheckException
+ cmp r0, #0
+ bne _03804334
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _038045C0
+_03804334:
+ mov r0, #1
+ bl SPIi_GetException
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r0, [r4, #4]
+ sub r0, r0, #32
+ cmp r0, #13
+ addls pc, pc, r0, lsl #2
+ b _03804584
+ b _03804390
+ b _03804398
+ b _038043A0
+ b _038043AC
+ b _038043EC
+ b _0380442C
+ b _03804474
+ b _038044BC
+ b _038044F4
+ b _0380452C
+ b _03804534
+ b _0380453C
+ b _03804570
+ b _0380457C
+_03804390:
+ bl NVRAM_WriteEnable
+ b _038045A4
+_03804398:
+ bl NVRAM_WriteDisable
+ b _038045A4
+_038043A0:
+ ldr r0, [r4, #16]
+ bl NVRAM_ReadStatusRegister
+ b _038045A4
+_038043AC:
+ bl FUN_038042C4
+ cmp r0, #0
+ bne _038043D8
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_038043D8:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ ldr r2, [r4, #16]
+ bl NVRAM_ReadDataBytes
+ b _038045A4
+_038043EC:
+ bl FUN_038042C4
+ cmp r0, #0
+ bne _03804418
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804418:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ ldr r2, [r4, #16]
+ bl NVRAM_ReadDataBytesAtHigherSpeed
+ b _038045A4
+_0380442C:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804458
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804458:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ ldr r2, [r4, #16]
+ bl NVRAM_PageWrite
+ b _038045A4
+_03804474:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _038044A0
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_038044A0:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ ldr r2, [r4, #16]
+ bl NVRAM_PageProgram
+ b _038045A4
+_038044BC:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _038044E8
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_038044E8:
+ ldr r0, [r4, #8]
+ bl NVRAM_PageErase
+ b _038045A4
+_038044F4:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804520
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804520:
+ ldr r0, [r4, #8]
+ bl NVRAM_SectorErase
+ b _038045A4
+_0380452C:
+ bl NVRAM_DeepPowerDown
+ b _038045A4
+_03804534:
+ bl NVRAM_ReleaseFromDeepPowerDown
+ b _038045A4
+_0380453C:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804568
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804568:
+ bl NVRAM_ChipErase
+ b _038045A4
+_03804570:
+ ldr r0, [r4, #16]
+ bl NVRAM_ReadSiliconId
+ b _038045A4
+_0380457C:
+ bl NVRAM_SoftwareReset
+ b _038045A4
+_03804584:
+ mov r0, #1
+ bl SPIi_ReleaseException
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #1
+ bl SPIi_ReturnResult
+ b _038045C0
+_038045A4:
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+_038045C0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start NVRAM_AnalyzeCommand
+NVRAM_AnalyzeCommand: ;@ 0x038045CC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #12
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _038045FC
+ mov r5, #0
+ mov lr, r5
+ ldr r1, _0380476C ;@ =_0380A018
+_038045E8:
+ mov r4, r5, lsl #1
+ strh lr, [r1, r4]
+ add r5, r5, #1
+ cmp r5, #16
+ blt _038045E8
+_038045FC:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r4, r1, lsl #1
+ ldr r1, _0380476C ;@ =_0380A018
+ strh r0, [r1, r4]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03804760
+ ldrh r0, [r1]
+ and r4, r0, #65280 ;@ 0xff00
+ mov r4, r4, lsl #8
+ mov r4, r4, lsr #16
+ sub lr, r4, #34 ;@ 0x22
+ cmp lr, #10
+ addls pc, pc, lr, lsl #2
+ b _03804734
+ b _03804664
+ b _038046A0
+ b _038046A0
+ b _038046E8
+ b _038046E8
+ b _03804728
+ b _03804728
+ b _03804734
+ b _03804734
+ b _03804734
+ b _03804664
+_03804664:
+ ldrh ip, [r1, #4]
+ and lr, ip, #65280 ;@ 0xff00
+ and r0, r0, #255 ;@ 0xff
+ mov ip, r0, lsl #24
+ ldrh r0, [r1, #2]
+ orr r0, ip, r0, lsl #8
+ orr ip, r0, lr, lsr #8
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _03804690
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _03804734
+_03804690:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03804760
+_038046A0:
+ ldrh r3, [r1, #8]
+ ldrh r2, [r1, #10]
+ orr ip, r2, r3, lsl #16
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _038046BC
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _038046CC
+_038046BC:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03804760
+_038046CC:
+ and r2, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r2, lsl #16
+ ldrh r2, [r1, #4]
+ ldrh r0, [r1, #6]
+ orr r2, r0, r2, lsl #16
+ b _03804734
+_038046E8:
+ ldrh r3, [r1, #6]
+ ldrh r2, [r1, #8]
+ orr ip, r2, r3, lsl #16
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _03804704
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _03804714
+_03804704:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03804760
+_03804714:
+ and r2, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r2, lsl #16
+ ldrh r2, [r1, #4]
+ b _03804734
+_03804728:
+ and r3, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r3, lsl #16
+_03804734:
+ str r2, [sp]
+ str ip, [sp, #4]
+ mov r0, #1
+ mov r1, r4
+ mov r2, #3
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03804760
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+_03804760:
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_0380476C: .word _0380A018
+
+ arm_func_start NVRAM_Init
+NVRAM_Init: ;@ 0x03804770
+ mov r3, #0
+ mov r2, r3
+ ldr r0, _03804794 ;@ =_0380A018
+_0380477C:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _0380477C
+ bx lr
+_03804794: .word _0380A018
+
+ arm_func_start NVRAM_SoftwareReset
+NVRAM_SoftwareReset: ;@ 0x03804798
+ ldr r1, _038047D0 ;@ =0x040001C0
+_0380479C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380479C
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #255 ;@ 0xff
+ ldr r0, _038047D4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038047D0 ;@ =0x040001C0
+_038047C0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038047C0
+ bx lr
+_038047D0: .word 0x040001C0
+_038047D4: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadSiliconId
+NVRAM_ReadSiliconId: ;@ 0x038047D8
+ ldr r2, _0380486C ;@ =0x040001C0
+_038047DC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _038047DC
+ mov r1, #35072 ;@ 0x8900
+ strh r1, [r2]
+ mov r2, #159 ;@ 0x9f
+ ldr r1, _03804870 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _0380486C ;@ =0x040001C0
+_03804800:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804800
+ mov r2, #0
+ ldr r1, _03804870 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r3, _0380486C ;@ =0x040001C0
+_0380481C:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _0380481C
+ ldr r2, _03804870 ;@ =0x040001C2
+ ldrh r1, [r2]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0]
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r3]
+ mov r1, #0
+ strh r1, [r2]
+ ldr r2, _0380486C ;@ =0x040001C0
+_0380484C:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _0380484C
+ ldr r1, _03804870 ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0, #1]
+ bx lr
+_0380486C: .word 0x040001C0
+_03804870: .word 0x040001C2
+
+ arm_func_start NVRAM_ChipErase
+NVRAM_ChipErase: ;@ 0x03804874
+ ldr r1, _038048AC ;@ =0x040001C0
+_03804878:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804878
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #199 ;@ 0xc7
+ ldr r0, _038048B0 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038048AC ;@ =0x040001C0
+_0380489C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380489C
+ bx lr
+_038048AC: .word 0x040001C0
+_038048B0: .word 0x040001C2
+
+ arm_func_start NVRAM_ReleaseFromDeepPowerDown
+NVRAM_ReleaseFromDeepPowerDown: ;@ 0x038048B4
+ ldr r1, _038048EC ;@ =0x040001C0
+_038048B8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048B8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #171 ;@ 0xab
+ ldr r0, _038048F0 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038048EC ;@ =0x040001C0
+_038048DC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048DC
+ bx lr
+_038048EC: .word 0x040001C0
+_038048F0: .word 0x040001C2
+
+ arm_func_start NVRAM_DeepPowerDown
+NVRAM_DeepPowerDown: ;@ 0x038048F4
+ ldr r1, _0380492C ;@ =0x040001C0
+_038048F8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048F8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #185 ;@ 0xb9
+ ldr r0, _03804930 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380492C ;@ =0x040001C0
+_0380491C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380491C
+ bx lr
+_0380492C: .word 0x040001C0
+_03804930: .word 0x040001C2
+
+ arm_func_start NVRAM_SectorErase
+NVRAM_SectorErase: ;@ 0x03804934
+ and r1, r0, #16711680 ;@ 0xff0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #16
+ mov r2, r1, lsr #16
+ and r1, r0, #65280 ;@ 0xff00
+ mov r1, r1, lsl #8
+ mov r1, r1, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr ip, _038049F0 ;@ =0x040001C0
+_03804960:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804960
+ mov r3, #35072 ;@ 0x8900
+ strh r3, [ip]
+ mov ip, #216 ;@ 0xd8
+ ldr r3, _038049F4 ;@ =0x040001C2
+ strh ip, [r3]
+ ldr ip, _038049F0 ;@ =0x040001C0
+_03804984:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804984
+ and r3, r2, #255 ;@ 0xff
+ ldr r2, _038049F4 ;@ =0x040001C2
+ strh r3, [r2]
+ ldr r3, _038049F0 ;@ =0x040001C0
+_038049A0:
+ ldrh r2, [r3]
+ ands r2, r2, #128 ;@ 0x80
+ bne _038049A0
+ and r2, r1, #255 ;@ 0xff
+ ldr r1, _038049F4 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _038049F0 ;@ =0x040001C0
+_038049BC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _038049BC
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _038049F4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038049F0 ;@ =0x040001C0
+_038049E0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038049E0
+ bx lr
+_038049F0: .word 0x040001C0
+_038049F4: .word 0x040001C2
+
+ arm_func_start NVRAM_PageErase
+NVRAM_PageErase: ;@ 0x038049F8
+ and r1, r0, #16711680 ;@ 0xff0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #16
+ mov r2, r1, lsr #16
+ and r1, r0, #65280 ;@ 0xff00
+ mov r1, r1, lsl #8
+ mov r1, r1, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr ip, _03804AB4 ;@ =0x040001C0
+_03804A24:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804A24
+ mov r3, #35072 ;@ 0x8900
+ strh r3, [ip]
+ mov ip, #219 ;@ 0xdb
+ ldr r3, _03804AB8 ;@ =0x040001C2
+ strh ip, [r3]
+ ldr ip, _03804AB4 ;@ =0x040001C0
+_03804A48:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804A48
+ and r3, r2, #255 ;@ 0xff
+ ldr r2, _03804AB8 ;@ =0x040001C2
+ strh r3, [r2]
+ ldr r3, _03804AB4 ;@ =0x040001C0
+_03804A64:
+ ldrh r2, [r3]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03804A64
+ and r2, r1, #255 ;@ 0xff
+ ldr r1, _03804AB8 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804AB4 ;@ =0x040001C0
+_03804A80:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804A80
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804AB8 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804AB4 ;@ =0x040001C0
+_03804AA4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804AA4
+ bx lr
+_03804AB4: .word 0x040001C0
+_03804AB8: .word 0x040001C2
+
+ arm_func_start NVRAM_PageProgram
+NVRAM_PageProgram: ;@ 0x03804ABC
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804BD4
+ add r3, r0, r1
+ sub r3, r3, #1
+ mov r3, r3, lsr #8
+ cmp r3, r0, lsr #8
+ andhi r1, r0, #255 ;@ 0xff
+ rsbhi r1, r1, #256 ;@ 0x100
+ movhi r1, r1, lsl #16
+ movhi r1, r1, lsr #16
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804BE0 ;@ =0x040001C0
+_03804B10:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804B10
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #2
+ ldr lr, _03804BE4 ;@ =0x040001C2
+ strh r0, [lr]
+ mov r4, #0
+ add r3, sp, #0
+ ldr ip, _03804BE0 ;@ =0x040001C0
+_03804B3C:
+ ldrh r0, [ip]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804B3C
+ mov r0, r4, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [lr]
+ add r4, r4, #1
+ cmp r4, #3
+ blt _03804B3C
+ mov ip, #0
+ sub lr, r1, #1
+ ldr r3, _03804BE0 ;@ =0x040001C0
+ ldr r0, _03804BE4 ;@ =0x040001C2
+ b _03804B94
+_03804B78:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804B78
+ ldrb r1, [r2, ip]
+ and r1, r1, #255 ;@ 0xff
+ strh r1, [r0]
+ add ip, ip, #1
+_03804B94:
+ cmp ip, lr
+ blt _03804B78
+ ldr r1, _03804BE0 ;@ =0x040001C0
+_03804BA0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804BA0
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ ldrb r0, [r2, ip]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804BE4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804BE0 ;@ =0x040001C0
+_03804BC8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804BC8
+_03804BD4:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804BE0: .word 0x040001C0
+_03804BE4: .word 0x040001C2
+
+ arm_func_start NVRAM_PageWrite
+NVRAM_PageWrite: ;@ 0x03804BE8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804D00
+ add r3, r0, r1
+ sub r3, r3, #1
+ mov r3, r3, lsr #8
+ cmp r3, r0, lsr #8
+ andhi r1, r0, #255 ;@ 0xff
+ rsbhi r1, r1, #256 ;@ 0x100
+ movhi r1, r1, lsl #16
+ movhi r1, r1, lsr #16
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804D0C ;@ =0x040001C0
+_03804C3C:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804C3C
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #10
+ ldr lr, _03804D10 ;@ =0x040001C2
+ strh r0, [lr]
+ mov r4, #0
+ add r3, sp, #0
+ ldr ip, _03804D0C ;@ =0x040001C0
+_03804C68:
+ ldrh r0, [ip]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804C68
+ mov r0, r4, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [lr]
+ add r4, r4, #1
+ cmp r4, #3
+ blt _03804C68
+ mov ip, #0
+ sub lr, r1, #1
+ ldr r3, _03804D0C ;@ =0x040001C0
+ ldr r0, _03804D10 ;@ =0x040001C2
+ b _03804CC0
+_03804CA4:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804CA4
+ ldrb r1, [r2, ip]
+ and r1, r1, #255 ;@ 0xff
+ strh r1, [r0]
+ add ip, ip, #1
+_03804CC0:
+ cmp ip, lr
+ blt _03804CA4
+ ldr r1, _03804D0C ;@ =0x040001C0
+_03804CCC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804CCC
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ ldrb r0, [r2, ip]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804D0C ;@ =0x040001C0
+_03804CF4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804CF4
+_03804D00:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804D0C: .word 0x040001C0
+_03804D10: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadDataBytesAtHigherSpeed
+NVRAM_ReadDataBytesAtHigherSpeed: ;@ 0x03804D14
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804E3C
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804D48:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804D48
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #11
+ ldr ip, _03804E4C ;@ =0x040001C2
+ strh r0, [ip]
+ mov lr, #0
+ add r3, sp, #0
+ ldr r4, _03804E48 ;@ =0x040001C0
+_03804D74:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804D74
+ mov r0, lr, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [ip]
+ add lr, lr, #1
+ cmp lr, #3
+ blt _03804D74
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804DA0:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804DA0
+ mov r3, #0
+ ldr r0, _03804E4C ;@ =0x040001C2
+ strh r3, [r0]
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804DBC:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804DBC
+ mov r0, #0
+ ldr ip, _03804E48 ;@ =0x040001C0
+ mov r4, r0
+ ldr lr, _03804E4C ;@ =0x040001C2
+ sub r1, r1, #1
+ b _03804E00
+_03804DE0:
+ strh r4, [lr]
+_03804DE4:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804DE4
+ ldrh r3, [lr]
+ and r3, r3, #255 ;@ 0xff
+ strb r3, [r2, r0]
+ add r0, r0, #1
+_03804E00:
+ cmp r0, r1
+ bcc _03804DE0
+ mov r1, #33024 ;@ 0x8100
+ ldr ip, _03804E48 ;@ =0x040001C0
+ strh r1, [ip]
+ mov r3, #0
+ ldr r1, _03804E4C ;@ =0x040001C2
+ strh r3, [r1]
+_03804E20:
+ ldrh r1, [ip]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804E20
+ ldr r1, _03804E4C ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r2, r0]
+_03804E3C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804E48: .word 0x040001C0
+_03804E4C: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadDataBytes
+NVRAM_ReadDataBytes: ;@ 0x03804E50
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804F5C
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804F68 ;@ =0x040001C0
+_03804E84:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804E84
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #3
+ ldr ip, _03804F6C ;@ =0x040001C2
+ strh r0, [ip]
+ mov lr, #0
+ add r3, sp, #0
+ ldr r4, _03804F68 ;@ =0x040001C0
+_03804EB0:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804EB0
+ mov r0, lr, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [ip]
+ add lr, lr, #1
+ cmp lr, #3
+ blt _03804EB0
+ ldr r3, _03804F68 ;@ =0x040001C0
+_03804EDC:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804EDC
+ mov r0, #0
+ ldr ip, _03804F68 ;@ =0x040001C0
+ mov r4, r0
+ ldr lr, _03804F6C ;@ =0x040001C2
+ sub r1, r1, #1
+ b _03804F20
+_03804F00:
+ strh r4, [lr]
+_03804F04:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804F04
+ ldrh r3, [lr]
+ and r3, r3, #255 ;@ 0xff
+ strb r3, [r2, r0]
+ add r0, r0, #1
+_03804F20:
+ cmp r0, r1
+ bcc _03804F00
+ mov r1, #33024 ;@ 0x8100
+ ldr ip, _03804F68 ;@ =0x040001C0
+ strh r1, [ip]
+ mov r3, #0
+ ldr r1, _03804F6C ;@ =0x040001C2
+ strh r3, [r1]
+_03804F40:
+ ldrh r1, [ip]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F40
+ ldr r1, _03804F6C ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r2, r0]
+_03804F5C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804F68: .word 0x040001C0
+_03804F6C: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadStatusRegister
+NVRAM_ReadStatusRegister: ;@ 0x03804F70
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804F74:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F74
+ mov r1, #35072 ;@ 0x8900
+ strh r1, [r2]
+ mov r2, #5
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804F98:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F98
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ mov r2, #0
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804FBC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804FBC
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0]
+ bx lr
+_03804FDC: .word 0x040001C0
+_03804FE0: .word 0x040001C2
+
+ arm_func_start NVRAM_WriteDisable
+NVRAM_WriteDisable: ;@ 0x03804FE4
+ ldr r1, _0380501C ;@ =0x040001C0
+_03804FE8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804FE8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #4
+ ldr r0, _03805020 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380501C ;@ =0x040001C0
+_0380500C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380500C
+ bx lr
+_0380501C: .word 0x040001C0
+_03805020: .word 0x040001C2
+
+ arm_func_start NVRAM_WriteEnable
+NVRAM_WriteEnable: ;@ 0x03805024
+ ldr r1, _0380505C ;@ =0x040001C0
+_03805028:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03805028
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #6
+ ldr r0, _03805060 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380505C ;@ =0x040001C0
+_0380504C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380504C
+ bx lr
+_0380505C: .word 0x040001C0
+_03805060: .word 0x040001C2
+
+ arm_func_start FUN_03805064
+FUN_03805064: ;@ 0x03805064
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov lr, #0
+ mov r2, lr
+ b _03805094
+_03805078:
+ mov r1, r2, lsl #2
+ mov r1, r0, lsr r1
+ and r1, r1, #15
+ cmp r1, #10
+ movcs r0, #0
+ bcs _038050D0
+ add r2, r2, #1
+_03805094:
+ cmp r2, #8
+ blt _03805078
+ mov r3, #0
+ mov ip, #1
+ mov r2, #10
+_038050A8:
+ mov r1, r3, lsl #2
+ mov r1, r0, lsr r1
+ and r1, r1, #15
+ mla lr, ip, r1, lr
+ add r3, r3, #1
+ mul r1, ip, r2
+ mov ip, r1
+ cmp r3, #8
+ blt _038050A8
+ mov r0, lr
+_038050D0:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038050DC
+FUN_038050DC: ;@ 0x038050DC
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ sub r0, r7, #1
+ cmp r0, #1
+ subls r8, r8, #1
+ addls r7, r7, #12
+ mov r0, r8
+ mov r1, #400 ;@ 0x190
+ bl _u32_div_f
+ mov r5, r0
+ mov r0, r8
+ mov r1, #100 ;@ 0x64
+ bl _u32_div_f
+ mov r4, r0
+ mov r0, #13
+ mul r0, r7, r0
+ add r0, r0, #8
+ mov r1, #5
+ bl _u32_div_f
+ add r1, r8, r8, lsr #2
+ sub r1, r1, r4
+ add r1, r5, r1
+ add r0, r1, r0
+ add r0, r6, r0
+ mov r1, #7
+ bl _u32_div_f
+ mov r0, r1
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ arm_func_start FUN_03805158
+FUN_03805158: ;@ 0x03805158
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl RTC_ReadStatus1
+ add r0, sp, #2
+ bl RTC_ReadStatus2
+ ldrh r0, [sp]
+ mov r1, r0, lsl #24
+ movs r1, r1, lsr #31
+ bne _0380519C
+ mov r0, r0, lsl #25
+ movs r0, r0, lsr #31
+ bne _0380519C
+ ldrh r0, [sp, #2]
+ mov r0, r0, lsl #24
+ movs r0, r0, lsr #31
+ beq _038051B4
+_0380519C:
+ ldrh r0, [sp]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strh r0, [sp]
+ add r0, sp, #0
+ bl RTC_WriteStatus1
+_038051B4:
+ ldrh r0, [sp]
+ mov r1, r0, lsl #27
+ movs r1, r1, lsr #31
+ bne _038051D0
+ mov r0, r0, lsl #26
+ movs r0, r0, lsr #31
+ beq _038051F0
+_038051D0:
+ ldrh r0, [sp, #2]
+ bic r0, r0, #15
+ strh r0, [sp, #2]
+ ldrh r0, [sp, #2]
+ bic r0, r0, #64 ;@ 0x40
+ strh r0, [sp, #2]
+ add r0, sp, #2
+ bl RTC_WriteStatus2
+_038051F0:
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ bl RTC_ReadDateTime
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ ldrb r0, [r0]
+ bl FUN_03805064
+ mov r4, r0
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ ldr r0, [r0]
+ mov r0, r0, lsl #19
+ mov r0, r0, lsr #27
+ bl FUN_03805064
+ mov r5, r0
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ ldr r0, [r0]
+ mov r0, r0, lsl #10
+ mov r0, r0, lsr #26
+ bl FUN_03805064
+ mov r2, r0
+ add r0, r4, #2000 ;@ 0x7d0
+ mov r1, r5
+ bl FUN_038050DC
+ ldr r2, _03805288 ;@ =0x027FFDE8
+ ldr r1, [r2]
+ mov r3, r1, lsl #5
+ mov r3, r3, lsr #29
+ cmp r3, r0
+ beq _03805274
+ bic r1, r1, #117440512 ;@ 0x7000000
+ and r0, r0, #7
+ orr r0, r1, r0, lsl #24
+ str r0, [r2]
+ mov r0, r2
+ bl RTC_WriteDateTime
+_03805274:
+ mov r0, #1
+ bl RTC_SetHourFormat
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03805288: .word 0x027FFDE8
+
+ arm_func_start FUN_0380528C
+FUN_0380528C: ;@ 0x0380528C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ add r0, sp, #0
+ bl RTC_ReadStatus1
+ ldrh r0, [sp]
+ mov r1, r0, lsl #27
+ movs r1, r1, lsr #31
+ bne _038052B8
+ mov r0, r0, lsl #26
+ movs r0, r0, lsr #31
+ beq _03805310
+_038052B8:
+ add r0, sp, #2
+ bl RTC_ReadStatus2
+ mov r4, #0
+ ldrh r0, [sp]
+ mov r0, r0, lsl #27
+ movs r0, r0, lsr #31
+ orrne r4, r4, #1
+ ldrneh r0, [sp, #2]
+ bicne r0, r0, #15
+ strneh r0, [sp, #2]
+ ldrh r0, [sp]
+ mov r0, r0, lsl #26
+ movs r0, r0, lsr #31
+ orrne r4, r4, #2
+ ldrneh r0, [sp, #2]
+ bicne r0, r0, #64 ;@ 0x40
+ strneh r0, [sp, #2]
+ add r0, sp, #2
+ bl RTC_WriteStatus2
+ mov r0, #48 ;@ 0x30
+ mov r1, r4
+ bl FUN_038057D8
+_03805310:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_0380531C
+FUN_0380531C: ;@ 0x0380531C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #76 ;@ 0x4c
+ ldr r6, _038057CC ;@ =0x027FFDE8
+ add r5, r6, #4
+ mov r7, #0
+ ldr r9, _038057D0 ;@ =_0380A03C
+ mov r8, #1
+ mov r0, #16
+ str r0, [sp]
+ mov r0, #17
+ str r0, [sp, #4]
+ mov r0, #18
+ str r0, [sp, #8]
+ mov sl, #19
+ mov r4, #2
+ mov fp, #20
+ mov r0, #21
+ str r0, [sp, #12]
+ mov r0, #22
+ str r0, [sp, #16]
+ mov r0, #23
+ str r0, [sp, #20]
+ mov r0, #24
+ str r0, [sp, #24]
+ mov r0, #25
+ str r0, [sp, #28]
+ mov r0, #32
+ str r0, [sp, #32]
+ mov r0, #33 ;@ 0x21
+ str r0, [sp, #36] ;@ 0x24
+ mov r0, #34 ;@ 0x22
+ str r0, [sp, #40] ;@ 0x28
+ mov r0, #35 ;@ 0x23
+ str r0, [sp, #44] ;@ 0x2c
+ mov r0, #36 ;@ 0x24
+ str r0, [sp, #48] ;@ 0x30
+ mov r0, #37 ;@ 0x25
+ str r0, [sp, #52] ;@ 0x34
+ mov r0, #38 ;@ 0x26
+ str r0, [sp, #56] ;@ 0x38
+ mov r0, #39 ;@ 0x27
+ str r0, [sp, #60] ;@ 0x3c
+ mov r0, #40 ;@ 0x28
+ str r0, [sp, #64] ;@ 0x40
+ mov r0, #41 ;@ 0x29
+ str r0, [sp, #68] ;@ 0x44
+_038053D4:
+ mov r0, r9
+ add r1, sp, #72 ;@ 0x48
+ mov r2, r8
+ bl OS_ReceiveMessage
+ ldr r0, _038057D4 ;@ =_0380A13C
+ ldrh r0, [r0, #216] ;@ 0xd8
+ cmp r0, #41 ;@ 0x29
+ addls pc, pc, r0, lsl #2
+ b _038057BC
+ b _038054A0
+ b _038054B8
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038054DC
+ b _038054F8
+ b _03805514
+ b _03805530
+ b _03805568
+ b _038055A0
+ b _038055D8
+ b _038055F4
+ b _03805610
+ b _0380562C
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _03805648
+ b _03805664
+ b _03805688
+ b _038056A4
+ b _038056DC
+ b _03805714
+ b _0380574C
+ b _03805768
+ b _03805784
+ b _038057A0
+_038054A0:
+ bl RTC_Reset
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, r7
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038054B8:
+ ldrh r0, [r6]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+ bl RTC_SetHourFormat
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, r8
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038054DC:
+ mov r0, r6
+ bl RTC_ReadDateTime
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038054F8:
+ mov r0, r6
+ bl RTC_ReadDate
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #4]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805514:
+ add r0, r6, #4
+ bl RTC_ReadTime
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #8]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805530:
+ mov r0, r5
+ bl RTC_ReadPulse
+ cmp r0, #0
+ bne _03805554
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, sl
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_03805554:
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, sl
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805568:
+ mov r0, r5
+ bl RTC_ReadAlarm1
+ cmp r0, #0
+ bne _0380558C
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, fp
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_0380558C:
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, fp
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038055A0:
+ mov r0, r5
+ bl RTC_ReadAlarm2
+ cmp r0, #0
+ bne _038055C4
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #12]
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_038055C4:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #12]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038055D8:
+ mov r0, r6
+ bl RTC_ReadStatus1
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #16]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038055F4:
+ add r0, r6, #2
+ bl RTC_ReadStatus2
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #20]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805610:
+ add r0, r6, #4
+ bl RTC_ReadAdjust
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #24]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_0380562C:
+ add r0, r6, #4
+ bl RTC_ReadFree
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #28]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805648:
+ mov r0, r6
+ bl RTC_WriteDateTime
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #32]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805664:
+ add r0, r6, #4
+ bl RTC_ReadTime
+ mov r0, r6
+ bl RTC_WriteDateTime
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #36] ;@ 0x24
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805688:
+ add r0, r6, #4
+ bl RTC_WriteTime
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #40] ;@ 0x28
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038056A4:
+ mov r0, r5
+ bl RTC_WritePulse
+ cmp r0, #0
+ bne _038056C8
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #44] ;@ 0x2c
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_038056C8:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #44] ;@ 0x2c
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038056DC:
+ mov r0, r5
+ bl RTC_WriteAlarm1
+ cmp r0, #0
+ bne _03805700
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #48] ;@ 0x30
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_03805700:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #48] ;@ 0x30
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805714:
+ mov r0, r5
+ bl RTC_WriteAlarm2
+ cmp r0, #0
+ bne _03805738
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #52] ;@ 0x34
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_03805738:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #52] ;@ 0x34
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_0380574C:
+ mov r0, r6
+ bl RTC_WriteStatus1
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #56] ;@ 0x38
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805768:
+ add r0, r6, #2
+ bl RTC_WriteStatus2
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #60] ;@ 0x3c
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805784:
+ add r0, r6, #4
+ bl RTC_WriteAdjust
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #64] ;@ 0x40
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038057A0:
+ add r0, r6, #4
+ bl RTC_WriteFree
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #68] ;@ 0x44
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038057BC:
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r1, r8
+ bl FUN_038057D8
+ b _038053D4
+_038057CC: .word 0x027FFDE8
+_038057D0: .word _0380A03C
+_038057D4: .word _0380A13C
+
+ arm_func_start FUN_038057D8
+FUN_038057D8: ;@ 0x038057D8
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r0, r0, lsl #8
+ and r0, r0, #32512 ;@ 0x7f00
+ orr r2, r0, #32768 ;@ 0x8000
+ and r0, r1, #255 ;@ 0xff
+ orr r6, r2, r0
+ mov r5, #5
+ mov r4, #0
+_038057F8:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _038057F8
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_03805818
+FUN_03805818: ;@ 0x03805818
+ stmdb sp!, {r4, lr}
+ cmp r2, #0
+ bne _03805944
+ and r0, r1, #32512 ;@ 0x7f00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ cmp r4, #41 ;@ 0x29
+ addls pc, pc, r4, lsl #2
+ b _03805938
+ b _038058E4
+ b _038058E4
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+_038058E4:
+ ldr r0, _0380594C ;@ =_0380A03C
+ ldr r1, [r0, #468] ;@ 0x1d4
+ cmp r1, #0
+ beq _03805904
+ mov r0, r4
+ mov r1, #3
+ bl FUN_038057D8
+ b _03805944
+_03805904:
+ mov r1, #1
+ str r1, [r0, #468] ;@ 0x1d4
+ ldr r1, _03805950 ;@ =_0380A13C
+ strh r4, [r1, #216] ;@ 0xd8
+ mov r1, #0
+ mov r2, r1
+ bl OS_SendMessage
+ cmp r0, #0
+ bne _03805944
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038057D8
+ b _03805944
+_03805938:
+ mov r0, r4
+ mov r1, #1
+ bl FUN_038057D8
+_03805944:
+ ldmia sp!, {r4, lr}
+ bx lr
+_0380594C: .word _0380A03C
+_03805950: .word _0380A13C
+
+ arm_func_start RTC_Init
+RTC_Init: ;@ 0x03805954
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ ldr r0, _03805A28 ;@ =_0380A038
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _03805A1C
+ mov r1, #1
+ strh r1, [r0]
+ ldr r0, _03805A2C ;@ =_0380A03C
+ str r1, [r0, #468] ;@ 0x1d4
+ bl FUN_03805158
+ mov r1, #0
+ ldr r0, _03805A2C ;@ =_0380A03C
+ str r1, [r0, #468] ;@ 0x1d4
+ bl PXI_Init
+ mov r0, #5
+ ldr r1, _03805A30 ;@ =FUN_03805818
+ bl PXI_SetFifoRecvCallback
+ ldr r0, _03805A2C ;@ =_0380A03C
+ ldr r1, _03805A34 ;@ =_0380A05C
+ mov r2, #4
+ bl OS_InitMessageQueue
+ mov r0, #256 ;@ 0x100
+ str r0, [sp]
+ str r4, [sp, #4]
+ ldr r0, _03805A38 ;@ =_0380A06C
+ ldr r1, _03805A3C ;@ =FUN_0380531C
+ mov r2, #0
+ ldr r3, _03805A40 ;@ =_0380A210
+ bl OS_CreateThread
+ ldr r0, _03805A38 ;@ =_0380A06C
+ bl OS_WakeupThreadDirect
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #64 ;@ 0x40
+ mov r1, #0
+ bl EXIi_SetBitRcnt0L
+ mov r0, #256 ;@ 0x100
+ mov r1, r0
+ bl EXIi_SetBitRcnt0L
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #128 ;@ 0x80
+ ldr r1, _03805A44 ;@ =FUN_0380528C
+ bl OS_SetIrqFunction
+ mov r0, #128 ;@ 0x80
+ bl OS_EnableIrqMask
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_03805A1C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03805A28: .word _0380A038
+_03805A2C: .word _0380A03C
+_03805A30: .word FUN_03805818
+_03805A34: .word _0380A05C
+_03805A38: .word _0380A06C
+_03805A3C: .word FUN_0380531C
+_03805A40: .word _0380A210
+_03805A44: .word FUN_0380528C
+
+ arm_func_start FUN_03805A48
+FUN_03805A48: ;@ 0x03805A48
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl RTCi_GpioStart
+ mov r0, r7
+ mov r1, r6
+ bl RTCi_GpioSendCommand
+ cmp r7, #6
+ beq _03805A90
+ cmp r7, #134 ;@ 0x86
+ bne _03805A9C
+ mov r0, r5
+ mov r1, r4
+ bl RTCi_GpioReceiveData
+ b _03805A9C
+_03805A90:
+ mov r0, r5
+ mov r1, r4
+ bl RTCi_GpioSendData
+_03805A9C:
+ bl RTCi_GpioEnd
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_03805AAC
+FUN_03805AAC: ;@ 0x03805AAC
+ ldr r2, [r0]
+ mov r1, r2, lsl #18
+ mov r3, r1, lsr #26
+ cmp r3, #35 ;@ 0x23
+ addls pc, pc, r3, lsl #2
+ b _03805BA8
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B78
+ b _03805B78
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805B54
+ b _03805B54
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+_03805B54:
+ mov r1, r2, lsl #17
+ movs r1, r1, lsr #31
+ bxeq lr
+ bic r2, r2, #16128 ;@ 0x3f00
+ add r1, r3, #18
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805B78:
+ mov r1, r2, lsl #17
+ movs r1, r1, lsr #31
+ bxeq lr
+ bic r2, r2, #16128 ;@ 0x3f00
+ add r1, r3, #24
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805B9C:
+ orr r1, r2, #16384 ;@ 0x4000
+ str r1, [r0]
+ bx lr
+_03805BA8:
+ ldr r1, [r0]
+ bic r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r1, r1, #16128 ;@ 0x3f00
+ str r1, [r0]
+ bx lr
+
+ arm_func_start FUN_03805BC4
+FUN_03805BC4: ;@ 0x03805BC4
+ ldr r1, [r0]
+ mov r2, r1, lsl #18
+ mov r2, r2, lsr #26
+ cmp r2, #35 ;@ 0x23
+ addls pc, pc, r2, lsl #2
+ b _03805CD0
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805C6C
+ b _03805C6C
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CA4
+ b _03805CA4
+ b _03805C78
+ b _03805C78
+_03805C6C:
+ bic r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ bx lr
+_03805C78:
+ orr r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r2, r1, #16128 ;@ 0x3f00
+ mov r1, r1, lsl #18
+ mov r1, r1, lsr #26
+ sub r1, r1, #18
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805CA4:
+ orr r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r2, r1, #16128 ;@ 0x3f00
+ mov r1, r1, lsl #18
+ mov r1, r1, lsr #26
+ sub r1, r1, #24
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805CD0:
+ ldr r1, [r0]
+ bic r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r1, r1, #16128 ;@ 0x3f00
+ str r1, [r0]
+ bx lr
+
+ arm_func_start RTC_WriteFree
+RTC_WriteFree: ;@ 0x03805CEC
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #6
+ mov r1, #112 ;@ 0x70
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadFree
+RTC_ReadFree: ;@ 0x03805D18
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #134 ;@ 0x86
+ mov r1, #112 ;@ 0x70
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WriteAdjust
+RTC_WriteAdjust: ;@ 0x03805D44
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #6
+ mov r1, #48 ;@ 0x30
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadAdjust
+RTC_ReadAdjust: ;@ 0x03805D70
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #134 ;@ 0x86
+ mov r1, #48 ;@ 0x30
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WriteStatus2
+RTC_WriteStatus2: ;@ 0x03805D9C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #6
+ mov r1, #64 ;@ 0x40
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadStatus2
+RTC_ReadStatus2: ;@ 0x03805DC8
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #134 ;@ 0x86
+ mov r1, #64 ;@ 0x40
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WriteStatus1
+RTC_WriteStatus1: ;@ 0x03805DF4
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #6
+ mov r1, #0
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadStatus1
+RTC_ReadStatus1: ;@ 0x03805E20
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #134 ;@ 0x86
+ mov r1, #0
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WriteAlarm2
+RTC_WriteAlarm2: ;@ 0x03805E4C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl RTC_ReadStatus2
+ ldrh r0, [sp]
+ mov r0, r0, lsl #25
+ movs r0, r0, lsr #31
+ moveq r0, #0
+ beq _03805E8C
+ mov r0, #6
+ mov r1, #80 ;@ 0x50
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805E8C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadAlarm2
+RTC_ReadAlarm2: ;@ 0x03805E98
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl RTC_ReadStatus2
+ ldrh r0, [sp]
+ mov r0, r0, lsl #25
+ movs r0, r0, lsr #31
+ moveq r0, #0
+ beq _03805ED8
+ mov r0, #134 ;@ 0x86
+ mov r1, #80 ;@ 0x50
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805ED8:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WriteAlarm1
+RTC_WriteAlarm1: ;@ 0x03805EE4
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl RTC_ReadStatus2
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ cmp r0, #4
+ movne r0, #0
+ bne _03805F28
+ mov r0, #6
+ mov r1, #16
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805F28:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadAlarm1
+RTC_ReadAlarm1: ;@ 0x03805F34
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl RTC_ReadStatus2
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ cmp r0, #4
+ movne r0, #0
+ bne _03805F78
+ mov r0, #134 ;@ 0x86
+ mov r1, #16
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805F78:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WritePulse
+RTC_WritePulse: ;@ 0x03805F84
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl RTC_ReadStatus2
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ and r0, r0, #11
+ cmp r0, #1
+ movne r0, #0
+ bne _03805FCC
+ mov r0, #6
+ mov r1, #16
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ mov r0, #1
+_03805FCC:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadPulse
+RTC_ReadPulse: ;@ 0x03805FD8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl RTC_ReadStatus2
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ and r0, r0, #11
+ cmp r0, #1
+ movne r0, #0
+ bne _03806020
+ mov r0, #134 ;@ 0x86
+ mov r1, #16
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ mov r0, #1
+_03806020:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WriteTime
+RTC_WriteTime: ;@ 0x0380602C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #6
+ mov r1, #96 ;@ 0x60
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadTime
+RTC_ReadTime: ;@ 0x03806058
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #134 ;@ 0x86
+ mov r1, #96 ;@ 0x60
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadDate
+RTC_ReadDate: ;@ 0x03806084
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #134 ;@ 0x86
+ mov r1, #32
+ mov r2, r4
+ mov r3, #4
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_WriteDateTime
+RTC_WriteDateTime: ;@ 0x038060B0
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #6
+ mov r1, #32
+ mov r2, r4
+ mov r3, #7
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_ReadDateTime
+RTC_ReadDateTime: ;@ 0x038060DC
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ mov r0, #134 ;@ 0x86
+ mov r1, #32
+ mov r2, r4
+ mov r3, #7
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start RTC_SetHourFormat
+RTC_SetHourFormat: ;@ 0x03806108
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #12
+ mov r4, r0
+ and r5, r4, #1
+ mov r0, r5, lsl #16
+ mov r0, r0, lsr #16
+ cmp r0, #1
+ bne _038061FC
+ add r0, sp, #0
+ bl RTC_ReadStatus1
+ ldrh r1, [sp]
+ mov r0, r1, lsl #30
+ mov r2, r0, lsr #31
+ mov r0, r5, lsl #16
+ cmp r2, r0, lsr #16
+ beq _038061FC
+ and r4, r4, #1
+ bic r1, r1, #2
+ mov r0, r4, lsl #16
+ mov r0, r0, lsr #16
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #1
+ strh r0, [sp]
+ add r0, sp, #0
+ bl RTC_WriteStatus1
+ mov r0, #134 ;@ 0x86
+ mov r1, #16
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, r4, lsl #16
+ movs r0, r0, lsr #16
+ bne _03806198
+ add r0, sp, #4
+ bl FUN_03805BC4
+ b _038061A0
+_03806198:
+ add r0, sp, #4
+ bl FUN_03805AAC
+_038061A0:
+ mov r0, #6
+ mov r1, #16
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #134 ;@ 0x86
+ mov r1, #80 ;@ 0x50
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, r5, lsl #16
+ movs r0, r0, lsr #16
+ bne _038061E0
+ add r0, sp, #4
+ bl FUN_03805BC4
+ b _038061E8
+_038061E0:
+ add r0, sp, #4
+ bl FUN_03805AAC
+_038061E8:
+ mov r0, #6
+ mov r1, #80 ;@ 0x50
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+_038061FC:
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start RTC_Reset
+RTC_Reset: ;@ 0x03806208
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #32768 ;@ 0x8000
+ bl EXIi_SelectRcnt
+ ldrh r0, [sp]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strh r0, [sp]
+ mov r0, #6
+ mov r1, #0
+ add r2, sp, #0
+ mov r3, #1
+ bl FUN_03805A48
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start RTCi_GpioStart
+RTCi_GpioStart: ;@ 0x03806248
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #114 ;@ 0x72
+ strh r0, [ip]
+ mov r3, #2
+_03806264:
+ subs r3, r3, #1
+ bne _03806264
+ bic r0, r0, #4
+ orr r0, r0, #4
+ strh r0, [ip]
+ mov r3, #2
+_0380627C:
+ subs r3, r3, #1
+ bne _0380627C
+ bx lr
+
+ arm_func_start RTCi_GpioEnd
+RTCi_GpioEnd: ;@ 0x03806288
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+ mov r3, #2
+_03806294:
+ subs r3, r3, #1
+ bne _03806294
+ ldrh r0, [ip]
+ bic r0, r0, #4
+ orr r0, r0, #0
+ strh r0, [ip]
+ mov r3, #2
+_038062B0:
+ subs r3, r3, #1
+ bne _038062B0
+ bx lr
+
+ arm_func_start RTCi_GpioSendCommand
+RTCi_GpioSendCommand: ;@ 0x038062BC
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+ orr r1, r0, r1
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #116 ;@ 0x74
+ mov r2, #0
+_038062D8:
+ bic r0, r0, #3
+ orr r0, r0, #0
+ mov r3, #1
+ tst r3, r1, lsr r2
+ movne r3, #1
+ moveq r3, #0
+ orr r0, r0, r3
+ strh r0, [ip]
+ mov r3, #9
+_038062FC:
+ subs r3, r3, #1
+ bne _038062FC
+ bic r0, r0, #2
+ orr r0, r0, #2
+ strh r0, [ip]
+ mov r3, #9
+_03806314:
+ subs r3, r3, #1
+ bne _03806314
+ add r2, r2, #1
+ cmp r2, #8
+ bne _038062D8
+ bx lr
+
+ arm_func_start RTCi_GpioSendData
+RTCi_GpioSendData: ;@ 0x0380632C
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+_03806334:
+ stmdb sp!, {r0, r1}
+ tst r0, #1
+ ldreqh r1, [r0]
+ ldrneh r1, [r0, #-1]
+ movne r1, r1, lsr #8
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #116 ;@ 0x74
+ mov r2, #0
+_03806358:
+ bic r0, r0, #3
+ orr r0, r0, #0
+ mov r3, #1
+ tst r3, r1, lsr r2
+ movne r3, #1
+ moveq r3, #0
+ orr r0, r0, r3
+ strh r0, [ip]
+ mov r3, #9
+_0380637C:
+ subs r3, r3, #1
+ bne _0380637C
+ bic r0, r0, #2
+ orr r0, r0, #2
+ strh r0, [ip]
+ mov r3, #9
+_03806394:
+ subs r3, r3, #1
+ bne _03806394
+ add r2, r2, #1
+ cmp r2, #8
+ bne _03806358
+ ldmia sp!, {r0, r1}
+ add r0, r0, #1
+ subs r1, r1, #1
+ bne _03806334
+ bx lr
+
+ arm_func_start RTCi_GpioReceiveData
+RTCi_GpioReceiveData: ;@ 0x038063BC
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+_038063C4:
+ stmdb sp!, {r0, r1}
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #100 ;@ 0x64
+ mov r2, #0
+ mov r1, #0
+_038063DC:
+ bic r0, r0, #3
+ orr r0, r0, #0
+ strh r0, [ip]
+ mov r3, #9
+_038063EC:
+ subs r3, r3, #1
+ bne _038063EC
+ ldrh r0, [ip]
+ and r3, r0, #1
+ cmp r3, #1
+ moveq r3, #128 ;@ 0x80
+ movne r3, #0
+ orr r2, r3, r2, lsr #1
+ bic r0, r0, #2
+ orr r0, r0, #2
+ strh r0, [ip]
+ mov r3, #9
+_0380641C:
+ subs r3, r3, #1
+ bne _0380641C
+ add r1, r1, #1
+ cmp r1, #8
+ bne _038063DC
+ ldmia sp!, {r0, r1}
+ tst r0, #1
+ beq _03806454
+ ldrh r3, [r0, #-1]
+ bic r3, r3, #65280 ;@ 0xff00
+ mov r2, r2, lsl #8
+ orr r3, r2, r3
+ strh r3, [r0, #-1]
+ b _03806464
+_03806454:
+ ldrh r3, [r0]
+ bic r3, r3, #255 ;@ 0xff
+ orr r3, r3, r2
+ strh r3, [r0]
+_03806464:
+ add r0, r0, #1
+ subs r1, r1, #1
+ bne _038063C4
+ bx lr
+
+ arm_func_start FUN_03806474
+FUN_03806474: ;@ 0x03806474
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r4, _0380665C ;@ =wmspW
+ ldr r0, _03806660 ;@ =_0601A960
+ ldr r0, [r0, #1356] ;@ 0x54c
+ cmp r0, #0
+ beq _038064B0
+ add r0, r4, #4096 ;@ 0x1000
+ ldr r0, [r0, #1356] ;@ 0x54c
+ ldr r0, [r0]
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _038064B0
+ bl FUN_03806668
+ bl FUN_03806670
+_038064B0:
+ add r0, r4, #136 ;@ 0x88
+ add r1, sp, #0
+ mov r2, #0
+ bl OS_ReceiveMessage
+ cmp r0, #0
+ beq _03806520
+ add r0, r4, #4096 ;@ 0x1000
+ ldr r0, [r0, #1356] ;@ 0x54c
+ cmp r0, #0
+ beq _038064B0
+ bl WMSP_GetBuffer4Callback2Wm9
+ mov r5, r0
+ mov r0, #0
+ mov r1, r5
+ mov r2, #256 ;@ 0x100
+ bl MIi_CpuClear32
+ ldr r0, [sp]
+ ldrh r0, [r0]
+ strh r0, [r5]
+ mov r0, #4
+ strh r0, [r5, #2]
+ mov r0, r5
+ bl WMSP_ReturnResult2Wm9
+ ldr r1, [sp]
+ ldrh r0, [r1]
+ orr r0, r0, #32768 ;@ 0x8000
+ strh r0, [r1]
+ b _038064B0
+_03806520:
+ bl FUN_03806678
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _03806548
+ add r0, r4, #136 ;@ 0x88
+ mov r1, #0
+ mov r2, #1
+ bl OS_SendMessage
+ bl FUN_03806678
+ bl OS_JoinThread
+_03806548:
+ add r0, r4, #136 ;@ 0x88
+ add r1, sp, #0
+ mov r2, #0
+ bl OS_ReceiveMessage
+ mov r6, r0
+ add r0, r4, #88 ;@ 0x58
+ add r1, sp, #0
+ mov r2, #0
+ bl OS_ReceiveMessage
+ mov r5, r0
+ mov r0, r4
+ add r1, sp, #0
+ mov r2, #0
+ bl OS_ReceiveMessage
+ orr r1, r6, r5
+ orrs r0, r0, r1
+ beq _03806590
+ bl OS_Terminate
+_03806590:
+ bl FUN_03806680
+ add r7, r4, #40 ;@ 0x28
+ add r6, sp, #0
+ mov r5, #0
+_038065A0:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl OS_ReceiveMessage
+ cmp r0, #0
+ bne _038065A0
+ bl FUN_03806688
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _038065E0
+ add r0, r4, #40 ;@ 0x28
+ mov r1, #0
+ mov r2, #1
+ bl OS_SendMessage
+ bl FUN_03806688
+ bl OS_JoinThread
+_038065E0:
+ mov r0, #1
+ bl PM_SetLEDPattern
+ mov r0, #1
+ bl PMi_SetLED
+ add r0, r4, #4096 ;@ 0x1000
+ ldr r0, [r0, #1356] ;@ 0x54c
+ cmp r0, #0
+ beq _03806614
+ ldr r1, [r0]
+ ldrh r0, [r1]
+ cmp r0, #0
+ movne r0, #0
+ strneh r0, [r1]
+_03806614:
+ bl FUN_03806970
+ mov r6, #15
+ mov r5, #131072 ;@ 0x20000
+ mov r4, #0
+_03806624:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _03806624
+ bl OS_DisableInterrupts
+ mov r1, #1
+ ldr r0, _03806664 ;@ =_0380A3F0
+ strb r1, [r0]
+ bl OS_ExitThread
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_0380665C: .word wmspW
+_03806660: .word _0601A960
+_03806664: .word _0380A3F0
+
+ arm_func_start FUN_03806668
+FUN_03806668: ;@ 0x03806668
+ ldr pc, _0380666C ;@ =WMSP_CancelVAlarm
+_0380666C: .word WMSP_CancelVAlarm
+
+ arm_func_start FUN_03806670
+FUN_03806670: ;@ 0x03806670
+ ldr pc, _03806674 ;@ =WMSP_CancelAllAlarms
+_03806674: .word WMSP_CancelAllAlarms
+
+ arm_func_start FUN_03806678
+FUN_03806678: ;@ 0x03806678
+ ldr pc, _0380667C ;@ =WMSP_GetRequestThread
+_0380667C: .word WMSP_GetRequestThread
+
+ arm_func_start FUN_03806680
+FUN_03806680: ;@ 0x03806680
+ ldr pc, _03806684 ;@ =WL_Terminate
+_03806684: .word WL_Terminate
+
+ arm_func_start FUN_03806688
+FUN_03806688: ;@ 0x03806688
+ ldr pc, _0380668C ;@ =WMSP_GetIndicateThread
+_0380668C: .word WMSP_GetIndicateThread
+
+ arm_func_start FUN_03806690
+FUN_03806690: ;@ 0x03806690
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, _03806738 ;@ =_0380A400
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _038066C0
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0
+ b _0380672C
+_038066C0:
+ ldr r0, _0380673C ;@ =_0380A3F0
+ ldrb r1, [r0]
+ cmp r1, #3
+ beq _038066E0
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0
+ b _0380672C
+_038066E0:
+ mov r1, #4
+ strb r1, [r0]
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #10
+ ldr r1, _03806740 ;@ =FUN_03806920
+ bl PXI_SetFifoRecvCallback
+ mov r0, #1024 ;@ 0x400
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ ldr r0, _03806738 ;@ =_0380A400
+ ldr r1, _03806744 ;@ =FUN_03806474
+ mov r2, #0
+ ldr r3, _03806748 ;@ =_0380AA64
+ bl OS_CreateThread
+ ldr r0, _03806738 ;@ =_0380A400
+ bl OS_WakeupThreadDirect
+ mov r0, #1
+_0380672C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03806738: .word _0380A400
+_0380673C: .word _0380A3F0
+_03806740: .word FUN_03806920
+_03806744: .word FUN_03806474
+_03806748: .word _0380AA64
+
+ arm_func_start FUN_0380674C
+FUN_0380674C: ;@ 0x0380674C
+ stmdb sp!, {r4, r5, r6, lr}
+ bl FUN_038069B0
+ ldr r0, _038067A0 ;@ =_0380A3F8
+ ldr r0, [r0]
+ bl FUN_038069EC
+ mov r6, #15
+ mov r5, #65536 ;@ 0x10000
+ mov r4, #0
+_0380676C:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _0380676C
+ bl OS_DisableInterrupts
+ mov r1, #3
+ ldr r0, _038067A4 ;@ =_0380A3F0
+ strb r1, [r0]
+ bl OS_ExitThread
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_038067A0: .word _0380A3F8
+_038067A4: .word _0380A3F0
+
+ arm_func_start FUN_038067A8
+FUN_038067A8: ;@ 0x038067A8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, _03806844 ;@ =_0380A400
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _038067D8
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0
+ b _03806838
+_038067D8:
+ ldr r0, _03806848 ;@ =_0380A3F0
+ ldrb r1, [r0]
+ cmp r1, #1
+ beq _038067F8
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0
+ b _03806838
+_038067F8:
+ mov r1, #2
+ strb r1, [r0]
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #1024 ;@ 0x400
+ str r0, [sp]
+ mov r0, #10
+ str r0, [sp, #4]
+ ldr r0, _03806844 ;@ =_0380A400
+ ldr r1, _0380684C ;@ =FUN_0380674C
+ mov r2, #0
+ ldr r3, _03806850 ;@ =_0380AA64
+ bl OS_CreateThread
+ ldr r0, _03806844 ;@ =_0380A400
+ bl OS_WakeupThreadDirect
+ mov r0, #1
+_03806838:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03806844: .word _0380A400
+_03806848: .word _0380A3F0
+_0380684C: .word FUN_0380674C
+_03806850: .word _0380AA64
+
+ arm_func_start FUN_03806854
+FUN_03806854: ;@ 0x03806854
+ stmdb sp!, {r4, lr}
+ mov r4, r1
+ cmp r4, #65536 ;@ 0x10000
+ beq _03806870
+ cmp r4, #131072 ;@ 0x20000
+ beq _03806884
+ b _03806898
+_03806870:
+ bl FUN_038067A8
+ cmp r0, #0
+ bne _038068B4
+ orr r4, r4, #5
+ b _0380689C
+_03806884:
+ bl FUN_03806690
+ cmp r0, #0
+ bne _038068B4
+ orr r4, r4, #5
+ b _0380689C
+_03806898:
+ orr r4, r4, #7
+_0380689C:
+ mov r0, #15
+ mov r1, r4
+ mov r2, #0
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _0380689C
+_038068B4:
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_038068BC
+FUN_038068BC: ;@ 0x038068BC
+ cmp r0, #0
+ moveq r0, #0
+ bxeq lr
+ ldr r1, _0380691C ;@ =OSi_ThreadInfo
+ ldr r1, [r1, #8]
+ b _0380690C
+_038068D4:
+ cmp r1, r0
+ bne _03806908
+ ldr r0, [r0, #72] ;@ 0x48
+ cmp r0, #0
+ beq _038068F8
+ cmp r0, #1
+ beq _038068F8
+ cmp r0, #2
+ b _03806900
+_038068F8:
+ mov r0, #1
+ bx lr
+_03806900:
+ mov r0, #0
+ bx lr
+_03806908:
+ ldr r1, [r1, #76] ;@ 0x4c
+_0380690C:
+ cmp r1, #0
+ bne _038068D4
+ mov r0, #0
+ bx lr
+_0380691C: .word OSi_ThreadInfo
+
+ arm_func_start FUN_03806920
+FUN_03806920: ;@ 0x03806920
+ stmdb sp!, {r4, r5, r6, lr}
+ movs r6, r1
+ ldrh r4, [r6]
+ beq _03806968
+ mov r0, #0
+ mov r2, #256 ;@ 0x100
+ bl MIi_CpuClear32
+ strh r4, [r6]
+ mov r0, #4
+ strh r0, [r6, #2]
+ mov r5, #10
+ mov r4, #0
+_03806950:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _03806950
+_03806968:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_03806970
+FUN_03806970: ;@ 0x03806970
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _038069A8 ;@ =_0380A3F4
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _0380699C
+ mov r0, #0
+ mov r1, #100663296 ;@ 0x6000000
+ ldr r2, _038069AC ;@ =_0380A3FC
+ ldr r2, [r2]
+ bl MIi_CpuClearFast
+_0380699C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038069A8: .word _0380A3F4
+_038069AC: .word _0380A3FC
+
+ arm_func_start FUN_038069B0
+FUN_038069B0: ;@ 0x038069B0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _038069E4 ;@ =_0380A3F4
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _038069D8
+ mov r1, #100663296 ;@ 0x6000000
+ ldr r2, _038069E8 ;@ =_0380A3FC
+ ldr r2, [r2]
+ bl MIi_CpuCopyFast
+_038069D8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038069E4: .word _0380A3F4
+_038069E8: .word _0380A3FC
+
+ arm_func_start FUN_038069EC
+FUN_038069EC: ;@ 0x038069EC
+ stmfd sp!, {lr}
+ sub sp, sp, #84 ;@ 0x54
+ ldr r1, _03806A84 ;@ =_0380B064
+ str r1, [sp]
+ ldr r1, _03806A88 ;@ =_0380B064
+ str r1, [sp, #4]
+ mov r1, #1536 ;@ 0x600
+ str r1, [sp, #8]
+ mov r3, #4
+ str r3, [sp, #12]
+ mov r1, #0
+ str r1, [sp, #32]
+ mov r2, #8
+ str r2, [sp, #36] ;@ 0x24
+ str r0, [sp, #40] ;@ 0x28
+ ldr r0, _03806A8C ;@ =_0380A4A4
+ str r0, [sp, #44] ;@ 0x2c
+ mov r0, #448 ;@ 0x1c0
+ str r0, [sp, #48] ;@ 0x30
+ mov r1, #3
+ str r1, [sp, #52] ;@ 0x34
+ mov r0, #64 ;@ 0x40
+ str r0, [sp, #28]
+ str r1, [sp, #60] ;@ 0x3c
+ str r3, [sp, #76] ;@ 0x4c
+ mov r0, #5
+ str r0, [sp, #68] ;@ 0x44
+ mov r0, #7
+ str r0, [sp, #56] ;@ 0x38
+ str r2, [sp, #72] ;@ 0x48
+ mov r0, #9
+ str r0, [sp, #64] ;@ 0x40
+ add r0, sp, #0
+ add r1, sp, #52 ;@ 0x34
+ bl FUN_03806A90
+ add sp, sp, #84 ;@ 0x54
+ ldmia sp!, {lr}
+ bx lr
+_03806A84: .word _0380B064
+_03806A88: .word _0380B064
+_03806A8C: .word _0380A4A4
+
+ arm_func_start FUN_03806A90
+FUN_03806A90: ;@ 0x03806A90
+ ldr pc, _03806A94 ;@ =WM_sp_init
+_03806A94: .word WM_sp_init
+
+ arm_func_start WVR_Shutdown
+WVR_Shutdown: ;@ 0x03806A98
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _03806ACC ;@ =0x04000304
+ ldrh r0, [r1]
+ bic r0, r0, #2
+ strh r0, [r1]
+ mov r0, #1
+ bl PM_SetLEDPattern
+ mov r0, #1
+ bl PMi_SetLED
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03806ACC: .word 0x04000304
+
+ arm_func_start WVR_Init
+WVR_Init: ;@ 0x03806AD0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _03806B20 ;@ =_0380A3F8
+ str r0, [r1]
+ mov r1, #1
+ ldr r0, _03806B24 ;@ =_0380A3F0
+ strb r1, [r0]
+ ldr r0, _03806B28 ;@ =_0380A400
+ mov r1, #0
+ mov r2, #164 ;@ 0xa4
+ bl MI_CpuFill8
+ mov r0, #15
+ ldr r1, _03806B2C ;@ =FUN_03806854
+ bl PXI_SetFifoRecvCallback
+ mov r0, #10
+ ldr r1, _03806B30 ;@ =FUN_03806920
+ bl PXI_SetFifoRecvCallback
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03806B20: .word _0380A3F8
+_03806B24: .word _0380A3F0
+_03806B28: .word _0380A400
+_03806B2C: .word FUN_03806854
+_03806B30: .word FUN_03806920
+
+ arm_func_start MATH_CountPopulation
+MATH_CountPopulation: ; 0x03806B34
+ ldr r1, _03806B6C ;@ =0x55555555
+ and r1, r1, r0, lsr #1
+ sub r2, r0, r1
+ ldr r0, _03806B70 ;@ =0x33333333
+ and r1, r2, r0
+ and r0, r0, r2, lsr #2
+ add r0, r1, r0
+ add r1, r0, r0, lsr #4
+ ldr r0, _03806B74 ;@ =0x0F0F0F0F
+ and r0, r1, r0
+ add r0, r0, r0, lsr #8
+ add r0, r0, r0, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ bx lr
+_03806B6C: .word 0x55555555
+_03806B70: .word 0x33333333
+_03806B74: .word 0x0F0F0F0F
+
+ arm_func_start _ll_udiv
+_ll_udiv: ;@ 0x03806B78
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ mov r4, #0
+ b _03806B8C
+
+ arm_func_start _ull_mod
+_ull_mod: ;@ 0x03806B84
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ mov r4, #1
+_03806B8C:
+ orrs r5, r3, r2
+ bne _03806B9C
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806B9C:
+ orrs r5, r1, r3
+ bne _03806C44
+ mov r1, r2
+ bl _u32_div_not_0_f
+ cmp r4, #0
+ movne r0, r1
+ mov r1, #0
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+
+ arm_func_start _ll_mod
+_ll_mod: ;@ 0x03806BC0
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ mov r4, r1
+ orr r4, r4, #1
+ b _03806BE0
+
+ arm_func_start _ll_sdiv
+_ll_sdiv: ;@ 0x03806BD0
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ eor r4, r1, r3
+ mov r4, r4, asr #1
+ mov r4, r4, lsl #1
+_03806BE0:
+ orrs r5, r3, r2
+ bne _03806BF0
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806BF0:
+ mov r5, r0, lsr #31
+ add r5, r5, r1
+ mov r6, r2, lsr #31
+ add r6, r6, r3
+ orrs r6, r5, r6
+ bne _03806C24
+ mov r1, r2
+ bl _s32_div_f
+ ands r4, r4, #1
+ movne r0, r1
+ mov r1, r0, asr #31
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806C24:
+ cmp r1, #0
+ bge _03806C34
+ rsbs r0, r0, #0
+ rsc r1, r1, #0
+_03806C34:
+ cmp r3, #0
+ bge _03806C44
+ rsbs r2, r2, #0
+ rsc r3, r3, #0
+_03806C44:
+ orrs r5, r1, r0
+ beq _03806D68
+ mov r5, #0
+ mov r6, #1
+ cmp r3, #0
+ bmi _03806C70
+_03806C5C:
+ add r5, r5, #1
+ adds r2, r2, r2
+ adcs r3, r3, r3
+ bpl _03806C5C
+ add r6, r6, r5
+_03806C70:
+ cmp r1, #0
+ blt _03806C90
+_03806C78:
+ cmp r6, #1
+ beq _03806C90
+ sub r6, r6, #1
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ bpl _03806C78
+_03806C90:
+ mov r7, #0
+ mov ip, #0
+ mov fp, #0
+ b _03806CB8
+_03806CA0:
+ orr ip, ip, #1
+ subs r6, r6, #1
+ beq _03806D10
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ adcs r7, r7, r7
+_03806CB8:
+ subs r0, r0, r2
+ sbcs r1, r1, r3
+ sbcs r7, r7, #0
+ adds ip, ip, ip
+ adc fp, fp, fp
+ cmp r7, #0
+ bge _03806CA0
+_03806CD4:
+ subs r6, r6, #1
+ beq _03806D08
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ adc r7, r7, r7
+ adds r0, r0, r2
+ adcs r1, r1, r3
+ adc r7, r7, #0
+ adds ip, ip, ip
+ adc fp, fp, fp
+ cmp r7, #0
+ bge _03806CA0
+ b _03806CD4
+_03806D08:
+ adds r0, r0, r2
+ adc r1, r1, r3
+_03806D10:
+ ands r7, r4, #1
+ moveq r0, ip
+ moveq r1, fp
+ beq _03806D48
+ subs r7, r5, #32
+ movge r0, r1, lsr r7
+ bge _03806D6C
+ rsb r7, r5, #32
+ mov r0, r0, lsr r5
+ orr r0, r0, r1, lsl r7
+ mov r1, r1, lsr r5
+ b _03806D48
+ mov r0, r1, lsr r7
+ mov r1, #0
+_03806D48:
+ cmp r4, #0
+ blt _03806D58
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806D58:
+ rsbs r0, r0, #0
+ rsc r1, r1, #0
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806D68:
+ mov r0, #0
+_03806D6C:
+ mov r1, #0
+ cmp r4, #0
+ blt _03806D58
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+
+ arm_func_start _s32_div_f
+_s32_div_f: ;@ 0x03806D80
+ eor ip, r0, r1
+ and ip, ip, #-2147483648 ;@ 0x80000000
+ cmp r0, #0
+ rsblt r0, r0, #0
+ addlt ip, ip, #1
+ cmp r1, #0
+ rsblt r1, r1, #0
+ beq _03806F78
+ cmp r0, r1
+ movcc r1, r0
+ movcc r0, #0
+ bcc _03806F78
+ mov r2, #28
+ mov r3, r0, lsr #4
+ cmp r1, r3, lsr #12
+ suble r2, r2, #16
+ movle r3, r3, lsr #16
+ cmp r1, r3, lsr #4
+ suble r2, r2, #8
+ movle r3, r3, lsr #8
+ cmp r1, r3
+ suble r2, r2, #4
+ movle r3, r3, lsr #4
+ mov r0, r0, lsl r2
+ rsb r1, r1, #0
+ adds r0, r0, r0
+ add r2, r2, r2, lsl #1
+ add pc, pc, r2, lsl #2
+ nop ;@ (mov r0, r0)
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ mov r1, r3
+_03806F78:
+ ands r3, ip, #-2147483648 ;@ 0x80000000
+ rsbne r0, r0, #0
+ ands r3, ip, #1
+ rsbne r1, r1, #0
+ bx lr
+
+ arm_func_start _u32_div_f
+_u32_div_f: ;@ 0x03806F8C
+ cmp r1, #0
+ bxeq lr
+
+ arm_func_start _u32_div_not_0_f
+_u32_div_not_0_f: ;@ 0x03806F94
+ cmp r0, r1
+ movcc r1, r0
+ movcc r0, #0
+ bxcc lr
+ mov r2, #28
+ mov r3, r0, lsr #4
+ cmp r1, r3, lsr #12
+ suble r2, r2, #16
+ movle r3, r3, lsr #16
+ cmp r1, r3, lsr #4
+ suble r2, r2, #8
+ movle r3, r3, lsr #8
+ cmp r1, r3
+ suble r2, r2, #4
+ movle r3, r3, lsr #4
+ mov r0, r0, lsl r2
+ rsb r1, r1, #0
+ adds r0, r0, r0
+ add r2, r2, r2, lsl #1
+ add pc, pc, r2, lsl #2
+ nop ;@ (mov r0, r0)
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ mov r1, r3
+ bx lr
+
+ .global _03807170
+_03807170:
+ .byte 0
+ .byte 6
+ .byte 12
+ .byte 19
+ .byte 25
+ .byte 31
+ .byte 37
+ .byte 43
+ .byte 49
+ .byte 54
+ .byte 60
+ .byte 65
+ .byte 71
+ .byte 76
+ .byte 81
+ .byte 85
+ .byte 90
+ .byte 94
+ .byte 98
+ .byte 102
+ .byte 106
+ .byte 109
+ .byte 112
+ .byte 115
+ .byte 117
+ .byte 120
+ .byte 122
+ .byte 123
+ .byte 125
+ .byte 126
+ .byte 126
+ .byte 127
+ .byte 127
+ .byte 0
+ .byte 0
+ .byte 0
+
+ .global SNDi_DecibelSquareTable
+SNDi_DecibelSquareTable:
+ .short -32768
+ .short -722
+ .short -721
+ .short -651
+ .short -601
+ .short -562
+ .short -530
+ .short -503
+ .short -480
+ .short -460
+ .short -442
+ .short -425
+ .short -410
+ .short -396
+ .short -383
+ .short -371
+ .short -360
+ .short -349
+ .short -339
+ .short -330
+ .short -321
+ .short -313
+ .short -305
+ .short -297
+ .short -289
+ .short -282
+ .short -276
+ .short -269
+ .short -263
+ .short -257
+ .short -251
+ .short -245
+ .short -239
+ .short -234
+ .short -229
+ .short -224
+ .short -219
+ .short -214
+ .short -210
+ .short -205
+ .short -201
+ .short -196
+ .short -192
+ .short -188
+ .short -184
+ .short -180
+ .short -176
+ .short -173
+ .short -169
+ .short -165
+ .short -162
+ .short -158
+ .short -155
+ .short -152
+ .short -149
+ .short -145
+ .short -142
+ .short -139
+ .short -136
+ .short -133
+ .short -130
+ .short -127
+ .short -125
+ .short -122
+ .short -119
+ .short -116
+ .short -114
+ .short -111
+ .short -109
+ .short -106
+ .short -103
+ .short -101
+ .short -99
+ .short -96
+ .short -94
+ .short -91
+ .short -89
+ .short -87
+ .short -85
+ .short -82
+ .short -80
+ .short -78
+ .short -76
+ .short -74
+ .short -72
+ .short -70
+ .short -68
+ .short -66
+ .short -64
+ .short -62
+ .short -60
+ .short -58
+ .short -56
+ .short -54
+ .short -52
+ .short -50
+ .short -49
+ .short -47
+ .short -45
+ .short -43
+ .short -42
+ .short -40
+ .short -38
+ .short -36
+ .short -35
+ .short -33
+ .short -31
+ .short -30
+ .short -28
+ .short -27
+ .short -25
+ .short -23
+ .short -22
+ .short -20
+ .short -19
+ .short -17
+ .short -16
+ .short -14
+ .short -13
+ .short -11
+ .short -10
+ .short -8
+ .short -7
+ .short -6
+ .short -4
+ .short -3
+ .short -1
+ .short 0
+
+ .global _03807294
+_03807294:
+ .byte 0
+ .byte 1
+ .byte 2
+ .byte 4
+
+ .global _03807298
+_03807298:
+ .byte 4
+ .byte 5
+ .byte 6
+ .byte 7
+ .byte 2
+ .byte 0
+ .byte 3
+ .byte 1
+ .byte 8
+ .byte 9
+ .byte 10
+ .byte 11
+ .byte 14
+ .byte 12
+ .byte 15
+ .byte 13
+
+ .global _038072A8
+_038072A8:
+ .byte 0
+ .byte 1
+ .byte 5
+ .byte 14
+ .byte 26
+ .byte 38
+ .byte 51
+ .byte 63
+ .byte 73
+ .byte 84
+ .byte 92
+ .byte 100
+ .byte 109
+ .byte 116
+ .byte 123
+ .byte 127
+ .byte 132
+ .byte 137
+ .byte 143
+ .byte 0
+
+ .global _038072BC
+_038072BC:
+ .word 0x000000C7
+
+ .global _038072C0
+_038072C0:
+ .word 0x00000006
+
+ .global _038072C4
+_038072C4:
+ .word 0x00000005
+
+ .global _038072C8
+_038072C8:
+ .word 0x00000040
+ .word 0x00000006
+ .word 0x01000000
+ .word 0x00000018
+ .word 0x00080000
+ .word 0x00000013
+ .word 0x00100000
+ .word 0x00000014
+ .word 0x00040000
+ .word 0x00000012
+ .word 0x00000008
+ .word 0x00000003
+ .word 0x00000010
+ .word 0x00000004
+ .word 0x00000020
+ .word 0x00000005
+ .word 0x00000100
+ .word 0x00000008
+ .word 0x00000200
+ .word 0x00000009
+ .word 0x00000400
+ .word 0x0000000A
+ .word 0x00000800
+ .word 0x0000000B
+ .word 0x00001000
+ .word 0x0000000C
+ .word 0x00002000
+ .word 0x0000000D
+ .word 0x00000002
+ .word 0x00000001
+ .word 0x00000004
+ .word 0x00000002
+ .word 0x00000001
+ .word 0x00000000
+ .word 0x00010000
+ .word 0x00000010
+ .word 0x00400000
+ .word 0x00000016
+ .word 0x00000080
+ .word 0x00000007
+ .word 0x00020000
+ .word 0x00000011
+ .word 0x00800000
+ .word 0x00000017
+
+ arm_func_start FUN_03807378
+FUN_03807378: ;@ 0x03807378
+ mov ip, #67108864 ;@ 0x4000000
+ str ip, [ip, #520] ;@ 0x208
+ ldr r1, _038073E0 ;@ =0x0380FFFC
+ mov r0, #0
+ str r0, [r1]
+ ldr r1, _038073E4 ;@ =0x04000180
+ mov r0, #256 ;@ 0x100
+ strh r0, [r1]
+_03807398:
+ ldrh r0, [r1]
+ and r0, r0, #15
+ cmp r0, #1
+ bne _03807398
+ ldr r1, _038073E4 ;@ =0x04000180
+ mov r0, #0
+ strh r0, [r1]
+_038073B4:
+ ldrh r0, [r1]
+ cmp r0, #1
+ beq _038073B4
+ ldr r3, _038073E8 ;@ =0x027FFE00
+ ldr ip, [r3, #52] ;@ 0x34
+ mov lr, ip
+ mov r0, #0
+ mov r1, #0
+ mov r2, #0
+ mov r3, #0
+ bx ip
+_038073E0: .word 0x0380FFFC
+_038073E4: .word 0x04000180
+_038073E8: .word 0x027FFE00
+
+ arm_func_start FUN_038073EC
+FUN_038073EC: ;@ 0x038073EC
+ mov r1, #0
+ ldr r0, _03807400 ;@ =0x04000208
+ strh r1, [r0]
+ ldr ip, _03807404 ;@ =FUN_03807378
+ bx ip
+_03807400: .word 0x04000208
+_03807404: .word FUN_03807378
+
+ arm_func_start WMSP_GetAllowedChannel
+WMSP_GetAllowedChannel: ;@ 0x03807408
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ ldr r1, _03807530 ;@ =0x00001FFF
+ and r0, r0, r1
+ mov r0, r0, lsl #16
+ movs r6, r0, lsr #16
+ moveq r0, #0
+ beq _03807524
+ mov r9, #0
+ mov r0, #1
+ b _03807444
+_03807434:
+ mov r1, r0, lsl r9
+ ands r1, r6, r1
+ bne _0380744C
+ add r9, r9, #1
+_03807444:
+ cmp r9, #16
+ blt _03807434
+_0380744C:
+ mov sl, #15
+ mov r0, #1
+ b _03807468
+_03807458:
+ mov r1, r0, lsl sl
+ ands r1, r6, r1
+ bne _03807470
+ sub sl, sl, #1
+_03807468:
+ cmp sl, #0
+ bne _03807458
+_03807470:
+ sub r5, sl, r9
+ cmp r5, #5
+ movlt r0, #1
+ movlt r0, r0, lsl r9
+ movlt r0, r0, lsl #16
+ movlt r0, r0, lsr #16
+ blt _03807524
+ add r0, sl, r9
+ mov r1, #2
+ bl _s32_div_f
+ mov r8, r0
+ mov r7, #0
+ mov fp, #2
+ mov r4, #1
+ b _038074D4
+_038074AC:
+ mov r0, r7
+ mov r1, fp
+ bl _s32_div_f
+ mov r0, r1, lsl #1
+ sub r0, r0, #1
+ mla r8, r7, r0, r8
+ mov r0, r4, lsl r8
+ ands r0, r6, r0
+ bne _038074DC
+ add r7, r7, #1
+_038074D4:
+ cmp r7, r5
+ blt _038074AC
+_038074DC:
+ sub r0, sl, r8
+ cmp r0, #5
+ blt _038074F4
+ sub r0, r8, r9
+ cmp r0, #5
+ bge _0380750C
+_038074F4:
+ mov r0, #1
+ mov r1, r0, lsl r9
+ orr r0, r1, r0, lsl sl
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ b _03807524
+_0380750C:
+ mov r1, #1
+ mov r0, r1, lsl sl
+ orr r0, r0, r1, lsl r8
+ orr r0, r0, r1, lsl r9
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+_03807524:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_03807530: .word 0x00001FFF
+
+ arm_func_start WMSP_GetBuffer4Callback2Wm9
+WMSP_GetBuffer4Callback2Wm9: ;@ 0x03807534
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r0, _03807584 ;@ =_0601AE88
+ bl OS_LockMutex
+ mov r5, #256 ;@ 0x100
+ ldr r4, _03807588 ;@ =0x027FFF96
+ b _03807558
+_03807550:
+ mov r0, r5
+ bl FUN_037F8CB4
+_03807558:
+ ldrh r0, [r4]
+ ands r1, r0, #1
+ bne _03807550
+ orr r0, r0, #1
+ strh r0, [r4]
+ ldr r0, _0380758C ;@ =_0601A960
+ ldr r0, [r0, #1356] ;@ 0x54c
+ ldr r0, [r0, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03807584: .word _0601AE88
+_03807588: .word 0x027FFF96
+_0380758C: .word _0601A960
+
+ arm_func_start WMSP_ReturnResult2Wm9
+WMSP_ReturnResult2Wm9: ;@ 0x03807590
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, #256 ;@ 0x100
+ mov r5, #10
+ mov r4, #0
+ b _038075B4
+_038075AC:
+ mov r0, r6
+ bl FUN_037F8CB4
+_038075B4:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _038075AC
+ ldr r0, _038075E0 ;@ =_0601AE88
+ bl OS_UnlockMutex
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_038075E0: .word _0601AE88
+ .balign 2, 0 ; Don't pad with nop