.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