From 7f6b34c29b170db18dd0bcdd06d7d35709e1710f Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 17 Sep 2020 21:28:34 -0400 Subject: [PATCH] Some more SI funcs --- .../{get_npc_pos.s => func_8005DECC.s} | 57 +---- .../code_e92d0_len_5da0/SetRenderMode.s | 31 --- .../si_execute_next_command.s | 219 ++++++++++-------- .../si_handle_case_default.s | 34 --- .../code_e92d0_len_5da0/si_handle_end.s | 36 --- coverage.py | 11 +- include/common_structs.h | 2 +- include/functions.h | 3 + include/macros.h | 1 + src/code_39210_len_aa0.c | 30 ++- src/code_a5dd0_len_114e0.c | 2 +- src/code_e92d0_len_5da0.c | 100 +++++++- 12 files changed, 264 insertions(+), 262 deletions(-) rename asm/nonmatchings/code_39210_len_aa0/{get_npc_pos.s => func_8005DECC.s} (92%) delete mode 100644 asm/nonmatchings/code_e92d0_len_5da0/SetRenderMode.s delete mode 100644 asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_default.s delete mode 100644 asm/nonmatchings/code_e92d0_len_5da0/si_handle_end.s diff --git a/asm/nonmatchings/code_39210_len_aa0/get_npc_pos.s b/asm/nonmatchings/code_39210_len_aa0/func_8005DECC.s similarity index 92% rename from asm/nonmatchings/code_39210_len_aa0/get_npc_pos.s rename to asm/nonmatchings/code_39210_len_aa0/func_8005DECC.s index 2d171c0ae9..3d011e246e 100644 --- a/asm/nonmatchings/code_39210_len_aa0/get_npc_pos.s +++ b/asm/nonmatchings/code_39210_len_aa0/func_8005DECC.s @@ -1,60 +1,7 @@ .set noat # allow manual use of $at .set noreorder # don't insert nops after branches - -glabel get_npc_pos -/* 039210 8005DE10 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 039214 8005DE14 AFB00010 */ sw $s0, 0x10($sp) -/* 039218 8005DE18 00A0802D */ daddu $s0, $a1, $zero -/* 03921C 8005DE1C AFB10014 */ sw $s1, 0x14($sp) -/* 039220 8005DE20 00C0882D */ daddu $s1, $a2, $zero -/* 039224 8005DE24 AFB20018 */ sw $s2, 0x18($sp) -/* 039228 8005DE28 00E0902D */ daddu $s2, $a3, $zero -/* 03922C 8005DE2C 3C038011 */ lui $v1, 0x8011 -/* 039230 8005DE30 2463EFC8 */ addiu $v1, $v1, -0x1038 -/* 039234 8005DE34 AFB3001C */ sw $s3, 0x1c($sp) -/* 039238 8005DE38 8FB30038 */ lw $s3, 0x38($sp) -/* 03923C 8005DE3C 2402FFFF */ addiu $v0, $zero, -1 -/* 039240 8005DE40 AFBF0020 */ sw $ra, 0x20($sp) -/* 039244 8005DE44 AE000000 */ sw $zero, ($s0) -/* 039248 8005DE48 AE200000 */ sw $zero, ($s1) -/* 03924C 8005DE4C AE400000 */ sw $zero, ($s2) -/* 039250 8005DE50 1482000A */ bne $a0, $v0, .L8005DE7C -/* 039254 8005DE54 AE600000 */ sw $zero, ($s3) -/* 039258 8005DE58 C4600028 */ lwc1 $f0, 0x28($v1) -/* 03925C 8005DE5C E6000000 */ swc1 $f0, ($s0) -/* 039260 8005DE60 C460002C */ lwc1 $f0, 0x2c($v1) -/* 039264 8005DE64 E6200000 */ swc1 $f0, ($s1) -/* 039268 8005DE68 C4600030 */ lwc1 $f0, 0x30($v1) -/* 03926C 8005DE6C E6400000 */ swc1 $f0, ($s2) -/* 039270 8005DE70 8C620000 */ lw $v0, ($v1) -/* 039274 8005DE74 080177A9 */ j .L8005DEA4 -/* 039278 8005DE78 30420006 */ andi $v0, $v0, 6 - -.L8005DE7C: -/* 03927C 8005DE7C 0C00EABB */ jal get_npc_unsafe -/* 039280 8005DE80 00000000 */ nop -/* 039284 8005DE84 C4400038 */ lwc1 $f0, 0x38($v0) -/* 039288 8005DE88 E6000000 */ swc1 $f0, ($s0) -/* 03928C 8005DE8C C440003C */ lwc1 $f0, 0x3c($v0) -/* 039290 8005DE90 E6200000 */ swc1 $f0, ($s1) -/* 039294 8005DE94 C4400040 */ lwc1 $f0, 0x40($v0) -/* 039298 8005DE98 E6400000 */ swc1 $f0, ($s2) -/* 03929C 8005DE9C 8C420000 */ lw $v0, ($v0) -/* 0392A0 8005DEA0 30420800 */ andi $v0, $v0, 0x800 -.L8005DEA4: -/* 0392A4 8005DEA4 10400002 */ beqz $v0, .L8005DEB0 -/* 0392A8 8005DEA8 24020001 */ addiu $v0, $zero, 1 -/* 0392AC 8005DEAC AE620000 */ sw $v0, ($s3) -.L8005DEB0: -/* 0392B0 8005DEB0 8FBF0020 */ lw $ra, 0x20($sp) -/* 0392B4 8005DEB4 8FB3001C */ lw $s3, 0x1c($sp) -/* 0392B8 8005DEB8 8FB20018 */ lw $s2, 0x18($sp) -/* 0392BC 8005DEBC 8FB10014 */ lw $s1, 0x14($sp) -/* 0392C0 8005DEC0 8FB00010 */ lw $s0, 0x10($sp) -/* 0392C4 8005DEC4 03E00008 */ jr $ra -/* 0392C8 8005DEC8 27BD0028 */ addiu $sp, $sp, 0x28 - +glabel func_8005DECC /* 0392CC 8005DECC 27BDFFD0 */ addiu $sp, $sp, -0x30 /* 0392D0 8005DED0 AFB10014 */ sw $s1, 0x14($sp) /* 0392D4 8005DED4 0080882D */ daddu $s1, $a0, $zero @@ -741,5 +688,3 @@ glabel get_npc_pos /* 039CA8 8005E8A8 00000000 */ nop /* 039CAC 8005E8AC 00000000 */ nop - - diff --git a/asm/nonmatchings/code_e92d0_len_5da0/SetRenderMode.s b/asm/nonmatchings/code_e92d0_len_5da0/SetRenderMode.s deleted file mode 100644 index 474a9c2c6f..0000000000 --- a/asm/nonmatchings/code_e92d0_len_5da0/SetRenderMode.s +++ /dev/null @@ -1,31 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - - -glabel SetRenderMode -/* 0EEEA4 802CA4F4 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0EEEA8 802CA4F8 AFB10014 */ sw $s1, 0x14($sp) -/* 0EEEAC 802CA4FC 0080882D */ daddu $s1, $a0, $zero -/* 0EEEB0 802CA500 AFBF0018 */ sw $ra, 0x18($sp) -/* 0EEEB4 802CA504 AFB00010 */ sw $s0, 0x10($sp) -/* 0EEEB8 802CA508 8E30000C */ lw $s0, 0xc($s1) -/* 0EEEBC 802CA50C 8E050000 */ lw $a1, ($s0) -/* 0EEEC0 802CA510 0C0B1EAF */ jal get_variable -/* 0EEEC4 802CA514 26100004 */ addiu $s0, $s0, 4 -/* 0EEEC8 802CA518 0220202D */ daddu $a0, $s1, $zero -/* 0EEECC 802CA51C 8E050000 */ lw $a1, ($s0) -/* 0EEED0 802CA520 0C0B1EAF */ jal get_variable -/* 0EEED4 802CA524 0040802D */ daddu $s0, $v0, $zero -/* 0EEED8 802CA528 0200202D */ daddu $a0, $s0, $zero -/* 0EEEDC 802CA52C 0C046C04 */ jal get_model_list_index_from_tree_index -/* 0EEEE0 802CA530 0040802D */ daddu $s0, $v0, $zero -/* 0EEEE4 802CA534 0C046B4C */ jal get_model_from_list_index -/* 0EEEE8 802CA538 0040202D */ daddu $a0, $v0, $zero -/* 0EEEEC 802CA53C A05000A6 */ sb $s0, 0xa6($v0) -/* 0EEEF0 802CA540 8FBF0018 */ lw $ra, 0x18($sp) -/* 0EEEF4 802CA544 8FB10014 */ lw $s1, 0x14($sp) -/* 0EEEF8 802CA548 8FB00010 */ lw $s0, 0x10($sp) -/* 0EEEFC 802CA54C 24020002 */ addiu $v0, $zero, 2 -/* 0EEF00 802CA550 03E00008 */ jr $ra -/* 0EEF04 802CA554 27BD0020 */ addiu $sp, $sp, 0x20 - diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_execute_next_command.s b/asm/nonmatchings/code_e92d0_len_5da0/si_execute_next_command.s index 1c7eea8e3f..b1f56612dd 100644 --- a/asm/nonmatchings/code_e92d0_len_5da0/si_execute_next_command.s +++ b/asm/nonmatchings/code_e92d0_len_5da0/si_execute_next_command.s @@ -32,475 +32,506 @@ glabel si_execute_next_command /* 0EBE18 802C7468 00041080 */ sll $v0, $a0, 2 /* 0EBE1C 802C746C 00621821 */ addu $v1, $v1, $v0 /* 0EBE20 802C7470 A2040001 */ sb $a0, 1($s0) -/* 0EBE24 802C7474 080B1E95 */ j si_handle_end +/* 0EBE24 802C7474 080B1E95 */ j .L802C7A54 /* 0EBE28 802C7478 AE030008 */ sw $v1, 8($s0) /* 0EBE2C 802C747C 0C0B1266 */ jal si_handle_return /* 0EBE30 802C7480 0200202D */ daddu $a0, $s0, $zero -/* 0EBE34 802C7484 080B1E95 */ j si_handle_end +/* 0EBE34 802C7484 080B1E95 */ j .L802C7A54 /* 0EBE38 802C7488 0040282D */ daddu $a1, $v0, $zero /* 0EBE3C 802C748C 0C0B126E */ jal si_handle_label /* 0EBE40 802C7490 0200202D */ daddu $a0, $s0, $zero -/* 0EBE44 802C7494 080B1E95 */ j si_handle_end +/* 0EBE44 802C7494 080B1E95 */ j .L802C7A54 /* 0EBE48 802C7498 0040282D */ daddu $a1, $v0, $zero /* 0EBE4C 802C749C 0C0B1270 */ jal si_handle_goto /* 0EBE50 802C74A0 0200202D */ daddu $a0, $s0, $zero -/* 0EBE54 802C74A4 080B1E95 */ j si_handle_end +/* 0EBE54 802C74A4 080B1E95 */ j .L802C7A54 /* 0EBE58 802C74A8 0040282D */ daddu $a1, $v0, $zero /* 0EBE5C 802C74AC 0C0B1280 */ jal si_handle_Loop /* 0EBE60 802C74B0 0200202D */ daddu $a0, $s0, $zero -/* 0EBE64 802C74B4 080B1E95 */ j si_handle_end +/* 0EBE64 802C74B4 080B1E95 */ j .L802C7A54 /* 0EBE68 802C74B8 0040282D */ daddu $a1, $v0, $zero /* 0EBE6C 802C74BC 0C0B1292 */ jal si_handle_end_loop /* 0EBE70 802C74C0 0200202D */ daddu $a0, $s0, $zero -/* 0EBE74 802C74C4 080B1E95 */ j si_handle_end +/* 0EBE74 802C74C4 080B1E95 */ j .L802C7A54 /* 0EBE78 802C74C8 0040282D */ daddu $a1, $v0, $zero /* 0EBE7C 802C74CC 0C0B12C3 */ jal si_handle_break_loop /* 0EBE80 802C74D0 0200202D */ daddu $a0, $s0, $zero -/* 0EBE84 802C74D4 080B1E95 */ j si_handle_end +/* 0EBE84 802C74D4 080B1E95 */ j .L802C7A54 /* 0EBE88 802C74D8 0040282D */ daddu $a1, $v0, $zero /* 0EBE8C 802C74DC 0C0B12D7 */ jal si_handle_wait /* 0EBE90 802C74E0 0200202D */ daddu $a0, $s0, $zero -/* 0EBE94 802C74E4 080B1E95 */ j si_handle_end +/* 0EBE94 802C74E4 080B1E95 */ j .L802C7A54 /* 0EBE98 802C74E8 0040282D */ daddu $a1, $v0, $zero /* 0EBE9C 802C74EC 0C0B12EE */ jal si_handle_wait_seconds /* 0EBEA0 802C74F0 0200202D */ daddu $a0, $s0, $zero -/* 0EBEA4 802C74F4 080B1E95 */ j si_handle_end +/* 0EBEA4 802C74F4 080B1E95 */ j .L802C7A54 /* 0EBEA8 802C74F8 0040282D */ daddu $a1, $v0, $zero /* 0EBEAC 802C74FC 0C0B1310 */ jal si_handle_if_equal /* 0EBEB0 802C7500 0200202D */ daddu $a0, $s0, $zero -/* 0EBEB4 802C7504 080B1E95 */ j si_handle_end +/* 0EBEB4 802C7504 080B1E95 */ j .L802C7A54 /* 0EBEB8 802C7508 0040282D */ daddu $a1, $v0, $zero /* 0EBEBC 802C750C 0C0B1328 */ jal si_handle_if_not_equal /* 0EBEC0 802C7510 0200202D */ daddu $a0, $s0, $zero -/* 0EBEC4 802C7514 080B1E95 */ j si_handle_end +/* 0EBEC4 802C7514 080B1E95 */ j .L802C7A54 /* 0EBEC8 802C7518 0040282D */ daddu $a1, $v0, $zero /* 0EBECC 802C751C 0C0B1340 */ jal si_handle_if_less /* 0EBED0 802C7520 0200202D */ daddu $a0, $s0, $zero -/* 0EBED4 802C7524 080B1E95 */ j si_handle_end +/* 0EBED4 802C7524 080B1E95 */ j .L802C7A54 /* 0EBED8 802C7528 0040282D */ daddu $a1, $v0, $zero /* 0EBEDC 802C752C 0C0B1359 */ jal si_handle_if_greater /* 0EBEE0 802C7530 0200202D */ daddu $a0, $s0, $zero -/* 0EBEE4 802C7534 080B1E95 */ j si_handle_end +/* 0EBEE4 802C7534 080B1E95 */ j .L802C7A54 /* 0EBEE8 802C7538 0040282D */ daddu $a1, $v0, $zero /* 0EBEEC 802C753C 0C0B1372 */ jal si_handle_if_less_equal /* 0EBEF0 802C7540 0200202D */ daddu $a0, $s0, $zero -/* 0EBEF4 802C7544 080B1E95 */ j si_handle_end +/* 0EBEF4 802C7544 080B1E95 */ j .L802C7A54 /* 0EBEF8 802C7548 0040282D */ daddu $a1, $v0, $zero /* 0EBEFC 802C754C 0C0B138B */ jal si_handle_if_greater_equal /* 0EBF00 802C7550 0200202D */ daddu $a0, $s0, $zero -/* 0EBF04 802C7554 080B1E95 */ j si_handle_end +/* 0EBF04 802C7554 080B1E95 */ j .L802C7A54 /* 0EBF08 802C7558 0040282D */ daddu $a1, $v0, $zero /* 0EBF0C 802C755C 0C0B13A4 */ jal si_handle_if_AND /* 0EBF10 802C7560 0200202D */ daddu $a0, $s0, $zero -/* 0EBF14 802C7564 080B1E95 */ j si_handle_end +/* 0EBF14 802C7564 080B1E95 */ j .L802C7A54 /* 0EBF18 802C7568 0040282D */ daddu $a1, $v0, $zero /* 0EBF1C 802C756C 0C0B13BA */ jal si_handle_if_not_AND /* 0EBF20 802C7570 0200202D */ daddu $a0, $s0, $zero -/* 0EBF24 802C7574 080B1E95 */ j si_handle_end +/* 0EBF24 802C7574 080B1E95 */ j .L802C7A54 /* 0EBF28 802C7578 0040282D */ daddu $a1, $v0, $zero /* 0EBF2C 802C757C 0C0B13D0 */ jal si_handle_else /* 0EBF30 802C7580 0200202D */ daddu $a0, $s0, $zero -/* 0EBF34 802C7584 080B1E95 */ j si_handle_end +/* 0EBF34 802C7584 080B1E95 */ j .L802C7A54 /* 0EBF38 802C7588 0040282D */ daddu $a1, $v0, $zero /* 0EBF3C 802C758C 0C0B13DB */ jal si_handle_end_if /* 0EBF40 802C7590 0200202D */ daddu $a0, $s0, $zero -/* 0EBF44 802C7594 080B1E95 */ j si_handle_end +/* 0EBF44 802C7594 080B1E95 */ j .L802C7A54 /* 0EBF48 802C7598 0040282D */ daddu $a1, $v0, $zero /* 0EBF4C 802C759C 0C0B13DD */ jal si_handle_switch /* 0EBF50 802C75A0 0200202D */ daddu $a0, $s0, $zero -/* 0EBF54 802C75A4 080B1E95 */ j si_handle_end +/* 0EBF54 802C75A4 080B1E95 */ j .L802C7A54 /* 0EBF58 802C75A8 0040282D */ daddu $a1, $v0, $zero /* 0EBF5C 802C75AC 0C0B13F9 */ jal si_handle_switch_const /* 0EBF60 802C75B0 0200202D */ daddu $a0, $s0, $zero -/* 0EBF64 802C75B4 080B1E95 */ j si_handle_end +/* 0EBF64 802C75B4 080B1E95 */ j .L802C7A54 /* 0EBF68 802C75B8 0040282D */ daddu $a1, $v0, $zero /* 0EBF6C 802C75BC 0C0B140C */ jal si_handle_case_equal /* 0EBF70 802C75C0 0200202D */ daddu $a0, $s0, $zero -/* 0EBF74 802C75C4 080B1E95 */ j si_handle_end +/* 0EBF74 802C75C4 080B1E95 */ j .L802C7A54 /* 0EBF78 802C75C8 0040282D */ daddu $a1, $v0, $zero /* 0EBF7C 802C75CC 0C0B142F */ jal si_handle_case_not_equal /* 0EBF80 802C75D0 0200202D */ daddu $a0, $s0, $zero -/* 0EBF84 802C75D4 080B1E95 */ j si_handle_end +/* 0EBF84 802C75D4 080B1E95 */ j .L802C7A54 /* 0EBF88 802C75D8 0040282D */ daddu $a1, $v0, $zero /* 0EBF8C 802C75DC 0C0B1452 */ jal si_handle_case_less /* 0EBF90 802C75E0 0200202D */ daddu $a0, $s0, $zero -/* 0EBF94 802C75E4 080B1E95 */ j si_handle_end +/* 0EBF94 802C75E4 080B1E95 */ j .L802C7A54 /* 0EBF98 802C75E8 0040282D */ daddu $a1, $v0, $zero /* 0EBF9C 802C75EC 0C0B1476 */ jal si_handle_case_less_equal /* 0EBFA0 802C75F0 0200202D */ daddu $a0, $s0, $zero -/* 0EBFA4 802C75F4 080B1E95 */ j si_handle_end +/* 0EBFA4 802C75F4 080B1E95 */ j .L802C7A54 /* 0EBFA8 802C75F8 0040282D */ daddu $a1, $v0, $zero /* 0EBFAC 802C75FC 0C0B149A */ jal si_handle_case_greater /* 0EBFB0 802C7600 0200202D */ daddu $a0, $s0, $zero -/* 0EBFB4 802C7604 080B1E95 */ j si_handle_end +/* 0EBFB4 802C7604 080B1E95 */ j .L802C7A54 /* 0EBFB8 802C7608 0040282D */ daddu $a1, $v0, $zero /* 0EBFBC 802C760C 0C0B14BE */ jal si_handle_case_greater_equal /* 0EBFC0 802C7610 0200202D */ daddu $a0, $s0, $zero -/* 0EBFC4 802C7614 080B1E95 */ j si_handle_end +/* 0EBFC4 802C7614 080B1E95 */ j .L802C7A54 /* 0EBFC8 802C7618 0040282D */ daddu $a1, $v0, $zero /* 0EBFCC 802C761C 0C0B1511 */ jal si_handle_case_default /* 0EBFD0 802C7620 0200202D */ daddu $a0, $s0, $zero -/* 0EBFD4 802C7624 080B1E95 */ j si_handle_end +/* 0EBFD4 802C7624 080B1E95 */ j .L802C7A54 /* 0EBFD8 802C7628 0040282D */ daddu $a1, $v0, $zero /* 0EBFDC 802C762C 0C0B15B5 */ jal si_handle_break_case /* 0EBFE0 802C7630 0200202D */ daddu $a0, $s0, $zero -/* 0EBFE4 802C7634 080B1E95 */ j si_handle_end +/* 0EBFE4 802C7634 080B1E95 */ j .L802C7A54 /* 0EBFE8 802C7638 0040282D */ daddu $a1, $v0, $zero /* 0EBFEC 802C763C 0C0B1546 */ jal si_handle_case_equal_OR /* 0EBFF0 802C7640 0200202D */ daddu $a0, $s0, $zero -/* 0EBFF4 802C7644 080B1E95 */ j si_handle_end +/* 0EBFF4 802C7644 080B1E95 */ j .L802C7A54 /* 0EBFF8 802C7648 0040282D */ daddu $a1, $v0, $zero /* 0EBFFC 802C764C 0C0B1597 */ jal si_handle_end_case_group /* 0EC000 802C7650 0200202D */ daddu $a0, $s0, $zero -/* 0EC004 802C7654 080B1E95 */ j si_handle_end +/* 0EC004 802C7654 080B1E95 */ j .L802C7A54 /* 0EC008 802C7658 0040282D */ daddu $a1, $v0, $zero /* 0EC00C 802C765C 0C0B156E */ jal si_handle_case_equal_AND /* 0EC010 802C7660 0200202D */ daddu $a0, $s0, $zero -/* 0EC014 802C7664 080B1E95 */ j si_handle_end +/* 0EC014 802C7664 080B1E95 */ j .L802C7A54 /* 0EC018 802C7668 0040282D */ daddu $a1, $v0, $zero /* 0EC01C 802C766C 0C0B1527 */ jal si_handle_case_AND /* 0EC020 802C7670 0200202D */ daddu $a0, $s0, $zero -/* 0EC024 802C7674 080B1E95 */ j si_handle_end +/* 0EC024 802C7674 080B1E95 */ j .L802C7A54 /* 0EC028 802C7678 0040282D */ daddu $a1, $v0, $zero /* 0EC02C 802C767C 0C0B14E2 */ jal si_handle_case_range /* 0EC030 802C7680 0200202D */ daddu $a0, $s0, $zero -/* 0EC034 802C7684 080B1E95 */ j si_handle_end +/* 0EC034 802C7684 080B1E95 */ j .L802C7A54 /* 0EC038 802C7688 0040282D */ daddu $a1, $v0, $zero /* 0EC03C 802C768C 0C0B15C6 */ jal si_handle_end_switch /* 0EC040 802C7690 0200202D */ daddu $a0, $s0, $zero -/* 0EC044 802C7694 080B1E95 */ j si_handle_end +/* 0EC044 802C7694 080B1E95 */ j .L802C7A54 /* 0EC048 802C7698 0040282D */ daddu $a1, $v0, $zero /* 0EC04C 802C769C 0C0B15D1 */ jal si_handle_set_var /* 0EC050 802C76A0 0200202D */ daddu $a0, $s0, $zero -/* 0EC054 802C76A4 080B1E95 */ j si_handle_end +/* 0EC054 802C76A4 080B1E95 */ j .L802C7A54 /* 0EC058 802C76A8 0040282D */ daddu $a1, $v0, $zero /* 0EC05C 802C76AC 0C0B15E4 */ jal si_handle_set_const /* 0EC060 802C76B0 0200202D */ daddu $a0, $s0, $zero -/* 0EC064 802C76B4 080B1E95 */ j si_handle_end +/* 0EC064 802C76B4 080B1E95 */ j .L802C7A54 /* 0EC068 802C76B8 0040282D */ daddu $a1, $v0, $zero /* 0EC06C 802C76BC 0C0B15EE */ jal si_handle_set_float /* 0EC070 802C76C0 0200202D */ daddu $a0, $s0, $zero -/* 0EC074 802C76C4 080B1E95 */ j si_handle_end +/* 0EC074 802C76C4 080B1E95 */ j .L802C7A54 /* 0EC078 802C76C8 0040282D */ daddu $a1, $v0, $zero /* 0EC07C 802C76CC 0C0B1601 */ jal si_handle_add /* 0EC080 802C76D0 0200202D */ daddu $a0, $s0, $zero -/* 0EC084 802C76D4 080B1E95 */ j si_handle_end +/* 0EC084 802C76D4 080B1E95 */ j .L802C7A54 /* 0EC088 802C76D8 0040282D */ daddu $a1, $v0, $zero /* 0EC08C 802C76DC 0C0B161A */ jal si_handle_subtract /* 0EC090 802C76E0 0200202D */ daddu $a0, $s0, $zero -/* 0EC094 802C76E4 080B1E95 */ j si_handle_end +/* 0EC094 802C76E4 080B1E95 */ j .L802C7A54 /* 0EC098 802C76E8 0040282D */ daddu $a1, $v0, $zero /* 0EC09C 802C76EC 0C0B1633 */ jal si_handle_multiply /* 0EC0A0 802C76F0 0200202D */ daddu $a0, $s0, $zero -/* 0EC0A4 802C76F4 080B1E95 */ j si_handle_end +/* 0EC0A4 802C76F4 080B1E95 */ j .L802C7A54 /* 0EC0A8 802C76F8 0040282D */ daddu $a1, $v0, $zero /* 0EC0AC 802C76FC 0C0B164D */ jal si_handle_divide /* 0EC0B0 802C7700 0200202D */ daddu $a0, $s0, $zero -/* 0EC0B4 802C7704 080B1E95 */ j si_handle_end +/* 0EC0B4 802C7704 080B1E95 */ j .L802C7A54 /* 0EC0B8 802C7708 0040282D */ daddu $a1, $v0, $zero /* 0EC0BC 802C770C 0C0B166F */ jal si_handle_mod /* 0EC0C0 802C7710 0200202D */ daddu $a0, $s0, $zero -/* 0EC0C4 802C7714 080B1E95 */ j si_handle_end +/* 0EC0C4 802C7714 080B1E95 */ j .L802C7A54 /* 0EC0C8 802C7718 0040282D */ daddu $a1, $v0, $zero /* 0EC0CC 802C771C 0C0B16A1 */ jal si_handle_addF /* 0EC0D0 802C7720 0200202D */ daddu $a0, $s0, $zero -/* 0EC0D4 802C7724 080B1E95 */ j si_handle_end +/* 0EC0D4 802C7724 080B1E95 */ j .L802C7A54 /* 0EC0D8 802C7728 0040282D */ daddu $a1, $v0, $zero /* 0EC0DC 802C772C 0C0B16BB */ jal si_handle_subtractF /* 0EC0E0 802C7730 0200202D */ daddu $a0, $s0, $zero -/* 0EC0E4 802C7734 080B1E95 */ j si_handle_end +/* 0EC0E4 802C7734 080B1E95 */ j .L802C7A54 /* 0EC0E8 802C7738 0040282D */ daddu $a1, $v0, $zero /* 0EC0EC 802C773C 0C0B16D5 */ jal si_handle_multiplyF /* 0EC0F0 802C7740 0200202D */ daddu $a0, $s0, $zero -/* 0EC0F4 802C7744 080B1E95 */ j si_handle_end +/* 0EC0F4 802C7744 080B1E95 */ j .L802C7A54 /* 0EC0F8 802C7748 0040282D */ daddu $a1, $v0, $zero /* 0EC0FC 802C774C 0C0B16F0 */ jal si_handle_divideF /* 0EC100 802C7750 0200202D */ daddu $a0, $s0, $zero -/* 0EC104 802C7754 080B1E95 */ j si_handle_end +/* 0EC104 802C7754 080B1E95 */ j .L802C7A54 /* 0EC108 802C7758 0040282D */ daddu $a1, $v0, $zero /* 0EC10C 802C775C 0C0B170A */ jal si_handle_set_int_buffer_ptr /* 0EC110 802C7760 0200202D */ daddu $a0, $s0, $zero -/* 0EC114 802C7764 080B1E95 */ j si_handle_end +/* 0EC114 802C7764 080B1E95 */ j .L802C7A54 /* 0EC118 802C7768 0040282D */ daddu $a1, $v0, $zero /* 0EC11C 802C776C 0C0B1724 */ jal si_handle_get_1_word /* 0EC120 802C7770 0200202D */ daddu $a0, $s0, $zero -/* 0EC124 802C7774 080B1E95 */ j si_handle_end +/* 0EC124 802C7774 080B1E95 */ j .L802C7A54 /* 0EC128 802C7778 0040282D */ daddu $a1, $v0, $zero /* 0EC12C 802C777C 0C0B1731 */ jal si_handle_get_2_word /* 0EC130 802C7780 0200202D */ daddu $a0, $s0, $zero -/* 0EC134 802C7784 080B1E95 */ j si_handle_end +/* 0EC134 802C7784 080B1E95 */ j .L802C7A54 /* 0EC138 802C7788 0040282D */ daddu $a1, $v0, $zero /* 0EC13C 802C778C 0C0B174B */ jal si_handle_get_3_word /* 0EC140 802C7790 0200202D */ daddu $a0, $s0, $zero -/* 0EC144 802C7794 080B1E95 */ j si_handle_end +/* 0EC144 802C7794 080B1E95 */ j .L802C7A54 /* 0EC148 802C7798 0040282D */ daddu $a1, $v0, $zero /* 0EC14C 802C779C 0C0B176D */ jal si_handle_get_4_word /* 0EC150 802C77A0 0200202D */ daddu $a0, $s0, $zero -/* 0EC154 802C77A4 080B1E95 */ j si_handle_end +/* 0EC154 802C77A4 080B1E95 */ j .L802C7A54 /* 0EC158 802C77A8 0040282D */ daddu $a1, $v0, $zero /* 0EC15C 802C77AC 0C0B1797 */ jal si_handle_get_Nth_word /* 0EC160 802C77B0 0200202D */ daddu $a0, $s0, $zero -/* 0EC164 802C77B4 080B1E95 */ j si_handle_end +/* 0EC164 802C77B4 080B1E95 */ j .L802C7A54 /* 0EC168 802C77B8 0040282D */ daddu $a1, $v0, $zero /* 0EC16C 802C77BC 0C0B1717 */ jal si_handle_set_float_buffer_ptr /* 0EC170 802C77C0 0200202D */ daddu $a0, $s0, $zero -/* 0EC174 802C77C4 080B1E95 */ j si_handle_end +/* 0EC174 802C77C4 080B1E95 */ j .L802C7A54 /* 0EC178 802C77C8 0040282D */ daddu $a1, $v0, $zero /* 0EC17C 802C77CC 0C0B17AD */ jal si_handle_get_1_float /* 0EC180 802C77D0 0200202D */ daddu $a0, $s0, $zero -/* 0EC184 802C77D4 080B1E95 */ j si_handle_end +/* 0EC184 802C77D4 080B1E95 */ j .L802C7A54 /* 0EC188 802C77D8 0040282D */ daddu $a1, $v0, $zero /* 0EC18C 802C77DC 0C0B17C3 */ jal si_handle_get_2_float /* 0EC190 802C77E0 0200202D */ daddu $a0, $s0, $zero -/* 0EC194 802C77E4 080B1E95 */ j si_handle_end +/* 0EC194 802C77E4 080B1E95 */ j .L802C7A54 /* 0EC198 802C77E8 0040282D */ daddu $a1, $v0, $zero /* 0EC19C 802C77EC 0C0B17E7 */ jal si_handle_get_3_float /* 0EC1A0 802C77F0 0200202D */ daddu $a0, $s0, $zero -/* 0EC1A4 802C77F4 080B1E95 */ j si_handle_end +/* 0EC1A4 802C77F4 080B1E95 */ j .L802C7A54 /* 0EC1A8 802C77F8 0040282D */ daddu $a1, $v0, $zero /* 0EC1AC 802C77FC 0C0B1817 */ jal si_handle_get_4_float /* 0EC1B0 802C7800 0200202D */ daddu $a0, $s0, $zero -/* 0EC1B4 802C7804 080B1E95 */ j si_handle_end +/* 0EC1B4 802C7804 080B1E95 */ j .L802C7A54 /* 0EC1B8 802C7808 0040282D */ daddu $a1, $v0, $zero /* 0EC1BC 802C780C 0C0B1853 */ jal si_handle_get_Nth_float /* 0EC1C0 802C7810 0200202D */ daddu $a0, $s0, $zero -/* 0EC1C4 802C7814 080B1E95 */ j si_handle_end +/* 0EC1C4 802C7814 080B1E95 */ j .L802C7A54 /* 0EC1C8 802C7818 0040282D */ daddu $a1, $v0, $zero /* 0EC1CC 802C781C 0C0B186B */ jal si_handle_set_array /* 0EC1D0 802C7820 0200202D */ daddu $a0, $s0, $zero -/* 0EC1D4 802C7824 080B1E95 */ j si_handle_end +/* 0EC1D4 802C7824 080B1E95 */ j .L802C7A54 /* 0EC1D8 802C7828 0040282D */ daddu $a1, $v0, $zero /* 0EC1DC 802C782C 0C0B1878 */ jal si_handle_set_flag_array /* 0EC1E0 802C7830 0200202D */ daddu $a0, $s0, $zero -/* 0EC1E4 802C7834 080B1E95 */ j si_handle_end +/* 0EC1E4 802C7834 080B1E95 */ j .L802C7A54 /* 0EC1E8 802C7838 0040282D */ daddu $a1, $v0, $zero /* 0EC1EC 802C783C 0C0B1885 */ jal si_handle_allocate_array /* 0EC1F0 802C7840 0200202D */ daddu $a0, $s0, $zero -/* 0EC1F4 802C7844 080B1E95 */ j si_handle_end +/* 0EC1F4 802C7844 080B1E95 */ j .L802C7A54 /* 0EC1F8 802C7848 0040282D */ daddu $a1, $v0, $zero /* 0EC1FC 802C784C 0C0B1A1C */ jal si_handle_kill /* 0EC200 802C7850 0200202D */ daddu $a0, $s0, $zero -/* 0EC204 802C7854 080B1E95 */ j si_handle_end +/* 0EC204 802C7854 080B1E95 */ j .L802C7A54 /* 0EC208 802C7858 0040282D */ daddu $a1, $v0, $zero /* 0EC20C 802C785C 0C0B189C */ jal si_handle_AND /* 0EC210 802C7860 0200202D */ daddu $a0, $s0, $zero -/* 0EC214 802C7864 080B1E95 */ j si_handle_end +/* 0EC214 802C7864 080B1E95 */ j .L802C7A54 /* 0EC218 802C7868 0040282D */ daddu $a1, $v0, $zero /* 0EC21C 802C786C 0C0B18B5 */ jal si_handle_AND_const /* 0EC220 802C7870 0200202D */ daddu $a0, $s0, $zero -/* 0EC224 802C7874 080B1E95 */ j si_handle_end +/* 0EC224 802C7874 080B1E95 */ j .L802C7A54 /* 0EC228 802C7878 0040282D */ daddu $a1, $v0, $zero /* 0EC22C 802C787C 0C0B18CB */ jal si_handle_OR /* 0EC230 802C7880 0200202D */ daddu $a0, $s0, $zero -/* 0EC234 802C7884 080B1E95 */ j si_handle_end +/* 0EC234 802C7884 080B1E95 */ j .L802C7A54 /* 0EC238 802C7888 0040282D */ daddu $a1, $v0, $zero /* 0EC23C 802C788C 0C0B18E4 */ jal si_handle_OR_const /* 0EC240 802C7890 0200202D */ daddu $a0, $s0, $zero -/* 0EC244 802C7894 080B1E95 */ j si_handle_end +/* 0EC244 802C7894 080B1E95 */ j .L802C7A54 /* 0EC248 802C7898 0040282D */ daddu $a1, $v0, $zero /* 0EC24C 802C789C 0C0B18FA */ jal si_handle_call /* 0EC250 802C78A0 0200202D */ daddu $a0, $s0, $zero -/* 0EC254 802C78A4 080B1E95 */ j si_handle_end +/* 0EC254 802C78A4 080B1E95 */ j .L802C7A54 /* 0EC258 802C78A8 0040282D */ daddu $a1, $v0, $zero /* 0EC25C 802C78AC 0C0B191B */ jal si_handle_exec1 /* 0EC260 802C78B0 0200202D */ daddu $a0, $s0, $zero -/* 0EC264 802C78B4 080B1E95 */ j si_handle_end +/* 0EC264 802C78B4 080B1E95 */ j .L802C7A54 /* 0EC268 802C78B8 0040282D */ daddu $a1, $v0, $zero /* 0EC26C 802C78BC 0C0B1949 */ jal si_handle_exec2 /* 0EC270 802C78C0 0200202D */ daddu $a0, $s0, $zero -/* 0EC274 802C78C4 080B1E95 */ j si_handle_end +/* 0EC274 802C78C4 080B1E95 */ j .L802C7A54 /* 0EC278 802C78C8 0040282D */ daddu $a1, $v0, $zero /* 0EC27C 802C78CC 0C0B197F */ jal si_handle_exec_wait /* 0EC280 802C78D0 0200202D */ daddu $a0, $s0, $zero -/* 0EC284 802C78D4 080B1E95 */ j si_handle_end +/* 0EC284 802C78D4 080B1E95 */ j .L802C7A54 /* 0EC288 802C78D8 0040282D */ daddu $a1, $v0, $zero /* 0EC28C 802C78DC 0C0B19C5 */ jal si_handle_bind /* 0EC290 802C78E0 0200202D */ daddu $a0, $s0, $zero -/* 0EC294 802C78E4 080B1E95 */ j si_handle_end +/* 0EC294 802C78E4 080B1E95 */ j .L802C7A54 /* 0EC298 802C78E8 0040282D */ daddu $a1, $v0, $zero /* 0EC29C 802C78EC 0C0B1A14 */ jal si_handle_unbind /* 0EC2A0 802C78F0 0200202D */ daddu $a0, $s0, $zero -/* 0EC2A4 802C78F4 080B1E95 */ j si_handle_end +/* 0EC2A4 802C78F4 080B1E95 */ j .L802C7A54 /* 0EC2A8 802C78F8 0040282D */ daddu $a1, $v0, $zero /* 0EC2AC 802C78FC 0C0B1A27 */ jal si_handle_set_priority /* 0EC2B0 802C7900 0200202D */ daddu $a0, $s0, $zero -/* 0EC2B4 802C7904 080B1E95 */ j si_handle_end +/* 0EC2B4 802C7904 080B1E95 */ j .L802C7A54 /* 0EC2B8 802C7908 0040282D */ daddu $a1, $v0, $zero /* 0EC2BC 802C790C 0C0B1A36 */ jal si_handle_set_timescale /* 0EC2C0 802C7910 0200202D */ daddu $a0, $s0, $zero -/* 0EC2C4 802C7914 080B1E95 */ j si_handle_end +/* 0EC2C4 802C7914 080B1E95 */ j .L802C7A54 /* 0EC2C8 802C7918 0040282D */ daddu $a1, $v0, $zero /* 0EC2CC 802C791C 0C0B1A45 */ jal si_handle_set_group /* 0EC2D0 802C7920 0200202D */ daddu $a0, $s0, $zero -/* 0EC2D4 802C7924 080B1E95 */ j si_handle_end +/* 0EC2D4 802C7924 080B1E95 */ j .L802C7A54 /* 0EC2D8 802C7928 0040282D */ daddu $a1, $v0, $zero /* 0EC2DC 802C792C 0C0B1990 */ jal si_handle_jump /* 0EC2E0 802C7930 0200202D */ daddu $a0, $s0, $zero -/* 0EC2E4 802C7934 080B1E95 */ j si_handle_end +/* 0EC2E4 802C7934 080B1E95 */ j .L802C7A54 /* 0EC2E8 802C7938 0040282D */ daddu $a1, $v0, $zero /* 0EC2EC 802C793C 0C0B1AD5 */ jal si_handle_bind_lock /* 0EC2F0 802C7940 0200202D */ daddu $a0, $s0, $zero -/* 0EC2F4 802C7944 080B1E95 */ j si_handle_end +/* 0EC2F4 802C7944 080B1E95 */ j .L802C7A54 /* 0EC2F8 802C7948 0040282D */ daddu $a1, $v0, $zero /* 0EC2FC 802C794C 0C0B1A54 */ jal si_handle_suspend_all /* 0EC300 802C7950 0200202D */ daddu $a0, $s0, $zero -/* 0EC304 802C7954 080B1E95 */ j si_handle_end +/* 0EC304 802C7954 080B1E95 */ j .L802C7A54 /* 0EC308 802C7958 0040282D */ daddu $a1, $v0, $zero /* 0EC30C 802C795C 0C0B1A5F */ jal si_handle_resume_all /* 0EC310 802C7960 0200202D */ daddu $a0, $s0, $zero -/* 0EC314 802C7964 080B1E95 */ j si_handle_end +/* 0EC314 802C7964 080B1E95 */ j .L802C7A54 /* 0EC318 802C7968 0040282D */ daddu $a1, $v0, $zero /* 0EC31C 802C796C 0C0B1A6A */ jal si_handle_suspend_others /* 0EC320 802C7970 0200202D */ daddu $a0, $s0, $zero -/* 0EC324 802C7974 080B1E95 */ j si_handle_end +/* 0EC324 802C7974 080B1E95 */ j .L802C7A54 /* 0EC328 802C7978 0040282D */ daddu $a1, $v0, $zero /* 0EC32C 802C797C 0C0B1A79 */ jal si_handle_resume_others /* 0EC330 802C7980 0200202D */ daddu $a0, $s0, $zero -/* 0EC334 802C7984 080B1E95 */ j si_handle_end +/* 0EC334 802C7984 080B1E95 */ j .L802C7A54 /* 0EC338 802C7988 0040282D */ daddu $a1, $v0, $zero /* 0EC33C 802C798C 0C0B1A88 */ jal si_handle_suspend /* 0EC340 802C7990 0200202D */ daddu $a0, $s0, $zero -/* 0EC344 802C7994 080B1E95 */ j si_handle_end +/* 0EC344 802C7994 080B1E95 */ j .L802C7A54 /* 0EC348 802C7998 0040282D */ daddu $a1, $v0, $zero /* 0EC34C 802C799C 0C0B1A93 */ jal si_handle_resume /* 0EC350 802C79A0 0200202D */ daddu $a0, $s0, $zero -/* 0EC354 802C79A4 080B1E95 */ j si_handle_end +/* 0EC354 802C79A4 080B1E95 */ j .L802C7A54 /* 0EC358 802C79A8 0040282D */ daddu $a1, $v0, $zero /* 0EC35C 802C79AC 0C0B1A9E */ jal si_handle_does_script_exist /* 0EC360 802C79B0 0200202D */ daddu $a0, $s0, $zero -/* 0EC364 802C79B4 080B1E95 */ j si_handle_end +/* 0EC364 802C79B4 080B1E95 */ j .L802C7A54 /* 0EC368 802C79B8 0040282D */ daddu $a1, $v0, $zero /* 0EC36C 802C79BC 0C0B1B1E */ jal si_handle_thread /* 0EC370 802C79C0 0200202D */ daddu $a0, $s0, $zero -/* 0EC374 802C79C4 080B1E95 */ j si_handle_end +/* 0EC374 802C79C4 080B1E95 */ j .L802C7A54 /* 0EC378 802C79C8 0040282D */ daddu $a1, $v0, $zero /* 0EC37C 802C79CC 0C0B1B53 */ jal si_handle_end_thread /* 0EC380 802C79D0 0200202D */ daddu $a0, $s0, $zero -/* 0EC384 802C79D4 080B1E95 */ j si_handle_end +/* 0EC384 802C79D4 080B1E95 */ j .L802C7A54 /* 0EC388 802C79D8 0040282D */ daddu $a1, $v0, $zero /* 0EC38C 802C79DC 0C0B1B5B */ jal si_handle_child_thread /* 0EC390 802C79E0 0200202D */ daddu $a0, $s0, $zero -/* 0EC394 802C79E4 080B1E95 */ j si_handle_end +/* 0EC394 802C79E4 080B1E95 */ j .L802C7A54 /* 0EC398 802C79E8 0040282D */ daddu $a1, $v0, $zero /* 0EC39C 802C79EC 0C0B1B7D */ jal si_handle_end_child_thread /* 0EC3A0 802C79F0 0200202D */ daddu $a0, $s0, $zero -/* 0EC3A4 802C79F4 080B1E95 */ j si_handle_end +/* 0EC3A4 802C79F4 080B1E95 */ j .L802C7A54 /* 0EC3A8 802C79F8 0040282D */ daddu $a1, $v0, $zero /* 0EC3AC 802C79FC 0C0B1B85 */ jal func_802C6E14 /* 0EC3B0 802C7A00 0200202D */ daddu $a0, $s0, $zero -/* 0EC3B4 802C7A04 080B1E95 */ j si_handle_end +/* 0EC3B4 802C7A04 080B1E95 */ j .L802C7A54 /* 0EC3B8 802C7A08 0040282D */ daddu $a1, $v0, $zero /* 0EC3BC 802C7A0C 0C0B1B87 */ jal si_handle_print_debug_var /* 0EC3C0 802C7A10 0200202D */ daddu $a0, $s0, $zero -/* 0EC3C4 802C7A14 080B1E95 */ j si_handle_end +/* 0EC3C4 802C7A14 080B1E95 */ j .L802C7A54 /* 0EC3C8 802C7A18 0040282D */ daddu $a1, $v0, $zero /* 0EC3CC 802C7A1C 0C0B1CE7 */ jal func_802C739C /* 0EC3D0 802C7A20 0200202D */ daddu $a0, $s0, $zero -/* 0EC3D4 802C7A24 080B1E95 */ j si_handle_end +/* 0EC3D4 802C7A24 080B1E95 */ j .L802C7A54 /* 0EC3D8 802C7A28 0040282D */ daddu $a1, $v0, $zero /* 0EC3DC 802C7A2C 0C0B1CEC */ jal func_802C73B0 /* 0EC3E0 802C7A30 0200202D */ daddu $a0, $s0, $zero -/* 0EC3E4 802C7A34 080B1E95 */ j si_handle_end +/* 0EC3E4 802C7A34 080B1E95 */ j .L802C7A54 /* 0EC3E8 802C7A38 0040282D */ daddu $a1, $v0, $zero /* 0EC3EC 802C7A3C 0C0B1CEE */ jal func_802C73B8 /* 0EC3F0 802C7A40 0200202D */ daddu $a0, $s0, $zero -/* 0EC3F4 802C7A44 080B1E95 */ j si_handle_end +/* 0EC3F4 802C7A44 080B1E95 */ j .L802C7A54 /* 0EC3F8 802C7A48 0040282D */ daddu $a1, $v0, $zero .L802C7A4C: /* 0EC3FC 802C7A4C 080B1E93 */ j .L802C7A4C /* 0EC400 802C7A50 00000000 */ nop +.L802C7A54: +/* 0EC404 802C7A54 24020003 */ addiu $v0, $zero, 3 +/* 0EC408 802C7A58 10A2FE6E */ beq $a1, $v0, .L802C7414 +/* 0EC40C 802C7A5C 240200FF */ addiu $v0, $zero, 0xff +/* 0EC410 802C7A60 10A20012 */ beq $a1, $v0, .L802C7AAC +/* 0EC414 802C7A64 2402FFFF */ addiu $v0, $zero, -1 +/* 0EC418 802C7A68 04A00010 */ bltz $a1, .L802C7AAC +/* 0EC41C 802C7A6C 24020001 */ addiu $v0, $zero, 1 +/* 0EC420 802C7A70 50A0000E */ beql $a1, $zero, .L802C7AAC +/* 0EC424 802C7A74 0000102D */ daddu $v0, $zero, $zero +/* 0EC428 802C7A78 14A20003 */ bne $a1, $v0, .L802C7A88 +/* 0EC42C 802C7A7C 24020002 */ addiu $v0, $zero, 2 +/* 0EC430 802C7A80 080B1EAA */ j .L802C7AA8 +/* 0EC434 802C7A84 A2000002 */ sb $zero, 2($s0) + +.L802C7A88: +/* 0EC438 802C7A88 14A2FE62 */ bne $a1, $v0, .L802C7414 +/* 0EC43C 802C7A8C 00000000 */ nop +/* 0EC440 802C7A90 A2000002 */ sb $zero, 2($s0) +/* 0EC444 802C7A94 3C028007 */ lui $v0, 0x8007 +/* 0EC448 802C7A98 8C42419C */ lw $v0, 0x419c($v0) +/* 0EC44C 802C7A9C 80420078 */ lb $v0, 0x78($v0) +/* 0EC450 802C7AA0 1445FE5C */ bne $v0, $a1, .L802C7414 +/* 0EC454 802C7AA4 00000000 */ nop +.L802C7AA8: +/* 0EC458 802C7AA8 0000102D */ daddu $v0, $zero, $zero +.L802C7AAC: +/* 0EC45C 802C7AAC 8FBF0014 */ lw $ra, 0x14($sp) +/* 0EC460 802C7AB0 8FB00010 */ lw $s0, 0x10($sp) +/* 0EC464 802C7AB4 03E00008 */ jr $ra +/* 0EC468 802C7AB8 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_default.s b/asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_default.s deleted file mode 100644 index 254ae4f808..0000000000 --- a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_default.s +++ /dev/null @@ -1,34 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - - -glabel si_handle_case_default -/* 0E9DF4 802C5444 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E9DF8 802C5448 AFB00010 */ sw $s0, 0x10($sp) -/* 0E9DFC 802C544C 0080802D */ daddu $s0, $a0, $zero -/* 0E9E00 802C5450 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E9E04 802C5454 82020007 */ lb $v0, 7($s0) -/* 0E9E08 802C5458 04410003 */ bgez $v0, .L802C5468 -/* 0E9E0C 802C545C 02021821 */ addu $v1, $s0, $v0 -.L802C5460: -/* 0E9E10 802C5460 080B1518 */ j .L802C5460 -/* 0E9E14 802C5464 00000000 */ nop - -.L802C5468: -/* 0E9E18 802C5468 80620110 */ lb $v0, 0x110($v1) -/* 0E9E1C 802C546C 18400003 */ blez $v0, .L802C547C -/* 0E9E20 802C5470 00000000 */ nop -/* 0E9E24 802C5474 080B1522 */ j .L802C5488 -/* 0E9E28 802C5478 A0600110 */ sb $zero, 0x110($v1) - -.L802C547C: -/* 0E9E2C 802C547C 0C0B2279 */ jal si_goto_end_case -/* 0E9E30 802C5480 0200202D */ daddu $a0, $s0, $zero -/* 0E9E34 802C5484 AE020008 */ sw $v0, 8($s0) -.L802C5488: -/* 0E9E38 802C5488 24020002 */ addiu $v0, $zero, 2 -/* 0E9E3C 802C548C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E9E40 802C5490 8FB00010 */ lw $s0, 0x10($sp) -/* 0E9E44 802C5494 03E00008 */ jr $ra -/* 0E9E48 802C5498 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_end.s b/asm/nonmatchings/code_e92d0_len_5da0/si_handle_end.s deleted file mode 100644 index a64a2280a4..0000000000 --- a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_end.s +++ /dev/null @@ -1,36 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - - -glabel si_handle_end -/* 0EC404 802C7A54 24020003 */ addiu $v0, $zero, 3 -/* 0EC408 802C7A58 10A2FE6E */ beq $a1, $v0, .L802C7414 -/* 0EC40C 802C7A5C 240200FF */ addiu $v0, $zero, 0xff -/* 0EC410 802C7A60 10A20012 */ beq $a1, $v0, .L802C7AAC -/* 0EC414 802C7A64 2402FFFF */ addiu $v0, $zero, -1 -/* 0EC418 802C7A68 04A00010 */ bltz $a1, .L802C7AAC -/* 0EC41C 802C7A6C 24020001 */ addiu $v0, $zero, 1 -/* 0EC420 802C7A70 50A0000E */ beql $a1, $zero, .L802C7AAC -/* 0EC424 802C7A74 0000102D */ daddu $v0, $zero, $zero -/* 0EC428 802C7A78 14A20003 */ bne $a1, $v0, .L802C7A88 -/* 0EC42C 802C7A7C 24020002 */ addiu $v0, $zero, 2 -/* 0EC430 802C7A80 080B1EAA */ j .L802C7AA8 -/* 0EC434 802C7A84 A2000002 */ sb $zero, 2($s0) - -.L802C7A88: -/* 0EC438 802C7A88 14A2FE62 */ bne $a1, $v0, .L802C7414 -/* 0EC43C 802C7A8C 00000000 */ nop -/* 0EC440 802C7A90 A2000002 */ sb $zero, 2($s0) -/* 0EC444 802C7A94 3C028007 */ lui $v0, 0x8007 -/* 0EC448 802C7A98 8C42419C */ lw $v0, 0x419c($v0) -/* 0EC44C 802C7A9C 80420078 */ lb $v0, 0x78($v0) -/* 0EC450 802C7AA0 1445FE5C */ bne $v0, $a1, .L802C7414 -/* 0EC454 802C7AA4 00000000 */ nop -.L802C7AA8: -/* 0EC458 802C7AA8 0000102D */ daddu $v0, $zero, $zero -.L802C7AAC: -/* 0EC45C 802C7AAC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EC460 802C7AB0 8FB00010 */ lw $s0, 0x10($sp) -/* 0EC464 802C7AB4 03E00008 */ jr $ra -/* 0EC468 802C7AB8 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/coverage.py b/coverage.py index 9144190192..61b9949fb8 100755 --- a/coverage.py +++ b/coverage.py @@ -5,10 +5,13 @@ from os import remove from sys import argv import re from glob import glob +from pathlib import Path DIR = path.dirname(__file__) -C_FILES = glob(path.join(DIR, "src/*.c")) -ASM_FILES = glob(path.join(DIR, "asm/nonmatchings/**/*.s")) +NONMATCHINGS_DIR = Path(path.join(DIR, "asm", "nonmatchings")) + +C_FILES = Path(path.join(DIR, "src")).rglob("*.c") +ASM_FILES = NONMATCHINGS_DIR.rglob("*.s") def strip_c_comments(text): def replacer(match): @@ -67,7 +70,7 @@ if __name__ == "__main__": exit(1) elif "--delete-matched" in argv or input("Delete them [y/N]? ").upper() == "Y": for func in matched_but_undeleted_asm: - file = glob(path.join(DIR, f"asm/nonmatchings/*/{func}.s"))[0] - remove(file) + f = next(NONMATCHINGS_DIR.rglob(func + ".s")) + remove(f) elif len(asm) != len(non_matched): print(f"warning: number of INCLUDE_ASM macros ({len(asm)}) != number of asm files ({len(non_matched)})") diff --git a/include/common_structs.h b/include/common_structs.h index c2c055aac6..d21831fa92 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -247,7 +247,7 @@ typedef struct ScriptInstance { /* 0x0C4 */ s32 varFlags[3]; /* 0x0D0 */ s32 loopStartTable[8]; /* 0x0F0 */ s32 loopCounterTable[8]; - /* 0x110 */ u8 switchBlockState[8]; + /* 0x110 */ s8 switchBlockState[8]; /* 0x118 */ s32 switchBlockValue[8]; /* 0x138 */ s32* buffer; /* 0x13C */ s32* array; diff --git a/include/functions.h b/include/functions.h index 89945b40a6..6754c373ec 100644 --- a/include/functions.h +++ b/include/functions.h @@ -11,6 +11,8 @@ s32 heap_malloc(s32 size); HeapNode* _heap_create(void* addr, s32 size); void clone_model(u16 srcModelID, u16 newModelID); +Model* get_model_from_list_index(s32 listIndex); + void update_collider_transform(s16 colliderID); void get_collider_center(s32 colliderID, f32* x, f32* y, f32* z); @@ -31,6 +33,7 @@ s32 func_80055464(s32, s32); s32 func_800554A4(s32, s32); s32 func_800554E8(s32, s32); s32 func_800555E4(s32); +s32 osGetId(); void func_8011B7C0(u16, s32, s32); void func_80137D88(s32, f32); void func_80137DA4(s32, f32); diff --git a/include/macros.h b/include/macros.h index 83b804cfa2..6907e1aedc 100644 --- a/include/macros.h +++ b/include/macros.h @@ -8,6 +8,7 @@ #define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0])) #define ASSERT(condition) if (!(condition)) { while (1) {} } +#define PANIC() ASSERT(0) #define GAME_STATUS (*gGameStatusPtr) diff --git a/src/code_39210_len_aa0.c b/src/code_39210_len_aa0.c index 69aeee38df..85023d7576 100644 --- a/src/code_39210_len_aa0.c +++ b/src/code_39210_len_aa0.c @@ -1,3 +1,31 @@ #include "common.h" -INCLUDE_ASM("code_39210_len_aa0", get_npc_pos); +void get_npc_pos(s32 arg0, f32* outX, f32* outY, f32* outZ, s32* arg4) { + PlayerStatus* playerStatus = &gPlayerStatus; + Npc* npc; + s32 phi_v0; + + *outX = 0.0f; + *outY = 0.0f; + *outZ = 0.0f; + *arg4 = 0; + + if (arg0 == -1) { + *outX = playerStatus->position.x; + *outY = playerStatus->position.y; + *outZ = playerStatus->position.z; + phi_v0 = playerStatus->flags & 6; + } else { + npc = get_npc_unsafe(arg0); + *outX = npc->pos.x; + *outY = npc->pos.y; + *outZ = npc->pos.z; + phi_v0 = npc->flags & 0x800; + } + + if (phi_v0 != 0) { + *arg4 = 1; + } +} + +INCLUDE_ASM("code_39210_len_aa0", func_8005DECC); diff --git a/src/code_a5dd0_len_114e0.c b/src/code_a5dd0_len_114e0.c index fcc2ad6ee5..1021ac63e5 100644 --- a/src/code_a5dd0_len_114e0.c +++ b/src/code_a5dd0_len_114e0.c @@ -154,7 +154,7 @@ INCLUDE_ASM("code_a5dd0_len_114e0", func_80117E74); INCLUDE_ASM("code_a5dd0_len_114e0", func_801180E8); -INCLUDE_ASM("code_a5dd0_len_114e0", get_model_from_list_index); +Model* INCLUDE_ASM("code_a5dd0_len_114e0", get_model_from_list_index, s32 listIndex); INCLUDE_ASM("code_a5dd0_len_114e0", load_data_for_models); diff --git a/src/code_e92d0_len_5da0.c b/src/code_e92d0_len_5da0.c index ed53afd83f..5e00c76fac 100644 --- a/src/code_e92d0_len_5da0.c +++ b/src/code_e92d0_len_5da0.c @@ -213,7 +213,20 @@ INCLUDE_ASM("code_e92d0_len_5da0", si_handle_case_greater_equal); INCLUDE_ASM("code_e92d0_len_5da0", si_handle_case_range); -INCLUDE_ASM("code_e92d0_len_5da0", si_handle_case_default); +ApiStatus si_handle_case_default(ScriptInstance* script) { + s32 switchDepth = script->switchDepth; + + ASSERT(switchDepth >= 0); + + if (script->switchBlockState[switchDepth] > 0) { + script->switchBlockState[switchDepth] = 0; + } else { + script->ptrNextLine = si_goto_end_case(script); + } + return ApiStatus_DONE2; + + do {} while (0); // Necessary to match +} INCLUDE_ASM("code_e92d0_len_5da0", si_handle_case_AND); @@ -705,8 +718,6 @@ s32 func_802C73B8(ScriptInstance* script) { INCLUDE_ASM("code_e92d0_len_5da0", si_execute_next_command); -INCLUDE_ASM("code_e92d0_len_5da0", si_handle_end); - s32 INCLUDE_ASM("code_e92d0_len_5da0", get_variable, ScriptInstance* script, Bytecode var); INCLUDE_ASM("code_e92d0_len_5da0", get_variable_index); @@ -722,8 +733,80 @@ f32 INCLUDE_ASM("code_e92d0_len_5da0", set_float_variable, ScriptInstance* scrip INCLUDE_ASM("code_e92d0_len_5da0", si_goto_label); INCLUDE_ASM("code_e92d0_len_5da0", si_skip_if); +// Matching but needs rodata support +/*Bytecode* si_skip_if(ScriptInstance* script) { + s32 nestedIfDepth = 0; + Bytecode* pos = script->ptrNextLine; + Bytecode opcode; + s32 nargs; + + do { + opcode = *pos++; + nargs = *pos++; + pos += nargs; + switch(opcode) { + case 1: + PANIC(); + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 19: + nestedIfDepth--; + if (nestedIfDepth < 0) { + return pos; + } + break; + case 17: + nestedIfDepth++; + break; + case 18: + if (nestedIfDepth == 0) { + return pos; + } + break; + } + } while(1); +}*/ INCLUDE_ASM("code_e92d0_len_5da0", si_skip_else); +// Matching but needs rodata support +/*Bytecode* si_skip_else(ScriptInstance* script) { + s32 nestedIfDepth = 0; + Bytecode* pos = script->ptrNextLine; + Bytecode opcode; + s32 nargs; + + do { + opcode = *pos++; + nargs = *pos++; + pos += nargs; + switch(opcode) { + case 1: + PANIC(); + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 19: + nestedIfDepth--; + if (nestedIfDepth < 0) { + return pos; + } + break; + case 17: + nestedIfDepth++; + break; + + } + } while(1); +}*/ INCLUDE_ASM("code_e92d0_len_5da0", si_goto_end_case); @@ -731,6 +814,7 @@ INCLUDE_ASM("code_e92d0_len_5da0", si_goto_next_case); INCLUDE_ASM("code_e92d0_len_5da0", si_goto_end_loop); +// Ethan: I think this is the start of a new file INCLUDE_API_ASM("code_e92d0_len_5da0", TranslateModel); INCLUDE_API_ASM("code_e92d0_len_5da0", RotateModel); @@ -842,7 +926,15 @@ ApiStatus GetLoadType(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_DONE2; } -INCLUDE_API_ASM("code_e92d0_len_5da0", SetRenderMode); +ApiStatus SetRenderMode(ScriptInstance* script, s32 isInitialCall) { + Bytecode* thisPos = script->ptrReadPos; + s32 treeIndex = get_variable(script, *thisPos++); + s8 renderMode = get_variable(script, *thisPos++); + + get_model_from_list_index(get_model_list_index_from_tree_index(treeIndex))->renderMode = renderMode; + + return ApiStatus_DONE2; +} INCLUDE_API_ASM("code_e92d0_len_5da0", PlaySoundAtModel);