From 8f03da4a806296c3caf2db71919b5c73c9ac9d24 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 29 Oct 2021 18:23:44 +1000 Subject: [PATCH] Decompile vmPrintStatsIfEnabled --- ld/gamefiles.ntsc-beta.inc | 2 + ld/gamefiles.ntsc-final.inc | 2 + ld/gamefiles.pal-final.inc | 2 + src/game/game_19aa80.c | 113 -------------------------------- src/game/lv.c | 6 +- src/game/mplayer/mpaicommands.c | 46 +++++++++++++ src/game/vmstats.c | 33 ++++++++++ src/include/bss.h | 6 +- src/include/game/game_19aa80.h | 2 +- src/lib/vm.c | 18 ++--- 10 files changed, 101 insertions(+), 129 deletions(-) create mode 100644 src/game/mplayer/mpaicommands.c create mode 100644 src/game/vmstats.c diff --git a/ld/gamefiles.ntsc-beta.inc b/ld/gamefiles.ntsc-beta.inc index 09b397de2..9ad73a6c4 100644 --- a/ld/gamefiles.ntsc-beta.inc +++ b/ld/gamefiles.ntsc-beta.inc @@ -193,6 +193,8 @@ build/ROMID/game/game_197600.o (section); \ build/ROMID/game/game_197c00.o (section); \ build/ROMID/game/game_1999b0.o (section); \ + build/ROMID/game/mplayer/mpaicommands.o (section); \ + build/ROMID/game/vmstats.o (section); \ build/ROMID/game/game_19aa80.o (section); \ build/ROMID/game/training/training.o (section); \ build/ROMID/game/training/menus.o (section); \ diff --git a/ld/gamefiles.ntsc-final.inc b/ld/gamefiles.ntsc-final.inc index 5595cfdde..1e371e07c 100644 --- a/ld/gamefiles.ntsc-final.inc +++ b/ld/gamefiles.ntsc-final.inc @@ -192,6 +192,8 @@ build/ROMID/game/game_197600.o (section); \ build/ROMID/game/game_197c00.o (section); \ build/ROMID/game/game_1999b0.o (section); \ + build/ROMID/game/mplayer/mpaicommands.o (section); \ + build/ROMID/game/vmstats.o (section); \ build/ROMID/game/game_19aa80.o (section); \ build/ROMID/game/training/training.o (section); \ build/ROMID/game/training/menus.o (section); \ diff --git a/ld/gamefiles.pal-final.inc b/ld/gamefiles.pal-final.inc index 5595cfdde..1e371e07c 100644 --- a/ld/gamefiles.pal-final.inc +++ b/ld/gamefiles.pal-final.inc @@ -192,6 +192,8 @@ build/ROMID/game/game_197600.o (section); \ build/ROMID/game/game_197c00.o (section); \ build/ROMID/game/game_1999b0.o (section); \ + build/ROMID/game/mplayer/mpaicommands.o (section); \ + build/ROMID/game/vmstats.o (section); \ build/ROMID/game/game_19aa80.o (section); \ build/ROMID/game/training/training.o (section); \ build/ROMID/game/training/menus.o (section); \ diff --git a/src/game/game_19aa80.c b/src/game/game_19aa80.c index aa45e73dd..10247b9dc 100644 --- a/src/game/game_19aa80.c +++ b/src/game/game_19aa80.c @@ -58,119 +58,6 @@ struct challenge g_MpChallenges[NUM_CHALLENGES] = { { L_OPTIONS_435, MPCONFIG_CHALLENGE30 }, // "Challenge 30" }; -/** - * @cmd 0185 - */ -bool aiMpInitSimulants(void) -{ - mpInitSimulants(); - g_Vars.aioffset += 2; - return false; -} - -/** - * @cmd 0176 - */ -bool ai0176(void) -{ - u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - struct aibot *aibot; - - /** - * @bug: Missing return means a crash will occur if either of these are - * null. - */ - if (!g_Vars.chrdata || !g_Vars.chrdata->aibot) { - g_Vars.aioffset += 3; - //return false; - } - - aibot = g_Vars.chrdata->aibot; - - if (aibot->unk059 == 1) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); - aibot->unk059 = 0; - } else { - g_Vars.aioffset += 3; - } - - return false; -} - -#if VERSION >= VERSION_NTSC_1_0 -void func0f19ab40(void) -{ - if (g_Is4Mb) { - var80090af4 = 0; - var80090af8 = 0; - var80090afc = 0; - } -} -#else -const char var7f1b3750nb[] = "VM: Page Misses %d (%d Replaces)"; -const char var7f1b3774nb[] = "VM: TLB Misses %d"; -const char var7f1b3788nb[] = ""; -const char var7f1b378cnb[] = ""; - -GLOBAL_ASM( -glabel func0f19ab40 -/* f194b20: 3c0e8009 */ lui $t6,0x8009 -/* f194b24: 91ce30e0 */ lbu $t6,0x30e0($t6) -/* f194b28: 27bdff98 */ addiu $sp,$sp,-104 -/* f194b2c: afbf0014 */ sw $ra,0x14($sp) -/* f194b30: 11c0002b */ beqz $t6,.NB0f194be0 -/* f194b34: 3c0f8006 */ lui $t7,0x8006 -/* f194b38: 91efe710 */ lbu $t7,-0x18f0($t7) -/* f194b3c: 240400ff */ addiu $a0,$zero,0xff -/* f194b40: 240500ff */ addiu $a1,$zero,0xff -/* f194b44: 11e00020 */ beqz $t7,.NB0f194bc8 -/* f194b48: 240600ff */ addiu $a2,$zero,0xff -/* f194b4c: 0c005106 */ jal dhudSetFgColour -/* f194b50: 240700ff */ addiu $a3,$zero,0xff -/* f194b54: 00002025 */ or $a0,$zero,$zero -/* f194b58: 00002825 */ or $a1,$zero,$zero -/* f194b5c: 00003025 */ or $a2,$zero,$zero -/* f194b60: 0c005115 */ jal dhudSetBgColour -/* f194b64: 240700ff */ addiu $a3,$zero,0xff -/* f194b68: 3c057f1b */ lui $a1,0x7f1b -/* f194b6c: 3c068009 */ lui $a2,0x8009 -/* f194b70: 3c078009 */ lui $a3,0x8009 -/* f194b74: 8ce730ec */ lw $a3,0x30ec($a3) -/* f194b78: 8cc630e8 */ lw $a2,0x30e8($a2) -/* f194b7c: 24a53750 */ addiu $a1,$a1,0x3750 -/* f194b80: 0c004fc1 */ jal sprintf -/* f194b84: 27a40018 */ addiu $a0,$sp,0x18 -/* f194b88: 24040002 */ addiu $a0,$zero,0x2 -/* f194b8c: 0c0050df */ jal dhudSetPos -/* f194b90: 24050001 */ addiu $a1,$zero,0x1 -/* f194b94: 0c005175 */ jal dhudPrintString -/* f194b98: 27a40018 */ addiu $a0,$sp,0x18 -/* f194b9c: 3c057f1b */ lui $a1,0x7f1b -/* f194ba0: 3c068009 */ lui $a2,0x8009 -/* f194ba4: 8cc630e4 */ lw $a2,0x30e4($a2) -/* f194ba8: 24a53774 */ addiu $a1,$a1,0x3774 -/* f194bac: 0c004fc1 */ jal sprintf -/* f194bb0: 27a40018 */ addiu $a0,$sp,0x18 -/* f194bb4: 24040002 */ addiu $a0,$zero,0x2 -/* f194bb8: 0c0050df */ jal dhudSetPos -/* f194bbc: 24050002 */ addiu $a1,$zero,0x2 -/* f194bc0: 0c005175 */ jal dhudPrintString -/* f194bc4: 27a40018 */ addiu $a0,$sp,0x18 -.NB0f194bc8: -/* f194bc8: 3c018009 */ lui $at,0x8009 -/* f194bcc: ac2030e4 */ sw $zero,0x30e4($at) -/* f194bd0: 3c018009 */ lui $at,0x8009 -/* f194bd4: ac2030e8 */ sw $zero,0x30e8($at) -/* f194bd8: 3c018009 */ lui $at,0x8009 -/* f194bdc: ac2030ec */ sw $zero,0x30ec($at) -.NB0f194be0: -/* f194be0: 8fbf0014 */ lw $ra,0x14($sp) -/* f194be4: 27bd0068 */ addiu $sp,$sp,0x68 -/* f194be8: 03e00008 */ jr $ra -/* f194bec: 00000000 */ sll $zero,$zero,0x0 -); -#endif - GLOBAL_ASM( glabel func0f19ab70 /* f19ab70: 27bdfde8 */ addiu $sp,$sp,-536 diff --git a/src/game/lv.c b/src/game/lv.c index 74b765f67..1594aff2a 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -6984,7 +6984,7 @@ glabel var7f1b8ed0pf /* f16c7c8: 2415ffff */ li $s5,-1 /* f16c7cc: 56190004 */ bnel $s0,$t9,.PF0f16c7e0 /* f16c7d0: 8e8c006c */ lw $t4,0x6c($s4) -/* f16c7d4: 0fc66f10 */ jal func0f19ab40 +/* f16c7d4: 0fc66f10 */ jal vmPrintStatsIfEnabled /* f16c7d8: 00000000 */ nop /* f16c7dc: 8e8c006c */ lw $t4,0x6c($s4) .PF0f16c7e0: @@ -8253,7 +8253,7 @@ void lvTick(void) } if (IS4MB()) { - func0f19ab40(); + vmPrintStatsIfEnabled(); } for (j = 0; j < PLAYERCOUNT(); j++) { @@ -8624,7 +8624,7 @@ glabel lvTick /* f1667d4: 2415ffff */ addiu $s5,$zero,-1 /* f1667d8: 56180004 */ bnel $s0,$t8,.NB0f1667ec /* f1667dc: 8e99006c */ lw $t9,0x6c($s4) -/* f1667e0: 0fc652c8 */ jal func0f19ab40 +/* f1667e0: 0fc652c8 */ jal vmPrintStatsIfEnabled /* f1667e4: 00000000 */ sll $zero,$zero,0x0 /* f1667e8: 8e99006c */ lw $t9,0x6c($s4) .NB0f1667ec: diff --git a/src/game/mplayer/mpaicommands.c b/src/game/mplayer/mpaicommands.c new file mode 100644 index 000000000..3ef1f60e7 --- /dev/null +++ b/src/game/mplayer/mpaicommands.c @@ -0,0 +1,46 @@ +#include +#include "constants.h" +#include "game/chr/chrai.h" +#include "game/game_190260.h" +#include "bss.h" +#include "data.h" +#include "types.h" + +/** + * @cmd 0185 + */ +bool aiMpInitSimulants(void) +{ + mpInitSimulants(); + g_Vars.aioffset += 2; + return false; +} + +/** + * @cmd 0176 + */ +bool ai0176(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + struct aibot *aibot; + + /** + * @bug: Missing return means a crash will occur if either of these are + * null. + */ + if (!g_Vars.chrdata || !g_Vars.chrdata->aibot) { + g_Vars.aioffset += 3; + //return false; + } + + aibot = g_Vars.chrdata->aibot; + + if (aibot->unk059 == 1) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); + aibot->unk059 = 0; + } else { + g_Vars.aioffset += 3; + } + + return false; +} diff --git a/src/game/vmstats.c b/src/game/vmstats.c new file mode 100644 index 000000000..28b68782c --- /dev/null +++ b/src/game/vmstats.c @@ -0,0 +1,33 @@ +#include +#include "constants.h" +#include "bss.h" +#include "lib/debughud.h" +#include "lib/vm.h" +#include "data.h" +#include "types.h" + +void vmPrintStatsIfEnabled(void) +{ + char buffer[80]; + + if (g_Is4Mb) { +#if VERSION < VERSION_NTSC_1_0 + if (g_VmShowStats) { + dhudSetFgColour(0xff, 0xff, 0xff, 0xff); + dhudSetBgColour(0, 0, 0, 0xff); + + sprintf(buffer, "VM: Page Misses %d (%d Replaces)", g_VmNumPageMisses, g_VmNumPageReplaces); + dhudSetPos(2, 1); + dhudPrintString(buffer); + + sprintf(buffer, "VM: TLB Misses %d", g_VmNumTlbMisses); + dhudSetPos(2, 2); + dhudPrintString(buffer); + } +#endif + + g_VmNumTlbMisses = 0; + g_VmNumPageMisses = 0; + g_VmNumPageReplaces = 0; + } +} diff --git a/src/include/bss.h b/src/include/bss.h index da22932cb..118d3b31e 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -25,9 +25,9 @@ extern OSTimer var80090ab0; extern OSMesgQueue g_GbpakMesgQueue; extern OSMesg var80090ae8; extern u8 g_Is4Mb; -extern u32 var80090af4; -extern u32 var80090af8; -extern u32 var80090afc; +extern u32 g_VmNumTlbMisses; +extern u32 g_VmNumPageMisses; +extern u32 g_VmNumPageReplaces; extern u32 var80090b00; extern u32 var80090b04; extern u32 var80090b08; diff --git a/src/include/game/game_19aa80.h b/src/include/game/game_19aa80.h index 1a3735dc1..115fac994 100644 --- a/src/include/game/game_19aa80.h +++ b/src/include/game/game_19aa80.h @@ -24,7 +24,7 @@ char *mpGetCurrentChallengeDescription(void); char *mpconfigGetDescription(struct mpconfigfull *mpconfig); bool mpIsChallengeCompleteForEndscreen(void); bool aiMpInitSimulants(void); -void func0f19ab40(void); +void vmPrintStatsIfEnabled(void); bool mpIsChallengeAvailableToPlayer(s32 chrnum, s32 challengeindex); bool mpIsChallengeAvailableToAnyPlayer(s32 challengeindex); s32 mpGetNumAvailableChallenges(void); diff --git a/src/lib/vm.c b/src/lib/vm.c index e8ccd4196..bfbeceba1 100644 --- a/src/lib/vm.c +++ b/src/lib/vm.c @@ -9,9 +9,9 @@ #include "types.h" u8 g_Is4Mb; -u32 var80090af4; -u32 var80090af8; -u32 var80090afc; +u32 g_VmNumTlbMisses; +u32 g_VmNumPageMisses; +u32 g_VmNumPageReplaces; u32 var80090b00; u32 var80090b04; u32 var80090b08; @@ -285,12 +285,12 @@ glabel vmInit /* 748c: 1020ffef */ beqz $at,.L0000744c /* 7490: 26100001 */ addiu $s0,$s0,0x1 .L00007494: -/* 7494: 3c018009 */ lui $at,%hi(var80090af4) -/* 7498: ac200af4 */ sw $zero,%lo(var80090af4)($at) -/* 749c: 3c018009 */ lui $at,%hi(var80090af8) -/* 74a0: ac200af8 */ sw $zero,%lo(var80090af8)($at) -/* 74a4: 3c018009 */ lui $at,%hi(var80090afc) -/* 74a8: ac200afc */ sw $zero,%lo(var80090afc)($at) +/* 7494: 3c018009 */ lui $at,%hi(g_VmNumTlbMisses) +/* 7498: ac200af4 */ sw $zero,%lo(g_VmNumTlbMisses)($at) +/* 749c: 3c018009 */ lui $at,%hi(g_VmNumPageMisses) +/* 74a0: ac200af8 */ sw $zero,%lo(g_VmNumPageMisses)($at) +/* 74a4: 3c018009 */ lui $at,%hi(g_VmNumPageReplaces) +/* 74a8: ac200afc */ sw $zero,%lo(g_VmNumPageReplaces)($at) /* 74ac: 00002025 */ or $a0,$zero,$zero /* 74b0: 0c012054 */ jal osInvalICache /* 74b4: 24054000 */ addiu $a1,$zero,0x4000