diff options
Diffstat (limited to 'arm9/asm/SPI_mic.s')
-rw-r--r-- | arm9/asm/SPI_mic.s | 528 |
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 |