diff --git a/include/functions.h b/include/functions.h index e693071..40ebff1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -9,6 +9,11 @@ s32 func_8005A990(OSPiHandle *); // 517A0.s void func_80050BA0(s32, void*); +// 49190.s +void func_80048904(s32, s32, s32); +void func_80048590(s32, s32, void*, s16*); +void func_80048684(void*, s16, s32, s16*); + // bcopy.s void _bcopy(void* src, void* dst, s32); diff --git a/src/46680.c b/src/46680.c index 330ebf1..ffb64db 100644 --- a/src/46680.c +++ b/src/46680.c @@ -1,9 +1,122 @@ #include "46680.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/46680/func_80045A80.s") +typedef struct unk_arg1_func_80045A80 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; +} unk_arg1_func_80045A80; // size 0x10 -#pragma GLOBAL_ASM("asm/us/nonmatchings/46680/func_80045C78.s") +typedef struct unk_arg1_func_80045D60 { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; +} unk_arg1_func_80045D60; // size 0x7 -#pragma GLOBAL_ASM("asm/us/nonmatchings/46680/func_80045D60.s") +typedef struct AnimBlock19 { + s16 xRotA; + s16 xRotB; + s16 flag0; + s16 yRotA; + s16 yRotB; + s16 flag1; + s16 zRotA; + s16 zRotB; + s16 flag2; + s16 unkA; + s16 unkB; + s16 unkC; + s16 unkD; +} AnimBlock19; // size 0x1A + +typedef struct unk_arg0_func_80045A80 { + char pad0[0x168]; + unk_arg1_func_80045A80 unk168[2]; + s16 unk188; // 0x188 +} unk_arg0_func_80045A80; + +void func_80045A80(unk_arg0_func_80045A80* arg0, unk_arg1_func_80045A80* arg1, s32 arg2, s32 arg3) { + unk_arg1_func_80045A80* temp_v0_2; + + temp_v0_2 = &arg0->unk168[arg0->unk188]; + temp_v0_2->unk0 = (s16) (((s32) ((((arg1->unk0 - 0x20) << 0xA) * 0x3333) + 0x4000) >> 0xF) * 2); + temp_v0_2->unk2 = (s16) (((s32) ((((arg1->unk2 - 0x20) << 0xA) * 0x3333) + 0x4000) >> 0xF) * 2); + temp_v0_2->unk4 = (s16) (((s32) ((((arg1->unk4 - 0x10) << 0xA) * 0x3333) - 0x0332F000) >> 0xF) * 2); + temp_v0_2->unk6 = (s16) (((s32) ((((arg1->unk6 - 0x10) << 0xA) * 0x3333) + 0x04003C00) >> 0xF) * 2); + temp_v0_2->unk8 = (s16) (((s32) ((((arg1->unk8 - 8) << 0xA) * 0x4B17) - 0x0036E4E4) >> 0xF) * 2); + temp_v0_2->unkA = (s16) (((s32) ((((arg1->unkA - 8) << 0xA) * 0x4444) + 0x03BBF800) >> 0xF) * 2); + temp_v0_2->unkC = (s16) (((s32) ((((arg1->unkC - 4) << 0xA) * 0x7ADE) + 0x0147936C) >> 0xF) * 2); + temp_v0_2->unkE = (s16) (((s32) ((((arg1->unkE - 4) << 0xA) * 0x740C) + 0x040D6B40) >> 0xF) * 2); + + func_80048904((s32)arg0, arg2, arg3); + arg0->unk188 ^= 1; +} + +void func_80045C78(unk_arg0_func_80045A80* arg0, unk_arg1_func_80045A80* arg1, s16* arg2, s16* arg3, s16* arg4, s16* arg5, AnimBlock19* arg6, s32 arg7) { + s32 i; + s16 sp44[40]; + + for (i = 0; i < 4; i++) { + func_80048590(*arg5, *arg4, arg6, sp44); + func_80048684(arg0, *arg2, *arg3, sp44); + arg5++; + arg3++; + arg2++; + arg4++; + arg6++; + } + + + func_80045A80(arg0, arg1, arg0, arg7); +} + +s32 func_80045D60(unk_arg0_func_80045A80* arg0, unk_arg1_func_80045D60* arg1, s32 arg2) { + unk_arg1_func_80045A80 header; + s16 spC8[4]; + s16 spC0[4]; + s16 spB8[4]; + s16 spB0[4]; + AnimBlock19 sp48[4]; + s32 i; + + header.unk0 = ((arg1[0].unk0 & 0xF) << 2) | ((arg1[0].unk1 >> 6) & 3); + header.unk2 = arg1[0].unk1 & 0x3F; + header.unk4 = (arg1[0].unk2 >> 3) & 0x1F; + header.unk6 = ((arg1[0].unk2 & 7) << 2) | ((arg1[0].unk3 >> 6) & 3); + header.unk8 = (arg1[0].unk3 >> 2) & 0xF; + header.unkA = ((arg1[0].unk3 & 3) << 2) | ((arg1[0].unk4 >> 6) & 3); + header.unkC = (arg1[0].unk4 >> 3) & 7; + header.unkE = arg1[0].unk4 & 7; + for (i = 0; i < 4; i++) { + spC8[i] = (arg1[i].unk5 >> 1) & 0x7F; + spB8[i] = ((arg1[i].unk5 & 1) << 1) | ((arg1[i].unk6 >> 7) & 1); + spC0[i] = (arg1[i].unk6 >> 5) & 3; + spB0[i] = ((arg1[i].unk6 & 0x1F) << 1) | ((arg1[i + 1].unk0 >> 7) & 1); + + sp48[i].xRotA = (arg1[i + 1].unk0 >> 4) & 7; + sp48[i].xRotB = (arg1[i + 1].unk0 >> 1) & 7; + sp48[i].flag0 = ((arg1[i + 1].unk0 & 1) << 2) | ((arg1[i + 1].unk1 >> 6) & 3); + sp48[i].yRotA = (arg1[i + 1].unk1 >> 3) & 7; + sp48[i].yRotB = arg1[i + 1].unk1 & 7; + sp48[i].flag1 = (arg1[i + 1].unk2 >> 5) & 7; + sp48[i].zRotA = (arg1[i + 1].unk2 >> 2) & 7; + sp48[i].zRotB = ((arg1[i + 1].unk2 & 3) << 1) | ((arg1[i + 1].unk3 >> 7) & 1); + sp48[i].flag2 = (arg1[i + 1].unk3 >> 4) & 7; + sp48[i].unkA = (arg1[i + 1].unk3 >> 1) & 7; + sp48[i].unkB = ((arg1[i + 1].unk3 & 1) << 2) | ((arg1[i + 1].unk4 >> 6) & 3); + sp48[i].unkC = (arg1[i + 1].unk4 >> 3) & 7; + sp48[i].unkD = arg1[i + 1].unk4 & 7; + } + func_80045C78(arg0, &header, spC8, spB8, spC0, spB0, sp48, arg2); + return 0; +} #pragma GLOBAL_ASM("asm/us/nonmatchings/46680/func_80045FF0.s") diff --git a/src/46680.h b/src/46680.h index 36443c5..40b9192 100644 --- a/src/46680.h +++ b/src/46680.h @@ -6,7 +6,10 @@ typedef struct unk_D_800FCED8_0000 { /* 0x000 */ char unk000[0x166]; /* 0x166 */ s16 unk_166; - /* 0x168 */ char unk168[0x28]; + /* 0x168 */ char unk168[0x22]; + /* 0x18A */ s16 unk_18A; + /* 0x18C */ s16 unk_18C; + /* 0x18E */ s16 unk18E; } unk_D_800FCED8_0000; // size = 0x190 typedef struct unk_D_800FCED8_0198 { diff --git a/src/unk_49190.s b/src/unk_49190.s deleted file mode 100644 index b72cc2a..0000000 --- a/src/unk_49190.s +++ /dev/null @@ -1,426 +0,0 @@ -.include "macro.inc" - -/* assembler directives */ -.set noat /* allow manual use of $at */ -.set noreorder /* don't insert nops after branches */ -.set gp=64 /* allow use of 64-bit general purpose registers */ - -.section .text, "ax" - -/* Generated by spimdisasm 1.28.0 */ - -/* Handwritten function */ -glabel func_80048590 -/* 049190 80048590 2481FFF9 */ addiu $at, $a0, -0x7 -/* 049194 80048594 1C20000D */ bgtz $at, .L800485CC -/* 049198 80048598 00000000 */ nop -/* 04919C 8004859C 03E00821 */ addu $at, $ra, $zero -/* 0491A0 800485A0 04100036 */ bltzal $zero, .L8004867C -/* 0491A4 800485A4 00000000 */ nop -/* 0491A8 800485A8 27EF00D4 */ addiu $t7, $ra, 0xD4 -/* 0491AC 800485AC 0020F821 */ addu $ra, $at, $zero -/* 0491B0 800485B0 01E47821 */ addu $t7, $t7, $a0 -/* 0491B4 800485B4 81E10000 */ lb $at, 0x0($t7) -/* 0491B8 800485B8 00000000 */ nop -/* 0491BC 800485BC 00014103 */ sra $t0, $at, 4 -/* 0491C0 800485C0 30290007 */ andi $t1, $at, 0x7 -/* 0491C4 800485C4 10000004 */ b .L800485D8 -/* 0491C8 800485C8 00000000 */ nop -.L800485CC: -/* 0491CC 800485CC 2488FFF8 */ addiu $t0, $a0, -0x8 -/* 0491D0 800485D0 000840C3 */ sra $t0, $t0, 3 -/* 0491D4 800485D4 30890007 */ andi $t1, $a0, 0x7 -.L800485D8: -/* 0491D8 800485D8 000962C0 */ sll $t4, $t1, 11 -/* 0491DC 800485DC 258C47FF */ addiu $t4, $t4, 0x47FF -/* 0491E0 800485E0 340A0006 */ ori $t2, $zero, 0x6 -/* 0491E4 800485E4 01485023 */ subu $t2, $t2, $t0 -/* 0491E8 800485E8 340B0001 */ ori $t3, $zero, 0x1 -/* 0491EC 800485EC 2541FFFF */ addiu $at, $t2, -0x1 -/* 0491F0 800485F0 002B5804 */ sllv $t3, $t3, $at -/* 0491F4 800485F4 340E000D */ ori $t6, $zero, 0xD -/* 0491F8 800485F8 00C0C021 */ addu $t8, $a2, $zero -.L800485FC: -/* 0491FC 800485FC 870D0000 */ lh $t5, 0x0($t8) -/* 049200 80048600 00000000 */ nop -/* 049204 80048604 000D6B40 */ sll $t5, $t5, 13 -/* 049208 80048608 25AD9000 */ addiu $t5, $t5, -0x7000 -/* 04920C 8004860C 01AC0018 */ mult $t5, $t4 -/* 049210 80048610 00006812 */ mflo $t5 -/* 049214 80048614 25AD4000 */ addiu $t5, $t5, 0x4000 -/* 049218 80048618 000D6BC3 */ sra $t5, $t5, 15 -/* 04921C 8004861C 01AB6821 */ addu $t5, $t5, $t3 -/* 049220 80048620 014D6807 */ srav $t5, $t5, $t2 -/* 049224 80048624 A70D0000 */ sh $t5, 0x0($t8) -/* 049228 80048628 25CEFFFF */ addiu $t6, $t6, -0x1 -/* 04922C 8004862C 1DC0FFF3 */ bgtz $t6, .L800485FC -/* 049230 80048630 27180002 */ addiu $t8, $t8, 0x2 -/* 049234 80048634 00E0C821 */ addu $t9, $a3, $zero -/* 049238 80048638 340E0028 */ ori $t6, $zero, 0x28 -.L8004863C: -/* 04923C 8004863C A7200000 */ sh $zero, 0x0($t9) -/* 049240 80048640 25CEFFFF */ addiu $t6, $t6, -0x1 -/* 049244 80048644 1DC0FFFD */ bgtz $t6, .L8004863C -/* 049248 80048648 27390002 */ addiu $t9, $t9, 0x2 -/* 04924C 8004864C 00E5C821 */ addu $t9, $a3, $a1 -/* 049250 80048650 0325C821 */ addu $t9, $t9, $a1 -/* 049254 80048654 00C0C021 */ addu $t8, $a2, $zero -/* 049258 80048658 340E000D */ ori $t6, $zero, 0xD -.L8004865C: -/* 04925C 8004865C 87010000 */ lh $at, 0x0($t8) -/* 049260 80048660 27180002 */ addiu $t8, $t8, 0x2 -/* 049264 80048664 A7210000 */ sh $at, 0x0($t9) -/* 049268 80048668 25CEFFFF */ addiu $t6, $t6, -0x1 -/* 04926C 8004866C 1DC0FFFB */ bgtz $t6, .L8004865C -/* 049270 80048670 27390006 */ addiu $t9, $t9, 0x6 -/* 049274 80048674 03E00008 */ jr $ra -/* 049278 80048678 00000000 */ nop -.L8004867C: -/* 04927C 8004867C C7D7E3E7 */ lwc1 $fs1f, -0x1C19($fp) -/* 049280 80048680 F1F3F5F7 */ scd $s3, -0xA09($t7) /* handwritten instruction */ - -glabel func_80048684 -/* 049284 80048684 848B0166 */ lh $t3, 0x166($a0) -/* 049288 80048688 24A1FFD8 */ addiu $at, $a1, -0x28 -/* 04928C 8004868C 04200005 */ bltz $at, .L800486A4 -/* 049290 80048690 00000000 */ nop -/* 049294 80048694 2421FFB0 */ addiu $at, $at, -0x50 -/* 049298 80048698 1C200002 */ bgtz $at, .L800486A4 -/* 04929C 8004869C 00000000 */ nop -/* 0492A0 800486A0 00A05821 */ addu $t3, $a1, $zero -.L800486A4: -/* 0492A4 800486A4 A48B0166 */ sh $t3, 0x166($a0) -/* 0492A8 800486A8 03E00821 */ addu $at, $ra, $zero -/* 0492AC 800486AC 04100022 */ bltzal $zero, .L80048738 -/* 0492B0 800486B0 00000000 */ nop -/* 0492B4 800486B4 27E80084 */ addiu $t0, $ra, 0x84 -/* 0492B8 800486B8 0020F821 */ addu $ra, $at, $zero -/* 0492BC 800486BC 01064021 */ addu $t0, $t0, $a2 -/* 0492C0 800486C0 01064021 */ addu $t0, $t0, $a2 -/* 0492C4 800486C4 95080000 */ lhu $t0, 0x0($t0) -/* 0492C8 800486C8 340A0077 */ ori $t2, $zero, 0x77 -/* 0492CC 800486CC 248D0000 */ addiu $t5, $a0, 0x0 -.L800486D0: -/* 0492D0 800486D0 95AC0050 */ lhu $t4, 0x50($t5) -/* 0492D4 800486D4 254AFFFF */ addiu $t2, $t2, -0x1 -/* 0492D8 800486D8 A5AC0000 */ sh $t4, 0x0($t5) -/* 0492DC 800486DC 0541FFFC */ bgez $t2, .L800486D0 -/* 0492E0 800486E0 25AD0002 */ addiu $t5, $t5, 0x2 -/* 0492E4 800486E4 340A0027 */ ori $t2, $zero, 0x27 -/* 0492E8 800486E8 248E0000 */ addiu $t6, $a0, 0x0 -/* 0492EC 800486EC 248D0000 */ addiu $t5, $a0, 0x0 -/* 0492F0 800486F0 01AB6823 */ subu $t5, $t5, $t3 -/* 0492F4 800486F4 01AB6823 */ subu $t5, $t5, $t3 -/* 0492F8 800486F8 00E07821 */ addu $t7, $a3, $zero -.L800486FC: -/* 0492FC 800486FC 85A900F0 */ lh $t1, 0xF0($t5) -/* 049300 80048700 25AD0002 */ addiu $t5, $t5, 0x2 -/* 049304 80048704 01280018 */ mult $t1, $t0 -/* 049308 80048708 00004812 */ mflo $t1 -/* 04930C 8004870C 25294000 */ addiu $t1, $t1, 0x4000 -/* 049310 80048710 00094BC3 */ sra $t1, $t1, 15 -/* 049314 80048714 85E10000 */ lh $at, 0x0($t7) -/* 049318 80048718 25EF0002 */ addiu $t7, $t7, 0x2 -/* 04931C 8004871C 01214821 */ addu $t1, $t1, $at -/* 049320 80048720 A5C900F0 */ sh $t1, 0xF0($t6) -/* 049324 80048724 25CE0002 */ addiu $t6, $t6, 0x2 -/* 049328 80048728 1D40FFF4 */ bgtz $t2, .L800486FC -/* 04932C 8004872C 254AFFFF */ addiu $t2, $t2, -0x1 -/* 049330 80048730 03E00008 */ jr $ra -/* 049334 80048734 00000000 */ nop -.L80048738: # these feel like deliberately invalid instructions. - # they decode to a branch from a delay slot, which - # cant possibly be valid. -/* 049338 80048738 0CCD2CCD */ .4byte 0x0CCD2CCD -/* 04933C 8004873C 53337FFF */ .4byte 0x53337FFF -.L80048740: -/* 049340 80048740 852A0000 */ lh $t2, 0x0($t1) -/* 049344 80048744 25290002 */ addiu $t1, $t1, 0x2 -/* 049348 80048748 00196C00 */ sll $t5, $t9, 16 -/* 04934C 8004874C 000D6C03 */ sra $t5, $t5, 16 -/* 049350 80048750 02ED0018 */ mult $s7, $t5 -/* 049354 80048754 00000812 */ mflo $at -/* 049358 80048758 24214000 */ addiu $at, $at, 0x4000 -/* 04935C 8004875C 00010BC3 */ sra $at, $at, 15 -/* 049360 80048760 01415023 */ subu $t2, $t2, $at -/* 049364 80048764 00196C03 */ sra $t5, $t9, 16 -/* 049368 80048768 02CD0018 */ mult $s6, $t5 -/* 04936C 8004876C 00000812 */ mflo $at -/* 049370 80048770 24214000 */ addiu $at, $at, 0x4000 -/* 049374 80048774 00010BC3 */ sra $at, $at, 15 -/* 049378 80048778 01415023 */ subu $t2, $t2, $at -/* 04937C 8004877C 01AA0018 */ mult $t5, $t2 -/* 049380 80048780 00000812 */ mflo $at -/* 049384 80048784 24214000 */ addiu $at, $at, 0x4000 -/* 049388 80048788 00010BC3 */ sra $at, $at, 15 -/* 04938C 8004878C 0036B821 */ addu $s7, $at, $s6 -/* 049390 80048790 00186C00 */ sll $t5, $t8, 16 -/* 049394 80048794 000D6C03 */ sra $t5, $t5, 16 -/* 049398 80048798 02AD0018 */ mult $s5, $t5 -/* 04939C 8004879C 00000812 */ mflo $at -/* 0493A0 800487A0 24214000 */ addiu $at, $at, 0x4000 -/* 0493A4 800487A4 00010BC3 */ sra $at, $at, 15 -/* 0493A8 800487A8 01415023 */ subu $t2, $t2, $at -/* 0493AC 800487AC 01AA0018 */ mult $t5, $t2 -/* 0493B0 800487B0 00000812 */ mflo $at -/* 0493B4 800487B4 24214000 */ addiu $at, $at, 0x4000 -/* 0493B8 800487B8 00010BC3 */ sra $at, $at, 15 -/* 0493BC 800487BC 0035B021 */ addu $s6, $at, $s5 -/* 0493C0 800487C0 00186C03 */ sra $t5, $t8, 16 -/* 0493C4 800487C4 028D0018 */ mult $s4, $t5 -/* 0493C8 800487C8 00000812 */ mflo $at -/* 0493CC 800487CC 24214000 */ addiu $at, $at, 0x4000 -/* 0493D0 800487D0 00010BC3 */ sra $at, $at, 15 -/* 0493D4 800487D4 01415023 */ subu $t2, $t2, $at -/* 0493D8 800487D8 01AA0018 */ mult $t5, $t2 -/* 0493DC 800487DC 00000812 */ mflo $at -/* 0493E0 800487E0 24214000 */ addiu $at, $at, 0x4000 -/* 0493E4 800487E4 00010BC3 */ sra $at, $at, 15 -/* 0493E8 800487E8 0034A821 */ addu $s5, $at, $s4 -/* 0493EC 800487EC 000F6C00 */ sll $t5, $t7, 16 -/* 0493F0 800487F0 000D6C03 */ sra $t5, $t5, 16 -/* 0493F4 800487F4 026D0018 */ mult $s3, $t5 -/* 0493F8 800487F8 00000812 */ mflo $at -/* 0493FC 800487FC 24214000 */ addiu $at, $at, 0x4000 -/* 049400 80048800 00010BC3 */ sra $at, $at, 15 -/* 049404 80048804 01415023 */ subu $t2, $t2, $at -/* 049408 80048808 01AA0018 */ mult $t5, $t2 -/* 04940C 8004880C 00000812 */ mflo $at -/* 049410 80048810 24214000 */ addiu $at, $at, 0x4000 -/* 049414 80048814 00010BC3 */ sra $at, $at, 15 -/* 049418 80048818 0033A021 */ addu $s4, $at, $s3 -/* 04941C 8004881C 000F6C03 */ sra $t5, $t7, 16 -/* 049420 80048820 024D0018 */ mult $s2, $t5 -/* 049424 80048824 00000812 */ mflo $at -/* 049428 80048828 24214000 */ addiu $at, $at, 0x4000 -/* 04942C 8004882C 00010BC3 */ sra $at, $at, 15 -/* 049430 80048830 01415023 */ subu $t2, $t2, $at -/* 049434 80048834 01AA0018 */ mult $t5, $t2 -/* 049438 80048838 00000812 */ mflo $at -/* 04943C 8004883C 24214000 */ addiu $at, $at, 0x4000 -/* 049440 80048840 00010BC3 */ sra $at, $at, 15 -/* 049444 80048844 00329821 */ addu $s3, $at, $s2 -/* 049448 80048848 000E6C00 */ sll $t5, $t6, 16 -/* 04944C 8004884C 000D6C03 */ sra $t5, $t5, 16 -/* 049450 80048850 022D0018 */ mult $s1, $t5 -/* 049454 80048854 00000812 */ mflo $at -/* 049458 80048858 24214000 */ addiu $at, $at, 0x4000 -/* 04945C 8004885C 00010BC3 */ sra $at, $at, 15 -/* 049460 80048860 01415023 */ subu $t2, $t2, $at -/* 049464 80048864 01AA0018 */ mult $t5, $t2 -/* 049468 80048868 00000812 */ mflo $at -/* 04946C 8004886C 24214000 */ addiu $at, $at, 0x4000 -/* 049470 80048870 00010BC3 */ sra $at, $at, 15 -/* 049474 80048874 00319021 */ addu $s2, $at, $s1 -/* 049478 80048878 000E6C03 */ sra $t5, $t6, 16 -/* 04947C 8004887C 020D0018 */ mult $s0, $t5 -/* 049480 80048880 00000812 */ mflo $at -/* 049484 80048884 24214000 */ addiu $at, $at, 0x4000 -/* 049488 80048888 00010BC3 */ sra $at, $at, 15 -/* 04948C 8004888C 01415023 */ subu $t2, $t2, $at -/* 049490 80048890 01AA0018 */ mult $t5, $t2 -/* 049494 80048894 00000812 */ mflo $at -/* 049498 80048898 24214000 */ addiu $at, $at, 0x4000 -/* 04949C 8004889C 00010BC3 */ sra $at, $at, 15 -/* 0494A0 800488A0 00308821 */ addu $s1, $at, $s0 -/* 0494A4 800488A4 01408021 */ addu $s0, $t2, $zero -/* 0494A8 800488A8 34016E14 */ ori $at, $zero, 0x6E14 -/* 0494AC 800488AC 00270018 */ mult $at, $a3 -/* 0494B0 800488B0 00000812 */ mflo $at -/* 0494B4 800488B4 24214000 */ addiu $at, $at, 0x4000 -/* 0494B8 800488B8 00010BC3 */ sra $at, $at, 15 -/* 0494BC 800488BC 01415021 */ addu $t2, $t2, $at -/* 0494C0 800488C0 01403821 */ addu $a3, $t2, $zero -/* 0494C4 800488C4 000A5040 */ sll $t2, $t2, 1 -/* 0494C8 800488C8 000A0BC3 */ sra $at, $t2, 15 -/* 0494CC 800488CC 24210001 */ addiu $at, $at, 0x1 -/* 0494D0 800488D0 00010843 */ sra $at, $at, 1 -/* 0494D4 800488D4 10200004 */ beqz $at, .L800488E8 -/* 0494D8 800488D8 00000000 */ nop -/* 0494DC 800488DC 04200002 */ bltz $at, .L800488E8 -/* 0494E0 800488E0 240A8000 */ addiu $t2, $zero, -0x8000 -/* 0494E4 800488E4 240A7FFF */ addiu $t2, $zero, 0x7FFF -.L800488E8: -/* 0494E8 800488E8 314AFFF8 */ andi $t2, $t2, 0xFFF8 -/* 0494EC 800488EC A50A0000 */ sh $t2, 0x0($t0) -/* 0494F0 800488F0 25080002 */ addiu $t0, $t0, 0x2 -/* 0494F4 800488F4 1D60FF92 */ bgtz $t3, .L80048740 -/* 0494F8 800488F8 256BFFFF */ addiu $t3, $t3, -0x1 -/* 0494FC 800488FC 03E00008 */ jr $ra -/* 049500 80048900 00000000 */ nop - -/* Handwritten function */ -glabel func_80048904 -/* 049504 80048904 27BDFFBC */ addiu $sp, $sp, -0x44 -/* 049508 80048908 AFBF0000 */ sw $ra, 0x0($sp) -/* 04950C 8004890C AFA40004 */ sw $a0, 0x4($sp) -/* 049510 80048910 AFA50008 */ sw $a1, 0x8($sp) -/* 049514 80048914 AFA6000C */ sw $a2, 0xC($sp) -/* 049518 80048918 AFA70010 */ sw $a3, 0x10($sp) -/* 04951C 8004891C AFB00014 */ sw $s0, 0x14($sp) -/* 049520 80048920 AFB10018 */ sw $s1, 0x18($sp) -/* 049524 80048924 AFB2001C */ sw $s2, 0x1C($sp) -/* 049528 80048928 AFB30020 */ sw $s3, 0x20($sp) -/* 04952C 8004892C AFB40024 */ sw $s4, 0x24($sp) -/* 049530 80048930 AFB50028 */ sw $s5, 0x28($sp) -/* 049534 80048934 AFB6002C */ sw $s6, 0x2C($sp) -/* 049538 80048938 AFB70030 */ sw $s7, 0x30($sp) -/* 04953C 8004893C 24810140 */ addiu $at, $a0, 0x140 -/* 049540 80048940 8C300000 */ lw $s0, 0x0($at) -/* 049544 80048944 8C310004 */ lw $s1, 0x4($at) -/* 049548 80048948 8C320008 */ lw $s2, 0x8($at) -/* 04954C 8004894C 8C33000C */ lw $s3, 0xC($at) -/* 049550 80048950 8C340010 */ lw $s4, 0x10($at) -/* 049554 80048954 8C350014 */ lw $s5, 0x14($at) -/* 049558 80048958 8C360018 */ lw $s6, 0x18($at) -/* 04955C 8004895C 8C37001C */ lw $s7, 0x1C($at) -/* 049560 80048960 84870164 */ lh $a3, 0x164($a0) -/* 049564 80048964 04100065 */ bltzal $zero, .L80048AFC -/* 049568 80048968 00000000 */ nop -/* 04956C 8004896C 27EB0190 */ addiu $t3, $ra, 0x190 -/* 049570 80048970 04110039 */ bal .L80048A58 /* handwritten instruction */ -/* 049574 80048974 00000000 */ nop -/* 049578 80048978 24A90000 */ addiu $t1, $a1, 0x0 -/* 04957C 8004897C 24C80000 */ addiu $t0, $a2, 0x0 -/* 049580 80048980 0411FF6F */ bal .L80048740 /* handwritten instruction */ -/* 049584 80048984 340B000C */ ori $t3, $zero, 0xC -/* 049588 80048988 04100062 */ bltzal $zero, .L80048B14 -/* 04958C 8004898C 00000000 */ nop -/* 049590 80048990 27EB0184 */ addiu $t3, $ra, 0x184 -/* 049594 80048994 04110030 */ bal .L80048A58 /* handwritten instruction */ -/* 049598 80048998 00000000 */ nop -/* 04959C 8004899C 24A9001A */ addiu $t1, $a1, 0x1A -/* 0495A0 800489A0 24C8001A */ addiu $t0, $a2, 0x1A -/* 0495A4 800489A4 0411FF66 */ bal .L80048740 /* handwritten instruction */ -/* 0495A8 800489A8 340B000D */ ori $t3, $zero, 0xD -/* 0495AC 800489AC 0410005D */ bltzal $zero, .L80048B24 -/* 0495B0 800489B0 00000000 */ nop -/* 0495B4 800489B4 27EB0170 */ addiu $t3, $ra, 0x170 -/* 0495B8 800489B8 04110027 */ bal .L80048A58 /* handwritten instruction */ -/* 0495BC 800489BC 00000000 */ nop -/* 0495C0 800489C0 24A90036 */ addiu $t1, $a1, 0x36 -/* 0495C4 800489C4 24C80036 */ addiu $t0, $a2, 0x36 -/* 0495C8 800489C8 0411FF5D */ bal .L80048740 /* handwritten instruction */ -/* 0495CC 800489CC 340B000C */ ori $t3, $zero, 0xC -/* 0495D0 800489D0 0410005A */ bltzal $zero, .L80048B3C -/* 0495D4 800489D4 00000000 */ nop -/* 0495D8 800489D8 27EB0164 */ addiu $t3, $ra, 0x164 -/* 0495DC 800489DC 0411001E */ bal .L80048A58 /* handwritten instruction */ -/* 0495E0 800489E0 00000000 */ nop -/* 0495E4 800489E4 24A90050 */ addiu $t1, $a1, 0x50 -/* 0495E8 800489E8 24C80050 */ addiu $t0, $a2, 0x50 -/* 0495EC 800489EC 0411FF54 */ bal .L80048740 /* handwritten instruction */ -/* 0495F0 800489F0 340B0077 */ ori $t3, $zero, 0x77 -/* 0495F4 800489F4 24810140 */ addiu $at, $a0, 0x140 -/* 0495F8 800489F8 AC300000 */ sw $s0, 0x0($at) -/* 0495FC 800489FC AC310004 */ sw $s1, 0x4($at) -/* 049600 80048A00 AC320008 */ sw $s2, 0x8($at) -/* 049604 80048A04 AC33000C */ sw $s3, 0xC($at) -/* 049608 80048A08 AC340010 */ sw $s4, 0x10($at) -/* 04960C 80048A0C AC350014 */ sw $s5, 0x14($at) -/* 049610 80048A10 AC360018 */ sw $s6, 0x18($at) -/* 049614 80048A14 AC37001C */ sw $s7, 0x1C($at) -/* 049618 80048A18 A4870164 */ sh $a3, 0x164($a0) -/* 04961C 80048A1C 8FBF0000 */ lw $ra, 0x0($sp) -/* 049620 80048A20 8FA40004 */ lw $a0, 0x4($sp) -/* 049624 80048A24 8FA50008 */ lw $a1, 0x8($sp) -/* 049628 80048A28 8FA6000C */ lw $a2, 0xC($sp) -/* 04962C 80048A2C 8FA70010 */ lw $a3, 0x10($sp) -/* 049630 80048A30 8FB00014 */ lw $s0, 0x14($sp) -/* 049634 80048A34 8FB10018 */ lw $s1, 0x18($sp) -/* 049638 80048A38 8FB2001C */ lw $s2, 0x1C($sp) -/* 04963C 80048A3C 8FB30020 */ lw $s3, 0x20($sp) -/* 049640 80048A40 8FB40024 */ lw $s4, 0x24($sp) -/* 049644 80048A44 8FB50028 */ lw $s5, 0x28($sp) -/* 049648 80048A48 8FB6002C */ lw $s6, 0x2C($sp) -/* 04964C 80048A4C 8FB70030 */ lw $s7, 0x30($sp) -/* 049650 80048A50 03E00008 */ jr $ra -/* 049654 80048A54 27BD0044 */ addiu $sp, $sp, 0x44 -.L80048A58: -/* 049658 80048A58 84810188 */ lh $at, 0x188($a0) -/* 04965C 80048A5C 24880168 */ addiu $t0, $a0, 0x168 -/* 049660 80048A60 10200003 */ beqz $at, .L80048A70 -/* 049664 80048A64 25090010 */ addiu $t1, $t0, 0x10 -/* 049668 80048A68 01204021 */ addu $t0, $t1, $zero -/* 04966C 80048A6C 24890168 */ addiu $t1, $a0, 0x168 -.L80048A70: -/* 049670 80048A70 03E06821 */ addu $t5, $ra, $zero -/* 049674 80048A74 850A0000 */ lh $t2, 0x0($t0) -/* 049678 80048A78 0160F809 */ jalr $t3 -/* 04967C 80048A7C 852C0000 */ lh $t4, 0x0($t1) -/* 049680 80048A80 000A7400 */ sll $t6, $t2, 16 -/* 049684 80048A84 850A0002 */ lh $t2, 0x2($t0) -/* 049688 80048A88 0160F809 */ jalr $t3 -/* 04968C 80048A8C 852C0002 */ lh $t4, 0x2($t1) -/* 049690 80048A90 01CA7025 */ or $t6, $t6, $t2 -/* 049694 80048A94 850A0004 */ lh $t2, 0x4($t0) -/* 049698 80048A98 0160F809 */ jalr $t3 -/* 04969C 80048A9C 852C0004 */ lh $t4, 0x4($t1) -/* 0496A0 80048AA0 000A7C00 */ sll $t7, $t2, 16 -/* 0496A4 80048AA4 850A0006 */ lh $t2, 0x6($t0) -/* 0496A8 80048AA8 0160F809 */ jalr $t3 -/* 0496AC 80048AAC 852C0006 */ lh $t4, 0x6($t1) -/* 0496B0 80048AB0 01EA7825 */ or $t7, $t7, $t2 -/* 0496B4 80048AB4 850A0008 */ lh $t2, 0x8($t0) -/* 0496B8 80048AB8 0160F809 */ jalr $t3 -/* 0496BC 80048ABC 852C0008 */ lh $t4, 0x8($t1) -/* 0496C0 80048AC0 000AC400 */ sll $t8, $t2, 16 -/* 0496C4 80048AC4 850A000A */ lh $t2, 0xA($t0) -/* 0496C8 80048AC8 0160F809 */ jalr $t3 -/* 0496CC 80048ACC 852C000A */ lh $t4, 0xA($t1) -/* 0496D0 80048AD0 030AC025 */ or $t8, $t8, $t2 -/* 0496D4 80048AD4 850A000C */ lh $t2, 0xC($t0) -/* 0496D8 80048AD8 0160F809 */ jalr $t3 -/* 0496DC 80048ADC 852C000C */ lh $t4, 0xC($t1) -/* 0496E0 80048AE0 000ACC00 */ sll $t9, $t2, 16 -/* 0496E4 80048AE4 850A000E */ lh $t2, 0xE($t0) -/* 0496E8 80048AE8 0160F809 */ jalr $t3 -/* 0496EC 80048AEC 852C000E */ lh $t4, 0xE($t1) -/* 0496F0 80048AF0 01A0F821 */ addu $ra, $t5, $zero -/* 0496F4 80048AF4 03E00008 */ jr $ra -/* 0496F8 80048AF8 032AC825 */ or $t9, $t9, $t2 -.L80048AFC: -/* 0496FC 80048AFC 000A5083 */ sra $t2, $t2, 2 -/* 049700 80048B00 000C6043 */ sra $t4, $t4, 1 -/* 049704 80048B04 014C5021 */ addu $t2, $t2, $t4 -/* 049708 80048B08 000C6043 */ sra $t4, $t4, 1 -/* 04970C 80048B0C 1000000B */ b .L80048B3C -/* 049710 80048B10 014C5021 */ addu $t2, $t2, $t4 -.L80048B14: -/* 049714 80048B14 000A5043 */ sra $t2, $t2, 1 -/* 049718 80048B18 000C6043 */ sra $t4, $t4, 1 -/* 04971C 80048B1C 10000007 */ b .L80048B3C -/* 049720 80048B20 014C5021 */ addu $t2, $t2, $t4 -.L80048B24: -/* 049724 80048B24 000A5043 */ sra $t2, $t2, 1 -/* 049728 80048B28 000C6083 */ sra $t4, $t4, 2 -/* 04972C 80048B2C 018A6021 */ addu $t4, $t4, $t2 -/* 049730 80048B30 000A5043 */ sra $t2, $t2, 1 -/* 049734 80048B34 10000001 */ b .L80048B3C -/* 049738 80048B38 014C5021 */ addu $t2, $t2, $t4 -.L80048B3C: -/* 04973C 80048B3C 05410003 */ bgez $t2, .L80048B4C -/* 049740 80048B40 00006021 */ addu $t4, $zero, $zero -/* 049744 80048B44 000A5023 */ negu $t2, $t2 -/* 049748 80048B48 340C0001 */ ori $t4, $zero, 0x1 -.L80048B4C: -/* 04974C 80048B4C 2541D4CD */ addiu $at, $t2, -0x2B33 -/* 049750 80048B50 04200006 */ bltz $at, .L80048B6C -/* 049754 80048B54 000A0840 */ sll $at, $t2, 1 -/* 049758 80048B58 2541B19A */ addiu $at, $t2, -0x4E66 -/* 04975C 80048B5C 04200003 */ bltz $at, .L80048B6C -/* 049760 80048B60 25412B33 */ addiu $at, $t2, 0x2B33 -/* 049764 80048B64 000A0883 */ sra $at, $t2, 2 -/* 049768 80048B68 24216600 */ addiu $at, $at, 0x6600 -.L80048B6C: -/* 04976C 80048B6C 242A8001 */ addiu $t2, $at, -0x7FFF -/* 049770 80048B70 19400002 */ blez $t2, .L80048B7C -/* 049774 80048B74 00205021 */ addu $t2, $at, $zero -/* 049778 80048B78 340A7FFF */ ori $t2, $zero, 0x7FFF -.L80048B7C: -/* 04977C 80048B7C 15800002 */ bnez $t4, .L80048B88 -/* 049780 80048B80 000A5023 */ negu $t2, $t2 -/* 049784 80048B84 000A5023 */ negu $t2, $t2 -.L80048B88: -/* 049788 80048B88 03E00008 */ jr $ra -/* 04978C 80048B8C 314AFFFF */ andi $t2, $t2, 0xFFFF diff --git a/yamls/us/rom.yaml b/yamls/us/rom.yaml index 398edec..bff1e4b 100644 --- a/yamls/us/rom.yaml +++ b/yamls/us/rom.yaml @@ -98,7 +98,7 @@ - [0x485C0, c] # moves code - [0x48C60, c] # move effects code - [0x490A0, c] # audio functions to 0x50C00 - - [0x49190, hasm, ../../src/unk_49190] + - [0x49190, hasm] - [0x49790, c] - [0x49BA0, c, libnaudio/n_synallocvoice] - [0x49DC0, c, libnaudio/n_synthesizer]