diff options
Diffstat (limited to 'arm7/asm/CARD_fifo.s')
-rw-r--r-- | arm7/asm/CARD_fifo.s | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/arm7/asm/CARD_fifo.s b/arm7/asm/CARD_fifo.s new file mode 100644 index 00000000..7e3cd489 --- /dev/null +++ b/arm7/asm/CARD_fifo.s @@ -0,0 +1,90 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARDi_OnFifoRecv +CARDi_OnFifoRecv: ; 0x03800D2C + stmfd sp!, {lr} + sub sp, sp, #4 + cmp r0, #11 + bne _03800DFC + cmp r2, #0 + beq _03800DFC + ldr r0, _03800E08 ; =cardi_common + ldr r2, [r0, #8] + cmp r2, #0 + streq r1, [r0, #4] + ldr r2, [r0, #4] + cmp r2, #12 + addls pc, pc, r2, lsl #2 + b _03800DC8 + b _03800D98 + b _03800DC8 + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC +_03800D98: + ldr r2, [r0, #8] + cmp r2, #0 + beq _03800DC8 + cmp r2, #1 + streq r1, [r0] + ldreq r1, [r0, #252] ; 0xfc + orreq r1, r1, #16 + streq r1, [r0, #252] ; 0xfc + b _03800DC8 +_03800DBC: + ldr r1, [r0, #252] ; 0xfc + orr r1, r1, #16 + str r1, [r0, #252] ; 0xfc +_03800DC8: + ldr r1, [r0, #252] ; 0xfc + ands r1, r1, #16 + ldreq r1, [r0, #8] + addeq r1, r1, #1 + streq r1, [r0, #8] + beq _03800DFC + mov r1, #0 + str r1, [r0, #8] + ldr r1, [r0, #252] ; 0xfc + ands r1, r1, #4 + ldrne r0, [r0, #236] ; 0xec + addeq r0, r0, #72 ; 0x48 + bl OS_WakeupThreadDirect +_03800DFC: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03800E08: .word cardi_common + + arm_func_start FUN_03800E0C +FUN_03800E0C: ; 0x03800E0C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, #14 + mov r4, #0 + b _03800E30 +_03800E28: + mov r0, r6 + bl FUN_037F8CB4 +_03800E30: + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _03800E28 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr |