summaryrefslogtreecommitdiff
path: root/asm/SDK/AI/ai.s
blob: 00fa9b21822bfd3bd979569136be28608fd33463 (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
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global AIRegisterDMACallback
AIRegisterDMACallback:
/* 8028EB04 0028A764  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8028EB08 0028A768  7C 08 02 A6 */	mflr r0
/* 8028EB0C 0028A76C  90 01 00 14 */	stw r0, 0x14(r1)
/* 8028EB10 0028A770  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8028EB14 0028A774  93 C1 00 08 */	stw r30, 8(r1)
/* 8028EB18 0028A778  7C 7E 1B 78 */	mr r30, r3
/* 8028EB1C 0028A77C  83 ED AB 08 */	lwz r31, lbl_8063FDC8-_SDA_BASE_(r13)
/* 8028EB20 0028A780  4B FD FC 3D */	bl OSDisableInterrupts
/* 8028EB24 0028A784  93 CD AB 08 */	stw r30, lbl_8063FDC8-_SDA_BASE_(r13)
/* 8028EB28 0028A788  4B FD FC 5D */	bl OSRestoreInterrupts
/* 8028EB2C 0028A78C  7F E3 FB 78 */	mr r3, r31
/* 8028EB30 0028A790  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8028EB34 0028A794  83 C1 00 08 */	lwz r30, 8(r1)
/* 8028EB38 0028A798  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8028EB3C 0028A79C  7C 08 03 A6 */	mtlr r0
/* 8028EB40 0028A7A0  38 21 00 10 */	addi r1, r1, 0x10
/* 8028EB44 0028A7A4  4E 80 00 20 */	blr

.global AIInitDMA
AIInitDMA:
/* 8028EB48 0028A7A8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8028EB4C 0028A7AC  7C 08 02 A6 */	mflr r0
/* 8028EB50 0028A7B0  90 01 00 14 */	stw r0, 0x14(r1)
/* 8028EB54 0028A7B4  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8028EB58 0028A7B8  7C 9F 23 78 */	mr r31, r4
/* 8028EB5C 0028A7BC  93 C1 00 08 */	stw r30, 8(r1)
/* 8028EB60 0028A7C0  7C 7E 1B 78 */	mr r30, r3
/* 8028EB64 0028A7C4  4B FD FB F9 */	bl OSDisableInterrupts
/* 8028EB68 0028A7C8  3C E0 CC 00 */	lis r7, 0xCC005030@ha
/* 8028EB6C 0028A7CC  57 C5 84 3E */	srwi r5, r30, 0x10
/* 8028EB70 0028A7D0  A0 C7 50 30 */	lhz r6, 0xCC005030@l(r7)
/* 8028EB74 0028A7D4  57 C4 04 3E */	clrlwi r4, r30, 0x10
/* 8028EB78 0028A7D8  57 E0 DC 3E */	rlwinm r0, r31, 0x1b, 0x10, 0x1f
/* 8028EB7C 0028A7DC  54 C6 00 24 */	rlwinm r6, r6, 0, 0, 0x12
/* 8028EB80 0028A7E0  7C C5 2B 78 */	or r5, r6, r5
/* 8028EB84 0028A7E4  B0 A7 50 30 */	sth r5, 0x5030(r7)
/* 8028EB88 0028A7E8  A0 A7 50 32 */	lhz r5, 0x5032(r7)
/* 8028EB8C 0028A7EC  54 A5 06 DE */	rlwinm r5, r5, 0, 0x1b, 0xf
/* 8028EB90 0028A7F0  7C A4 23 78 */	or r4, r5, r4
/* 8028EB94 0028A7F4  B0 87 50 32 */	sth r4, 0x5032(r7)
/* 8028EB98 0028A7F8  A0 87 50 36 */	lhz r4, 0x5036(r7)
/* 8028EB9C 0028A7FC  54 84 00 20 */	rlwinm r4, r4, 0, 0, 0x10
/* 8028EBA0 0028A800  7C 80 03 78 */	or r0, r4, r0
/* 8028EBA4 0028A804  B0 07 50 36 */	sth r0, 0x5036(r7)
/* 8028EBA8 0028A808  4B FD FB DD */	bl OSRestoreInterrupts
/* 8028EBAC 0028A80C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8028EBB0 0028A810  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8028EBB4 0028A814  83 C1 00 08 */	lwz r30, 8(r1)
/* 8028EBB8 0028A818  7C 08 03 A6 */	mtlr r0
/* 8028EBBC 0028A81C  38 21 00 10 */	addi r1, r1, 0x10
/* 8028EBC0 0028A820  4E 80 00 20 */	blr

.global AIStartDMA
AIStartDMA:
/* 8028EBC4 0028A824  3C 60 CC 00 */	lis r3, 0xCC005036@ha
/* 8028EBC8 0028A828  A0 03 50 36 */	lhz r0, 0xCC005036@l(r3)
/* 8028EBCC 0028A82C  60 00 80 00 */	ori r0, r0, 0x8000
/* 8028EBD0 0028A830  B0 03 50 36 */	sth r0, 0x5036(r3)
/* 8028EBD4 0028A834  4E 80 00 20 */	blr

.global AIGetDMABytesLeft
AIGetDMABytesLeft:
/* 8028EBD8 0028A838  3C 60 CC 00 */	lis r3, 0xCC00503A@ha
/* 8028EBDC 0028A83C  A0 03 50 3A */	lhz r0, 0xCC00503A@l(r3)
/* 8028EBE0 0028A840  54 03 2B 34 */	rlwinm r3, r0, 5, 0xc, 0x1a
/* 8028EBE4 0028A844  4E 80 00 20 */	blr

.global AIInit
AIInit:
/* 8028EBE8 0028A848  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8028EBEC 0028A84C  7C 08 02 A6 */	mflr r0
/* 8028EBF0 0028A850  90 01 00 24 */	stw r0, 0x24(r1)
/* 8028EBF4 0028A854  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8028EBF8 0028A858  7C 7F 1B 78 */	mr r31, r3
/* 8028EBFC 0028A85C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8028EC00 0028A860  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8028EC04 0028A864  80 0D AA D0 */	lwz r0, lbl_8063FD90-_SDA_BASE_(r13)
/* 8028EC08 0028A868  2C 00 00 01 */	cmpwi r0, 1
/* 8028EC0C 0028A86C  41 82 01 40 */	beq lbl_8028ED4C
/* 8028EC10 0028A870  80 6D 88 E0 */	lwz r3, lbl_8063DBA0-_SDA_BASE_(r13)
/* 8028EC14 0028A874  4B FD AA 3D */	bl OSRegisterVersion
/* 8028EC18 0028A878  3C 60 80 00 */	lis r3, 0x800000F8@ha
/* 8028EC1C 0028A87C  3C 80 43 1C */	lis r4, 0x431BDE83@ha
/* 8028EC20 0028A880  80 03 00 F8 */	lwz r0, 0x800000F8@l(r3)
/* 8028EC24 0028A884  38 E0 00 00 */	li r7, 0
/* 8028EC28 0028A888  3C A0 10 62 */	lis r5, 0x10624DD3@ha
/* 8028EC2C 0028A88C  38 84 DE 83 */	addi r4, r4, 0x431BDE83@l
/* 8028EC30 0028A890  54 06 F0 BE */	srwi r6, r0, 2
/* 8028EC34 0028A894  3C 60 00 01 */	lis r3, 0x0000A428@ha
/* 8028EC38 0028A898  7C C4 30 16 */	mulhwu r6, r4, r6
/* 8028EC3C 0028A89C  39 25 4D D3 */	addi r9, r5, 0x10624DD3@l
/* 8028EC40 0028A8A0  38 03 A4 28 */	addi r0, r3, 0x0000A428@l
/* 8028EC44 0028A8A4  90 ED AA F8 */	stw r7, lbl_8063FDB8-_SDA_BASE_(r13)
/* 8028EC48 0028A8A8  38 83 A4 10 */	addi r4, r3, -23536
/* 8028EC4C 0028A8AC  38 63 F6 18 */	addi r3, r3, -2536
/* 8028EC50 0028A8B0  54 CA 8B FE */	srwi r10, r6, 0xf
/* 8028EC54 0028A8B4  90 ED AA F0 */	stw r7, lbl_8063FDB0-_SDA_BASE_(r13)
/* 8028EC58 0028A8B8  7C CA 01 D6 */	mullw r6, r10, r0
/* 8028EC5C 0028A8BC  3F C0 CD 00 */	lis r30, 0xCD006C00@ha
/* 8028EC60 0028A8C0  90 ED AA E8 */	stw r7, lbl_8063FDA8-_SDA_BASE_(r13)
/* 8028EC64 0028A8C4  38 00 FF EA */	li r0, -22
/* 8028EC68 0028A8C8  90 ED AA E0 */	stw r7, lbl_8063FDA0-_SDA_BASE_(r13)
/* 8028EC6C 0028A8CC  7C AA 21 D6 */	mullw r5, r10, r4
/* 8028EC70 0028A8D0  90 ED AA D8 */	stw r7, lbl_8063FD98-_SDA_BASE_(r13)
/* 8028EC74 0028A8D4  7C 8A 19 D6 */	mullw r4, r10, r3
/* 8028EC78 0028A8D8  1D 0A 7B 24 */	mulli r8, r10, 0x7b24
/* 8028EC7C 0028A8DC  1C 6A 0B B8 */	mulli r3, r10, 0xbb8
/* 8028EC80 0028A8E0  7D 09 40 16 */	mulhwu r8, r9, r8
/* 8028EC84 0028A8E4  7C C9 30 16 */	mulhwu r6, r9, r6
/* 8028EC88 0028A8E8  55 08 BA 7E */	srwi r8, r8, 9
/* 8028EC8C 0028A8EC  91 0D AA FC */	stw r8, lbl_8063FDBC-_SDA_BASE_(r13)
/* 8028EC90 0028A8F0  7C A9 28 16 */	mulhwu r5, r9, r5
/* 8028EC94 0028A8F4  54 C6 BA 7E */	srwi r6, r6, 9
/* 8028EC98 0028A8F8  90 CD AA F4 */	stw r6, lbl_8063FDB4-_SDA_BASE_(r13)
/* 8028EC9C 0028A8FC  7C 89 20 16 */	mulhwu r4, r9, r4
/* 8028ECA0 0028A900  54 A5 BA 7E */	srwi r5, r5, 9
/* 8028ECA4 0028A904  90 AD AA EC */	stw r5, lbl_8063FDAC-_SDA_BASE_(r13)
/* 8028ECA8 0028A908  7C 69 18 16 */	mulhwu r3, r9, r3
/* 8028ECAC 0028A90C  54 84 BA 7E */	srwi r4, r4, 9
/* 8028ECB0 0028A910  90 8D AA E4 */	stw r4, lbl_8063FDA4-_SDA_BASE_(r13)
/* 8028ECB4 0028A914  54 63 BA 7E */	srwi r3, r3, 9
/* 8028ECB8 0028A918  90 6D AA DC */	stw r3, lbl_8063FD9C-_SDA_BASE_(r13)
/* 8028ECBC 0028A91C  80 7E 6C 00 */	lwz r3, 0xCD006C00@l(r30)
/* 8028ECC0 0028A920  7C 60 00 38 */	and r0, r3, r0
/* 8028ECC4 0028A924  90 1E 6C 00 */	stw r0, 0x6c00(r30)
/* 8028ECC8 0028A928  90 FE 6C 04 */	stw r7, 0x6c04(r30)
/* 8028ECCC 0028A92C  90 FE 6C 0C */	stw r7, 0x6c0c(r30)
/* 8028ECD0 0028A930  80 1E 6C 00 */	lwz r0, 0x6c00(r30)
/* 8028ECD4 0028A934  54 00 06 F2 */	rlwinm r0, r0, 0, 0x1b, 0x19
/* 8028ECD8 0028A938  60 00 00 20 */	ori r0, r0, 0x20
/* 8028ECDC 0028A93C  90 1E 6C 00 */	stw r0, 0x6c00(r30)
/* 8028ECE0 0028A940  80 1E 6C 00 */	lwz r0, 0x6c00(r30)
/* 8028ECE4 0028A944  54 00 D7 FE */	rlwinm r0, r0, 0x1a, 0x1f, 0x1f
/* 8028ECE8 0028A948  68 00 00 01 */	xori r0, r0, 1
/* 8028ECEC 0028A94C  2C 00 00 00 */	cmpwi r0, 0
/* 8028ECF0 0028A950  41 82 00 30 */	beq lbl_8028ED20
/* 8028ECF4 0028A954  80 1E 6C 00 */	lwz r0, 0x6c00(r30)
/* 8028ECF8 0028A958  54 00 06 B0 */	rlwinm r0, r0, 0, 0x1a, 0x18
/* 8028ECFC 0028A95C  90 1E 6C 00 */	stw r0, 0x6c00(r30)
/* 8028ED00 0028A960  4B FD FA 5D */	bl OSDisableInterrupts
/* 8028ED04 0028A964  7C 7D 1B 78 */	mr r29, r3
/* 8028ED08 0028A968  48 00 01 6D */	bl __AI_SRC_INIT
/* 8028ED0C 0028A96C  80 1E 6C 00 */	lwz r0, 0x6c00(r30)
/* 8028ED10 0028A970  7F A3 EB 78 */	mr r3, r29
/* 8028ED14 0028A974  60 00 00 40 */	ori r0, r0, 0x40
/* 8028ED18 0028A978  90 1E 6C 00 */	stw r0, 0x6c00(r30)
/* 8028ED1C 0028A97C  4B FD FA 69 */	bl OSRestoreInterrupts
lbl_8028ED20:
/* 8028ED20 0028A980  38 00 00 00 */	li r0, 0
/* 8028ED24 0028A984  3C 80 80 29 */	lis r4, __AIDHandler@ha
/* 8028ED28 0028A988  90 0D AB 08 */	stw r0, lbl_8063FDC8-_SDA_BASE_(r13)
/* 8028ED2C 0028A98C  38 84 ED 68 */	addi r4, r4, __AIDHandler@l
/* 8028ED30 0028A990  38 60 00 05 */	li r3, 5
/* 8028ED34 0028A994  93 ED AB 04 */	stw r31, lbl_8063FDC4-_SDA_BASE_(r13)
/* 8028ED38 0028A998  4B FD FA 71 */	bl __OSSetInterruptHandler
/* 8028ED3C 0028A99C  3C 60 04 00 */	lis r3, 0x400
/* 8028ED40 0028A9A0  4B FD FE 2D */	bl __OSUnmaskInterrupts
/* 8028ED44 0028A9A4  38 00 00 01 */	li r0, 1
/* 8028ED48 0028A9A8  90 0D AA D0 */	stw r0, lbl_8063FD90-_SDA_BASE_(r13)
lbl_8028ED4C:
/* 8028ED4C 0028A9AC  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8028ED50 0028A9B0  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8028ED54 0028A9B4  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8028ED58 0028A9B8  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8028ED5C 0028A9BC  7C 08 03 A6 */	mtlr r0
/* 8028ED60 0028A9C0  38 21 00 20 */	addi r1, r1, 0x20
/* 8028ED64 0028A9C4  4E 80 00 20 */	blr
__AIDHandler:
/* 8028ED68 0028A9C8  94 21 FD 20 */	stwu r1, -0x2e0(r1)
/* 8028ED6C 0028A9CC  7C 08 02 A6 */	mflr r0
/* 8028ED70 0028A9D0  3C C0 CC 00 */	lis r6, 0xCC00500A@ha
/* 8028ED74 0028A9D4  90 01 02 E4 */	stw r0, 0x2e4(r1)
/* 8028ED78 0028A9D8  38 00 FF 5F */	li r0, -161
/* 8028ED7C 0028A9DC  38 61 00 08 */	addi r3, r1, 8
/* 8028ED80 0028A9E0  93 E1 02 DC */	stw r31, 0x2dc(r1)
/* 8028ED84 0028A9E4  7C 9F 23 78 */	mr r31, r4
/* 8028ED88 0028A9E8  A0 A6 50 0A */	lhz r5, 0xCC00500A@l(r6)
/* 8028ED8C 0028A9EC  7C A0 00 38 */	and r0, r5, r0
/* 8028ED90 0028A9F0  60 00 00 08 */	ori r0, r0, 8
/* 8028ED94 0028A9F4  B0 06 50 0A */	sth r0, 0x500a(r6)
/* 8028ED98 0028A9F8  4B FD C2 F9 */	bl OSClearContext
/* 8028ED9C 0028A9FC  38 61 00 08 */	addi r3, r1, 8
/* 8028EDA0 0028AA00  4B FD C0 C9 */	bl OSSetCurrentContext
/* 8028EDA4 0028AA04  80 6D AB 08 */	lwz r3, lbl_8063FDC8-_SDA_BASE_(r13)
/* 8028EDA8 0028AA08  2C 03 00 00 */	cmpwi r3, 0
/* 8028EDAC 0028AA0C  41 82 00 40 */	beq lbl_8028EDEC
/* 8028EDB0 0028AA10  80 0D AA D4 */	lwz r0, lbl_8063FD94-_SDA_BASE_(r13)
/* 8028EDB4 0028AA14  2C 00 00 00 */	cmpwi r0, 0
/* 8028EDB8 0028AA18  40 82 00 34 */	bne lbl_8028EDEC
/* 8028EDBC 0028AA1C  80 0D AB 04 */	lwz r0, lbl_8063FDC4-_SDA_BASE_(r13)
/* 8028EDC0 0028AA20  38 80 00 01 */	li r4, 1
/* 8028EDC4 0028AA24  90 8D AA D4 */	stw r4, lbl_8063FD94-_SDA_BASE_(r13)
/* 8028EDC8 0028AA28  2C 00 00 00 */	cmpwi r0, 0
/* 8028EDCC 0028AA2C  41 82 00 0C */	beq lbl_8028EDD8
/* 8028EDD0 0028AA30  48 00 00 41 */	bl __AICallbackStackSwitch
/* 8028EDD4 0028AA34  48 00 00 10 */	b lbl_8028EDE4
lbl_8028EDD8:
/* 8028EDD8 0028AA38  7C 6C 1B 78 */	mr r12, r3
/* 8028EDDC 0028AA3C  7D 89 03 A6 */	mtctr r12
/* 8028EDE0 0028AA40  4E 80 04 21 */	bctrl
lbl_8028EDE4:
/* 8028EDE4 0028AA44  38 00 00 00 */	li r0, 0
/* 8028EDE8 0028AA48  90 0D AA D4 */	stw r0, lbl_8063FD94-_SDA_BASE_(r13)
lbl_8028EDEC:
/* 8028EDEC 0028AA4C  38 61 00 08 */	addi r3, r1, 8
/* 8028EDF0 0028AA50  4B FD C2 A1 */	bl OSClearContext
/* 8028EDF4 0028AA54  7F E3 FB 78 */	mr r3, r31
/* 8028EDF8 0028AA58  4B FD C0 71 */	bl OSSetCurrentContext
/* 8028EDFC 0028AA5C  80 01 02 E4 */	lwz r0, 0x2e4(r1)
/* 8028EE00 0028AA60  83 E1 02 DC */	lwz r31, 0x2dc(r1)
/* 8028EE04 0028AA64  7C 08 03 A6 */	mtlr r0
/* 8028EE08 0028AA68  38 21 02 E0 */	addi r1, r1, 0x2e0
/* 8028EE0C 0028AA6C  4E 80 00 20 */	blr

.global __AICallbackStackSwitch
__AICallbackStackSwitch:
/* 8028EE10 0028AA70  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8028EE14 0028AA74  7C 08 02 A6 */	mflr r0
/* 8028EE18 0028AA78  90 01 00 14 */	stw r0, 0x14(r1)
/* 8028EE1C 0028AA7C  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8028EE20 0028AA80  7C 3F 0B 78 */	mr r31, r1
/* 8028EE24 0028AA84  7C 7F 1B 78 */	mr r31, r3
/* 8028EE28 0028AA88  3C A0 80 64 */	lis r5, lbl_8063FDC0@ha
/* 8028EE2C 0028AA8C  38 A5 FD C0 */	addi r5, r5, lbl_8063FDC0@l
/* 8028EE30 0028AA90  90 25 00 00 */	stw r1, 0(r5)
/* 8028EE34 0028AA94  3C A0 80 64 */	lis r5, lbl_8063FDC4@ha
/* 8028EE38 0028AA98  38 A5 FD C4 */	addi r5, r5, lbl_8063FDC4@l
/* 8028EE3C 0028AA9C  80 25 00 00 */	lwz r1, 0(r5)
/* 8028EE40 0028AAA0  38 21 FF F8 */	addi r1, r1, -8
/* 8028EE44 0028AAA4  7F E8 03 A6 */	mtlr r31
/* 8028EE48 0028AAA8  4E 80 00 21 */	blrl
/* 8028EE4C 0028AAAC  3C A0 80 64 */	lis r5, lbl_8063FDC0@ha
/* 8028EE50 0028AAB0  38 A5 FD C0 */	addi r5, r5, lbl_8063FDC0@l
/* 8028EE54 0028AAB4  80 25 00 00 */	lwz r1, 0(r5)
/* 8028EE58 0028AAB8  7C 2A 0B 78 */	mr r10, r1
/* 8028EE5C 0028AABC  83 EA 00 0C */	lwz r31, 0xc(r10)
/* 8028EE60 0028AAC0  81 41 00 00 */	lwz r10, 0(r1)
/* 8028EE64 0028AAC4  80 0A 00 04 */	lwz r0, 4(r10)
/* 8028EE68 0028AAC8  7D 41 53 78 */	mr r1, r10
/* 8028EE6C 0028AACC  7C 08 03 A6 */	mtlr r0
/* 8028EE70 0028AAD0  4E 80 00 20 */	blr

.global __AI_SRC_INIT
__AI_SRC_INIT:
/* 8028EE74 0028AAD4  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8028EE78 0028AAD8  7C 08 02 A6 */	mflr r0
/* 8028EE7C 0028AADC  90 01 00 24 */	stw r0, 0x24(r1)
/* 8028EE80 0028AAE0  39 61 00 20 */	addi r11, r1, 0x20
/* 8028EE84 0028AAE4  4B F3 82 A5 */	bl _savegpr_27
/* 8028EE88 0028AAE8  38 80 00 00 */	li r4, 0
/* 8028EE8C 0028AAEC  38 60 00 00 */	li r3, 0
/* 8028EE90 0028AAF0  38 00 00 00 */	li r0, 0
/* 8028EE94 0028AAF4  3B A0 00 00 */	li r29, 0
/* 8028EE98 0028AAF8  3B C0 00 00 */	li r30, 0
/* 8028EE9C 0028AAFC  3F E0 CD 00 */	lis r31, 0xcd00
/* 8028EEA0 0028AB00  48 00 01 50 */	b lbl_8028EFF0
lbl_8028EEA4:
/* 8028EEA4 0028AB04  80 1F 6C 00 */	lwz r0, 0x6c00(r31)
/* 8028EEA8 0028AB08  54 00 06 F2 */	rlwinm r0, r0, 0, 0x1b, 0x19
/* 8028EEAC 0028AB0C  60 00 00 20 */	ori r0, r0, 0x20
/* 8028EEB0 0028AB10  90 1F 6C 00 */	stw r0, 0x6c00(r31)
/* 8028EEB4 0028AB14  80 1F 6C 00 */	lwz r0, 0x6c00(r31)
/* 8028EEB8 0028AB18  54 00 07 FA */	rlwinm r0, r0, 0, 0x1f, 0x1d
/* 8028EEBC 0028AB1C  90 1F 6C 00 */	stw r0, 0x6c00(r31)
/* 8028EEC0 0028AB20  80 1F 6C 00 */	lwz r0, 0x6c00(r31)
/* 8028EEC4 0028AB24  54 00 00 3C */	rlwinm r0, r0, 0, 0, 0x1e
/* 8028EEC8 0028AB28  60 00 00 01 */	ori r0, r0, 1
/* 8028EECC 0028AB2C  90 1F 6C 00 */	stw r0, 0x6c00(r31)
/* 8028EED0 0028AB30  80 1F 6C 08 */	lwz r0, 0x6c08(r31)
/* 8028EED4 0028AB34  54 03 00 7E */	clrlwi r3, r0, 1
lbl_8028EED8:
/* 8028EED8 0028AB38  80 1F 6C 08 */	lwz r0, 0x6c08(r31)
/* 8028EEDC 0028AB3C  54 00 00 7E */	clrlwi r0, r0, 1
/* 8028EEE0 0028AB40  7C 03 00 40 */	cmplw r3, r0
/* 8028EEE4 0028AB44  41 82 FF F4 */	beq lbl_8028EED8
/* 8028EEE8 0028AB48  4B FE 38 D1 */	bl OSGetTime
/* 8028EEEC 0028AB4C  80 1F 6C 00 */	lwz r0, 0x6c00(r31)
/* 8028EEF0 0028AB50  7C 9B 23 78 */	mr r27, r4
/* 8028EEF4 0028AB54  7C 7C 1B 78 */	mr r28, r3
/* 8028EEF8 0028AB58  54 00 07 FA */	rlwinm r0, r0, 0, 0x1f, 0x1d
/* 8028EEFC 0028AB5C  60 00 00 02 */	ori r0, r0, 2
/* 8028EF00 0028AB60  90 1F 6C 00 */	stw r0, 0x6c00(r31)
/* 8028EF04 0028AB64  80 1F 6C 00 */	lwz r0, 0x6c00(r31)
/* 8028EF08 0028AB68  54 00 00 3C */	rlwinm r0, r0, 0, 0, 0x1e
/* 8028EF0C 0028AB6C  60 00 00 01 */	ori r0, r0, 1
/* 8028EF10 0028AB70  90 1F 6C 00 */	stw r0, 0x6c00(r31)
/* 8028EF14 0028AB74  80 1F 6C 08 */	lwz r0, 0x6c08(r31)
/* 8028EF18 0028AB78  54 03 00 7E */	clrlwi r3, r0, 1
lbl_8028EF1C:
/* 8028EF1C 0028AB7C  80 1F 6C 08 */	lwz r0, 0x6c08(r31)
/* 8028EF20 0028AB80  54 00 00 7E */	clrlwi r0, r0, 1
/* 8028EF24 0028AB84  7C 03 00 40 */	cmplw r3, r0
/* 8028EF28 0028AB88  41 82 FF F4 */	beq lbl_8028EF1C
/* 8028EF2C 0028AB8C  4B FE 38 8D */	bl OSGetTime
/* 8028EF30 0028AB90  80 1F 6C 00 */	lwz r0, 0x6c00(r31)
/* 8028EF34 0028AB94  7D 1B 20 10 */	subfc r8, r27, r4
/* 8028EF38 0028AB98  7C BC 19 10 */	subfe r5, r28, r3
/* 8028EF3C 0028AB9C  54 00 07 FA */	rlwinm r0, r0, 0, 0x1f, 0x1d
/* 8028EF40 0028ABA0  90 1F 6C 00 */	stw r0, 0x6c00(r31)
/* 8028EF44 0028ABA4  6C A7 80 00 */	xoris r7, r5, 0x8000
/* 8028EF48 0028ABA8  80 1F 6C 00 */	lwz r0, 0x6c00(r31)
/* 8028EF4C 0028ABAC  54 00 00 3C */	rlwinm r0, r0, 0, 0, 0x1e
/* 8028EF50 0028ABB0  90 1F 6C 00 */	stw r0, 0x6c00(r31)
/* 8028EF54 0028ABB4  81 4D AA DC */	lwz r10, lbl_8063FD9C-_SDA_BASE_(r13)
/* 8028EF58 0028ABB8  81 8D AA FC */	lwz r12, lbl_8063FDBC-_SDA_BASE_(r13)
/* 8028EF5C 0028ABBC  81 2D AA D8 */	lwz r9, lbl_8063FD98-_SDA_BASE_(r13)
/* 8028EF60 0028ABC0  81 6D AA F8 */	lwz r11, lbl_8063FDB8-_SDA_BASE_(r13)
/* 8028EF64 0028ABC4  7C CA 60 10 */	subfc r6, r10, r12
/* 8028EF68 0028ABC8  7C 09 59 10 */	subfe r0, r9, r11
/* 8028EF6C 0028ABCC  6C 05 80 00 */	xoris r5, r0, 0x8000
/* 8028EF70 0028ABD0  7C 06 40 10 */	subfc r0, r6, r8
/* 8028EF74 0028ABD4  7C A5 39 10 */	subfe r5, r5, r7
/* 8028EF78 0028ABD8  7C A7 39 10 */	subfe r5, r7, r7
/* 8028EF7C 0028ABDC  7C A5 00 D1 */	neg. r5, r5
/* 8028EF80 0028ABE0  41 82 00 14 */	beq lbl_8028EF94
/* 8028EF84 0028ABE4  83 CD AA E8 */	lwz r30, lbl_8063FDA8-_SDA_BASE_(r13)
/* 8028EF88 0028ABE8  38 00 00 01 */	li r0, 1
/* 8028EF8C 0028ABEC  83 AD AA EC */	lwz r29, lbl_8063FDAC-_SDA_BASE_(r13)
/* 8028EF90 0028ABF0  48 00 00 60 */	b lbl_8028EFF0
lbl_8028EF94:
/* 8028EF94 0028ABF4  7C CC 50 14 */	addc r6, r12, r10
/* 8028EF98 0028ABF8  7C 0B 49 14 */	adde r0, r11, r9
/* 8028EF9C 0028ABFC  6C 05 80 00 */	xoris r5, r0, 0x8000
/* 8028EFA0 0028AC00  7C 06 40 10 */	subfc r0, r6, r8
/* 8028EFA4 0028AC04  7C A5 39 10 */	subfe r5, r5, r7
/* 8028EFA8 0028AC08  7C A7 39 10 */	subfe r5, r7, r7
/* 8028EFAC 0028AC0C  7C A5 00 D1 */	neg. r5, r5
/* 8028EFB0 0028AC10  40 82 00 3C */	bne lbl_8028EFEC
/* 8028EFB4 0028AC14  80 AD AA F4 */	lwz r5, lbl_8063FDB4-_SDA_BASE_(r13)
/* 8028EFB8 0028AC18  80 0D AA F0 */	lwz r0, lbl_8063FDB0-_SDA_BASE_(r13)
/* 8028EFBC 0028AC1C  7C CA 28 10 */	subfc r6, r10, r5
/* 8028EFC0 0028AC20  7C 09 01 10 */	subfe r0, r9, r0
/* 8028EFC4 0028AC24  6C 05 80 00 */	xoris r5, r0, 0x8000
/* 8028EFC8 0028AC28  7C 06 40 10 */	subfc r0, r6, r8
/* 8028EFCC 0028AC2C  7C A5 39 10 */	subfe r5, r5, r7
/* 8028EFD0 0028AC30  7C A7 39 10 */	subfe r5, r7, r7
/* 8028EFD4 0028AC34  7C A5 00 D1 */	neg. r5, r5
/* 8028EFD8 0028AC38  41 82 00 14 */	beq lbl_8028EFEC
/* 8028EFDC 0028AC3C  83 CD AA E0 */	lwz r30, lbl_8063FDA0-_SDA_BASE_(r13)
/* 8028EFE0 0028AC40  38 00 00 01 */	li r0, 1
/* 8028EFE4 0028AC44  83 AD AA E4 */	lwz r29, lbl_8063FDA4-_SDA_BASE_(r13)
/* 8028EFE8 0028AC48  48 00 00 08 */	b lbl_8028EFF0
lbl_8028EFEC:
/* 8028EFEC 0028AC4C  38 00 00 00 */	li r0, 0
lbl_8028EFF0:
/* 8028EFF0 0028AC50  2C 00 00 00 */	cmpwi r0, 0
/* 8028EFF4 0028AC54  41 82 FE B0 */	beq lbl_8028EEA4
/* 8028EFF8 0028AC58  7F E4 E8 14 */	addc r31, r4, r29
/* 8028EFFC 0028AC5C  7F A3 F1 14 */	adde r29, r3, r30
lbl_8028F000:
/* 8028F000 0028AC60  4B FE 37 B9 */	bl OSGetTime
/* 8028F004 0028AC64  6C 60 80 00 */	xoris r0, r3, 0x8000
/* 8028F008 0028AC68  6F A5 80 00 */	xoris r5, r29, 0x8000
/* 8028F00C 0028AC6C  7C 7F 20 10 */	subfc r3, r31, r4
/* 8028F010 0028AC70  7C A5 01 10 */	subfe r5, r5, r0
/* 8028F014 0028AC74  7C A0 01 10 */	subfe r5, r0, r0
/* 8028F018 0028AC78  7C A5 00 D1 */	neg. r5, r5
/* 8028F01C 0028AC7C  40 82 FF E4 */	bne lbl_8028F000
/* 8028F020 0028AC80  39 61 00 20 */	addi r11, r1, 0x20
/* 8028F024 0028AC84  4B F3 81 51 */	bl _restgpr_27
/* 8028F028 0028AC88  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8028F02C 0028AC8C  7C 08 03 A6 */	mtlr r0
/* 8028F030 0028AC90  38 21 00 20 */	addi r1, r1, 0x20
/* 8028F034 0028AC94  4E 80 00 20 */	blr