mirror of
https://github.com/zeldaret/st
synced 2026-05-29 08:42:59 -04:00
find and start new/delete operators
This commit is contained in:
@@ -601,13 +601,13 @@ func_02011c04 kind:function(arm,size=0x40) addr:0x02011c04
|
||||
func_02011c44 kind:function(arm,size=0x24) addr:0x02011c44
|
||||
func_02011c68 kind:function(arm,size=0x138) addr:0x02011c68
|
||||
func_02011da0 kind:function(arm,size=0x70) addr:0x02011da0
|
||||
func_02011e10 kind:function(arm,size=0x94) addr:0x02011e10
|
||||
func_02011ea4 kind:function(arm,size=0x6c) addr:0x02011ea4
|
||||
func_02011f10 kind:function(arm,size=0x20) addr:0x02011f10
|
||||
func_02011f30 kind:function(arm,size=0xc) addr:0x02011f30
|
||||
func_02011f3c kind:function(arm,size=0xb8) addr:0x02011f3c
|
||||
func_02011ff4 kind:function(arm,size=0xc) addr:0x02011ff4
|
||||
func_02012000 kind:function(arm,size=0xc) addr:0x02012000
|
||||
_Z6SysNewP18UnkStruct_02011e10ii kind:function(arm,size=0x94) addr:0x02011e10
|
||||
_Z9SysDeletePv kind:function(arm,size=0x6c) addr:0x02011ea4
|
||||
_Z13func_02011f10i kind:function(arm,size=0x20) addr:0x02011f10
|
||||
_Z13func_02011f30i kind:function(arm,size=0xc) addr:0x02011f30
|
||||
_ZN9SysObjectnwEmjj kind:function(arm,size=0xb8) addr:0x02011f3c
|
||||
_ZN9SysObjectdlEPv kind:function(arm,size=0xc) addr:0x02011ff4
|
||||
_ZN9SysObjectdaEPv kind:function(arm,size=0xc) addr:0x02012000
|
||||
func_0201200c kind:function(arm,size=0x15c) addr:0x0201200c
|
||||
func_02012168 kind:function(arm,size=0x198) addr:0x02012168
|
||||
func_02012300 kind:function(arm,size=0x3c) addr:0x02012300
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
class SysFault {
|
||||
public:
|
||||
void func_020125a4(char* file, u16 line, char* msg, ...);
|
||||
};
|
||||
|
||||
extern SysFault data_02049984;
|
||||
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
typedef u32 UnkId;
|
||||
enum __UnkId {
|
||||
UnkId_EXPH = 'EXPH',
|
||||
UnkId_FRMH = 'FRMH',
|
||||
UnkId_UNTH = 'UNTH',
|
||||
UnkId_UNSH = 'UNSH',
|
||||
};
|
||||
|
||||
struct UnkStruct_02011e10 {
|
||||
/* 00 */ UnkId mId;
|
||||
/* 04 */ unk8 mUnk_04[0x28];
|
||||
/* 2C */
|
||||
};
|
||||
|
||||
void* SysNew(UnkStruct_02011e10* param1, s32 length, s32 param3);
|
||||
void SysDelete(void* ptr);
|
||||
void* func_02011f10(s32 length);
|
||||
void* func_02011f30(s32 length);
|
||||
|
||||
class SysObject {
|
||||
public:
|
||||
static void* operator new(unsigned long length, u32 id, u32 idLength);
|
||||
static void* operator new[](unsigned long length, u32* id, u32 idLength);
|
||||
static void operator delete(void* ptr);
|
||||
static void operator delete[](void* ptr);
|
||||
};
|
||||
@@ -0,0 +1,102 @@
|
||||
#include "System/SysNew.hpp"
|
||||
#include "System/SysFault.hpp"
|
||||
#include "global.h"
|
||||
|
||||
extern "C" {
|
||||
void* func_02001654(void);
|
||||
void* func_020145b0(UnkId*, s32);
|
||||
void* func_020010c0(void);
|
||||
void* func_02001308(void);
|
||||
UnkId* func_02001488(void);
|
||||
UnkId* func_02014704(void);
|
||||
UnkId* func_020011c8(UnkId*, void*);
|
||||
UnkId* func_02014630(UnkId*, void*);
|
||||
UnkId* func_02001684(UnkId*, void*);
|
||||
void func_020011f4(void*);
|
||||
}
|
||||
extern char* data_0204372c[];
|
||||
extern UnkStruct_02011e10* data_0204999c[4];
|
||||
|
||||
// non-matching
|
||||
ARM void* SysNew(UnkStruct_02011e10* param1, s32 length, s32 param3) {
|
||||
void* newPtr = NULL;
|
||||
void* ret;
|
||||
|
||||
switch (param1->mId) {
|
||||
case UnkId_EXPH:
|
||||
newPtr = func_020010c0();
|
||||
break;
|
||||
case UnkId_FRMH:
|
||||
newPtr = func_02001308();
|
||||
break;
|
||||
case UnkId_UNTH:
|
||||
newPtr = func_02001654();
|
||||
break;
|
||||
case UnkId_UNSH:
|
||||
newPtr = func_020145b0(func_02014704(), length);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return newPtr;
|
||||
}
|
||||
|
||||
ARM void SysDelete(void* ptr) {
|
||||
UnkId* pUnkId;
|
||||
|
||||
if (ptr != NULL) {
|
||||
pUnkId = func_02001488();
|
||||
|
||||
switch (*pUnkId) {
|
||||
case UnkId_EXPH:
|
||||
func_020011c8(pUnkId, ptr);
|
||||
break;
|
||||
case UnkId_UNTH:
|
||||
func_02001684(pUnkId, ptr);
|
||||
break;
|
||||
case UnkId_UNSH:
|
||||
func_02014630(func_02014704(), ptr);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ARM void* func_02011f10(s32 length) { return SysNew(data_0204999c[1], length, 4); }
|
||||
|
||||
ARM void* func_02011f30(s32 length) { return func_02011f10(length); }
|
||||
|
||||
// non-matching
|
||||
ARM void* SysObject::operator new(unsigned long length, u32 id, u32 idLength) {
|
||||
void* pvVar1;
|
||||
char* uVar2;
|
||||
u16 line;
|
||||
char* uVar4;
|
||||
UnkStruct_02011e10* pUVar5;
|
||||
|
||||
pUVar5 = data_0204999c[id];
|
||||
pvVar1 = SysNew(pUVar5, length, idLength);
|
||||
|
||||
if (pvVar1 == NULL) {
|
||||
if (id == 1) {
|
||||
func_020011f4(pUVar5);
|
||||
uVar2 = data_0204372c[id];
|
||||
uVar4 = "%sノメモリガタリマセン.\nサイズ=%d\nノコリ =%d";
|
||||
line = 183;
|
||||
} else if (id == 0) {
|
||||
uVar2 = data_0204372c[id];
|
||||
uVar4 = "%sノメモリガタリマセン.\nサイズ=%d";
|
||||
line = 187;
|
||||
}
|
||||
|
||||
data_02049984.func_020125a4(__FILE__, line, uVar4, uVar2, length);
|
||||
}
|
||||
|
||||
return pvVar1;
|
||||
}
|
||||
|
||||
ARM void SysObject::operator delete(void* ptr) { SysDelete(ptr); }
|
||||
|
||||
ARM void SysObject::operator delete[](void* ptr) { SysDelete(ptr); }
|
||||
Reference in New Issue
Block a user