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

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

.global fclose
fclose:
/* 801C9BD0 001C5830  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801C9BD4 001C5834  7C 08 02 A6 */	mflr r0
/* 801C9BD8 001C5838  2C 03 00 00 */	cmpwi r3, 0
/* 801C9BDC 001C583C  90 01 00 24 */	stw r0, 0x24(r1)
/* 801C9BE0 001C5840  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 801C9BE4 001C5844  93 C1 00 18 */	stw r30, 0x18(r1)
/* 801C9BE8 001C5848  93 A1 00 14 */	stw r29, 0x14(r1)
/* 801C9BEC 001C584C  7C 7D 1B 78 */	mr r29, r3
/* 801C9BF0 001C5850  40 82 00 0C */	bne lbl_801C9BFC
/* 801C9BF4 001C5854  38 60 FF FF */	li r3, -1
/* 801C9BF8 001C5858  48 00 00 78 */	b lbl_801C9C70
lbl_801C9BFC:
/* 801C9BFC 001C585C  80 03 00 04 */	lwz r0, 4(r3)
/* 801C9C00 001C5860  54 00 57 7F */	rlwinm. r0, r0, 0xa, 0x1d, 0x1f
/* 801C9C04 001C5864  40 82 00 0C */	bne lbl_801C9C10
/* 801C9C08 001C5868  38 60 00 00 */	li r3, 0
/* 801C9C0C 001C586C  48 00 00 64 */	b lbl_801C9C70
lbl_801C9C10:
/* 801C9C10 001C5870  48 00 00 7D */	bl fflush
/* 801C9C14 001C5874  81 9D 00 44 */	lwz r12, 0x44(r29)
/* 801C9C18 001C5878  7C 7E 1B 78 */	mr r30, r3
/* 801C9C1C 001C587C  80 7D 00 00 */	lwz r3, 0(r29)
/* 801C9C20 001C5880  7D 89 03 A6 */	mtctr r12
/* 801C9C24 001C5884  4E 80 04 21 */	bctrl
/* 801C9C28 001C5888  80 1D 00 08 */	lwz r0, 8(r29)
/* 801C9C2C 001C588C  38 A0 00 00 */	li r5, 0
/* 801C9C30 001C5890  80 9D 00 04 */	lwz r4, 4(r29)
/* 801C9C34 001C5894  7C 7F 1B 78 */	mr r31, r3
/* 801C9C38 001C5898  54 00 27 FF */	rlwinm. r0, r0, 4, 0x1f, 0x1f
/* 801C9C3C 001C589C  90 BD 00 00 */	stw r5, 0(r29)
/* 801C9C40 001C58A0  54 84 02 8C */	rlwinm r4, r4, 0, 0xa, 6
/* 801C9C44 001C58A4  90 9D 00 04 */	stw r4, 4(r29)
/* 801C9C48 001C58A8  41 82 00 0C */	beq lbl_801C9C54
/* 801C9C4C 001C58AC  80 7D 00 1C */	lwz r3, 0x1c(r29)
/* 801C9C50 001C58B0  4B E4 0B 75 */	bl free
lbl_801C9C54:
/* 801C9C54 001C58B4  2C 1E 00 00 */	cmpwi r30, 0
/* 801C9C58 001C58B8  38 00 00 00 */	li r0, 0
/* 801C9C5C 001C58BC  40 82 00 0C */	bne lbl_801C9C68
/* 801C9C60 001C58C0  2C 1F 00 00 */	cmpwi r31, 0
/* 801C9C64 001C58C4  41 82 00 08 */	beq lbl_801C9C6C
lbl_801C9C68:
/* 801C9C68 001C58C8  38 00 00 01 */	li r0, 1
lbl_801C9C6C:
/* 801C9C6C 001C58CC  7C 60 00 D0 */	neg r3, r0
lbl_801C9C70:
/* 801C9C70 001C58D0  80 01 00 24 */	lwz r0, 0x24(r1)
/* 801C9C74 001C58D4  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 801C9C78 001C58D8  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 801C9C7C 001C58DC  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 801C9C80 001C58E0  7C 08 03 A6 */	mtlr r0
/* 801C9C84 001C58E4  38 21 00 20 */	addi r1, r1, 0x20
/* 801C9C88 001C58E8  4E 80 00 20 */	blr

.global fflush
fflush:
/* 801C9C8C 001C58EC  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801C9C90 001C58F0  7C 08 02 A6 */	mflr r0
/* 801C9C94 001C58F4  2C 03 00 00 */	cmpwi r3, 0
/* 801C9C98 001C58F8  90 01 00 14 */	stw r0, 0x14(r1)
/* 801C9C9C 001C58FC  93 E1 00 0C */	stw r31, 0xc(r1)
/* 801C9CA0 001C5900  7C 7F 1B 78 */	mr r31, r3
/* 801C9CA4 001C5904  93 C1 00 08 */	stw r30, 8(r1)
/* 801C9CA8 001C5908  40 82 00 0C */	bne lbl_801C9CB4
/* 801C9CAC 001C590C  4B FF DD 11 */	bl __flush_all
/* 801C9CB0 001C5910  48 00 00 F8 */	b lbl_801C9DA8
lbl_801C9CB4:
/* 801C9CB4 001C5914  88 03 00 0A */	lbz r0, 0xa(r3)
/* 801C9CB8 001C5918  2C 00 00 00 */	cmpwi r0, 0
/* 801C9CBC 001C591C  40 82 00 10 */	bne lbl_801C9CCC
/* 801C9CC0 001C5920  80 83 00 04 */	lwz r4, 4(r3)
/* 801C9CC4 001C5924  54 80 57 7F */	rlwinm. r0, r4, 0xa, 0x1d, 0x1f
/* 801C9CC8 001C5928  40 82 00 0C */	bne lbl_801C9CD4
lbl_801C9CCC:
/* 801C9CCC 001C592C  38 60 FF FF */	li r3, -1
/* 801C9CD0 001C5930  48 00 00 D8 */	b lbl_801C9DA8
lbl_801C9CD4:
/* 801C9CD4 001C5934  54 80 2F 7E */	rlwinm r0, r4, 5, 0x1d, 0x1f
/* 801C9CD8 001C5938  28 00 00 01 */	cmplwi r0, 1
/* 801C9CDC 001C593C  40 82 00 0C */	bne lbl_801C9CE8
/* 801C9CE0 001C5940  38 60 00 00 */	li r3, 0
/* 801C9CE4 001C5944  48 00 00 C4 */	b lbl_801C9DA8
lbl_801C9CE8:
/* 801C9CE8 001C5948  80 83 00 08 */	lwz r4, 8(r3)
/* 801C9CEC 001C594C  54 80 1F 7E */	srwi r0, r4, 0x1d
/* 801C9CF0 001C5950  28 00 00 03 */	cmplwi r0, 3
/* 801C9CF4 001C5954  41 80 00 10 */	blt lbl_801C9D04
/* 801C9CF8 001C5958  38 00 00 02 */	li r0, 2
/* 801C9CFC 001C595C  50 04 E8 04 */	rlwimi r4, r0, 0x1d, 0, 2
/* 801C9D00 001C5960  90 83 00 08 */	stw r4, 8(r3)
lbl_801C9D04:
/* 801C9D04 001C5964  80 03 00 08 */	lwz r0, 8(r3)
/* 801C9D08 001C5968  54 00 1F 7E */	srwi r0, r0, 0x1d
/* 801C9D0C 001C596C  28 00 00 02 */	cmplwi r0, 2
/* 801C9D10 001C5970  40 82 00 0C */	bne lbl_801C9D1C
/* 801C9D14 001C5974  38 00 00 00 */	li r0, 0
/* 801C9D18 001C5978  90 03 00 28 */	stw r0, 0x28(r3)
lbl_801C9D1C:
/* 801C9D1C 001C597C  80 83 00 08 */	lwz r4, 8(r3)
/* 801C9D20 001C5980  54 80 1F 7E */	srwi r0, r4, 0x1d
/* 801C9D24 001C5984  28 00 00 01 */	cmplwi r0, 1
/* 801C9D28 001C5988  41 82 00 14 */	beq lbl_801C9D3C
/* 801C9D2C 001C598C  54 80 00 FE */	clrlwi r0, r4, 3
/* 801C9D30 001C5990  90 03 00 08 */	stw r0, 8(r3)
/* 801C9D34 001C5994  38 60 00 00 */	li r3, 0
/* 801C9D38 001C5998  48 00 00 70 */	b lbl_801C9DA8
lbl_801C9D3C:
/* 801C9D3C 001C599C  80 03 00 04 */	lwz r0, 4(r3)
/* 801C9D40 001C59A0  54 00 57 7E */	rlwinm r0, r0, 0xa, 0x1d, 0x1f
/* 801C9D44 001C59A4  28 00 00 01 */	cmplwi r0, 1
/* 801C9D48 001C59A8  41 82 00 0C */	beq lbl_801C9D54
/* 801C9D4C 001C59AC  3B C0 00 00 */	li r30, 0
/* 801C9D50 001C59B0  48 00 00 10 */	b lbl_801C9D60
lbl_801C9D54:
/* 801C9D54 001C59B4  7F E3 FB 78 */	mr r3, r31
/* 801C9D58 001C59B8  48 00 01 D1 */	bl ftell
/* 801C9D5C 001C59BC  7C 7E 1B 78 */	mr r30, r3
lbl_801C9D60:
/* 801C9D60 001C59C0  7F E3 FB 78 */	mr r3, r31
/* 801C9D64 001C59C4  38 80 00 00 */	li r4, 0
/* 801C9D68 001C59C8  4B FF F7 65 */	bl __flush_buffer
/* 801C9D6C 001C59CC  2C 03 00 00 */	cmpwi r3, 0
/* 801C9D70 001C59D0  41 82 00 1C */	beq lbl_801C9D8C
/* 801C9D74 001C59D4  38 60 00 01 */	li r3, 1
/* 801C9D78 001C59D8  38 00 00 00 */	li r0, 0
/* 801C9D7C 001C59DC  98 7F 00 0A */	stb r3, 0xa(r31)
/* 801C9D80 001C59E0  38 60 FF FF */	li r3, -1
/* 801C9D84 001C59E4  90 1F 00 28 */	stw r0, 0x28(r31)
/* 801C9D88 001C59E8  48 00 00 20 */	b lbl_801C9DA8
lbl_801C9D8C:
/* 801C9D8C 001C59EC  80 1F 00 08 */	lwz r0, 8(r31)
/* 801C9D90 001C59F0  38 80 00 00 */	li r4, 0
/* 801C9D94 001C59F4  93 DF 00 18 */	stw r30, 0x18(r31)
/* 801C9D98 001C59F8  38 60 00 00 */	li r3, 0
/* 801C9D9C 001C59FC  54 00 00 FE */	clrlwi r0, r0, 3
/* 801C9DA0 001C5A00  90 1F 00 08 */	stw r0, 8(r31)
/* 801C9DA4 001C5A04  90 9F 00 28 */	stw r4, 0x28(r31)
lbl_801C9DA8:
/* 801C9DA8 001C5A08  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801C9DAC 001C5A0C  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 801C9DB0 001C5A10  83 C1 00 08 */	lwz r30, 8(r1)
/* 801C9DB4 001C5A14  7C 08 03 A6 */	mtlr r0
/* 801C9DB8 001C5A18  38 21 00 10 */	addi r1, r1, 0x10
/* 801C9DBC 001C5A1C  4E 80 00 20 */	blr

.global __msl_strnicmp
__msl_strnicmp:
/* 801C9DC0 001C5A20  3C C0 80 42 */	lis r6, lbl_80422D48@ha
/* 801C9DC4 001C5A24  38 C6 2D 48 */	addi r6, r6, lbl_80422D48@l
/* 801C9DC8 001C5A28  80 C6 00 38 */	lwz r6, 0x38(r6)
/* 801C9DCC 001C5A2C  7C A9 03 A6 */	mtctr r5
/* 801C9DD0 001C5A30  2C 05 00 00 */	cmpwi r5, 0
/* 801C9DD4 001C5A34  40 81 00 A4 */	ble lbl_801C9E78
lbl_801C9DD8:
/* 801C9DD8 001C5A38  88 A3 00 00 */	lbz r5, 0(r3)
/* 801C9DDC 001C5A3C  38 00 00 00 */	li r0, 0
/* 801C9DE0 001C5A40  38 63 00 01 */	addi r3, r3, 1
/* 801C9DE4 001C5A44  7C A7 07 75 */	extsb. r7, r5
/* 801C9DE8 001C5A48  41 80 00 0C */	blt lbl_801C9DF4
/* 801C9DEC 001C5A4C  2C 07 01 00 */	cmpwi r7, 0x100
/* 801C9DF0 001C5A50  41 80 00 08 */	blt lbl_801C9DF8
lbl_801C9DF4:
/* 801C9DF4 001C5A54  38 00 00 01 */	li r0, 1
lbl_801C9DF8:
/* 801C9DF8 001C5A58  2C 00 00 00 */	cmpwi r0, 0
/* 801C9DFC 001C5A5C  41 82 00 08 */	beq lbl_801C9E04
/* 801C9E00 001C5A60  48 00 00 0C */	b lbl_801C9E0C
lbl_801C9E04:
/* 801C9E04 001C5A64  80 A6 00 10 */	lwz r5, 0x10(r6)
/* 801C9E08 001C5A68  7C E5 38 AE */	lbzx r7, r5, r7
lbl_801C9E0C:
/* 801C9E0C 001C5A6C  88 A4 00 00 */	lbz r5, 0(r4)
/* 801C9E10 001C5A70  7C E8 07 74 */	extsb r8, r7
/* 801C9E14 001C5A74  38 00 00 00 */	li r0, 0
/* 801C9E18 001C5A78  38 84 00 01 */	addi r4, r4, 1
/* 801C9E1C 001C5A7C  7C A7 07 75 */	extsb. r7, r5
/* 801C9E20 001C5A80  41 80 00 0C */	blt lbl_801C9E2C
/* 801C9E24 001C5A84  2C 07 01 00 */	cmpwi r7, 0x100
/* 801C9E28 001C5A88  41 80 00 08 */	blt lbl_801C9E30
lbl_801C9E2C:
/* 801C9E2C 001C5A8C  38 00 00 01 */	li r0, 1
lbl_801C9E30:
/* 801C9E30 001C5A90  2C 00 00 00 */	cmpwi r0, 0
/* 801C9E34 001C5A94  41 82 00 08 */	beq lbl_801C9E3C
/* 801C9E38 001C5A98  48 00 00 0C */	b lbl_801C9E44
lbl_801C9E3C:
/* 801C9E3C 001C5A9C  80 A6 00 10 */	lwz r5, 0x10(r6)
/* 801C9E40 001C5AA0  7C E5 38 AE */	lbzx r7, r5, r7
lbl_801C9E44:
/* 801C9E44 001C5AA4  7C E0 07 74 */	extsb r0, r7
/* 801C9E48 001C5AA8  7C 08 00 00 */	cmpw r8, r0
/* 801C9E4C 001C5AAC  40 80 00 0C */	bge lbl_801C9E58
/* 801C9E50 001C5AB0  38 60 FF FF */	li r3, -1
/* 801C9E54 001C5AB4  4E 80 00 20 */	blr
lbl_801C9E58:
/* 801C9E58 001C5AB8  40 81 00 0C */	ble lbl_801C9E64
/* 801C9E5C 001C5ABC  38 60 00 01 */	li r3, 1
/* 801C9E60 001C5AC0  4E 80 00 20 */	blr
lbl_801C9E64:
/* 801C9E64 001C5AC4  2C 08 00 00 */	cmpwi r8, 0
/* 801C9E68 001C5AC8  40 82 00 0C */	bne lbl_801C9E74
/* 801C9E6C 001C5ACC  38 60 00 00 */	li r3, 0
/* 801C9E70 001C5AD0  4E 80 00 20 */	blr
lbl_801C9E74:
/* 801C9E74 001C5AD4  42 00 FF 64 */	bdnz lbl_801C9DD8
lbl_801C9E78:
/* 801C9E78 001C5AD8  38 60 00 00 */	li r3, 0
/* 801C9E7C 001C5ADC  4E 80 00 20 */	blr