summaryrefslogtreecommitdiff
path: root/arm9/asm/GX.s
blob: 1e6bdc88b9c23843c6878dd0a27aa70075fab1e4 (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
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
	.include "asm/macros.inc"
	.include "global.inc"

    .text

	arm_func_start GXx_SetMasterBrightness_
GXx_SetMasterBrightness_: ; 0x020C5978
	cmp r1, #0x0
	moveq r1, #0x0
	streqh r1, [r0, #0x0]
	bxeq lr
	cmp r1, #0x0
	orrgt r1, r1, #0x4000
	strgth r1, [r0, #0x0]
	rsble r1, r1, #0x0
	orrle r1, r1, #0x8000
	strleh r1, [r0, #0x0]
	bx lr

	arm_func_start GXS_SetGraphicsMode
GXS_SetGraphicsMode: ; 0x020C59A4
	ldr r2, _020C59BC ; =0x04001000
	ldr r1, [r2, #0x0]
	bic r1, r1, #0x7
	orr r0, r1, r0
	str r0, [r2, #0x0]
	bx lr
	.balign 4
_020C59BC: .word 0x04001000

	arm_func_start GX_SetGraphicsMode
GX_SetGraphicsMode: ; 0x020C59C0
	stmdb sp!, {lr}
	sub sp, sp, #0x4
	ldr r3, _020C5A28 ; =0x02106810
	mov lr, #0x4000000
	ldrh r12, [r3, #0x0]
	ldr lr, [lr, #0x0]
	ldr r3, _020C5A2C ; =0x021D33C0
	cmp r12, #0x0
	strh r0, [r3, #0x0]
	ldr r3, _020C5A30 ; =0xFFF0FFF0
	moveq r0, #0x0
	and r3, lr, r3
	orr r0, r3, r0, lsl #0x10
	orr r0, r1, r0
	orr r1, r0, r2, lsl #0x3
	mov r12, #0x4000000
	ldr r0, _020C5A2C ; =0x021D33C0
	str r1, [r12, #0x0]
	ldrh r0, [r0, #0x0]
	cmp r0, #0x0
	ldreq r0, _020C5A28 ; =0x02106810
	moveq r1, #0x0
	streqh r1, [r0, #0x0]
	add sp, sp, #0x4
	ldmia sp!, {lr}
	bx lr
	.balign 4
_020C5A28: .word 0x02106810
_020C5A2C: .word 0x021D33C0
_020C5A30: .word 0xFFF0FFF0

	arm_func_start GX_DispOn
GX_DispOn: ; 0x020C5A34
	ldr r0, _020C5A78 ; =0x021D33C0
	ldr r1, _020C5A7C ; =0x02106810
	ldrh r2, [r0, #0x0]
	mov r0, #0x1
	strh r0, [r1, #0x0]
	cmp r2, #0x0
	moveq r1, #0x4000000
	ldreq r0, [r1, #0x0]
	orreq r0, r0, #0x10000
	streq r0, [r1, #0x0]
	bxeq lr
	mov r1, #0x4000000
	ldr r0, [r1, #0x0]
	bic r0, r0, #0x30000
	orr r0, r0, r2, lsl #0x10
	str r0, [r1, #0x0]
	bx lr
	.balign 4
_020C5A78: .word 0x021D33C0
_020C5A7C: .word 0x02106810

	arm_func_start GX_DispOff
GX_DispOff: ; 0x020C5A80
	stmdb sp!, {lr}
	sub sp, sp, #0x4
	mov lr, #0x4000000
	ldr r12, [lr, #0x0]
	ldr r1, _020C5AC0 ; =0x02106810
	and r2, r12, #0x30000
	mov r3, #0x0
	ldr r0, _020C5AC4 ; =0x021D33C0
	mov r2, r2, lsr #0x10
	strh r3, [r1, #0x0]
	strh r2, [r0, #0x0]
	bic r0, r12, #0x30000
	str r0, [lr, #0x0]
	add sp, sp, #0x4
	ldmia sp!, {lr}
	bx lr
	.balign 4
_020C5AC0: .word 0x02106810
_020C5AC4: .word 0x021D33C0

	arm_func_start GX_VBlankIntr
GX_VBlankIntr: ; 0x020C5AC8
	ldr r2, _020C5AF4 ; =0x04000004
	cmp r0, #0x0
	ldrh r0, [r2, #0x0]
	ldrneh r1, [r2, #0x0]
	and r0, r0, #0x8
	orrne r1, r1, #0x8
	strneh r1, [r2, #0x0]
	ldreqh r1, [r2, #0x0]
	biceq r1, r1, #0x8
	streqh r1, [r2, #0x0]
	bx lr
	.balign 4
_020C5AF4: .word 0x04000004

	arm_func_start GX_HBlankIntr
GX_HBlankIntr: ; 0x020C5AF8
	ldr r2, _020C5B24 ; =0x04000004
	cmp r0, #0x0
	ldrh r0, [r2, #0x0]
	ldrneh r1, [r2, #0x0]
	and r0, r0, #0x10
	orrne r1, r1, #0x10
	strneh r1, [r2, #0x0]
	ldreqh r1, [r2, #0x0]
	biceq r1, r1, #0x10
	streqh r1, [r2, #0x0]
	bx lr
	.balign 4
_020C5B24: .word 0x04000004

	arm_func_start GX_Init
GX_Init: ; 0x020C5B28
	stmdb sp!, {r4-r6,lr}
	ldr r3, _020C5C68 ; =0x04000304
	ldr r0, _020C5C6C ; =0xFFFFFDF1
	ldrh r2, [r3, #0x0]
	ldr r1, _020C5C70 ; =0x0000020E
	orr r2, r2, #0x8000
	strh r2, [r3, #0x0]
	ldrh r2, [r3, #0x0]
	and r0, r2, r0
	orr r0, r0, r1
	strh r0, [r3, #0x0]
	ldrh r0, [r3, #0x0]
	orr r0, r0, #0x1
	strh r0, [r3, #0x0]
	bl GX_InitGXState
	ldr r5, _020C5C74 ; =0x021D33BC
	ldrh r0, [r5, #0x0]
	cmp r0, #0x0
	bne _020C5B9C
	mvn r4, #0x2
_020C5B78:
	bl OS_GetLockID
	mov r6, r0
	cmp r6, r4
	bne _020C5B8C
	bl OS_Terminate
_020C5B8C:
	strh r6, [r5, #0x0]
	ldrh r0, [r5, #0x0]
	cmp r0, #0x0
	beq _020C5B78
_020C5B9C:
	ldr r0, _020C5C78 ; =0x04000004
	mov r2, #0x0
	strh r2, [r0, #0x0]
	mov r1, #0x4000000
	ldr r0, _020C5C7C ; =0x02106814
	str r2, [r1, #0x0]
	ldr r0, [r0, #0x0]
	mvn r1, #0x0
	cmp r0, r1
	beq _020C5BF4
	ldr r1, _020C5C80 ; =0x04000008
	mov r3, #0x60
	bl MI_DmaFill32
	ldr r1, _020C5C84 ; =0x0400006C
	mov r2, #0x0
	ldr r0, _020C5C7C ; =0x02106814
	strh r2, [r1, #0x0]
	ldr r0, [r0, #0x0]
	ldr r1, _020C5C88 ; =0x04001000
	mov r3, #0x70
	bl MI_DmaFill32
	b _020C5C1C
_020C5BF4:
	ldr r1, _020C5C80 ; =0x04000008
	mov r0, r2
	mov r2, #0x60
	bl MIi_CpuClear32
	ldr r3, _020C5C84 ; =0x0400006C
	mov r0, #0x0
	ldr r1, _020C5C88 ; =0x04001000
	mov r2, #0x70
	strh r0, [r3, #0x0]
	bl MIi_CpuClear32
_020C5C1C:
	ldr r1, _020C5C8C ; =0x04000020
	mov r2, #0x100
	ldr r0, _020C5C90 ; =0x04000026
	strh r2, [r1, #0x0]
	ldr r1, _020C5C94 ; =0x04000030
	strh r2, [r0, #0x0]
	ldr r0, _020C5C98 ; =0x04000036
	strh r2, [r1, #0x0]
	ldr r1, _020C5C9C ; =0x04001020
	strh r2, [r0, #0x0]
	ldr r0, _020C5CA0 ; =0x04001026
	strh r2, [r1, #0x0]
	ldr r1, _020C5CA4 ; =0x04001030
	strh r2, [r0, #0x0]
	ldr r0, _020C5CA8 ; =0x04001036
	strh r2, [r1, #0x0]
	strh r2, [r0, #0x0]
	ldmia sp!, {r4-r6,lr}
	bx lr
	.balign 4
_020C5C68: .word 0x04000304
_020C5C6C: .word 0xFFFFFDF1
_020C5C70: .word 0x0000020E
_020C5C74: .word 0x021D33BC
_020C5C78: .word 0x04000004
_020C5C7C: .word 0x02106814
_020C5C80: .word 0x04000008
_020C5C84: .word 0x0400006C
_020C5C88: .word 0x04001000
_020C5C8C: .word 0x04000020
_020C5C90: .word 0x04000026
_020C5C94: .word 0x04000030
_020C5C98: .word 0x04000036
_020C5C9C: .word 0x04001020
_020C5CA0: .word 0x04001026
_020C5CA4: .word 0x04001030
_020C5CA8: .word 0x04001036