From c2a33838696e03408e9c2627dfda83fe4acbc083 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 12 Oct 2020 18:45:23 +1000 Subject: [PATCH] Decompile memInit --- src/include/lib/lib_121e0.h | 6 +- src/include/types.h | 10 +-- src/lib/lib_121e0.c | 122 ++++++++++++++---------------------- src/lib/main.c | 4 +- 4 files changed, 56 insertions(+), 86 deletions(-) diff --git a/src/include/lib/lib_121e0.h b/src/include/lib/lib_121e0.h index dab690865..44f907809 100644 --- a/src/include/lib/lib_121e0.h +++ b/src/include/lib/lib_121e0.h @@ -4,13 +4,13 @@ #include "types.h" void func000121e0(void); -void func000121e8(u32 arg0, u32 arg1); +void memInit(u32 heapstart, u32 heaplen); u32 func000122e0(void); -void *func00012324(void); +u32 func00012324(void); void *func00012354(struct memorypool *pools, u32 len, u8 pool); void *malloc(u32 len, u8 pool); void func00012430(void *ptr, u32 len, u8 pool); -s32 func000124d4(u8 poolnum, bool secondary); +u32 func000124d4(u8 poolnum, bool secondary); void func00012528(u8 pool); void func00012594(u8 pool); u32 func000125dc(void); diff --git a/src/include/types.h b/src/include/types.h index a2ee425e3..4b6b5eb7c 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5287,11 +5287,11 @@ struct gecreditsdata { }; struct memorypool { - /*0x00*/ void *unk00; - /*0x04*/ void *unk04; - /*0x08*/ void *unk08; - /*0x0c*/ void *unk0c; - /*0x10*/ void *unk10; + /*0x00*/ u32 unk00; + /*0x04*/ u32 unk04; + /*0x08*/ u32 unk08; + /*0x0c*/ u32 unk0c; + /*0x10*/ u32 unk10; }; struct invitem_weap { diff --git a/src/lib/lib_121e0.c b/src/lib/lib_121e0.c index 9e7c8dc2b..b38c6eeef 100644 --- a/src/lib/lib_121e0.c +++ b/src/lib/lib_121e0.c @@ -17,74 +17,44 @@ void func000121e0(void) // empty } -GLOBAL_ASM( -glabel func000121e8 -/* 121e8: 00803025 */ or $a2,$a0,$zero -/* 121ec: 27bdffe0 */ addiu $sp,$sp,-32 -/* 121f0: 3c04800a */ lui $a0,%hi(var8009946c) -/* 121f4: 3c03800a */ lui $v1,%hi(g_PrimaryMemoryPools) -/* 121f8: 3c02800a */ lui $v0,%hi(g_SecondaryMemoryPools) -/* 121fc: afbf0014 */ sw $ra,0x14($sp) -/* 12200: 244293b8 */ addiu $v0,$v0,%lo(g_SecondaryMemoryPools) -/* 12204: 24639300 */ addiu $v1,$v1,%lo(g_PrimaryMemoryPools) -/* 12208: 2484946c */ addiu $a0,$a0,%lo(var8009946c) -.L0001220c: -/* 1220c: 24420014 */ addiu $v0,$v0,0x14 -/* 12210: 0044082b */ sltu $at,$v0,$a0 -/* 12214: 24630014 */ addiu $v1,$v1,0x14 -/* 12218: ac60ffec */ sw $zero,-0x14($v1) -/* 1221c: ac60fff0 */ sw $zero,-0x10($v1) -/* 12220: ac60fff4 */ sw $zero,-0xc($v1) -/* 12224: ac60fffc */ sw $zero,-0x4($v1) -/* 12228: ac40ffec */ sw $zero,-0x14($v0) -/* 1222c: ac40fff0 */ sw $zero,-0x10($v0) -/* 12230: ac40fff4 */ sw $zero,-0xc($v0) -/* 12234: 1420fff5 */ bnez $at,.L0001220c -/* 12238: ac40fffc */ sw $zero,-0x4($v0) -/* 1223c: 3c02800a */ lui $v0,%hi(g_PrimaryMemoryPools) -/* 12240: 24429300 */ addiu $v0,$v0,%lo(g_PrimaryMemoryPools) -/* 12244: 00c51821 */ addu $v1,$a2,$a1 -/* 12248: ac460000 */ sw $a2,0x0($v0) -/* 1224c: ac430008 */ sw $v1,0x8($v0) -/* 12250: ac460078 */ sw $a2,0x78($v0) -/* 12254: ac430080 */ sw $v1,0x80($v0) -/* 12258: ac460050 */ sw $a2,0x50($v0) -/* 1225c: 0c0005b0 */ jal osGetMemSize -/* 12260: ac430058 */ sw $v1,0x58($v0) -/* 12264: 3c018000 */ lui $at,0x8000 -/* 12268: 00417021 */ addu $t6,$v0,$at -/* 1226c: 0c0005b0 */ jal osGetMemSize -/* 12270: afae0018 */ sw $t6,0x18($sp) -/* 12274: 3c010040 */ lui $at,0x40 -/* 12278: 34210001 */ ori $at,$at,0x1 -/* 1227c: 0041082a */ slt $at,$v0,$at -/* 12280: 14200007 */ bnez $at,.L000122a0 -/* 12284: 3c03800a */ lui $v1,%hi(g_PrimaryMemoryPools) -/* 12288: 8fb80018 */ lw $t8,0x18($sp) -/* 1228c: 3c02800a */ lui $v0,%hi(g_SecondaryMemoryPools) -/* 12290: 244293b8 */ addiu $v0,$v0,%lo(g_SecondaryMemoryPools) -/* 12294: 3c0f8040 */ lui $t7,0x8040 -/* 12298: ac4f0050 */ sw $t7,0x50($v0) -/* 1229c: ac580058 */ sw $t8,0x58($v0) -.L000122a0: -/* 122a0: 3c02800a */ lui $v0,%hi(g_SecondaryMemoryPools) -/* 122a4: 3c04800a */ lui $a0,%hi(var8009946c) -/* 122a8: 2484946c */ addiu $a0,$a0,%lo(var8009946c) -/* 122ac: 244293b8 */ addiu $v0,$v0,%lo(g_SecondaryMemoryPools) -/* 122b0: 24639300 */ addiu $v1,$v1,%lo(g_PrimaryMemoryPools) -.L000122b4: -/* 122b4: 8c790008 */ lw $t9,0x8($v1) -/* 122b8: 8c480008 */ lw $t0,0x8($v0) -/* 122bc: 24420014 */ addiu $v0,$v0,0x14 -/* 122c0: 24630014 */ addiu $v1,$v1,0x14 -/* 122c4: ac79fff8 */ sw $t9,-0x8($v1) -/* 122c8: 1444fffa */ bne $v0,$a0,.L000122b4 -/* 122cc: ac48fff8 */ sw $t0,-0x8($v0) -/* 122d0: 8fbf0014 */ lw $ra,0x14($sp) -/* 122d4: 27bd0020 */ addiu $sp,$sp,0x20 -/* 122d8: 03e00008 */ jr $ra -/* 122dc: 00000000 */ nop -); +void memInit(u32 heapstart, u32 heaplen) +{ + s32 i; + u32 extraend; + + // Memory pool 9 is not cleared? Doesn't appear to be used anyway. + // Maybe the array is only 0-8? + for (i = 0; i < 9; i++) { + g_PrimaryMemoryPools[i].unk00 = 0; + g_PrimaryMemoryPools[i].unk04 = 0; + g_PrimaryMemoryPools[i].unk08 = 0; + g_PrimaryMemoryPools[i].unk10 = 0; + + g_SecondaryMemoryPools[i].unk00 = 0; + g_SecondaryMemoryPools[i].unk04 = 0; + g_SecondaryMemoryPools[i].unk08 = 0; + g_SecondaryMemoryPools[i].unk10 = 0; + } + + g_PrimaryMemoryPools[0].unk00 = heapstart; + g_PrimaryMemoryPools[0].unk08 = heapstart + heaplen; + g_PrimaryMemoryPools[6].unk00 = heapstart; + g_PrimaryMemoryPools[6].unk08 = heapstart + heaplen; + g_PrimaryMemoryPools[4].unk00 = heapstart; + g_PrimaryMemoryPools[4].unk08 = heapstart + heaplen; + + extraend = 0x80000000 + osGetMemSize(); + + if (osGetMemSize() > 4 * 1024 * 1024) { + g_SecondaryMemoryPools[4].unk00 = 0x80400000; + g_SecondaryMemoryPools[4].unk08 = extraend; + } + + for (i = 0; i < 9; i++) { + g_PrimaryMemoryPools[i].unk0c = g_PrimaryMemoryPools[i].unk08; + g_SecondaryMemoryPools[i].unk0c = g_SecondaryMemoryPools[i].unk08; + } +} u32 func000122e0(void) { @@ -99,9 +69,9 @@ u32 func000122e0(void) return free; } -void *func00012324(void) +u32 func00012324(void) { - void *addr; + u32 addr; if (IS4MB()) { addr = g_PrimaryMemoryPools[4].unk04; @@ -215,7 +185,7 @@ void func000124cc(void) // empty } -s32 func000124d4(u8 poolnum, bool secondary) +u32 func000124d4(u8 poolnum, bool secondary) { struct memorypool *pool; @@ -225,7 +195,7 @@ s32 func000124d4(u8 poolnum, bool secondary) pool = &g_SecondaryMemoryPools[poolnum]; } - return (u32)pool->unk08 - (u32)pool->unk04; + return pool->unk08 - pool->unk04; } /** @@ -241,14 +211,14 @@ void func00012528(u8 pool) g_PrimaryMemoryPools[pool].unk04 = g_PrimaryMemoryPools[pool].unk00; g_SecondaryMemoryPools[pool].unk04 = g_SecondaryMemoryPools[pool].unk00; - g_PrimaryMemoryPools[pool].unk10 = NULL; - g_SecondaryMemoryPools[pool].unk10 = NULL; + g_PrimaryMemoryPools[pool].unk10 = 0; + g_SecondaryMemoryPools[pool].unk10 = 0; } void func00012594(u8 pool) { - g_PrimaryMemoryPools[pool].unk04 = NULL; - g_SecondaryMemoryPools[pool].unk04 = NULL; + g_PrimaryMemoryPools[pool].unk04 = 0; + g_SecondaryMemoryPools[pool].unk04 = 0; g_PrimaryMemoryPools[pool].unk08 = g_PrimaryMemoryPools[pool].unk0c; g_SecondaryMemoryPools[pool].unk08 = g_SecondaryMemoryPools[pool].unk0c; } diff --git a/src/lib/main.c b/src/lib/main.c index 96ec1b201..3d62a9211 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -509,7 +509,7 @@ glabel mainInit /* d994: 8c630b00 */ lw $v1,%lo(var80090b00)($v1) /* d998: 3c018000 */ lui $at,0x8000 /* d99c: 00412025 */ or $a0,$v0,$at -/* d9a0: 0c00487a */ jal func000121e8 +/* d9a0: 0c00487a */ jal memInit /* d9a4: 00642823 */ subu $a1,$v1,$a0 /* d9a8: 0c00494a */ jal func00012528 /* d9ac: 24040008 */ addiu $a0,$zero,0x8 @@ -762,7 +762,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400"; // // uVar2 = osVirtualToPhysical(&_gvarsSegmentEnd) | 0x80000000; // tmp = var80090b00; -// func000121e8(uVar2, tmp - uVar2); +// memInit(uVar2, tmp - uVar2); // // func00012528(8); // func00012528(6);