From f262c23324168d11c5939a51408c38b5c8a641cc Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 30 Jan 2021 19:35:34 +1000 Subject: [PATCH] Decompile argsParseDebugArgs --- src/boot/init.c | 2 +- src/game/music.c | 8 +-- src/gvars/gvars.c | 2 +- src/include/game/data/data_000000.h | 2 +- src/include/gvars/gvars.h | 2 +- src/include/lib/lib_12dc0.h | 2 +- src/include/lib/lib_2fa00.h | 2 +- src/lib/lib_0e9d0.c | 42 +++++------ src/lib/lib_11420.c | 8 +-- src/lib/lib_12dc0.c | 108 ++++++++++------------------ src/lib/lib_2fa00.c | 2 +- src/lib/main.c | 4 +- 12 files changed, 76 insertions(+), 108 deletions(-) diff --git a/src/boot/init.c b/src/boot/init.c index 1f2d7ec8a..6ea96f5e1 100644 --- a/src/boot/init.c +++ b/src/boot/init.c @@ -570,7 +570,7 @@ void mainproc(void *arg) func00013710(); rmonCreateThread(); - if (func00012f30()) { + if (argsParseDebugArgs()) { osStopThread(NULL); } diff --git a/src/game/music.c b/src/game/music.c index 27d60f9dd..ebe65bbde 100644 --- a/src/game/music.c +++ b/src/game/music.c @@ -102,7 +102,7 @@ s32 func0f16d180(s32 tracktype) void musicStart(u32 tracktype, u32 tracknum, f32 arg2, u16 volume) { - if (var8005dda0 == 0) { + if (!g_Silent) { var800aa5d8[var800840c4].tracktype = tracktype; var800aa5d8[var800840c4].tracknum = tracknum; var800aa5d8[var800840c4].unk0c = arg2; @@ -117,7 +117,7 @@ void musicStart(u32 tracktype, u32 tracknum, f32 arg2, u16 volume) void musicEnd(s32 tracktype) { - if (var8005dda0 == 0) { + if (!g_Silent) { var800aa5d8[var800840c4].tracktype = tracktype; var800aa5d8[var800840c4].unk12 = 2; var800aa5d8[var800840c4].unk14 = var800840d4++; @@ -129,7 +129,7 @@ void musicEnd(s32 tracktype) void func0f16d2ac(s32 tracktype, f32 arg1, s32 arg2) { - if (var8005dda0 == 0) { + if (!g_Silent) { var800aa5d8[var800840c4].tracktype = tracktype; var800aa5d8[var800840c4].unk0c = arg1; var800aa5d8[var800840c4].unk08 = arg2; @@ -145,7 +145,7 @@ void func0f16d324(void) { s32 i; - if (var8005dda0 == 0) { + if (!g_Silent) { for (i = 0; i < 4; i++) { g_AudioXReasonsActive[i] = 0; var800aaa78[i] = 0; diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index fb9e39140..ce3f2d648 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -11847,7 +11847,7 @@ u32 var80099870 = 0; u32 var80099874 = 0; u32 var80099878 = 0; u32 var8009987c = 0; -char g_ArgString[120] = {0}; +u32 g_ArgBuffer[30] = {0}; u32 var800998f8 = 0; u32 var800998fc = 0; u32 var80099900 = 0; diff --git a/src/include/game/data/data_000000.h b/src/include/game/data/data_000000.h index c5d543f4d..5250e382e 100644 --- a/src/include/game/data/data_000000.h +++ b/src/include/game/data/data_000000.h @@ -103,7 +103,7 @@ extern u32 var8005dd1c; extern s32 g_MainStageNum; extern u32 var8005dd5c; extern u32 var8005dd7c; -extern u32 var8005dda0; +extern bool g_Silent; extern u32 var8005dda8; extern u32 var8005ddac; extern u32 var8005ddb4; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 7de63433b..8df498a9f 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -417,7 +417,7 @@ extern u32 var80099474; extern u32 var80099478; extern u32 var80099484; extern u32 var8009985c; -extern char g_ArgString[120]; +extern u32 g_ArgBuffer[30]; extern u32 var800998f8; extern u32 var80099900; extern u32 var80099a00; diff --git a/src/include/lib/lib_12dc0.h b/src/include/lib/lib_12dc0.h index dcade7974..83416422b 100644 --- a/src/include/lib/lib_12dc0.h +++ b/src/include/lib/lib_12dc0.h @@ -7,7 +7,7 @@ void rngSetSeed(u32 amount); u32 func00012e1c(u64 *value); char *argParseString(char *str); void argSetString(char *string); -s32 func00012f30(void); +s32 argsParseDebugArgs(void); char *argFindByPrefix(s32 occurrence, char *string); void argGetLevel(s32 *stagenum); u32 random(void); diff --git a/src/include/lib/lib_2fa00.h b/src/include/lib/lib_2fa00.h index 38de6f249..abed96b3d 100644 --- a/src/include/lib/lib_2fa00.h +++ b/src/include/lib/lib_2fa00.h @@ -4,7 +4,7 @@ #include "types.h" void rmonproc(); -u32 func0002fa08(void); +bool rmonIsDisabled(void); void func0002faa4(char *format, ...); #endif diff --git a/src/lib/lib_0e9d0.c b/src/lib/lib_0e9d0.c index 24aaad079..05305aa9e 100644 --- a/src/lib/lib_0e9d0.c +++ b/src/lib/lib_0e9d0.c @@ -46,7 +46,7 @@ const u32 var70053c94[] = {0x3eb33333}; const u32 var70053c98[] = {0x3f4ccccd}; const u32 var70053c9c[] = {0x00000000}; -u32 var8005dda0 = 0x00000000; +bool g_Silent = false; u32 var8005dda4 = 0x00000000; u32 var8005dda8 = 0x00000000; u32 var8005ddac = 0xffffffff; @@ -1725,8 +1725,8 @@ glabel func0000f804 /* f88c: 3c018006 */ lui $at,%hi(var8005ddd0) /* f890: ac20ddd0 */ sw $zero,%lo(var8005ddd0)($at) .L0000f894: -/* f894: 3c188006 */ lui $t8,%hi(var8005dda0) -/* f898: 8f18dda0 */ lw $t8,%lo(var8005dda0)($t8) +/* f894: 3c188006 */ lui $t8,%hi(g_Silent) +/* f898: 8f18dda0 */ lw $t8,%lo(g_Silent)($t8) /* f89c: 02002025 */ or $a0,$s0,$zero /* f8a0: 570000bb */ bnezl $t8,.L0000fb90 /* f8a4: 8fbf0024 */ lw $ra,0x24($sp) @@ -1946,8 +1946,8 @@ glabel func0000fba0 GLOBAL_ASM( glabel func0000fbc4 -/* fbc4: 3c0e8006 */ lui $t6,%hi(var8005dda0) -/* fbc8: 8dcedda0 */ lw $t6,%lo(var8005dda0)($t6) +/* fbc4: 3c0e8006 */ lui $t6,%hi(g_Silent) +/* fbc8: 8dcedda0 */ lw $t6,%lo(g_Silent)($t6) /* fbcc: 27bdffe8 */ addiu $sp,$sp,-24 /* fbd0: afbf0014 */ sw $ra,0x14($sp) /* fbd4: 15c00015 */ bnez $t6,.L0000fc2c @@ -1993,8 +1993,8 @@ glabel func0000fc48 /* fc58: afa5144c */ sw $a1,0x144c($sp) /* fc5c: 0c00e344 */ jal func00038d10 /* fc60: 8c8400f8 */ lw $a0,0xf8($a0) -/* fc64: 3c0e8006 */ lui $t6,%hi(var8005dda0) -/* fc68: 8dcedda0 */ lw $t6,%lo(var8005dda0)($t6) +/* fc64: 3c0e8006 */ lui $t6,%hi(g_Silent) +/* fc68: 8dcedda0 */ lw $t6,%lo(g_Silent)($t6) /* fc6c: 8fa4144c */ lw $a0,0x144c($sp) /* fc70: 3c038009 */ lui $v1,%hi(var80095208) /* fc74: 51c00004 */ beqzl $t6,.L0000fc88 @@ -2070,8 +2070,8 @@ glabel func0000fc48 GLOBAL_ASM( glabel func0000fd74 -/* fd74: 3c0e8006 */ lui $t6,%hi(var8005dda0) -/* fd78: 8dcedda0 */ lw $t6,%lo(var8005dda0)($t6) +/* fd74: 3c0e8006 */ lui $t6,%hi(g_Silent) +/* fd78: 8dcedda0 */ lw $t6,%lo(g_Silent)($t6) /* fd7c: 24037fff */ addiu $v1,$zero,0x7fff /* fd80: 51c00004 */ beqzl $t6,.L0000fd94 /* fd84: 94830100 */ lhu $v1,0x100($a0) @@ -2085,8 +2085,8 @@ glabel func0000fd74 GLOBAL_ASM( glabel func0000fd9c -/* fd9c: 3c0f8006 */ lui $t7,%hi(var8005dda0) -/* fda0: 8defdda0 */ lw $t7,%lo(var8005dda0)($t7) +/* fd9c: 3c0f8006 */ lui $t7,%hi(g_Silent) +/* fda0: 8defdda0 */ lw $t7,%lo(g_Silent)($t7) /* fda4: 27bdffe8 */ addiu $sp,$sp,-24 /* fda8: afbf0014 */ sw $ra,0x14($sp) /* fdac: afa5001c */ sw $a1,0x1c($sp) @@ -2245,7 +2245,7 @@ glabel func0000fe88 /* ffac: 8c820000 */ lw $v0,0x0($a0) /* ffb0: 8ce30000 */ lw $v1,0x0($a3) /* ffb4: 3c0f8006 */ lui $t7,%hi(var8005edec) -/* ffb8: 3c188006 */ lui $t8,%hi(var8005dda0) +/* ffb8: 3c188006 */ lui $t8,%hi(g_Silent) /* ffbc: 0043082a */ slt $at,$v0,$v1 /* ffc0: 10200003 */ beqz $at,.L0000ffd0 /* ffc4: 3c198006 */ lui $t9,%hi(var8005ddd0) @@ -2258,7 +2258,7 @@ glabel func0000fe88 /* ffdc: 00000000 */ nop /* ffe0: ac22edec */ sw $v0,%lo(var8005edec)($at) .L0000ffe4: -/* ffe4: 8f18dda0 */ lw $t8,%lo(var8005dda0)($t8) +/* ffe4: 8f18dda0 */ lw $t8,%lo(g_Silent)($t8) /* ffe8: 570000d4 */ bnezl $t8,.L0001033c /* ffec: 8fbf002c */ lw $ra,0x2c($sp) /* fff0: 8f39ddd0 */ lw $t9,%lo(var8005ddd0)($t9) @@ -2516,15 +2516,15 @@ glabel func0000fe88 GLOBAL_ASM( glabel func00010360 -/* 10360: 3c028006 */ lui $v0,%hi(var8005dda0) +/* 10360: 3c028006 */ lui $v0,%hi(g_Silent) /* 10364: 03e00008 */ jr $ra -/* 10368: 8c42dda0 */ lw $v0,%lo(var8005dda0)($v0) +/* 10368: 8c42dda0 */ lw $v0,%lo(g_Silent)($v0) ); GLOBAL_ASM( glabel func0001036c -/* 1036c: 3c0e8006 */ lui $t6,%hi(var8005dda0) -/* 10370: 8dcedda0 */ lw $t6,%lo(var8005dda0)($t6) +/* 1036c: 3c0e8006 */ lui $t6,%hi(g_Silent) +/* 10370: 8dcedda0 */ lw $t6,%lo(g_Silent)($t6) /* 10374: 27bdffd0 */ addiu $sp,$sp,-48 /* 10378: afbf0024 */ sw $ra,0x24($sp) /* 1037c: 15c0001f */ bnez $t6,.L000103fc @@ -2973,7 +2973,7 @@ glabel audioStart /* 10934: 44802000 */ mtc1 $zero,$f4 /* 10938: 24050001 */ addiu $a1,$zero,0x1 /* 1093c: 10620003 */ beq $v1,$v0,.L0001094c -/* 10940: 3c198006 */ lui $t9,%hi(var8005dda0) +/* 10940: 3c198006 */ lui $t9,%hi(g_Silent) /* 10944: 10000001 */ b .L0001094c /* 10948: 306500ff */ andi $a1,$v1,0xff .L0001094c: @@ -3002,7 +3002,7 @@ glabel audioStart .L0001099c: /* 1099c: 00000000 */ nop .L000109a0: -/* 109a0: 8f39dda0 */ lw $t9,%lo(var8005dda0)($t9) +/* 109a0: 8f39dda0 */ lw $t9,%lo(g_Silent)($t9) /* 109a4: 87b8004e */ lh $t8,0x4e($sp) /* 109a8: 24010037 */ addiu $at,$zero,0x37 /* 109ac: 13200003 */ beqz $t9,.L000109bc @@ -3098,8 +3098,8 @@ glabel audioStart GLOBAL_ASM( glabel func00010ae4 /* 10ae4: 27bdffd8 */ addiu $sp,$sp,-40 -/* 10ae8: 3c188006 */ lui $t8,%hi(var8005dda0) -/* 10aec: 8f18dda0 */ lw $t8,%lo(var8005dda0)($t8) +/* 10ae8: 3c188006 */ lui $t8,%hi(g_Silent) +/* 10aec: 8f18dda0 */ lw $t8,%lo(g_Silent)($t8) /* 10af0: 00047400 */ sll $t6,$a0,0x10 /* 10af4: 000e7c03 */ sra $t7,$t6,0x10 /* 10af8: afa40028 */ sw $a0,0x28($sp) diff --git a/src/lib/lib_11420.c b/src/lib/lib_11420.c index 580eff7b4..cf0ecb4a6 100644 --- a/src/lib/lib_11420.c +++ b/src/lib/lib_11420.c @@ -427,8 +427,8 @@ glabel func000118f4 GLOBAL_ASM( glabel func0001190c /* 1190c: 27bdffb8 */ addiu $sp,$sp,-72 -/* 11910: 3c0e8006 */ lui $t6,%hi(var8005dda0) -/* 11914: 8dcedda0 */ lw $t6,%lo(var8005dda0)($t6) +/* 11910: 3c0e8006 */ lui $t6,%hi(g_Silent) +/* 11914: 8dcedda0 */ lw $t6,%lo(g_Silent)($t6) /* 11918: afbf0024 */ sw $ra,0x24($sp) /* 1191c: afb30020 */ sw $s3,0x20($sp) /* 11920: afb2001c */ sw $s2,0x1c($sp) @@ -746,8 +746,8 @@ glabel func0001190c GLOBAL_ASM( glabel func00011d84 -/* 11d84: 3c0e8006 */ lui $t6,%hi(var8005dda0) -/* 11d88: 8dcedda0 */ lw $t6,%lo(var8005dda0)($t6) +/* 11d84: 3c0e8006 */ lui $t6,%hi(g_Silent) +/* 11d88: 8dcedda0 */ lw $t6,%lo(g_Silent)($t6) /* 11d8c: 27bdffd8 */ addiu $sp,$sp,-40 /* 11d90: afbf0014 */ sw $ra,0x14($sp) /* 11d94: 15c000e0 */ bnez $t6,.L00012118 diff --git a/src/lib/lib_12dc0.c b/src/lib/lib_12dc0.c index a7b16b1cc..1c474d7a6 100644 --- a/src/lib/lib_12dc0.c +++ b/src/lib/lib_12dc0.c @@ -6,6 +6,7 @@ #include "game/data/data_0160b0.h" #include "game/data/data_01a3a0.h" #include "game/data/data_020df0.h" +#include "game/data/data_02a0e0.h" #include "game/data/data_02da90.h" #include "gvars/gvars.h" #include "lib/lib_12dc0.h" @@ -125,79 +126,46 @@ char *argParseString(char *str) void argSetString(char *string) { - strcpy(g_ArgString, string); - argParseString(g_ArgString); + strcpy(g_ArgBuffer, string); + argParseString((char *) g_ArgBuffer); } -const char var70053ff4[] = "-d"; -const char var70053ff8[] = "-s"; -const char var70053ffc[] = "-j"; +bool argsParseDebugArgs(void) +{ + u32 devaddr; + u32 stack; + s32 i; + bool ret = false; -GLOBAL_ASM( -glabel func00012f30 -/* 12f30: 27bdffc8 */ addiu $sp,$sp,-56 -/* 12f34: afb1001c */ sw $s1,0x1c($sp) -/* 12f38: afbf0024 */ sw $ra,0x24($sp) -/* 12f3c: 3c1101ff */ lui $s1,0x1ff -/* 12f40: afb20020 */ sw $s2,0x20($sp) -/* 12f44: afb00018 */ sw $s0,0x18($sp) -/* 12f48: afa00028 */ sw $zero,0x28($sp) -/* 12f4c: 0c00be82 */ jal func0002fa08 -/* 12f50: 3631ff00 */ ori $s1,$s1,0xff00 -/* 12f54: 10400004 */ beqz $v0,.L00012f68 -/* 12f58: 3c10800a */ lui $s0,%hi(g_ArgString) -/* 12f5c: 3c01800a */ lui $at,%hi(g_ArgString) -/* 12f60: 1000000a */ b .L00012f8c -/* 12f64: ac209880 */ sw $zero,%lo(g_ArgString)($at) -.L00012f68: -/* 12f68: 3c12800a */ lui $s2,%hi(var800998f8) -/* 12f6c: 265298f8 */ addiu $s2,$s2,%lo(var800998f8) -/* 12f70: 26109880 */ addiu $s0,$s0,%lo(g_ArgString) -.L00012f74: -/* 12f74: 02202025 */ or $a0,$s1,$zero -/* 12f78: 0c013994 */ jal osPiReadIo -/* 12f7c: 02002825 */ or $a1,$s0,$zero -/* 12f80: 26100004 */ addiu $s0,$s0,0x4 -/* 12f84: 1612fffb */ bne $s0,$s2,.L00012f74 -/* 12f88: 26310004 */ addiu $s1,$s1,0x4 -.L00012f8c: -/* 12f8c: 3c04800a */ lui $a0,%hi(g_ArgString) -/* 12f90: 0c004b98 */ jal argParseString -/* 12f94: 24849880 */ addiu $a0,$a0,%lo(g_ArgString) -/* 12f98: 3c057005 */ lui $a1,%hi(var70053ff4) -/* 12f9c: 24a53ff4 */ addiu $a1,$a1,%lo(var70053ff4) -/* 12fa0: 0c004c04 */ jal argFindByPrefix -/* 12fa4: 24040001 */ addiu $a0,$zero,0x1 -/* 12fa8: 10400003 */ beqz $v0,.L00012fb8 -/* 12fac: 24040001 */ addiu $a0,$zero,0x1 -/* 12fb0: 240e0001 */ addiu $t6,$zero,0x1 -/* 12fb4: afae0028 */ sw $t6,0x28($sp) -.L00012fb8: -/* 12fb8: 3c057005 */ lui $a1,%hi(var70053ff8) -/* 12fbc: 0c004c04 */ jal argFindByPrefix -/* 12fc0: 24a53ff8 */ addiu $a1,$a1,%lo(var70053ff8) -/* 12fc4: 10400004 */ beqz $v0,.L00012fd8 -/* 12fc8: 24040001 */ addiu $a0,$zero,0x1 -/* 12fcc: 240f0001 */ addiu $t7,$zero,0x1 -/* 12fd0: 3c018006 */ lui $at,%hi(var8005dda0) -/* 12fd4: ac2fdda0 */ sw $t7,%lo(var8005dda0)($at) -.L00012fd8: -/* 12fd8: 3c057005 */ lui $a1,%hi(var70053ffc) -/* 12fdc: 0c004c04 */ jal argFindByPrefix -/* 12fe0: 24a53ffc */ addiu $a1,$a1,%lo(var70053ffc) -/* 12fe4: 10400003 */ beqz $v0,.L00012ff4 -/* 12fe8: 24180001 */ addiu $t8,$zero,0x1 -/* 12fec: 3c018008 */ lui $at,%hi(g_LanguageId) -/* 12ff0: ac384120 */ sw $t8,%lo(g_LanguageId)($at) -.L00012ff4: -/* 12ff4: 8fbf0024 */ lw $ra,0x24($sp) -/* 12ff8: 8fa20028 */ lw $v0,0x28($sp) -/* 12ffc: 8fb00018 */ lw $s0,0x18($sp) -/* 13000: 8fb1001c */ lw $s1,0x1c($sp) -/* 13004: 8fb20020 */ lw $s2,0x20($sp) -/* 13008: 03e00008 */ jr $ra -/* 1300c: 27bd0038 */ addiu $sp,$sp,0x38 -); + devaddr = 0x1ffff00; + + if (rmonIsDisabled()) { + g_ArgBuffer[0] = 0; + } else { + for (i = 0; i < 30; i++) { + osPiReadIo(devaddr, &g_ArgBuffer[i]); + devaddr += 4; + } + } + + argParseString((char *) g_ArgBuffer); + + // I'm guessing the -d stands for debug. If set at boot, the main thread + // stops itself immediately after creating the rmon thread. + if (argFindByPrefix(1, "-d")) { + ret = true; + } + + if (argFindByPrefix(1, "-s")) { + g_Silent = true; + } + + if (argFindByPrefix(1, "-j")) { + g_LanguageId = LANGUAGE_JAPANESE; + } + + return ret; +} /** * Find a program argument based on its prefix and occurrence of that prefix, diff --git a/src/lib/lib_2fa00.c b/src/lib/lib_2fa00.c index 5be94bab6..9acadf289 100644 --- a/src/lib/lib_2fa00.c +++ b/src/lib/lib_2fa00.c @@ -16,7 +16,7 @@ void rmonproc() // empty } -bool func0002fa08(void) +bool rmonIsDisabled(void) { return true; } diff --git a/src/lib/main.c b/src/lib/main.c index 586053055..4902c7d8d 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -214,7 +214,7 @@ glabel mainInit /* d55c: 00000000 */ nop /* d560: 0c0026ac */ jal func00009ab0 /* d564: 00000000 */ nop -/* d568: 0c00be82 */ jal func0002fa08 +/* d568: 0c00be82 */ jal rmonIsDisabled /* d56c: 00000000 */ nop /* d570: 3c018006 */ lui $at,%hi(var8005d9b0) /* d574: 0c004f25 */ jal contSystemInit @@ -624,7 +624,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400"; // func00012a0c(); // func00013758(); // func00009ab0(); -// var8005d9b0 = func0002fa08(); +// var8005d9b0 = rmonIsDisabled(); // contSystemInit(); // osCreateMesgQueue(&queue, &msg, 1); //