summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-06-15 11:01:22 -0400
committerGitHub <noreply@github.com>2020-06-15 11:01:22 -0400
commit08a00d98647a8b902b81ab4c2e41845cf919bf47 (patch)
treed58340234cc3503c194918fa6a7234d667458903
parent639448d1ee1f5a2ca9ad73fafc10502dce2d3f7c (diff)
parentfe80c3c03218601f1bbc36069bd42ae2f1f2239a (diff)
Merge pull request #167 from red031000/master
arm7 split SPI
-rw-r--r--arm7/arm7.lsf4
-rw-r--r--arm7/asm/SPI_main.s481
-rw-r--r--arm7/asm/SPI_mic.s852
-rw-r--r--arm7/asm/SPI_pm.s847
-rw-r--r--arm7/asm/SPI_tp.s861
-rw-r--r--arm7/asm/wram2.s2888
-rw-r--r--arm7/asm/wram_bss.s84
-rw-r--r--arm7/asm/wram_data.s43
-rw-r--r--arm7/global.inc22
9 files changed, 3067 insertions, 3015 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf
index 46486c4f..55e2a33a 100644
--- a/arm7/arm7.lsf
+++ b/arm7/arm7.lsf
@@ -63,6 +63,10 @@ Autoload WRAM
Object CARD_fifo.o
Object CARD_pullOut.o
Object libsyscall.o
+ Object SPI_main.o
+ Object SPI_tp.o
+ Object SPI_pm.o
+ Object SPI_mic.o
Object wram2.o
Object wram_data.o
Object wram_bss.o
diff --git a/arm7/asm/SPI_main.s b/arm7/asm/SPI_main.s
new file mode 100644
index 00000000..15229ce6
--- /dev/null
+++ b/arm7/asm/SPI_main.s
@@ -0,0 +1,481 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global _038099AC
+_038099AC: ;0x038099AC
+ .space 0x038099B0 - 0x038099AC
+
+ .global _038099B0
+_038099B0: ;0x038099B0
+ .space 0x038099B8 - 0x038099B0
+
+ .global _038099B8
+_038099B8: ;0x038099B8
+ .space 0x03809C5C - 0x038099B8
+
+ .global _03809C5C
+_03809C5C: ;0x03809C5C
+ .space 0x03809C7C - 0x03809C5C
+
+ .global _03809C7C
+_03809C7C: ;0x03809C7C
+ .space 0x03809CBC - 0x03809C7C
+
+ .global _03809CBC
+_03809CBC: ;0x03809CBC
+ .space 0x03809CC0 - 0x03809CBC
+
+ .global _03809CC0
+_03809CC0: ;0x03809CC0
+ .space 0x03809E40 - 0x03809CC0
+
+ .global _03809E40
+_03809E40: ;0x03809E40
+ .space 0x03809E4C - 0x03809E40
+
+ .section .text
+
+ arm_func_start FUN_03801150
+FUN_03801150: ;@ 0x03801150
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r2, #0
+ bne _038011B4
+ sub r0, r0, #4
+ cmp r0, #5
+ addls pc, pc, r0, lsl #2
+ b _038011B4
+ b _038011AC
+ b _038011B4
+ b _03801188
+ b _038011B4
+ b _038011A0
+ b _03801194
+_03801188:
+ mov r0, r1
+ bl TP_AnalyzeCommand
+ b _038011B4
+_03801194:
+ mov r0, r1
+ bl MIC_AnalyzeCommand
+ b _038011B4
+_038011A0:
+ mov r0, r1
+ bl PM_AnalyzeCommand
+ b _038011B4
+_038011AC:
+ mov r0, r1
+ bl NVRAM_AnalyzeCommand
+_038011B4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038011C0
+FUN_038011C0: ;@ 0x038011C0
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #8
+ ldr r6, _03801228 ;@ =_03809C5C
+ add r5, sp, #0
+ mov r4, #1
+_038011D4:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl OS_ReceiveMessage
+ ldr r0, [sp]
+ ldr r1, [r0]
+ cmp r1, #3
+ addls pc, pc, r1, lsl #2
+ b _038011D4
+ b _03801208
+ b _03801220
+ b _03801210
+ b _03801218
+_03801208:
+ bl TP_ExecuteProcess
+ b _038011D4
+_03801210:
+ bl MIC_ExecuteProcess
+ b _038011D4
+_03801218:
+ bl PM_ExecuteProcess
+ b _038011D4
+_03801220:
+ bl NVRAM_ExecuteProcess
+ b _038011D4
+_03801228: .word _03809C5C
+
+ arm_func_start SPIi_CheckEntry
+SPIi_CheckEntry: ;@ 0x0380122C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03801250 ;@ =_03809C5C
+ add r1, sp, #0
+ mov r2, #0
+ bl OS_ReadMessage
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801250: .word _03809C5C
+
+ arm_func_start SPIi_SetEntry
+SPIi_SetEntry: ;@ 0x03801254
+ stmdb sp!, {r0, r1, r2, r3}
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r5, r0
+ mov r4, r1
+ ldrh r0, [sp, #24]
+ cmp r0, #4
+ movhi r0, #0
+ bhi _0380130C
+ bl OS_DisableInterrupts
+ ldr r2, _03801318 ;@ =_038099B0
+ ldr r3, [r2, #1164] ;@ 0x48c
+ mov r1, #24
+ mul ip, r3, r1
+ ldr r3, _0380131C ;@ =_03809CBC
+ str r5, [r3, ip]
+ ldr r3, [r2, #1164] ;@ 0x48c
+ mul r5, r3, r1
+ ldr r3, _03801320 ;@ =_03809CC0
+ str r4, [r3, r5]
+ add r3, sp, #24
+ bic r3, r3, #3
+ add r6, r3, #4
+ mov lr, #0
+ ldrh ip, [sp, #24]
+ b _038012D4
+_038012B8:
+ add r6, r6, #4
+ ldr r5, [r6, #-4]
+ ldr r4, [r2, #1164] ;@ 0x48c
+ mla r3, r4, r1, r2
+ add r3, r3, lr, lsl #2
+ str r5, [r3, #788] ;@ 0x314
+ add lr, lr, #1
+_038012D4:
+ cmp lr, ip
+ blt _038012B8
+ ldr r1, _03801318 ;@ =_038099B0
+ ldr r4, [r1, #1164] ;@ 0x48c
+ add r2, r4, #1
+ and r2, r2, #15
+ str r2, [r1, #1164] ;@ 0x48c
+ bl OS_RestoreInterrupts
+ ldr r0, _03801324 ;@ =_03809C5C
+ ldr r2, _0380131C ;@ =_03809CBC
+ mov r1, #24
+ mla r1, r4, r1, r2
+ mov r2, #0
+ bl OS_SendMessage
+_0380130C:
+ ldmia sp!, {r4, r5, r6, lr}
+ add sp, sp, #16
+ bx lr
+_03801318: .word _038099B0
+_0380131C: .word _03809CBC
+_03801320: .word _03809CC0
+_03801324: .word _03809C5C
+
+ arm_func_start SPIi_ReleaseException
+SPIi_ReleaseException: ;@ 0x03801328
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _03801364 ;@ =_038099B0
+ ldr r2, [r1, #4]
+ cmp r2, r0
+ bne _03801358
+ mov r0, #5
+ str r0, [r1, #4]
+ mov r0, #0
+ str r0, [r1]
+ ldr r0, _03801368 ;@ =_03809E40
+ bl OS_WakeupThread
+_03801358:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801364: .word _038099B0
+_03801368: .word _03809E40
+
+ arm_func_start SPIi_GetException
+SPIi_GetException: ;@ 0x0380136C
+ mov r2, #1
+ ldr r1, _03801380 ;@ =_038099B0
+ str r2, [r1]
+ str r0, [r1, #4]
+ bx lr
+_03801380: .word _038099B0
+
+ arm_func_start SPIi_CheckException
+SPIi_CheckException: ;@ 0x03801384
+ ldr r0, _0380139C ;@ =_038099B0
+ ldr r0, [r0]
+ cmp r0, #0
+ moveq r0, #1
+ movne r0, #0
+ bx lr
+_0380139C: .word _038099B0
+
+ arm_func_start SPIi_ReturnResult
+SPIi_ReturnResult: ;@ 0x038013A0
+ stmdb sp!, {r4, r5, r6, lr}
+ and r2, r0, #112 ;@ 0x70
+ cmp r2, #48 ;@ 0x30
+ bgt _038013E0
+ cmp r2, #48 ;@ 0x30
+ bge _03801434
+ cmp r2, #16
+ bgt _038013D4
+ cmp r2, #16
+ bge _0380141C
+ cmp r2, #0
+ beq _0380141C
+ b _03801438
+_038013D4:
+ cmp r2, #32
+ beq _03801434
+ b _03801438
+_038013E0:
+ cmp r2, #80 ;@ 0x50
+ bgt _038013FC
+ cmp r2, #80 ;@ 0x50
+ bge _03801424
+ cmp r2, #64 ;@ 0x40
+ beq _03801424
+ b _03801438
+_038013FC:
+ cmp r2, #96 ;@ 0x60
+ bgt _03801410
+ cmp r2, #96 ;@ 0x60
+ beq _0380142C
+ b _03801438
+_03801410:
+ cmp r2, #112 ;@ 0x70
+ beq _0380142C
+ b _03801438
+_0380141C:
+ mov r4, #6
+ b _03801438
+_03801424:
+ mov r4, #9
+ b _03801438
+_0380142C:
+ mov r4, #8
+ b _03801438
+_03801434:
+ mov r4, #4
+_03801438:
+ and r0, r0, #255 ;@ 0xff
+ orr r0, r0, #128 ;@ 0x80
+ mov r0, r0, lsl #8
+ orr r2, r0, #50331648 ;@ 0x3000000
+ and r0, r1, #255 ;@ 0xff
+ orr r6, r2, r0
+ mov r5, #0
+_03801454:
+ mov r0, r4
+ mov r1, r6
+ mov r2, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _03801454
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start SPI_Unlock
+SPI_Unlock: ;@ 0x03801474
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _038014D8 ;@ =_038099B0
+ ldr r2, [r1]
+ cmp r2, #0
+ beq _038014CC
+ ldr r2, [r1, #4]
+ cmp r2, #4
+ bne _038014CC
+ ldr r1, [r1, #1176] ;@ 0x498
+ cmp r1, r0
+ bne _038014CC
+ bl OS_DisableInterrupts
+ mov r2, #5
+ ldr r1, _038014D8 ;@ =_038099B0
+ str r2, [r1, #4]
+ mov r2, #0
+ str r2, [r1]
+ str r2, [r1, #1176] ;@ 0x498
+ bl OS_RestoreInterrupts
+ ldr r0, _038014DC ;@ =_03809E40
+ bl OS_WakeupThread
+_038014CC:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038014D8: .word _038099B0
+_038014DC: .word _03809E40
+
+ arm_func_start SPI_Lock
+SPI_Lock: ;@ 0x038014E0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ ldr r5, _0380153C ;@ =_03809E40
+ ldr r4, _03801540 ;@ =_038099B0
+_038014F4:
+ bl OS_DisableInterrupts
+ mov r6, r0
+ ldr r1, [r4]
+ cmp r1, #0
+ beq _03801518
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ bl OS_SleepThread
+ b _038014F4
+_03801518:
+ mov r0, #4
+ bl SPIi_GetException
+ ldr r0, _03801540 ;@ =_038099B0
+ str r7, [r0, #1176] ;@ 0x498
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_0380153C: .word _03809E40
+_03801540: .word _038099B0
+
+ arm_func_start SPI_Init
+SPI_Init: ;@ 0x03801544
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ ldr r0, _03801640 ;@ =_038099AC
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _03801634
+ mov r1, #1
+ strh r1, [r0]
+ mov r1, #0
+ ldr r0, _03801644 ;@ =_038099B0
+ str r1, [r0]
+ mov r1, #5
+ str r1, [r0, #4]
+ bl TP_Init
+ bl NVRAM_Init
+ bl MIC_Init
+ bl PM_Init
+ bl PXI_Init
+ mov r0, #6
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl PXI_SetFifoRecvCallback
+ mov r0, #9
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl PXI_SetFifoRecvCallback
+ mov r0, #8
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl PXI_SetFifoRecvCallback
+ mov r0, #4
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl PXI_SetFifoRecvCallback
+ ldr r0, _0380164C ;@ =_03809C5C
+ ldr r1, _03801650 ;@ =_03809C7C
+ mov r2, #16
+ bl OS_InitMessageQueue
+ mov r8, #0
+ ldr r7, _03801654 ;@ =_03809CBC
+ mov r6, r8
+ mov r5, #24
+_038015E0:
+ mla r0, r8, r5, r7
+ mov r1, r6
+ mov r2, r5
+ bl MI_CpuFill8
+ add r8, r8, #1
+ cmp r8, #16
+ blt _038015E0
+ mov r2, #0
+ ldr r0, _03801644 ;@ =_038099B0
+ str r2, [r0, #1164] ;@ 0x48c
+ str r2, [r0, #1172] ;@ 0x494
+ str r2, [r0, #1168] ;@ 0x490
+ mov r0, #512 ;@ 0x200
+ str r0, [sp]
+ str r4, [sp, #4]
+ ldr r0, _03801658 ;@ =_038099B8
+ ldr r1, _0380165C ;@ =FUN_038011C0
+ ldr r3, _0380164C ;@ =_03809C5C
+ bl OS_CreateThread
+ ldr r0, _03801658 ;@ =_038099B8
+ bl OS_WakeupThreadDirect
+_03801634:
+ add sp, sp, #8
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03801640: .word _038099AC
+_03801644: .word _038099B0
+_03801648: .word FUN_03801150
+_0380164C: .word _03809C5C
+_03801650: .word _03809C7C
+_03801654: .word _03809CBC
+_03801658: .word _038099B8
+_0380165C: .word FUN_038011C0
+
+ arm_func_start FUN_03801660
+FUN_03801660: ;@ 0x03801660
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r0, #0
+ bne _03801680
+ mov r0, #3
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03801698
+_03801680:
+ ldr r1, _038016A4 ;@ =_03809E54
+ str r0, [r1, #36] ;@ 0x24
+ str r0, [r1, #40] ;@ 0x28
+ mov r0, #3
+ mov r1, #0
+ bl SPIi_ReturnResult
+_03801698:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038016A4: .word _03809E54
+
+ arm_func_start FUN_038016A8
+FUN_038016A8: ;@ 0x038016A8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ mov r0, #0
+ mov r1, #16
+ mov r2, #1
+ mov r3, r4
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _0380170C
+ ldr r0, [sp]
+ bic r0, r0, #100663296 ;@ 0x6000000
+ orr r0, r0, #100663296 ;@ 0x6000000
+ str r0, [sp]
+ ldrh r1, [sp]
+ ldr r0, _03801718 ;@ =0x027FFFAA
+ strh r1, [r0]
+ ldrh r1, [sp, #2]
+ ldr r0, _0380171C ;@ =0x027FFFAC
+ strh r1, [r0]
+ mov r0, #16
+ and r1, r4, #255 ;@ 0xff
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ bl SPIi_ReturnResult
+_0380170C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03801718: .word 0x027FFFAA
+_0380171C: .word 0x027FFFAC
diff --git a/arm7/asm/SPI_mic.s b/arm7/asm/SPI_mic.s
new file mode 100644
index 00000000..0178468f
--- /dev/null
+++ b/arm7/asm/SPI_mic.s
@@ -0,0 +1,852 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global _03809F6C
+_03809F6C: ;0x03809F6C
+ .space 0x03809FA8 - 0x03809F6C
+
+ .global _03809FA8
+_03809FA8: ;0x03809FA8
+ .space 0x03809FB8 - 0x03809FA8
+
+ .section .text
+
+ 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
diff --git a/arm7/asm/SPI_pm.s b/arm7/asm/SPI_pm.s
new file mode 100644
index 00000000..1960a3cd
--- /dev/null
+++ b/arm7/asm/SPI_pm.s
@@ -0,0 +1,847 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global PMi_LEDStatus
+PMi_LEDStatus:
+ .word 0x00000001
+
+ .global PMi_BlinkPatternData
+PMi_BlinkPatternData:
+ .word 0x00000000
+ .word 0xAA000000
+ .word 0x00010008
+ .word 0x00000000
+ .word 0xCC000000
+ .word 0x00010008
+ .word 0x00000000
+ .word 0xE3800000
+ .word 0x0001000C
+ .word 0x00000000
+ .word 0xF0F00000
+ .word 0x00010010
+ .word 0x00000000
+ .word 0xF83E0000
+ .word 0x00010014
+ .word 0x00000000
+ .word 0xFC000000
+ .word 0x0001000C
+ .word 0x00000000
+ .word 0xFF000000
+ .word 0x00010010
+ .word 0x00000000
+ .word 0xFFC00000
+ .word 0x00010014
+ .word 0x00000000
+ .word 0xFF000000
+ .word 0x00010020
+ .word 0x00000000
+ .word 0xFF00FF00
+ .word 0x00010020
+ .word 0x00000000
+ .word 0xFFFFFF00
+ .word 0x00010020
+ .word 0x00000000
+ .word 0xC3000000
+ .word 0x00020028
+
+ .section .bss
+
+ .global PMi_KeyPattern
+PMi_KeyPattern: ;0x03809F2C
+ .space 0x03809F30 - 0x03809F2C
+
+ .global PMi_TriggerBL
+PMi_TriggerBL: ;0x03809F30
+ .space 0x03809F34 - 0x03809F30
+
+ .global PMi_Initialized
+PMi_Initialized: ;0x03809F34
+ .space 0x03809F38 - 0x03809F34
+
+ .global PMi_Work
+PMi_Work: ;0x03809F38
+ .space 0x03809F64 - 0x03809F38
+
+ .global _03809F64
+_03809F64: ;0x03809F64
+ .space 0x03809F68 - 0x03809F64
+
+ .global PMi_BlinkPatternNo
+PMi_BlinkPatternNo: ;0x03809F68
+ .space 0x03809F6C - 0x03809F68
+
+ .section .text
+
+ 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
diff --git a/arm7/asm/SPI_tp.s b/arm7/asm/SPI_tp.s
new file mode 100644
index 00000000..2176bfce
--- /dev/null
+++ b/arm7/asm/SPI_tp.s
@@ -0,0 +1,861 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global _03809E4C
+_03809E4C: ;0x03809E4C
+ .space 0x03809E50 - 0x03809E4C
+
+ .global _03809E50
+_03809E50: ;0x03809E50
+ .space 0x03809E54 - 0x03809E50
+
+ .global _03809E54
+_03809E54: ;0x03809E54
+ .space 0x03809E80 - 0x03809E54
+
+ .global _03809E80
+_03809E80: ;0x03809E80
+ .space 0x03809F28 - 0x03809E80
+
+ .global _03809F28
+_03809F28: ;0x03809F28
+ .space 0x03809F2C - 0x03809F28
+
+ .section .text
+
+ 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
diff --git a/arm7/asm/wram2.s b/arm7/asm/wram2.s
index 57fd39e1..513bba1a 100644
--- a/arm7/asm/wram2.s
+++ b/arm7/asm/wram2.s
@@ -3,2894 +3,6 @@
.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}
diff --git a/arm7/asm/wram_bss.s b/arm7/asm/wram_bss.s
index e342bf0c..e4322f0a 100644
--- a/arm7/asm/wram_bss.s
+++ b/arm7/asm/wram_bss.s
@@ -2,90 +2,6 @@
.include "global.inc"
.section .bss
- .global _038099AC
-_038099AC: ;0x038099AC
- .space 0x038099B0 - 0x038099AC
-
- .global _038099B0
-_038099B0: ;0x038099B0
- .space 0x038099B8 - 0x038099B0
-
- .global _038099B8
-_038099B8: ;0x038099B8
- .space 0x03809C5C - 0x038099B8
-
- .global _03809C5C
-_03809C5C: ;0x03809C5C
- .space 0x03809C7C - 0x03809C5C
-
- .global _03809C7C
-_03809C7C: ;0x03809C7C
- .space 0x03809CBC - 0x03809C7C
-
- .global _03809CBC
-_03809CBC: ;0x03809CBC
- .space 0x03809CC0 - 0x03809CBC
-
- .global _03809CC0
-_03809CC0: ;0x03809CC0
- .space 0x03809E40 - 0x03809CC0
-
- .global _03809E40
-_03809E40: ;0x03809E40
- .space 0x03809E4C - 0x03809E40
-
- .global _03809E4C
-_03809E4C: ;0x03809E4C
- .space 0x03809E50 - 0x03809E4C
-
- .global _03809E50
-_03809E50: ;0x03809E50
- .space 0x03809E54 - 0x03809E50
-
- .global _03809E54
-_03809E54: ;0x03809E54
- .space 0x03809E80 - 0x03809E54
-
- .global _03809E80
-_03809E80: ;0x03809E80
- .space 0x03809F28 - 0x03809E80
-
- .global _03809F28
-_03809F28: ;0x03809F28
- .space 0x03809F2C - 0x03809F28
-
- .global PMi_KeyPattern
-PMi_KeyPattern: ;0x03809F2C
- .space 0x03809F30 - 0x03809F2C
-
- .global PMi_TriggerBL
-PMi_TriggerBL: ;0x03809F30
- .space 0x03809F34 - 0x03809F30
-
- .global PMi_Initialized
-PMi_Initialized: ;0x03809F34
- .space 0x03809F38 - 0x03809F34
-
- .global PMi_Work
-PMi_Work: ;0x03809F38
- .space 0x03809F64 - 0x03809F38
-
- .global _03809F64
-_03809F64: ;0x03809F64
- .space 0x03809F68 - 0x03809F64
-
- .global PMi_BlinkPatternNo
-PMi_BlinkPatternNo: ;0x03809F68
- .space 0x03809F6C - 0x03809F68
-
- .global _03809F6C
-_03809F6C: ;0x03809F6C
- .space 0x03809FA8 - 0x03809F6C
-
- .global _03809FA8
-_03809FA8: ;0x03809FA8
- .space 0x03809FB8 - 0x03809FA8
-
.global CTRDGi_Work
CTRDGi_Work: ;0x03809FB8
.space 0x03809FBC - 0x03809FB8
diff --git a/arm7/asm/wram_data.s b/arm7/asm/wram_data.s
index 05fd5b66..6b7aa989 100644
--- a/arm7/asm/wram_data.s
+++ b/arm7/asm/wram_data.s
@@ -3,49 +3,6 @@
.section .data
- .global PMi_LEDStatus
-PMi_LEDStatus:
- .word 0x00000001
-
- .global PMi_BlinkPatternData
-PMi_BlinkPatternData:
- .word 0x00000000
- .word 0xAA000000
- .word 0x00010008
- .word 0x00000000
- .word 0xCC000000
- .word 0x00010008
- .word 0x00000000
- .word 0xE3800000
- .word 0x0001000C
- .word 0x00000000
- .word 0xF0F00000
- .word 0x00010010
- .word 0x00000000
- .word 0xF83E0000
- .word 0x00010014
- .word 0x00000000
- .word 0xFC000000
- .word 0x0001000C
- .word 0x00000000
- .word 0xFF000000
- .word 0x00010010
- .word 0x00000000
- .word 0xFFC00000
- .word 0x00010014
- .word 0x00000000
- .word 0xFF000000
- .word 0x00010020
- .word 0x00000000
- .word 0xFF00FF00
- .word 0x00010020
- .word 0x00000000
- .word 0xFFFFFF00
- .word 0x00010020
- .word 0x00000000
- .word 0xC3000000
- .word 0x00020028
-
.global _03807704
_03807704:
.word 0x00000001
diff --git a/arm7/global.inc b/arm7/global.inc
index a732f7df..a90c17cb 100644
--- a/arm7/global.inc
+++ b/arm7/global.inc
@@ -222,13 +222,34 @@
.extern FUN_037FE918
.extern FUN_037FE968
.extern FUN_037FE9B8
+.extern SPIi_CheckEntry
+.extern SPIi_CheckException
+.extern SPIi_GetException
+.extern SPIi_ReleaseException
+.extern SPIi_ReturnResult
+.extern SPIi_SetEntry
.extern SPI_Init
+.extern FUN_03801660
+.extern FUN_038016A8
.extern PMi_ResetControl
.extern PMi_SetControl
+.extern PMi_SetLED
+.extern PM_AnalyzeCommand
+.extern PM_ExecuteProcess
+.extern PM_Init
.extern PM_SelfBlinkProc
+.extern MIC_AnalyzeCommand
+.extern MIC_ExecuteProcess
+.extern MIC_Init
+.extern TP_AnalyzeCommand
+.extern TP_ExecuteProcess
+.extern TP_Init
.extern CTRDG_CheckPullOut_Polling
.extern CTRDG_VibPulseEdgeUpdate
.extern CTRDG_Init
+.extern NVRAM_AnalyzeCommand
+.extern NVRAM_ExecuteProcess
+.extern NVRAM_Init
.extern NVRAM_ReadDataBytes
.extern RTC_Init
.extern WVR_Shutdown
@@ -310,6 +331,7 @@
.extern _038072BC
.extern _038072C0
.extern _038072C4
+.extern _038072C8
.extern SVC_CpuSet
.extern SVC_GetCRC16
.extern SVC_GetPitchTable