summaryrefslogtreecommitdiff
path: root/asm/SDK/VF/pf_fat32.s
blob: 7b2db224f5c15c8e8b3de268f639597513b66ce2 (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
.include "macros.inc"

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

.global VFiPFFAT32_ReadFATEntry
VFiPFFAT32_ReadFATEntry:
/* 803121D0 0030DE30  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 803121D4 0030DE34  7C 08 02 A6 */	mflr r0
/* 803121D8 0030DE38  90 01 00 34 */	stw r0, 0x34(r1)
/* 803121DC 0030DE3C  39 61 00 30 */	addi r11, r1, 0x30
/* 803121E0 0030DE40  4B EB 4F 45 */	bl _savegpr_26
/* 803121E4 0030DE44  2C 03 00 00 */	cmpwi r3, 0
/* 803121E8 0030DE48  7C 7D 1B 78 */	mr r29, r3
/* 803121EC 0030DE4C  7C BE 2B 78 */	mr r30, r5
/* 803121F0 0030DE50  40 82 00 14 */	bne lbl_80312204
/* 803121F4 0030DE54  38 00 FF FF */	li r0, -1
/* 803121F8 0030DE58  38 60 00 0A */	li r3, 0xa
/* 803121FC 0030DE5C  90 05 00 00 */	stw r0, 0(r5)
/* 80312200 0030DE60  48 00 01 2C */	b lbl_8031232C
lbl_80312204:
/* 80312204 0030DE64  28 04 00 02 */	cmplwi r4, 2
/* 80312208 0030DE68  41 80 00 14 */	blt lbl_8031221C
/* 8031220C 0030DE6C  80 C3 00 34 */	lwz r6, 0x34(r3)
/* 80312210 0030DE70  38 06 00 02 */	addi r0, r6, 2
/* 80312214 0030DE74  7C 04 00 40 */	cmplw r4, r0
/* 80312218 0030DE78  41 80 00 24 */	blt lbl_8031223C
lbl_8031221C:
/* 8031221C 0030DE7C  2C 04 00 00 */	cmpwi r4, 0
/* 80312220 0030DE80  41 82 00 1C */	beq lbl_8031223C
/* 80312224 0030DE84  28 04 00 01 */	cmplwi r4, 1
/* 80312228 0030DE88  41 82 00 14 */	beq lbl_8031223C
/* 8031222C 0030DE8C  38 00 FF FF */	li r0, -1
/* 80312230 0030DE90  38 60 00 0E */	li r3, 0xe
/* 80312234 0030DE94  90 05 00 00 */	stw r0, 0(r5)
/* 80312238 0030DE98  48 00 00 F4 */	b lbl_8031232C
lbl_8031223C:
/* 8031223C 0030DE9C  A0 E3 00 18 */	lhz r7, 0x18(r3)
/* 80312240 0030DEA0  54 88 10 3A */	slwi r8, r4, 2
/* 80312244 0030DEA4  88 A3 00 20 */	lbz r5, 0x20(r3)
/* 80312248 0030DEA8  3B E0 00 01 */	li r31, 1
/* 8031224C 0030DEAC  A0 83 00 00 */	lhz r4, 0(r3)
/* 80312250 0030DEB0  54 E0 06 31 */	rlwinm. r0, r7, 0, 0x18, 0x18
/* 80312254 0030DEB4  80 C3 00 28 */	lwz r6, 0x28(r3)
/* 80312258 0030DEB8  7D 03 2C 30 */	srw r3, r8, r5
/* 8031225C 0030DEBC  38 04 FF FF */	addi r0, r4, -1
/* 80312260 0030DEC0  7C 66 1A 14 */	add r3, r6, r3
/* 80312264 0030DEC4  7D 00 00 38 */	and r0, r8, r0
/* 80312268 0030DEC8  54 7C 04 3E */	clrlwi r28, r3, 0x10
/* 8031226C 0030DECC  54 1B 04 3E */	clrlwi r27, r0, 0x10
/* 80312270 0030DED0  41 82 00 08 */	beq lbl_80312278
/* 80312274 0030DED4  54 FF 07 7E */	clrlwi r31, r7, 0x1d
lbl_80312278:
/* 80312278 0030DED8  7F A3 EB 78 */	mr r3, r29
/* 8031227C 0030DEDC  7F 85 E3 78 */	mr r5, r28
/* 80312280 0030DEE0  7F 66 DB 78 */	mr r6, r27
/* 80312284 0030DEE4  38 81 00 08 */	addi r4, r1, 8
/* 80312288 0030DEE8  38 E0 00 04 */	li r7, 4
/* 8031228C 0030DEEC  48 00 66 E5 */	bl VFiPFSEC_ReadFAT
/* 80312290 0030DEF0  2C 03 10 00 */	cmpwi r3, 0x1000
/* 80312294 0030DEF4  7C 7A 1B 78 */	mr r26, r3
/* 80312298 0030DEF8  40 82 00 50 */	bne lbl_803122E8
/* 8031229C 0030DEFC  81 9D 18 90 */	lwz r12, 0x1890(r29)
/* 803122A0 0030DF00  2C 0C 00 00 */	cmpwi r12, 0
/* 803122A4 0030DF04  41 82 00 44 */	beq lbl_803122E8
/* 803122A8 0030DF08  80 7D 18 70 */	lwz r3, 0x1870(r29)
/* 803122AC 0030DF0C  7D 89 03 A6 */	mtctr r12
/* 803122B0 0030DF10  4E 80 04 21 */	bctrl
/* 803122B4 0030DF14  2C 03 00 00 */	cmpwi r3, 0
/* 803122B8 0030DF18  41 82 00 48 */	beq lbl_80312300
/* 803122BC 0030DF1C  2C 03 00 01 */	cmpwi r3, 1
/* 803122C0 0030DF20  40 82 00 28 */	bne lbl_803122E8
/* 803122C4 0030DF24  88 1D 00 22 */	lbz r0, 0x22(r29)
/* 803122C8 0030DF28  28 00 00 02 */	cmplwi r0, 2
/* 803122CC 0030DF2C  41 80 00 1C */	blt lbl_803122E8
/* 803122D0 0030DF30  7C 1F 00 40 */	cmplw r31, r0
/* 803122D4 0030DF34  40 80 00 14 */	bge lbl_803122E8
/* 803122D8 0030DF38  80 1D 00 0C */	lwz r0, 0xc(r29)
/* 803122DC 0030DF3C  3B FF 00 01 */	addi r31, r31, 1
/* 803122E0 0030DF40  7F 9C 02 14 */	add r28, r28, r0
/* 803122E4 0030DF44  48 00 00 1C */	b lbl_80312300
lbl_803122E8:
/* 803122E8 0030DF48  2C 1A 00 00 */	cmpwi r26, 0
/* 803122EC 0030DF4C  41 82 00 14 */	beq lbl_80312300
/* 803122F0 0030DF50  38 00 FF FF */	li r0, -1
/* 803122F4 0030DF54  7F 43 D3 78 */	mr r3, r26
/* 803122F8 0030DF58  90 1E 00 00 */	stw r0, 0(r30)
/* 803122FC 0030DF5C  48 00 00 30 */	b lbl_8031232C
lbl_80312300:
/* 80312300 0030DF60  2C 1A 00 00 */	cmpwi r26, 0
/* 80312304 0030DF64  40 82 FF 74 */	bne lbl_80312278
/* 80312308 0030DF68  80 A1 00 08 */	lwz r5, 8(r1)
/* 8031230C 0030DF6C  38 60 00 00 */	li r3, 0
/* 80312310 0030DF70  54 A4 42 1E */	rlwinm r4, r5, 8, 8, 0xf
/* 80312314 0030DF74  54 A0 C4 2E */	rlwinm r0, r5, 0x18, 0x10, 0x17
/* 80312318 0030DF78  50 A4 C0 0E */	rlwimi r4, r5, 0x18, 0, 7
/* 8031231C 0030DF7C  50 A0 46 3E */	rlwimi r0, r5, 8, 0x18, 0x1f
/* 80312320 0030DF80  7C 80 03 78 */	or r0, r4, r0
/* 80312324 0030DF84  54 00 01 3E */	clrlwi r0, r0, 4
/* 80312328 0030DF88  90 1E 00 00 */	stw r0, 0(r30)
lbl_8031232C:
/* 8031232C 0030DF8C  39 61 00 30 */	addi r11, r1, 0x30
/* 80312330 0030DF90  4B EB 4E 41 */	bl _restgpr_26
/* 80312334 0030DF94  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80312338 0030DF98  7C 08 03 A6 */	mtlr r0
/* 8031233C 0030DF9C  38 21 00 30 */	addi r1, r1, 0x30
/* 80312340 0030DFA0  4E 80 00 20 */	blr

.global VFiPFFAT32_ReadFATEntryPage
VFiPFFAT32_ReadFATEntryPage:
/* 80312344 0030DFA4  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80312348 0030DFA8  7C 08 02 A6 */	mflr r0
/* 8031234C 0030DFAC  90 01 00 34 */	stw r0, 0x34(r1)
/* 80312350 0030DFB0  39 61 00 30 */	addi r11, r1, 0x30
/* 80312354 0030DFB4  4B EB 4D CD */	bl _savegpr_25
/* 80312358 0030DFB8  2C 03 00 00 */	cmpwi r3, 0
/* 8031235C 0030DFBC  7C 79 1B 78 */	mr r25, r3
/* 80312360 0030DFC0  7C BA 2B 78 */	mr r26, r5
/* 80312364 0030DFC4  7C DB 33 78 */	mr r27, r6
/* 80312368 0030DFC8  3B C0 00 00 */	li r30, 0
/* 8031236C 0030DFCC  40 82 00 0C */	bne lbl_80312378
/* 80312370 0030DFD0  38 60 00 0A */	li r3, 0xa
/* 80312374 0030DFD4  48 00 01 84 */	b lbl_803124F8
lbl_80312378:
/* 80312378 0030DFD8  28 04 00 02 */	cmplwi r4, 2
/* 8031237C 0030DFDC  41 80 00 14 */	blt lbl_80312390
/* 80312380 0030DFE0  80 A3 00 34 */	lwz r5, 0x34(r3)
/* 80312384 0030DFE4  38 05 00 02 */	addi r0, r5, 2
/* 80312388 0030DFE8  7C 04 00 40 */	cmplw r4, r0
/* 8031238C 0030DFEC  41 80 00 1C */	blt lbl_803123A8
lbl_80312390:
/* 80312390 0030DFF0  2C 04 00 00 */	cmpwi r4, 0
/* 80312394 0030DFF4  41 82 00 14 */	beq lbl_803123A8
/* 80312398 0030DFF8  28 04 00 01 */	cmplwi r4, 1
/* 8031239C 0030DFFC  41 82 00 0C */	beq lbl_803123A8
/* 803123A0 0030E000  38 60 00 0E */	li r3, 0xe
/* 803123A4 0030E004  48 00 01 54 */	b lbl_803124F8
lbl_803123A8:
/* 803123A8 0030E008  A0 A3 00 18 */	lhz r5, 0x18(r3)
/* 803123AC 0030E00C  54 9F 10 3A */	slwi r31, r4, 2
/* 803123B0 0030E010  88 E3 00 20 */	lbz r7, 0x20(r3)
/* 803123B4 0030E014  3B 80 00 01 */	li r28, 1
/* 803123B8 0030E018  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 803123BC 0030E01C  80 83 00 28 */	lwz r4, 0x28(r3)
/* 803123C0 0030E020  7F E0 3C 30 */	srw r0, r31, r7
/* 803123C4 0030E024  7C 04 02 14 */	add r0, r4, r0
/* 803123C8 0030E028  54 1D 04 3E */	clrlwi r29, r0, 0x10
/* 803123CC 0030E02C  41 82 00 08 */	beq lbl_803123D4
/* 803123D0 0030E030  54 BC 07 7E */	clrlwi r28, r5, 0x1d
lbl_803123D4:
/* 803123D4 0030E034  80 86 00 00 */	lwz r4, 0(r6)
/* 803123D8 0030E038  80 C4 00 18 */	lwz r6, 0x18(r4)
/* 803123DC 0030E03C  7C 06 E8 40 */	cmplw r6, r29
/* 803123E0 0030E040  41 81 00 14 */	bgt lbl_803123F4
/* 803123E4 0030E044  80 03 16 00 */	lwz r0, 0x1600(r3)
/* 803123E8 0030E048  7C 06 02 14 */	add r0, r6, r0
/* 803123EC 0030E04C  7C 00 E8 40 */	cmplw r0, r29
/* 803123F0 0030E050  41 81 00 A8 */	bgt lbl_80312498
lbl_803123F4:
/* 803123F4 0030E054  A0 04 00 02 */	lhz r0, 2(r4)
/* 803123F8 0030E058  28 00 00 01 */	cmplwi r0, 1
/* 803123FC 0030E05C  40 82 00 18 */	bne lbl_80312414
/* 80312400 0030E060  7F 23 CB 78 */	mr r3, r25
/* 80312404 0030E064  4B FF DA 65 */	bl VFiPFFAT_UpdateFATEntry
/* 80312408 0030E068  2C 03 00 00 */	cmpwi r3, 0
/* 8031240C 0030E06C  41 82 00 08 */	beq lbl_80312414
/* 80312410 0030E070  48 00 00 E8 */	b lbl_803124F8
lbl_80312414:
/* 80312414 0030E074  7F 23 CB 78 */	mr r3, r25
/* 80312418 0030E078  7F A4 EB 78 */	mr r4, r29
/* 8031241C 0030E07C  7F 65 DB 78 */	mr r5, r27
/* 80312420 0030E080  4B FF 84 2D */	bl VFiPFCACHE_ReadFATPage
/* 80312424 0030E084  2C 03 10 00 */	cmpwi r3, 0x1000
/* 80312428 0030E088  7C 7E 1B 78 */	mr r30, r3
/* 8031242C 0030E08C  40 82 00 50 */	bne lbl_8031247C
/* 80312430 0030E090  81 99 18 90 */	lwz r12, 0x1890(r25)
/* 80312434 0030E094  2C 0C 00 00 */	cmpwi r12, 0
/* 80312438 0030E098  41 82 00 44 */	beq lbl_8031247C
/* 8031243C 0030E09C  80 79 18 70 */	lwz r3, 0x1870(r25)
/* 80312440 0030E0A0  7D 89 03 A6 */	mtctr r12
/* 80312444 0030E0A4  4E 80 04 21 */	bctrl
/* 80312448 0030E0A8  2C 03 00 00 */	cmpwi r3, 0
/* 8031244C 0030E0AC  41 82 00 40 */	beq lbl_8031248C
/* 80312450 0030E0B0  2C 03 00 01 */	cmpwi r3, 1
/* 80312454 0030E0B4  40 82 00 28 */	bne lbl_8031247C
/* 80312458 0030E0B8  88 19 00 22 */	lbz r0, 0x22(r25)
/* 8031245C 0030E0BC  28 00 00 02 */	cmplwi r0, 2
/* 80312460 0030E0C0  41 80 00 1C */	blt lbl_8031247C
/* 80312464 0030E0C4  7C 1C 00 40 */	cmplw r28, r0
/* 80312468 0030E0C8  40 80 00 14 */	bge lbl_8031247C
/* 8031246C 0030E0CC  80 19 00 0C */	lwz r0, 0xc(r25)
/* 80312470 0030E0D0  3B 9C 00 01 */	addi r28, r28, 1
/* 80312474 0030E0D4  7F BD 02 14 */	add r29, r29, r0
/* 80312478 0030E0D8  48 00 00 14 */	b lbl_8031248C
lbl_8031247C:
/* 8031247C 0030E0DC  2C 1E 00 00 */	cmpwi r30, 0
/* 80312480 0030E0E0  41 82 00 0C */	beq lbl_8031248C
/* 80312484 0030E0E4  7F C3 F3 78 */	mr r3, r30
/* 80312488 0030E0E8  48 00 00 70 */	b lbl_803124F8
lbl_8031248C:
/* 8031248C 0030E0EC  2C 1E 00 00 */	cmpwi r30, 0
/* 80312490 0030E0F0  40 82 FF 84 */	bne lbl_80312414
/* 80312494 0030E0F4  48 00 00 2C */	b lbl_803124C0
lbl_80312498:
/* 80312498 0030E0F8  80 04 00 04 */	lwz r0, 4(r4)
/* 8031249C 0030E0FC  80 A4 00 08 */	lwz r5, 8(r4)
/* 803124A0 0030E100  7C 00 28 50 */	subf r0, r0, r5
/* 803124A4 0030E104  7C 00 3E 30 */	sraw r0, r0, r7
/* 803124A8 0030E108  7C 06 02 14 */	add r0, r6, r0
/* 803124AC 0030E10C  7C 1D 00 40 */	cmplw r29, r0
/* 803124B0 0030E110  41 82 00 10 */	beq lbl_803124C0
/* 803124B4 0030E114  A0 03 00 00 */	lhz r0, 0(r3)
/* 803124B8 0030E118  7C 05 02 14 */	add r0, r5, r0
/* 803124BC 0030E11C  90 04 00 08 */	stw r0, 8(r4)
lbl_803124C0:
/* 803124C0 0030E120  A0 B9 00 00 */	lhz r5, 0(r25)
/* 803124C4 0030E124  7F C3 F3 78 */	mr r3, r30
/* 803124C8 0030E128  80 9B 00 00 */	lwz r4, 0(r27)
/* 803124CC 0030E12C  38 05 FF FF */	addi r0, r5, -1
/* 803124D0 0030E130  80 84 00 08 */	lwz r4, 8(r4)
/* 803124D4 0030E134  7F E0 00 38 */	and r0, r31, r0
/* 803124D8 0030E138  7C A4 00 2E */	lwzx r5, r4, r0
/* 803124DC 0030E13C  54 A4 42 1E */	rlwinm r4, r5, 8, 8, 0xf
/* 803124E0 0030E140  54 A0 C4 2E */	rlwinm r0, r5, 0x18, 0x10, 0x17
/* 803124E4 0030E144  50 A4 C0 0E */	rlwimi r4, r5, 0x18, 0, 7
/* 803124E8 0030E148  50 A0 46 3E */	rlwimi r0, r5, 8, 0x18, 0x1f
/* 803124EC 0030E14C  7C 80 03 78 */	or r0, r4, r0
/* 803124F0 0030E150  54 00 01 3E */	clrlwi r0, r0, 4
/* 803124F4 0030E154  90 1A 00 00 */	stw r0, 0(r26)
lbl_803124F8:
/* 803124F8 0030E158  39 61 00 30 */	addi r11, r1, 0x30
/* 803124FC 0030E15C  4B EB 4C 71 */	bl _restgpr_25
/* 80312500 0030E160  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80312504 0030E164  7C 08 03 A6 */	mtlr r0
/* 80312508 0030E168  38 21 00 30 */	addi r1, r1, 0x30
/* 8031250C 0030E16C  4E 80 00 20 */	blr

.global VFiPFFAT32_WriteFATEntry
VFiPFFAT32_WriteFATEntry:
/* 80312510 0030E170  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80312514 0030E174  7C 08 02 A6 */	mflr r0
/* 80312518 0030E178  2C 03 00 00 */	cmpwi r3, 0
/* 8031251C 0030E17C  90 01 00 24 */	stw r0, 0x24(r1)
/* 80312520 0030E180  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80312524 0030E184  7C BF 2B 78 */	mr r31, r5
/* 80312528 0030E188  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8031252C 0030E18C  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80312530 0030E190  93 81 00 10 */	stw r28, 0x10(r1)
/* 80312534 0030E194  7C 7C 1B 78 */	mr r28, r3
/* 80312538 0030E198  40 82 00 0C */	bne lbl_80312544
/* 8031253C 0030E19C  38 60 00 0A */	li r3, 0xa
/* 80312540 0030E1A0  48 00 00 D0 */	b lbl_80312610
lbl_80312544:
/* 80312544 0030E1A4  28 04 00 02 */	cmplwi r4, 2
/* 80312548 0030E1A8  41 80 00 14 */	blt lbl_8031255C
/* 8031254C 0030E1AC  80 A3 00 34 */	lwz r5, 0x34(r3)
/* 80312550 0030E1B0  38 05 00 02 */	addi r0, r5, 2
/* 80312554 0030E1B4  7C 04 00 40 */	cmplw r4, r0
/* 80312558 0030E1B8  41 80 00 1C */	blt lbl_80312574
lbl_8031255C:
/* 8031255C 0030E1BC  2C 04 00 00 */	cmpwi r4, 0
/* 80312560 0030E1C0  41 82 00 14 */	beq lbl_80312574
/* 80312564 0030E1C4  28 04 00 01 */	cmplwi r4, 1
/* 80312568 0030E1C8  41 82 00 0C */	beq lbl_80312574
/* 8031256C 0030E1CC  38 60 00 0E */	li r3, 0xe
/* 80312570 0030E1D0  48 00 00 A0 */	b lbl_80312610
lbl_80312574:
/* 80312574 0030E1D4  A0 A3 00 00 */	lhz r5, 0(r3)
/* 80312578 0030E1D8  54 88 10 3A */	slwi r8, r4, 2
/* 8031257C 0030E1DC  88 C3 00 20 */	lbz r6, 0x20(r3)
/* 80312580 0030E1E0  38 81 00 08 */	addi r4, r1, 8
/* 80312584 0030E1E4  38 05 FF FF */	addi r0, r5, -1
/* 80312588 0030E1E8  80 E3 00 28 */	lwz r7, 0x28(r3)
/* 8031258C 0030E1EC  7D 05 34 30 */	srw r5, r8, r6
/* 80312590 0030E1F0  7F 83 E3 78 */	mr r3, r28
/* 80312594 0030E1F4  7C A7 2A 14 */	add r5, r7, r5
/* 80312598 0030E1F8  7D 00 00 38 */	and r0, r8, r0
/* 8031259C 0030E1FC  54 BE 04 3E */	clrlwi r30, r5, 0x10
/* 803125A0 0030E200  38 E0 00 04 */	li r7, 4
/* 803125A4 0030E204  54 1D 04 3E */	clrlwi r29, r0, 0x10
/* 803125A8 0030E208  7F C5 F3 78 */	mr r5, r30
/* 803125AC 0030E20C  7F A6 EB 78 */	mr r6, r29
/* 803125B0 0030E210  48 00 63 C1 */	bl VFiPFSEC_ReadFAT
/* 803125B4 0030E214  2C 03 00 00 */	cmpwi r3, 0
/* 803125B8 0030E218  41 82 00 08 */	beq lbl_803125C0
/* 803125BC 0030E21C  48 00 00 54 */	b lbl_80312610
lbl_803125C0:
/* 803125C0 0030E220  80 E1 00 08 */	lwz r7, 8(r1)
/* 803125C4 0030E224  7F 83 E3 78 */	mr r3, r28
/* 803125C8 0030E228  7F C5 F3 78 */	mr r5, r30
/* 803125CC 0030E22C  7F A6 EB 78 */	mr r6, r29
/* 803125D0 0030E230  54 E8 42 1E */	rlwinm r8, r7, 8, 8, 0xf
/* 803125D4 0030E234  54 E0 C4 2E */	rlwinm r0, r7, 0x18, 0x10, 0x17
/* 803125D8 0030E238  50 E8 C0 0E */	rlwimi r8, r7, 0x18, 0, 7
/* 803125DC 0030E23C  38 81 00 08 */	addi r4, r1, 8
/* 803125E0 0030E240  50 E0 46 3E */	rlwimi r0, r7, 8, 0x18, 0x1f
/* 803125E4 0030E244  38 E0 00 04 */	li r7, 4
/* 803125E8 0030E248  7D 00 03 78 */	or r0, r8, r0
/* 803125EC 0030E24C  54 09 00 06 */	rlwinm r9, r0, 0, 0, 3
/* 803125F0 0030E250  53 E9 01 3E */	rlwimi r9, r31, 0, 4, 0x1f
/* 803125F4 0030E254  55 28 42 1E */	rlwinm r8, r9, 8, 8, 0xf
/* 803125F8 0030E258  55 20 C4 2E */	rlwinm r0, r9, 0x18, 0x10, 0x17
/* 803125FC 0030E25C  51 28 C0 0E */	rlwimi r8, r9, 0x18, 0, 7
/* 80312600 0030E260  51 20 46 3E */	rlwimi r0, r9, 8, 0x18, 0x1f
/* 80312604 0030E264  7D 00 03 78 */	or r0, r8, r0
/* 80312608 0030E268  90 01 00 08 */	stw r0, 8(r1)
/* 8031260C 0030E26C  48 00 66 FD */	bl VFiPFSEC_WriteFAT
lbl_80312610:
/* 80312610 0030E270  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80312614 0030E274  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80312618 0030E278  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8031261C 0030E27C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80312620 0030E280  83 81 00 10 */	lwz r28, 0x10(r1)
/* 80312624 0030E284  7C 08 03 A6 */	mtlr r0
/* 80312628 0030E288  38 21 00 20 */	addi r1, r1, 0x20
/* 8031262C 0030E28C  4E 80 00 20 */	blr

.global VFiPFFAT32_WriteFATEntryPage
VFiPFFAT32_WriteFATEntryPage:
/* 80312630 0030E290  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80312634 0030E294  7C 08 02 A6 */	mflr r0
/* 80312638 0030E298  90 01 00 34 */	stw r0, 0x34(r1)
/* 8031263C 0030E29C  39 61 00 30 */	addi r11, r1, 0x30
/* 80312640 0030E2A0  4B EB 4A E1 */	bl _savegpr_25
/* 80312644 0030E2A4  2C 03 00 00 */	cmpwi r3, 0
/* 80312648 0030E2A8  7C 7A 1B 78 */	mr r26, r3
/* 8031264C 0030E2AC  7C BB 2B 78 */	mr r27, r5
/* 80312650 0030E2B0  7C DC 33 78 */	mr r28, r6
/* 80312654 0030E2B4  3B C0 00 00 */	li r30, 0
/* 80312658 0030E2B8  40 82 00 0C */	bne lbl_80312664
/* 8031265C 0030E2BC  38 60 00 0A */	li r3, 0xa
/* 80312660 0030E2C0  48 00 01 98 */	b lbl_803127F8
lbl_80312664:
/* 80312664 0030E2C4  28 04 00 02 */	cmplwi r4, 2
/* 80312668 0030E2C8  41 80 00 14 */	blt lbl_8031267C
/* 8031266C 0030E2CC  80 A3 00 34 */	lwz r5, 0x34(r3)
/* 80312670 0030E2D0  38 05 00 02 */	addi r0, r5, 2
/* 80312674 0030E2D4  7C 04 00 40 */	cmplw r4, r0
/* 80312678 0030E2D8  41 80 00 1C */	blt lbl_80312694
lbl_8031267C:
/* 8031267C 0030E2DC  2C 04 00 00 */	cmpwi r4, 0
/* 80312680 0030E2E0  41 82 00 14 */	beq lbl_80312694
/* 80312684 0030E2E4  28 04 00 01 */	cmplwi r4, 1
/* 80312688 0030E2E8  41 82 00 0C */	beq lbl_80312694
/* 8031268C 0030E2EC  38 60 00 0E */	li r3, 0xe
/* 80312690 0030E2F0  48 00 01 68 */	b lbl_803127F8
lbl_80312694:
/* 80312694 0030E2F4  88 E3 00 20 */	lbz r7, 0x20(r3)
/* 80312698 0030E2F8  54 88 10 3A */	slwi r8, r4, 2
/* 8031269C 0030E2FC  80 86 00 00 */	lwz r4, 0(r6)
/* 803126A0 0030E300  80 A3 00 28 */	lwz r5, 0x28(r3)
/* 803126A4 0030E304  7D 00 3C 30 */	srw r0, r8, r7
/* 803126A8 0030E308  A0 C3 00 00 */	lhz r6, 0(r3)
/* 803126AC 0030E30C  7C 05 02 14 */	add r0, r5, r0
/* 803126B0 0030E310  80 A4 00 18 */	lwz r5, 0x18(r4)
/* 803126B4 0030E314  54 1D 04 3E */	clrlwi r29, r0, 0x10
/* 803126B8 0030E318  38 06 FF FF */	addi r0, r6, -1
/* 803126BC 0030E31C  7D 00 00 38 */	and r0, r8, r0
/* 803126C0 0030E320  7C 05 E8 40 */	cmplw r5, r29
/* 803126C4 0030E324  54 1F 04 3E */	clrlwi r31, r0, 0x10
/* 803126C8 0030E328  41 81 00 14 */	bgt lbl_803126DC
/* 803126CC 0030E32C  80 03 16 00 */	lwz r0, 0x1600(r3)
/* 803126D0 0030E330  7C 05 02 14 */	add r0, r5, r0
/* 803126D4 0030E334  7C 00 E8 40 */	cmplw r0, r29
/* 803126D8 0030E338  41 81 00 B0 */	bgt lbl_80312788
lbl_803126DC:
/* 803126DC 0030E33C  7F 43 D3 78 */	mr r3, r26
/* 803126E0 0030E340  4B FF D7 89 */	bl VFiPFFAT_UpdateFATEntry
/* 803126E4 0030E344  2C 03 00 00 */	cmpwi r3, 0
/* 803126E8 0030E348  41 82 00 08 */	beq lbl_803126F0
/* 803126EC 0030E34C  48 00 01 0C */	b lbl_803127F8
lbl_803126F0:
/* 803126F0 0030E350  A0 7A 00 18 */	lhz r3, 0x18(r26)
/* 803126F4 0030E354  3B 20 00 01 */	li r25, 1
/* 803126F8 0030E358  54 60 06 31 */	rlwinm. r0, r3, 0, 0x18, 0x18
/* 803126FC 0030E35C  41 82 00 08 */	beq lbl_80312704
/* 80312700 0030E360  54 79 07 7E */	clrlwi r25, r3, 0x1d
lbl_80312704:
/* 80312704 0030E364  7F 43 D3 78 */	mr r3, r26
/* 80312708 0030E368  7F A4 EB 78 */	mr r4, r29
/* 8031270C 0030E36C  7F 85 E3 78 */	mr r5, r28
/* 80312710 0030E370  4B FF 81 3D */	bl VFiPFCACHE_ReadFATPage
/* 80312714 0030E374  2C 03 10 00 */	cmpwi r3, 0x1000
/* 80312718 0030E378  7C 7E 1B 78 */	mr r30, r3
/* 8031271C 0030E37C  40 82 00 50 */	bne lbl_8031276C
/* 80312720 0030E380  81 9A 18 90 */	lwz r12, 0x1890(r26)
/* 80312724 0030E384  2C 0C 00 00 */	cmpwi r12, 0
/* 80312728 0030E388  41 82 00 44 */	beq lbl_8031276C
/* 8031272C 0030E38C  80 7A 18 70 */	lwz r3, 0x1870(r26)
/* 80312730 0030E390  7D 89 03 A6 */	mtctr r12
/* 80312734 0030E394  4E 80 04 21 */	bctrl
/* 80312738 0030E398  2C 03 00 00 */	cmpwi r3, 0
/* 8031273C 0030E39C  41 82 00 40 */	beq lbl_8031277C
/* 80312740 0030E3A0  2C 03 00 01 */	cmpwi r3, 1
/* 80312744 0030E3A4  40 82 00 28 */	bne lbl_8031276C
/* 80312748 0030E3A8  88 1A 00 22 */	lbz r0, 0x22(r26)
/* 8031274C 0030E3AC  28 00 00 02 */	cmplwi r0, 2
/* 80312750 0030E3B0  41 80 00 1C */	blt lbl_8031276C
/* 80312754 0030E3B4  7C 19 00 40 */	cmplw r25, r0
/* 80312758 0030E3B8  40 80 00 14 */	bge lbl_8031276C
/* 8031275C 0030E3BC  80 1A 00 0C */	lwz r0, 0xc(r26)
/* 80312760 0030E3C0  3B 39 00 01 */	addi r25, r25, 1
/* 80312764 0030E3C4  7F BD 02 14 */	add r29, r29, r0
/* 80312768 0030E3C8  48 00 00 14 */	b lbl_8031277C
lbl_8031276C:
/* 8031276C 0030E3CC  2C 1E 00 00 */	cmpwi r30, 0
/* 80312770 0030E3D0  41 82 00 0C */	beq lbl_8031277C
/* 80312774 0030E3D4  7F C3 F3 78 */	mr r3, r30
/* 80312778 0030E3D8  48 00 00 80 */	b lbl_803127F8
lbl_8031277C:
/* 8031277C 0030E3DC  2C 1E 00 00 */	cmpwi r30, 0
/* 80312780 0030E3E0  40 82 FF 84 */	bne lbl_80312704
/* 80312784 0030E3E4  48 00 00 28 */	b lbl_803127AC
lbl_80312788:
/* 80312788 0030E3E8  80 04 00 04 */	lwz r0, 4(r4)
/* 8031278C 0030E3EC  80 64 00 08 */	lwz r3, 8(r4)
/* 80312790 0030E3F0  7C 00 18 50 */	subf r0, r0, r3
/* 80312794 0030E3F4  7C 00 3E 30 */	sraw r0, r0, r7
/* 80312798 0030E3F8  7C 05 02 14 */	add r0, r5, r0
/* 8031279C 0030E3FC  7C 1D 00 40 */	cmplw r29, r0
/* 803127A0 0030E400  41 82 00 0C */	beq lbl_803127AC
/* 803127A4 0030E404  7C 03 32 14 */	add r0, r3, r6
/* 803127A8 0030E408  90 04 00 08 */	stw r0, 8(r4)
lbl_803127AC:
/* 803127AC 0030E40C  80 7C 00 00 */	lwz r3, 0(r28)
/* 803127B0 0030E410  80 83 00 08 */	lwz r4, 8(r3)
/* 803127B4 0030E414  7C A4 F8 2E */	lwzx r5, r4, r31
/* 803127B8 0030E418  54 A3 42 1E */	rlwinm r3, r5, 8, 8, 0xf
/* 803127BC 0030E41C  54 A0 C4 2E */	rlwinm r0, r5, 0x18, 0x10, 0x17
/* 803127C0 0030E420  50 A3 C0 0E */	rlwimi r3, r5, 0x18, 0, 7
/* 803127C4 0030E424  50 A0 46 3E */	rlwimi r0, r5, 8, 0x18, 0x1f
/* 803127C8 0030E428  7C 60 03 78 */	or r0, r3, r0
/* 803127CC 0030E42C  54 05 00 06 */	rlwinm r5, r0, 0, 0, 3
/* 803127D0 0030E430  53 65 01 3E */	rlwimi r5, r27, 0, 4, 0x1f
/* 803127D4 0030E434  54 A3 42 1E */	rlwinm r3, r5, 8, 8, 0xf
/* 803127D8 0030E438  54 A0 C4 2E */	rlwinm r0, r5, 0x18, 0x10, 0x17
/* 803127DC 0030E43C  50 A3 C0 0E */	rlwimi r3, r5, 0x18, 0, 7
/* 803127E0 0030E440  50 A0 46 3E */	rlwimi r0, r5, 8, 0x18, 0x1f
/* 803127E4 0030E444  7C 60 03 78 */	or r0, r3, r0
/* 803127E8 0030E448  7C 04 F9 2E */	stwx r0, r4, r31
/* 803127EC 0030E44C  80 7C 00 00 */	lwz r3, 0(r28)
/* 803127F0 0030E450  4B FF 7E 01 */	bl VFiPFCACHE_UpdateModifiedSector
/* 803127F4 0030E454  7F C3 F3 78 */	mr r3, r30
lbl_803127F8:
/* 803127F8 0030E458  39 61 00 30 */	addi r11, r1, 0x30
/* 803127FC 0030E45C  4B EB 49 71 */	bl _restgpr_25
/* 80312800 0030E460  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80312804 0030E464  7C 08 03 A6 */	mtlr r0
/* 80312808 0030E468  38 21 00 30 */	addi r1, r1, 0x30
/* 8031280C 0030E46C  4E 80 00 20 */	blr