From 1b58c34d27f3a454e22bab7c4948ed9d3f76a613 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 29 Oct 2019 23:24:14 +1000 Subject: [PATCH] Decompile func00001b98 --- ld/boot.ld | 11 ++++---- ld/game.ld | 2 +- ld/gamerodata.ld | 2 +- ld/gvars.ld | 2 +- ld/library.ld | 2 +- ld/setup.ld | 2 +- src/boot/boot.c | 53 ++++++++------------------------------- src/gvars/gvars.c | 15 +++++------ src/include/gvars/gvars.h | 2 ++ 9 files changed, 30 insertions(+), 61 deletions(-) diff --git a/ld/boot.ld b/ld/boot.ld index 29312c7c3..579b9c132 100644 --- a/ld/boot.ld +++ b/ld/boot.ld @@ -26,7 +26,11 @@ SECTIONS src/setup/setup_020df0.o (.data); } - .game 0x0f000000 : AT(SIZEOF(.boot) + SIZEOF(.library) + SIZEOF(.setup)) { + .gvars 0x8008ae20 : AT(SIZEOF(.boot) + SIZEOF(.library) + SIZEOF(.setup)) { + src/gvars/gvars.o (.bss); + } + + .game 0x0f000000 : AT(SIZEOF(.boot) + SIZEOF(.library) + SIZEOF(.setup) + SIZEOF(.gvars)) { src/game/game_000000.o (.text); src/game/chr/chrai.o (.text); src/game/chr/chraicommands.o (.text); @@ -43,11 +47,6 @@ SECTIONS src/game/game_0601b0.o (.rodata); } - .gvars 0x80099fc0 : { - src/gvars/gvars.o (.text); - src/gvars/gvars.o (.data); - } - /DISCARD/ : { * (.MIPS.abiflags); * (.options); diff --git a/ld/game.ld b/ld/game.ld index 12388af56..5f8cc082b 100644 --- a/ld/game.ld +++ b/ld/game.ld @@ -35,7 +35,7 @@ SECTIONS src/setup/setup_020df0.o (.data); } - .gvars 0x80099fc0 : AT(SIZEOF(.game) + SIZEOF(.gamerodata) + SIZEOF(.library) + SIZEOF(.setup)) { + .gvars 0x8008ae20 : AT(SIZEOF(.game) + SIZEOF(.gamerodata) + SIZEOF(.library) + SIZEOF(.setup)) { src/gvars/gvars.o (.text); src/gvars/gvars.o (.data); } diff --git a/ld/gamerodata.ld b/ld/gamerodata.ld index 54687ec60..fda3587ba 100644 --- a/ld/gamerodata.ld +++ b/ld/gamerodata.ld @@ -35,7 +35,7 @@ SECTIONS src/setup/setup_020df0.o (.data); } - .gvars 0x80099fc0 : AT(SIZEOF(.game) + SIZEOF(.gamerodata) + SIZEOF(.library) + SIZEOF(.setup)) { + .gvars 0x8008ae20 : AT(SIZEOF(.game) + SIZEOF(.gamerodata) + SIZEOF(.library) + SIZEOF(.setup)) { src/gvars/gvars.o (.text); src/gvars/gvars.o (.data); } diff --git a/ld/gvars.ld b/ld/gvars.ld index 3b3068621..816079450 100644 --- a/ld/gvars.ld +++ b/ld/gvars.ld @@ -3,7 +3,7 @@ OUTPUT_ARCH (mips) SECTIONS { - .gvars 0x80099fc0 : AT(0) { + .gvars 0x8008ae20 : AT(0) { src/gvars/gvars.o (.text); src/gvars/gvars.o (.data); } diff --git a/ld/library.ld b/ld/library.ld index 69fb0db8a..8e18d1432 100644 --- a/ld/library.ld +++ b/ld/library.ld @@ -28,7 +28,7 @@ SECTIONS src/game/game_0601b0.o (.data); } - .gvars 0x0e000000 : AT(SIZEOF(.library) + SIZEOF(.setup) + SIZEOF(.game)) { + .gvars 0x8008ae20 : AT(SIZEOF(.library) + SIZEOF(.setup) + SIZEOF(.game)) { src/gvars/gvars.o (.text); src/gvars/gvars.o (.data); } diff --git a/ld/setup.ld b/ld/setup.ld index 2db564a46..94c8a3ab5 100644 --- a/ld/setup.ld +++ b/ld/setup.ld @@ -28,7 +28,7 @@ SECTIONS src/game/game_0601b0.o (.data); } - .gvars 0x80099fc0 : AT(SIZEOF(.setup) + SIZEOF(.library) + SIZEOF(.game)) { + .gvars 0x8008ae20 : AT(SIZEOF(.setup) + SIZEOF(.library) + SIZEOF(.game)) { src/gvars/gvars.o (.text); src/gvars/gvars.o (.data); } diff --git a/src/boot/boot.c b/src/boot/boot.c index ea2ca8fb9..43f959dc5 100644 --- a/src/boot/boot.c +++ b/src/boot/boot.c @@ -1,5 +1,6 @@ #include #include "setup/setup_000000.h" +#include "gvars/gvars.h" GLOBAL_ASM( glabel func00001000 @@ -818,49 +819,15 @@ void func00001b40(void) } } -GLOBAL_ASM( -glabel func00001b98 -/* 1b98: 27bdffe8 */ addiu $sp,$sp,-24 -/* 1b9c: 308e000f */ andi $t6,$a0,0xf -/* 1ba0: 15c0001d */ bnez $t6,.L00001c18 -/* 1ba4: afbf0014 */ sw $ra,0x14($sp) -/* 1ba8: 3c0f8006 */ lui $t7,0x8006 -/* 1bac: 8defce68 */ lw $t7,-0x3198($t7) -/* 1bb0: 3c188006 */ lui $t8,0x8006 -/* 1bb4: 3c198006 */ lui $t9,0x8006 -/* 1bb8: 11e00004 */ beqz $t7,.L00001bcc -/* 1bbc: 00000000 */ sll $zero,$zero,0x0 -/* 1bc0: 8f18ce64 */ lw $t8,-0x319c($t8) -/* 1bc4: 17000004 */ bnez $t8,.L00001bd8 -/* 1bc8: 00000000 */ sll $zero,$zero,0x0 -.L00001bcc: -/* 1bcc: 8f39ce60 */ lw $t9,-0x31a0($t9) -/* 1bd0: 53200012 */ beqzl $t9,.L00001c1c -/* 1bd4: 8fbf0014 */ lw $ra,0x14($sp) -.L00001bd8: -/* 1bd8: 0c012144 */ jal 0x48510 -/* 1bdc: 00000000 */ sll $zero,$zero,0x0 -/* 1be0: 3c098006 */ lui $t1,0x8006 -/* 1be4: 8d29ce70 */ lw $t1,-0x3190($t1) -/* 1be8: 3c088006 */ lui $t0,0x8006 -/* 1bec: 8d08ce6c */ lw $t0,-0x3194($t0) -/* 1bf0: 00495023 */ subu $t2,$v0,$t1 -/* 1bf4: 3c04800a */ lui $a0,0x800a -/* 1bf8: 010a082b */ sltu $at,$t0,$t2 -/* 1bfc: 50200007 */ beqzl $at,.L00001c1c -/* 1c00: 8fbf0014 */ lw $ra,0x14($sp) -/* 1c04: 0c0033d5 */ jal 0xcf54 -/* 1c08: 8c84cac0 */ lw $a0,-0x3540($a0) -/* 1c0c: 3c04800a */ lui $a0,0x800a -/* 1c10: 0c0033d5 */ jal 0xcf54 -/* 1c14: 8c84cac4 */ lw $a0,-0x353c($a0) -.L00001c18: -/* 1c18: 8fbf0014 */ lw $ra,0x14($sp) -.L00001c1c: -/* 1c1c: 27bd0018 */ addiu $sp,$sp,0x18 -/* 1c20: 03e00008 */ jr $ra -/* 1c24: 00000000 */ sll $zero,$zero,0x0 -); +void func00001b98(u32 value) +{ + if ((value & 0xf) == 0 && ((var8005ce68 && var8005ce64) || var8005ce60)) { + if (func00048510() - var8005ce70 > var8005ce6c) { + func0000cf54(var8009cac0); + func0000cf54(var8009cac4); + } + } +} GLOBAL_ASM( glabel func00001c28 diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index a8cae12e9..8da2f22b2 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -1,17 +1,18 @@ #include #include "gvars/gvars.h" -/** - * This is a workaround for me not being to figure out why ld is ignoring the - * memory address location in game.ld. It puts gvars immediately after setup, - * which means it comes 0xf1a0 earlier than it should. So we pad it out here. - */ -u8 padding8009ae20[0xf1a0]; +// 8008ae20 +u8 padding8008ae20[0xf1a0]; // 80099fc0 struct g_vars g_Vars; // ends at 8009a6c8 -u8 padding8009a6c8[0x29fc]; +u8 padding8009a6c8[0x23f8]; + +u32 var8009cac0; +u32 var8009cac4; + +u8 padding8009cac8[0x5fc]; // 8009d0c4 s32 g_NumTags; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 281e8ff0b..69db4b0c6 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -474,6 +474,8 @@ extern struct g_vars g_Vars; extern s32 g_NumTags; extern struct tag **g_TagPtrs; +extern u32 var8009cac0; +extern u32 var8009cac4; extern u32 g_8009de24; extern u32 g_EepromFlags;