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
|