summaryrefslogtreecommitdiff
path: root/arm7/asm/SPI_main.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SPI_main.s')
-rw-r--r--arm7/asm/SPI_main.s481
1 files changed, 481 insertions, 0 deletions
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