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
|
.include "macros.inc"
.section .text, "ax" # 0x80006980 - 0x803E1E60
.global VFiPFSEC_ReadFAT
VFiPFSEC_ReadFAT:
/* 80318970 003145D0 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 80318974 003145D4 7C 08 02 A6 */ mflr r0
/* 80318978 003145D8 90 01 00 34 */ stw r0, 0x34(r1)
/* 8031897C 003145DC 39 61 00 30 */ addi r11, r1, 0x30
/* 80318980 003145E0 4B EA E7 A9 */ bl _savegpr_27
/* 80318984 003145E4 2C 03 00 00 */ cmpwi r3, 0
/* 80318988 003145E8 7C 7B 1B 78 */ mr r27, r3
/* 8031898C 003145EC 7C 9C 23 78 */ mr r28, r4
/* 80318990 003145F0 7C BD 2B 78 */ mr r29, r5
/* 80318994 003145F4 7C DE 33 78 */ mr r30, r6
/* 80318998 003145F8 7C FF 3B 78 */ mr r31, r7
/* 8031899C 003145FC 40 82 00 0C */ bne lbl_803189A8
/* 803189A0 00314600 38 60 00 0A */ li r3, 0xa
/* 803189A4 00314604 48 00 00 6C */ b lbl_80318A10
lbl_803189A8:
/* 803189A8 00314608 2C 04 00 00 */ cmpwi r4, 0
/* 803189AC 0031460C 40 82 00 0C */ bne lbl_803189B8
/* 803189B0 00314610 38 60 00 0A */ li r3, 0xa
/* 803189B4 00314614 48 00 00 5C */ b lbl_80318A10
lbl_803189B8:
/* 803189B8 00314618 A0 03 18 78 */ lhz r0, 0x1878(r3)
/* 803189BC 0031461C 54 00 07 FF */ clrlwi. r0, r0, 0x1f
/* 803189C0 00314620 41 82 00 10 */ beq lbl_803189D0
/* 803189C4 00314624 4B FE D3 8D */ bl VFiPFDRV_IsInserted
/* 803189C8 00314628 2C 03 00 00 */ cmpwi r3, 0
/* 803189CC 0031462C 40 82 00 0C */ bne lbl_803189D8
lbl_803189D0:
/* 803189D0 00314630 38 60 00 09 */ li r3, 9
/* 803189D4 00314634 48 00 00 3C */ b lbl_80318A10
lbl_803189D8:
/* 803189D8 00314638 7F 63 DB 78 */ mr r3, r27
/* 803189DC 0031463C 7F A4 EB 78 */ mr r4, r29
/* 803189E0 00314640 38 A1 00 08 */ addi r5, r1, 8
/* 803189E4 00314644 4B FF 1E 69 */ bl VFiPFCACHE_ReadFATPage
/* 803189E8 00314648 2C 03 00 00 */ cmpwi r3, 0
/* 803189EC 0031464C 41 82 00 08 */ beq lbl_803189F4
/* 803189F0 00314650 48 00 00 20 */ b lbl_80318A10
lbl_803189F4:
/* 803189F4 00314654 80 81 00 08 */ lwz r4, 8(r1)
/* 803189F8 00314658 7F 83 E3 78 */ mr r3, r28
/* 803189FC 0031465C 7F E5 FB 78 */ mr r5, r31
/* 80318A00 00314660 80 04 00 08 */ lwz r0, 8(r4)
/* 80318A04 00314664 7C 80 F2 14 */ add r4, r0, r30
/* 80318A08 00314668 4B FE C4 A5 */ bl VFipf_memcpy
/* 80318A0C 0031466C 38 60 00 00 */ li r3, 0
lbl_80318A10:
/* 80318A10 00314670 39 61 00 30 */ addi r11, r1, 0x30
/* 80318A14 00314674 4B EA E7 61 */ bl _restgpr_27
/* 80318A18 00314678 80 01 00 34 */ lwz r0, 0x34(r1)
/* 80318A1C 0031467C 7C 08 03 A6 */ mtlr r0
/* 80318A20 00314680 38 21 00 30 */ addi r1, r1, 0x30
/* 80318A24 00314684 4E 80 00 20 */ blr
.global VFiPFSEC_ReadData
VFiPFSEC_ReadData:
/* 80318A28 00314688 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 80318A2C 0031468C 7C 08 02 A6 */ mflr r0
/* 80318A30 00314690 90 01 00 34 */ stw r0, 0x34(r1)
/* 80318A34 00314694 39 61 00 30 */ addi r11, r1, 0x30
/* 80318A38 00314698 4B EA E6 E9 */ bl _savegpr_25
/* 80318A3C 0031469C 38 00 00 00 */ li r0, 0
/* 80318A40 003146A0 2C 03 00 00 */ cmpwi r3, 0
/* 80318A44 003146A4 90 08 00 00 */ stw r0, 0(r8)
/* 80318A48 003146A8 7C 7A 1B 78 */ mr r26, r3
/* 80318A4C 003146AC 7C 9B 23 78 */ mr r27, r4
/* 80318A50 003146B0 7C BC 2B 78 */ mr r28, r5
/* 80318A54 003146B4 7C D9 33 78 */ mr r25, r6
/* 80318A58 003146B8 7C FF 3B 78 */ mr r31, r7
/* 80318A5C 003146BC 7D 1D 43 78 */ mr r29, r8
/* 80318A60 003146C0 7D 3E 4B 78 */ mr r30, r9
/* 80318A64 003146C4 40 82 00 0C */ bne lbl_80318A70
/* 80318A68 003146C8 38 60 00 0A */ li r3, 0xa
/* 80318A6C 003146CC 48 00 02 84 */ b lbl_80318CF0
lbl_80318A70:
/* 80318A70 003146D0 2C 04 00 00 */ cmpwi r4, 0
/* 80318A74 003146D4 40 82 00 0C */ bne lbl_80318A80
/* 80318A78 003146D8 38 60 00 0A */ li r3, 0xa
/* 80318A7C 003146DC 48 00 02 74 */ b lbl_80318CF0
lbl_80318A80:
/* 80318A80 003146E0 A0 03 18 78 */ lhz r0, 0x1878(r3)
/* 80318A84 003146E4 54 00 07 FF */ clrlwi. r0, r0, 0x1f
/* 80318A88 003146E8 41 82 00 10 */ beq lbl_80318A98
/* 80318A8C 003146EC 4B FE D2 C5 */ bl VFiPFDRV_IsInserted
/* 80318A90 003146F0 2C 03 00 00 */ cmpwi r3, 0
/* 80318A94 003146F4 40 82 00 0C */ bne lbl_80318AA0
lbl_80318A98:
/* 80318A98 003146F8 38 60 00 09 */ li r3, 9
/* 80318A9C 003146FC 48 00 02 54 */ b lbl_80318CF0
lbl_80318AA0:
/* 80318AA0 00314700 2C 99 00 00 */ cmpwi cr1, r25, 0
/* 80318AA4 00314704 40 86 00 10 */ bne cr1, lbl_80318AB4
/* 80318AA8 00314708 A0 7A 00 00 */ lhz r3, 0(r26)
/* 80318AAC 0031470C 7C 1F 18 40 */ cmplw r31, r3
/* 80318AB0 00314710 40 80 00 44 */ bge lbl_80318AF4
lbl_80318AB4:
/* 80318AB4 00314714 7F 43 D3 78 */ mr r3, r26
/* 80318AB8 00314718 7F 84 E3 78 */ mr r4, r28
/* 80318ABC 0031471C 7F C6 F3 78 */ mr r6, r30
/* 80318AC0 00314720 38 A1 00 0C */ addi r5, r1, 0xc
/* 80318AC4 00314724 4B FF 1D C9 */ bl VFiPFCACHE_ReadDataPage
/* 80318AC8 00314728 2C 03 00 00 */ cmpwi r3, 0
/* 80318ACC 0031472C 41 82 00 08 */ beq lbl_80318AD4
/* 80318AD0 00314730 48 00 02 20 */ b lbl_80318CF0
lbl_80318AD4:
/* 80318AD4 00314734 80 81 00 0C */ lwz r4, 0xc(r1)
/* 80318AD8 00314738 7F 63 DB 78 */ mr r3, r27
/* 80318ADC 0031473C 7F E5 FB 78 */ mr r5, r31
/* 80318AE0 00314740 80 04 00 08 */ lwz r0, 8(r4)
/* 80318AE4 00314744 7C 80 CA 14 */ add r4, r0, r25
/* 80318AE8 00314748 4B FE C3 C5 */ bl VFipf_memcpy
/* 80318AEC 0031474C 93 FD 00 00 */ stw r31, 0(r29)
/* 80318AF0 00314750 48 00 01 FC */ b lbl_80318CEC
lbl_80318AF4:
/* 80318AF4 00314754 40 86 00 6C */ bne cr1, lbl_80318B60
/* 80318AF8 00314758 38 03 FF FF */ addi r0, r3, -1
/* 80318AFC 0031475C 7F E0 00 39 */ and. r0, r31, r0
/* 80318B00 00314760 40 82 00 60 */ bne lbl_80318B60
/* 80318B04 00314764 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318B08 00314768 7F 43 D3 78 */ mr r3, r26
/* 80318B0C 0031476C 7F 64 DB 78 */ mr r4, r27
/* 80318B10 00314770 7F 85 E3 78 */ mr r5, r28
/* 80318B14 00314774 7F E6 04 30 */ srw r6, r31, r0
/* 80318B18 00314778 38 E1 00 08 */ addi r7, r1, 8
/* 80318B1C 0031477C 4B FF 1E 01 */ bl VFiPFCACHE_ReadDataNumSector
/* 80318B20 00314780 2C 03 00 00 */ cmpwi r3, 0
/* 80318B24 00314784 41 82 00 08 */ beq lbl_80318B2C
/* 80318B28 00314788 48 00 01 C8 */ b lbl_80318CF0
lbl_80318B2C:
/* 80318B2C 0031478C 80 61 00 08 */ lwz r3, 8(r1)
/* 80318B30 00314790 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318B34 00314794 80 9D 00 00 */ lwz r4, 0(r29)
/* 80318B38 00314798 7C 60 00 30 */ slw r0, r3, r0
/* 80318B3C 0031479C 7C 04 02 14 */ add r0, r4, r0
/* 80318B40 003147A0 90 1D 00 00 */ stw r0, 0(r29)
/* 80318B44 003147A4 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318B48 003147A8 80 61 00 08 */ lwz r3, 8(r1)
/* 80318B4C 003147AC 7F E0 04 30 */ srw r0, r31, r0
/* 80318B50 003147B0 7C 03 00 40 */ cmplw r3, r0
/* 80318B54 003147B4 41 82 01 98 */ beq lbl_80318CEC
/* 80318B58 003147B8 38 60 00 11 */ li r3, 0x11
/* 80318B5C 003147BC 48 00 01 94 */ b lbl_80318CF0
lbl_80318B60:
/* 80318B60 003147C0 2C 19 00 00 */ cmpwi r25, 0
/* 80318B64 003147C4 40 82 01 80 */ bne lbl_80318CE4
/* 80318B68 003147C8 7F 43 D3 78 */ mr r3, r26
/* 80318B6C 003147CC 7F 84 E3 78 */ mr r4, r28
/* 80318B70 003147D0 4B FF 1F 35 */ bl VFiPFCACHE_SearchDataCache
/* 80318B74 003147D4 2C 03 00 00 */ cmpwi r3, 0
/* 80318B78 003147D8 90 61 00 0C */ stw r3, 0xc(r1)
/* 80318B7C 003147DC 41 82 00 80 */ beq lbl_80318BFC
/* 80318B80 003147E0 80 83 00 18 */ lwz r4, 0x18(r3)
/* 80318B84 003147E4 80 03 00 14 */ lwz r0, 0x14(r3)
/* 80318B88 003147E8 88 BA 00 20 */ lbz r5, 0x20(r26)
/* 80318B8C 003147EC 7C 04 02 14 */ add r0, r4, r0
/* 80318B90 003147F0 7F 3C 00 50 */ subf r25, r28, r0
/* 80318B94 003147F4 7F E0 2C 30 */ srw r0, r31, r5
/* 80318B98 003147F8 7C 19 00 40 */ cmplw r25, r0
/* 80318B9C 003147FC 41 81 00 3C */ bgt lbl_80318BD8
/* 80318BA0 00314800 80 83 00 08 */ lwz r4, 8(r3)
/* 80318BA4 00314804 7F 63 DB 78 */ mr r3, r27
/* 80318BA8 00314808 7F 25 28 30 */ slw r5, r25, r5
/* 80318BAC 0031480C 4B FE C3 01 */ bl VFipf_memcpy
/* 80318BB0 00314810 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318BB4 00314814 7F 9C CA 14 */ add r28, r28, r25
/* 80318BB8 00314818 80 7D 00 00 */ lwz r3, 0(r29)
/* 80318BBC 0031481C 7F 20 00 30 */ slw r0, r25, r0
/* 80318BC0 00314820 7C 03 02 14 */ add r0, r3, r0
/* 80318BC4 00314824 90 1D 00 00 */ stw r0, 0(r29)
/* 80318BC8 00314828 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318BCC 0031482C 7F 20 00 30 */ slw r0, r25, r0
/* 80318BD0 00314830 7F E0 F8 50 */ subf r31, r0, r31
/* 80318BD4 00314834 48 00 00 28 */ b lbl_80318BFC
lbl_80318BD8:
/* 80318BD8 00314838 40 81 00 24 */ ble lbl_80318BFC
/* 80318BDC 0031483C 80 83 00 08 */ lwz r4, 8(r3)
/* 80318BE0 00314840 7F 63 DB 78 */ mr r3, r27
/* 80318BE4 00314844 7F E5 FB 78 */ mr r5, r31
/* 80318BE8 00314848 4B FE C2 C5 */ bl VFipf_memcpy
/* 80318BEC 0031484C 80 1D 00 00 */ lwz r0, 0(r29)
/* 80318BF0 00314850 7C 00 FA 14 */ add r0, r0, r31
/* 80318BF4 00314854 3B E0 00 00 */ li r31, 0
/* 80318BF8 00314858 90 1D 00 00 */ stw r0, 0(r29)
lbl_80318BFC:
/* 80318BFC 0031485C 2C 1F 00 00 */ cmpwi r31, 0
/* 80318C00 00314860 41 82 00 EC */ beq lbl_80318CEC
/* 80318C04 00314864 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318C08 00314868 80 7A 16 04 */ lwz r3, 0x1604(r26)
/* 80318C0C 0031486C 7F FF 04 30 */ srw r31, r31, r0
/* 80318C10 00314870 7C 9C FA 14 */ add r4, r28, r31
/* 80318C14 00314874 7C 04 1B 96 */ divwu r0, r4, r3
/* 80318C18 00314878 7C 00 19 D6 */ mullw r0, r0, r3
/* 80318C1C 0031487C 7C 60 20 50 */ subf r3, r0, r4
/* 80318C20 00314880 7C 1F 18 40 */ cmplw r31, r3
/* 80318C24 00314884 40 81 00 64 */ ble lbl_80318C88
/* 80318C28 00314888 80 1D 00 00 */ lwz r0, 0(r29)
/* 80318C2C 0031488C 7F 23 F8 50 */ subf r25, r3, r31
/* 80318C30 00314890 7F 43 D3 78 */ mr r3, r26
/* 80318C34 00314894 7F 85 E3 78 */ mr r5, r28
/* 80318C38 00314898 7F 26 CB 78 */ mr r6, r25
/* 80318C3C 0031489C 7C 9B 02 14 */ add r4, r27, r0
/* 80318C40 003148A0 38 E1 00 08 */ addi r7, r1, 8
/* 80318C44 003148A4 4B FF 1C D9 */ bl VFiPFCACHE_ReadDataNumSector
/* 80318C48 003148A8 2C 03 00 00 */ cmpwi r3, 0
/* 80318C4C 003148AC 41 82 00 08 */ beq lbl_80318C54
/* 80318C50 003148B0 48 00 00 A0 */ b lbl_80318CF0
lbl_80318C54:
/* 80318C54 003148B4 80 61 00 08 */ lwz r3, 8(r1)
/* 80318C58 003148B8 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318C5C 003148BC 80 9D 00 00 */ lwz r4, 0(r29)
/* 80318C60 003148C0 7C 60 00 30 */ slw r0, r3, r0
/* 80318C64 003148C4 7C 04 02 14 */ add r0, r4, r0
/* 80318C68 003148C8 90 1D 00 00 */ stw r0, 0(r29)
/* 80318C6C 003148CC 80 01 00 08 */ lwz r0, 8(r1)
/* 80318C70 003148D0 7C 00 C8 40 */ cmplw r0, r25
/* 80318C74 003148D4 41 82 00 0C */ beq lbl_80318C80
/* 80318C78 003148D8 38 60 00 11 */ li r3, 0x11
/* 80318C7C 003148DC 48 00 00 74 */ b lbl_80318CF0
lbl_80318C80:
/* 80318C80 003148E0 7F 9C CA 14 */ add r28, r28, r25
/* 80318C84 003148E4 7F F9 F8 50 */ subf r31, r25, r31
lbl_80318C88:
/* 80318C88 003148E8 2C 1F 00 00 */ cmpwi r31, 0
/* 80318C8C 003148EC 41 82 00 60 */ beq lbl_80318CEC
/* 80318C90 003148F0 7F 43 D3 78 */ mr r3, r26
/* 80318C94 003148F4 7F 84 E3 78 */ mr r4, r28
/* 80318C98 003148F8 7F C6 F3 78 */ mr r6, r30
/* 80318C9C 003148FC 38 A1 00 0C */ addi r5, r1, 0xc
/* 80318CA0 00314900 4B FF 1B ED */ bl VFiPFCACHE_ReadDataPage
/* 80318CA4 00314904 2C 03 00 00 */ cmpwi r3, 0
/* 80318CA8 00314908 41 82 00 08 */ beq lbl_80318CB0
/* 80318CAC 0031490C 48 00 00 44 */ b lbl_80318CF0
lbl_80318CB0:
/* 80318CB0 00314910 80 61 00 0C */ lwz r3, 0xc(r1)
/* 80318CB4 00314914 80 BD 00 00 */ lwz r5, 0(r29)
/* 80318CB8 00314918 80 83 00 08 */ lwz r4, 8(r3)
/* 80318CBC 0031491C 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318CC0 00314920 7C 7B 2A 14 */ add r3, r27, r5
/* 80318CC4 00314924 7F E5 00 30 */ slw r5, r31, r0
/* 80318CC8 00314928 4B FE C1 E5 */ bl VFipf_memcpy
/* 80318CCC 0031492C 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318CD0 00314930 80 7D 00 00 */ lwz r3, 0(r29)
/* 80318CD4 00314934 7F E0 00 30 */ slw r0, r31, r0
/* 80318CD8 00314938 7C 03 02 14 */ add r0, r3, r0
/* 80318CDC 0031493C 90 1D 00 00 */ stw r0, 0(r29)
/* 80318CE0 00314940 48 00 00 0C */ b lbl_80318CEC
lbl_80318CE4:
/* 80318CE4 00314944 38 60 00 0A */ li r3, 0xa
/* 80318CE8 00314948 48 00 00 08 */ b lbl_80318CF0
lbl_80318CEC:
/* 80318CEC 0031494C 38 60 00 00 */ li r3, 0
lbl_80318CF0:
/* 80318CF0 00314950 39 61 00 30 */ addi r11, r1, 0x30
/* 80318CF4 00314954 4B EA E4 79 */ bl _restgpr_25
/* 80318CF8 00314958 80 01 00 34 */ lwz r0, 0x34(r1)
/* 80318CFC 0031495C 7C 08 03 A6 */ mtlr r0
/* 80318D00 00314960 38 21 00 30 */ addi r1, r1, 0x30
/* 80318D04 00314964 4E 80 00 20 */ blr
.global VFiPFSEC_WriteFAT
VFiPFSEC_WriteFAT:
/* 80318D08 00314968 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 80318D0C 0031496C 7C 08 02 A6 */ mflr r0
/* 80318D10 00314970 90 01 00 34 */ stw r0, 0x34(r1)
/* 80318D14 00314974 39 61 00 30 */ addi r11, r1, 0x30
/* 80318D18 00314978 4B EA E4 11 */ bl _savegpr_27
/* 80318D1C 0031497C 2C 03 00 00 */ cmpwi r3, 0
/* 80318D20 00314980 7C 7B 1B 78 */ mr r27, r3
/* 80318D24 00314984 7C 9C 23 78 */ mr r28, r4
/* 80318D28 00314988 7C BD 2B 78 */ mr r29, r5
/* 80318D2C 0031498C 7C DE 33 78 */ mr r30, r6
/* 80318D30 00314990 7C FF 3B 78 */ mr r31, r7
/* 80318D34 00314994 40 82 00 0C */ bne lbl_80318D40
/* 80318D38 00314998 38 60 00 0A */ li r3, 0xa
/* 80318D3C 0031499C 48 00 00 94 */ b lbl_80318DD0
lbl_80318D40:
/* 80318D40 003149A0 2C 04 00 00 */ cmpwi r4, 0
/* 80318D44 003149A4 40 82 00 0C */ bne lbl_80318D50
/* 80318D48 003149A8 38 60 00 0A */ li r3, 0xa
/* 80318D4C 003149AC 48 00 00 84 */ b lbl_80318DD0
lbl_80318D50:
/* 80318D50 003149B0 A0 03 18 78 */ lhz r0, 0x1878(r3)
/* 80318D54 003149B4 54 00 07 FF */ clrlwi. r0, r0, 0x1f
/* 80318D58 003149B8 41 82 00 20 */ beq lbl_80318D78
/* 80318D5C 003149BC 4B FE CF F5 */ bl VFiPFDRV_IsInserted
/* 80318D60 003149C0 2C 03 00 00 */ cmpwi r3, 0
/* 80318D64 003149C4 41 82 00 14 */ beq lbl_80318D78
/* 80318D68 003149C8 7F 63 DB 78 */ mr r3, r27
/* 80318D6C 003149CC 4B FE D0 3D */ bl VFiPFDRV_IsWProtected
/* 80318D70 003149D0 2C 03 00 00 */ cmpwi r3, 0
/* 80318D74 003149D4 41 82 00 0C */ beq lbl_80318D80
lbl_80318D78:
/* 80318D78 003149D8 38 60 00 09 */ li r3, 9
/* 80318D7C 003149DC 48 00 00 54 */ b lbl_80318DD0
lbl_80318D80:
/* 80318D80 003149E0 7F 63 DB 78 */ mr r3, r27
/* 80318D84 003149E4 7F A4 EB 78 */ mr r4, r29
/* 80318D88 003149E8 38 A1 00 08 */ addi r5, r1, 8
/* 80318D8C 003149EC 4B FF 1A C1 */ bl VFiPFCACHE_ReadFATPage
/* 80318D90 003149F0 2C 03 00 00 */ cmpwi r3, 0
/* 80318D94 003149F4 41 82 00 08 */ beq lbl_80318D9C
/* 80318D98 003149F8 48 00 00 38 */ b lbl_80318DD0
lbl_80318D9C:
/* 80318D9C 003149FC 80 61 00 08 */ lwz r3, 8(r1)
/* 80318DA0 00314A00 7F 84 E3 78 */ mr r4, r28
/* 80318DA4 00314A04 7F E5 FB 78 */ mr r5, r31
/* 80318DA8 00314A08 80 03 00 08 */ lwz r0, 8(r3)
/* 80318DAC 00314A0C 7C 60 F2 14 */ add r3, r0, r30
/* 80318DB0 00314A10 4B FE C0 FD */ bl VFipf_memcpy
/* 80318DB4 00314A14 80 81 00 08 */ lwz r4, 8(r1)
/* 80318DB8 00314A18 7F 63 DB 78 */ mr r3, r27
/* 80318DBC 00314A1C 4B FF 1B C1 */ bl VFiPFCACHE_WriteFATPage
/* 80318DC0 00314A20 7C 03 00 D0 */ neg r0, r3
/* 80318DC4 00314A24 7C 00 1B 78 */ or r0, r0, r3
/* 80318DC8 00314A28 7C 00 FE 70 */ srawi r0, r0, 0x1f
/* 80318DCC 00314A2C 7C 63 00 38 */ and r3, r3, r0
lbl_80318DD0:
/* 80318DD0 00314A30 39 61 00 30 */ addi r11, r1, 0x30
/* 80318DD4 00314A34 4B EA E3 A1 */ bl _restgpr_27
/* 80318DD8 00314A38 80 01 00 34 */ lwz r0, 0x34(r1)
/* 80318DDC 00314A3C 7C 08 03 A6 */ mtlr r0
/* 80318DE0 00314A40 38 21 00 30 */ addi r1, r1, 0x30
/* 80318DE4 00314A44 4E 80 00 20 */ blr
.global VFiPFSEC_WriteData
VFiPFSEC_WriteData:
/* 80318DE8 00314A48 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 80318DEC 00314A4C 7C 08 02 A6 */ mflr r0
/* 80318DF0 00314A50 90 01 00 34 */ stw r0, 0x34(r1)
/* 80318DF4 00314A54 39 61 00 30 */ addi r11, r1, 0x30
/* 80318DF8 00314A58 4B EA E3 29 */ bl _savegpr_25
/* 80318DFC 00314A5C 38 00 00 00 */ li r0, 0
/* 80318E00 00314A60 2C 03 00 00 */ cmpwi r3, 0
/* 80318E04 00314A64 90 08 00 00 */ stw r0, 0(r8)
/* 80318E08 00314A68 7C 7A 1B 78 */ mr r26, r3
/* 80318E0C 00314A6C 7C 9B 23 78 */ mr r27, r4
/* 80318E10 00314A70 7C BC 2B 78 */ mr r28, r5
/* 80318E14 00314A74 7C D9 33 78 */ mr r25, r6
/* 80318E18 00314A78 7C FF 3B 78 */ mr r31, r7
/* 80318E1C 00314A7C 7D 1D 43 78 */ mr r29, r8
/* 80318E20 00314A80 7D 3E 4B 78 */ mr r30, r9
/* 80318E24 00314A84 40 82 00 0C */ bne lbl_80318E30
/* 80318E28 00314A88 38 60 00 0A */ li r3, 0xa
/* 80318E2C 00314A8C 48 00 02 1C */ b lbl_80319048
lbl_80318E30:
/* 80318E30 00314A90 2C 04 00 00 */ cmpwi r4, 0
/* 80318E34 00314A94 40 82 00 0C */ bne lbl_80318E40
/* 80318E38 00314A98 38 60 00 0A */ li r3, 0xa
/* 80318E3C 00314A9C 48 00 02 0C */ b lbl_80319048
lbl_80318E40:
/* 80318E40 00314AA0 A0 03 18 78 */ lhz r0, 0x1878(r3)
/* 80318E44 00314AA4 54 00 07 FF */ clrlwi. r0, r0, 0x1f
/* 80318E48 00314AA8 41 82 00 20 */ beq lbl_80318E68
/* 80318E4C 00314AAC 4B FE CF 05 */ bl VFiPFDRV_IsInserted
/* 80318E50 00314AB0 2C 03 00 00 */ cmpwi r3, 0
/* 80318E54 00314AB4 41 82 00 14 */ beq lbl_80318E68
/* 80318E58 00314AB8 7F 43 D3 78 */ mr r3, r26
/* 80318E5C 00314ABC 4B FE CF 4D */ bl VFiPFDRV_IsWProtected
/* 80318E60 00314AC0 2C 03 00 00 */ cmpwi r3, 0
/* 80318E64 00314AC4 41 82 00 0C */ beq lbl_80318E70
lbl_80318E68:
/* 80318E68 00314AC8 38 60 00 09 */ li r3, 9
/* 80318E6C 00314ACC 48 00 01 DC */ b lbl_80319048
lbl_80318E70:
/* 80318E70 00314AD0 2C 99 00 00 */ cmpwi cr1, r25, 0
/* 80318E74 00314AD4 40 86 00 10 */ bne cr1, lbl_80318E84
/* 80318E78 00314AD8 A0 7A 00 00 */ lhz r3, 0(r26)
/* 80318E7C 00314ADC 7C 1F 18 40 */ cmplw r31, r3
/* 80318E80 00314AE0 40 80 00 60 */ bge lbl_80318EE0
lbl_80318E84:
/* 80318E84 00314AE4 7F 43 D3 78 */ mr r3, r26
/* 80318E88 00314AE8 7F 84 E3 78 */ mr r4, r28
/* 80318E8C 00314AEC 7F C6 F3 78 */ mr r6, r30
/* 80318E90 00314AF0 38 A1 00 0C */ addi r5, r1, 0xc
/* 80318E94 00314AF4 4B FF 1A 41 */ bl VFiPFCACHE_ReadDataPageAndFlushIfNeeded
/* 80318E98 00314AF8 2C 03 00 00 */ cmpwi r3, 0
/* 80318E9C 00314AFC 41 82 00 08 */ beq lbl_80318EA4
/* 80318EA0 00314B00 48 00 01 A8 */ b lbl_80319048
lbl_80318EA4:
/* 80318EA4 00314B04 80 61 00 0C */ lwz r3, 0xc(r1)
/* 80318EA8 00314B08 7F 64 DB 78 */ mr r4, r27
/* 80318EAC 00314B0C 7F E5 FB 78 */ mr r5, r31
/* 80318EB0 00314B10 80 03 00 08 */ lwz r0, 8(r3)
/* 80318EB4 00314B14 7C 60 CA 14 */ add r3, r0, r25
/* 80318EB8 00314B18 4B FE BF F5 */ bl VFipf_memcpy
/* 80318EBC 00314B1C 80 81 00 0C */ lwz r4, 0xc(r1)
/* 80318EC0 00314B20 7F 43 D3 78 */ mr r3, r26
/* 80318EC4 00314B24 7F C5 F3 78 */ mr r5, r30
/* 80318EC8 00314B28 4B FF 1A F1 */ bl VFiPFCACHE_WriteDataPage
/* 80318ECC 00314B2C 2C 03 00 00 */ cmpwi r3, 0
/* 80318ED0 00314B30 41 82 00 08 */ beq lbl_80318ED8
/* 80318ED4 00314B34 48 00 01 74 */ b lbl_80319048
lbl_80318ED8:
/* 80318ED8 00314B38 93 FD 00 00 */ stw r31, 0(r29)
/* 80318EDC 00314B3C 48 00 01 68 */ b lbl_80319044
lbl_80318EE0:
/* 80318EE0 00314B40 40 86 00 64 */ bne cr1, lbl_80318F44
/* 80318EE4 00314B44 38 03 FF FF */ addi r0, r3, -1
/* 80318EE8 00314B48 7F E0 00 39 */ and. r0, r31, r0
/* 80318EEC 00314B4C 40 82 00 58 */ bne lbl_80318F44
/* 80318EF0 00314B50 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318EF4 00314B54 7F 43 D3 78 */ mr r3, r26
/* 80318EF8 00314B58 7F 64 DB 78 */ mr r4, r27
/* 80318EFC 00314B5C 7F 85 E3 78 */ mr r5, r28
/* 80318F00 00314B60 7F E6 04 30 */ srw r6, r31, r0
/* 80318F04 00314B64 38 E1 00 08 */ addi r7, r1, 8
/* 80318F08 00314B68 4B FF 1B 3D */ bl VFiPFCACHE_WriteDataNumSectorAndFreeIfNeeded
/* 80318F0C 00314B6C 2C 03 00 00 */ cmpwi r3, 0
/* 80318F10 00314B70 41 82 00 08 */ beq lbl_80318F18
/* 80318F14 00314B74 48 00 01 34 */ b lbl_80319048
lbl_80318F18:
/* 80318F18 00314B78 80 61 00 08 */ lwz r3, 8(r1)
/* 80318F1C 00314B7C 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318F20 00314B80 7C 60 00 30 */ slw r0, r3, r0
/* 80318F24 00314B84 90 1D 00 00 */ stw r0, 0(r29)
/* 80318F28 00314B88 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318F2C 00314B8C 80 61 00 08 */ lwz r3, 8(r1)
/* 80318F30 00314B90 7F E0 04 30 */ srw r0, r31, r0
/* 80318F34 00314B94 7C 03 00 40 */ cmplw r3, r0
/* 80318F38 00314B98 41 82 01 0C */ beq lbl_80319044
/* 80318F3C 00314B9C 38 60 00 11 */ li r3, 0x11
/* 80318F40 00314BA0 48 00 01 08 */ b lbl_80319048
lbl_80318F44:
/* 80318F44 00314BA4 2C 19 00 00 */ cmpwi r25, 0
/* 80318F48 00314BA8 40 82 00 F4 */ bne lbl_8031903C
/* 80318F4C 00314BAC 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318F50 00314BB0 80 7A 16 04 */ lwz r3, 0x1604(r26)
/* 80318F54 00314BB4 7F FF 04 30 */ srw r31, r31, r0
/* 80318F58 00314BB8 7C 9C FA 14 */ add r4, r28, r31
/* 80318F5C 00314BBC 7C 04 1B 96 */ divwu r0, r4, r3
/* 80318F60 00314BC0 7C 00 19 D6 */ mullw r0, r0, r3
/* 80318F64 00314BC4 7C 00 20 50 */ subf r0, r0, r4
/* 80318F68 00314BC8 7C 1F 00 40 */ cmplw r31, r0
/* 80318F6C 00314BCC 40 81 00 58 */ ble lbl_80318FC4
/* 80318F70 00314BD0 7F 20 F8 50 */ subf r25, r0, r31
/* 80318F74 00314BD4 7F 43 D3 78 */ mr r3, r26
/* 80318F78 00314BD8 7F 64 DB 78 */ mr r4, r27
/* 80318F7C 00314BDC 7F 85 E3 78 */ mr r5, r28
/* 80318F80 00314BE0 7F 26 CB 78 */ mr r6, r25
/* 80318F84 00314BE4 38 E1 00 08 */ addi r7, r1, 8
/* 80318F88 00314BE8 4B FF 1A BD */ bl VFiPFCACHE_WriteDataNumSectorAndFreeIfNeeded
/* 80318F8C 00314BEC 2C 03 00 00 */ cmpwi r3, 0
/* 80318F90 00314BF0 41 82 00 08 */ beq lbl_80318F98
/* 80318F94 00314BF4 48 00 00 B4 */ b lbl_80319048
lbl_80318F98:
/* 80318F98 00314BF8 80 61 00 08 */ lwz r3, 8(r1)
/* 80318F9C 00314BFC 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318FA0 00314C00 7C 60 00 30 */ slw r0, r3, r0
/* 80318FA4 00314C04 90 1D 00 00 */ stw r0, 0(r29)
/* 80318FA8 00314C08 80 01 00 08 */ lwz r0, 8(r1)
/* 80318FAC 00314C0C 7C 00 C8 40 */ cmplw r0, r25
/* 80318FB0 00314C10 41 82 00 0C */ beq lbl_80318FBC
/* 80318FB4 00314C14 38 60 00 11 */ li r3, 0x11
/* 80318FB8 00314C18 48 00 00 90 */ b lbl_80319048
lbl_80318FBC:
/* 80318FBC 00314C1C 7F 9C CA 14 */ add r28, r28, r25
/* 80318FC0 00314C20 7F F9 F8 50 */ subf r31, r25, r31
lbl_80318FC4:
/* 80318FC4 00314C24 2C 1F 00 00 */ cmpwi r31, 0
/* 80318FC8 00314C28 41 82 00 7C */ beq lbl_80319044
/* 80318FCC 00314C2C 7F 43 D3 78 */ mr r3, r26
/* 80318FD0 00314C30 7F 84 E3 78 */ mr r4, r28
/* 80318FD4 00314C34 7F C6 F3 78 */ mr r6, r30
/* 80318FD8 00314C38 38 A1 00 0C */ addi r5, r1, 0xc
/* 80318FDC 00314C3C 4B FF 18 F9 */ bl VFiPFCACHE_ReadDataPageAndFlushIfNeeded
/* 80318FE0 00314C40 2C 03 00 00 */ cmpwi r3, 0
/* 80318FE4 00314C44 41 82 00 08 */ beq lbl_80318FEC
/* 80318FE8 00314C48 48 00 00 60 */ b lbl_80319048
lbl_80318FEC:
/* 80318FEC 00314C4C 80 61 00 0C */ lwz r3, 0xc(r1)
/* 80318FF0 00314C50 80 9D 00 00 */ lwz r4, 0(r29)
/* 80318FF4 00314C54 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80318FF8 00314C58 80 63 00 08 */ lwz r3, 8(r3)
/* 80318FFC 00314C5C 7C 9B 22 14 */ add r4, r27, r4
/* 80319000 00314C60 7F E5 00 30 */ slw r5, r31, r0
/* 80319004 00314C64 4B FE BE A9 */ bl VFipf_memcpy
/* 80319008 00314C68 80 81 00 0C */ lwz r4, 0xc(r1)
/* 8031900C 00314C6C 7F 43 D3 78 */ mr r3, r26
/* 80319010 00314C70 7F C5 F3 78 */ mr r5, r30
/* 80319014 00314C74 4B FF 19 A5 */ bl VFiPFCACHE_WriteDataPage
/* 80319018 00314C78 2C 03 00 00 */ cmpwi r3, 0
/* 8031901C 00314C7C 41 82 00 08 */ beq lbl_80319024
/* 80319020 00314C80 48 00 00 28 */ b lbl_80319048
lbl_80319024:
/* 80319024 00314C84 88 1A 00 20 */ lbz r0, 0x20(r26)
/* 80319028 00314C88 80 7D 00 00 */ lwz r3, 0(r29)
/* 8031902C 00314C8C 7F E0 00 30 */ slw r0, r31, r0
/* 80319030 00314C90 7C 03 02 14 */ add r0, r3, r0
/* 80319034 00314C94 90 1D 00 00 */ stw r0, 0(r29)
/* 80319038 00314C98 48 00 00 0C */ b lbl_80319044
lbl_8031903C:
/* 8031903C 00314C9C 38 60 00 0A */ li r3, 0xa
/* 80319040 00314CA0 48 00 00 08 */ b lbl_80319048
lbl_80319044:
/* 80319044 00314CA4 38 60 00 00 */ li r3, 0
lbl_80319048:
/* 80319048 00314CA8 39 61 00 30 */ addi r11, r1, 0x30
/* 8031904C 00314CAC 4B EA E1 21 */ bl _restgpr_25
/* 80319050 00314CB0 80 01 00 34 */ lwz r0, 0x34(r1)
/* 80319054 00314CB4 7C 08 03 A6 */ mtlr r0
/* 80319058 00314CB8 38 21 00 30 */ addi r1, r1, 0x30
/* 8031905C 00314CBC 4E 80 00 20 */ blr
|