mirror of https://github.com/zeldaret/tmc.git
Match zFree
This commit is contained in:
parent
1c970613ec
commit
5ad9b06c48
|
|
@ -1,58 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
ldr r3, _0801DA44 @ =gzHeap
|
||||
subs r1, r0, r3
|
||||
ldr r0, _0801DA48 @ =0x00000FFF
|
||||
cmp r1, r0
|
||||
bhi _0801DA74
|
||||
adds r4, r3, #0
|
||||
ldrh r5, [r4]
|
||||
adds r4, #2
|
||||
movs r2, #0
|
||||
cmp r2, r5
|
||||
bhs _0801DA74
|
||||
ldrh r0, [r4]
|
||||
cmp r0, r1
|
||||
bne _0801DA4C
|
||||
lsls r0, r5, #2
|
||||
subs r1, r3, #2
|
||||
adds r0, r0, r1
|
||||
ldrh r1, [r0]
|
||||
strh r1, [r4]
|
||||
strh r2, [r0]
|
||||
adds r0, #2
|
||||
ldrh r1, [r0]
|
||||
strh r1, [r4, #2]
|
||||
strh r2, [r0]
|
||||
subs r0, r5, #1
|
||||
strh r0, [r3]
|
||||
b _0801DA74
|
||||
.align 2, 0
|
||||
_0801DA44: .4byte gzHeap
|
||||
_0801DA48: .4byte 0x00000FFF
|
||||
_0801DA4C:
|
||||
adds r4, #4
|
||||
adds r2, #1
|
||||
cmp r2, r5
|
||||
bhs _0801DA74
|
||||
ldrh r0, [r4]
|
||||
cmp r0, r1
|
||||
bne _0801DA4C
|
||||
lsls r1, r5, #2
|
||||
ldr r3, _0801DA78 @ =gUnk_0203553E
|
||||
adds r1, r1, r3
|
||||
ldrh r0, [r1]
|
||||
strh r0, [r4]
|
||||
movs r2, #0
|
||||
strh r2, [r1]
|
||||
adds r1, #2
|
||||
ldrh r0, [r1]
|
||||
strh r0, [r4, #2]
|
||||
strh r2, [r1]
|
||||
subs r0, r5, #1
|
||||
strh r0, [r3, #2]
|
||||
_0801DA74:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0801DA78: .4byte gUnk_0203553E
|
||||
.syntax divided
|
||||
|
|
@ -127,7 +127,6 @@ SECTIONS {
|
|||
. = 0x000354B0; gUnk_020354B0 = .;
|
||||
. = 0x000354B4; gManagerCount = .;
|
||||
. = 0x000354C0; gUnk_020354C0 = .;
|
||||
. = 0x0003553E; gUnk_0203553E = .;
|
||||
. = 0x00035540; gzHeap = .;
|
||||
. = 0x00035542; gUnk_02035542 = .;
|
||||
. = 0x00036540; gUnk_02036540 = .;
|
||||
|
|
|
|||
26
src/common.c
26
src/common.c
|
|
@ -310,7 +310,31 @@ void sub_0801D898(void* dest, void* src, u32 word, u32 size) {
|
|||
|
||||
ASM_FUNC("asm/non_matching/common/zMalloc.inc", void* zMalloc(u32 size));
|
||||
|
||||
ASM_FUNC("asm/non_matching/common/zFree.inc", void zFree(void* ptr));
|
||||
void zFree(void* ptr) {
|
||||
u32 uVar1;
|
||||
u32 i;
|
||||
u16* puVar3;
|
||||
s32 uVar5;
|
||||
u16* ptr2;
|
||||
|
||||
uVar1 = (int)ptr - (int)gzHeap;
|
||||
if (uVar1 < 0x1000) {
|
||||
puVar3 = (u16*)gzHeap;
|
||||
uVar5 = *puVar3++;
|
||||
|
||||
for (i = 0; i < uVar5; puVar3 += 2, i++) {
|
||||
if (*puVar3 == uVar1) {
|
||||
ptr2 = &((u16*)(gzHeap - 2))[uVar5 * 2];
|
||||
*puVar3 = *ptr2;
|
||||
*ptr2++ = 0;
|
||||
*(puVar3 + 1) = *ptr2;
|
||||
*ptr2 = 0;
|
||||
*(u16*)(gzHeap) = uVar5 - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void zMallocInit(void) {
|
||||
MemClear(gzHeap, sizeof(gzHeap));
|
||||
|
|
|
|||
Loading…
Reference in New Issue