summaryrefslogtreecommitdiff
path: root/arm9/asm/CARD_pullOut.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/CARD_pullOut.s')
-rw-r--r--arm9/asm/CARD_pullOut.s169
1 files changed, 169 insertions, 0 deletions
diff --git a/arm9/asm/CARD_pullOut.s b/arm9/asm/CARD_pullOut.s
new file mode 100644
index 00000000..662ef075
--- /dev/null
+++ b/arm9/asm/CARD_pullOut.s
@@ -0,0 +1,169 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start CARDi_SendtoPxi
+CARDi_SendtoPxi: ; 0x020D7BCC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r1, r7
+ mov r0, #0xe
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D7BEC: ; 0x020D7BEC
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r5, #0xe
+ mov r4, #0x0
+_020D7C04:
+ mov r0, r6
+ bl SVC_WaitByLoop
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+_020D7C1C: ; 0x020D7C1C
+ cmp r0, #0x0
+ bne _020D7C04
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start CARDi_CheckPulledOutCore
+CARDi_CheckPulledOutCore:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r1, _020D7C94 ; =0x027FFC10
+ ldrh r1, [r1, #0x0]
+ cmp r1, #0x0
+ ldreq r1, _020D7C98 ; =0x027FF800
+ ldrne r1, _020D7C9C ; =0x027FFC00
+ ldr r1, [r1, #0x0]
+ str r1, [sp, #0x0]
+ ldr r1, [sp, #0x0]
+ cmp r0, r1
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #0xe
+ mov r1, #0x11
+ mov r2, #0x0
+ bl CARDi_PulledOutCallback
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D7C94: .word 0x027FFC10
+_020D7C98: .word 0x027FF800
+_020D7C9C: .word 0x027FFC00
+
+ arm_func_start CARD_TerminateForPulledOut
+CARD_TerminateForPulledOut: ; 0x020D7CA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D7D10 ; =0x027FFFA8
+ mov r5, #0x1
+ ldrh r0, [r0, #0x0]
+ and r0, r0, #0x8000
+ movs r0, r0, asr #0xf
+ beq _020D7CEC
+ bl PM_ForceToPowerOff
+ cmp r0, #0x4
+ bne _020D7CE4
+ ldr r4, _020D7D14 ; =0x000A3A47
+_020D7CD0:
+ mov r0, r4
+ bl OS_SpinWait
+ bl PM_ForceToPowerOff
+ cmp r0, #0x4
+ beq _020D7CD0
+_020D7CE4:
+ cmp r0, #0x0
+ moveq r5, #0x0
+_020D7CEC:
+ cmp r5, #0x0
+ beq _020D7D00
+ mov r0, #0x1
+ mov r1, r0
+ bl CARDi_SendtoPxi
+_020D7D00:
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D7D10: .word 0x027FFFA8
+_020D7D14: .word 0x000A3A47
+
+ arm_func_start CARD_IsPulledOut
+CARD_IsPulledOut: ; 0x020D7D18
+ ldr r0, _020D7D24 ; =0x021D5E20
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D7D24: .word 0x021D5E20
+
+ arm_func_start CARDi_PulledOutCallback
+CARDi_PulledOutCallback: ; 0x020D7D28
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ and r0, r1, #0x3f
+ cmp r0, #0x11
+ bne _020D7D90
+ ldr r2, _020D7DA0 ; =0x021D5E20
+ ldr r0, [r2, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, _020D7DA4 ; =0x021D5E24
+ mov r0, #0x1
+ ldr r1, [r1, #0x0]
+ str r0, [r2, #0x0]
+ cmp r1, #0x0
+ beq _020D7D70
+ blx r1
+_020D7D70:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl CARD_TerminateForPulledOut
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020D7D90:
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D7DA0: .word 0x021D5E20
+_020D7DA4: .word 0x021D5E24
+
+ arm_func_start CARD_InitPulledOutCallback
+CARD_InitPulledOutCallback: ; 0x020D7DA8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl PXI_Init
+ ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback
+ mov r0, #0xe
+ bl PXI_SetFifoRecvCallback
+ ldr r0, _020D7DDC ; =0x021D5E24
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D7DD8: .word CARDi_PulledOutCallback
+_020D7DDC: .word 0x021D5E24