summaryrefslogtreecommitdiff
path: root/arm9/asm/CARD_pullOut.s
blob: a3237d3cf67a0923c4a58c564d62bc5926671ee5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
	.include "asm/macros.inc"
	.include "global.inc"

	.section .bss

	.global UNK_021D5E20
UNK_021D5E20: ; 0x021D5E20
	.space 0x4

	.global UNK_021D5E24
UNK_021D5E24: ; 0x021D5E24
	.space 0x4

	.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 ; =UNK_021D5E20
	ldr r0, [r0, #0x0]
	bx lr
	.balign 4
_020D7D24: .word UNK_021D5E20

	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 ; =UNK_021D5E20
	ldr r0, [r2, #0x0]
	cmp r0, #0x0
	addne sp, sp, #0x4
	ldmneia sp!, {lr}
	bxne lr
	ldr r1, _020D7DA4 ; =UNK_021D5E24
	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 UNK_021D5E20
_020D7DA4: .word UNK_021D5E24

	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 ; =UNK_021D5E24
	mov r1, #0x0
	str r1, [r0, #0x0]
	add sp, sp, #0x4
	ldmia sp!, {lr}
	bx lr
	.balign 4
_020D7DD8: .word CARDi_PulledOutCallback
_020D7DDC: .word UNK_021D5E24