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

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

.global VFiPFFAT16_ReadFATEntry
VFiPFFAT16_ReadFATEntry:
/* 80311C58 0030D8B8  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80311C5C 0030D8BC  7C 08 02 A6 */	mflr r0
/* 80311C60 0030D8C0  90 01 00 34 */	stw r0, 0x34(r1)
/* 80311C64 0030D8C4  39 61 00 30 */	addi r11, r1, 0x30
/* 80311C68 0030D8C8  4B EB 54 BD */	bl _savegpr_26
/* 80311C6C 0030D8CC  2C 03 00 00 */	cmpwi r3, 0
/* 80311C70 0030D8D0  7C 7D 1B 78 */	mr r29, r3
/* 80311C74 0030D8D4  7C BE 2B 78 */	mr r30, r5
/* 80311C78 0030D8D8  40 82 00 14 */	bne lbl_80311C8C
/* 80311C7C 0030D8DC  38 00 FF FF */	li r0, -1
/* 80311C80 0030D8E0  38 60 00 0A */	li r3, 0xa
/* 80311C84 0030D8E4  90 05 00 00 */	stw r0, 0(r5)
/* 80311C88 0030D8E8  48 00 01 1C */	b lbl_80311DA4
lbl_80311C8C:
/* 80311C8C 0030D8EC  28 04 00 02 */	cmplwi r4, 2
/* 80311C90 0030D8F0  41 80 00 14 */	blt lbl_80311CA4
/* 80311C94 0030D8F4  80 C3 00 34 */	lwz r6, 0x34(r3)
/* 80311C98 0030D8F8  38 06 00 02 */	addi r0, r6, 2
/* 80311C9C 0030D8FC  7C 04 00 40 */	cmplw r4, r0
/* 80311CA0 0030D900  41 80 00 24 */	blt lbl_80311CC4
lbl_80311CA4:
/* 80311CA4 0030D904  2C 04 00 00 */	cmpwi r4, 0
/* 80311CA8 0030D908  41 82 00 1C */	beq lbl_80311CC4
/* 80311CAC 0030D90C  28 04 00 01 */	cmplwi r4, 1
/* 80311CB0 0030D910  41 82 00 14 */	beq lbl_80311CC4
/* 80311CB4 0030D914  38 00 FF FF */	li r0, -1
/* 80311CB8 0030D918  38 60 00 0E */	li r3, 0xe
/* 80311CBC 0030D91C  90 05 00 00 */	stw r0, 0(r5)
/* 80311CC0 0030D920  48 00 00 E4 */	b lbl_80311DA4
lbl_80311CC4:
/* 80311CC4 0030D924  A1 03 00 18 */	lhz r8, 0x18(r3)
/* 80311CC8 0030D928  54 87 08 3C */	slwi r7, r4, 1
/* 80311CCC 0030D92C  88 A3 00 20 */	lbz r5, 0x20(r3)
/* 80311CD0 0030D930  3B E0 00 01 */	li r31, 1
/* 80311CD4 0030D934  A0 83 00 00 */	lhz r4, 0(r3)
/* 80311CD8 0030D938  55 00 06 31 */	rlwinm. r0, r8, 0, 0x18, 0x18
/* 80311CDC 0030D93C  80 C3 00 28 */	lwz r6, 0x28(r3)
/* 80311CE0 0030D940  7C E3 2C 30 */	srw r3, r7, r5
/* 80311CE4 0030D944  38 04 FF FF */	addi r0, r4, -1
/* 80311CE8 0030D948  7C 66 1A 14 */	add r3, r6, r3
/* 80311CEC 0030D94C  7C E0 00 38 */	and r0, r7, r0
/* 80311CF0 0030D950  54 7C 04 3E */	clrlwi r28, r3, 0x10
/* 80311CF4 0030D954  54 1B 04 3E */	clrlwi r27, r0, 0x10
/* 80311CF8 0030D958  41 82 00 08 */	beq lbl_80311D00
/* 80311CFC 0030D95C  55 1F 07 7E */	clrlwi r31, r8, 0x1d
lbl_80311D00:
/* 80311D00 0030D960  7F A3 EB 78 */	mr r3, r29
/* 80311D04 0030D964  7F 85 E3 78 */	mr r5, r28
/* 80311D08 0030D968  7F 66 DB 78 */	mr r6, r27
/* 80311D0C 0030D96C  38 81 00 08 */	addi r4, r1, 8
/* 80311D10 0030D970  38 E0 00 02 */	li r7, 2
/* 80311D14 0030D974  48 00 6C 5D */	bl VFiPFSEC_ReadFAT
/* 80311D18 0030D978  2C 03 10 00 */	cmpwi r3, 0x1000
/* 80311D1C 0030D97C  7C 7A 1B 78 */	mr r26, r3
/* 80311D20 0030D980  40 82 00 50 */	bne lbl_80311D70
/* 80311D24 0030D984  81 9D 18 90 */	lwz r12, 0x1890(r29)
/* 80311D28 0030D988  2C 0C 00 00 */	cmpwi r12, 0
/* 80311D2C 0030D98C  41 82 00 44 */	beq lbl_80311D70
/* 80311D30 0030D990  80 7D 18 70 */	lwz r3, 0x1870(r29)
/* 80311D34 0030D994  7D 89 03 A6 */	mtctr r12
/* 80311D38 0030D998  4E 80 04 21 */	bctrl
/* 80311D3C 0030D99C  2C 03 00 00 */	cmpwi r3, 0
/* 80311D40 0030D9A0  41 82 00 48 */	beq lbl_80311D88
/* 80311D44 0030D9A4  2C 03 00 01 */	cmpwi r3, 1
/* 80311D48 0030D9A8  40 82 00 28 */	bne lbl_80311D70
/* 80311D4C 0030D9AC  88 1D 00 22 */	lbz r0, 0x22(r29)
/* 80311D50 0030D9B0  28 00 00 02 */	cmplwi r0, 2
/* 80311D54 0030D9B4  41 80 00 1C */	blt lbl_80311D70
/* 80311D58 0030D9B8  7C 1F 00 40 */	cmplw r31, r0
/* 80311D5C 0030D9BC  40 80 00 14 */	bge lbl_80311D70
/* 80311D60 0030D9C0  80 1D 00 0C */	lwz r0, 0xc(r29)
/* 80311D64 0030D9C4  3B FF 00 01 */	addi r31, r31, 1
/* 80311D68 0030D9C8  7F 9C 02 14 */	add r28, r28, r0
/* 80311D6C 0030D9CC  48 00 00 1C */	b lbl_80311D88
lbl_80311D70:
/* 80311D70 0030D9D0  2C 1A 00 00 */	cmpwi r26, 0
/* 80311D74 0030D9D4  41 82 00 14 */	beq lbl_80311D88
/* 80311D78 0030D9D8  38 00 FF FF */	li r0, -1
/* 80311D7C 0030D9DC  7F 43 D3 78 */	mr r3, r26
/* 80311D80 0030D9E0  90 1E 00 00 */	stw r0, 0(r30)
/* 80311D84 0030D9E4  48 00 00 20 */	b lbl_80311DA4
lbl_80311D88:
/* 80311D88 0030D9E8  2C 1A 00 00 */	cmpwi r26, 0
/* 80311D8C 0030D9EC  40 82 FF 74 */	bne lbl_80311D00
/* 80311D90 0030D9F0  A0 81 00 08 */	lhz r4, 8(r1)
/* 80311D94 0030D9F4  38 60 00 00 */	li r3, 0
/* 80311D98 0030D9F8  54 80 44 2E */	rlwinm r0, r4, 8, 0x10, 0x17
/* 80311D9C 0030D9FC  50 80 C6 3E */	rlwimi r0, r4, 0x18, 0x18, 0x1f
/* 80311DA0 0030DA00  90 1E 00 00 */	stw r0, 0(r30)
lbl_80311DA4:
/* 80311DA4 0030DA04  39 61 00 30 */	addi r11, r1, 0x30
/* 80311DA8 0030DA08  4B EB 53 C9 */	bl _restgpr_26
/* 80311DAC 0030DA0C  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80311DB0 0030DA10  7C 08 03 A6 */	mtlr r0
/* 80311DB4 0030DA14  38 21 00 30 */	addi r1, r1, 0x30
/* 80311DB8 0030DA18  4E 80 00 20 */	blr

.global VFiPFFAT16_ReadFATEntryPage
VFiPFFAT16_ReadFATEntryPage:
/* 80311DBC 0030DA1C  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80311DC0 0030DA20  7C 08 02 A6 */	mflr r0
/* 80311DC4 0030DA24  90 01 00 34 */	stw r0, 0x34(r1)
/* 80311DC8 0030DA28  39 61 00 30 */	addi r11, r1, 0x30
/* 80311DCC 0030DA2C  4B EB 53 55 */	bl _savegpr_25
/* 80311DD0 0030DA30  2C 03 00 00 */	cmpwi r3, 0
/* 80311DD4 0030DA34  7C 79 1B 78 */	mr r25, r3
/* 80311DD8 0030DA38  7C BA 2B 78 */	mr r26, r5
/* 80311DDC 0030DA3C  7C DB 33 78 */	mr r27, r6
/* 80311DE0 0030DA40  3B C0 00 00 */	li r30, 0
/* 80311DE4 0030DA44  40 82 00 0C */	bne lbl_80311DF0
/* 80311DE8 0030DA48  38 60 00 0A */	li r3, 0xa
/* 80311DEC 0030DA4C  48 00 01 74 */	b lbl_80311F60
lbl_80311DF0:
/* 80311DF0 0030DA50  28 04 00 02 */	cmplwi r4, 2
/* 80311DF4 0030DA54  41 80 00 14 */	blt lbl_80311E08
/* 80311DF8 0030DA58  80 A3 00 34 */	lwz r5, 0x34(r3)
/* 80311DFC 0030DA5C  38 05 00 02 */	addi r0, r5, 2
/* 80311E00 0030DA60  7C 04 00 40 */	cmplw r4, r0
/* 80311E04 0030DA64  41 80 00 1C */	blt lbl_80311E20
lbl_80311E08:
/* 80311E08 0030DA68  2C 04 00 00 */	cmpwi r4, 0
/* 80311E0C 0030DA6C  41 82 00 14 */	beq lbl_80311E20
/* 80311E10 0030DA70  28 04 00 01 */	cmplwi r4, 1
/* 80311E14 0030DA74  41 82 00 0C */	beq lbl_80311E20
/* 80311E18 0030DA78  38 60 00 0E */	li r3, 0xe
/* 80311E1C 0030DA7C  48 00 01 44 */	b lbl_80311F60
lbl_80311E20:
/* 80311E20 0030DA80  A0 A3 00 18 */	lhz r5, 0x18(r3)
/* 80311E24 0030DA84  54 9F 08 3C */	slwi r31, r4, 1
/* 80311E28 0030DA88  88 E3 00 20 */	lbz r7, 0x20(r3)
/* 80311E2C 0030DA8C  3B 80 00 01 */	li r28, 1
/* 80311E30 0030DA90  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 80311E34 0030DA94  80 83 00 28 */	lwz r4, 0x28(r3)
/* 80311E38 0030DA98  7F E0 3C 30 */	srw r0, r31, r7
/* 80311E3C 0030DA9C  7C 04 02 14 */	add r0, r4, r0
/* 80311E40 0030DAA0  54 1D 04 3E */	clrlwi r29, r0, 0x10
/* 80311E44 0030DAA4  41 82 00 08 */	beq lbl_80311E4C
/* 80311E48 0030DAA8  54 BC 07 7E */	clrlwi r28, r5, 0x1d
lbl_80311E4C:
/* 80311E4C 0030DAAC  80 86 00 00 */	lwz r4, 0(r6)
/* 80311E50 0030DAB0  80 C4 00 18 */	lwz r6, 0x18(r4)
/* 80311E54 0030DAB4  7C 06 E8 40 */	cmplw r6, r29
/* 80311E58 0030DAB8  41 81 00 14 */	bgt lbl_80311E6C
/* 80311E5C 0030DABC  80 03 16 00 */	lwz r0, 0x1600(r3)
/* 80311E60 0030DAC0  7C 06 02 14 */	add r0, r6, r0
/* 80311E64 0030DAC4  7C 00 E8 40 */	cmplw r0, r29
/* 80311E68 0030DAC8  41 81 00 A8 */	bgt lbl_80311F10
lbl_80311E6C:
/* 80311E6C 0030DACC  A0 04 00 02 */	lhz r0, 2(r4)
/* 80311E70 0030DAD0  28 00 00 01 */	cmplwi r0, 1
/* 80311E74 0030DAD4  40 82 00 18 */	bne lbl_80311E8C
/* 80311E78 0030DAD8  7F 23 CB 78 */	mr r3, r25
/* 80311E7C 0030DADC  4B FF DF ED */	bl VFiPFFAT_UpdateFATEntry
/* 80311E80 0030DAE0  2C 03 00 00 */	cmpwi r3, 0
/* 80311E84 0030DAE4  41 82 00 08 */	beq lbl_80311E8C
/* 80311E88 0030DAE8  48 00 00 D8 */	b lbl_80311F60
lbl_80311E8C:
/* 80311E8C 0030DAEC  7F 23 CB 78 */	mr r3, r25
/* 80311E90 0030DAF0  7F A4 EB 78 */	mr r4, r29
/* 80311E94 0030DAF4  7F 65 DB 78 */	mr r5, r27
/* 80311E98 0030DAF8  4B FF 89 B5 */	bl VFiPFCACHE_ReadFATPage
/* 80311E9C 0030DAFC  2C 03 10 00 */	cmpwi r3, 0x1000
/* 80311EA0 0030DB00  7C 7E 1B 78 */	mr r30, r3
/* 80311EA4 0030DB04  40 82 00 50 */	bne lbl_80311EF4
/* 80311EA8 0030DB08  81 99 18 90 */	lwz r12, 0x1890(r25)
/* 80311EAC 0030DB0C  2C 0C 00 00 */	cmpwi r12, 0
/* 80311EB0 0030DB10  41 82 00 44 */	beq lbl_80311EF4
/* 80311EB4 0030DB14  80 79 18 70 */	lwz r3, 0x1870(r25)
/* 80311EB8 0030DB18  7D 89 03 A6 */	mtctr r12
/* 80311EBC 0030DB1C  4E 80 04 21 */	bctrl
/* 80311EC0 0030DB20  2C 03 00 00 */	cmpwi r3, 0
/* 80311EC4 0030DB24  41 82 00 40 */	beq lbl_80311F04
/* 80311EC8 0030DB28  2C 03 00 01 */	cmpwi r3, 1
/* 80311ECC 0030DB2C  40 82 00 28 */	bne lbl_80311EF4
/* 80311ED0 0030DB30  88 19 00 22 */	lbz r0, 0x22(r25)
/* 80311ED4 0030DB34  28 00 00 02 */	cmplwi r0, 2
/* 80311ED8 0030DB38  41 80 00 1C */	blt lbl_80311EF4
/* 80311EDC 0030DB3C  7C 1C 00 40 */	cmplw r28, r0
/* 80311EE0 0030DB40  40 80 00 14 */	bge lbl_80311EF4
/* 80311EE4 0030DB44  80 19 00 0C */	lwz r0, 0xc(r25)
/* 80311EE8 0030DB48  3B 9C 00 01 */	addi r28, r28, 1
/* 80311EEC 0030DB4C  7F BD 02 14 */	add r29, r29, r0
/* 80311EF0 0030DB50  48 00 00 14 */	b lbl_80311F04
lbl_80311EF4:
/* 80311EF4 0030DB54  2C 1E 00 00 */	cmpwi r30, 0
/* 80311EF8 0030DB58  41 82 00 0C */	beq lbl_80311F04
/* 80311EFC 0030DB5C  7F C3 F3 78 */	mr r3, r30
/* 80311F00 0030DB60  48 00 00 60 */	b lbl_80311F60
lbl_80311F04:
/* 80311F04 0030DB64  2C 1E 00 00 */	cmpwi r30, 0
/* 80311F08 0030DB68  40 82 FF 84 */	bne lbl_80311E8C
/* 80311F0C 0030DB6C  48 00 00 2C */	b lbl_80311F38
lbl_80311F10:
/* 80311F10 0030DB70  80 04 00 04 */	lwz r0, 4(r4)
/* 80311F14 0030DB74  80 A4 00 08 */	lwz r5, 8(r4)
/* 80311F18 0030DB78  7C 00 28 50 */	subf r0, r0, r5
/* 80311F1C 0030DB7C  7C 00 3E 30 */	sraw r0, r0, r7
/* 80311F20 0030DB80  7C 06 02 14 */	add r0, r6, r0
/* 80311F24 0030DB84  7C 1D 00 40 */	cmplw r29, r0
/* 80311F28 0030DB88  41 82 00 10 */	beq lbl_80311F38
/* 80311F2C 0030DB8C  A0 03 00 00 */	lhz r0, 0(r3)
/* 80311F30 0030DB90  7C 05 02 14 */	add r0, r5, r0
/* 80311F34 0030DB94  90 04 00 08 */	stw r0, 8(r4)
lbl_80311F38:
/* 80311F38 0030DB98  A0 B9 00 00 */	lhz r5, 0(r25)
/* 80311F3C 0030DB9C  7F C3 F3 78 */	mr r3, r30
/* 80311F40 0030DBA0  80 9B 00 00 */	lwz r4, 0(r27)
/* 80311F44 0030DBA4  38 05 FF FF */	addi r0, r5, -1
/* 80311F48 0030DBA8  80 84 00 08 */	lwz r4, 8(r4)
/* 80311F4C 0030DBAC  7F E0 00 38 */	and r0, r31, r0
/* 80311F50 0030DBB0  7C 84 02 2E */	lhzx r4, r4, r0
/* 80311F54 0030DBB4  54 80 44 2E */	rlwinm r0, r4, 8, 0x10, 0x17
/* 80311F58 0030DBB8  50 80 C6 3E */	rlwimi r0, r4, 0x18, 0x18, 0x1f
/* 80311F5C 0030DBBC  90 1A 00 00 */	stw r0, 0(r26)
lbl_80311F60:
/* 80311F60 0030DBC0  39 61 00 30 */	addi r11, r1, 0x30
/* 80311F64 0030DBC4  4B EB 52 09 */	bl _restgpr_25
/* 80311F68 0030DBC8  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80311F6C 0030DBCC  7C 08 03 A6 */	mtlr r0
/* 80311F70 0030DBD0  38 21 00 30 */	addi r1, r1, 0x30
/* 80311F74 0030DBD4  4E 80 00 20 */	blr

.global VFiPFFAT16_WriteFATEntry
VFiPFFAT16_WriteFATEntry:
/* 80311F78 0030DBD8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80311F7C 0030DBDC  7C 08 02 A6 */	mflr r0
/* 80311F80 0030DBE0  2C 03 00 00 */	cmpwi r3, 0
/* 80311F84 0030DBE4  90 01 00 14 */	stw r0, 0x14(r1)
/* 80311F88 0030DBE8  40 82 00 0C */	bne lbl_80311F94
/* 80311F8C 0030DBEC  38 60 00 0A */	li r3, 0xa
/* 80311F90 0030DBF0  48 00 00 70 */	b lbl_80312000
lbl_80311F94:
/* 80311F94 0030DBF4  28 04 00 02 */	cmplwi r4, 2
/* 80311F98 0030DBF8  41 80 00 14 */	blt lbl_80311FAC
/* 80311F9C 0030DBFC  80 C3 00 34 */	lwz r6, 0x34(r3)
/* 80311FA0 0030DC00  38 06 00 02 */	addi r0, r6, 2
/* 80311FA4 0030DC04  7C 04 00 40 */	cmplw r4, r0
/* 80311FA8 0030DC08  41 80 00 1C */	blt lbl_80311FC4
lbl_80311FAC:
/* 80311FAC 0030DC0C  2C 04 00 00 */	cmpwi r4, 0
/* 80311FB0 0030DC10  41 82 00 14 */	beq lbl_80311FC4
/* 80311FB4 0030DC14  28 04 00 01 */	cmplwi r4, 1
/* 80311FB8 0030DC18  41 82 00 0C */	beq lbl_80311FC4
/* 80311FBC 0030DC1C  38 60 00 0E */	li r3, 0xe
/* 80311FC0 0030DC20  48 00 00 40 */	b lbl_80312000
lbl_80311FC4:
/* 80311FC4 0030DC24  A0 C3 00 00 */	lhz r6, 0(r3)
/* 80311FC8 0030DC28  54 89 08 3C */	slwi r9, r4, 1
/* 80311FCC 0030DC2C  88 E3 00 20 */	lbz r7, 0x20(r3)
/* 80311FD0 0030DC30  38 01 00 08 */	addi r0, r1, 8
/* 80311FD4 0030DC34  38 86 FF FF */	addi r4, r6, -1
/* 80311FD8 0030DC38  81 03 00 28 */	lwz r8, 0x28(r3)
/* 80311FDC 0030DC3C  7D 26 3C 30 */	srw r6, r9, r7
/* 80311FE0 0030DC40  38 E0 00 02 */	li r7, 2
/* 80311FE4 0030DC44  7C C8 32 14 */	add r6, r8, r6
/* 80311FE8 0030DC48  7C A0 07 2C */	sthbrx r5, 0, r0
/* 80311FEC 0030DC4C  7D 24 20 38 */	and r4, r9, r4
/* 80311FF0 0030DC50  54 C5 04 3E */	clrlwi r5, r6, 0x10
/* 80311FF4 0030DC54  54 86 04 3E */	clrlwi r6, r4, 0x10
/* 80311FF8 0030DC58  38 81 00 08 */	addi r4, r1, 8
/* 80311FFC 0030DC5C  48 00 6D 0D */	bl VFiPFSEC_WriteFAT
lbl_80312000:
/* 80312000 0030DC60  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80312004 0030DC64  7C 08 03 A6 */	mtlr r0
/* 80312008 0030DC68  38 21 00 10 */	addi r1, r1, 0x10
/* 8031200C 0030DC6C  4E 80 00 20 */	blr

.global VFiPFFAT16_WriteFATEntryPage
VFiPFFAT16_WriteFATEntryPage:
/* 80312010 0030DC70  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80312014 0030DC74  7C 08 02 A6 */	mflr r0
/* 80312018 0030DC78  90 01 00 34 */	stw r0, 0x34(r1)
/* 8031201C 0030DC7C  39 61 00 30 */	addi r11, r1, 0x30
/* 80312020 0030DC80  4B EB 51 01 */	bl _savegpr_25
/* 80312024 0030DC84  2C 03 00 00 */	cmpwi r3, 0
/* 80312028 0030DC88  7C 7A 1B 78 */	mr r26, r3
/* 8031202C 0030DC8C  7C BB 2B 78 */	mr r27, r5
/* 80312030 0030DC90  7C DC 33 78 */	mr r28, r6
/* 80312034 0030DC94  3B C0 00 00 */	li r30, 0
/* 80312038 0030DC98  40 82 00 0C */	bne lbl_80312044
/* 8031203C 0030DC9C  38 60 00 0A */	li r3, 0xa
/* 80312040 0030DCA0  48 00 01 78 */	b lbl_803121B8
lbl_80312044:
/* 80312044 0030DCA4  28 04 00 02 */	cmplwi r4, 2
/* 80312048 0030DCA8  41 80 00 14 */	blt lbl_8031205C
/* 8031204C 0030DCAC  80 A3 00 34 */	lwz r5, 0x34(r3)
/* 80312050 0030DCB0  38 05 00 02 */	addi r0, r5, 2
/* 80312054 0030DCB4  7C 04 00 40 */	cmplw r4, r0
/* 80312058 0030DCB8  41 80 00 1C */	blt lbl_80312074
lbl_8031205C:
/* 8031205C 0030DCBC  2C 04 00 00 */	cmpwi r4, 0
/* 80312060 0030DCC0  41 82 00 14 */	beq lbl_80312074
/* 80312064 0030DCC4  28 04 00 01 */	cmplwi r4, 1
/* 80312068 0030DCC8  41 82 00 0C */	beq lbl_80312074
/* 8031206C 0030DCCC  38 60 00 0E */	li r3, 0xe
/* 80312070 0030DCD0  48 00 01 48 */	b lbl_803121B8
lbl_80312074:
/* 80312074 0030DCD4  89 03 00 20 */	lbz r8, 0x20(r3)
/* 80312078 0030DCD8  54 87 08 3C */	slwi r7, r4, 1
/* 8031207C 0030DCDC  80 86 00 00 */	lwz r4, 0(r6)
/* 80312080 0030DCE0  80 A3 00 28 */	lwz r5, 0x28(r3)
/* 80312084 0030DCE4  7C E0 44 30 */	srw r0, r7, r8
/* 80312088 0030DCE8  A0 C3 00 00 */	lhz r6, 0(r3)
/* 8031208C 0030DCEC  7C 05 02 14 */	add r0, r5, r0
/* 80312090 0030DCF0  80 A4 00 18 */	lwz r5, 0x18(r4)
/* 80312094 0030DCF4  54 1D 04 3E */	clrlwi r29, r0, 0x10
/* 80312098 0030DCF8  38 06 FF FF */	addi r0, r6, -1
/* 8031209C 0030DCFC  7C E0 00 38 */	and r0, r7, r0
/* 803120A0 0030DD00  7C 05 E8 40 */	cmplw r5, r29
/* 803120A4 0030DD04  54 1F 04 3E */	clrlwi r31, r0, 0x10
/* 803120A8 0030DD08  41 81 00 14 */	bgt lbl_803120BC
/* 803120AC 0030DD0C  80 03 16 00 */	lwz r0, 0x1600(r3)
/* 803120B0 0030DD10  7C 05 02 14 */	add r0, r5, r0
/* 803120B4 0030DD14  7C 00 E8 40 */	cmplw r0, r29
/* 803120B8 0030DD18  41 81 00 B0 */	bgt lbl_80312168
lbl_803120BC:
/* 803120BC 0030DD1C  7F 43 D3 78 */	mr r3, r26
/* 803120C0 0030DD20  4B FF DD A9 */	bl VFiPFFAT_UpdateFATEntry
/* 803120C4 0030DD24  2C 03 00 00 */	cmpwi r3, 0
/* 803120C8 0030DD28  41 82 00 08 */	beq lbl_803120D0
/* 803120CC 0030DD2C  48 00 00 EC */	b lbl_803121B8
lbl_803120D0:
/* 803120D0 0030DD30  A0 7A 00 18 */	lhz r3, 0x18(r26)
/* 803120D4 0030DD34  3B 20 00 01 */	li r25, 1
/* 803120D8 0030DD38  54 60 06 31 */	rlwinm. r0, r3, 0, 0x18, 0x18
/* 803120DC 0030DD3C  41 82 00 08 */	beq lbl_803120E4
/* 803120E0 0030DD40  54 79 07 7E */	clrlwi r25, r3, 0x1d
lbl_803120E4:
/* 803120E4 0030DD44  7F 43 D3 78 */	mr r3, r26
/* 803120E8 0030DD48  7F A4 EB 78 */	mr r4, r29
/* 803120EC 0030DD4C  7F 85 E3 78 */	mr r5, r28
/* 803120F0 0030DD50  4B FF 87 5D */	bl VFiPFCACHE_ReadFATPage
/* 803120F4 0030DD54  2C 03 10 00 */	cmpwi r3, 0x1000
/* 803120F8 0030DD58  7C 7E 1B 78 */	mr r30, r3
/* 803120FC 0030DD5C  40 82 00 50 */	bne lbl_8031214C
/* 80312100 0030DD60  81 9A 18 90 */	lwz r12, 0x1890(r26)
/* 80312104 0030DD64  2C 0C 00 00 */	cmpwi r12, 0
/* 80312108 0030DD68  41 82 00 44 */	beq lbl_8031214C
/* 8031210C 0030DD6C  80 7A 18 70 */	lwz r3, 0x1870(r26)
/* 80312110 0030DD70  7D 89 03 A6 */	mtctr r12
/* 80312114 0030DD74  4E 80 04 21 */	bctrl
/* 80312118 0030DD78  2C 03 00 00 */	cmpwi r3, 0
/* 8031211C 0030DD7C  41 82 00 40 */	beq lbl_8031215C
/* 80312120 0030DD80  2C 03 00 01 */	cmpwi r3, 1
/* 80312124 0030DD84  40 82 00 28 */	bne lbl_8031214C
/* 80312128 0030DD88  88 1A 00 22 */	lbz r0, 0x22(r26)
/* 8031212C 0030DD8C  28 00 00 02 */	cmplwi r0, 2
/* 80312130 0030DD90  41 80 00 1C */	blt lbl_8031214C
/* 80312134 0030DD94  7C 19 00 40 */	cmplw r25, r0
/* 80312138 0030DD98  40 80 00 14 */	bge lbl_8031214C
/* 8031213C 0030DD9C  80 1A 00 0C */	lwz r0, 0xc(r26)
/* 80312140 0030DDA0  3B 39 00 01 */	addi r25, r25, 1
/* 80312144 0030DDA4  7F BD 02 14 */	add r29, r29, r0
/* 80312148 0030DDA8  48 00 00 14 */	b lbl_8031215C
lbl_8031214C:
/* 8031214C 0030DDAC  2C 1E 00 00 */	cmpwi r30, 0
/* 80312150 0030DDB0  41 82 00 0C */	beq lbl_8031215C
/* 80312154 0030DDB4  7F C3 F3 78 */	mr r3, r30
/* 80312158 0030DDB8  48 00 00 60 */	b lbl_803121B8
lbl_8031215C:
/* 8031215C 0030DDBC  2C 1E 00 00 */	cmpwi r30, 0
/* 80312160 0030DDC0  40 82 FF 84 */	bne lbl_803120E4
/* 80312164 0030DDC4  48 00 00 28 */	b lbl_8031218C
lbl_80312168:
/* 80312168 0030DDC8  80 04 00 04 */	lwz r0, 4(r4)
/* 8031216C 0030DDCC  80 64 00 08 */	lwz r3, 8(r4)
/* 80312170 0030DDD0  7C 00 18 50 */	subf r0, r0, r3
/* 80312174 0030DDD4  7C 00 46 30 */	sraw r0, r0, r8
/* 80312178 0030DDD8  7C 05 02 14 */	add r0, r5, r0
/* 8031217C 0030DDDC  7C 1D 00 40 */	cmplw r29, r0
/* 80312180 0030DDE0  41 82 00 0C */	beq lbl_8031218C
/* 80312184 0030DDE4  7C 03 32 14 */	add r0, r3, r6
/* 80312188 0030DDE8  90 04 00 08 */	stw r0, 8(r4)
lbl_8031218C:
/* 8031218C 0030DDEC  80 7C 00 00 */	lwz r3, 0(r28)
/* 80312190 0030DDF0  57 64 C6 3E */	rlwinm r4, r27, 0x18, 0x18, 0x1f
/* 80312194 0030DDF4  80 63 00 08 */	lwz r3, 8(r3)
/* 80312198 0030DDF8  7F 63 F9 AE */	stbx r27, r3, r31
/* 8031219C 0030DDFC  80 7C 00 00 */	lwz r3, 0(r28)
/* 803121A0 0030DE00  80 03 00 08 */	lwz r0, 8(r3)
/* 803121A4 0030DE04  7C 60 FA 14 */	add r3, r0, r31
/* 803121A8 0030DE08  98 83 00 01 */	stb r4, 1(r3)
/* 803121AC 0030DE0C  80 7C 00 00 */	lwz r3, 0(r28)
/* 803121B0 0030DE10  4B FF 84 41 */	bl VFiPFCACHE_UpdateModifiedSector
/* 803121B4 0030DE14  7F C3 F3 78 */	mr r3, r30
lbl_803121B8:
/* 803121B8 0030DE18  39 61 00 30 */	addi r11, r1, 0x30
/* 803121BC 0030DE1C  4B EB 4F B1 */	bl _restgpr_25
/* 803121C0 0030DE20  80 01 00 34 */	lwz r0, 0x34(r1)
/* 803121C4 0030DE24  7C 08 03 A6 */	mtlr r0
/* 803121C8 0030DE28  38 21 00 30 */	addi r1, r1, 0x30
/* 803121CC 0030DE2C  4E 80 00 20 */	blr