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
|