summaryrefslogtreecommitdiff
path: root/asm/SDK/MP/mpbeacon.s
blob: 06c060fd17d7419a597a7e999b7bc4a4fdacc053 (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
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
.include "macros.inc"

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

.global MPUpdateBeacon
MPUpdateBeacon:
/* 802F38A8 002EF508  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F38AC 002EF50C  7C 08 02 A6 */	mflr r0
/* 802F38B0 002EF510  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F38B4 002EF514  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802F38B8 002EF518  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802F38BC 002EF51C  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802F38C0 002EF520  93 81 00 10 */	stw r28, 0x10(r1)
/* 802F38C4 002EF524  80 0D AF 38 */	lwz r0, lbl_806401F8-_SDA_BASE_(r13)
/* 802F38C8 002EF528  2C 00 00 00 */	cmpwi r0, 0
/* 802F38CC 002EF52C  40 82 00 0C */	bne lbl_802F38D8
/* 802F38D0 002EF530  38 60 FF 14 */	li r3, -236
/* 802F38D4 002EF534  48 00 00 D4 */	b lbl_802F39A8
lbl_802F38D8:
/* 802F38D8 002EF538  80 0D AF 3C */	lwz r0, lbl_806401FC-_SDA_BASE_(r13)
/* 802F38DC 002EF53C  2C 00 00 00 */	cmpwi r0, 0
/* 802F38E0 002EF540  41 82 00 0C */	beq lbl_802F38EC
/* 802F38E4 002EF544  38 60 FF FF */	li r3, -1
/* 802F38E8 002EF548  48 00 00 C0 */	b lbl_802F39A8
lbl_802F38EC:
/* 802F38EC 002EF54C  38 61 00 08 */	addi r3, r1, 8
/* 802F38F0 002EF550  38 80 00 01 */	li r4, 1
/* 802F38F4 002EF554  4B FF D0 BD */	bl MPiAllocateCommandBlock
/* 802F38F8 002EF558  2C 03 00 00 */	cmpwi r3, 0
/* 802F38FC 002EF55C  40 80 00 08 */	bge lbl_802F3904
/* 802F3900 002EF560  48 00 00 A8 */	b lbl_802F39A8
lbl_802F3904:
/* 802F3904 002EF564  83 82 AA 30 */	lwz r28, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3908 002EF568  83 C1 00 08 */	lwz r30, 8(r1)
/* 802F390C 002EF56C  3B BC 65 DC */	addi r29, r28, 0x65dc
/* 802F3910 002EF570  7F A3 EB 78 */	mr r3, r29
/* 802F3914 002EF574  4B F7 C0 35 */	bl OSLockMutex
/* 802F3918 002EF578  37 FC 55 60 */	addic. r31, r28, 0x5560
/* 802F391C 002EF57C  40 82 00 14 */	bne lbl_802F3930
/* 802F3920 002EF580  7F A3 EB 78 */	mr r3, r29
/* 802F3924 002EF584  4B F7 C1 01 */	bl OSUnlockMutex
/* 802F3928 002EF588  3B E0 FF 10 */	li r31, -240
/* 802F392C 002EF58C  48 00 00 28 */	b lbl_802F3954
lbl_802F3930:
/* 802F3930 002EF590  7F E3 FB 78 */	mr r3, r31
/* 802F3934 002EF594  48 00 02 E5 */	bl MPiMakeGameInfo
/* 802F3938 002EF598  7F E3 FB 78 */	mr r3, r31
/* 802F393C 002EF59C  4B FF D6 99 */	bl MPiChangeBeacon
/* 802F3940 002EF5A0  7C 7F 1B 78 */	mr r31, r3
/* 802F3944 002EF5A4  7F A3 EB 78 */	mr r3, r29
/* 802F3948 002EF5A8  4B F7 C0 DD */	bl OSUnlockMutex
/* 802F394C 002EF5AC  7F E0 FE 70 */	srawi r0, r31, 0x1f
/* 802F3950 002EF5B0  7F FF 00 38 */	and r31, r31, r0
lbl_802F3954:
/* 802F3954 002EF5B4  2C 1F 00 00 */	cmpwi r31, 0
/* 802F3958 002EF5B8  40 80 00 08 */	bge lbl_802F3960
/* 802F395C 002EF5BC  48 00 00 30 */	b lbl_802F398C
lbl_802F3960:
/* 802F3960 002EF5C0  38 C0 00 00 */	li r6, 0
/* 802F3964 002EF5C4  38 00 00 01 */	li r0, 1
/* 802F3968 002EF5C8  90 DE 00 18 */	stw r6, 0x18(r30)
/* 802F396C 002EF5CC  7F C4 F3 78 */	mr r4, r30
/* 802F3970 002EF5D0  38 7C 65 24 */	addi r3, r28, 0x6524
/* 802F3974 002EF5D4  38 A0 00 01 */	li r5, 1
/* 802F3978 002EF5D8  90 1E 00 04 */	stw r0, 4(r30)
/* 802F397C 002EF5DC  90 DE 00 1C */	stw r6, 0x1c(r30)
/* 802F3980 002EF5E0  90 DE 00 20 */	stw r6, 0x20(r30)
/* 802F3984 002EF5E4  4B FF D0 D5 */	bl MPiSendRequest
/* 802F3988 002EF5E8  7C 7F 1B 78 */	mr r31, r3
lbl_802F398C:
/* 802F398C 002EF5EC  80 61 00 08 */	lwz r3, 8(r1)
/* 802F3990 002EF5F0  4B FF D0 B5 */	bl MPiFreeCommandBlock
/* 802F3994 002EF5F4  2C 1F 00 00 */	cmpwi r31, 0
/* 802F3998 002EF5F8  40 80 00 0C */	bge lbl_802F39A4
/* 802F399C 002EF5FC  7F E3 FB 78 */	mr r3, r31
/* 802F39A0 002EF600  48 00 00 08 */	b lbl_802F39A8
lbl_802F39A4:
/* 802F39A4 002EF604  38 60 00 00 */	li r3, 0
lbl_802F39A8:
/* 802F39A8 002EF608  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F39AC 002EF60C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802F39B0 002EF610  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802F39B4 002EF614  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802F39B8 002EF618  83 81 00 10 */	lwz r28, 0x10(r1)
/* 802F39BC 002EF61C  7C 08 03 A6 */	mtlr r0
/* 802F39C0 002EF620  38 21 00 20 */	addi r1, r1, 0x20
/* 802F39C4 002EF624  4E 80 00 20 */	blr

.global MPUpdateBeaconAsync
MPUpdateBeaconAsync:
/* 802F39C8 002EF628  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F39CC 002EF62C  7C 08 02 A6 */	mflr r0
/* 802F39D0 002EF630  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F39D4 002EF634  39 61 00 20 */	addi r11, r1, 0x20
/* 802F39D8 002EF638  4B ED 37 51 */	bl _savegpr_27
/* 802F39DC 002EF63C  80 0D AF 38 */	lwz r0, lbl_806401F8-_SDA_BASE_(r13)
/* 802F39E0 002EF640  7C 7B 1B 78 */	mr r27, r3
/* 802F39E4 002EF644  7C 9C 23 78 */	mr r28, r4
/* 802F39E8 002EF648  2C 00 00 00 */	cmpwi r0, 0
/* 802F39EC 002EF64C  40 82 00 0C */	bne lbl_802F39F8
/* 802F39F0 002EF650  38 60 FF 14 */	li r3, -236
/* 802F39F4 002EF654  48 00 00 A4 */	b lbl_802F3A98
lbl_802F39F8:
/* 802F39F8 002EF658  80 0D AF 3C */	lwz r0, lbl_806401FC-_SDA_BASE_(r13)
/* 802F39FC 002EF65C  2C 00 00 00 */	cmpwi r0, 0
/* 802F3A00 002EF660  41 82 00 0C */	beq lbl_802F3A0C
/* 802F3A04 002EF664  38 60 FF FF */	li r3, -1
/* 802F3A08 002EF668  48 00 00 90 */	b lbl_802F3A98
lbl_802F3A0C:
/* 802F3A0C 002EF66C  83 A2 AA 30 */	lwz r29, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3A10 002EF670  3B DD 65 DC */	addi r30, r29, 0x65dc
/* 802F3A14 002EF674  7F C3 F3 78 */	mr r3, r30
/* 802F3A18 002EF678  4B F7 BF 31 */	bl OSLockMutex
/* 802F3A1C 002EF67C  37 FD 55 60 */	addic. r31, r29, 0x5560
/* 802F3A20 002EF680  40 82 00 14 */	bne lbl_802F3A34
/* 802F3A24 002EF684  7F C3 F3 78 */	mr r3, r30
/* 802F3A28 002EF688  4B F7 BF FD */	bl OSUnlockMutex
/* 802F3A2C 002EF68C  38 60 FF 10 */	li r3, -240
/* 802F3A30 002EF690  48 00 00 28 */	b lbl_802F3A58
lbl_802F3A34:
/* 802F3A34 002EF694  7F E3 FB 78 */	mr r3, r31
/* 802F3A38 002EF698  48 00 01 E1 */	bl MPiMakeGameInfo
/* 802F3A3C 002EF69C  7F E3 FB 78 */	mr r3, r31
/* 802F3A40 002EF6A0  4B FF D5 95 */	bl MPiChangeBeacon
/* 802F3A44 002EF6A4  7C 7F 1B 78 */	mr r31, r3
/* 802F3A48 002EF6A8  7F C3 F3 78 */	mr r3, r30
/* 802F3A4C 002EF6AC  4B F7 BF D9 */	bl OSUnlockMutex
/* 802F3A50 002EF6B0  7F E0 FE 70 */	srawi r0, r31, 0x1f
/* 802F3A54 002EF6B4  7F E3 00 38 */	and r3, r31, r0
lbl_802F3A58:
/* 802F3A58 002EF6B8  2C 03 00 00 */	cmpwi r3, 0
/* 802F3A5C 002EF6BC  40 80 00 08 */	bge lbl_802F3A64
/* 802F3A60 002EF6C0  48 00 00 28 */	b lbl_802F3A88
lbl_802F3A64:
/* 802F3A64 002EF6C4  38 00 00 00 */	li r0, 0
/* 802F3A68 002EF6C8  93 7C 00 18 */	stw r27, 0x18(r28)
/* 802F3A6C 002EF6CC  7F 84 E3 78 */	mr r4, r28
/* 802F3A70 002EF6D0  38 7D 65 24 */	addi r3, r29, 0x6524
/* 802F3A74 002EF6D4  90 1C 00 04 */	stw r0, 4(r28)
/* 802F3A78 002EF6D8  38 A0 00 00 */	li r5, 0
/* 802F3A7C 002EF6DC  90 1C 00 1C */	stw r0, 0x1c(r28)
/* 802F3A80 002EF6E0  90 1C 00 20 */	stw r0, 0x20(r28)
/* 802F3A84 002EF6E4  4B FF CF D5 */	bl MPiSendRequest
lbl_802F3A88:
/* 802F3A88 002EF6E8  2C 03 00 00 */	cmpwi r3, 0
/* 802F3A8C 002EF6EC  40 80 00 08 */	bge lbl_802F3A94
/* 802F3A90 002EF6F0  48 00 00 08 */	b lbl_802F3A98
lbl_802F3A94:
/* 802F3A94 002EF6F4  38 60 00 00 */	li r3, 0
lbl_802F3A98:
/* 802F3A98 002EF6F8  39 61 00 20 */	addi r11, r1, 0x20
/* 802F3A9C 002EF6FC  4B ED 36 D9 */	bl _restgpr_27
/* 802F3AA0 002EF700  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F3AA4 002EF704  7C 08 03 A6 */	mtlr r0
/* 802F3AA8 002EF708  38 21 00 20 */	addi r1, r1, 0x20
/* 802F3AAC 002EF70C  4E 80 00 20 */	blr

.global MPiStartupBeacon
MPiStartupBeacon:
/* 802F3AB0 002EF710  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802F3AB4 002EF714  7C 08 02 A6 */	mflr r0
/* 802F3AB8 002EF718  38 A0 00 20 */	li r5, 0x20
/* 802F3ABC 002EF71C  90 01 00 14 */	stw r0, 0x14(r1)
/* 802F3AC0 002EF720  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802F3AC4 002EF724  93 C1 00 08 */	stw r30, 8(r1)
/* 802F3AC8 002EF728  83 C2 AA 30 */	lwz r30, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3ACC 002EF72C  38 7E 65 24 */	addi r3, r30, 0x6524
/* 802F3AD0 002EF730  38 9E 65 44 */	addi r4, r30, 0x6544
/* 802F3AD4 002EF734  4B F7 B4 25 */	bl OSInitMessageQueue
/* 802F3AD8 002EF738  38 7E 65 DC */	addi r3, r30, 0x65dc
/* 802F3ADC 002EF73C  4B F7 BE 35 */	bl OSInitMutex
/* 802F3AE0 002EF740  38 7E 55 60 */	addi r3, r30, 0x5560
/* 802F3AE4 002EF744  38 80 00 00 */	li r4, 0
/* 802F3AE8 002EF748  38 A0 00 80 */	li r5, 0x80
/* 802F3AEC 002EF74C  4B D1 06 19 */	bl memset
/* 802F3AF0 002EF750  3B E0 00 00 */	li r31, 0
/* 802F3AF4 002EF754  38 7E 65 F8 */	addi r3, r30, 0x65f8
/* 802F3AF8 002EF758  93 FE 65 F4 */	stw r31, 0x65f4(r30)
/* 802F3AFC 002EF75C  38 80 00 00 */	li r4, 0
/* 802F3B00 002EF760  38 A0 00 14 */	li r5, 0x14
/* 802F3B04 002EF764  4B D1 06 01 */	bl memset
/* 802F3B08 002EF768  93 FE 66 0C */	stw r31, 0x660c(r30)
/* 802F3B0C 002EF76C  38 60 00 00 */	li r3, 0
/* 802F3B10 002EF770  93 FE 66 10 */	stw r31, 0x6610(r30)
/* 802F3B14 002EF774  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802F3B18 002EF778  83 C1 00 08 */	lwz r30, 8(r1)
/* 802F3B1C 002EF77C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802F3B20 002EF780  7C 08 03 A6 */	mtlr r0
/* 802F3B24 002EF784  38 21 00 10 */	addi r1, r1, 0x10
/* 802F3B28 002EF788  4E 80 00 20 */	blr

.global MPiCleanupBeacon
MPiCleanupBeacon:
/* 802F3B2C 002EF78C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F3B30 002EF790  7C 08 02 A6 */	mflr r0
/* 802F3B34 002EF794  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3B38 002EF798  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F3B3C 002EF79C  2C 03 00 00 */	cmpwi r3, 0
/* 802F3B40 002EF7A0  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802F3B44 002EF7A4  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802F3B48 002EF7A8  41 82 00 74 */	beq lbl_802F3BBC
/* 802F3B4C 002EF7AC  3B E3 65 24 */	addi r31, r3, 0x6524
/* 802F3B50 002EF7B0  48 00 00 10 */	b lbl_802F3B60
lbl_802F3B54:
/* 802F3B54 002EF7B4  80 81 00 08 */	lwz r4, 8(r1)
/* 802F3B58 002EF7B8  38 60 FF 00 */	li r3, -256
/* 802F3B5C 002EF7BC  4B FF CF 95 */	bl MPiRespondToWaitingRequest
lbl_802F3B60:
/* 802F3B60 002EF7C0  7F E3 FB 78 */	mr r3, r31
/* 802F3B64 002EF7C4  38 81 00 08 */	addi r4, r1, 8
/* 802F3B68 002EF7C8  38 A0 00 00 */	li r5, 0
/* 802F3B6C 002EF7CC  4B F7 B4 B5 */	bl OSReceiveMessage
/* 802F3B70 002EF7D0  2C 03 00 00 */	cmpwi r3, 0
/* 802F3B74 002EF7D4  40 82 FF E0 */	bne lbl_802F3B54
/* 802F3B78 002EF7D8  83 C2 AA 30 */	lwz r30, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3B7C 002EF7DC  38 80 00 00 */	li r4, 0
/* 802F3B80 002EF7E0  38 A0 00 80 */	li r5, 0x80
/* 802F3B84 002EF7E4  38 7E 65 44 */	addi r3, r30, 0x6544
/* 802F3B88 002EF7E8  4B D1 05 7D */	bl memset
/* 802F3B8C 002EF7EC  38 7E 55 60 */	addi r3, r30, 0x5560
/* 802F3B90 002EF7F0  38 80 00 00 */	li r4, 0
/* 802F3B94 002EF7F4  38 A0 00 80 */	li r5, 0x80
/* 802F3B98 002EF7F8  4B D1 05 6D */	bl memset
/* 802F3B9C 002EF7FC  3B E0 00 00 */	li r31, 0
/* 802F3BA0 002EF800  38 7E 65 F8 */	addi r3, r30, 0x65f8
/* 802F3BA4 002EF804  93 FE 65 F4 */	stw r31, 0x65f4(r30)
/* 802F3BA8 002EF808  38 80 00 00 */	li r4, 0
/* 802F3BAC 002EF80C  38 A0 00 14 */	li r5, 0x14
/* 802F3BB0 002EF810  4B D1 05 55 */	bl memset
/* 802F3BB4 002EF814  93 FE 66 0C */	stw r31, 0x660c(r30)
/* 802F3BB8 002EF818  93 FE 66 10 */	stw r31, 0x6610(r30)
lbl_802F3BBC:
/* 802F3BBC 002EF81C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F3BC0 002EF820  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802F3BC4 002EF824  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802F3BC8 002EF828  7C 08 03 A6 */	mtlr r0
/* 802F3BCC 002EF82C  38 21 00 20 */	addi r1, r1, 0x20
/* 802F3BD0 002EF830  4E 80 00 20 */	blr

.global MPiProcessBeaconSentNotification
MPiProcessBeaconSentNotification:
/* 802F3BD4 002EF834  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802F3BD8 002EF838  7C 08 02 A6 */	mflr r0
/* 802F3BDC 002EF83C  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3BE0 002EF840  38 A0 00 00 */	li r5, 0
/* 802F3BE4 002EF844  90 01 00 14 */	stw r0, 0x14(r1)
/* 802F3BE8 002EF848  38 81 00 08 */	addi r4, r1, 8
/* 802F3BEC 002EF84C  38 63 65 24 */	addi r3, r3, 0x6524
/* 802F3BF0 002EF850  4B F7 B4 31 */	bl OSReceiveMessage
/* 802F3BF4 002EF854  2C 03 00 00 */	cmpwi r3, 0
/* 802F3BF8 002EF858  41 82 00 10 */	beq lbl_802F3C08
/* 802F3BFC 002EF85C  80 81 00 08 */	lwz r4, 8(r1)
/* 802F3C00 002EF860  38 60 00 00 */	li r3, 0
/* 802F3C04 002EF864  4B FF CE ED */	bl MPiRespondToWaitingRequest
lbl_802F3C08:
/* 802F3C08 002EF868  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802F3C0C 002EF86C  7C 08 03 A6 */	mtlr r0
/* 802F3C10 002EF870  38 21 00 10 */	addi r1, r1, 0x10
/* 802F3C14 002EF874  4E 80 00 20 */	blr

.global MPiMakeGameInfo
MPiMakeGameInfo:
/* 802F3C18 002EF878  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F3C1C 002EF87C  7C 08 02 A6 */	mflr r0
/* 802F3C20 002EF880  80 82 AA 30 */	lwz r4, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3C24 002EF884  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F3C28 002EF888  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802F3C2C 002EF88C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802F3C30 002EF890  7C 7E 1B 78 */	mr r30, r3
/* 802F3C34 002EF894  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802F3C38 002EF898  93 81 00 10 */	stw r28, 0x10(r1)
/* 802F3C3C 002EF89C  83 E4 00 14 */	lwz r31, 0x14(r4)
/* 802F3C40 002EF8A0  3C 1F 00 01 */	addis r0, r31, 1
/* 802F3C44 002EF8A4  28 00 FF FF */	cmplwi r0, 0xffff
/* 802F3C48 002EF8A8  40 82 00 14 */	bne lbl_802F3C5C
/* 802F3C4C 002EF8AC  4B FF CF 61 */	bl MPiGetNewTgid
/* 802F3C50 002EF8B0  80 82 AA 30 */	lwz r4, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3C54 002EF8B4  7C 7F 1B 78 */	mr r31, r3
/* 802F3C58 002EF8B8  90 64 00 14 */	stw r3, 0x14(r4)
lbl_802F3C5C:
/* 802F3C5C 002EF8BC  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3C60 002EF8C0  83 A3 00 3C */	lwz r29, 0x3c(r3)
/* 802F3C64 002EF8C4  28 1D 00 70 */	cmplwi r29, 0x70
/* 802F3C68 002EF8C8  40 81 00 08 */	ble lbl_802F3C70
/* 802F3C6C 002EF8CC  3B A0 00 70 */	li r29, 0x70
lbl_802F3C70:
/* 802F3C70 002EF8D0  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3C74 002EF8D4  3B 80 00 00 */	li r28, 0
/* 802F3C78 002EF8D8  80 03 00 30 */	lwz r0, 0x30(r3)
/* 802F3C7C 002EF8DC  2C 00 00 00 */	cmpwi r0, 0
/* 802F3C80 002EF8E0  41 82 00 08 */	beq lbl_802F3C88
/* 802F3C84 002EF8E4  63 9C 00 01 */	ori r28, r28, 1
lbl_802F3C88:
/* 802F3C88 002EF8E8  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3C8C 002EF8EC  80 03 00 34 */	lwz r0, 0x34(r3)
/* 802F3C90 002EF8F0  2C 00 00 00 */	cmpwi r0, 0
/* 802F3C94 002EF8F4  41 82 00 08 */	beq lbl_802F3C9C
/* 802F3C98 002EF8F8  63 9C 00 02 */	ori r28, r28, 2
lbl_802F3C9C:
/* 802F3C9C 002EF8FC  7F C3 F3 78 */	mr r3, r30
/* 802F3CA0 002EF900  38 80 00 00 */	li r4, 0
/* 802F3CA4 002EF904  38 A0 00 80 */	li r5, 0x80
/* 802F3CA8 002EF908  4B D1 04 5D */	bl memset
/* 802F3CAC 002EF90C  38 00 01 00 */	li r0, 0x100
/* 802F3CB0 002EF910  38 80 00 01 */	li r4, 1
/* 802F3CB4 002EF914  38 E0 00 08 */	li r7, 8
/* 802F3CB8 002EF918  B0 1E 00 00 */	sth r0, 0(r30)
/* 802F3CBC 002EF91C  80 C2 AA 30 */	lwz r6, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3CC0 002EF920  38 1E 00 08 */	addi r0, r30, 8
/* 802F3CC4 002EF924  98 9E 00 02 */	stb r4, 2(r30)
/* 802F3CC8 002EF928  7F A5 EB 78 */	mr r5, r29
/* 802F3CCC 002EF92C  38 86 00 40 */	addi r4, r6, 0x40
/* 802F3CD0 002EF930  38 7E 00 10 */	addi r3, r30, 0x10
/* 802F3CD4 002EF934  98 FE 00 03 */	stb r7, 3(r30)
/* 802F3CD8 002EF938  81 06 00 10 */	lwz r8, 0x10(r6)
/* 802F3CDC 002EF93C  55 07 42 1E */	rlwinm r7, r8, 8, 8, 0xf
/* 802F3CE0 002EF940  55 06 C4 2E */	rlwinm r6, r8, 0x18, 0x10, 0x17
/* 802F3CE4 002EF944  51 07 C0 0E */	rlwimi r7, r8, 0x18, 0, 7
/* 802F3CE8 002EF948  51 06 46 3E */	rlwimi r6, r8, 8, 0x18, 0x1f
/* 802F3CEC 002EF94C  7C E6 33 78 */	or r6, r7, r6
/* 802F3CF0 002EF950  90 DE 00 04 */	stw r6, 4(r30)
/* 802F3CF4 002EF954  7F E0 07 2C */	sthbrx r31, 0, r0
/* 802F3CF8 002EF958  9B BE 00 0A */	stb r29, 0xa(r30)
/* 802F3CFC 002EF95C  4B D1 03 05 */	bl memcpy
/* 802F3D00 002EF960  9B 9E 00 0B */	stb r28, 0xb(r30)
/* 802F3D04 002EF964  38 1E 00 0C */	addi r0, r30, 0xc
/* 802F3D08 002EF968  80 82 AA 30 */	lwz r4, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3D0C 002EF96C  80 64 00 28 */	lwz r3, 0x28(r4)
/* 802F3D10 002EF970  7C 60 07 2C */	sthbrx r3, 0, r0
/* 802F3D14 002EF974  38 1E 00 0E */	addi r0, r30, 0xe
/* 802F3D18 002EF978  80 64 00 2C */	lwz r3, 0x2c(r4)
/* 802F3D1C 002EF97C  7C 60 07 2C */	sthbrx r3, 0, r0
/* 802F3D20 002EF980  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802F3D24 002EF984  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802F3D28 002EF988  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802F3D2C 002EF98C  83 81 00 10 */	lwz r28, 0x10(r1)
/* 802F3D30 002EF990  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F3D34 002EF994  7C 08 03 A6 */	mtlr r0
/* 802F3D38 002EF998  38 21 00 20 */	addi r1, r1, 0x20
/* 802F3D3C 002EF99C  4E 80 00 20 */	blr

.global MPiMakeAndChangeBeacon
MPiMakeAndChangeBeacon:
/* 802F3D40 002EF9A0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802F3D44 002EF9A4  7C 08 02 A6 */	mflr r0
/* 802F3D48 002EF9A8  90 01 00 14 */	stw r0, 0x14(r1)
/* 802F3D4C 002EF9AC  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802F3D50 002EF9B0  83 E2 AA 30 */	lwz r31, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3D54 002EF9B4  93 C1 00 08 */	stw r30, 8(r1)
/* 802F3D58 002EF9B8  3B DF 65 DC */	addi r30, r31, 0x65dc
/* 802F3D5C 002EF9BC  7F C3 F3 78 */	mr r3, r30
/* 802F3D60 002EF9C0  4B F7 BB E9 */	bl OSLockMutex
/* 802F3D64 002EF9C4  37 FF 55 60 */	addic. r31, r31, 0x5560
/* 802F3D68 002EF9C8  40 82 00 14 */	bne lbl_802F3D7C
/* 802F3D6C 002EF9CC  7F C3 F3 78 */	mr r3, r30
/* 802F3D70 002EF9D0  4B F7 BC B5 */	bl OSUnlockMutex
/* 802F3D74 002EF9D4  38 60 FF 10 */	li r3, -240
/* 802F3D78 002EF9D8  48 00 00 28 */	b lbl_802F3DA0
lbl_802F3D7C:
/* 802F3D7C 002EF9DC  7F E3 FB 78 */	mr r3, r31
/* 802F3D80 002EF9E0  4B FF FE 99 */	bl MPiMakeGameInfo
/* 802F3D84 002EF9E4  7F E3 FB 78 */	mr r3, r31
/* 802F3D88 002EF9E8  4B FF D2 4D */	bl MPiChangeBeacon
/* 802F3D8C 002EF9EC  7C 7F 1B 78 */	mr r31, r3
/* 802F3D90 002EF9F0  7F C3 F3 78 */	mr r3, r30
/* 802F3D94 002EF9F4  4B F7 BC 91 */	bl OSUnlockMutex
/* 802F3D98 002EF9F8  7F E0 FE 70 */	srawi r0, r31, 0x1f
/* 802F3D9C 002EF9FC  7F E3 00 38 */	and r3, r31, r0
lbl_802F3DA0:
/* 802F3DA0 002EFA00  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802F3DA4 002EFA04  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802F3DA8 002EFA08  83 C1 00 08 */	lwz r30, 8(r1)
/* 802F3DAC 002EFA0C  7C 08 03 A6 */	mtlr r0
/* 802F3DB0 002EFA10  38 21 00 10 */	addi r1, r1, 0x10
/* 802F3DB4 002EFA14  4E 80 00 20 */	blr

.global MPiSetCurrentTsf
MPiSetCurrentTsf:
/* 802F3DB8 002EFA18  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 802F3DBC 002EFA1C  7C 08 02 A6 */	mflr r0
/* 802F3DC0 002EFA20  90 01 00 34 */	stw r0, 0x34(r1)
/* 802F3DC4 002EFA24  39 61 00 30 */	addi r11, r1, 0x30
/* 802F3DC8 002EFA28  4B ED 33 59 */	bl _savegpr_25
/* 802F3DCC 002EFA2C  7C 7E 1B 78 */	mr r30, r3
/* 802F3DD0 002EFA30  4B F7 E9 E9 */	bl OSGetTime
/* 802F3DD4 002EFA34  7C 9C 23 78 */	mr r28, r4
/* 802F3DD8 002EFA38  7C 7D 1B 78 */	mr r29, r3
/* 802F3DDC 002EFA3C  4B F7 A9 81 */	bl OSDisableInterrupts
/* 802F3DE0 002EFA40  3C 80 80 00 */	lis r4, 0x800000F8@ha
/* 802F3DE4 002EFA44  83 E2 AA 30 */	lwz r31, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3DE8 002EFA48  80 04 00 F8 */	lwz r0, 0x800000F8@l(r4)
/* 802F3DEC 002EFA4C  57 A5 18 38 */	slwi r5, r29, 3
/* 802F3DF0 002EFA50  3C 80 43 1C */	lis r4, 0x431BDE83@ha
/* 802F3DF4 002EFA54  83 BF 66 0C */	lwz r29, 0x660c(r31)
/* 802F3DF8 002EFA58  54 00 F0 BE */	srwi r0, r0, 2
/* 802F3DFC 002EFA5C  53 85 1F 7E */	rlwimi r5, r28, 3, 0x1d, 0x1f
/* 802F3E00 002EFA60  38 84 DE 83 */	addi r4, r4, 0x431BDE83@l
/* 802F3E04 002EFA64  7C 79 1B 78 */	mr r25, r3
/* 802F3E08 002EFA68  7C 04 00 16 */	mulhwu r0, r4, r0
/* 802F3E0C 002EFA6C  7C A3 2B 78 */	mr r3, r5
/* 802F3E10 002EFA70  83 7F 66 10 */	lwz r27, 0x6610(r31)
/* 802F3E14 002EFA74  3B 5F 65 F8 */	addi r26, r31, 0x65f8
/* 802F3E18 002EFA78  57 84 18 38 */	slwi r4, r28, 3
/* 802F3E1C 002EFA7C  38 A0 00 00 */	li r5, 0
/* 802F3E20 002EFA80  54 06 8B FE */	srwi r6, r0, 0xf
/* 802F3E24 002EFA84  4B ED 34 55 */	bl __div2i
/* 802F3E28 002EFA88  54 84 D0 3E */	rotlwi r4, r4, 0x1a
/* 802F3E2C 002EFA8C  7C 60 36 70 */	srawi r0, r3, 6
/* 802F3E30 002EFA90  50 64 D0 0A */	rlwimi r4, r3, 0x1a, 0, 5
/* 802F3E34 002EFA94  3B 7B 00 01 */	addi r27, r27, 1
/* 802F3E38 002EFA98  28 1B 00 0A */	cmplwi r27, 0xa
/* 802F3E3C 002EFA9C  57 A0 08 3C */	slwi r0, r29, 1
/* 802F3E40 002EFAA0  7C 64 F0 10 */	subfc r3, r4, r30
/* 802F3E44 002EFAA4  7F BC EB 78 */	mr r28, r29
/* 802F3E48 002EFAA8  7C 7A 03 2E */	sthx r3, r26, r0
/* 802F3E4C 002EFAAC  40 81 00 08 */	ble lbl_802F3E54
/* 802F3E50 002EFAB0  3B 60 00 0A */	li r27, 0xa
lbl_802F3E54:
/* 802F3E54 002EFAB4  3B BD 00 01 */	addi r29, r29, 1
/* 802F3E58 002EFAB8  93 7F 66 10 */	stw r27, 0x6610(r31)
/* 802F3E5C 002EFABC  28 1D 00 0A */	cmplwi r29, 0xa
/* 802F3E60 002EFAC0  41 80 00 08 */	blt lbl_802F3E68
/* 802F3E64 002EFAC4  3B A0 00 00 */	li r29, 0
lbl_802F3E68:
/* 802F3E68 002EFAC8  93 BF 66 0C */	stw r29, 0x660c(r31)
/* 802F3E6C 002EFACC  7F 23 CB 78 */	mr r3, r25
/* 802F3E70 002EFAD0  4B F7 A9 15 */	bl OSRestoreInterrupts
/* 802F3E74 002EFAD4  3C 60 80 00 */	lis r3, 0x7FFFFFFF@ha
/* 802F3E78 002EFAD8  38 C0 FF FF */	li r6, -1
/* 802F3E7C 002EFADC  38 83 FF FF */	addi r4, r3, 0x7FFFFFFF@l
/* 802F3E80 002EFAE0  38 A0 FF FF */	li r5, -1
/* 802F3E84 002EFAE4  7F 69 03 A6 */	mtctr r27
/* 802F3E88 002EFAE8  28 1B 00 00 */	cmplwi r27, 0
/* 802F3E8C 002EFAEC  40 81 00 50 */	ble lbl_802F3EDC
lbl_802F3E90:
/* 802F3E90 002EFAF0  2C 1C 00 00 */	cmpwi r28, 0
/* 802F3E94 002EFAF4  40 80 00 08 */	bge lbl_802F3E9C
/* 802F3E98 002EFAF8  3B 9C 00 0A */	addi r28, r28, 0xa
lbl_802F3E9C:
/* 802F3E9C 002EFAFC  57 80 08 3C */	slwi r0, r28, 1
/* 802F3EA0 002EFB00  7C 7A 02 2E */	lhzx r3, r26, r0
/* 802F3EA4 002EFB04  7C 03 20 00 */	cmpw r3, r4
/* 802F3EA8 002EFB08  40 80 00 08 */	bge lbl_802F3EB0
/* 802F3EAC 002EFB0C  7C 64 1B 78 */	mr r4, r3
lbl_802F3EB0:
/* 802F3EB0 002EFB10  7C 03 28 00 */	cmpw r3, r5
/* 802F3EB4 002EFB14  40 81 00 08 */	ble lbl_802F3EBC
/* 802F3EB8 002EFB18  7C 65 1B 78 */	mr r5, r3
lbl_802F3EBC:
/* 802F3EBC 002EFB1C  3C 63 00 01 */	addis r3, r3, 1
/* 802F3EC0 002EFB20  38 63 80 00 */	addi r3, r3, -32768
/* 802F3EC4 002EFB24  54 60 04 3E */	clrlwi r0, r3, 0x10
/* 802F3EC8 002EFB28  7C 00 30 00 */	cmpw r0, r6
/* 802F3ECC 002EFB2C  40 81 00 08 */	ble lbl_802F3ED4
/* 802F3ED0 002EFB30  7C 06 03 78 */	mr r6, r0
lbl_802F3ED4:
/* 802F3ED4 002EFB34  3B 9C FF FF */	addi r28, r28, -1
/* 802F3ED8 002EFB38  42 00 FF B8 */	bdnz lbl_802F3E90
lbl_802F3EDC:
/* 802F3EDC 002EFB3C  3C 60 00 01 */	lis r3, 0x00008000@ha
/* 802F3EE0 002EFB40  38 06 80 00 */	addi r0, r6, -32768
/* 802F3EE4 002EFB44  7C 84 28 50 */	subf r4, r4, r5
/* 802F3EE8 002EFB48  38 63 80 00 */	addi r3, r3, 0x00008000@l
/* 802F3EEC 002EFB4C  54 00 04 3E */	clrlwi r0, r0, 0x10
/* 802F3EF0 002EFB50  7C 04 18 00 */	cmpw r4, r3
/* 802F3EF4 002EFB54  40 80 00 08 */	bge lbl_802F3EFC
/* 802F3EF8 002EFB58  54 A0 04 3E */	clrlwi r0, r5, 0x10
lbl_802F3EFC:
/* 802F3EFC 002EFB5C  90 1F 65 F4 */	stw r0, 0x65f4(r31)
/* 802F3F00 002EFB60  39 61 00 30 */	addi r11, r1, 0x30
/* 802F3F04 002EFB64  4B ED 32 69 */	bl _restgpr_25
/* 802F3F08 002EFB68  80 01 00 34 */	lwz r0, 0x34(r1)
/* 802F3F0C 002EFB6C  7C 08 03 A6 */	mtlr r0
/* 802F3F10 002EFB70  38 21 00 30 */	addi r1, r1, 0x30
/* 802F3F14 002EFB74  4E 80 00 20 */	blr

.global MPiGetVTsf
MPiGetVTsf:
/* 802F3F18 002EFB78  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F3F1C 002EFB7C  7C 08 02 A6 */	mflr r0
/* 802F3F20 002EFB80  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F3F24 002EFB84  39 61 00 20 */	addi r11, r1, 0x20
/* 802F3F28 002EFB88  4B ED 31 FD */	bl _savegpr_26
/* 802F3F2C 002EFB8C  3F 40 80 00 */	lis r26, 0x800000F8@ha
/* 802F3F30 002EFB90  83 E2 AA 30 */	lwz r31, lbl_80643030-_SDA2_BASE_(r2)
/* 802F3F34 002EFB94  80 1A 00 F8 */	lwz r0, 0x800000F8@l(r26)
/* 802F3F38 002EFB98  3F 60 43 1C */	lis r27, 0x431BDE83@ha
/* 802F3F3C 002EFB9C  38 7B DE 83 */	addi r3, r27, 0x431BDE83@l
/* 802F3F40 002EFBA0  80 BF 6D DC */	lwz r5, 0x6ddc(r31)
/* 802F3F44 002EFBA4  54 00 F0 BE */	srwi r0, r0, 2
/* 802F3F48 002EFBA8  80 9F 6D D8 */	lwz r4, 0x6dd8(r31)
/* 802F3F4C 002EFBAC  7C 03 00 16 */	mulhwu r0, r3, r0
/* 802F3F50 002EFBB0  3B 80 00 00 */	li r28, 0
/* 802F3F54 002EFBB4  54 00 8B FE */	srwi r0, r0, 0xf
/* 802F3F58 002EFBB8  1C 00 19 64 */	mulli r0, r0, 0x1964
/* 802F3F5C 002EFBBC  54 00 E8 FE */	srwi r0, r0, 3
/* 802F3F60 002EFBC0  7F A0 28 10 */	subfc r29, r0, r5
/* 802F3F64 002EFBC4  7F DC 21 10 */	subfe r30, r28, r4
/* 802F3F68 002EFBC8  4B F7 E8 51 */	bl OSGetTime
/* 802F3F6C 002EFBCC  6C 65 80 00 */	xoris r5, r3, 0x8000
/* 802F3F70 002EFBD0  6F C0 80 00 */	xoris r0, r30, 0x8000
/* 802F3F74 002EFBD4  7C 64 E8 10 */	subfc r3, r4, r29
/* 802F3F78 002EFBD8  7C A5 01 10 */	subfe r5, r5, r0
/* 802F3F7C 002EFBDC  7C A0 01 10 */	subfe r5, r0, r0
/* 802F3F80 002EFBE0  7C A5 00 D1 */	neg. r5, r5
/* 802F3F84 002EFBE4  41 82 00 28 */	beq lbl_802F3FAC
/* 802F3F88 002EFBE8  80 1A 00 F8 */	lwz r0, 0xf8(r26)
/* 802F3F8C 002EFBEC  38 7B DE 83 */	addi r3, r27, -8573
/* 802F3F90 002EFBF0  54 00 F0 BE */	srwi r0, r0, 2
/* 802F3F94 002EFBF4  7C 03 00 16 */	mulhwu r0, r3, r0
/* 802F3F98 002EFBF8  54 00 8B FE */	srwi r0, r0, 0xf
/* 802F3F9C 002EFBFC  1C 00 41 50 */	mulli r0, r0, 0x4150
/* 802F3FA0 002EFC00  54 00 E8 FE */	srwi r0, r0, 3
/* 802F3FA4 002EFC04  7F BD 00 14 */	addc r29, r29, r0
/* 802F3FA8 002EFC08  7F DE E1 14 */	adde r30, r30, r28
lbl_802F3FAC:
/* 802F3FAC 002EFC0C  3C 60 80 00 */	lis r3, 0x800000F8@ha
/* 802F3FB0 002EFC10  3C 80 43 1C */	lis r4, 0x431BDE83@ha
/* 802F3FB4 002EFC14  80 03 00 F8 */	lwz r0, 0x800000F8@l(r3)
/* 802F3FB8 002EFC18  38 A4 DE 83 */	addi r5, r4, 0x431BDE83@l
/* 802F3FBC 002EFC1C  57 C3 18 38 */	slwi r3, r30, 3
/* 802F3FC0 002EFC20  57 A4 18 38 */	slwi r4, r29, 3
/* 802F3FC4 002EFC24  54 00 F0 BE */	srwi r0, r0, 2
/* 802F3FC8 002EFC28  7C 05 00 16 */	mulhwu r0, r5, r0
/* 802F3FCC 002EFC2C  53 A3 1F 7E */	rlwimi r3, r29, 3, 0x1d, 0x1f
/* 802F3FD0 002EFC30  38 A0 00 00 */	li r5, 0
/* 802F3FD4 002EFC34  54 06 8B FE */	srwi r6, r0, 0xf
/* 802F3FD8 002EFC38  4B ED 32 A1 */	bl __div2i
/* 802F3FDC 002EFC3C  80 1F 65 F4 */	lwz r0, 0x65f4(r31)
/* 802F3FE0 002EFC40  54 84 D0 3E */	rotlwi r4, r4, 0x1a
/* 802F3FE4 002EFC44  50 64 D0 0A */	rlwimi r4, r3, 0x1a, 0, 5
/* 802F3FE8 002EFC48  7C 63 36 70 */	srawi r3, r3, 6
/* 802F3FEC 002EFC4C  39 61 00 20 */	addi r11, r1, 0x20
/* 802F3FF0 002EFC50  7C 60 20 14 */	addc r3, r0, r4
/* 802F3FF4 002EFC54  4B ED 31 7D */	bl _restgpr_26
/* 802F3FF8 002EFC58  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F3FFC 002EFC5C  7C 08 03 A6 */	mtlr r0
/* 802F4000 002EFC60  38 21 00 20 */	addi r1, r1, 0x20
/* 802F4004 002EFC64  4E 80 00 20 */	blr