From 3a3883fa35b9f043a7212b349630ec8447a382ea Mon Sep 17 00:00:00 2001 From: Matt <5638426+mattbruv@users.noreply.github.com> Date: Fri, 23 Oct 2020 16:07:59 -0400 Subject: [PATCH] start iSystem.cpp --- asm/CodeWarrior/Runtime.s | 4 +- asm/Core/p2/iFile.s | 2 +- asm/Core/p2/iMemMgr.s | 2 +- asm/Core/p2/iSnd.s | 2 +- asm/Core/p2/iSystem.s | 102 -------------------------------- asm/Core/p2/iTRC.s | 4 +- asm/Core/p2/isavegame.s | 4 +- asm/bink/bink.s | 4 +- asm/dolphin/dolphin.s | 8 +-- include/dolphin/dolphin.h | 6 ++ src/Core/p2/iSystem.cpp | 121 +++++++++++++++++++++++++++++++++----- src/Core/x/xMemMgr.h | 2 + 12 files changed, 128 insertions(+), 133 deletions(-) diff --git a/asm/CodeWarrior/Runtime.s b/asm/CodeWarrior/Runtime.s index 1b1b3fdd4..bb7ee57a9 100644 --- a/asm/CodeWarrior/Runtime.s +++ b/asm/CodeWarrior/Runtime.s @@ -2688,7 +2688,7 @@ func_801EF020: lbl_801EF0B0: /* 801EF0B0 001EBEB0 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 801EF0B4 001EBEB4 7F A4 EB 78 */ mr r4, r29 -/* 801EF0B8 001EBEB8 4B FE 2E 45 */ bl func_801D1EFC +/* 801EF0B8 001EBEB8 4B FE 2E 45 */ bl OSFreeToHeap /* 801EF0BC 001EBEBC 80 01 00 24 */ lwz r0, 0x24(r1) /* 801EF0C0 001EBEC0 83 E1 00 1C */ lwz r31, 0x1c(r1) /* 801EF0C4 001EBEC4 83 C1 00 18 */ lwz r30, 0x18(r1) @@ -2738,7 +2738,7 @@ func_801EF0D8: lbl_801EF168: /* 801EF168 001EBF68 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 801EF16C 001EBF6C 7F A4 EB 78 */ mr r4, r29 -/* 801EF170 001EBF70 4B FE 2C 91 */ bl func_801D1E00 +/* 801EF170 001EBF70 4B FE 2C 91 */ bl OSAllocFromHeap /* 801EF174 001EBF74 80 01 00 24 */ lwz r0, 0x24(r1) /* 801EF178 001EBF78 83 E1 00 1C */ lwz r31, 0x1c(r1) /* 801EF17C 001EBF7C 83 C1 00 18 */ lwz r30, 0x18(r1) diff --git a/asm/Core/p2/iFile.s b/asm/Core/p2/iFile.s index 04ed2959d..8edfe12f0 100644 --- a/asm/Core/p2/iFile.s +++ b/asm/Core/p2/iFile.s @@ -42,7 +42,7 @@ iFileLoad__FPcPUiPUi: /* 800C336C 000C016C 38 1F 00 1F */ addi r0, r31, 0x1f /* 800C3370 000C0170 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 800C3374 000C0174 54 04 00 34 */ rlwinm r4, r0, 0, 0, 0x1a -/* 800C3378 000C0178 48 10 EA 89 */ bl func_801D1E00 +/* 800C3378 000C0178 48 10 EA 89 */ bl OSAllocFromHeap /* 800C337C 000C017C 7C 7D 1B 78 */ mr r29, r3 lbl_800C3380: /* 800C3380 000C0180 38 1F 00 1F */ addi r0, r31, 0x1f diff --git a/asm/Core/p2/iMemMgr.s b/asm/Core/p2/iMemMgr.s index ba45c0a87..97a6f2f2c 100644 --- a/asm/Core/p2/iMemMgr.s +++ b/asm/Core/p2/iMemMgr.s @@ -53,7 +53,7 @@ lbl_800C63C0: /* 800C6408 000C3208 90 09 00 14 */ stw r0, 0x14(r9) /* 800C640C 000C320C 90 8D 92 24 */ stw r4, HeapSize-_SDA_BASE_(r13) /* 800C6410 000C3210 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) -/* 800C6414 000C3214 48 10 B9 ED */ bl func_801D1E00 +/* 800C6414 000C3214 48 10 B9 ED */ bl OSAllocFromHeap /* 800C6418 000C3218 90 6D 92 14 */ stw r3, mem_base_alloc-_SDA_BASE_(r13) /* 800C641C 000C321C 3C 80 80 39 */ lis r4, gMemInfo@ha /* 800C6420 000C3220 38 E4 C3 20 */ addi r7, r4, gMemInfo@l diff --git a/asm/Core/p2/iSnd.s b/asm/Core/p2/iSnd.s index 47efea515..4bbde3cec 100644 --- a/asm/Core/p2/iSnd.s +++ b/asm/Core/p2/iSnd.s @@ -898,7 +898,7 @@ lbl_800D054C: /* 800D0600 000CD400 90 1F 06 1C */ stw r0, 0x61c(r31) /* 800D0604 000CD404 90 1F 06 20 */ stw r0, 0x620(r31) /* 800D0608 000CD408 80 6D 92 18 */ lwz r3, the_heap-_SDA_BASE_(r13) -/* 800D060C 000CD40C 48 10 17 F5 */ bl func_801D1E00 +/* 800D060C 000CD40C 48 10 17 F5 */ bl OSAllocFromHeap /* 800D0610 000CD410 90 6D 92 C8 */ stw r3, ua_stream_buffer-_SDA_BASE_(r13) /* 800D0614 000CD414 38 00 00 08 */ li r0, 8 /* 800D0618 000CD418 38 80 00 00 */ li r4, 0 diff --git a/asm/Core/p2/iSystem.s b/asm/Core/p2/iSystem.s index f0b7e7e96..f972a9965 100644 --- a/asm/Core/p2/iSystem.s +++ b/asm/Core/p2/iSystem.s @@ -410,18 +410,6 @@ lbl_800D362C: /* 800D3634 000D0434 38 21 00 10 */ addi r1, r1, 0x10 /* 800D3638 000D0438 4E 80 00 20 */ blr -RenderWareExit__Fv: -/* 800D363C 000D043C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800D3640 000D0440 7C 08 02 A6 */ mflr r0 -/* 800D3644 000D0444 90 01 00 14 */ stw r0, 0x14(r1) -/* 800D3648 000D0448 48 16 48 99 */ bl RwEngineStop -/* 800D364C 000D044C 48 16 4A D9 */ bl RwEngineClose -/* 800D3650 000D0450 48 16 4E 45 */ bl RwEngineTerm -/* 800D3654 000D0454 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800D3658 000D0458 7C 08 03 A6 */ mtlr r0 -/* 800D365C 000D045C 38 21 00 10 */ addi r1, r1, 0x10 -/* 800D3660 000D0460 4E 80 00 20 */ blr - TextureRead__FPCcPCc: /* 800D3664 000D0464 94 21 FE E0 */ stwu r1, -0x120(r1) /* 800D3668 000D0468 7C 08 02 A6 */ mflr r0 @@ -477,96 +465,6 @@ lbl_800D370C: /* 800D3724 000D0524 38 21 01 20 */ addi r1, r1, 0x120 /* 800D3728 000D0528 4E 80 00 20 */ blr -.global null_func__Fv -null_func__Fv: -/* 800D372C 000D052C 80 6D 92 14 */ lwz r3, mem_base_alloc-_SDA_BASE_(r13) -/* 800D3730 000D0530 38 03 00 04 */ addi r0, r3, 4 -/* 800D3734 000D0534 90 0D 92 14 */ stw r0, mem_base_alloc-_SDA_BASE_(r13) -/* 800D3738 000D0538 4E 80 00 20 */ blr - -mem_null: -/* 800D373C 000D053C 90 6D 93 1C */ stw r3, add-_SDA_BASE_(r13) -/* 800D3740 000D0540 90 8D 93 20 */ stw r4, size-_SDA_BASE_(r13) -/* 800D3744 000D0544 4E 80 00 20 */ blr - -.global malloc -malloc: -/* 800D3748 000D0548 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800D374C 000D054C 7C 08 02 A6 */ mflr r0 -/* 800D3750 000D0550 7C 64 1B 79 */ or. r4, r3, r3 -/* 800D3754 000D0554 90 01 00 14 */ stw r0, 0x14(r1) -/* 800D3758 000D0558 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800D375C 000D055C 41 81 00 0C */ bgt lbl_800D3768 -/* 800D3760 000D0560 38 60 00 00 */ li r3, 0 -/* 800D3764 000D0564 48 00 00 1C */ b lbl_800D3780 -lbl_800D3768: -/* 800D3768 000D0568 80 6D 92 18 */ lwz r3, the_heap-_SDA_BASE_(r13) -/* 800D376C 000D056C 48 0F E6 95 */ bl func_801D1E00 -/* 800D3770 000D0570 7C 7F 1B 79 */ or. r31, r3, r3 -/* 800D3774 000D0574 40 82 00 08 */ bne lbl_800D377C -/* 800D3778 000D0578 4B FF FF B5 */ bl null_func__Fv -lbl_800D377C: -/* 800D377C 000D057C 7F E3 FB 78 */ mr r3, r31 -lbl_800D3780: -/* 800D3780 000D0580 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800D3784 000D0584 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800D3788 000D0588 7C 08 03 A6 */ mtlr r0 -/* 800D378C 000D058C 38 21 00 10 */ addi r1, r1, 0x10 -/* 800D3790 000D0590 4E 80 00 20 */ blr - -.global free - -free: -/* 800D3794 000D0594 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800D3798 000D0598 7C 08 02 A6 */ mflr r0 -/* 800D379C 000D059C 7C 64 1B 79 */ or. r4, r3, r3 -/* 800D37A0 000D05A0 90 01 00 14 */ stw r0, 0x14(r1) -/* 800D37A4 000D05A4 41 82 00 0C */ beq lbl_800D37B0 -/* 800D37A8 000D05A8 80 6D 92 18 */ lwz r3, the_heap-_SDA_BASE_(r13) -/* 800D37AC 000D05AC 48 0F E7 51 */ bl func_801D1EFC -lbl_800D37B0: -/* 800D37B0 000D05B0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800D37B4 000D05B4 7C 08 03 A6 */ mtlr r0 -/* 800D37B8 000D05B8 38 21 00 10 */ addi r1, r1, 0x10 -/* 800D37BC 000D05BC 4E 80 00 20 */ blr - -_rwDolphinHeapFree__FPv: -/* 800D37C0 000D05C0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800D37C4 000D05C4 7C 08 02 A6 */ mflr r0 -/* 800D37C8 000D05C8 90 01 00 14 */ stw r0, 0x14(r1) -/* 800D37CC 000D05CC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800D37D0 000D05D0 7C 7F 1B 78 */ mr r31, r3 -/* 800D37D4 000D05D4 80 0D 83 50 */ lwz r0, bad_val-_SDA_BASE_(r13) -/* 800D37D8 000D05D8 7C 1F 00 40 */ cmplw r31, r0 -/* 800D37DC 000D05DC 40 82 00 10 */ bne lbl_800D37EC -/* 800D37E0 000D05E0 38 60 00 00 */ li r3, 0 -/* 800D37E4 000D05E4 38 80 00 00 */ li r4, 0 -/* 800D37E8 000D05E8 4B FF FF 55 */ bl mem_null -lbl_800D37EC: -/* 800D37EC 000D05EC 28 1F 00 00 */ cmplwi r31, 0 -/* 800D37F0 000D05F0 41 82 00 3C */ beq lbl_800D382C -/* 800D37F4 000D05F4 80 7F FF FC */ lwz r3, -4(r31) -/* 800D37F8 000D05F8 3C 03 21 53 */ addis r0, r3, 0x2153 -/* 800D37FC 000D05FC 28 00 BE EF */ cmplwi r0, 0xbeef -/* 800D3800 000D0600 40 82 00 10 */ bne lbl_800D3810 -/* 800D3804 000D0604 38 7F FF E0 */ addi r3, r31, -32 -/* 800D3808 000D0608 4B FF FF 8D */ bl free -/* 800D380C 000D060C 48 00 00 20 */ b lbl_800D382C -lbl_800D3810: -/* 800D3810 000D0610 4B FF FF 1D */ bl null_func__Fv -/* 800D3814 000D0614 80 6D 93 24 */ lwz r3, gEmergencyMemLevel-_SDA_BASE_(r13) -/* 800D3818 000D0618 2C 03 00 00 */ cmpwi r3, 0 -/* 800D381C 000D061C 41 82 00 10 */ beq lbl_800D382C -/* 800D3820 000D0620 4B F6 03 B5 */ bl xMemPopBase__Fi -/* 800D3824 000D0624 38 00 00 00 */ li r0, 0 -/* 800D3828 000D0628 90 0D 93 24 */ stw r0, gEmergencyMemLevel-_SDA_BASE_(r13) -lbl_800D382C: -/* 800D382C 000D062C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800D3830 000D0630 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800D3834 000D0634 7C 08 03 A6 */ mtlr r0 -/* 800D3838 000D0638 38 21 00 10 */ addi r1, r1, 0x10 -/* 800D383C 000D063C 4E 80 00 20 */ blr - _rwDolphinHeapAlloc__FUl: /* 800D3840 000D0640 94 21 FF F0 */ stwu r1, -0x10(r1) /* 800D3844 000D0644 7C 08 02 A6 */ mflr r0 diff --git a/asm/Core/p2/iTRC.s b/asm/Core/p2/iTRC.s index 6faaecf1b..92cc66166 100644 --- a/asm/Core/p2/iTRC.s +++ b/asm/Core/p2/iTRC.s @@ -16,13 +16,13 @@ Init__7ROMFontFv: /* 80180054 0017CE54 3C 80 00 12 */ lis r4, 0x00120F00@ha /* 80180058 0017CE58 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 8018005C 0017CE5C 38 84 0F 00 */ addi r4, r4, 0x00120F00@l -/* 80180060 0017CE60 48 05 1D A1 */ bl func_801D1E00 +/* 80180060 0017CE60 48 05 1D A1 */ bl OSAllocFromHeap /* 80180064 0017CE64 48 00 00 14 */ b lbl_80180078 lbl_80180068: /* 80180068 0017CE68 3C 80 00 02 */ lis r4, 0x00020120@ha /* 8018006C 0017CE6C 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 80180070 0017CE70 38 84 01 20 */ addi r4, r4, 0x00020120@l -/* 80180074 0017CE74 48 05 1D 8D */ bl func_801D1E00 +/* 80180074 0017CE74 48 05 1D 8D */ bl OSAllocFromHeap lbl_80180078: /* 80180078 0017CE78 90 6D 97 F0 */ stw r3, mFontData__7ROMFont-_SDA_BASE_(r13) /* 8018007C 0017CE7C 80 6D 97 F0 */ lwz r3, mFontData__7ROMFont-_SDA_BASE_(r13) diff --git a/asm/Core/p2/isavegame.s b/asm/Core/p2/isavegame.s index e534f1a73..a643b0866 100644 --- a/asm/Core/p2/isavegame.s +++ b/asm/Core/p2/isavegame.s @@ -2261,10 +2261,10 @@ iSG_discard_icondata__Fv: /* 800CE478 000CB278 90 01 00 14 */ stw r0, 0x14(r1) /* 800CE47C 000CB27C 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 800CE480 000CB280 80 8D 92 8C */ lwz r4, lbl_803CBB8C-_SDA_BASE_(r13) -/* 800CE484 000CB284 48 10 3A 79 */ bl func_801D1EFC +/* 800CE484 000CB284 48 10 3A 79 */ bl OSFreeToHeap /* 800CE488 000CB288 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 800CE48C 000CB28C 80 8D 92 90 */ lwz r4, lbl_803CBB90-_SDA_BASE_(r13) -/* 800CE490 000CB290 48 10 3A 6D */ bl func_801D1EFC +/* 800CE490 000CB290 48 10 3A 6D */ bl OSFreeToHeap /* 800CE494 000CB294 38 00 00 00 */ li r0, 0 /* 800CE498 000CB298 90 0D 92 8C */ stw r0, lbl_803CBB8C-_SDA_BASE_(r13) /* 800CE49C 000CB29C 90 0D 92 94 */ stw r0, lbl_803CBB94-_SDA_BASE_(r13) diff --git a/asm/bink/bink.s b/asm/bink/bink.s index a1a2f824c..b821bceec 100644 --- a/asm/bink/bink.s +++ b/asm/bink/bink.s @@ -222,7 +222,7 @@ radmalloc: lbl_80196B74: /* 80196B74 00193974 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 80196B78 00193978 7F E4 FB 78 */ mr r4, r31 -/* 80196B7C 0019397C 48 03 B2 85 */ bl func_801D1E00 +/* 80196B7C 0019397C 48 03 B2 85 */ bl OSAllocFromHeap /* 80196B80 00193980 7C 63 1B 79 */ or. r3, r3, r3 /* 80196B84 00193984 40 82 00 0C */ bne lbl_80196B90 lbl_80196B88: @@ -268,7 +268,7 @@ lbl_80196C08: /* 80196C08 00193A08 88 89 FF FF */ lbz r4, -1(r9) /* 80196C0C 00193A0C 80 6D 86 40 */ lwz r3, lbl_803CAF40-_SDA_BASE_(r13) /* 80196C10 00193A10 7C 84 48 50 */ subf r4, r4, r9 -/* 80196C14 00193A14 48 03 B2 E9 */ bl func_801D1EFC +/* 80196C14 00193A14 48 03 B2 E9 */ bl OSFreeToHeap lbl_80196C18: /* 80196C18 00193A18 80 01 00 0C */ lwz r0, 0xc(r1) /* 80196C1C 00193A1C 7C 08 03 A6 */ mtlr r0 diff --git a/asm/dolphin/dolphin.s b/asm/dolphin/dolphin.s index e9a079f75..c24a1f616 100644 --- a/asm/dolphin/dolphin.s +++ b/asm/dolphin/dolphin.s @@ -32856,8 +32856,8 @@ lbl_801D1DF8: /* 801D1DF8 001CEBF8 7C 83 23 78 */ mr r3, r4 /* 801D1DFC 001CEBFC 4E 80 00 20 */ blr -.global func_801D1E00 -func_801D1E00: +.global OSAllocFromHeap +OSAllocFromHeap: /* 801D1E00 001CEC00 1C 03 00 0C */ mulli r0, r3, 0xc /* 801D1E04 001CEC04 80 6D 9C 48 */ lwz r3, lbl_803CC548-_SDA_BASE_(r13) /* 801D1E08 001CEC08 7C A3 02 14 */ add r5, r3, r0 @@ -32934,8 +32934,8 @@ lbl_801D1EF0: /* 801D1EF4 001CECF4 38 66 00 20 */ addi r3, r6, 0x20 /* 801D1EF8 001CECF8 4E 80 00 20 */ blr -.global func_801D1EFC -func_801D1EFC: +.global OSFreeToHeap +OSFreeToHeap: /* 801D1EFC 001CECFC 7C 08 02 A6 */ mflr r0 /* 801D1F00 001CED00 38 C4 FF E0 */ addi r6, r4, -32 /* 801D1F04 001CED04 90 01 00 04 */ stw r0, 4(r1) diff --git a/include/dolphin/dolphin.h b/include/dolphin/dolphin.h index 0b4b4be32..0cc09afc3 100644 --- a/include/dolphin/dolphin.h +++ b/include/dolphin/dolphin.h @@ -4,4 +4,10 @@ #include "dolphin/types.h" #include "dolphin/gx.h" +extern "C" { +void OSPanic(int8* param_1, uint32 param_2, int8* param_3); +void* OSAllocFromHeap(void* handle_t, uint32 size_t); +void OSFreeToHeap(void* handle_t, void* param_2); +} + #endif \ No newline at end of file diff --git a/src/Core/p2/iSystem.cpp b/src/Core/p2/iSystem.cpp index bc83d50dc..e3a3c6e03 100644 --- a/src/Core/p2/iSystem.cpp +++ b/src/Core/p2/iSystem.cpp @@ -2,6 +2,26 @@ #include +#include +#include + +#include "../x/xDebug.h" +#include "../x/xMath.h" +#include "../x/xSnd.h" +#include "../x/xPad.h" +#include "../x/xMemMgr.h" + +#include "iSystem.h" +#include "iFile.h" +#include "iTime.h" + +extern uint32 mem_base_alloc; +extern uint32 add; +extern uint32 size; +extern int32 gEmergencyMemLevel; +extern void* the_heap; +extern void* bad_val; + // func_800D30B4 #pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "psGetMemoryFunctions__Fv") @@ -23,6 +43,20 @@ // func_800D3364 #pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "iSystemInit__FUi") +/* +void iSystemExit() +{ + xDebugExit(); + xMathExit(); + RenderWareExit(); + xSndExit(); + xPadKill(); + iFileExit(); + iTimeExit(); + xMemExit(); +} +*/ + // func_800D344C #pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "iSystemExit__Fv") @@ -32,26 +66,81 @@ // func_800D3544 #pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "RenderWareInit__Fv") -// func_800D363C -#pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "RenderWareExit__Fv") +int32 RenderWareExit() +{ + RwEngineStop(); + RwEngineClose(); + RwEngineTerm(); +} // func_800D3664 #pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "TextureRead__FPCcPCc") -// func_800D372C -#pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "null_func__Fv") - -// func_800D373C -#pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "mem_null") - -// func_800D3748 -#pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "malloc") - -// func_800D3794 -#pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "free") - -// func_800D37C0 -#pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "_rwDolphinHeapFree__FPv") +void null_func() +{ + mem_base_alloc += 4; +} + +extern "C" { +void mem_null(uint32 param_1, uint32 param_2) +{ + add = param_1; + size = param_2; +} + +void* malloc(uint32 __size) +{ + if ((int32)__size <= 0) + { + return NULL; + } + + void* result = OSAllocFromHeap(the_heap, __size); + + if (result == NULL) + { + null_func(); + } + + return result; +} + +void free(void* __ptr) +{ + if (__ptr != NULL) + { + OSFreeToHeap(the_heap, __ptr); + } +} +} + +void _rwDolphinHeapFree(void* __ptr) +{ + if (__ptr == bad_val) + { + mem_null(0, 0); + } + if (__ptr != NULL) + { + // TODO: clear this up + // some number is compared against 0xbeef in the assembly. + // 0xbeef was probably a hardcoded constant Heavy iron used. + // if (*(uint32*)((int32)__ptr + -4) + 0x2153 == 0xbeef) + if (*(int32*)((int32)__ptr + -4) == -0x21524111) + { + free((void*)((int32)__ptr - 32)); + } + else + { + null_func(); + if (gEmergencyMemLevel != 0) + { + xMemPopBase(gEmergencyMemLevel); + gEmergencyMemLevel = 0; + } + } + } +} // func_800D3840 #pragma GLOBAL_ASM("asm/Core/p2/iSystem.s", "_rwDolphinHeapAlloc__FUl") diff --git a/src/Core/x/xMemMgr.h b/src/Core/x/xMemMgr.h index 3bc34cee3..991312f44 100644 --- a/src/Core/x/xMemMgr.h +++ b/src/Core/x/xMemMgr.h @@ -21,6 +21,8 @@ struct xMemPool extern uint32 gActiveHeap; +void xMemExit(); +int32 xMemPopBase(int32 depth); void* xMemGrowAlloc(uint32 heapID, uint32 size); void* xMemAlloc(uint32 heapID, uint32 size, int32 align); void xMemPoolSetup(xMemPool* pool, void* buffer, uint32 nextOffset, uint32 flags,