From f95a561d3d7108e6cccb79beae1f81871aaa28d3 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 11 Dec 2020 19:37:10 +0900 Subject: [PATCH] 2 more --- .../code_26840_len_20d0/func_8004B6D8.s | 35 -------------- .../code_26840_len_20d0/func_8004B9E4.s | 35 -------------- src/audio.h | 33 ++++++++----- src/code_26840_len_20d0.c | 47 ++++++++++++++++++- 4 files changed, 65 insertions(+), 85 deletions(-) delete mode 100644 asm/nonmatchings/code_26840_len_20d0/func_8004B6D8.s delete mode 100644 asm/nonmatchings/code_26840_len_20d0/func_8004B9E4.s diff --git a/asm/nonmatchings/code_26840_len_20d0/func_8004B6D8.s b/asm/nonmatchings/code_26840_len_20d0/func_8004B6D8.s deleted file mode 100644 index a39f22f32e..0000000000 --- a/asm/nonmatchings/code_26840_len_20d0/func_8004B6D8.s +++ /dev/null @@ -1,35 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8004B6D8 -/* 26AD8 8004B6D8 90830164 */ lbu $v1, 0x164($a0) -/* 26ADC 8004B6DC 90820163 */ lbu $v0, 0x163($a0) -/* 26AE0 8004B6E0 8FA90010 */ lw $t1, 0x10($sp) -/* 26AE4 8004B6E4 00621023 */ subu $v0, $v1, $v0 -/* 26AE8 8004B6E8 04420001 */ bltzl $v0, .L8004B6F0 -/* 26AEC 8004B6EC 24420010 */ addiu $v0, $v0, 0x10 -.L8004B6F0: -/* 26AF0 8004B6F0 28420010 */ slti $v0, $v0, 0x10 -/* 26AF4 8004B6F4 10400012 */ beqz $v0, .L8004B740 -/* 26AF8 8004B6F8 0060402D */ daddu $t0, $v1, $zero -/* 26AFC 8004B6FC 00081880 */ sll $v1, $t0, 2 -/* 26B00 8004B700 00681821 */ addu $v1, $v1, $t0 -/* 26B04 8004B704 25080001 */ addiu $t0, $t0, 1 -/* 26B08 8004B708 00031840 */ sll $v1, $v1, 1 -/* 26B0C 8004B70C 00831821 */ addu $v1, $a0, $v1 -/* 26B10 8004B710 30A2BFFF */ andi $v0, $a1, 0xbfff -/* 26B14 8004B714 A46200C2 */ sh $v0, 0xc2($v1) -/* 26B18 8004B718 00051402 */ srl $v0, $a1, 0x10 -/* 26B1C 8004B71C 304203FF */ andi $v0, $v0, 0x3ff -/* 26B20 8004B720 A46200C4 */ sh $v0, 0xc4($v1) -/* 26B24 8004B724 2D020010 */ sltiu $v0, $t0, 0x10 -/* 26B28 8004B728 A46600C6 */ sh $a2, 0xc6($v1) -/* 26B2C 8004B72C A46700C8 */ sh $a3, 0xc8($v1) -/* 26B30 8004B730 14400002 */ bnez $v0, .L8004B73C -/* 26B34 8004B734 A06900CA */ sb $t1, 0xca($v1) -/* 26B38 8004B738 0000402D */ daddu $t0, $zero, $zero -.L8004B73C: -/* 26B3C 8004B73C A0880164 */ sb $t0, 0x164($a0) -.L8004B740: -/* 26B40 8004B740 03E00008 */ jr $ra -/* 26B44 8004B744 00000000 */ nop diff --git a/asm/nonmatchings/code_26840_len_20d0/func_8004B9E4.s b/asm/nonmatchings/code_26840_len_20d0/func_8004B9E4.s deleted file mode 100644 index ad7afdb921..0000000000 --- a/asm/nonmatchings/code_26840_len_20d0/func_8004B9E4.s +++ /dev/null @@ -1,35 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8004B9E4 -/* 26DE4 8004B9E4 30A500FF */ andi $a1, $a1, 0xff -/* 26DE8 8004B9E8 240200F0 */ addiu $v0, $zero, 0xf0 -/* 26DEC 8004B9EC 10A20017 */ beq $a1, $v0, .L8004BA4C -/* 26DF0 8004B9F0 28A20008 */ slti $v0, $a1, 8 -/* 26DF4 8004B9F4 10400013 */ beqz $v0, .L8004BA44 -/* 26DF8 8004B9F8 240200FF */ addiu $v0, $zero, 0xff -/* 26DFC 8004B9FC 9082008C */ lbu $v0, 0x8c($a0) -/* 26E00 8004BA00 1045000C */ beq $v0, $a1, .L8004BA34 -/* 26E04 8004BA04 24020006 */ addiu $v0, $zero, 6 -/* 26E08 8004BA08 8C830000 */ lw $v1, ($a0) -/* 26E0C 8004BA0C A085008C */ sb $a1, 0x8c($a0) -/* 26E10 8004BA10 A0620044 */ sb $v0, 0x44($v1) -/* 26E14 8004BA14 8C830000 */ lw $v1, ($a0) -/* 26E18 8004BA18 24020001 */ addiu $v0, $zero, 1 -/* 26E1C 8004BA1C A0620045 */ sb $v0, 0x45($v1) -/* 26E20 8004BA20 00051080 */ sll $v0, $a1, 2 -/* 26E24 8004BA24 00821021 */ addu $v0, $a0, $v0 -/* 26E28 8004BA28 8C420064 */ lw $v0, 0x64($v0) -/* 26E2C 8004BA2C 3C018008 */ lui $at, %hi(D_8007F1F8) -/* 26E30 8004BA30 AC22F1F8 */ sw $v0, %lo(D_8007F1F8)($at) -.L8004BA34: -/* 26E34 8004BA34 00851021 */ addu $v0, $a0, $a1 -/* 26E38 8004BA38 90420084 */ lbu $v0, 0x84($v0) -/* 26E3C 8004BA3C 08012E93 */ j .L8004BA4C -/* 26E40 8004BA40 A082008D */ sb $v0, 0x8d($a0) -.L8004BA44: -/* 26E44 8004BA44 A082008C */ sb $v0, 0x8c($a0) -/* 26E48 8004BA48 A080008D */ sb $zero, 0x8d($a0) -.L8004BA4C: -/* 26E4C 8004BA4C 03E00008 */ jr $ra -/* 26E50 8004BA50 9082008C */ lbu $v0, 0x8c($a0) diff --git a/src/audio.h b/src/audio.h index 517d185d3c..58bef4e15e 100644 --- a/src/audio.h +++ b/src/audio.h @@ -61,6 +61,14 @@ typedef struct UnkAl0 { /* 0x20 */ UnkLen18 unk_20[1]; // amt unknown } UnkAl0; +typedef struct UnkAlA { + /* 0x0 */ s16 unk_00; + /* 0x2 */ s16 unk_02; + /* 0x4 */ s16 unk_04; + /* 0x6 */ s16 unk_06; + /* 0x8 */ s8 unk_08; +} UnkAlA; // size = 0xA; + typedef struct UnkAl6CC { /* 0x000 */ struct UnkAl19E0* unk_00; /* 0x004 */ char unk_04[0x2C]; @@ -74,25 +82,23 @@ typedef struct UnkAl6CC { /* 0x04C */ char unk_4C[0x10]; /* 0x05C */ s32 unk_5C; /* 0x060 */ s32 unk_60; - /* 0x064 */ char unk_64[0x20]; - /* 0x084 */ s8 unk_84; - /* 0x085 */ s8 unk_85; - /* 0x086 */ s8 unk_86; - /* 0x087 */ s8 unk_87; - /* 0x088 */ s8 unk_88; - /* 0x089 */ s8 unk_89; - /* 0x08A */ s8 unk_8A; - /* 0x08B */ s8 unk_8B; - /* 0x08C */ char unk_8C[0x2E]; + /* 0x064 */ s32 unk_64[8]; + /* 0x084 */ s8 unk_84[8]; + /* 0x08C */ u8 unk_8C; + /* 0x08D */ s8 unk_8D; + /* 0x08E */ char unk_8E[0x2C]; /* 0x0BA */ s16 unk_BA; /* 0x0BC */ u8 unk_BC; /* 0x0BD */ u8 unk_BD; /* 0x0BE */ u8 unk_BE; /* 0x0BF */ char unk_BF[0x1]; /* 0x0C0 */ s8 unk_C0; - /* 0x0C1 */ char unk_C1[0xA2]; + /* 0x0C1 */ char unk_C1[0x1]; + /* 0x0C2 */ UnkAlA unk_C2[16]; + /* 0x162 */ char unk_162[0x1]; /* 0x163 */ s8 unk_163; - /* 0x164 */ s32 unk_164; + /* 0x164 */ s8 unk_164; + /* 0x165 */ char unk_165[0x3]; /* 0x168 */ s32 unk_168; /* 0x16C */ char unk_16C[0x560]; } UnkAl6CC; @@ -340,6 +346,7 @@ extern u16 D_80078DB6; extern s8 D_80078E58; extern s16 D_80078E5A; extern s8 D_80078E5C; +extern s32 D_8007F1F8; extern UnkAl19E0* D_8009A5C0; extern UnkAlA9C* D_8009A5CC; @@ -361,7 +368,7 @@ void func_8004B62C(UnkAl6CC*); void func_8004B698(UnkAl6CC*); void func_8004B6D8(UnkAl6CC*, s32, s16, s16, u8); void func_8004B748(UnkAl6CC*); -s32 func_8004B9E4(UnkAl6CC*, s32); +//s32 func_8004B9E4(UnkAl6CC*, u8); void func_8004BA54(UnkAl6CC*, s32); void func_8004D510(UnkAlA9C*); void func_8004DAA8(UnkAlA9C*); diff --git a/src/code_26840_len_20d0.c b/src/code_26840_len_20d0.c index 5527d7e4be..9b63645efb 100644 --- a/src/code_26840_len_20d0.c +++ b/src/code_26840_len_20d0.c @@ -7,11 +7,54 @@ INCLUDE_ASM(void, "code_26840_len_20d0", func_8004B62C, UnkAl6CC* arg0); INCLUDE_ASM(void, "code_26840_len_20d0", func_8004B698, UnkAl6CC* arg0); -INCLUDE_ASM(void, "code_26840_len_20d0", func_8004B6D8, UnkAl6CC* arg0, s32 arg1, s16 arg2, s16 arg3, u8 arg4); +void func_8004B6D8(UnkAl6CC *arg0, s32 arg1, s16 arg2, s16 arg3, u8 arg4) { + u8 temp_v1 = arg0->unk_164; + s32 temp_v0 = temp_v1 - (u8) arg0->unk_163; + u32 temp_t0; + + if (temp_v0 < 0) { + temp_v0 += 0x10; + } + + if (temp_v0 < 0x10) { + temp_t0 = temp_v1; + + arg0->unk_C2[temp_v1].unk_00 = arg1 & 0xBFFF; + arg0->unk_C2[temp_v1].unk_02 = (((u32) arg1 >> 0x10) & 0x3FF); + arg0->unk_C2[temp_v1].unk_04 = arg2; + arg0->unk_C2[temp_v1].unk_06 = arg3; + arg0->unk_C2[temp_v1].unk_08 = arg4; + + temp_t0++; + if (temp_t0 >= 0x10) { + temp_t0 = 0; + } + + arg0->unk_164 = temp_t0; + } +} INCLUDE_ASM(void, "code_26840_len_20d0", func_8004B748, UnkAl6CC* arg0); -INCLUDE_ASM(s32, "code_26840_len_20d0", func_8004B9E4, UnkAl6CC* arg0, s32 arg1); +s32 func_8004B9E4(UnkAl6CC *arg0, s32 arg1) { + s32 a1 = (u8) arg1; + + if (a1 != 0xF0) { + if (a1 < 8) { + if (arg0->unk_8C != a1) { + arg0->unk_8C = a1; + arg0->unk_00->unk_40[1].unk_00 = 6; + arg0->unk_00->unk_40[1].unk_01 = 1; + D_8007F1F8 = arg0->unk_64[a1]; + } + arg0->unk_8D = arg0->unk_84[a1]; + } else { + arg0->unk_8C = 0xFF; + arg0->unk_8D = 0; + } + } + return arg0->unk_8C; +} void func_8004BA54(UnkAl6CC* arg0, s32 arg1) { if (arg1 == 0) {