summaryrefslogtreecommitdiff
path: root/asm/SDK/DWC/gamespy/gpi.s
blob: a83f3c67c74035bc942e88f5959b82d82e318ff1 (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
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
.include "macros.inc"

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

.global gpiResetProfile
gpiResetProfile:
/* 8033DD6C 003399CC  38 00 00 00 */	li r0, 0
/* 8033DD70 003399D0  38 60 00 01 */	li r3, 1
/* 8033DD74 003399D4  90 04 00 08 */	stw r0, 8(r4)
/* 8033DD78 003399D8  90 04 00 10 */	stw r0, 0x10(r4)
/* 8033DD7C 003399DC  90 04 00 14 */	stw r0, 0x14(r4)
/* 8033DD80 003399E0  90 04 00 18 */	stw r0, 0x18(r4)
/* 8033DD84 003399E4  4E 80 00 20 */	blr

.global gpiReset
gpiReset:
/* 8033DD88 003399E8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8033DD8C 003399EC  7C 08 02 A6 */	mflr r0
/* 8033DD90 003399F0  90 01 00 24 */	stw r0, 0x24(r1)
/* 8033DD94 003399F4  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8033DD98 003399F8  3B E0 FF FF */	li r31, -1
/* 8033DD9C 003399FC  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8033DDA0 00339A00  3B C0 00 00 */	li r30, 0
/* 8033DDA4 00339A04  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8033DDA8 00339A08  93 81 00 10 */	stw r28, 0x10(r1)
/* 8033DDAC 00339A0C  7C 7C 1B 78 */	mr r28, r3
/* 8033DDB0 00339A10  83 A3 00 00 */	lwz r29, 0(r3)
/* 8033DDB4 00339A14  9B DD 01 10 */	stb r30, 0x110(r29)
/* 8033DDB8 00339A18  9B DD 01 2F */	stb r30, 0x12f(r29)
/* 8033DDBC 00339A1C  9B DD 01 44 */	stb r30, 0x144(r29)
/* 8033DDC0 00339A20  93 FD 01 F0 */	stw r31, 0x1f0(r29)
/* 8033DDC4 00339A24  93 DD 01 F4 */	stw r30, 0x1f4(r29)
/* 8033DDC8 00339A28  93 DD 02 00 */	stw r30, 0x200(r29)
/* 8033DDCC 00339A2C  93 DD 02 04 */	stw r30, 0x204(r29)
/* 8033DDD0 00339A30  93 DD 01 FC */	stw r30, 0x1fc(r29)
/* 8033DDD4 00339A34  80 7D 01 F8 */	lwz r3, 0x1f8(r29)
/* 8033DDD8 00339A38  4B FF B5 61 */	bl gsifree
/* 8033DDDC 00339A3C  93 DD 01 F8 */	stw r30, 0x1f8(r29)
/* 8033DDE0 00339A40  93 DD 02 0C */	stw r30, 0x20c(r29)
/* 8033DDE4 00339A44  80 7D 02 08 */	lwz r3, 0x208(r29)
/* 8033DDE8 00339A48  4B FF B5 51 */	bl gsifree
/* 8033DDEC 00339A4C  93 DD 02 08 */	stw r30, 0x208(r29)
/* 8033DDF0 00339A50  93 DD 02 18 */	stw r30, 0x218(r29)
/* 8033DDF4 00339A54  93 DD 02 1C */	stw r30, 0x21c(r29)
/* 8033DDF8 00339A58  93 DD 02 14 */	stw r30, 0x214(r29)
/* 8033DDFC 00339A5C  80 7D 02 10 */	lwz r3, 0x210(r29)
/* 8033DE00 00339A60  4B FF B5 39 */	bl gsifree
/* 8033DE04 00339A64  93 DD 02 10 */	stw r30, 0x210(r29)
/* 8033DE08 00339A68  93 DD 04 64 */	stw r30, 0x464(r29)
/* 8033DE0C 00339A6C  93 DD 04 68 */	stw r30, 0x468(r29)
/* 8033DE10 00339A70  93 DD 04 60 */	stw r30, 0x460(r29)
/* 8033DE14 00339A74  80 7D 04 5C */	lwz r3, 0x45c(r29)
/* 8033DE18 00339A78  4B FF B5 21 */	bl gsifree
/* 8033DE1C 00339A7C  93 DD 04 5C */	stw r30, 0x45c(r29)
/* 8033DE20 00339A80  93 DD 04 74 */	stw r30, 0x474(r29)
/* 8033DE24 00339A84  93 DD 04 78 */	stw r30, 0x478(r29)
/* 8033DE28 00339A88  93 DD 04 70 */	stw r30, 0x470(r29)
/* 8033DE2C 00339A8C  80 7D 04 6C */	lwz r3, 0x46c(r29)
/* 8033DE30 00339A90  4B FF B5 09 */	bl gsifree
/* 8033DE34 00339A94  93 DD 04 6C */	stw r30, 0x46c(r29)
/* 8033DE38 00339A98  38 00 00 02 */	li r0, 2
/* 8033DE3C 00339A9C  93 FD 02 20 */	stw r31, 0x220(r29)
/* 8033DE40 00339AA0  90 1D 02 28 */	stw r0, 0x228(r29)
/* 8033DE44 00339AA4  48 00 00 0C */	b lbl_8033DE50
lbl_8033DE48:
/* 8033DE48 00339AA8  7F 83 E3 78 */	mr r3, r28
/* 8033DE4C 00339AAC  48 00 62 11 */	bl gpiRemoveOperation
lbl_8033DE50:
/* 8033DE50 00339AB0  80 9D 04 40 */	lwz r4, 0x440(r29)
/* 8033DE54 00339AB4  2C 04 00 00 */	cmpwi r4, 0
/* 8033DE58 00339AB8  40 82 FF F0 */	bne lbl_8033DE48
/* 8033DE5C 00339ABC  3B E0 00 00 */	li r31, 0
/* 8033DE60 00339AC0  3C 80 80 34 */	lis r4, gpiResetProfile@ha
/* 8033DE64 00339AC4  93 FD 04 40 */	stw r31, 0x440(r29)
/* 8033DE68 00339AC8  7F 83 E3 78 */	mr r3, r28
/* 8033DE6C 00339ACC  38 84 DD 6C */	addi r4, r4, gpiResetProfile@l
/* 8033DE70 00339AD0  38 A0 00 00 */	li r5, 0
/* 8033DE74 00339AD4  93 FD 04 4C */	stw r31, 0x44c(r29)
/* 8033DE78 00339AD8  48 00 7D 79 */	bl gpiProfileMap
/* 8033DE7C 00339ADC  93 FD 01 9C */	stw r31, 0x19c(r29)
/* 8033DE80 00339AE0  38 00 FF FF */	li r0, -1
/* 8033DE84 00339AE4  38 60 00 00 */	li r3, 0
/* 8033DE88 00339AE8  93 FD 01 A0 */	stw r31, 0x1a0(r29)
/* 8033DE8C 00339AEC  93 FD 01 98 */	stw r31, 0x198(r29)
/* 8033DE90 00339AF0  93 FD 02 2C */	stw r31, 0x22c(r29)
/* 8033DE94 00339AF4  93 FD 04 38 */	stw r31, 0x438(r29)
/* 8033DE98 00339AF8  93 FD 04 50 */	stw r31, 0x450(r29)
/* 8033DE9C 00339AFC  90 1D 02 30 */	stw r0, 0x230(r29)
/* 8033DEA0 00339B00  9B FD 02 34 */	stb r31, 0x234(r29)
/* 8033DEA4 00339B04  9B FD 03 34 */	stb r31, 0x334(r29)
/* 8033DEA8 00339B08  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8033DEAC 00339B0C  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8033DEB0 00339B10  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8033DEB4 00339B14  83 81 00 10 */	lwz r28, 0x10(r1)
/* 8033DEB8 00339B18  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8033DEBC 00339B1C  7C 08 03 A6 */	mtlr r0
/* 8033DEC0 00339B20  38 21 00 20 */	addi r1, r1, 0x20
/* 8033DEC4 00339B24  4E 80 00 20 */	blr

.global gpiProcessConnectionManager
gpiProcessConnectionManager:
/* 8033DEC8 00339B28  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 8033DECC 00339B2C  7C 08 02 A6 */	mflr r0
/* 8033DED0 00339B30  90 01 00 34 */	stw r0, 0x34(r1)
/* 8033DED4 00339B34  39 61 00 30 */	addi r11, r1, 0x30
/* 8033DED8 00339B38  4B E8 92 51 */	bl _savegpr_27
/* 8033DEDC 00339B3C  3B E0 00 00 */	li r31, 0
/* 8033DEE0 00339B40  3F C0 80 45 */	lis r30, lbl_8044A688@ha
/* 8033DEE4 00339B44  93 E1 00 08 */	stw r31, 8(r1)
/* 8033DEE8 00339B48  7C 7C 1B 78 */	mr r28, r3
/* 8033DEEC 00339B4C  3B DE A6 88 */	addi r30, r30, lbl_8044A688@l
/* 8033DEF0 00339B50  83 A3 00 00 */	lwz r29, 0(r3)
lbl_8033DEF4:
/* 8033DEF4 00339B54  7F 83 E3 78 */	mr r3, r28
/* 8033DEF8 00339B58  38 9D 02 10 */	addi r4, r29, 0x210
/* 8033DEFC 00339B5C  48 00 44 31 */	bl gpiAddLocalInfo
/* 8033DF00 00339B60  80 9D 01 F0 */	lwz r4, 0x1f0(r29)
/* 8033DF04 00339B64  7F 83 E3 78 */	mr r3, r28
/* 8033DF08 00339B68  38 BD 02 10 */	addi r5, r29, 0x210
/* 8033DF0C 00339B6C  38 C1 00 08 */	addi r6, r1, 8
/* 8033DF10 00339B70  38 E0 00 01 */	li r7, 1
/* 8033DF14 00339B74  39 0D 8F 50 */	addi r8, r13, lbl_8063E210-_SDA_BASE_
/* 8033DF18 00339B78  48 00 1A 7D */	bl gpiSendFromBuffer
/* 8033DF1C 00339B7C  2C 03 00 00 */	cmpwi r3, 0
/* 8033DF20 00339B80  41 82 00 08 */	beq lbl_8033DF28
/* 8033DF24 00339B84  48 00 02 70 */	b lbl_8033E194
lbl_8033DF28:
/* 8033DF28 00339B88  80 9D 01 F0 */	lwz r4, 0x1f0(r29)
/* 8033DF2C 00339B8C  7F 83 E3 78 */	mr r3, r28
/* 8033DF30 00339B90  38 BD 01 F8 */	addi r5, r29, 0x1f8
/* 8033DF34 00339B94  38 C1 00 0C */	addi r6, r1, 0xc
/* 8033DF38 00339B98  38 E1 00 08 */	addi r7, r1, 8
/* 8033DF3C 00339B9C  39 0D 8F 50 */	addi r8, r13, lbl_8063E210-_SDA_BASE_
/* 8033DF40 00339BA0  48 00 19 15 */	bl gpiRecvToBuffer
/* 8033DF44 00339BA4  2C 03 00 00 */	cmpwi r3, 0
/* 8033DF48 00339BA8  41 82 01 C4 */	beq lbl_8033E10C
/* 8033DF4C 00339BAC  2C 03 00 03 */	cmpwi r3, 3
/* 8033DF50 00339BB0  40 82 02 44 */	bne lbl_8033E194
/* 8033DF54 00339BB4  7F 83 E3 78 */	mr r3, r28
/* 8033DF58 00339BB8  38 BE 00 00 */	addi r5, r30, 0
/* 8033DF5C 00339BBC  38 80 00 05 */	li r4, 5
/* 8033DF60 00339BC0  48 00 A4 A9 */	bl gpiSetError
/* 8033DF64 00339BC4  7F 83 E3 78 */	mr r3, r28
/* 8033DF68 00339BC8  38 80 00 03 */	li r4, 3
/* 8033DF6C 00339BCC  38 A0 00 01 */	li r5, 1
/* 8033DF70 00339BD0  48 00 1C F9 */	bl gpiCallErrorCallback
/* 8033DF74 00339BD4  38 60 00 03 */	li r3, 3
/* 8033DF78 00339BD8  48 00 02 1C */	b lbl_8033E194
/* 8033DF7C 00339BDC  48 00 02 18 */	b lbl_8033E194
/* 8033DF80 00339BE0  48 00 01 8C */	b lbl_8033E10C
lbl_8033DF84:
/* 8033DF84 00339BE4  9B E3 00 00 */	stb r31, 0(r3)
/* 8033DF88 00339BE8  80 1D 01 F8 */	lwz r0, 0x1f8(r29)
/* 8033DF8C 00339BEC  7C 80 18 50 */	subf r4, r0, r3
/* 8033DF90 00339BF0  90 81 00 0C */	stw r4, 0xc(r1)
/* 8033DF94 00339BF4  80 1D 02 0C */	lwz r0, 0x20c(r29)
/* 8033DF98 00339BF8  7C 04 00 00 */	cmpw r4, r0
/* 8033DF9C 00339BFC  40 81 00 4C */	ble lbl_8033DFE8
/* 8033DFA0 00339C00  2C 04 40 00 */	cmpwi r4, 0x4000
/* 8033DFA4 00339C04  38 60 40 00 */	li r3, 0x4000
/* 8033DFA8 00339C08  41 80 00 08 */	blt lbl_8033DFB0
/* 8033DFAC 00339C0C  7C 83 23 78 */	mr r3, r4
lbl_8033DFB0:
/* 8033DFB0 00339C10  80 1D 02 0C */	lwz r0, 0x20c(r29)
/* 8033DFB4 00339C14  7C 60 1A 14 */	add r3, r0, r3
/* 8033DFB8 00339C18  90 7D 02 0C */	stw r3, 0x20c(r29)
/* 8033DFBC 00339C1C  38 83 00 01 */	addi r4, r3, 1
/* 8033DFC0 00339C20  80 7D 02 08 */	lwz r3, 0x208(r29)
/* 8033DFC4 00339C24  4B FF B3 61 */	bl gsirealloc
/* 8033DFC8 00339C28  2C 03 00 00 */	cmpwi r3, 0
/* 8033DFCC 00339C2C  40 82 00 18 */	bne lbl_8033DFE4
/* 8033DFD0 00339C30  7F 83 E3 78 */	mr r3, r28
/* 8033DFD4 00339C34  38 9E 00 2C */	addi r4, r30, 0x2c
/* 8033DFD8 00339C38  48 00 A4 81 */	bl gpiSetErrorString
/* 8033DFDC 00339C3C  38 60 00 01 */	li r3, 1
/* 8033DFE0 00339C40  48 00 01 B4 */	b lbl_8033E194
lbl_8033DFE4:
/* 8033DFE4 00339C44  90 7D 02 08 */	stw r3, 0x208(r29)
lbl_8033DFE8:
/* 8033DFE8 00339C48  80 A1 00 0C */	lwz r5, 0xc(r1)
/* 8033DFEC 00339C4C  80 7D 02 08 */	lwz r3, 0x208(r29)
/* 8033DFF0 00339C50  80 9D 01 F8 */	lwz r4, 0x1f8(r29)
/* 8033DFF4 00339C54  38 A5 00 01 */	addi r5, r5, 1
/* 8033DFF8 00339C58  4B CC 60 09 */	bl memcpy
/* 8033DFFC 00339C5C  80 7D 01 F8 */	lwz r3, 0x1f8(r29)
/* 8033E000 00339C60  38 9B 00 07 */	addi r4, r27, 7
/* 8033E004 00339C64  80 1D 02 00 */	lwz r0, 0x200(r29)
/* 8033E008 00339C68  7C 63 20 50 */	subf r3, r3, r4
/* 8033E00C 00339C6C  7C 63 00 50 */	subf r3, r3, r0
/* 8033E010 00339C70  90 7D 02 00 */	stw r3, 0x200(r29)
/* 8033E014 00339C74  38 A3 00 01 */	addi r5, r3, 1
/* 8033E018 00339C78  80 7D 01 F8 */	lwz r3, 0x1f8(r29)
/* 8033E01C 00339C7C  4B E8 C2 59 */	bl memmove
/* 8033E020 00339C80  83 7D 02 08 */	lwz r27, 0x208(r29)
/* 8033E024 00339C84  38 8D 8F 54 */	addi r4, r13, lbl_8063E214-_SDA_BASE_
/* 8033E028 00339C88  7F 63 DB 78 */	mr r3, r27
/* 8033E02C 00339C8C  4B E9 07 75 */	bl strstr
/* 8033E030 00339C90  2C 03 00 00 */	cmpwi r3, 0
/* 8033E034 00339C94  41 82 00 40 */	beq lbl_8033E074
/* 8033E038 00339C98  38 63 00 04 */	addi r3, r3, 4
/* 8033E03C 00339C9C  4B E9 26 D1 */	bl atoi
/* 8033E040 00339CA0  7C 65 1B 78 */	mr r5, r3
/* 8033E044 00339CA4  7F 83 E3 78 */	mr r3, r28
/* 8033E048 00339CA8  38 81 00 10 */	addi r4, r1, 0x10
/* 8033E04C 00339CAC  48 00 60 5D */	bl gpiFindOperationByID
/* 8033E050 00339CB0  2C 03 00 00 */	cmpwi r3, 0
/* 8033E054 00339CB4  41 82 00 B8 */	beq lbl_8033E10C
/* 8033E058 00339CB8  80 81 00 10 */	lwz r4, 0x10(r1)
/* 8033E05C 00339CBC  7F 83 E3 78 */	mr r3, r28
/* 8033E060 00339CC0  80 BD 02 08 */	lwz r5, 0x208(r29)
/* 8033E064 00339CC4  48 00 60 D5 */	bl gpiProcessOperation
/* 8033E068 00339CC8  2C 03 00 00 */	cmpwi r3, 0
/* 8033E06C 00339CCC  41 82 00 A0 */	beq lbl_8033E10C
/* 8033E070 00339CD0  48 00 01 24 */	b lbl_8033E194
lbl_8033E074:
/* 8033E074 00339CD4  7F 83 E3 78 */	mr r3, r28
/* 8033E078 00339CD8  7F 64 DB 78 */	mr r4, r27
/* 8033E07C 00339CDC  38 A0 00 01 */	li r5, 1
/* 8033E080 00339CE0  48 00 9F 15 */	bl gpiCheckForError
/* 8033E084 00339CE4  2C 03 00 00 */	cmpwi r3, 0
/* 8033E088 00339CE8  41 82 00 0C */	beq lbl_8033E094
/* 8033E08C 00339CEC  38 60 00 04 */	li r3, 4
/* 8033E090 00339CF0  48 00 01 04 */	b lbl_8033E194
lbl_8033E094:
/* 8033E094 00339CF4  83 7D 02 08 */	lwz r27, 0x208(r29)
/* 8033E098 00339CF8  38 8D 8F 5C */	addi r4, r13, lbl_8063E21C-_SDA_BASE_
/* 8033E09C 00339CFC  38 A0 00 04 */	li r5, 4
/* 8033E0A0 00339D00  7F 63 DB 78 */	mr r3, r27
/* 8033E0A4 00339D04  4B E9 04 C5 */	bl strncmp
/* 8033E0A8 00339D08  2C 03 00 00 */	cmpwi r3, 0
/* 8033E0AC 00339D0C  40 82 00 1C */	bne lbl_8033E0C8
/* 8033E0B0 00339D10  7F 83 E3 78 */	mr r3, r28
/* 8033E0B4 00339D14  7F 64 DB 78 */	mr r4, r27
/* 8033E0B8 00339D18  48 00 02 99 */	bl gpiProcessRecvBuddyMessage
/* 8033E0BC 00339D1C  2C 03 00 00 */	cmpwi r3, 0
/* 8033E0C0 00339D20  41 82 00 4C */	beq lbl_8033E10C
/* 8033E0C4 00339D24  48 00 00 D0 */	b lbl_8033E194
lbl_8033E0C8:
/* 8033E0C8 00339D28  7F 63 DB 78 */	mr r3, r27
/* 8033E0CC 00339D2C  38 8D 8F 64 */	addi r4, r13, lbl_8063E224-_SDA_BASE_
/* 8033E0D0 00339D30  38 A0 00 04 */	li r5, 4
/* 8033E0D4 00339D34  4B E9 04 95 */	bl strncmp
/* 8033E0D8 00339D38  2C 03 00 00 */	cmpwi r3, 0
/* 8033E0DC 00339D3C  41 82 00 30 */	beq lbl_8033E10C
/* 8033E0E0 00339D40  7F 63 DB 78 */	mr r3, r27
/* 8033E0E4 00339D44  38 8D 8F 6C */	addi r4, r13, lbl_8063E22C-_SDA_BASE_
/* 8033E0E8 00339D48  38 A0 00 04 */	li r5, 4
/* 8033E0EC 00339D4C  4B E9 04 7D */	bl strncmp
/* 8033E0F0 00339D50  2C 03 00 00 */	cmpwi r3, 0
/* 8033E0F4 00339D54  40 82 00 18 */	bne lbl_8033E10C
/* 8033E0F8 00339D58  7F 63 DB 78 */	mr r3, r27
/* 8033E0FC 00339D5C  38 BD 04 8C */	addi r5, r29, 0x48c
/* 8033E100 00339D60  38 8D 8F 6C */	addi r4, r13, lbl_8063E22C-_SDA_BASE_
/* 8033E104 00339D64  38 C0 00 19 */	li r6, 0x19
/* 8033E108 00339D68  48 00 9F 85 */	bl gpiValueForKey
lbl_8033E10C:
/* 8033E10C 00339D6C  80 7D 01 F8 */	lwz r3, 0x1f8(r29)
/* 8033E110 00339D70  38 8D 8F 78 */	addi r4, r13, lbl_8063E238-_SDA_BASE_
/* 8033E114 00339D74  4B E9 06 8D */	bl strstr
/* 8033E118 00339D78  2C 03 00 00 */	cmpwi r3, 0
/* 8033E11C 00339D7C  7C 7B 1B 78 */	mr r27, r3
/* 8033E120 00339D80  40 82 FE 64 */	bne lbl_8033DF84
/* 8033E124 00339D84  80 01 00 08 */	lwz r0, 8(r1)
/* 8033E128 00339D88  2C 00 00 00 */	cmpwi r0, 0
/* 8033E12C 00339D8C  41 82 00 40 */	beq lbl_8033E16C
/* 8033E130 00339D90  80 1D 01 F4 */	lwz r0, 0x1f4(r29)
/* 8033E134 00339D94  2C 00 00 05 */	cmpwi r0, 5
/* 8033E138 00339D98  41 82 00 34 */	beq lbl_8033E16C
/* 8033E13C 00339D9C  38 00 00 04 */	li r0, 4
/* 8033E140 00339DA0  7F 83 E3 78 */	mr r3, r28
/* 8033E144 00339DA4  90 1D 01 F4 */	stw r0, 0x1f4(r29)
/* 8033E148 00339DA8  38 BE 00 3C */	addi r5, r30, 0x3c
/* 8033E14C 00339DAC  38 80 00 07 */	li r4, 7
/* 8033E150 00339DB0  48 00 A2 B9 */	bl gpiSetError
/* 8033E154 00339DB4  7F 83 E3 78 */	mr r3, r28
/* 8033E158 00339DB8  38 80 00 03 */	li r4, 3
/* 8033E15C 00339DBC  38 A0 00 01 */	li r5, 1
/* 8033E160 00339DC0  48 00 1B 09 */	bl gpiCallErrorCallback
/* 8033E164 00339DC4  38 60 00 00 */	li r3, 0
/* 8033E168 00339DC8  48 00 00 2C */	b lbl_8033E194
lbl_8033E16C:
/* 8033E16C 00339DCC  7F 83 E3 78 */	mr r3, r28
/* 8033E170 00339DD0  48 00 5F 89 */	bl gpiOperationsAreBlocking
/* 8033E174 00339DD4  2C 03 00 00 */	cmpwi r3, 0
/* 8033E178 00339DD8  7C 7B 1B 78 */	mr r27, r3
/* 8033E17C 00339DDC  41 82 00 0C */	beq lbl_8033E188
/* 8033E180 00339DE0  38 60 00 0A */	li r3, 0xa
/* 8033E184 00339DE4  4B FF AE A1 */	bl msleep
lbl_8033E188:
/* 8033E188 00339DE8  2C 1B 00 00 */	cmpwi r27, 0
/* 8033E18C 00339DEC  40 82 FD 68 */	bne lbl_8033DEF4
/* 8033E190 00339DF0  38 60 00 00 */	li r3, 0
lbl_8033E194:
/* 8033E194 00339DF4  39 61 00 30 */	addi r11, r1, 0x30
/* 8033E198 00339DF8  4B E8 8F DD */	bl _restgpr_27
/* 8033E19C 00339DFC  80 01 00 34 */	lwz r0, 0x34(r1)
/* 8033E1A0 00339E00  7C 08 03 A6 */	mtlr r0
/* 8033E1A4 00339E04  38 21 00 30 */	addi r1, r1, 0x30
/* 8033E1A8 00339E08  4E 80 00 20 */	blr

.global gpiProcess
gpiProcess:
/* 8033E1AC 00339E0C  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 8033E1B0 00339E10  7C 08 02 A6 */	mflr r0
/* 8033E1B4 00339E14  90 01 00 34 */	stw r0, 0x34(r1)
/* 8033E1B8 00339E18  39 61 00 30 */	addi r11, r1, 0x30
/* 8033E1BC 00339E1C  4B E8 8F 6D */	bl _savegpr_27
/* 8033E1C0 00339E20  83 C3 00 00 */	lwz r30, 0(r3)
/* 8033E1C4 00339E24  7C 7F 1B 78 */	mr r31, r3
/* 8033E1C8 00339E28  7C 9B 23 78 */	mr r27, r4
/* 8033E1CC 00339E2C  3B A0 00 00 */	li r29, 0
/* 8033E1D0 00339E30  80 1E 01 F4 */	lwz r0, 0x1f4(r30)
/* 8033E1D4 00339E34  2C 00 00 01 */	cmpwi r0, 1
/* 8033E1D8 00339E38  40 82 00 80 */	bne lbl_8033E258
lbl_8033E1DC:
/* 8033E1DC 00339E3C  7F E3 FB 78 */	mr r3, r31
/* 8033E1E0 00339E40  48 00 31 B1 */	bl gpiCheckConnect
/* 8033E1E4 00339E44  2C 03 00 00 */	cmpwi r3, 0
/* 8033E1E8 00339E48  7C 7D 1B 78 */	mr r29, r3
/* 8033E1EC 00339E4C  38 60 00 00 */	li r3, 0
/* 8033E1F0 00339E50  40 82 00 1C */	bne lbl_8033E20C
/* 8033E1F4 00339E54  2C 1B 00 00 */	cmpwi r27, 0
/* 8033E1F8 00339E58  41 82 00 14 */	beq lbl_8033E20C
/* 8033E1FC 00339E5C  80 1E 01 F4 */	lwz r0, 0x1f4(r30)
/* 8033E200 00339E60  2C 00 00 01 */	cmpwi r0, 1
/* 8033E204 00339E64  40 82 00 08 */	bne lbl_8033E20C
/* 8033E208 00339E68  38 60 00 01 */	li r3, 1
lbl_8033E20C:
/* 8033E20C 00339E6C  7C 03 00 D0 */	neg r0, r3
/* 8033E210 00339E70  7C 00 1B 78 */	or r0, r0, r3
/* 8033E214 00339E74  54 1C 0F FF */	rlwinm. r28, r0, 1, 0x1f, 0x1f
/* 8033E218 00339E78  41 82 00 0C */	beq lbl_8033E224
/* 8033E21C 00339E7C  38 60 00 0A */	li r3, 0xa
/* 8033E220 00339E80  4B FF AE 05 */	bl msleep
lbl_8033E224:
/* 8033E224 00339E84  2C 1C 00 00 */	cmpwi r28, 0
/* 8033E228 00339E88  40 82 FF B4 */	bne lbl_8033E1DC
/* 8033E22C 00339E8C  2C 1D 00 00 */	cmpwi r29, 0
/* 8033E230 00339E90  41 82 00 28 */	beq lbl_8033E258
/* 8033E234 00339E94  7F E3 FB 78 */	mr r3, r31
/* 8033E238 00339E98  38 81 00 08 */	addi r4, r1, 8
/* 8033E23C 00339E9C  38 A0 00 01 */	li r5, 1
/* 8033E240 00339EA0  48 00 5E 69 */	bl gpiFindOperationByID
/* 8033E244 00339EA4  2C 03 00 00 */	cmpwi r3, 0
/* 8033E248 00339EA8  41 82 00 10 */	beq lbl_8033E258
/* 8033E24C 00339EAC  80 61 00 08 */	lwz r3, 8(r1)
/* 8033E250 00339EB0  38 00 00 04 */	li r0, 4
/* 8033E254 00339EB4  90 03 00 1C */	stw r0, 0x1c(r3)
lbl_8033E258:
/* 8033E258 00339EB8  80 1E 01 F4 */	lwz r0, 0x1f4(r30)
/* 8033E25C 00339EBC  2C 00 00 03 */	cmpwi r0, 3
/* 8033E260 00339EC0  41 82 00 14 */	beq lbl_8033E274
/* 8033E264 00339EC4  2C 00 00 02 */	cmpwi r0, 2
/* 8033E268 00339EC8  41 82 00 0C */	beq lbl_8033E274
/* 8033E26C 00339ECC  2C 00 00 05 */	cmpwi r0, 5
/* 8033E270 00339ED0  40 82 00 2C */	bne lbl_8033E29C
lbl_8033E274:
/* 8033E274 00339ED4  2C 1D 00 00 */	cmpwi r29, 0
/* 8033E278 00339ED8  40 82 00 10 */	bne lbl_8033E288
/* 8033E27C 00339EDC  7F E3 FB 78 */	mr r3, r31
/* 8033E280 00339EE0  4B FF FC 49 */	bl gpiProcessConnectionManager
/* 8033E284 00339EE4  7C 7D 1B 78 */	mr r29, r3
lbl_8033E288:
/* 8033E288 00339EE8  2C 1D 00 00 */	cmpwi r29, 0
/* 8033E28C 00339EEC  40 82 00 10 */	bne lbl_8033E29C
/* 8033E290 00339EF0  7F E3 FB 78 */	mr r3, r31
/* 8033E294 00339EF4  48 00 69 E9 */	bl gpiProcessPeers
/* 8033E298 00339EF8  7C 7D 1B 78 */	mr r29, r3
lbl_8033E29C:
/* 8033E29C 00339EFC  2C 1D 00 00 */	cmpwi r29, 0
/* 8033E2A0 00339F00  40 82 00 10 */	bne lbl_8033E2B0
/* 8033E2A4 00339F04  7F E3 FB 78 */	mr r3, r31
/* 8033E2A8 00339F08  48 00 99 45 */	bl gpiProcessSearches
/* 8033E2AC 00339F0C  7C 7D 1B 78 */	mr r29, r3
lbl_8033E2B0:
/* 8033E2B0 00339F10  80 1E 04 40 */	lwz r0, 0x440(r30)
/* 8033E2B4 00339F14  90 01 00 08 */	stw r0, 8(r1)
/* 8033E2B8 00339F18  48 00 00 38 */	b lbl_8033E2F0
lbl_8033E2BC:
/* 8033E2BC 00339F1C  80 04 00 1C */	lwz r0, 0x1c(r4)
/* 8033E2C0 00339F20  2C 00 00 00 */	cmpwi r0, 0
/* 8033E2C4 00339F24  41 82 00 24 */	beq lbl_8033E2E8
/* 8033E2C8 00339F28  7F E3 FB 78 */	mr r3, r31
/* 8033E2CC 00339F2C  48 00 58 99 */	bl gpiFailedOpCallback
/* 8033E2D0 00339F30  80 81 00 08 */	lwz r4, 8(r1)
/* 8033E2D4 00339F34  7F E3 FB 78 */	mr r3, r31
/* 8033E2D8 00339F38  80 04 00 20 */	lwz r0, 0x20(r4)
/* 8033E2DC 00339F3C  90 01 00 08 */	stw r0, 8(r1)
/* 8033E2E0 00339F40  48 00 5D 7D */	bl gpiRemoveOperation
/* 8033E2E4 00339F44  48 00 00 0C */	b lbl_8033E2F0
lbl_8033E2E8:
/* 8033E2E8 00339F48  80 04 00 20 */	lwz r0, 0x20(r4)
/* 8033E2EC 00339F4C  90 01 00 08 */	stw r0, 8(r1)
lbl_8033E2F0:
/* 8033E2F0 00339F50  80 81 00 08 */	lwz r4, 8(r1)
/* 8033E2F4 00339F54  2C 04 00 00 */	cmpwi r4, 0
/* 8033E2F8 00339F58  40 82 FF C4 */	bne lbl_8033E2BC
/* 8033E2FC 00339F5C  7F E3 FB 78 */	mr r3, r31
/* 8033E300 00339F60  7F 64 DB 78 */	mr r4, r27
/* 8033E304 00339F64  48 00 1C FD */	bl gpiProcessCallbacks
/* 8033E308 00339F68  2C 03 00 00 */	cmpwi r3, 0
/* 8033E30C 00339F6C  41 82 00 08 */	beq lbl_8033E314
/* 8033E310 00339F70  48 00 00 28 */	b lbl_8033E338
lbl_8033E314:
/* 8033E314 00339F74  80 1E 04 38 */	lwz r0, 0x438(r30)
/* 8033E318 00339F78  2C 00 00 00 */	cmpwi r0, 0
/* 8033E31C 00339F7C  41 82 00 18 */	beq lbl_8033E334
/* 8033E320 00339F80  7F E3 FB 78 */	mr r3, r31
/* 8033E324 00339F84  38 80 00 00 */	li r4, 0
/* 8033E328 00339F88  48 00 31 F9 */	bl gpiDisconnect
/* 8033E32C 00339F8C  7F E3 FB 78 */	mr r3, r31
/* 8033E330 00339F90  4B FF FA 59 */	bl gpiReset
lbl_8033E334:
/* 8033E334 00339F94  7F A3 EB 78 */	mr r3, r29
lbl_8033E338:
/* 8033E338 00339F98  39 61 00 30 */	addi r11, r1, 0x30
/* 8033E33C 00339F9C  4B E8 8E 39 */	bl _restgpr_27
/* 8033E340 00339FA0  80 01 00 34 */	lwz r0, 0x34(r1)
/* 8033E344 00339FA4  7C 08 03 A6 */	mtlr r0
/* 8033E348 00339FA8  38 21 00 30 */	addi r1, r1, 0x30
/* 8033E34C 00339FAC  4E 80 00 20 */	blr