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
|
.include "macros.inc"
.section .text, "ax" # 0x80006980 - 0x803E1E60
.global MEMCreateFrmHeapEx
MEMCreateFrmHeapEx:
/* 8029740C 0029306C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80297410 00293070 7C 08 02 A6 */ mflr r0
/* 80297414 00293074 7C 84 1A 14 */ add r4, r4, r3
/* 80297418 00293078 90 01 00 14 */ stw r0, 0x14(r1)
/* 8029741C 0029307C 38 03 00 03 */ addi r0, r3, 3
/* 80297420 00293080 54 86 00 3A */ rlwinm r6, r4, 0, 0, 0x1d
/* 80297424 00293084 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80297428 00293088 54 1F 00 3A */ rlwinm r31, r0, 0, 0, 0x1d
/* 8029742C 0029308C 7C 1F 30 40 */ cmplw r31, r6
/* 80297430 00293090 41 81 00 10 */ bgt lbl_80297440
/* 80297434 00293094 7C 1F 30 50 */ subf r0, r31, r6
/* 80297438 00293098 28 00 00 48 */ cmplwi r0, 0x48
/* 8029743C 0029309C 40 80 00 0C */ bge lbl_80297448
lbl_80297440:
/* 80297440 002930A0 38 60 00 00 */ li r3, 0
/* 80297444 002930A4 48 00 00 38 */ b lbl_8029747C
lbl_80297448:
/* 80297448 002930A8 3C 80 46 52 */ lis r4, 0x46524D48@ha
/* 8029744C 002930AC 7C A7 2B 78 */ mr r7, r5
/* 80297450 002930B0 7F E3 FB 78 */ mr r3, r31
/* 80297454 002930B4 38 BF 00 48 */ addi r5, r31, 0x48
/* 80297458 002930B8 38 84 4D 48 */ addi r4, r4, 0x46524D48@l
/* 8029745C 002930BC 4B FF F1 B1 */ bl MEMiInitHeapHead
/* 80297460 002930C0 80 9F 00 18 */ lwz r4, 0x18(r31)
/* 80297464 002930C4 38 00 00 00 */ li r0, 0
/* 80297468 002930C8 7F E3 FB 78 */ mr r3, r31
/* 8029746C 002930CC 90 9F 00 3C */ stw r4, 0x3c(r31)
/* 80297470 002930D0 80 9F 00 1C */ lwz r4, 0x1c(r31)
/* 80297474 002930D4 90 9F 00 40 */ stw r4, 0x40(r31)
/* 80297478 002930D8 90 1F 00 44 */ stw r0, 0x44(r31)
lbl_8029747C:
/* 8029747C 002930DC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80297480 002930E0 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80297484 002930E4 7C 08 03 A6 */ mtlr r0
/* 80297488 002930E8 38 21 00 10 */ addi r1, r1, 0x10
/* 8029748C 002930EC 4E 80 00 20 */ blr
.global MEMDestroyFrmHeap
MEMDestroyFrmHeap:
/* 80297490 002930F0 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80297494 002930F4 7C 08 02 A6 */ mflr r0
/* 80297498 002930F8 90 01 00 14 */ stw r0, 0x14(r1)
/* 8029749C 002930FC 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802974A0 00293100 7C 7F 1B 78 */ mr r31, r3
/* 802974A4 00293104 4B FF F3 29 */ bl MEMiFinalizeHeap
/* 802974A8 00293108 7F E3 FB 78 */ mr r3, r31
/* 802974AC 0029310C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802974B0 00293110 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802974B4 00293114 7C 08 03 A6 */ mtlr r0
/* 802974B8 00293118 38 21 00 10 */ addi r1, r1, 0x10
/* 802974BC 0029311C 4E 80 00 20 */ blr
.global MEMAllocFromFrmHeapEx
MEMAllocFromFrmHeapEx:
/* 802974C0 00293120 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802974C4 00293124 7C 08 02 A6 */ mflr r0
/* 802974C8 00293128 2C 04 00 00 */ cmpwi r4, 0
/* 802974CC 0029312C 90 01 00 24 */ stw r0, 0x24(r1)
/* 802974D0 00293130 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 802974D4 00293134 7C 7F 1B 78 */ mr r31, r3
/* 802974D8 00293138 93 C1 00 18 */ stw r30, 0x18(r1)
/* 802974DC 0029313C 7C 9E 23 78 */ mr r30, r4
/* 802974E0 00293140 93 A1 00 14 */ stw r29, 0x14(r1)
/* 802974E4 00293144 7C BD 2B 78 */ mr r29, r5
/* 802974E8 00293148 40 82 00 08 */ bne lbl_802974F0
/* 802974EC 0029314C 3B C0 00 01 */ li r30, 1
lbl_802974F0:
/* 802974F0 00293150 80 03 00 38 */ lwz r0, 0x38(r3)
/* 802974F4 00293154 38 9E 00 03 */ addi r4, r30, 3
/* 802974F8 00293158 54 9E 00 3A */ rlwinm r30, r4, 0, 0, 0x1d
/* 802974FC 0029315C 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80297500 00293160 41 82 00 0C */ beq lbl_8029750C
/* 80297504 00293164 38 63 00 20 */ addi r3, r3, 0x20
/* 80297508 00293168 4B FD 84 41 */ bl OSLockMutex
lbl_8029750C:
/* 8029750C 0029316C 2C 1D 00 00 */ cmpwi r29, 0
/* 80297510 00293170 41 80 00 54 */ blt lbl_80297564
/* 80297514 00293174 80 7F 00 3C */ lwz r3, 0x3c(r31)
/* 80297518 00293178 38 1D FF FF */ addi r0, r29, -1
/* 8029751C 0029317C 7C 05 00 F8 */ nor r5, r0, r0
/* 80297520 00293180 80 1F 00 40 */ lwz r0, 0x40(r31)
/* 80297524 00293184 7C 9D 1A 14 */ add r4, r29, r3
/* 80297528 00293188 38 84 FF FF */ addi r4, r4, -1
/* 8029752C 0029318C 7C BD 20 38 */ and r29, r5, r4
/* 80297530 00293190 7F DE EA 14 */ add r30, r30, r29
/* 80297534 00293194 7C 1E 00 40 */ cmplw r30, r0
/* 80297538 00293198 40 81 00 0C */ ble lbl_80297544
/* 8029753C 0029319C 3B A0 00 00 */ li r29, 0
/* 80297540 002931A0 48 00 00 6C */ b lbl_802975AC
lbl_80297544:
/* 80297544 002931A4 80 1F 00 38 */ lwz r0, 0x38(r31)
/* 80297548 002931A8 7C A3 F0 50 */ subf r5, r3, r30
/* 8029754C 002931AC 54 00 07 FF */ clrlwi. r0, r0, 0x1f
/* 80297550 002931B0 41 82 00 0C */ beq lbl_8029755C
/* 80297554 002931B4 38 80 00 00 */ li r4, 0
/* 80297558 002931B8 4B D6 CB AD */ bl memset
lbl_8029755C:
/* 8029755C 002931BC 93 DF 00 3C */ stw r30, 0x3c(r31)
/* 80297560 002931C0 48 00 00 4C */ b lbl_802975AC
lbl_80297564:
/* 80297564 002931C4 80 BF 00 40 */ lwz r5, 0x40(r31)
/* 80297568 002931C8 20 1D FF FF */ subfic r0, r29, -1
/* 8029756C 002931CC 7C 04 00 F8 */ nor r4, r0, r0
/* 80297570 002931D0 80 1F 00 3C */ lwz r0, 0x3c(r31)
/* 80297574 002931D4 7C 7E 28 50 */ subf r3, r30, r5
/* 80297578 002931D8 7C 9D 18 38 */ and r29, r4, r3
/* 8029757C 002931DC 7C 1D 00 40 */ cmplw r29, r0
/* 80297580 002931E0 40 80 00 0C */ bge lbl_8029758C
/* 80297584 002931E4 3B A0 00 00 */ li r29, 0
/* 80297588 002931E8 48 00 00 24 */ b lbl_802975AC
lbl_8029758C:
/* 8029758C 002931EC 80 1F 00 38 */ lwz r0, 0x38(r31)
/* 80297590 002931F0 7C BD 28 50 */ subf r5, r29, r5
/* 80297594 002931F4 54 00 07 FF */ clrlwi. r0, r0, 0x1f
/* 80297598 002931F8 41 82 00 10 */ beq lbl_802975A8
/* 8029759C 002931FC 7F A3 EB 78 */ mr r3, r29
/* 802975A0 00293200 38 80 00 00 */ li r4, 0
/* 802975A4 00293204 4B D6 CB 61 */ bl memset
lbl_802975A8:
/* 802975A8 00293208 93 BF 00 40 */ stw r29, 0x40(r31)
lbl_802975AC:
/* 802975AC 0029320C 80 1F 00 38 */ lwz r0, 0x38(r31)
/* 802975B0 00293210 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 802975B4 00293214 41 82 00 0C */ beq lbl_802975C0
/* 802975B8 00293218 38 7F 00 20 */ addi r3, r31, 0x20
/* 802975BC 0029321C 4B FD 84 69 */ bl OSUnlockMutex
lbl_802975C0:
/* 802975C0 00293220 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 802975C4 00293224 7F A3 EB 78 */ mr r3, r29
/* 802975C8 00293228 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 802975CC 0029322C 83 A1 00 14 */ lwz r29, 0x14(r1)
/* 802975D0 00293230 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802975D4 00293234 7C 08 03 A6 */ mtlr r0
/* 802975D8 00293238 38 21 00 20 */ addi r1, r1, 0x20
/* 802975DC 0029323C 4E 80 00 20 */ blr
.global MEMFreeToFrmHeap
MEMFreeToFrmHeap:
/* 802975E0 00293240 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802975E4 00293244 7C 08 02 A6 */ mflr r0
/* 802975E8 00293248 90 01 00 14 */ stw r0, 0x14(r1)
/* 802975EC 0029324C 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802975F0 00293250 7C 9F 23 78 */ mr r31, r4
/* 802975F4 00293254 93 C1 00 08 */ stw r30, 8(r1)
/* 802975F8 00293258 7C 7E 1B 78 */ mr r30, r3
/* 802975FC 0029325C 80 03 00 38 */ lwz r0, 0x38(r3)
/* 80297600 00293260 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80297604 00293264 41 82 00 0C */ beq lbl_80297610
/* 80297608 00293268 38 63 00 20 */ addi r3, r3, 0x20
/* 8029760C 0029326C 4B FD 83 3D */ bl OSLockMutex
lbl_80297610:
/* 80297610 00293270 57 E0 07 FF */ clrlwi. r0, r31, 0x1f
/* 80297614 00293274 41 82 00 14 */ beq lbl_80297628
/* 80297618 00293278 80 7E 00 18 */ lwz r3, 0x18(r30)
/* 8029761C 0029327C 38 00 00 00 */ li r0, 0
/* 80297620 00293280 90 1E 00 44 */ stw r0, 0x44(r30)
/* 80297624 00293284 90 7E 00 3C */ stw r3, 0x3c(r30)
lbl_80297628:
/* 80297628 00293288 57 E0 07 BD */ rlwinm. r0, r31, 0, 0x1e, 0x1e
/* 8029762C 0029328C 41 82 00 28 */ beq lbl_80297654
/* 80297630 00293290 80 7E 00 44 */ lwz r3, 0x44(r30)
/* 80297634 00293294 48 00 00 10 */ b lbl_80297644
lbl_80297638:
/* 80297638 00293298 80 1E 00 1C */ lwz r0, 0x1c(r30)
/* 8029763C 0029329C 90 03 00 08 */ stw r0, 8(r3)
/* 80297640 002932A0 80 63 00 0C */ lwz r3, 0xc(r3)
lbl_80297644:
/* 80297644 002932A4 2C 03 00 00 */ cmpwi r3, 0
/* 80297648 002932A8 40 82 FF F0 */ bne lbl_80297638
/* 8029764C 002932AC 80 1E 00 1C */ lwz r0, 0x1c(r30)
/* 80297650 002932B0 90 1E 00 40 */ stw r0, 0x40(r30)
lbl_80297654:
/* 80297654 002932B4 80 1E 00 38 */ lwz r0, 0x38(r30)
/* 80297658 002932B8 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 8029765C 002932BC 41 82 00 0C */ beq lbl_80297668
/* 80297660 002932C0 38 7E 00 20 */ addi r3, r30, 0x20
/* 80297664 002932C4 4B FD 83 C1 */ bl OSUnlockMutex
lbl_80297668:
/* 80297668 002932C8 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8029766C 002932CC 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80297670 002932D0 83 C1 00 08 */ lwz r30, 8(r1)
/* 80297674 002932D4 7C 08 03 A6 */ mtlr r0
/* 80297678 002932D8 38 21 00 10 */ addi r1, r1, 0x10
/* 8029767C 002932DC 4E 80 00 20 */ blr
.global MEMGetAllocatableSizeForFrmHeapEx
MEMGetAllocatableSizeForFrmHeapEx:
/* 80297680 002932E0 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80297684 002932E4 7C 08 02 A6 */ mflr r0
/* 80297688 002932E8 90 01 00 14 */ stw r0, 0x14(r1)
/* 8029768C 002932EC 7C 80 FE 70 */ srawi r0, r4, 0x1f
/* 80297690 002932F0 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80297694 002932F4 7C 1F 22 78 */ xor r31, r0, r4
/* 80297698 002932F8 7F E0 F8 50 */ subf r31, r0, r31
/* 8029769C 002932FC 93 C1 00 08 */ stw r30, 8(r1)
/* 802976A0 00293300 7C 7E 1B 78 */ mr r30, r3
/* 802976A4 00293304 4B FD 70 B9 */ bl OSDisableInterrupts
/* 802976A8 00293308 80 1E 00 3C */ lwz r0, 0x3c(r30)
/* 802976AC 0029330C 38 9F FF FF */ addi r4, r31, -1
/* 802976B0 00293310 7C 85 20 F8 */ nor r5, r4, r4
/* 802976B4 00293314 80 DE 00 40 */ lwz r6, 0x40(r30)
/* 802976B8 00293318 7C 9F 02 14 */ add r4, r31, r0
/* 802976BC 0029331C 38 04 FF FF */ addi r0, r4, -1
/* 802976C0 00293320 7C A0 00 38 */ and r0, r5, r0
/* 802976C4 00293324 7C 00 30 40 */ cmplw r0, r6
/* 802976C8 00293328 40 81 00 0C */ ble lbl_802976D4
/* 802976CC 0029332C 3B E0 00 00 */ li r31, 0
/* 802976D0 00293330 48 00 00 08 */ b lbl_802976D8
lbl_802976D4:
/* 802976D4 00293334 7F E0 30 50 */ subf r31, r0, r6
lbl_802976D8:
/* 802976D8 00293338 4B FD 70 AD */ bl OSRestoreInterrupts
/* 802976DC 0029333C 7F E3 FB 78 */ mr r3, r31
/* 802976E0 00293340 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802976E4 00293344 83 C1 00 08 */ lwz r30, 8(r1)
/* 802976E8 00293348 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802976EC 0029334C 7C 08 03 A6 */ mtlr r0
/* 802976F0 00293350 38 21 00 10 */ addi r1, r1, 0x10
/* 802976F4 00293354 4E 80 00 20 */ blr
|