summaryrefslogtreecommitdiff
path: root/arm9/asm/SPI_mic.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/SPI_mic.s')
-rw-r--r--arm9/asm/SPI_mic.s528
1 files changed, 528 insertions, 0 deletions
diff --git a/arm9/asm/SPI_mic.s b/arm9/asm/SPI_mic.s
new file mode 100644
index 00000000..f82afbcc
--- /dev/null
+++ b/arm9/asm/SPI_mic.s
@@ -0,0 +1,528 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start MicWaitBusy
+MicWaitBusy: ; 0x020D4408
+ ldr ip, _020D441C ; =0x021D54B0
+_020D440C:
+ ldr r0, [r12, #0x0]
+ cmp r0, #0x1
+ beq _020D440C
+ bx lr
+ .balign 4
+_020D441C: .word 0x021D54B0
+
+ arm_func_start MicGetResultCallback
+MicGetResultCallback: ; 0x020D4420
+ ldr r1, _020D442C ; =0x021D54B0
+ str r0, [r1, #0xc]
+ bx lr
+ .balign 4
+_020D442C: .word 0x021D54B0
+
+ arm_func_start MicStopAutoSampling
+MicStopAutoSampling:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4460 ; =0x03004200
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D4448:
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ add sp, sp, #4
+ ldmfd sp!, {lr}
+ bx lr
+_020D4460: .word 0x03004200
+
+ arm_func_start MicStartAutoSampling
+MicStartAutoSampling: ; 0x020D4464
+ stmdb sp!, {r4-r6,lr}
+ ldr ip, _020D4584 ; =0x02004100
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ orr r1, r3, r12
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D4488:
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ mov r0, r6, lsr #0x10
+ orr r1, r0, #0x10000
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ ldr r1, _020D4588
+ mov r0, #0x9
+ and r1, r6, r1
+ orr r1, r1, #0x20000
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ mov r0, r5, lsr #0x10
+ orr r1, r0, #0x30000
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ ldr r1, _020D4588
+ mov r0, #0x9
+ and r1, r5, r1
+ orr r1, r1, #0x40000
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ mov r0, r4, lsr #0x10
+ orr r1, r0, #0x50000
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ ldr r0, _020D4588
+ ldr r1, _020D458C
+ and r0, r4, r0
+ orr r1, r0, r1
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+_020D4584: .word 0x02004100
+_020D4588: .word 0x0000FFFF
+_020D458C: .word 0x01060000
+
+ arm_func_start MicDoSampling
+MicDoSampling: ; 0x020D4590
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D45C4 ; =0x03004000
+ mov r2, #0x0
+ orr r1, r0, r1
+ mov r0, #0x9
+ bl PXI_SendWordByFifo
+_020D45AC:
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+_020D45C4: .word 0x03004000
+
+ arm_func_start MicCommonCallback
+MicCommonCallback: ; 0x020D45C8
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ cmp r2, #0x0
+ beq _020D4610
+ ldr r0, _020D4700 ; =0x021D54B0
+ ldr r2, _020D4700 ; =0x021D54B0
+ ldr r1, [r0, #0x0]
+ ldr r12, [r2, #0x4]
+ cmp r1, #0x0
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ cmp r12, #0x0
+ beq _020D4610
+ ldr r1, [r2, #0x8]
+ mov r3, #0x0
+ mov r0, #0x6
+ str r3, [r2, #0x4]
+ blx r12
+_020D4610:
+ and r0, r4, #0xff
+ mov r1, r0, lsl #0x10
+ and r2, r4, #0x7f00
+ mov r0, r2, lsl #0x8
+ mov r1, r1, lsr #0x10
+ cmp r1, #0x4
+ mov r2, r0, lsr #0x10
+ addls pc, pc, r1, lsl #0x2
+ b _020D4670
+_020D4634:
+ b _020D4648
+ b _020D4650
+ b _020D4658
+ b _020D4660
+ b _020D4668
+_020D4648:
+ mov r0, #0x0
+ b _020D4674
+_020D4650:
+ mov r0, #0x4
+ b _020D4674
+_020D4658:
+ mov r0, #0x2
+ b _020D4674
+_020D4660:
+ mov r0, #0x5
+ b _020D4674
+_020D4668:
+ mov r0, #0x1
+ b _020D4674
+_020D4670:
+ mov r0, #0x6
+_020D4674:
+ cmp r2, #0x51
+ bne _020D46A0
+ ldr r1, _020D4700 ; =0x021D54B0
+ ldr r2, [r1, #0x10]
+ cmp r2, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r1, #0x14]
+ blx r2
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D46A0:
+ cmp r2, #0x40
+ bne _020D46C0
+ ldr r1, _020D4700 ; =0x021D54B0
+ ldr r2, [r1, #0x18]
+ cmp r2, #0x0
+ ldrne r1, _020D4704 ; =0x027FFF94
+ ldrneh r1, [r1, #0x0]
+ strneh r1, [r2, #0x0]
+_020D46C0:
+ ldr r1, _020D4700 ; =0x021D54B0
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ movne r2, #0x0
+ strne r2, [r1, #0x0]
+ ldr r2, _020D4700 ; =0x021D54B0
+ ldr r4, [r2, #0x4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r2, #0x8]
+ mov r3, #0x0
+ str r3, [r2, #0x4]
+ blx r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D4700: .word 0x021D54B0
+_020D4704: .word 0x027FFF94
+
+ arm_func_start MIC_GetLastSamplingAddress
+MIC_GetLastSamplingAddress: ; 0x020D4708
+ ldr r0, _020D4714 ; =0x027FFF90
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D4714: .word 0x027FFF90
+
+ arm_func_start MIC_StopAutoSampling
+MIC_StopAutoSampling: ; 0x020D4718
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D4754 ; =MicGetResultCallback
+ mov r1, #0x0
+ bl MIC_StopAutoSamplingAsync
+ ldr r1, _020D4758 ; =0x021D54B0
+ cmp r0, #0x0
+ str r0, [r1, #0xc]
+ bne _020D4740
+ bl MicWaitBusy
+_020D4740:
+ ldr r0, _020D4758 ; =0x021D54B0
+ ldr r0, [r0, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D4754: .word MicGetResultCallback
+_020D4758: .word 0x021D54B0
+
+ arm_func_start MIC_StopAutoSamplingAsync
+MIC_StopAutoSamplingAsync: ; 0x020D475C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl OS_DisableInterrupts
+ ldr r1, _020D47C8 ; =0x021D54B0
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020D4794
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D4794:
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D47C8 ; =0x021D54B0
+ str r5, [r0, #0x4]
+ str r4, [r0, #0x8]
+ bl MicStopAutoSampling
+_020D47B0:
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+_020D47C8: .word 0x021D54B0
+
+ arm_func_start MIC_StartAutoSampling
+MIC_StartAutoSampling: ; 0x020D47CC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4808 ; =MicGetResultCallback
+ mov r2, #0x0
+ bl MIC_StartAutoSamplingAsync
+ ldr r1, _020D480C ; =0x021D54B0
+ cmp r0, #0x0
+ str r0, [r1, #0xc]
+ bne _020D47F4
+ bl MicWaitBusy
+_020D47F4:
+ ldr r0, _020D480C ; =0x021D54B0
+ ldr r0, [r0, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D4808: .word MicGetResultCallback
+_020D480C: .word 0x021D54B0
+
+ arm_func_start MIC_StartAutoSamplingAsync
+MIC_StartAutoSamplingAsync: ; 0x020D4810
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r0, [r7, #0x4]
+ mov r6, r1
+ ands r0, r0, #0x1f
+ mov r5, r2
+ addne sp, sp, #0x4
+ movne r0, #0x2
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r1, [r7, #0x8]
+ ands r0, r1, #0x1f
+ addne sp, sp, #0x4
+ movne r0, #0x2
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x2
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, [r7, #0xc]
+ cmp r0, #0x400
+ addcc sp, sp, #0x4
+ movcc r0, #0x2
+ ldmccia sp!, {r4-r7,lr}
+ bxcc lr
+ ldr r0, [r7, #0x0]
+ cmp r0, #0x5
+ addls pc, pc, r0, lsl #0x2
+ b _020D48D8
+_020D4890:
+ b _020D48A8
+ b _020D48B0
+ b _020D48B8
+ b _020D48C0
+ b _020D48C8
+ b _020D48D0
+_020D48A8:
+ mov r1, #0x0
+ b _020D48E8
+_020D48B0:
+ mov r1, #0x1
+ b _020D48E8
+_020D48B8:
+ mov r1, #0x2
+ b _020D48E8
+_020D48C0:
+ mov r1, #0x3
+ b _020D48E8
+_020D48C8:
+ mov r1, #0x5
+ b _020D48E8
+_020D48D0:
+ mov r1, #0x7
+ b _020D48E8
+_020D48D8:
+ add sp, sp, #0x4
+ mov r0, #0x2
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D48E8:
+ ldr r0, [r7, #0x10]
+ cmp r0, #0x0
+ orrne r0, r1, #0x10
+ andne r0, r0, #0xff
+ andeq r0, r1, #0xff
+ and r4, r0, #0xff
+ bl OS_DisableInterrupts
+ ldr r1, _020D497C
+ ldr r2, [r1]
+ cmp r2, #0x0
+ beq _020D4928
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D4928:
+ mov r2, #0x1
+ str r2, [r1]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D497C
+ mov r3, r4
+ str r6, [r0, #0x4]
+ str r5, [r0, #0x8]
+ ldr r1, [r7, #0x14]
+ str r1, [r0, #0x10]
+ ldr r1, [r7, #0x18]
+ str r1, [r0, #0x14]
+ ldr r0, [r7, #0x4]
+ ldr r1, [r7, #0x8]
+ ldr r2, [r7, #0xC]
+ bl MicStartAutoSampling
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D497C: .word 0x021D54B0
+
+ arm_func_start MIC_DoSamplingAsync
+MIC_DoSamplingAsync: ; 0x020D4980
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x6
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ addge sp, sp, #0x4
+ movge r0, #0x2
+ ldmgeia sp!, {r4-r7,lr}
+ bxge lr
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020D49E4
+_020D49B4:
+ b _020D49C4
+ b _020D49CC
+ b _020D49D4
+ b _020D49DC
+_020D49C4:
+ mov r4, #0x0
+ b _020D49F4
+_020D49CC:
+ mov r4, #0x1
+ b _020D49F4
+_020D49D4:
+ mov r4, #0x2
+ b _020D49F4
+_020D49DC:
+ mov r4, #0x3
+ b _020D49F4
+_020D49E4:
+ add sp, sp, #0x4
+ mov r0, #0x2
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D49F4:
+ bl OS_DisableInterrupts
+ ldr r1, _020D4A58
+ ldr r2, [r1]
+ cmp r2, #0x0
+ beq _020D4A1C
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D4A1C:
+ mov r2, #0x1
+ str r2, [r1]
+ bl OS_RestoreInterrupts
+ ldr r1, _020D4A58
+ mov r0, r4
+ str r6, [r1, #0x4]
+ str r5, [r1, #0x8]
+ str r7, [r1, #0x18]
+ bl MicDoSampling
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D4A58: .word 0x021D54B0
+
+ arm_func_start MIC_Init
+MIC_Init: ; 0x020D4A5C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4AD8 ; =0x021D54AC
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r0, _020D4ADC ; =0x021D54B0
+ mov r2, #0x0
+ mov r3, #0x1
+ strh r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x4]
+ bl PXI_Init
+ mov r5, #0x9
+ mov r4, #0x1
+_020D4AA0:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020D4AAC:
+ cmp r0, #0x0
+ beq _020D4AA0
+ ldr r2, _020D4AE0
+ mov r3, #0x0
+ ldr r1, _020D4AE4
+ mov r0, #0x9
+ str r3, [r2]
+ bl PXI_SetFifoRecvCallback
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+_020D4AD8: .word 0x021D54AC
+_020D4ADC: .word 0x021D54B0
+_020D4AE0: .word 0x027FFF90
+_020D4AE4: .word MicCommonCallback