summaryrefslogtreecommitdiff
path: root/arm7/asm/CARD_fifo.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/CARD_fifo.s')
-rw-r--r--arm7/asm/CARD_fifo.s90
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