summaryrefslogtreecommitdiff
path: root/arm7/asm/CARD_pullOut.s
blob: b4d52c6cb3b6e33c60002d59f5c1a83685818909 (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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
	.include "asm/macros.inc"
	.include "global.inc"

    .section .data

	.global _03807668
_03807668:
	.word	0xFFFFFFFF

	.global _0380766C
_0380766C:
	.word	0x00000001

    .section .bss

	.global _038099A0
_038099A0: ;0x038099A0
	.space 0x038099A4 - 0x038099A0

	.global _038099A4
_038099A4: ;0x038099A4
	.space 0x038099A8 - 0x038099A4

	.global _038099A8
_038099A8: ;0x038099A8
	.space 0x038099AC - 0x038099A8

	.section .text

	arm_func_start FUN_03800E54
FUN_03800E54: ; 0x03800E54
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	mov	r0, #0
	bl	CTRDG_VibPulseEdgeUpdate
	bl	SND_BeginSleep
	bl	WVR_Shutdown
	bl	OS_Terminate
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr

	arm_func_start CARD_CheckPullOut_Polling
CARD_CheckPullOut_Polling: ; 0x03800E7C
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	ldr	r0, _03800F50	; =_038099A0
	ldr	r0, [r0]
	cmp	r0, #0
	bne	_03800F44
	ldr	r0, _03800F54	; =0x027FFC40
	ldrh	r0, [r0]
	cmp	r0, #2
	beq	_03800F44
	ldr	r1, _03800F58	; =_03807668
	ldr	r3, [r1]
	mvn	r0, #0
	cmp	r3, r0
	ldreq	r0, _03800F5C	; =0x027FFC3C
	ldreq	r0, [r0]
	addeq	r0, r0, #10
	streq	r0, [r1]
	beq	_03800F44
	ldr	r2, _03800F5C	; =0x027FFC3C
	ldr	r0, [r2]
	cmp	r0, r3
	bcc	_03800F44
	ldr	r0, [r2]
	add	r0, r0, #10
	str	r0, [r1]
	bl	CARD_IsPulledOut
	cmp	r0, #0
	beq	_03800F1C
	mov	r1, #1
	ldr	r0, _03800F50	; =_038099A0
	str	r1, [r0]
	bl	CARD_GetRomHeader
	ldr	r0, [r0, #12]
	cmp	r0, #0
	bne	_03800F1C
	ldr	r0, _03800F60	; =_0380766C
	ldr	r0, [r0]
	cmp	r0, #0
	bne	_03800F44
_03800F1C:
	mov	r1, #0
	ldr	r0, _03800F60	; =_0380766C
	str	r1, [r0]
	ldr	r0, _03800F50	; =_038099A0
	ldr	r0, [r0]
	cmp	r0, #0
	beq	_03800F44
	mov	r0, #17
	mov	r1, #100	; 0x64
	bl	FUN_03800E0C
_03800F44:
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_03800F50:	.word	_038099A0
_03800F54:	.word	0x027FFC40
_03800F58:	.word	_03807668
_03800F5C:	.word	0x027FFC3C
_03800F60:	.word	_0380766C

	arm_func_start CARD_IsCardIreqLo
CARD_IsCardIreqLo: ; 0x03800F64
	mov	r2, #1
	mov	r0, r2
	ldr	r1, _03800F88	; =0x04000214
	ldr	r1, [r1]
	ands	r1, r1, #1048576	; 0x100000
	movne	r0, #0
	ldrne	r1, _03800F8C	; =_038099A8
	strne	r2, [r1]
	bx	lr
_03800F88:	.word	0x04000214
_03800F8C:	.word	_038099A8

	arm_func_start CARD_CompareCardID
CARD_CompareCardID: ; 0x03800F90
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	ldr	r0, _03800FE8	; =0x027FFC10
	ldrh	r0, [r0]
	cmp	r0, #0
	ldreq	r0, _03800FEC	; =0x027FF800
	ldrne	r0, _03800FF0	; =0x027FFC00
	ldr	r0, [r0]
	str	r0, [sp]
	bl	CARDi_ReadRomID
	ldr	r1, [sp]
	cmp	r0, r1
	moveq	r0, #1
	movne	r0, #0
	cmp	r0, #0
	moveq	r2, #1
	movne	r2, #0
	ldr	r1, _03800FF4	; =_038099A8
	str	r2, [r1]
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_03800FE8:	.word	0x027FFC10
_03800FEC:	.word	0x027FF800
_03800FF0:	.word	0x027FFC00
_03800FF4:	.word	_038099A8

	arm_func_start CARD_IsPulledOut
CARD_IsPulledOut: ; 0x03800FF8
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	ldr	r0, _03801040	; =_038099A8
	ldr	r0, [r0]
	cmp	r0, #0
	bne	_0380102C
	ldr	r0, _03801044	; =0x027FFC1F
	ldrb	r0, [r0]
	ands	r0, r0, #1
	beq	_03801028
	bl	CARD_CompareCardID
	b	_0380102C
_03801028:
	bl	CARD_IsCardIreqLo
_0380102C:
	ldr	r0, _03801040	; =_038099A8
	ldr	r0, [r0]
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_03801040:	.word	_038099A8
_03801044:	.word	0x027FFC1F

	arm_func_start FUN_03801048
FUN_03801048: ; 0x03801048
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	and	r0, r1, #63	; 0x3f
	cmp	r0, #1
	bne	_03801064
	bl	FUN_03800E54
	b	_03801068
_03801064:
	bl	OS_Terminate
_03801068:
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr

	arm_func_start CARD_InitPulledOutCallback
CARD_InitPulledOutCallback: ; 0x03801074
	stmdb	sp!, {r4, r5, lr}
	sub	sp, sp, #4
	ldr	r0, _038010CC	; =_038099A4
	ldr	r1, [r0]
	cmp	r1, #0
	bne	_038010C0
	mov	r1, #1
	str	r1, [r0]
	bl	PXI_Init
	mov	r5, #14
	mov	r4, #0
_038010A0:
	mov	r0, r5
	mov	r1, r4
	bl	PXI_IsCallbackReady
	cmp	r0, #0
	beq	_038010A0
	mov	r0, #14
	ldr	r1, _038010D0	; =FUN_03801048
	bl	PXI_SetFifoRecvCallback
_038010C0:
	add	sp, sp, #4
	ldmia	sp!, {r4, r5, lr}
	bx	lr
_038010CC:	.word	_038099A4
_038010D0:	.word	FUN_03801048