summaryrefslogtreecommitdiff
path: root/asm/MSL_C/MSL_Common/file_pos.s
blob: 0aa63a2eecf7742c6d5bb95d87021a8ae9ef6284 (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
.include "macros.inc"

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

.global _ftell
_ftell:
/* 801C9E80 001C5AE0  80 03 00 04 */	lwz r0, 4(r3)
/* 801C9E84 001C5AE4  38 C0 00 00 */	li r6, 0
/* 801C9E88 001C5AE8  54 04 57 7E */	rlwinm r4, r0, 0xa, 0x1d, 0x1f
/* 801C9E8C 001C5AEC  38 04 00 FF */	addi r0, r4, 0xff
/* 801C9E90 001C5AF0  54 00 06 3E */	clrlwi r0, r0, 0x18
/* 801C9E94 001C5AF4  28 00 00 01 */	cmplwi r0, 1
/* 801C9E98 001C5AF8  41 81 00 10 */	bgt lbl_801C9EA8
/* 801C9E9C 001C5AFC  88 03 00 0A */	lbz r0, 0xa(r3)
/* 801C9EA0 001C5B00  2C 00 00 00 */	cmpwi r0, 0
/* 801C9EA4 001C5B04  41 82 00 14 */	beq lbl_801C9EB8
lbl_801C9EA8:
/* 801C9EA8 001C5B08  38 00 00 28 */	li r0, 0x28
/* 801C9EAC 001C5B0C  38 60 FF FF */	li r3, -1
/* 801C9EB0 001C5B10  90 0D 9F C8 */	stw r0, lbl_8063F288-_SDA_BASE_(r13)
/* 801C9EB4 001C5B14  4E 80 00 20 */	blr
lbl_801C9EB8:
/* 801C9EB8 001C5B18  80 03 00 08 */	lwz r0, 8(r3)
/* 801C9EBC 001C5B1C  54 05 1F 7F */	rlwinm. r5, r0, 3, 0x1d, 0x1f
/* 801C9EC0 001C5B20  40 82 00 0C */	bne lbl_801C9ECC
/* 801C9EC4 001C5B24  80 63 00 18 */	lwz r3, 0x18(r3)
/* 801C9EC8 001C5B28  4E 80 00 20 */	blr
lbl_801C9ECC:
/* 801C9ECC 001C5B2C  81 03 00 1C */	lwz r8, 0x1c(r3)
/* 801C9ED0 001C5B30  28 05 00 03 */	cmplwi r5, 3
/* 801C9ED4 001C5B34  80 83 00 24 */	lwz r4, 0x24(r3)
/* 801C9ED8 001C5B38  80 03 00 34 */	lwz r0, 0x34(r3)
/* 801C9EDC 001C5B3C  7C 88 20 50 */	subf r4, r8, r4
/* 801C9EE0 001C5B40  7C E0 22 14 */	add r7, r0, r4
/* 801C9EE4 001C5B44  41 80 00 0C */	blt lbl_801C9EF0
/* 801C9EE8 001C5B48  38 C5 FF FE */	addi r6, r5, -2
/* 801C9EEC 001C5B4C  7C E6 38 50 */	subf r7, r6, r7
lbl_801C9EF0:
/* 801C9EF0 001C5B50  80 03 00 04 */	lwz r0, 4(r3)
/* 801C9EF4 001C5B54  54 00 6F FF */	rlwinm. r0, r0, 0xd, 0x1f, 0x1f
/* 801C9EF8 001C5B58  40 82 00 28 */	bne lbl_801C9F20
/* 801C9EFC 001C5B5C  7C 06 20 51 */	subf. r0, r6, r4
/* 801C9F00 001C5B60  7C 09 03 A6 */	mtctr r0
/* 801C9F04 001C5B64  41 82 00 1C */	beq lbl_801C9F20
lbl_801C9F08:
/* 801C9F08 001C5B68  88 08 00 00 */	lbz r0, 0(r8)
/* 801C9F0C 001C5B6C  39 08 00 01 */	addi r8, r8, 1
/* 801C9F10 001C5B70  28 00 00 0A */	cmplwi r0, 0xa
/* 801C9F14 001C5B74  40 82 00 08 */	bne lbl_801C9F1C
/* 801C9F18 001C5B78  38 E7 00 01 */	addi r7, r7, 1
lbl_801C9F1C:
/* 801C9F1C 001C5B7C  42 00 FF EC */	bdnz lbl_801C9F08
lbl_801C9F20:
/* 801C9F20 001C5B80  7C E3 3B 78 */	mr r3, r7
/* 801C9F24 001C5B84  4E 80 00 20 */	blr

.global ftell
ftell:
/* 801C9F28 001C5B88  4B FF FF 58 */	b _ftell

.global _fseek
_fseek:
/* 801C9F2C 001C5B8C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801C9F30 001C5B90  7C 08 02 A6 */	mflr r0
/* 801C9F34 001C5B94  90 01 00 24 */	stw r0, 0x24(r1)
/* 801C9F38 001C5B98  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 801C9F3C 001C5B9C  7C BF 2B 78 */	mr r31, r5
/* 801C9F40 001C5BA0  93 C1 00 18 */	stw r30, 0x18(r1)
/* 801C9F44 001C5BA4  7C 7E 1B 78 */	mr r30, r3
/* 801C9F48 001C5BA8  90 81 00 08 */	stw r4, 8(r1)
/* 801C9F4C 001C5BAC  80 03 00 04 */	lwz r0, 4(r3)
/* 801C9F50 001C5BB0  54 00 57 7E */	rlwinm r0, r0, 0xa, 0x1d, 0x1f
/* 801C9F54 001C5BB4  28 00 00 01 */	cmplwi r0, 1
/* 801C9F58 001C5BB8  40 82 00 10 */	bne lbl_801C9F68
/* 801C9F5C 001C5BBC  88 03 00 0A */	lbz r0, 0xa(r3)
/* 801C9F60 001C5BC0  2C 00 00 00 */	cmpwi r0, 0
/* 801C9F64 001C5BC4  41 82 00 14 */	beq lbl_801C9F78
lbl_801C9F68:
/* 801C9F68 001C5BC8  38 00 00 28 */	li r0, 0x28
/* 801C9F6C 001C5BCC  38 60 FF FF */	li r3, -1
/* 801C9F70 001C5BD0  90 0D 9F C8 */	stw r0, lbl_8063F288-_SDA_BASE_(r13)
/* 801C9F74 001C5BD4  48 00 01 64 */	b lbl_801CA0D8
lbl_801C9F78:
/* 801C9F78 001C5BD8  80 03 00 08 */	lwz r0, 8(r3)
/* 801C9F7C 001C5BDC  54 00 1F 7E */	srwi r0, r0, 0x1d
/* 801C9F80 001C5BE0  28 00 00 01 */	cmplwi r0, 1
/* 801C9F84 001C5BE4  40 82 00 34 */	bne lbl_801C9FB8
/* 801C9F88 001C5BE8  38 80 00 00 */	li r4, 0
/* 801C9F8C 001C5BEC  4B FF F5 41 */	bl __flush_buffer
/* 801C9F90 001C5BF0  2C 03 00 00 */	cmpwi r3, 0
/* 801C9F94 001C5BF4  41 82 00 24 */	beq lbl_801C9FB8
/* 801C9F98 001C5BF8  38 00 00 01 */	li r0, 1
/* 801C9F9C 001C5BFC  38 80 00 00 */	li r4, 0
/* 801C9FA0 001C5C00  98 1E 00 0A */	stb r0, 0xa(r30)
/* 801C9FA4 001C5C04  38 00 00 28 */	li r0, 0x28
/* 801C9FA8 001C5C08  38 60 FF FF */	li r3, -1
/* 801C9FAC 001C5C0C  90 9E 00 28 */	stw r4, 0x28(r30)
/* 801C9FB0 001C5C10  90 0D 9F C8 */	stw r0, lbl_8063F288-_SDA_BASE_(r13)
/* 801C9FB4 001C5C14  48 00 01 24 */	b lbl_801CA0D8
lbl_801C9FB8:
/* 801C9FB8 001C5C18  2C 1F 00 01 */	cmpwi r31, 1
/* 801C9FBC 001C5C1C  40 82 00 1C */	bne lbl_801C9FD8
/* 801C9FC0 001C5C20  7F C3 F3 78 */	mr r3, r30
/* 801C9FC4 001C5C24  3B E0 00 00 */	li r31, 0
/* 801C9FC8 001C5C28  4B FF FE B9 */	bl _ftell
/* 801C9FCC 001C5C2C  80 01 00 08 */	lwz r0, 8(r1)
/* 801C9FD0 001C5C30  7C 00 1A 14 */	add r0, r0, r3
/* 801C9FD4 001C5C34  90 01 00 08 */	stw r0, 8(r1)
lbl_801C9FD8:
/* 801C9FD8 001C5C38  2C 1F 00 02 */	cmpwi r31, 2
/* 801C9FDC 001C5C3C  41 82 00 80 */	beq lbl_801CA05C
/* 801C9FE0 001C5C40  80 1E 00 04 */	lwz r0, 4(r30)
/* 801C9FE4 001C5C44  54 00 2F 7E */	rlwinm r0, r0, 5, 0x1d, 0x1f
/* 801C9FE8 001C5C48  28 00 00 03 */	cmplwi r0, 3
/* 801C9FEC 001C5C4C  41 82 00 70 */	beq lbl_801CA05C
/* 801C9FF0 001C5C50  80 DE 00 08 */	lwz r6, 8(r30)
/* 801C9FF4 001C5C54  54 C3 1F 7E */	srwi r3, r6, 0x1d
/* 801C9FF8 001C5C58  38 03 FF FE */	addi r0, r3, -2
/* 801C9FFC 001C5C5C  28 00 00 01 */	cmplwi r0, 1
/* 801CA000 001C5C60  41 81 00 5C */	bgt lbl_801CA05C
/* 801CA004 001C5C64  80 61 00 08 */	lwz r3, 8(r1)
/* 801CA008 001C5C68  80 BE 00 18 */	lwz r5, 0x18(r30)
/* 801CA00C 001C5C6C  7C 03 28 40 */	cmplw r3, r5
/* 801CA010 001C5C70  40 80 00 10 */	bge lbl_801CA020
/* 801CA014 001C5C74  80 1E 00 34 */	lwz r0, 0x34(r30)
/* 801CA018 001C5C78  7C 03 00 40 */	cmplw r3, r0
/* 801CA01C 001C5C7C  40 80 00 14 */	bge lbl_801CA030
lbl_801CA020:
/* 801CA020 001C5C80  80 1E 00 08 */	lwz r0, 8(r30)
/* 801CA024 001C5C84  54 00 00 FE */	clrlwi r0, r0, 3
/* 801CA028 001C5C88  90 1E 00 08 */	stw r0, 8(r30)
/* 801CA02C 001C5C8C  48 00 00 3C */	b lbl_801CA068
lbl_801CA030:
/* 801CA030 001C5C90  80 9E 00 1C */	lwz r4, 0x1c(r30)
/* 801CA034 001C5C94  7C 60 18 50 */	subf r3, r0, r3
/* 801CA038 001C5C98  38 00 00 02 */	li r0, 2
/* 801CA03C 001C5C9C  7C 64 1A 14 */	add r3, r4, r3
/* 801CA040 001C5CA0  90 7E 00 24 */	stw r3, 0x24(r30)
/* 801CA044 001C5CA4  50 06 E8 04 */	rlwimi r6, r0, 0x1d, 0, 2
/* 801CA048 001C5CA8  80 01 00 08 */	lwz r0, 8(r1)
/* 801CA04C 001C5CAC  7C 00 28 50 */	subf r0, r0, r5
/* 801CA050 001C5CB0  90 DE 00 08 */	stw r6, 8(r30)
/* 801CA054 001C5CB4  90 1E 00 28 */	stw r0, 0x28(r30)
/* 801CA058 001C5CB8  48 00 00 10 */	b lbl_801CA068
lbl_801CA05C:
/* 801CA05C 001C5CBC  80 1E 00 08 */	lwz r0, 8(r30)
/* 801CA060 001C5CC0  54 00 00 FE */	clrlwi r0, r0, 3
/* 801CA064 001C5CC4  90 1E 00 08 */	stw r0, 8(r30)
lbl_801CA068:
/* 801CA068 001C5CC8  80 1E 00 08 */	lwz r0, 8(r30)
/* 801CA06C 001C5CCC  54 00 1F 7F */	rlwinm. r0, r0, 3, 0x1d, 0x1f
/* 801CA070 001C5CD0  40 82 00 64 */	bne lbl_801CA0D4
/* 801CA074 001C5CD4  81 9E 00 38 */	lwz r12, 0x38(r30)
/* 801CA078 001C5CD8  2C 0C 00 00 */	cmpwi r12, 0
/* 801CA07C 001C5CDC  41 82 00 44 */	beq lbl_801CA0C0
/* 801CA080 001C5CE0  7F E5 FB 78 */	mr r5, r31
/* 801CA084 001C5CE4  38 81 00 08 */	addi r4, r1, 8
/* 801CA088 001C5CE8  80 7E 00 00 */	lwz r3, 0(r30)
/* 801CA08C 001C5CEC  80 DE 00 48 */	lwz r6, 0x48(r30)
/* 801CA090 001C5CF0  7D 89 03 A6 */	mtctr r12
/* 801CA094 001C5CF4  4E 80 04 21 */	bctrl
/* 801CA098 001C5CF8  2C 03 00 00 */	cmpwi r3, 0
/* 801CA09C 001C5CFC  41 82 00 24 */	beq lbl_801CA0C0
/* 801CA0A0 001C5D00  38 00 00 01 */	li r0, 1
/* 801CA0A4 001C5D04  38 80 00 00 */	li r4, 0
/* 801CA0A8 001C5D08  98 1E 00 0A */	stb r0, 0xa(r30)
/* 801CA0AC 001C5D0C  38 00 00 28 */	li r0, 0x28
/* 801CA0B0 001C5D10  38 60 FF FF */	li r3, -1
/* 801CA0B4 001C5D14  90 9E 00 28 */	stw r4, 0x28(r30)
/* 801CA0B8 001C5D18  90 0D 9F C8 */	stw r0, lbl_8063F288-_SDA_BASE_(r13)
/* 801CA0BC 001C5D1C  48 00 00 1C */	b lbl_801CA0D8
lbl_801CA0C0:
/* 801CA0C0 001C5D20  38 60 00 00 */	li r3, 0
/* 801CA0C4 001C5D24  98 7E 00 09 */	stb r3, 9(r30)
/* 801CA0C8 001C5D28  80 01 00 08 */	lwz r0, 8(r1)
/* 801CA0CC 001C5D2C  90 1E 00 18 */	stw r0, 0x18(r30)
/* 801CA0D0 001C5D30  90 7E 00 28 */	stw r3, 0x28(r30)
lbl_801CA0D4:
/* 801CA0D4 001C5D34  38 60 00 00 */	li r3, 0
lbl_801CA0D8:
/* 801CA0D8 001C5D38  80 01 00 24 */	lwz r0, 0x24(r1)
/* 801CA0DC 001C5D3C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 801CA0E0 001C5D40  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 801CA0E4 001C5D44  7C 08 03 A6 */	mtlr r0
/* 801CA0E8 001C5D48  38 21 00 20 */	addi r1, r1, 0x20
/* 801CA0EC 001C5D4C  4E 80 00 20 */	blr

.global fseek
fseek:
/* 801CA0F0 001C5D50  4B FF FE 3C */	b _fseek

.global rewind
rewind:
/* 801CA0F4 001C5D54  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801CA0F8 001C5D58  7C 08 02 A6 */	mflr r0
/* 801CA0FC 001C5D5C  38 80 00 00 */	li r4, 0
/* 801CA100 001C5D60  38 A0 00 00 */	li r5, 0
/* 801CA104 001C5D64  90 01 00 14 */	stw r0, 0x14(r1)
/* 801CA108 001C5D68  93 E1 00 0C */	stw r31, 0xc(r1)
/* 801CA10C 001C5D6C  3B E0 00 00 */	li r31, 0
/* 801CA110 001C5D70  93 C1 00 08 */	stw r30, 8(r1)
/* 801CA114 001C5D74  7C 7E 1B 78 */	mr r30, r3
/* 801CA118 001C5D78  9B E3 00 0A */	stb r31, 0xa(r3)
/* 801CA11C 001C5D7C  4B FF FE 11 */	bl _fseek
/* 801CA120 001C5D80  9B FE 00 0A */	stb r31, 0xa(r30)
/* 801CA124 001C5D84  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 801CA128 001C5D88  83 C1 00 08 */	lwz r30, 8(r1)
/* 801CA12C 001C5D8C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801CA130 001C5D90  7C 08 03 A6 */	mtlr r0
/* 801CA134 001C5D94  38 21 00 10 */	addi r1, r1, 0x10
/* 801CA138 001C5D98  4E 80 00 20 */	blr