Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions asm/CodeWarrior/Runtime.s
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion asm/Core/p2/iFile.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion asm/Core/p2/iMemMgr.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion asm/Core/p2/iSnd.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
102 changes: 0 additions & 102 deletions asm/Core/p2/iSystem.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions asm/Core/p2/iTRC.s
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions asm/Core/p2/isavegame.s
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions asm/bink/bink.s
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions asm/dolphin/dolphin.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 6 additions & 0 deletions include/dolphin/dolphin.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
121 changes: 105 additions & 16 deletions src/Core/p2/iSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,26 @@

#include <types.h>

#include <dolphin.h>
#include <rwcore.h>

#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")

Expand All @@ -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")

Expand All @@ -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")
Expand Down
2 changes: 2 additions & 0 deletions src/Core/x/xMemMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down