summaryrefslogtreecommitdiff
path: root/asm/SDK/VF/pf_sector.s
blob: d1c9dfdb5ace1b348cbb4eac56b7054c847b6ff9 (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
.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