diff options
author | Max <34987259+mparisi20@users.noreply.github.com> | 2020-10-04 13:46:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-04 13:46:40 -0400 |
commit | eb574b30bc24d82badaa10f28713648d9cbe7b87 (patch) | |
tree | de940633b2eae3a836a6f9b9981b58ce3bacece9 /asm/SDK/MEM | |
parent | bcae721dbb421c50416eed649e17e468ba46efc0 (diff) | |
parent | db7f2f608adc0e77d64e5862c0e3fce12d0857de (diff) |
Merge pull request #120 from mparisi20/master
Split MEM, MIX, DSP, TPL, and THP libraries
Diffstat (limited to 'asm/SDK/MEM')
-rw-r--r-- | asm/SDK/MEM/mem_allocator.s | 60 | ||||
-rw-r--r-- | asm/SDK/MEM/mem_expHeap.s | 831 | ||||
-rw-r--r-- | asm/SDK/MEM/mem_frameHeap.s | 225 | ||||
-rw-r--r-- | asm/SDK/MEM/mem_heapCommon.s | 334 | ||||
-rw-r--r-- | asm/SDK/MEM/mem_list.s | 90 |
5 files changed, 1540 insertions, 0 deletions
diff --git a/asm/SDK/MEM/mem_allocator.s b/asm/SDK/MEM/mem_allocator.s new file mode 100644 index 0000000..4472425 --- /dev/null +++ b/asm/SDK/MEM/mem_allocator.s @@ -0,0 +1,60 @@ +.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global AllocatorAllocForExpHeap_
+AllocatorAllocForExpHeap_:
+/* 802976F8 00293358 7C 65 1B 78 */ mr r5, r3
+/* 802976FC 0029335C 80 63 00 04 */ lwz r3, 4(r3)
+/* 80297700 00293360 80 A5 00 08 */ lwz r5, 8(r5)
+/* 80297704 00293364 4B FF F8 24 */ b MEMAllocFromExpHeapEx
+
+.global AllocatorFreeForExpHeap_
+AllocatorFreeForExpHeap_:
+/* 80297708 00293368 80 63 00 04 */ lwz r3, 4(r3)
+/* 8029770C 0029336C 4B FF FA B8 */ b MEMFreeToExpHeap
+
+.global AllocatorAllocForFrmHeap_
+AllocatorAllocForFrmHeap_:
+/* 80297710 00293370 7C 65 1B 78 */ mr r5, r3
+/* 80297714 00293374 80 63 00 04 */ lwz r3, 4(r3)
+/* 80297718 00293378 80 A5 00 08 */ lwz r5, 8(r5)
+/* 8029771C 0029337C 4B FF FD A4 */ b MEMAllocFromFrmHeapEx
+
+.global AllocatorFreeForFrmHeap_
+AllocatorFreeForFrmHeap_:
+/* 80297720 00293380 4E 80 00 20 */ blr
+
+.global MEMAllocFromAllocator
+MEMAllocFromAllocator:
+/* 80297724 00293384 80 A3 00 00 */ lwz r5, 0(r3)
+/* 80297728 00293388 81 85 00 00 */ lwz r12, 0(r5)
+/* 8029772C 0029338C 7D 89 03 A6 */ mtctr r12
+/* 80297730 00293390 4E 80 04 20 */ bctr
+
+.global MEMFreeToAllocator
+MEMFreeToAllocator:
+/* 80297734 00293394 80 A3 00 00 */ lwz r5, 0(r3)
+/* 80297738 00293398 81 85 00 04 */ lwz r12, 4(r5)
+/* 8029773C 0029339C 7D 89 03 A6 */ mtctr r12
+/* 80297740 002933A0 4E 80 04 20 */ bctr
+
+.global MEMInitAllocatorForExpHeap
+MEMInitAllocatorForExpHeap:
+/* 80297744 002933A4 38 C2 A3 68 */ addi r6, r2, lbl_80642968-_SDA2_BASE_
+/* 80297748 002933A8 38 00 00 00 */ li r0, 0
+/* 8029774C 002933AC 90 C3 00 00 */ stw r6, 0(r3)
+/* 80297750 002933B0 90 83 00 04 */ stw r4, 4(r3)
+/* 80297754 002933B4 90 A3 00 08 */ stw r5, 8(r3)
+/* 80297758 002933B8 90 03 00 0C */ stw r0, 0xc(r3)
+/* 8029775C 002933BC 4E 80 00 20 */ blr
+
+.global MEMInitAllocatorForFrmHeap
+MEMInitAllocatorForFrmHeap:
+/* 80297760 002933C0 38 C2 A3 70 */ addi r6, r2, lbl_80642970-_SDA2_BASE_
+/* 80297764 002933C4 38 00 00 00 */ li r0, 0
+/* 80297768 002933C8 90 C3 00 00 */ stw r6, 0(r3)
+/* 8029776C 002933CC 90 83 00 04 */ stw r4, 4(r3)
+/* 80297770 002933D0 90 A3 00 08 */ stw r5, 8(r3)
+/* 80297774 002933D4 90 03 00 0C */ stw r0, 0xc(r3)
+/* 80297778 002933D8 4E 80 00 20 */ blr
diff --git a/asm/SDK/MEM/mem_expHeap.s b/asm/SDK/MEM/mem_expHeap.s new file mode 100644 index 0000000..33dd97d --- /dev/null +++ b/asm/SDK/MEM/mem_expHeap.s @@ -0,0 +1,831 @@ +.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global AllocUsedBlockFromFreeBlock_
+AllocUsedBlockFromFreeBlock_:
+/* 80296938 00292598 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 8029693C 0029259C 7C 08 02 A6 */ mflr r0
+/* 80296940 002925A0 90 01 00 24 */ stw r0, 0x24(r1)
+/* 80296944 002925A4 39 61 00 20 */ addi r11, r1, 0x20
+/* 80296948 002925A8 4B F3 07 DD */ bl _savegpr_26
+/* 8029694C 002925AC 81 04 00 08 */ lwz r8, 8(r4)
+/* 80296950 002925B0 7F C6 2A 14 */ add r30, r6, r5
+/* 80296954 002925B4 A0 C4 00 02 */ lhz r6, 2(r4)
+/* 80296958 002925B8 3B A5 FF F0 */ addi r29, r5, -16
+/* 8029695C 002925BC 80 04 00 04 */ lwz r0, 4(r4)
+/* 80296960 002925C0 2C 08 00 00 */ cmpwi r8, 0
+/* 80296964 002925C4 54 C9 C6 7E */ rlwinm r9, r6, 0x18, 0x19, 0x1f
+/* 80296968 002925C8 81 44 00 0C */ lwz r10, 0xc(r4)
+/* 8029696C 002925CC 7C C4 02 14 */ add r6, r4, r0
+/* 80296970 002925D0 7C BB 2B 78 */ mr r27, r5
+/* 80296974 002925D4 7C 7A 1B 78 */ mr r26, r3
+/* 80296978 002925D8 7C FC 3B 78 */ mr r28, r7
+/* 8029697C 002925DC 7F BF EB 78 */ mr r31, r29
+/* 80296980 002925E0 7C A9 20 50 */ subf r5, r9, r4
+/* 80296984 002925E4 38 C6 00 10 */ addi r6, r6, 0x10
+/* 80296988 002925E8 41 82 00 0C */ beq lbl_80296994
+/* 8029698C 002925EC 91 48 00 0C */ stw r10, 0xc(r8)
+/* 80296990 002925F0 48 00 00 08 */ b lbl_80296998
+lbl_80296994:
+/* 80296994 002925F4 91 43 00 00 */ stw r10, 0(r3)
+lbl_80296998:
+/* 80296998 002925F8 2C 0A 00 00 */ cmpwi r10, 0
+/* 8029699C 002925FC 41 82 00 0C */ beq lbl_802969A8
+/* 802969A0 00292600 91 0A 00 08 */ stw r8, 8(r10)
+/* 802969A4 00292604 48 00 00 08 */ b lbl_802969AC
+lbl_802969A8:
+/* 802969A8 00292608 91 03 00 04 */ stw r8, 4(r3)
+lbl_802969AC:
+/* 802969AC 0029260C 7C 05 E8 50 */ subf r0, r5, r29
+/* 802969B0 00292610 28 00 00 14 */ cmplwi r0, 0x14
+/* 802969B4 00292614 40 80 00 0C */ bge lbl_802969C0
+/* 802969B8 00292618 7C BF 2B 78 */ mr r31, r5
+/* 802969BC 0029261C 48 00 00 60 */ b lbl_80296A1C
+lbl_802969C0:
+/* 802969C0 00292620 38 80 46 52 */ li r4, 0x4652
+/* 802969C4 00292624 38 05 00 10 */ addi r0, r5, 0x10
+/* 802969C8 00292628 B0 85 00 00 */ sth r4, 0(r5)
+/* 802969CC 0029262C 38 80 00 00 */ li r4, 0
+/* 802969D0 00292630 7C 00 E8 50 */ subf r0, r0, r29
+/* 802969D4 00292634 2C 08 00 00 */ cmpwi r8, 0
+/* 802969D8 00292638 B0 85 00 02 */ sth r4, 2(r5)
+/* 802969DC 0029263C 90 05 00 04 */ stw r0, 4(r5)
+/* 802969E0 00292640 90 85 00 0C */ stw r4, 0xc(r5)
+/* 802969E4 00292644 91 05 00 08 */ stw r8, 8(r5)
+/* 802969E8 00292648 41 82 00 10 */ beq lbl_802969F8
+/* 802969EC 0029264C 80 88 00 0C */ lwz r4, 0xc(r8)
+/* 802969F0 00292650 90 A8 00 0C */ stw r5, 0xc(r8)
+/* 802969F4 00292654 48 00 00 0C */ b lbl_80296A00
+lbl_802969F8:
+/* 802969F8 00292658 80 83 00 00 */ lwz r4, 0(r3)
+/* 802969FC 0029265C 90 A3 00 00 */ stw r5, 0(r3)
+lbl_80296A00:
+/* 80296A00 00292660 2C 04 00 00 */ cmpwi r4, 0
+/* 80296A04 00292664 90 85 00 0C */ stw r4, 0xc(r5)
+/* 80296A08 00292668 41 82 00 0C */ beq lbl_80296A14
+/* 80296A0C 0029266C 90 A4 00 08 */ stw r5, 8(r4)
+/* 80296A10 00292670 48 00 00 08 */ b lbl_80296A18
+lbl_80296A14:
+/* 80296A14 00292674 90 A3 00 04 */ stw r5, 4(r3)
+lbl_80296A18:
+/* 80296A18 00292678 7C A8 2B 78 */ mr r8, r5
+lbl_80296A1C:
+/* 80296A1C 0029267C 7C 1E 30 50 */ subf r0, r30, r6
+/* 80296A20 00292680 28 00 00 14 */ cmplwi r0, 0x14
+/* 80296A24 00292684 40 80 00 0C */ bge lbl_80296A30
+/* 80296A28 00292688 7C DE 33 78 */ mr r30, r6
+/* 80296A2C 0029268C 48 00 00 5C */ b lbl_80296A88
+lbl_80296A30:
+/* 80296A30 00292690 38 80 46 52 */ li r4, 0x4652
+/* 80296A34 00292694 38 1E 00 10 */ addi r0, r30, 0x10
+/* 80296A38 00292698 B0 9E 00 00 */ sth r4, 0(r30)
+/* 80296A3C 0029269C 38 80 00 00 */ li r4, 0
+/* 80296A40 002926A0 7C 00 30 50 */ subf r0, r0, r6
+/* 80296A44 002926A4 2C 08 00 00 */ cmpwi r8, 0
+/* 80296A48 002926A8 B0 9E 00 02 */ sth r4, 2(r30)
+/* 80296A4C 002926AC 90 1E 00 04 */ stw r0, 4(r30)
+/* 80296A50 002926B0 90 9E 00 0C */ stw r4, 0xc(r30)
+/* 80296A54 002926B4 91 1E 00 08 */ stw r8, 8(r30)
+/* 80296A58 002926B8 41 82 00 10 */ beq lbl_80296A68
+/* 80296A5C 002926BC 80 88 00 0C */ lwz r4, 0xc(r8)
+/* 80296A60 002926C0 93 C8 00 0C */ stw r30, 0xc(r8)
+/* 80296A64 002926C4 48 00 00 0C */ b lbl_80296A70
+lbl_80296A68:
+/* 80296A68 002926C8 80 83 00 00 */ lwz r4, 0(r3)
+/* 80296A6C 002926CC 93 C3 00 00 */ stw r30, 0(r3)
+lbl_80296A70:
+/* 80296A70 002926D0 2C 04 00 00 */ cmpwi r4, 0
+/* 80296A74 002926D4 90 9E 00 0C */ stw r4, 0xc(r30)
+/* 80296A78 002926D8 41 82 00 0C */ beq lbl_80296A84
+/* 80296A7C 002926DC 93 C4 00 08 */ stw r30, 8(r4)
+/* 80296A80 002926E0 48 00 00 08 */ b lbl_80296A88
+lbl_80296A84:
+/* 80296A84 002926E4 93 C3 00 04 */ stw r30, 4(r3)
+lbl_80296A88:
+/* 80296A88 002926E8 80 03 FF FC */ lwz r0, -4(r3)
+/* 80296A8C 002926EC 7C BF F0 50 */ subf r5, r31, r30
+/* 80296A90 002926F0 54 00 07 FF */ clrlwi. r0, r0, 0x1f
+/* 80296A94 002926F4 41 82 00 10 */ beq lbl_80296AA4
+/* 80296A98 002926F8 7F E3 FB 78 */ mr r3, r31
+/* 80296A9C 002926FC 38 80 00 00 */ li r4, 0
+/* 80296AA0 00292700 4B D6 D6 65 */ bl memset
+lbl_80296AA4:
+/* 80296AA4 00292704 38 A0 00 00 */ li r5, 0
+/* 80296AA8 00292708 38 9D 00 10 */ addi r4, r29, 0x10
+/* 80296AAC 0029270C 7C A3 2B 78 */ mr r3, r5
+/* 80296AB0 00292710 38 C0 55 44 */ li r6, 0x5544
+/* 80296AB4 00292714 7C 84 F0 50 */ subf r4, r4, r30
+/* 80296AB8 00292718 7C 1F E8 50 */ subf r0, r31, r29
+/* 80296ABC 0029271C 53 83 7C 20 */ rlwimi r3, r28, 0xf, 0x10, 0x10
+/* 80296AC0 00292720 B0 DD 00 00 */ sth r6, 0(r29)
+/* 80296AC4 00292724 50 03 44 6E */ rlwimi r3, r0, 8, 0x11, 0x17
+/* 80296AC8 00292728 90 9D 00 04 */ stw r4, 4(r29)
+/* 80296ACC 0029272C 90 BD 00 08 */ stw r5, 8(r29)
+/* 80296AD0 00292730 90 BD 00 0C */ stw r5, 0xc(r29)
+/* 80296AD4 00292734 B0 7D 00 02 */ sth r3, 2(r29)
+/* 80296AD8 00292738 A0 1A 00 10 */ lhz r0, 0x10(r26)
+/* 80296ADC 0029273C 50 03 06 3E */ rlwimi r3, r0, 0, 0x18, 0x1f
+/* 80296AE0 00292740 B0 7D 00 02 */ sth r3, 2(r29)
+/* 80296AE4 00292744 80 9A 00 0C */ lwz r4, 0xc(r26)
+/* 80296AE8 00292748 2C 04 00 00 */ cmpwi r4, 0
+/* 80296AEC 0029274C 90 9D 00 08 */ stw r4, 8(r29)
+/* 80296AF0 00292750 41 82 00 10 */ beq lbl_80296B00
+/* 80296AF4 00292754 80 64 00 0C */ lwz r3, 0xc(r4)
+/* 80296AF8 00292758 93 A4 00 0C */ stw r29, 0xc(r4)
+/* 80296AFC 0029275C 48 00 00 0C */ b lbl_80296B08
+lbl_80296B00:
+/* 80296B00 00292760 80 7A 00 08 */ lwz r3, 8(r26)
+/* 80296B04 00292764 93 BA 00 08 */ stw r29, 8(r26)
+lbl_80296B08:
+/* 80296B08 00292768 2C 03 00 00 */ cmpwi r3, 0
+/* 80296B0C 0029276C 90 7D 00 0C */ stw r3, 0xc(r29)
+/* 80296B10 00292770 41 82 00 0C */ beq lbl_80296B1C
+/* 80296B14 00292774 93 A3 00 08 */ stw r29, 8(r3)
+/* 80296B18 00292778 48 00 00 08 */ b lbl_80296B20
+lbl_80296B1C:
+/* 80296B1C 0029277C 93 BA 00 0C */ stw r29, 0xc(r26)
+lbl_80296B20:
+/* 80296B20 00292780 39 61 00 20 */ addi r11, r1, 0x20
+/* 80296B24 00292784 7F 63 DB 78 */ mr r3, r27
+/* 80296B28 00292788 4B F3 06 49 */ bl _restgpr_26
+/* 80296B2C 0029278C 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 80296B30 00292790 7C 08 03 A6 */ mtlr r0
+/* 80296B34 00292794 38 21 00 20 */ addi r1, r1, 0x20
+/* 80296B38 00292798 4E 80 00 20 */ blr
+
+.global AllocFromHead_
+AllocFromHead_:
+/* 80296B3C 0029279C 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 80296B40 002927A0 7C 08 02 A6 */ mflr r0
+/* 80296B44 002927A4 38 63 00 3C */ addi r3, r3, 0x3c
+/* 80296B48 002927A8 7C 86 23 78 */ mr r6, r4
+/* 80296B4C 002927AC 90 01 00 24 */ stw r0, 0x24(r1)
+/* 80296B50 002927B0 38 05 FF FF */ addi r0, r5, -1
+/* 80296B54 002927B4 7C 08 00 F8 */ nor r8, r0, r0
+/* 80296B58 002927B8 39 80 00 00 */ li r12, 0
+/* 80296B5C 002927BC 93 E1 00 1C */ stw r31, 0x1c(r1)
+/* 80296B60 002927C0 3B E0 FF FF */ li r31, -1
+/* 80296B64 002927C4 93 C1 00 18 */ stw r30, 0x18(r1)
+/* 80296B68 002927C8 3B C0 00 00 */ li r30, 0
+/* 80296B6C 002927CC 93 A1 00 14 */ stw r29, 0x14(r1)
+/* 80296B70 002927D0 A0 E3 00 12 */ lhz r7, 0x12(r3)
+/* 80296B74 002927D4 81 63 00 00 */ lwz r11, 0(r3)
+/* 80296B78 002927D8 54 E0 07 FE */ clrlwi r0, r7, 0x1f
+/* 80296B7C 002927DC 7C 00 00 34 */ cntlzw r0, r0
+/* 80296B80 002927E0 54 0A D9 7E */ srwi r10, r0, 5
+/* 80296B84 002927E4 48 00 00 50 */ b lbl_80296BD4
+lbl_80296B88:
+/* 80296B88 002927E8 3B AB 00 10 */ addi r29, r11, 0x10
+/* 80296B8C 002927EC 81 2B 00 04 */ lwz r9, 4(r11)
+/* 80296B90 002927F0 7C E5 EA 14 */ add r7, r5, r29
+/* 80296B94 002927F4 38 07 FF FF */ addi r0, r7, -1
+/* 80296B98 002927F8 7D 07 00 38 */ and r7, r8, r0
+/* 80296B9C 002927FC 7C 1D 38 50 */ subf r0, r29, r7
+/* 80296BA0 00292800 7C 04 02 14 */ add r0, r4, r0
+/* 80296BA4 00292804 7C 09 00 40 */ cmplw r9, r0
+/* 80296BA8 00292808 41 80 00 28 */ blt lbl_80296BD0
+/* 80296BAC 0029280C 7C 1F 48 40 */ cmplw r31, r9
+/* 80296BB0 00292810 40 81 00 20 */ ble lbl_80296BD0
+/* 80296BB4 00292814 2C 0A 00 00 */ cmpwi r10, 0
+/* 80296BB8 00292818 7D 6C 5B 78 */ mr r12, r11
+/* 80296BBC 0029281C 7D 3F 4B 78 */ mr r31, r9
+/* 80296BC0 00292820 7C FE 3B 78 */ mr r30, r7
+/* 80296BC4 00292824 40 82 00 18 */ bne lbl_80296BDC
+/* 80296BC8 00292828 7C 09 20 40 */ cmplw r9, r4
+/* 80296BCC 0029282C 41 82 00 10 */ beq lbl_80296BDC
+lbl_80296BD0:
+/* 80296BD0 00292830 81 6B 00 0C */ lwz r11, 0xc(r11)
+lbl_80296BD4:
+/* 80296BD4 00292834 2C 0B 00 00 */ cmpwi r11, 0
+/* 80296BD8 00292838 40 82 FF B0 */ bne lbl_80296B88
+lbl_80296BDC:
+/* 80296BDC 0029283C 2C 0C 00 00 */ cmpwi r12, 0
+/* 80296BE0 00292840 41 82 00 18 */ beq lbl_80296BF8
+/* 80296BE4 00292844 7D 84 63 78 */ mr r4, r12
+/* 80296BE8 00292848 7F C5 F3 78 */ mr r5, r30
+/* 80296BEC 0029284C 38 E0 00 00 */ li r7, 0
+/* 80296BF0 00292850 4B FF FD 49 */ bl AllocUsedBlockFromFreeBlock_
+/* 80296BF4 00292854 48 00 00 08 */ b lbl_80296BFC
+lbl_80296BF8:
+/* 80296BF8 00292858 38 60 00 00 */ li r3, 0
+lbl_80296BFC:
+/* 80296BFC 0029285C 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 80296C00 00292860 83 E1 00 1C */ lwz r31, 0x1c(r1)
+/* 80296C04 00292864 83 C1 00 18 */ lwz r30, 0x18(r1)
+/* 80296C08 00292868 83 A1 00 14 */ lwz r29, 0x14(r1)
+/* 80296C0C 0029286C 7C 08 03 A6 */ mtlr r0
+/* 80296C10 00292870 38 21 00 20 */ addi r1, r1, 0x20
+/* 80296C14 00292874 4E 80 00 20 */ blr
+
+.global AllocFromTail_
+AllocFromTail_:
+/* 80296C18 00292878 94 21 FF F0 */ stwu r1, -0x10(r1)
+/* 80296C1C 0029287C 7C 08 02 A6 */ mflr r0
+/* 80296C20 00292880 38 63 00 3C */ addi r3, r3, 0x3c
+/* 80296C24 00292884 7C 86 23 78 */ mr r6, r4
+/* 80296C28 00292888 90 01 00 14 */ stw r0, 0x14(r1)
+/* 80296C2C 0029288C 38 05 FF FF */ addi r0, r5, -1
+/* 80296C30 00292890 7C 07 00 F8 */ nor r7, r0, r0
+/* 80296C34 00292894 39 60 00 00 */ li r11, 0
+/* 80296C38 00292898 93 E1 00 0C */ stw r31, 0xc(r1)
+/* 80296C3C 0029289C 39 80 FF FF */ li r12, -1
+/* 80296C40 002928A0 93 C1 00 08 */ stw r30, 8(r1)
+/* 80296C44 002928A4 A0 A3 00 12 */ lhz r5, 0x12(r3)
+/* 80296C48 002928A8 81 43 00 04 */ lwz r10, 4(r3)
+/* 80296C4C 002928AC 54 A0 07 FE */ clrlwi r0, r5, 0x1f
+/* 80296C50 002928B0 38 A0 00 00 */ li r5, 0
+/* 80296C54 002928B4 7C 00 00 34 */ cntlzw r0, r0
+/* 80296C58 002928B8 54 09 D9 7E */ srwi r9, r0, 5
+/* 80296C5C 002928BC 48 00 00 48 */ b lbl_80296CA4
+lbl_80296C60:
+/* 80296C60 002928C0 81 0A 00 04 */ lwz r8, 4(r10)
+/* 80296C64 002928C4 3B EA 00 10 */ addi r31, r10, 0x10
+/* 80296C68 002928C8 7C 08 FA 14 */ add r0, r8, r31
+/* 80296C6C 002928CC 7C 04 00 50 */ subf r0, r4, r0
+/* 80296C70 002928D0 7C FE 00 38 */ and r30, r7, r0
+/* 80296C74 002928D4 7C 1F F0 51 */ subf. r0, r31, r30
+/* 80296C78 002928D8 41 80 00 28 */ blt lbl_80296CA0
+/* 80296C7C 002928DC 7C 0C 40 40 */ cmplw r12, r8
+/* 80296C80 002928E0 40 81 00 20 */ ble lbl_80296CA0
+/* 80296C84 002928E4 2C 09 00 00 */ cmpwi r9, 0
+/* 80296C88 002928E8 7D 4B 53 78 */ mr r11, r10
+/* 80296C8C 002928EC 7D 0C 43 78 */ mr r12, r8
+/* 80296C90 002928F0 7F C5 F3 78 */ mr r5, r30
+/* 80296C94 002928F4 40 82 00 18 */ bne lbl_80296CAC
+/* 80296C98 002928F8 7C 08 20 40 */ cmplw r8, r4
+/* 80296C9C 002928FC 41 82 00 10 */ beq lbl_80296CAC
+lbl_80296CA0:
+/* 80296CA0 00292900 81 4A 00 08 */ lwz r10, 8(r10)
+lbl_80296CA4:
+/* 80296CA4 00292904 2C 0A 00 00 */ cmpwi r10, 0
+/* 80296CA8 00292908 40 82 FF B8 */ bne lbl_80296C60
+lbl_80296CAC:
+/* 80296CAC 0029290C 2C 0B 00 00 */ cmpwi r11, 0
+/* 80296CB0 00292910 41 82 00 14 */ beq lbl_80296CC4
+/* 80296CB4 00292914 7D 64 5B 78 */ mr r4, r11
+/* 80296CB8 00292918 38 E0 00 01 */ li r7, 1
+/* 80296CBC 0029291C 4B FF FC 7D */ bl AllocUsedBlockFromFreeBlock_
+/* 80296CC0 00292920 48 00 00 08 */ b lbl_80296CC8
+lbl_80296CC4:
+/* 80296CC4 00292924 38 60 00 00 */ li r3, 0
+lbl_80296CC8:
+/* 80296CC8 00292928 80 01 00 14 */ lwz r0, 0x14(r1)
+/* 80296CCC 0029292C 83 E1 00 0C */ lwz r31, 0xc(r1)
+/* 80296CD0 00292930 83 C1 00 08 */ lwz r30, 8(r1)
+/* 80296CD4 00292934 7C 08 03 A6 */ mtlr r0
+/* 80296CD8 00292938 38 21 00 10 */ addi r1, r1, 0x10
+/* 80296CDC 0029293C 4E 80 00 20 */ blr
+
+.global RecycleRegion_
+RecycleRegion_:
+/* 80296CE0 00292940 94 21 FF F0 */ stwu r1, -0x10(r1)
+/* 80296CE4 00292944 39 00 00 00 */ li r8, 0
+/* 80296CE8 00292948 80 A4 00 00 */ lwz r5, 0(r4)
+/* 80296CEC 0029294C 80 04 00 04 */ lwz r0, 4(r4)
+/* 80296CF0 00292950 90 A1 00 08 */ stw r5, 8(r1)
+/* 80296CF4 00292954 80 C3 00 00 */ lwz r6, 0(r3)
+/* 80296CF8 00292958 90 01 00 0C */ stw r0, 0xc(r1)
+/* 80296CFC 0029295C 48 00 00 6C */ b lbl_80296D68
+lbl_80296D00:
+/* 80296D00 00292960 80 04 00 00 */ lwz r0, 0(r4)
+/* 80296D04 00292964 7C 06 00 40 */ cmplw r6, r0
+/* 80296D08 00292968 40 80 00 0C */ bge lbl_80296D14
+/* 80296D0C 0029296C 7C C8 33 78 */ mr r8, r6
+/* 80296D10 00292970 48 00 00 54 */ b lbl_80296D64
+lbl_80296D14:
+/* 80296D14 00292974 80 04 00 04 */ lwz r0, 4(r4)
+/* 80296D18 00292978 7C 06 00 40 */ cmplw r6, r0
+/* 80296D1C 0029297C 40 82 00 54 */ bne lbl_80296D70
+/* 80296D20 00292980 80 06 00 04 */ lwz r0, 4(r6)
+/* 80296D24 00292984 80 E6 00 08 */ lwz r7, 8(r6)
+/* 80296D28 00292988 7C A6 02 14 */ add r5, r6, r0
+/* 80296D2C 0029298C 80 C6 00 0C */ lwz r6, 0xc(r6)
+/* 80296D30 00292990 38 05 00 10 */ addi r0, r5, 0x10
+/* 80296D34 00292994 2C 07 00 00 */ cmpwi r7, 0
+/* 80296D38 00292998 90 01 00 0C */ stw r0, 0xc(r1)
+/* 80296D3C 0029299C 41 82 00 0C */ beq lbl_80296D48
+/* 80296D40 002929A0 90 C7 00 0C */ stw r6, 0xc(r7)
+/* 80296D44 002929A4 48 00 00 08 */ b lbl_80296D4C
+lbl_80296D48:
+/* 80296D48 002929A8 90 C3 00 00 */ stw r6, 0(r3)
+lbl_80296D4C:
+/* 80296D4C 002929AC 2C 06 00 00 */ cmpwi r6, 0
+/* 80296D50 002929B0 41 82 00 0C */ beq lbl_80296D5C
+/* 80296D54 002929B4 90 E6 00 08 */ stw r7, 8(r6)
+/* 80296D58 002929B8 48 00 00 18 */ b lbl_80296D70
+lbl_80296D5C:
+/* 80296D5C 002929BC 90 E3 00 04 */ stw r7, 4(r3)
+/* 80296D60 002929C0 48 00 00 10 */ b lbl_80296D70
+lbl_80296D64:
+/* 80296D64 002929C4 80 C6 00 0C */ lwz r6, 0xc(r6)
+lbl_80296D68:
+/* 80296D68 002929C8 2C 06 00 00 */ cmpwi r6, 0
+/* 80296D6C 002929CC 40 82 FF 94 */ bne lbl_80296D00
+lbl_80296D70:
+/* 80296D70 002929D0 2C 08 00 00 */ cmpwi r8, 0
+/* 80296D74 002929D4 41 82 00 54 */ beq lbl_80296DC8
+/* 80296D78 002929D8 80 A8 00 04 */ lwz r5, 4(r8)
+/* 80296D7C 002929DC 80 04 00 00 */ lwz r0, 0(r4)
+/* 80296D80 002929E0 7C 88 2A 14 */ add r4, r8, r5
+/* 80296D84 002929E4 38 84 00 10 */ addi r4, r4, 0x10
+/* 80296D88 002929E8 7C 04 00 40 */ cmplw r4, r0
+/* 80296D8C 002929EC 40 82 00 3C */ bne lbl_80296DC8
+/* 80296D90 002929F0 80 A8 00 08 */ lwz r5, 8(r8)
+/* 80296D94 002929F4 91 01 00 08 */ stw r8, 8(r1)
+/* 80296D98 002929F8 2C 05 00 00 */ cmpwi r5, 0
+/* 80296D9C 002929FC 80 88 00 0C */ lwz r4, 0xc(r8)
+/* 80296DA0 00292A00 41 82 00 0C */ beq lbl_80296DAC
+/* 80296DA4 00292A04 90 85 00 0C */ stw r4, 0xc(r5)
+/* 80296DA8 00292A08 48 00 00 08 */ b lbl_80296DB0
+lbl_80296DAC:
+/* 80296DAC 00292A0C 90 83 00 00 */ stw r4, 0(r3)
+lbl_80296DB0:
+/* 80296DB0 00292A10 2C 04 00 00 */ cmpwi r4, 0
+/* 80296DB4 00292A14 41 82 00 0C */ beq lbl_80296DC0
+/* 80296DB8 00292A18 90 A4 00 08 */ stw r5, 8(r4)
+/* 80296DBC 00292A1C 48 00 00 08 */ b lbl_80296DC4
+lbl_80296DC0:
+/* 80296DC0 00292A20 90 A3 00 04 */ stw r5, 4(r3)
+lbl_80296DC4:
+/* 80296DC4 00292A24 7C A8 2B 78 */ mr r8, r5
+lbl_80296DC8:
+/* 80296DC8 00292A28 80 C1 00 0C */ lwz r6, 0xc(r1)
+/* 80296DCC 00292A2C 80 A1 00 08 */ lwz r5, 8(r1)
+/* 80296DD0 00292A30 7C 05 30 50 */ subf r0, r5, r6
+/* 80296DD4 00292A34 28 00 00 10 */ cmplwi r0, 0x10
+/* 80296DD8 00292A38 40 80 00 0C */ bge lbl_80296DE4
+/* 80296DDC 00292A3C 38 60 00 00 */ li r3, 0
+/* 80296DE0 00292A40 48 00 00 60 */ b lbl_80296E40
+lbl_80296DE4:
+/* 80296DE4 00292A44 38 80 46 52 */ li r4, 0x4652
+/* 80296DE8 00292A48 38 05 00 10 */ addi r0, r5, 0x10
+/* 80296DEC 00292A4C B0 85 00 00 */ sth r4, 0(r5)
+/* 80296DF0 00292A50 38 80 00 00 */ li r4, 0
+/* 80296DF4 00292A54 7C 00 30 50 */ subf r0, r0, r6
+/* 80296DF8 00292A58 2C 08 00 00 */ cmpwi r8, 0
+/* 80296DFC 00292A5C B0 85 00 02 */ sth r4, 2(r5)
+/* 80296E00 00292A60 90 05 00 04 */ stw r0, 4(r5)
+/* 80296E04 00292A64 90 85 00 0C */ stw r4, 0xc(r5)
+/* 80296E08 00292A68 91 05 00 08 */ stw r8, 8(r5)
+/* 80296E0C 00292A6C 41 82 00 10 */ beq lbl_80296E1C
+/* 80296E10 00292A70 80 88 00 0C */ lwz r4, 0xc(r8)
+/* 80296E14 00292A74 90 A8 00 0C */ stw r5, 0xc(r8)
+/* 80296E18 00292A78 48 00 00 0C */ b lbl_80296E24
+lbl_80296E1C:
+/* 80296E1C 00292A7C 80 83 00 00 */ lwz r4, 0(r3)
+/* 80296E20 00292A80 90 A3 00 00 */ stw r5, 0(r3)
+lbl_80296E24:
+/* 80296E24 00292A84 2C 04 00 00 */ cmpwi r4, 0
+/* 80296E28 00292A88 90 85 00 0C */ stw r4, 0xc(r5)
+/* 80296E2C 00292A8C 41 82 00 0C */ beq lbl_80296E38
+/* 80296E30 00292A90 90 A4 00 08 */ stw r5, 8(r4)
+/* 80296E34 00292A94 48 00 00 08 */ b lbl_80296E3C
+lbl_80296E38:
+/* 80296E38 00292A98 90 A3 00 04 */ stw r5, 4(r3)
+lbl_80296E3C:
+/* 80296E3C 00292A9C 38 60 00 01 */ li r3, 1
+lbl_80296E40:
+/* 80296E40 00292AA0 38 21 00 10 */ addi r1, r1, 0x10
+/* 80296E44 00292AA4 4E 80 00 20 */ blr
+
+.global MEMCreateExpHeapEx
+MEMCreateExpHeapEx:
+/* 80296E48 00292AA8 94 21 FF F0 */ stwu r1, -0x10(r1)
+/* 80296E4C 00292AAC 7C 08 02 A6 */ mflr r0
+/* 80296E50 00292AB0 7C 84 1A 14 */ add r4, r4, r3
+/* 80296E54 00292AB4 90 01 00 14 */ stw r0, 0x14(r1)
+/* 80296E58 00292AB8 38 03 00 03 */ addi r0, r3, 3
+/* 80296E5C 00292ABC 54 86 00 3A */ rlwinm r6, r4, 0, 0, 0x1d
+/* 80296E60 00292AC0 93 E1 00 0C */ stw r31, 0xc(r1)
+/* 80296E64 00292AC4 54 1F 00 3A */ rlwinm r31, r0, 0, 0, 0x1d
+/* 80296E68 00292AC8 7C 1F 30 40 */ cmplw r31, r6
+/* 80296E6C 00292ACC 41 81 00 10 */ bgt lbl_80296E7C
+/* 80296E70 00292AD0 7C 1F 30 50 */ subf r0, r31, r6
+/* 80296E74 00292AD4 28 00 00 64 */ cmplwi r0, 0x64
+/* 80296E78 00292AD8 40 80 00 0C */ bge lbl_80296E84
+lbl_80296E7C:
+/* 80296E7C 00292ADC 38 60 00 00 */ li r3, 0
+/* 80296E80 00292AE0 48 00 00 64 */ b lbl_80296EE4
+lbl_80296E84:
+/* 80296E84 00292AE4 3C 80 45 58 */ lis r4, 0x45585048@ha
+/* 80296E88 00292AE8 7C A7 2B 78 */ mr r7, r5
+/* 80296E8C 00292AEC 7F E3 FB 78 */ mr r3, r31
+/* 80296E90 00292AF0 38 BF 00 50 */ addi r5, r31, 0x50
+/* 80296E94 00292AF4 38 84 50 48 */ addi r4, r4, 0x45585048@l
+/* 80296E98 00292AF8 4B FF F7 75 */ bl MEMiInitHeapHead
+/* 80296E9C 00292AFC 38 A0 00 00 */ li r5, 0
+/* 80296EA0 00292B00 38 80 46 52 */ li r4, 0x4652
+/* 80296EA4 00292B04 B0 BF 00 4C */ sth r5, 0x4c(r31)
+/* 80296EA8 00292B08 7F E3 FB 78 */ mr r3, r31
+/* 80296EAC 00292B0C B0 BF 00 4E */ sth r5, 0x4e(r31)
+/* 80296EB0 00292B10 80 DF 00 18 */ lwz r6, 0x18(r31)
+/* 80296EB4 00292B14 80 FF 00 1C */ lwz r7, 0x1c(r31)
+/* 80296EB8 00292B18 38 06 00 10 */ addi r0, r6, 0x10
+/* 80296EBC 00292B1C B0 86 00 00 */ sth r4, 0(r6)
+/* 80296EC0 00292B20 7C 00 38 50 */ subf r0, r0, r7
+/* 80296EC4 00292B24 B0 A6 00 02 */ sth r5, 2(r6)
+/* 80296EC8 00292B28 90 06 00 04 */ stw r0, 4(r6)
+/* 80296ECC 00292B2C 90 A6 00 08 */ stw r5, 8(r6)
+/* 80296ED0 00292B30 90 A6 00 0C */ stw r5, 0xc(r6)
+/* 80296ED4 00292B34 90 DF 00 3C */ stw r6, 0x3c(r31)
+/* 80296ED8 00292B38 90 DF 00 40 */ stw r6, 0x40(r31)
+/* 80296EDC 00292B3C 90 BF 00 44 */ stw r5, 0x44(r31)
+/* 80296EE0 00292B40 90 BF 00 48 */ stw r5, 0x48(r31)
+lbl_80296EE4:
+/* 80296EE4 00292B44 80 01 00 14 */ lwz r0, 0x14(r1)
+/* 80296EE8 00292B48 83 E1 00 0C */ lwz r31, 0xc(r1)
+/* 80296EEC 00292B4C 7C 08 03 A6 */ mtlr r0
+/* 80296EF0 00292B50 38 21 00 10 */ addi r1, r1, 0x10
+/* 80296EF4 00292B54 4E 80 00 20 */ blr
+
+.global MEMDestroyExpHeap
+MEMDestroyExpHeap:
+/* 80296EF8 00292B58 94 21 FF F0 */ stwu r1, -0x10(r1)
+/* 80296EFC 00292B5C 7C 08 02 A6 */ mflr r0
+/* 80296F00 00292B60 90 01 00 14 */ stw r0, 0x14(r1)
+/* 80296F04 00292B64 93 E1 00 0C */ stw r31, 0xc(r1)
+/* 80296F08 00292B68 7C 7F 1B 78 */ mr r31, r3
+/* 80296F0C 00292B6C 4B FF F8 C1 */ bl MEMiFinalizeHeap
+/* 80296F10 00292B70 7F E3 FB 78 */ mr r3, r31
+/* 80296F14 00292B74 83 E1 00 0C */ lwz r31, 0xc(r1)
+/* 80296F18 00292B78 80 01 00 14 */ lwz r0, 0x14(r1)
+/* 80296F1C 00292B7C 7C 08 03 A6 */ mtlr r0
+/* 80296F20 00292B80 38 21 00 10 */ addi r1, r1, 0x10
+/* 80296F24 00292B84 4E 80 00 20 */ blr
+
+.global MEMAllocFromExpHeapEx
+MEMAllocFromExpHeapEx:
+/* 80296F28 00292B88 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 80296F2C 00292B8C 7C 08 02 A6 */ mflr r0
+/* 80296F30 00292B90 2C 04 00 00 */ cmpwi r4, 0
+/* 80296F34 00292B94 90 01 00 24 */ stw r0, 0x24(r1)
+/* 80296F38 00292B98 93 E1 00 1C */ stw r31, 0x1c(r1)
+/* 80296F3C 00292B9C 7C BF 2B 78 */ mr r31, r5
+/* 80296F40 00292BA0 93 C1 00 18 */ stw r30, 0x18(r1)
+/* 80296F44 00292BA4 7C 9E 23 78 */ mr r30, r4
+/* 80296F48 00292BA8 93 A1 00 14 */ stw r29, 0x14(r1)
+/* 80296F4C 00292BAC 7C 7D 1B 78 */ mr r29, r3
+/* 80296F50 00292BB0 40 82 00 08 */ bne lbl_80296F58
+/* 80296F54 00292BB4 3B C0 00 01 */ li r30, 1
+lbl_80296F58:
+/* 80296F58 00292BB8 80 03 00 38 */ lwz r0, 0x38(r3)
+/* 80296F5C 00292BBC 38 9E 00 03 */ addi r4, r30, 3
+/* 80296F60 00292BC0 54 9E 00 3A */ rlwinm r30, r4, 0, 0, 0x1d
+/* 80296F64 00292BC4 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 80296F68 00292BC8 41 82 00 0C */ beq lbl_80296F74
+/* 80296F6C 00292BCC 38 63 00 20 */ addi r3, r3, 0x20
+/* 80296F70 00292BD0 4B FD 89 D9 */ bl OSLockMutex
+lbl_80296F74:
+/* 80296F74 00292BD4 2C 1F 00 00 */ cmpwi r31, 0
+/* 80296F78 00292BD8 41 80 00 18 */ blt lbl_80296F90
+/* 80296F7C 00292BDC 7F A3 EB 78 */ mr r3, r29
+/* 80296F80 00292BE0 7F C4 F3 78 */ mr r4, r30
+/* 80296F84 00292BE4 7F E5 FB 78 */ mr r5, r31
+/* 80296F88 00292BE8 4B FF FB B5 */ bl AllocFromHead_
+/* 80296F8C 00292BEC 48 00 00 14 */ b lbl_80296FA0
+lbl_80296F90:
+/* 80296F90 00292BF0 7F A3 EB 78 */ mr r3, r29
+/* 80296F94 00292BF4 7F C4 F3 78 */ mr r4, r30
+/* 80296F98 00292BF8 7C BF 00 D0 */ neg r5, r31
+/* 80296F9C 00292BFC 4B FF FC 7D */ bl AllocFromTail_
+lbl_80296FA0:
+/* 80296FA0 00292C00 80 1D 00 38 */ lwz r0, 0x38(r29)
+/* 80296FA4 00292C04 7C 7F 1B 78 */ mr r31, r3
+/* 80296FA8 00292C08 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 80296FAC 00292C0C 41 82 00 0C */ beq lbl_80296FB8
+/* 80296FB0 00292C10 38 7D 00 20 */ addi r3, r29, 0x20
+/* 80296FB4 00292C14 4B FD 8A 71 */ bl OSUnlockMutex
+lbl_80296FB8:
+/* 80296FB8 00292C18 7F E3 FB 78 */ mr r3, r31
+/* 80296FBC 00292C1C 83 E1 00 1C */ lwz r31, 0x1c(r1)
+/* 80296FC0 00292C20 83 C1 00 18 */ lwz r30, 0x18(r1)
+/* 80296FC4 00292C24 83 A1 00 14 */ lwz r29, 0x14(r1)
+/* 80296FC8 00292C28 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 80296FCC 00292C2C 7C 08 03 A6 */ mtlr r0
+/* 80296FD0 00292C30 38 21 00 20 */ addi r1, r1, 0x20
+/* 80296FD4 00292C34 4E 80 00 20 */ blr
+
+.global MEMResizeForMBlockExpHeap
+MEMResizeForMBlockExpHeap:
+/* 80296FD8 00292C38 94 21 FF D0 */ stwu r1, -0x30(r1)
+/* 80296FDC 00292C3C 7C 08 02 A6 */ mflr r0
+/* 80296FE0 00292C40 90 01 00 34 */ stw r0, 0x34(r1)
+/* 80296FE4 00292C44 39 61 00 30 */ addi r11, r1, 0x30
+/* 80296FE8 00292C48 4B F3 01 3D */ bl _savegpr_26
+/* 80296FEC 00292C4C 38 A5 00 03 */ addi r5, r5, 3
+/* 80296FF0 00292C50 80 04 FF F4 */ lwz r0, -0xc(r4)
+/* 80296FF4 00292C54 54 BD 00 3A */ rlwinm r29, r5, 0, 0, 0x1d
+/* 80296FF8 00292C58 3B C4 FF F0 */ addi r30, r4, -16
+/* 80296FFC 00292C5C 7C 1D 00 40 */ cmplw r29, r0
+/* 80297000 00292C60 7C 7B 1B 78 */ mr r27, r3
+/* 80297004 00292C64 7C 9C 23 78 */ mr r28, r4
+/* 80297008 00292C68 3B E3 00 3C */ addi r31, r3, 0x3c
+/* 8029700C 00292C6C 40 82 00 0C */ bne lbl_80297018
+/* 80297010 00292C70 7F A3 EB 78 */ mr r3, r29
+/* 80297014 00292C74 48 00 01 98 */ b lbl_802971AC
+lbl_80297018:
+/* 80297018 00292C78 80 03 00 38 */ lwz r0, 0x38(r3)
+/* 8029701C 00292C7C 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 80297020 00292C80 41 82 00 0C */ beq lbl_8029702C
+/* 80297024 00292C84 38 63 00 20 */ addi r3, r3, 0x20
+/* 80297028 00292C88 4B FD 89 21 */ bl OSLockMutex
+lbl_8029702C:
+/* 8029702C 00292C8C 83 5E 00 04 */ lwz r26, 4(r30)
+/* 80297030 00292C90 7C 1D D0 40 */ cmplw r29, r26
+/* 80297034 00292C94 40 81 01 2C */ ble lbl_80297160
+/* 80297038 00292C98 7C 7E D2 14 */ add r3, r30, r26
+/* 8029703C 00292C9C 80 FF 00 00 */ lwz r7, 0(r31)
+/* 80297040 00292CA0 38 03 00 10 */ addi r0, r3, 0x10
+/* 80297044 00292CA4 48 00 00 10 */ b lbl_80297054
+lbl_80297048:
+/* 80297048 00292CA8 7C 07 00 40 */ cmplw r7, r0
+/* 8029704C 00292CAC 41 82 00 10 */ beq lbl_8029705C
+/* 80297050 00292CB0 80 E7 00 0C */ lwz r7, 0xc(r7)
+lbl_80297054:
+/* 80297054 00292CB4 2C 07 00 00 */ cmpwi r7, 0
+/* 80297058 00292CB8 40 82 FF F0 */ bne lbl_80297048
+lbl_8029705C:
+/* 8029705C 00292CBC 2C 07 00 00 */ cmpwi r7, 0
+/* 80297060 00292CC0 41 82 00 18 */ beq lbl_80297078
+/* 80297064 00292CC4 80 87 00 04 */ lwz r4, 4(r7)
+/* 80297068 00292CC8 7C 7A 22 14 */ add r3, r26, r4
+/* 8029706C 00292CCC 38 03 00 10 */ addi r0, r3, 0x10
+/* 80297070 00292CD0 7C 1D 00 40 */ cmplw r29, r0
+/* 80297074 00292CD4 40 81 00 0C */ ble lbl_80297080
+lbl_80297078:
+/* 80297078 00292CD8 38 60 00 00 */ li r3, 0
+/* 8029707C 00292CDC 48 00 01 30 */ b lbl_802971AC
+lbl_80297080:
+/* 80297080 00292CE0 80 A7 00 08 */ lwz r5, 8(r7)
+/* 80297084 00292CE4 7C 67 22 14 */ add r3, r7, r4
+/* 80297088 00292CE8 A0 07 00 02 */ lhz r0, 2(r7)
+/* 8029708C 00292CEC 38 C3 00 10 */ addi r6, r3, 0x10
+/* 80297090 00292CF0 2C 05 00 00 */ cmpwi r5, 0
+/* 80297094 00292CF4 80 87 00 0C */ lwz r4, 0xc(r7)
+/* 80297098 00292CF8 54 00 C6 7E */ rlwinm r0, r0, 0x18, 0x19, 0x1f
+/* 8029709C 00292CFC 7C 60 38 50 */ subf r3, r0, r7
+/* 802970A0 00292D00 41 82 00 0C */ beq lbl_802970AC
+/* 802970A4 00292D04 90 85 00 0C */ stw r4, 0xc(r5)
+/* 802970A8 00292D08 48 00 00 08 */ b lbl_802970B0
+lbl_802970AC:
+/* 802970AC 00292D0C 90 9F 00 00 */ stw r4, 0(r31)
+lbl_802970B0:
+/* 802970B0 00292D10 2C 04 00 00 */ cmpwi r4, 0
+/* 802970B4 00292D14 41 82 00 0C */ beq lbl_802970C0
+/* 802970B8 00292D18 90 A4 00 08 */ stw r5, 8(r4)
+/* 802970BC 00292D1C 48 00 00 08 */ b lbl_802970C4
+lbl_802970C0:
+/* 802970C0 00292D20 90 BF 00 04 */ stw r5, 4(r31)
+lbl_802970C4:
+/* 802970C4 00292D24 7C FD E2 14 */ add r7, r29, r28
+/* 802970C8 00292D28 7C 07 30 50 */ subf r0, r7, r6
+/* 802970CC 00292D2C 28 00 00 10 */ cmplwi r0, 0x10
+/* 802970D0 00292D30 40 80 00 08 */ bge lbl_802970D8
+/* 802970D4 00292D34 7C C7 33 78 */ mr r7, r6
+lbl_802970D8:
+/* 802970D8 00292D38 7C 07 30 50 */ subf r0, r7, r6
+/* 802970DC 00292D3C 7C 9C 38 50 */ subf r4, r28, r7
+/* 802970E0 00292D40 28 00 00 10 */ cmplwi r0, 0x10
+/* 802970E4 00292D44 90 9E 00 04 */ stw r4, 4(r30)
+/* 802970E8 00292D48 41 80 00 5C */ blt lbl_80297144
+/* 802970EC 00292D4C 38 80 46 52 */ li r4, 0x4652
+/* 802970F0 00292D50 38 07 00 10 */ addi r0, r7, 0x10
+/* 802970F4 00292D54 B0 87 00 00 */ sth r4, 0(r7)
+/* 802970F8 00292D58 38 80 00 00 */ li r4, 0
+/* 802970FC 00292D5C 7C 00 30 50 */ subf r0, r0, r6
+/* 80297100 00292D60 2C 05 00 00 */ cmpwi r5, 0
+/* 80297104 00292D64 B0 87 00 02 */ sth r4, 2(r7)
+/* 80297108 00292D68 90 07 00 04 */ stw r0, 4(r7)
+/* 8029710C 00292D6C 90 87 00 0C */ stw r4, 0xc(r7)
+/* 80297110 00292D70 90 A7 00 08 */ stw r5, 8(r7)
+/* 80297114 00292D74 41 82 00 10 */ beq lbl_80297124
+/* 80297118 00292D78 80 85 00 0C */ lwz r4, 0xc(r5)
+/* 8029711C 00292D7C 90 E5 00 0C */ stw r7, 0xc(r5)
+/* 80297120 00292D80 48 00 00 0C */ b lbl_8029712C
+lbl_80297124:
+/* 80297124 00292D84 80 9F 00 00 */ lwz r4, 0(r31)
+/* 80297128 00292D88 90 FF 00 00 */ stw r7, 0(r31)
+lbl_8029712C:
+/* 8029712C 00292D8C 2C 04 00 00 */ cmpwi r4, 0
+/* 80297130 00292D90 90 87 00 0C */ stw r4, 0xc(r7)
+/* 80297134 00292D94 41 82 00 0C */ beq lbl_80297140
+/* 80297138 00292D98 90 E4 00 08 */ stw r7, 8(r4)
+/* 8029713C 00292D9C 48 00 00 08 */ b lbl_80297144
+lbl_80297140:
+/* 80297140 00292DA0 90 FF 00 04 */ stw r7, 4(r31)
+lbl_80297144:
+/* 80297144 00292DA4 80 1B 00 38 */ lwz r0, 0x38(r27)
+/* 80297148 00292DA8 7C A3 38 50 */ subf r5, r3, r7
+/* 8029714C 00292DAC 54 00 07 FF */ clrlwi. r0, r0, 0x1f
+/* 80297150 00292DB0 41 82 00 44 */ beq lbl_80297194
+/* 80297154 00292DB4 38 80 00 00 */ li r4, 0
+/* 80297158 00292DB8 4B D6 CF AD */ bl memset
+/* 8029715C 00292DBC 48 00 00 38 */ b lbl_80297194
+lbl_80297160:
+/* 80297160 00292DC0 7C 1D E2 14 */ add r0, r29, r28
+/* 80297164 00292DC4 7F E3 FB 78 */ mr r3, r31
+/* 80297168 00292DC8 90 01 00 08 */ stw r0, 8(r1)
+/* 8029716C 00292DCC 38 81 00 08 */ addi r4, r1, 8
+/* 80297170 00292DD0 80 1E 00 04 */ lwz r0, 4(r30)
+/* 80297174 00292DD4 7C BE 02 14 */ add r5, r30, r0
+/* 80297178 00292DD8 38 05 00 10 */ addi r0, r5, 0x10
+/* 8029717C 00292DDC 90 01 00 0C */ stw r0, 0xc(r1)
+/* 80297180 00292DE0 93 BE 00 04 */ stw r29, 4(r30)
+/* 80297184 00292DE4 4B FF FB 5D */ bl RecycleRegion_
+/* 80297188 00292DE8 2C 03 00 00 */ cmpwi r3, 0
+/* 8029718C 00292DEC 40 82 00 08 */ bne lbl_80297194
+/* 80297190 00292DF0 93 5E 00 04 */ stw r26, 4(r30)
+lbl_80297194:
+/* 80297194 00292DF4 80 1B 00 38 */ lwz r0, 0x38(r27)
+/* 80297198 00292DF8 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 8029719C 00292DFC 41 82 00 0C */ beq lbl_802971A8
+/* 802971A0 00292E00 38 7B 00 20 */ addi r3, r27, 0x20
+/* 802971A4 00292E04 4B FD 88 81 */ bl OSUnlockMutex
+lbl_802971A8:
+/* 802971A8 00292E08 80 7E 00 04 */ lwz r3, 4(r30)
+lbl_802971AC:
+/* 802971AC 00292E0C 39 61 00 30 */ addi r11, r1, 0x30
+/* 802971B0 00292E10 4B F2 FF C1 */ bl _restgpr_26
+/* 802971B4 00292E14 80 01 00 34 */ lwz r0, 0x34(r1)
+/* 802971B8 00292E18 7C 08 03 A6 */ mtlr r0
+/* 802971BC 00292E1C 38 21 00 30 */ addi r1, r1, 0x30
+/* 802971C0 00292E20 4E 80 00 20 */ blr
+
+.global MEMFreeToExpHeap
+MEMFreeToExpHeap:
+/* 802971C4 00292E24 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 802971C8 00292E28 7C 08 02 A6 */ mflr r0
+/* 802971CC 00292E2C 2C 04 00 00 */ cmpwi r4, 0
+/* 802971D0 00292E30 90 01 00 24 */ stw r0, 0x24(r1)
+/* 802971D4 00292E34 93 E1 00 1C */ stw r31, 0x1c(r1)
+/* 802971D8 00292E38 93 C1 00 18 */ stw r30, 0x18(r1)
+/* 802971DC 00292E3C 93 A1 00 14 */ stw r29, 0x14(r1)
+/* 802971E0 00292E40 7C 7D 1B 78 */ mr r29, r3
+/* 802971E4 00292E44 41 82 00 90 */ beq lbl_80297274
+/* 802971E8 00292E48 80 03 00 38 */ lwz r0, 0x38(r3)
+/* 802971EC 00292E4C 3B E3 00 3C */ addi r31, r3, 0x3c
+/* 802971F0 00292E50 3B C4 FF F0 */ addi r30, r4, -16
+/* 802971F4 00292E54 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 802971F8 00292E58 41 82 00 0C */ beq lbl_80297204
+/* 802971FC 00292E5C 38 63 00 20 */ addi r3, r3, 0x20
+/* 80297200 00292E60 4B FD 87 49 */ bl OSLockMutex
+lbl_80297204:
+/* 80297204 00292E64 A0 1E 00 02 */ lhz r0, 2(r30)
+/* 80297208 00292E68 54 00 C6 7E */ rlwinm r0, r0, 0x18, 0x19, 0x1f
+/* 8029720C 00292E6C 7C 00 F0 50 */ subf r0, r0, r30
+/* 80297210 00292E70 90 01 00 08 */ stw r0, 8(r1)
+/* 80297214 00292E74 80 1E 00 04 */ lwz r0, 4(r30)
+/* 80297218 00292E78 7C 7E 02 14 */ add r3, r30, r0
+/* 8029721C 00292E7C 38 03 00 10 */ addi r0, r3, 0x10
+/* 80297220 00292E80 90 01 00 0C */ stw r0, 0xc(r1)
+/* 80297224 00292E84 80 9E 00 08 */ lwz r4, 8(r30)
+/* 80297228 00292E88 80 7E 00 0C */ lwz r3, 0xc(r30)
+/* 8029722C 00292E8C 2C 04 00 00 */ cmpwi r4, 0
+/* 80297230 00292E90 41 82 00 0C */ beq lbl_8029723C
+/* 80297234 00292E94 90 64 00 0C */ stw r3, 0xc(r4)
+/* 80297238 00292E98 48 00 00 08 */ b lbl_80297240
+lbl_8029723C:
+/* 8029723C 00292E9C 90 7F 00 08 */ stw r3, 8(r31)
+lbl_80297240:
+/* 80297240 00292EA0 2C 03 00 00 */ cmpwi r3, 0
+/* 80297244 00292EA4 41 82 00 0C */ beq lbl_80297250
+/* 80297248 00292EA8 90 83 00 08 */ stw r4, 8(r3)
+/* 8029724C 00292EAC 48 00 00 08 */ b lbl_80297254
+lbl_80297250:
+/* 80297250 00292EB0 90 9F 00 0C */ stw r4, 0xc(r31)
+lbl_80297254:
+/* 80297254 00292EB4 7F E3 FB 78 */ mr r3, r31
+/* 80297258 00292EB8 38 81 00 08 */ addi r4, r1, 8
+/* 8029725C 00292EBC 4B FF FA 85 */ bl RecycleRegion_
+/* 80297260 00292EC0 80 1D 00 38 */ lwz r0, 0x38(r29)
+/* 80297264 00292EC4 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 80297268 00292EC8 41 82 00 0C */ beq lbl_80297274
+/* 8029726C 00292ECC 38 7D 00 20 */ addi r3, r29, 0x20
+/* 80297270 00292ED0 4B FD 87 B5 */ bl OSUnlockMutex
+lbl_80297274:
+/* 80297274 00292ED4 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 80297278 00292ED8 83 E1 00 1C */ lwz r31, 0x1c(r1)
+/* 8029727C 00292EDC 83 C1 00 18 */ lwz r30, 0x18(r1)
+/* 80297280 00292EE0 83 A1 00 14 */ lwz r29, 0x14(r1)
+/* 80297284 00292EE4 7C 08 03 A6 */ mtlr r0
+/* 80297288 00292EE8 38 21 00 20 */ addi r1, r1, 0x20
+/* 8029728C 00292EEC 4E 80 00 20 */ blr
+
+.global MEMGetTotalFreeSizeForExpHeap
+MEMGetTotalFreeSizeForExpHeap:
+/* 80297290 00292EF0 94 21 FF F0 */ stwu r1, -0x10(r1)
+/* 80297294 00292EF4 7C 08 02 A6 */ mflr r0
+/* 80297298 00292EF8 90 01 00 14 */ stw r0, 0x14(r1)
+/* 8029729C 00292EFC 93 E1 00 0C */ stw r31, 0xc(r1)
+/* 802972A0 00292F00 3B E0 00 00 */ li r31, 0
+/* 802972A4 00292F04 93 C1 00 08 */ stw r30, 8(r1)
+/* 802972A8 00292F08 7C 7E 1B 78 */ mr r30, r3
+/* 802972AC 00292F0C 80 03 00 38 */ lwz r0, 0x38(r3)
+/* 802972B0 00292F10 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 802972B4 00292F14 41 82 00 0C */ beq lbl_802972C0
+/* 802972B8 00292F18 38 63 00 20 */ addi r3, r3, 0x20
+/* 802972BC 00292F1C 4B FD 86 8D */ bl OSLockMutex
+lbl_802972C0:
+/* 802972C0 00292F20 80 7E 00 3C */ lwz r3, 0x3c(r30)
+/* 802972C4 00292F24 48 00 00 10 */ b lbl_802972D4
+lbl_802972C8:
+/* 802972C8 00292F28 80 03 00 04 */ lwz r0, 4(r3)
+/* 802972CC 00292F2C 80 63 00 0C */ lwz r3, 0xc(r3)
+/* 802972D0 00292F30 7F FF 02 14 */ add r31, r31, r0
+lbl_802972D4:
+/* 802972D4 00292F34 2C 03 00 00 */ cmpwi r3, 0
+/* 802972D8 00292F38 40 82 FF F0 */ bne lbl_802972C8
+/* 802972DC 00292F3C 80 1E 00 38 */ lwz r0, 0x38(r30)
+/* 802972E0 00292F40 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 802972E4 00292F44 41 82 00 0C */ beq lbl_802972F0
+/* 802972E8 00292F48 38 7E 00 20 */ addi r3, r30, 0x20
+/* 802972EC 00292F4C 4B FD 87 39 */ bl OSUnlockMutex
+lbl_802972F0:
+/* 802972F0 00292F50 7F E3 FB 78 */ mr r3, r31
+/* 802972F4 00292F54 83 E1 00 0C */ lwz r31, 0xc(r1)
+/* 802972F8 00292F58 83 C1 00 08 */ lwz r30, 8(r1)
+/* 802972FC 00292F5C 80 01 00 14 */ lwz r0, 0x14(r1)
+/* 80297300 00292F60 7C 08 03 A6 */ mtlr r0
+/* 80297304 00292F64 38 21 00 10 */ addi r1, r1, 0x10
+/* 80297308 00292F68 4E 80 00 20 */ blr
+
+.global MEMSetGroupIDForExpHeap
+MEMSetGroupIDForExpHeap:
+/* 8029730C 00292F6C 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 80297310 00292F70 7C 08 02 A6 */ mflr r0
+/* 80297314 00292F74 90 01 00 24 */ stw r0, 0x24(r1)
+/* 80297318 00292F78 93 E1 00 1C */ stw r31, 0x1c(r1)
+/* 8029731C 00292F7C 93 C1 00 18 */ stw r30, 0x18(r1)
+/* 80297320 00292F80 7C 9E 23 78 */ mr r30, r4
+/* 80297324 00292F84 93 A1 00 14 */ stw r29, 0x14(r1)
+/* 80297328 00292F88 7C 7D 1B 78 */ mr r29, r3
+/* 8029732C 00292F8C 4B FD 74 31 */ bl OSDisableInterrupts
+/* 80297330 00292F90 A3 FD 00 4C */ lhz r31, 0x4c(r29)
+/* 80297334 00292F94 B3 DD 00 4C */ sth r30, 0x4c(r29)
+/* 80297338 00292F98 4B FD 74 4D */ bl OSRestoreInterrupts
+/* 8029733C 00292F9C 7F E3 FB 78 */ mr r3, r31
+/* 80297340 00292FA0 83 E1 00 1C */ lwz r31, 0x1c(r1)
+/* 80297344 00292FA4 83 C1 00 18 */ lwz r30, 0x18(r1)
+/* 80297348 00292FA8 83 A1 00 14 */ lwz r29, 0x14(r1)
+/* 8029734C 00292FAC 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 80297350 00292FB0 7C 08 03 A6 */ mtlr r0
+/* 80297354 00292FB4 38 21 00 20 */ addi r1, r1, 0x20
+/* 80297358 00292FB8 4E 80 00 20 */ blr
+
+.global MEMVisitAllocatedForExpHeap
+MEMVisitAllocatedForExpHeap:
+/* 8029735C 00292FBC 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 80297360 00292FC0 7C 08 02 A6 */ mflr r0
+/* 80297364 00292FC4 90 01 00 24 */ stw r0, 0x24(r1)
+/* 80297368 00292FC8 93 E1 00 1C */ stw r31, 0x1c(r1)
+/* 8029736C 00292FCC 93 C1 00 18 */ stw r30, 0x18(r1)
+/* 80297370 00292FD0 7C BE 2B 78 */ mr r30, r5
+/* 80297374 00292FD4 93 A1 00 14 */ stw r29, 0x14(r1)
+/* 80297378 00292FD8 7C 9D 23 78 */ mr r29, r4
+/* 8029737C 00292FDC 93 81 00 10 */ stw r28, 0x10(r1)
+/* 80297380 00292FE0 7C 7C 1B 78 */ mr r28, r3
+/* 80297384 00292FE4 80 03 00 38 */ lwz r0, 0x38(r3)
+/* 80297388 00292FE8 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 8029738C 00292FEC 41 82 00 0C */ beq lbl_80297398
+/* 80297390 00292FF0 38 63 00 20 */ addi r3, r3, 0x20
+/* 80297394 00292FF4 4B FD 85 B5 */ bl OSLockMutex
+lbl_80297398:
+/* 80297398 00292FF8 83 FC 00 44 */ lwz r31, 0x44(r28)
+/* 8029739C 00292FFC 48 00 00 20 */ b lbl_802973BC
+lbl_802973A0:
+/* 802973A0 00293000 7F AC EB 78 */ mr r12, r29
+/* 802973A4 00293004 38 7F 00 10 */ addi r3, r31, 0x10
+/* 802973A8 00293008 7F 84 E3 78 */ mr r4, r28
+/* 802973AC 0029300C 7F C5 F3 78 */ mr r5, r30
+/* 802973B0 00293010 83 FF 00 0C */ lwz r31, 0xc(r31)
+/* 802973B4 00293014 7D 89 03 A6 */ mtctr r12
+/* 802973B8 00293018 4E 80 04 21 */ bctrl
+lbl_802973BC:
+/* 802973BC 0029301C 2C 1F 00 00 */ cmpwi r31, 0
+/* 802973C0 00293020 40 82 FF E0 */ bne lbl_802973A0
+/* 802973C4 00293024 80 1C 00 38 */ lwz r0, 0x38(r28)
+/* 802973C8 00293028 54 00 07 7B */ rlwinm. r0, r0, 0, 0x1d, 0x1d
+/* 802973CC 0029302C 41 82 00 0C */ beq lbl_802973D8
+/* 802973D0 00293030 38 7C 00 20 */ addi r3, r28, 0x20
+/* 802973D4 00293034 4B FD 86 51 */ bl OSUnlockMutex
+lbl_802973D8:
+/* 802973D8 00293038 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 802973DC 0029303C 83 E1 00 1C */ lwz r31, 0x1c(r1)
+/* 802973E0 00293040 83 C1 00 18 */ lwz r30, 0x18(r1)
+/* 802973E4 00293044 83 A1 00 14 */ lwz r29, 0x14(r1)
+/* 802973E8 00293048 83 81 00 10 */ lwz r28, 0x10(r1)
+/* 802973EC 0029304C 7C 08 03 A6 */ mtlr r0
+/* 802973F0 00293050 38 21 00 20 */ addi r1, r1, 0x20
+/* 802973F4 00293054 4E 80 00 20 */ blr
+
+.global MEMGetSizeForMBlockExpHeap
+MEMGetSizeForMBlockExpHeap:
+/* 802973F8 00293058 80 63 FF F4 */ lwz r3, -0xc(r3)
+/* 802973FC 0029305C 4E 80 00 20 */ blr
+
+.global MEMGetGroupIDForMBlockExpHeap
+MEMGetGroupIDForMBlockExpHeap:
+/* 80297400 00293060 A0 03 FF F2 */ lhz r0, -0xe(r3)
+/* 80297404 00293064 54 03 06 3E */ clrlwi r3, r0, 0x18
+/* 80297408 00293068 4E 80 00 20 */ blr
diff --git a/asm/SDK/MEM/mem_frameHeap.s b/asm/SDK/MEM/mem_frameHeap.s new file mode 100644 index 0000000..5cca960 --- /dev/null +++ b/asm/SDK/MEM/mem_frameHeap.s @@ -0,0 +1,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
diff --git a/asm/SDK/MEM/mem_heapCommon.s b/asm/SDK/MEM/mem_heapCommon.s new file mode 100644 index 0000000..0d05b07 --- /dev/null +++ b/asm/SDK/MEM/mem_heapCommon.s @@ -0,0 +1,334 @@ +.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global FindContainHeap_
+FindContainHeap_:
+/* 802964CC 0029212C 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 802964D0 00292130 7C 08 02 A6 */ mflr r0
+/* 802964D4 00292134 90 01 00 24 */ stw r0, 0x24(r1)
+/* 802964D8 00292138 93 E1 00 1C */ stw r31, 0x1c(r1)
+/* 802964DC 0029213C 93 C1 00 18 */ stw r30, 0x18(r1)
+/* 802964E0 00292140 7C 7E 1B 78 */ mr r30, r3
+/* 802964E4 00292144 93 A1 00 14 */ stw r29, 0x14(r1)
+/* 802964E8 00292148 3B A0 00 00 */ li r29, 0
+/* 802964EC 0029214C 93 81 00 10 */ stw r28, 0x10(r1)
+/* 802964F0 00292150 7C 9C 23 78 */ mr r28, r4
+/* 802964F4 00292154 48 00 00 DC */ b lbl_802965D0
+lbl_802964F8:
+/* 802964F8 00292158 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 802964FC 0029215C 7C 00 E0 40 */ cmplw r0, r28
+/* 80296500 00292160 41 81 00 D0 */ bgt lbl_802965D0
+/* 80296504 00292164 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 80296508 00292168 7C 1C 00 40 */ cmplw r28, r0
+/* 8029650C 0029216C 40 80 00 C4 */ bge lbl_802965D0
+/* 80296510 00292170 3B E0 00 00 */ li r31, 0
+/* 80296514 00292174 48 00 00 8C */ b lbl_802965A0
+lbl_80296518:
+/* 80296518 00292178 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 8029651C 0029217C 7C 00 E0 40 */ cmplw r0, r28
+/* 80296520 00292180 41 81 00 80 */ bgt lbl_802965A0
+/* 80296524 00292184 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 80296528 00292188 7C 1C 00 40 */ cmplw r28, r0
+/* 8029652C 0029218C 40 80 00 74 */ bge lbl_802965A0
+/* 80296530 00292190 3B C0 00 00 */ li r30, 0
+/* 80296534 00292194 48 00 00 3C */ b lbl_80296570
+lbl_80296538:
+/* 80296538 00292198 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 8029653C 0029219C 7C 00 E0 40 */ cmplw r0, r28
+/* 80296540 002921A0 41 81 00 30 */ bgt lbl_80296570
+/* 80296544 002921A4 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 80296548 002921A8 7C 1C 00 40 */ cmplw r28, r0
+/* 8029654C 002921AC 40 80 00 24 */ bge lbl_80296570
+/* 80296550 002921B0 7F 84 E3 78 */ mr r4, r28
+/* 80296554 002921B4 38 63 00 0C */ addi r3, r3, 0xc
+/* 80296558 002921B8 4B FF FF 75 */ bl FindContainHeap_
+/* 8029655C 002921BC 2C 03 00 00 */ cmpwi r3, 0
+/* 80296560 002921C0 41 82 00 08 */ beq lbl_80296568
+/* 80296564 002921C4 48 00 00 28 */ b lbl_8029658C
+lbl_80296568:
+/* 80296568 002921C8 7F C3 F3 78 */ mr r3, r30
+/* 8029656C 002921CC 48 00 00 20 */ b lbl_8029658C
+lbl_80296570:
+/* 80296570 002921D0 7F C4 F3 78 */ mr r4, r30
+/* 80296574 002921D4 38 7F 00 0C */ addi r3, r31, 0xc
+/* 80296578 002921D8 48 00 12 F9 */ bl MEMGetNextListObject
+/* 8029657C 002921DC 2C 03 00 00 */ cmpwi r3, 0
+/* 80296580 002921E0 7C 7E 1B 78 */ mr r30, r3
+/* 80296584 002921E4 40 82 FF B4 */ bne lbl_80296538
+/* 80296588 002921E8 38 60 00 00 */ li r3, 0
+lbl_8029658C:
+/* 8029658C 002921EC 2C 03 00 00 */ cmpwi r3, 0
+/* 80296590 002921F0 41 82 00 08 */ beq lbl_80296598
+/* 80296594 002921F4 48 00 00 28 */ b lbl_802965BC
+lbl_80296598:
+/* 80296598 002921F8 7F E3 FB 78 */ mr r3, r31
+/* 8029659C 002921FC 48 00 00 20 */ b lbl_802965BC
+lbl_802965A0:
+/* 802965A0 00292200 7F E4 FB 78 */ mr r4, r31
+/* 802965A4 00292204 38 7D 00 0C */ addi r3, r29, 0xc
+/* 802965A8 00292208 48 00 12 C9 */ bl MEMGetNextListObject
+/* 802965AC 0029220C 2C 03 00 00 */ cmpwi r3, 0
+/* 802965B0 00292210 7C 7F 1B 78 */ mr r31, r3
+/* 802965B4 00292214 40 82 FF 64 */ bne lbl_80296518
+/* 802965B8 00292218 38 60 00 00 */ li r3, 0
+lbl_802965BC:
+/* 802965BC 0029221C 2C 03 00 00 */ cmpwi r3, 0
+/* 802965C0 00292220 41 82 00 08 */ beq lbl_802965C8
+/* 802965C4 00292224 48 00 00 28 */ b lbl_802965EC
+lbl_802965C8:
+/* 802965C8 00292228 7F A3 EB 78 */ mr r3, r29
+/* 802965CC 0029222C 48 00 00 20 */ b lbl_802965EC
+lbl_802965D0:
+/* 802965D0 00292230 7F C3 F3 78 */ mr r3, r30
+/* 802965D4 00292234 7F A4 EB 78 */ mr r4, r29
+/* 802965D8 00292238 48 00 12 99 */ bl MEMGetNextListObject
+/* 802965DC 0029223C 2C 03 00 00 */ cmpwi r3, 0
+/* 802965E0 00292240 7C 7D 1B 78 */ mr r29, r3
+/* 802965E4 00292244 40 82 FF 14 */ bne lbl_802964F8
+/* 802965E8 00292248 38 60 00 00 */ li r3, 0
+lbl_802965EC:
+/* 802965EC 0029224C 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 802965F0 00292250 83 E1 00 1C */ lwz r31, 0x1c(r1)
+/* 802965F4 00292254 83 C1 00 18 */ lwz r30, 0x18(r1)
+/* 802965F8 00292258 83 A1 00 14 */ lwz r29, 0x14(r1)
+/* 802965FC 0029225C 83 81 00 10 */ lwz r28, 0x10(r1)
+/* 80296600 00292260 7C 08 03 A6 */ mtlr r0
+/* 80296604 00292264 38 21 00 20 */ addi r1, r1, 0x20
+/* 80296608 00292268 4E 80 00 20 */ blr
+
+.global MEMiInitHeapHead
+MEMiInitHeapHead:
+/* 8029660C 0029226C 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 80296610 00292270 7C 08 02 A6 */ mflr r0
+/* 80296614 00292274 90 01 00 24 */ stw r0, 0x24(r1)
+/* 80296618 00292278 39 61 00 20 */ addi r11, r1, 0x20
+/* 8029661C 0029227C 4B F3 0B 0D */ bl _savegpr_27
+/* 80296620 00292280 38 00 00 00 */ li r0, 0
+/* 80296624 00292284 90 83 00 00 */ stw r4, 0(r3)
+/* 80296628 00292288 50 E0 06 3E */ rlwimi r0, r7, 0, 0x18, 0x1f
+/* 8029662C 0029228C 7C 7B 1B 78 */ mr r27, r3
+/* 80296630 00292290 90 A3 00 18 */ stw r5, 0x18(r3)
+/* 80296634 00292294 38 80 00 04 */ li r4, 4
+/* 80296638 00292298 90 C3 00 1C */ stw r6, 0x1c(r3)
+/* 8029663C 0029229C 90 03 00 38 */ stw r0, 0x38(r3)
+/* 80296640 002922A0 38 63 00 0C */ addi r3, r3, 0xc
+/* 80296644 002922A4 48 00 11 39 */ bl MEMInitList
+/* 80296648 002922A8 80 0D AC 48 */ lwz r0, lbl_8063FF08-_SDA_BASE_(r13)
+/* 8029664C 002922AC 2C 00 00 00 */ cmpwi r0, 0
+/* 80296650 002922B0 40 82 00 28 */ bne lbl_80296678
+/* 80296654 002922B4 3C 60 80 53 */ lis r3, lbl_805311C0@ha
+/* 80296658 002922B8 38 80 00 04 */ li r4, 4
+/* 8029665C 002922BC 38 63 11 C0 */ addi r3, r3, lbl_805311C0@l
+/* 80296660 002922C0 48 00 11 1D */ bl MEMInitList
+/* 80296664 002922C4 3C 60 80 53 */ lis r3, lbl_805311D0@ha
+/* 80296668 002922C8 38 63 11 D0 */ addi r3, r3, lbl_805311D0@l
+/* 8029666C 002922CC 4B FD 92 A5 */ bl OSInitMutex
+/* 80296670 002922D0 38 00 00 01 */ li r0, 1
+/* 80296674 002922D4 90 0D AC 48 */ stw r0, lbl_8063FF08-_SDA_BASE_(r13)
+lbl_80296678:
+/* 80296678 002922D8 38 7B 00 20 */ addi r3, r27, 0x20
+/* 8029667C 002922DC 4B FD 92 95 */ bl OSInitMutex
+/* 80296680 002922E0 3C 60 80 53 */ lis r3, lbl_805311D0@ha
+/* 80296684 002922E4 38 63 11 D0 */ addi r3, r3, lbl_805311D0@l
+/* 80296688 002922E8 4B FD 92 C1 */ bl OSLockMutex
+/* 8029668C 002922EC 3F E0 80 53 */ lis r31, lbl_805311C0@ha
+/* 80296690 002922F0 3B C0 00 00 */ li r30, 0
+/* 80296694 002922F4 3B 9F 11 C0 */ addi r28, r31, lbl_805311C0@l
+/* 80296698 002922F8 48 00 00 DC */ b lbl_80296774
+lbl_8029669C:
+/* 8029669C 002922FC 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 802966A0 00292300 7C 00 D8 40 */ cmplw r0, r27
+/* 802966A4 00292304 41 81 00 D0 */ bgt lbl_80296774
+/* 802966A8 00292308 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 802966AC 0029230C 7C 1B 00 40 */ cmplw r27, r0
+/* 802966B0 00292310 40 80 00 C4 */ bge lbl_80296774
+/* 802966B4 00292314 3B E0 00 00 */ li r31, 0
+/* 802966B8 00292318 48 00 00 8C */ b lbl_80296744
+lbl_802966BC:
+/* 802966BC 0029231C 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 802966C0 00292320 7C 00 D8 40 */ cmplw r0, r27
+/* 802966C4 00292324 41 81 00 80 */ bgt lbl_80296744
+/* 802966C8 00292328 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 802966CC 0029232C 7C 1B 00 40 */ cmplw r27, r0
+/* 802966D0 00292330 40 80 00 74 */ bge lbl_80296744
+/* 802966D4 00292334 3B A0 00 00 */ li r29, 0
+/* 802966D8 00292338 48 00 00 3C */ b lbl_80296714
+lbl_802966DC:
+/* 802966DC 0029233C 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 802966E0 00292340 7C 00 D8 40 */ cmplw r0, r27
+/* 802966E4 00292344 41 81 00 30 */ bgt lbl_80296714
+/* 802966E8 00292348 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 802966EC 0029234C 7C 1B 00 40 */ cmplw r27, r0
+/* 802966F0 00292350 40 80 00 24 */ bge lbl_80296714
+/* 802966F4 00292354 7F 64 DB 78 */ mr r4, r27
+/* 802966F8 00292358 38 63 00 0C */ addi r3, r3, 0xc
+/* 802966FC 0029235C 4B FF FD D1 */ bl FindContainHeap_
+/* 80296700 00292360 2C 03 00 00 */ cmpwi r3, 0
+/* 80296704 00292364 41 82 00 08 */ beq lbl_8029670C
+/* 80296708 00292368 48 00 00 28 */ b lbl_80296730
+lbl_8029670C:
+/* 8029670C 0029236C 7F A3 EB 78 */ mr r3, r29
+/* 80296710 00292370 48 00 00 20 */ b lbl_80296730
+lbl_80296714:
+/* 80296714 00292374 7F A4 EB 78 */ mr r4, r29
+/* 80296718 00292378 38 7F 00 0C */ addi r3, r31, 0xc
+/* 8029671C 0029237C 48 00 11 55 */ bl MEMGetNextListObject
+/* 80296720 00292380 2C 03 00 00 */ cmpwi r3, 0
+/* 80296724 00292384 7C 7D 1B 78 */ mr r29, r3
+/* 80296728 00292388 40 82 FF B4 */ bne lbl_802966DC
+/* 8029672C 0029238C 38 60 00 00 */ li r3, 0
+lbl_80296730:
+/* 80296730 00292390 2C 03 00 00 */ cmpwi r3, 0
+/* 80296734 00292394 41 82 00 08 */ beq lbl_8029673C
+/* 80296738 00292398 48 00 00 28 */ b lbl_80296760
+lbl_8029673C:
+/* 8029673C 0029239C 7F E3 FB 78 */ mr r3, r31
+/* 80296740 002923A0 48 00 00 20 */ b lbl_80296760
+lbl_80296744:
+/* 80296744 002923A4 7F E4 FB 78 */ mr r4, r31
+/* 80296748 002923A8 38 7E 00 0C */ addi r3, r30, 0xc
+/* 8029674C 002923AC 48 00 11 25 */ bl MEMGetNextListObject
+/* 80296750 002923B0 2C 03 00 00 */ cmpwi r3, 0
+/* 80296754 002923B4 7C 7F 1B 78 */ mr r31, r3
+/* 80296758 002923B8 40 82 FF 64 */ bne lbl_802966BC
+/* 8029675C 002923BC 38 60 00 00 */ li r3, 0
+lbl_80296760:
+/* 80296760 002923C0 2C 03 00 00 */ cmpwi r3, 0
+/* 80296764 002923C4 41 82 00 08 */ beq lbl_8029676C
+/* 80296768 002923C8 48 00 00 28 */ b lbl_80296790
+lbl_8029676C:
+/* 8029676C 002923CC 7F C3 F3 78 */ mr r3, r30
+/* 80296770 002923D0 48 00 00 20 */ b lbl_80296790
+lbl_80296774:
+/* 80296774 002923D4 7F C4 F3 78 */ mr r4, r30
+/* 80296778 002923D8 38 7F 11 C0 */ addi r3, r31, 0x11c0
+/* 8029677C 002923DC 48 00 10 F5 */ bl MEMGetNextListObject
+/* 80296780 002923E0 2C 03 00 00 */ cmpwi r3, 0
+/* 80296784 002923E4 7C 7E 1B 78 */ mr r30, r3
+/* 80296788 002923E8 40 82 FF 14 */ bne lbl_8029669C
+/* 8029678C 002923EC 38 60 00 00 */ li r3, 0
+lbl_80296790:
+/* 80296790 002923F0 2C 03 00 00 */ cmpwi r3, 0
+/* 80296794 002923F4 41 82 00 08 */ beq lbl_8029679C
+/* 80296798 002923F8 3B 83 00 0C */ addi r28, r3, 0xc
+lbl_8029679C:
+/* 8029679C 002923FC 7F 83 E3 78 */ mr r3, r28
+/* 802967A0 00292400 7F 64 DB 78 */ mr r4, r27
+/* 802967A4 00292404 48 00 0F F1 */ bl MEMAppendListObject
+/* 802967A8 00292408 3C 60 80 53 */ lis r3, lbl_805311D0@ha
+/* 802967AC 0029240C 38 63 11 D0 */ addi r3, r3, lbl_805311D0@l
+/* 802967B0 00292410 4B FD 92 75 */ bl OSUnlockMutex
+/* 802967B4 00292414 39 61 00 20 */ addi r11, r1, 0x20
+/* 802967B8 00292418 4B F3 09 BD */ bl _restgpr_27
+/* 802967BC 0029241C 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 802967C0 00292420 7C 08 03 A6 */ mtlr r0
+/* 802967C4 00292424 38 21 00 20 */ addi r1, r1, 0x20
+/* 802967C8 00292428 4E 80 00 20 */ blr
+
+.global MEMiFinalizeHeap
+MEMiFinalizeHeap:
+/* 802967CC 0029242C 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 802967D0 00292430 7C 08 02 A6 */ mflr r0
+/* 802967D4 00292434 90 01 00 24 */ stw r0, 0x24(r1)
+/* 802967D8 00292438 39 61 00 20 */ addi r11, r1, 0x20
+/* 802967DC 0029243C 4B F3 09 4D */ bl _savegpr_27
+/* 802967E0 00292440 3C 80 80 53 */ lis r4, lbl_805311D0@ha
+/* 802967E4 00292444 7C 7B 1B 78 */ mr r27, r3
+/* 802967E8 00292448 38 64 11 D0 */ addi r3, r4, lbl_805311D0@l
+/* 802967EC 0029244C 4B FD 91 5D */ bl OSLockMutex
+/* 802967F0 00292450 3F E0 80 53 */ lis r31, lbl_805311C0@ha
+/* 802967F4 00292454 3B C0 00 00 */ li r30, 0
+/* 802967F8 00292458 3B 9F 11 C0 */ addi r28, r31, lbl_805311C0@l
+/* 802967FC 0029245C 48 00 00 DC */ b lbl_802968D8
+lbl_80296800:
+/* 80296800 00292460 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 80296804 00292464 7C 00 D8 40 */ cmplw r0, r27
+/* 80296808 00292468 41 81 00 D0 */ bgt lbl_802968D8
+/* 8029680C 0029246C 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 80296810 00292470 7C 1B 00 40 */ cmplw r27, r0
+/* 80296814 00292474 40 80 00 C4 */ bge lbl_802968D8
+/* 80296818 00292478 3B E0 00 00 */ li r31, 0
+/* 8029681C 0029247C 48 00 00 8C */ b lbl_802968A8
+lbl_80296820:
+/* 80296820 00292480 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 80296824 00292484 7C 00 D8 40 */ cmplw r0, r27
+/* 80296828 00292488 41 81 00 80 */ bgt lbl_802968A8
+/* 8029682C 0029248C 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 80296830 00292490 7C 1B 00 40 */ cmplw r27, r0
+/* 80296834 00292494 40 80 00 74 */ bge lbl_802968A8
+/* 80296838 00292498 3B A0 00 00 */ li r29, 0
+/* 8029683C 0029249C 48 00 00 3C */ b lbl_80296878
+lbl_80296840:
+/* 80296840 002924A0 80 03 00 18 */ lwz r0, 0x18(r3)
+/* 80296844 002924A4 7C 00 D8 40 */ cmplw r0, r27
+/* 80296848 002924A8 41 81 00 30 */ bgt lbl_80296878
+/* 8029684C 002924AC 80 03 00 1C */ lwz r0, 0x1c(r3)
+/* 80296850 002924B0 7C 1B 00 40 */ cmplw r27, r0
+/* 80296854 002924B4 40 80 00 24 */ bge lbl_80296878
+/* 80296858 002924B8 7F 64 DB 78 */ mr r4, r27
+/* 8029685C 002924BC 38 63 00 0C */ addi r3, r3, 0xc
+/* 80296860 002924C0 4B FF FC 6D */ bl FindContainHeap_
+/* 80296864 002924C4 2C 03 00 00 */ cmpwi r3, 0
+/* 80296868 002924C8 41 82 00 08 */ beq lbl_80296870
+/* 8029686C 002924CC 48 00 00 28 */ b lbl_80296894
+lbl_80296870:
+/* 80296870 002924D0 7F A3 EB 78 */ mr r3, r29
+/* 80296874 002924D4 48 00 00 20 */ b lbl_80296894
+lbl_80296878:
+/* 80296878 002924D8 7F A4 EB 78 */ mr r4, r29
+/* 8029687C 002924DC 38 7F 00 0C */ addi r3, r31, 0xc
+/* 80296880 002924E0 48 00 0F F1 */ bl MEMGetNextListObject
+/* 80296884 002924E4 2C 03 00 00 */ cmpwi r3, 0
+/* 80296888 002924E8 7C 7D 1B 78 */ mr r29, r3
+/* 8029688C 002924EC 40 82 FF B4 */ bne lbl_80296840
+/* 80296890 002924F0 38 60 00 00 */ li r3, 0
+lbl_80296894:
+/* 80296894 002924F4 2C 03 00 00 */ cmpwi r3, 0
+/* 80296898 002924F8 41 82 00 08 */ beq lbl_802968A0
+/* 8029689C 002924FC 48 00 00 28 */ b lbl_802968C4
+lbl_802968A0:
+/* 802968A0 00292500 7F E3 FB 78 */ mr r3, r31
+/* 802968A4 00292504 48 00 00 20 */ b lbl_802968C4
+lbl_802968A8:
+/* 802968A8 00292508 7F E4 FB 78 */ mr r4, r31
+/* 802968AC 0029250C 38 7E 00 0C */ addi r3, r30, 0xc
+/* 802968B0 00292510 48 00 0F C1 */ bl MEMGetNextListObject
+/* 802968B4 00292514 2C 03 00 00 */ cmpwi r3, 0
+/* 802968B8 00292518 7C 7F 1B 78 */ mr r31, r3
+/* 802968BC 0029251C 40 82 FF 64 */ bne lbl_80296820
+/* 802968C0 00292520 38 60 00 00 */ li r3, 0
+lbl_802968C4:
+/* 802968C4 00292524 2C 03 00 00 */ cmpwi r3, 0
+/* 802968C8 00292528 41 82 00 08 */ beq lbl_802968D0
+/* 802968CC 0029252C 48 00 00 28 */ b lbl_802968F4
+lbl_802968D0:
+/* 802968D0 00292530 7F C3 F3 78 */ mr r3, r30
+/* 802968D4 00292534 48 00 00 20 */ b lbl_802968F4
+lbl_802968D8:
+/* 802968D8 00292538 7F C4 F3 78 */ mr r4, r30
+/* 802968DC 0029253C 38 7F 11 C0 */ addi r3, r31, 0x11c0
+/* 802968E0 00292540 48 00 0F 91 */ bl MEMGetNextListObject
+/* 802968E4 00292544 2C 03 00 00 */ cmpwi r3, 0
+/* 802968E8 00292548 7C 7E 1B 78 */ mr r30, r3
+/* 802968EC 0029254C 40 82 FF 14 */ bne lbl_80296800
+/* 802968F0 00292550 38 60 00 00 */ li r3, 0
+lbl_802968F4:
+/* 802968F4 00292554 2C 03 00 00 */ cmpwi r3, 0
+/* 802968F8 00292558 41 82 00 08 */ beq lbl_80296900
+/* 802968FC 0029255C 3B 83 00 0C */ addi r28, r3, 0xc
+lbl_80296900:
+/* 80296900 00292560 7F 83 E3 78 */ mr r3, r28
+/* 80296904 00292564 7F 64 DB 78 */ mr r4, r27
+/* 80296908 00292568 48 00 0E FD */ bl MEMRemoveListObject
+/* 8029690C 0029256C 3C 60 80 53 */ lis r3, lbl_805311D0@ha
+/* 80296910 00292570 38 63 11 D0 */ addi r3, r3, lbl_805311D0@l
+/* 80296914 00292574 4B FD 91 11 */ bl OSUnlockMutex
+/* 80296918 00292578 38 00 00 00 */ li r0, 0
+/* 8029691C 0029257C 39 61 00 20 */ addi r11, r1, 0x20
+/* 80296920 00292580 90 1B 00 00 */ stw r0, 0(r27)
+/* 80296924 00292584 4B F3 08 51 */ bl _restgpr_27
+/* 80296928 00292588 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 8029692C 0029258C 7C 08 03 A6 */ mtlr r0
+/* 80296930 00292590 38 21 00 20 */ addi r1, r1, 0x20
+/* 80296934 00292594 4E 80 00 20 */ blr
diff --git a/asm/SDK/MEM/mem_list.s b/asm/SDK/MEM/mem_list.s new file mode 100644 index 0000000..8496c01 --- /dev/null +++ b/asm/SDK/MEM/mem_list.s @@ -0,0 +1,90 @@ +.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global MEMInitList
+MEMInitList:
+/* 8029777C 002933DC 38 00 00 00 */ li r0, 0
+/* 80297780 002933E0 B0 83 00 0A */ sth r4, 0xa(r3)
+/* 80297784 002933E4 90 03 00 00 */ stw r0, 0(r3)
+/* 80297788 002933E8 90 03 00 04 */ stw r0, 4(r3)
+/* 8029778C 002933EC B0 03 00 08 */ sth r0, 8(r3)
+/* 80297790 002933F0 4E 80 00 20 */ blr
+
+.global MEMAppendListObject
+MEMAppendListObject:
+/* 80297794 002933F4 80 03 00 00 */ lwz r0, 0(r3)
+/* 80297798 002933F8 2C 00 00 00 */ cmpwi r0, 0
+/* 8029779C 002933FC 40 82 00 30 */ bne lbl_802977CC
+/* 802977A0 00293400 A0 A3 00 0A */ lhz r5, 0xa(r3)
+/* 802977A4 00293404 38 00 00 00 */ li r0, 0
+/* 802977A8 00293408 7C A4 2A 14 */ add r5, r4, r5
+/* 802977AC 0029340C 90 05 00 04 */ stw r0, 4(r5)
+/* 802977B0 00293410 90 05 00 00 */ stw r0, 0(r5)
+/* 802977B4 00293414 A0 A3 00 08 */ lhz r5, 8(r3)
+/* 802977B8 00293418 90 83 00 00 */ stw r4, 0(r3)
+/* 802977BC 0029341C 38 05 00 01 */ addi r0, r5, 1
+/* 802977C0 00293420 90 83 00 04 */ stw r4, 4(r3)
+/* 802977C4 00293424 B0 03 00 08 */ sth r0, 8(r3)
+/* 802977C8 00293428 4E 80 00 20 */ blr
+lbl_802977CC:
+/* 802977CC 0029342C A0 C3 00 0A */ lhz r6, 0xa(r3)
+/* 802977D0 00293430 38 00 00 00 */ li r0, 0
+/* 802977D4 00293434 80 A3 00 04 */ lwz r5, 4(r3)
+/* 802977D8 00293438 7C A6 21 6E */ stwux r5, r6, r4
+/* 802977DC 0029343C 90 06 00 04 */ stw r0, 4(r6)
+/* 802977E0 00293440 80 A3 00 04 */ lwz r5, 4(r3)
+/* 802977E4 00293444 A0 03 00 0A */ lhz r0, 0xa(r3)
+/* 802977E8 00293448 7C A5 02 14 */ add r5, r5, r0
+/* 802977EC 0029344C 90 85 00 04 */ stw r4, 4(r5)
+/* 802977F0 00293450 A0 A3 00 08 */ lhz r5, 8(r3)
+/* 802977F4 00293454 90 83 00 04 */ stw r4, 4(r3)
+/* 802977F8 00293458 38 05 00 01 */ addi r0, r5, 1
+/* 802977FC 0029345C B0 03 00 08 */ sth r0, 8(r3)
+/* 80297800 00293460 4E 80 00 20 */ blr
+
+.global MEMRemoveListObject
+MEMRemoveListObject:
+/* 80297804 00293464 A0 A3 00 0A */ lhz r5, 0xa(r3)
+/* 80297808 00293468 7C C4 2A 14 */ add r6, r4, r5
+/* 8029780C 0029346C 7C 84 28 2E */ lwzx r4, r4, r5
+/* 80297810 00293470 2C 04 00 00 */ cmpwi r4, 0
+/* 80297814 00293474 40 82 00 10 */ bne lbl_80297824
+/* 80297818 00293478 80 06 00 04 */ lwz r0, 4(r6)
+/* 8029781C 0029347C 90 03 00 00 */ stw r0, 0(r3)
+/* 80297820 00293480 48 00 00 10 */ b lbl_80297830
+lbl_80297824:
+/* 80297824 00293484 80 06 00 04 */ lwz r0, 4(r6)
+/* 80297828 00293488 7C 84 2A 14 */ add r4, r4, r5
+/* 8029782C 0029348C 90 04 00 04 */ stw r0, 4(r4)
+lbl_80297830:
+/* 80297830 00293490 80 A6 00 04 */ lwz r5, 4(r6)
+/* 80297834 00293494 2C 05 00 00 */ cmpwi r5, 0
+/* 80297838 00293498 40 82 00 10 */ bne lbl_80297848
+/* 8029783C 0029349C 80 06 00 00 */ lwz r0, 0(r6)
+/* 80297840 002934A0 90 03 00 04 */ stw r0, 4(r3)
+/* 80297844 002934A4 48 00 00 10 */ b lbl_80297854
+lbl_80297848:
+/* 80297848 002934A8 80 86 00 00 */ lwz r4, 0(r6)
+/* 8029784C 002934AC A0 03 00 0A */ lhz r0, 0xa(r3)
+/* 80297850 002934B0 7C 85 01 2E */ stwx r4, r5, r0
+lbl_80297854:
+/* 80297854 002934B4 38 00 00 00 */ li r0, 0
+/* 80297858 002934B8 90 06 00 00 */ stw r0, 0(r6)
+/* 8029785C 002934BC 90 06 00 04 */ stw r0, 4(r6)
+/* 80297860 002934C0 A0 83 00 08 */ lhz r4, 8(r3)
+/* 80297864 002934C4 38 04 FF FF */ addi r0, r4, -1
+/* 80297868 002934C8 B0 03 00 08 */ sth r0, 8(r3)
+/* 8029786C 002934CC 4E 80 00 20 */ blr
+
+.global MEMGetNextListObject
+MEMGetNextListObject:
+/* 80297870 002934D0 2C 04 00 00 */ cmpwi r4, 0
+/* 80297874 002934D4 40 82 00 0C */ bne lbl_80297880
+/* 80297878 002934D8 80 63 00 00 */ lwz r3, 0(r3)
+/* 8029787C 002934DC 4E 80 00 20 */ blr
+lbl_80297880:
+/* 80297880 002934E0 A0 03 00 0A */ lhz r0, 0xa(r3)
+/* 80297884 002934E4 7C 64 02 14 */ add r3, r4, r0
+/* 80297888 002934E8 80 63 00 04 */ lwz r3, 4(r3)
+/* 8029788C 002934EC 4E 80 00 20 */ blr
|