Split code_1b40, matched a func

This commit is contained in:
Ethan Roseman 2020-07-31 16:38:29 -04:00
parent b2e3e2fe38
commit 823165e386
19 changed files with 2681 additions and 2407 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,82 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_800269EC:
/* 001DEC 800269EC 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 001DF0 800269F0 AFB20018 */ sw $s2, 0x18($sp)
/* 001DF4 800269F4 3C120001 */ lui $s2, 1
/* 001DF8 800269F8 36520630 */ ori $s2, $s2, 0x630
/* 001DFC 800269FC AFB10014 */ sw $s1, 0x14($sp)
/* 001E00 80026A00 3C11800A */ lui $s1, 0x800a
/* 001E04 80026A04 2631A674 */ addiu $s1, $s1, -0x598c
/* 001E08 80026A08 3C048007 */ lui $a0, 0x8007
/* 001E0C 80026A0C 8C8441F4 */ lw $a0, 0x41f4($a0)
/* 001E10 80026A10 3C058016 */ lui $a1, 0x8016
/* 001E14 80026A14 24A54000 */ addiu $a1, $a1, 0x4000
/* 001E18 80026A18 AFB00010 */ sw $s0, 0x10($sp)
/* 001E1C 80026A1C 3C10800A */ lui $s0, 0x800a
/* 001E20 80026A20 2610A66C */ addiu $s0, $s0, -0x5994
/* 001E24 80026A24 AFBF001C */ sw $ra, 0x1c($sp)
/* 001E28 80026A28 00041040 */ sll $v0, $a0, 1
/* 001E2C 80026A2C 00441021 */ addu $v0, $v0, $a0
/* 001E30 80026A30 000210C0 */ sll $v0, $v0, 3
/* 001E34 80026A34 00441021 */ addu $v0, $v0, $a0
/* 001E38 80026A38 00021980 */ sll $v1, $v0, 6
/* 001E3C 80026A3C 00431021 */ addu $v0, $v0, $v1
/* 001E40 80026A40 00021080 */ sll $v0, $v0, 2
/* 001E44 80026A44 00441023 */ subu $v0, $v0, $a0
/* 001E48 80026A48 00021100 */ sll $v0, $v0, 4
/* 001E4C 80026A4C 00451021 */ addu $v0, $v0, $a1
/* 001E50 80026A50 AE220000 */ sw $v0, ($s1)
/* 001E54 80026A54 00521021 */ addu $v0, $v0, $s2
/* 001E58 80026A58 0C009C68 */ jal func_800271A0
/* 001E5C 80026A5C AE020000 */ sw $v0, ($s0)
/* 001E60 80026A60 0C009F84 */ jal func_80027E10
/* 001E64 80026A64 00000000 */ nop
/* 001E68 80026A68 8E030000 */ lw $v1, ($s0)
/* 001E6C 80026A6C 3C02E900 */ lui $v0, 0xe900
/* 001E70 80026A70 0060202D */ daddu $a0, $v1, $zero
/* 001E74 80026A74 24630008 */ addiu $v1, $v1, 8
/* 001E78 80026A78 AE030000 */ sw $v1, ($s0)
/* 001E7C 80026A7C AC820000 */ sw $v0, ($a0)
/* 001E80 80026A80 24620008 */ addiu $v0, $v1, 8
/* 001E84 80026A84 AC800004 */ sw $zero, 4($a0)
/* 001E88 80026A88 3C04DF00 */ lui $a0, 0xdf00
/* 001E8C 80026A8C AE020000 */ sw $v0, ($s0)
/* 001E90 80026A90 AC640000 */ sw $a0, ($v1)
/* 001E94 80026A94 AC600004 */ sw $zero, 4($v1)
/* 001E98 80026A98 8E230000 */ lw $v1, ($s1)
/* 001E9C 80026A9C 00521023 */ subu $v0, $v0, $s2
/* 001EA0 80026AA0 00431023 */ subu $v0, $v0, $v1
/* 001EA4 80026AA4 000210C2 */ srl $v0, $v0, 3
/* 001EA8 80026AA8 28420200 */ slti $v0, $v0, 0x200
/* 001EAC 80026AAC 14400003 */ bnez $v0, .L80026ABC
/* 001EB0 80026AB0 3C040001 */ lui $a0, 1
.L80026AB4:
/* 001EB4 80026AB4 08009AAD */ j .L80026AB4
/* 001EB8 80026AB8 00000000 */ nop
.L80026ABC:
/* 001EBC 80026ABC 34840630 */ ori $a0, $a0, 0x630
/* 001EC0 80026AC0 0000302D */ daddu $a2, $zero, $zero
/* 001EC4 80026AC4 00C0382D */ daddu $a3, $a2, $zero
/* 001EC8 80026AC8 3C05800A */ lui $a1, 0x800a
/* 001ECC 80026ACC 8CA5A66C */ lw $a1, -0x5994($a1)
/* 001ED0 80026AD0 3C02800A */ lui $v0, 0x800a
/* 001ED4 80026AD4 8C42A674 */ lw $v0, -0x598c($v0)
/* 001ED8 80026AD8 00A42823 */ subu $a1, $a1, $a0
/* 001EDC 80026ADC 00A22823 */ subu $a1, $a1, $v0
/* 001EE0 80026AE0 000528C3 */ sra $a1, $a1, 3
/* 001EE4 80026AE4 00442021 */ addu $a0, $v0, $a0
/* 001EE8 80026AE8 0C00B331 */ jal nuGfxTaskStart
/* 001EEC 80026AEC 000528C0 */ sll $a1, $a1, 3
/* 001EF0 80026AF0 8FBF001C */ lw $ra, 0x1c($sp)
/* 001EF4 80026AF4 8FB20018 */ lw $s2, 0x18($sp)
/* 001EF8 80026AF8 8FB10014 */ lw $s1, 0x14($sp)
/* 001EFC 80026AFC 8FB00010 */ lw $s0, 0x10($sp)
/* 001F00 80026B00 03E00008 */ jr $ra
/* 001F04 80026B04 27BD0020 */ addiu $sp, $sp, 0x20
.set reorder

View File

@ -0,0 +1,80 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_80027088:
/* 002488 80027088 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 00248C 8002708C 0080282D */ daddu $a1, $a0, $zero
/* 002490 80027090 2CA20005 */ sltiu $v0, $a1, 5
/* 002494 80027094 1040003B */ beqz $v0, .L80027184
/* 002498 80027098 AFBF0010 */ sw $ra, 0x10($sp)
/* 00249C 8002709C 00051080 */ sll $v0, $a1, 2
/* 0024A0 800270A0 3C018009 */ lui $at, 0x8009
/* 0024A4 800270A4 00220821 */ addu $at, $at, $v0
/* 0024A8 800270A8 8C227D48 */ lw $v0, 0x7d48($at)
/* 0024AC 800270AC 00400008 */ jr $v0
/* 0024B0 800270B0 00000000 */ nop
/* 0024B4 800270B4 24040003 */ addiu $a0, $zero, 3
/* 0024B8 800270B8 3C02800A */ lui $v0, 0x800a
/* 0024BC 800270BC 2442A650 */ addiu $v0, $v0, -0x59b0
/* 0024C0 800270C0 3C01800A */ lui $at, 0x800a
/* 0024C4 800270C4 AC25A5D8 */ sw $a1, -0x5a28($at)
/* 0024C8 800270C8 8C430000 */ lw $v1, ($v0)
/* 0024CC 800270CC 2405F0FF */ addiu $a1, $zero, -0xf01
/* 0024D0 800270D0 00651824 */ and $v1, $v1, $a1
/* 0024D4 800270D4 0C0B1192 */ jal resume_all_group
/* 0024D8 800270D8 AC430000 */ sw $v1, ($v0)
/* 0024DC 800270DC 08009C61 */ j .L80027184
/* 0024E0 800270E0 00000000 */ nop
/* 0024E4 800270E4 24040001 */ addiu $a0, $zero, 1
/* 0024E8 800270E8 3C02800A */ lui $v0, 0x800a
/* 0024EC 800270EC 2442A650 */ addiu $v0, $v0, -0x59b0
/* 0024F0 800270F0 3C01800A */ lui $at, 0x800a
/* 0024F4 800270F4 AC25A5D8 */ sw $a1, -0x5a28($at)
/* 0024F8 800270F8 8C430000 */ lw $v1, ($v0)
/* 0024FC 800270FC 2405F1FF */ addiu $a1, $zero, -0xe01
/* 002500 80027100 00651824 */ and $v1, $v1, $a1
/* 002504 80027104 08009C56 */ j .L80027158
/* 002508 80027108 34630100 */ ori $v1, $v1, 0x100
/* 00250C 8002710C 24040002 */ addiu $a0, $zero, 2
/* 002510 80027110 3C02800A */ lui $v0, 0x800a
/* 002514 80027114 2442A650 */ addiu $v0, $v0, -0x59b0
/* 002518 80027118 3C01800A */ lui $at, 0x800a
/* 00251C 8002711C AC25A5D8 */ sw $a1, -0x5a28($at)
/* 002520 80027120 8C430000 */ lw $v1, ($v0)
/* 002524 80027124 2405F3FF */ addiu $a1, $zero, -0xc01
/* 002528 80027128 00651824 */ and $v1, $v1, $a1
/* 00252C 8002712C 08009C56 */ j .L80027158
/* 002530 80027130 34630300 */ ori $v1, $v1, 0x300
/* 002534 80027134 24040002 */ addiu $a0, $zero, 2
/* 002538 80027138 3C02800A */ lui $v0, 0x800a
/* 00253C 8002713C 2442A650 */ addiu $v0, $v0, -0x59b0
/* 002540 80027140 3C01800A */ lui $at, 0x800a
/* 002544 80027144 AC25A5D8 */ sw $a1, -0x5a28($at)
/* 002548 80027148 8C430000 */ lw $v1, ($v0)
/* 00254C 8002714C 2405F7FF */ addiu $a1, $zero, -0x801
/* 002550 80027150 00651824 */ and $v1, $v1, $a1
/* 002554 80027154 34630700 */ ori $v1, $v1, 0x700
.L80027158:
/* 002558 80027158 0C0B117A */ jal suspend_all_group
/* 00255C 8002715C AC430000 */ sw $v1, ($v0)
/* 002560 80027160 08009C61 */ j .L80027184
/* 002564 80027164 00000000 */ nop
/* 002568 80027168 3C03800A */ lui $v1, 0x800a
/* 00256C 8002716C 2463A650 */ addiu $v1, $v1, -0x59b0
/* 002570 80027170 8C620000 */ lw $v0, ($v1)
/* 002574 80027174 3C01800A */ lui $at, 0x800a
/* 002578 80027178 AC25A5D8 */ sw $a1, -0x5a28($at)
/* 00257C 8002717C 34420F00 */ ori $v0, $v0, 0xf00
/* 002580 80027180 AC620000 */ sw $v0, ($v1)
.L80027184:
/* 002584 80027184 8FBF0010 */ lw $ra, 0x10($sp)
/* 002588 80027188 03E00008 */ jr $ra
/* 00258C 8002718C 27BD0018 */ addiu $sp, $sp, 0x18
.set reorder

View File

@ -0,0 +1,31 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_800271A0:
/* 0025A0 800271A0 3C04800A */ lui $a0, 0x800a
/* 0025A4 800271A4 2484A66C */ addiu $a0, $a0, -0x5994
/* 0025A8 800271A8 8C830000 */ lw $v1, ($a0)
/* 0025AC 800271AC 3C02DB06 */ lui $v0, 0xdb06
/* 0025B0 800271B0 0060282D */ daddu $a1, $v1, $zero
/* 0025B4 800271B4 24630008 */ addiu $v1, $v1, 8
/* 0025B8 800271B8 AC830000 */ sw $v1, ($a0)
/* 0025BC 800271BC ACA20000 */ sw $v0, ($a1)
/* 0025C0 800271C0 24620008 */ addiu $v0, $v1, 8
/* 0025C4 800271C4 ACA00004 */ sw $zero, 4($a1)
/* 0025C8 800271C8 3C05DE00 */ lui $a1, 0xde00
/* 0025CC 800271CC AC820000 */ sw $v0, ($a0)
/* 0025D0 800271D0 3C020007 */ lui $v0, 7
/* 0025D4 800271D4 24424230 */ addiu $v0, $v0, 0x4230
/* 0025D8 800271D8 AC620004 */ sw $v0, 4($v1)
/* 0025DC 800271DC 24620010 */ addiu $v0, $v1, 0x10
/* 0025E0 800271E0 AC650000 */ sw $a1, ($v1)
/* 0025E4 800271E4 AC820000 */ sw $v0, ($a0)
/* 0025E8 800271E8 3C020007 */ lui $v0, 7
/* 0025EC 800271EC 24424210 */ addiu $v0, $v0, 0x4210
/* 0025F0 800271F0 AC650008 */ sw $a1, 8($v1)
/* 0025F4 800271F4 03E00008 */ jr $ra
/* 0025F8 800271F8 AC62000C */ sw $v0, 0xc($v1)
.set reorder

View File

@ -0,0 +1,32 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_800271FC:
/* 0025FC 800271FC 00061880 */ sll $v1, $a2, 2
/* 002600 80027200 00661821 */ addu $v1, $v1, $a2
/* 002604 80027204 00031980 */ sll $v1, $v1, 6
/* 002608 80027208 00671821 */ addu $v1, $v1, $a3
/* 00260C 8002720C 00031840 */ sll $v1, $v1, 1
/* 002610 80027210 00652821 */ addu $a1, $v1, $a1
/* 002614 80027214 00641821 */ addu $v1, $v1, $a0
/* 002618 80027218 94A20000 */ lhu $v0, ($a1)
/* 00261C 8002721C 8FA50010 */ lw $a1, 0x10($sp)
/* 002620 80027220 00021082 */ srl $v0, $v0, 2
/* 002624 80027224 3042000F */ andi $v0, $v0, 0xf
/* 002628 80027228 A0A20003 */ sb $v0, 3($a1)
/* 00262C 8002722C 94620000 */ lhu $v0, ($v1)
/* 002630 80027230 000212C2 */ srl $v0, $v0, 0xb
/* 002634 80027234 A0A20000 */ sb $v0, ($a1)
/* 002638 80027238 94620000 */ lhu $v0, ($v1)
/* 00263C 8002723C 00021182 */ srl $v0, $v0, 6
/* 002640 80027240 3042001F */ andi $v0, $v0, 0x1f
/* 002644 80027244 A0A20001 */ sb $v0, 1($a1)
/* 002648 80027248 94620000 */ lhu $v0, ($v1)
/* 00264C 8002724C 00021042 */ srl $v0, $v0, 1
/* 002650 80027250 3042001F */ andi $v0, $v0, 0x1f
/* 002654 80027254 03E00008 */ jr $ra
/* 002658 80027258 A0A20002 */ sb $v0, 2($a1)
.set reorder

View File

@ -0,0 +1,274 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_8002725C:
/* 00265C 8002725C 27BDFF88 */ addiu $sp, $sp, -0x78
/* 002660 80027260 0080582D */ daddu $t3, $a0, $zero
/* 002664 80027264 AFA5007C */ sw $a1, 0x7c($sp)
/* 002668 80027268 0000282D */ daddu $a1, $zero, $zero
/* 00266C 8002726C 27A90018 */ addiu $t1, $sp, 0x18
/* 002670 80027270 27A80038 */ addiu $t0, $sp, 0x38
/* 002674 80027274 27A70058 */ addiu $a3, $sp, 0x58
/* 002678 80027278 8BAC007C */ lwl $t4, 0x7c($sp)
/* 00267C 8002727C 9BAC007F */ lwr $t4, 0x7f($sp)
/* 002680 80027280 ABAC0008 */ swl $t4, 8($sp)
/* 002684 80027284 BBAC000B */ swr $t4, 0xb($sp)
/* 002688 80027288 8BAC007C */ lwl $t4, 0x7c($sp)
/* 00268C 8002728C 9BAC007F */ lwr $t4, 0x7f($sp)
/* 002690 80027290 ABAC0000 */ swl $t4, ($sp)
/* 002694 80027294 BBAC0003 */ swr $t4, 3($sp)
.L80027298:
/* 002698 80027298 01251021 */ addu $v0, $t1, $a1
/* 00269C 8002729C 01051821 */ addu $v1, $t0, $a1
/* 0026A0 800272A0 00E52021 */ addu $a0, $a3, $a1
/* 0026A4 800272A4 24A50001 */ addiu $a1, $a1, 1
/* 0026A8 800272A8 A0400000 */ sb $zero, ($v0)
/* 0026AC 800272AC 28A20020 */ slti $v0, $a1, 0x20
/* 0026B0 800272B0 A0600000 */ sb $zero, ($v1)
/* 0026B4 800272B4 1440FFF8 */ bnez $v0, .L80027298
/* 0026B8 800272B8 A0800000 */ sb $zero, ($a0)
/* 0026BC 800272BC 0000282D */ daddu $a1, $zero, $zero
/* 0026C0 800272C0 240A0008 */ addiu $t2, $zero, 8
/* 0026C4 800272C4 27A90018 */ addiu $t1, $sp, 0x18
/* 0026C8 800272C8 27A80038 */ addiu $t0, $sp, 0x38
/* 0026CC 800272CC 27A70058 */ addiu $a3, $sp, 0x58
/* 0026D0 800272D0 0160202D */ daddu $a0, $t3, $zero
.L800272D4:
/* 0026D4 800272D4 90820003 */ lbu $v0, 3($a0)
/* 0026D8 800272D8 144A0010 */ bne $v0, $t2, .L8002731C
/* 0026DC 800272DC 24A50001 */ addiu $a1, $a1, 1
/* 0026E0 800272E0 90830000 */ lbu $v1, ($a0)
/* 0026E4 800272E4 01231821 */ addu $v1, $t1, $v1
/* 0026E8 800272E8 90620000 */ lbu $v0, ($v1)
/* 0026EC 800272EC 24420001 */ addiu $v0, $v0, 1
/* 0026F0 800272F0 A0620000 */ sb $v0, ($v1)
/* 0026F4 800272F4 90830001 */ lbu $v1, 1($a0)
/* 0026F8 800272F8 01031821 */ addu $v1, $t0, $v1
/* 0026FC 800272FC 90620000 */ lbu $v0, ($v1)
/* 002700 80027300 24420001 */ addiu $v0, $v0, 1
/* 002704 80027304 A0620000 */ sb $v0, ($v1)
/* 002708 80027308 90830002 */ lbu $v1, 2($a0)
/* 00270C 8002730C 00E31821 */ addu $v1, $a3, $v1
/* 002710 80027310 90620000 */ lbu $v0, ($v1)
/* 002714 80027314 24420001 */ addiu $v0, $v0, 1
/* 002718 80027318 A0620000 */ sb $v0, ($v1)
.L8002731C:
/* 00271C 8002731C 28A20006 */ slti $v0, $a1, 6
/* 002720 80027320 1440FFEC */ bnez $v0, .L800272D4
/* 002724 80027324 24840004 */ addiu $a0, $a0, 4
/* 002728 80027328 0000282D */ daddu $a1, $zero, $zero
/* 00272C 8002732C 27A40018 */ addiu $a0, $sp, 0x18
/* 002730 80027330 00851821 */ addu $v1, $a0, $a1
.L80027334:
/* 002734 80027334 90620000 */ lbu $v0, ($v1)
/* 002738 80027338 50400004 */ beql $v0, $zero, .L8002734C
/* 00273C 8002733C 24A50001 */ addiu $a1, $a1, 1
/* 002740 80027340 2442FFFF */ addiu $v0, $v0, -1
/* 002744 80027344 08009CD6 */ j .L80027358
/* 002748 80027348 A0620000 */ sb $v0, ($v1)
.L8002734C:
/* 00274C 8002734C 28A20020 */ slti $v0, $a1, 0x20
/* 002750 80027350 1440FFF8 */ bnez $v0, .L80027334
/* 002754 80027354 00851821 */ addu $v1, $a0, $a1
.L80027358:
/* 002758 80027358 28A20020 */ slti $v0, $a1, 0x20
/* 00275C 8002735C 10400009 */ beqz $v0, .L80027384
/* 002760 80027360 27A30018 */ addiu $v1, $sp, 0x18
/* 002764 80027364 00651021 */ addu $v0, $v1, $a1
.L80027368:
/* 002768 80027368 90420000 */ lbu $v0, ($v0)
/* 00276C 8002736C 14400005 */ bnez $v0, .L80027384
/* 002770 80027370 00000000 */ nop
/* 002774 80027374 24A50001 */ addiu $a1, $a1, 1
/* 002778 80027378 28A20020 */ slti $v0, $a1, 0x20
/* 00277C 8002737C 1440FFFA */ bnez $v0, .L80027368
/* 002780 80027380 00651021 */ addu $v0, $v1, $a1
.L80027384:
/* 002784 80027384 93A20000 */ lbu $v0, ($sp)
/* 002788 80027388 00A2102A */ slt $v0, $a1, $v0
/* 00278C 8002738C 54400001 */ bnel $v0, $zero, .L80027394
/* 002790 80027390 A3A50000 */ sb $a1, ($sp)
.L80027394:
/* 002794 80027394 0000282D */ daddu $a1, $zero, $zero
/* 002798 80027398 27A40038 */ addiu $a0, $sp, 0x38
/* 00279C 8002739C 00851821 */ addu $v1, $a0, $a1
.L800273A0:
/* 0027A0 800273A0 90620000 */ lbu $v0, ($v1)
/* 0027A4 800273A4 50400004 */ beql $v0, $zero, .L800273B8
/* 0027A8 800273A8 24A50001 */ addiu $a1, $a1, 1
/* 0027AC 800273AC 2442FFFF */ addiu $v0, $v0, -1
/* 0027B0 800273B0 08009CF1 */ j .L800273C4
/* 0027B4 800273B4 A0620000 */ sb $v0, ($v1)
.L800273B8:
/* 0027B8 800273B8 28A20020 */ slti $v0, $a1, 0x20
/* 0027BC 800273BC 1440FFF8 */ bnez $v0, .L800273A0
/* 0027C0 800273C0 00851821 */ addu $v1, $a0, $a1
.L800273C4:
/* 0027C4 800273C4 28A20020 */ slti $v0, $a1, 0x20
/* 0027C8 800273C8 10400009 */ beqz $v0, .L800273F0
/* 0027CC 800273CC 27A30038 */ addiu $v1, $sp, 0x38
/* 0027D0 800273D0 00651021 */ addu $v0, $v1, $a1
.L800273D4:
/* 0027D4 800273D4 90420000 */ lbu $v0, ($v0)
/* 0027D8 800273D8 14400005 */ bnez $v0, .L800273F0
/* 0027DC 800273DC 00000000 */ nop
/* 0027E0 800273E0 24A50001 */ addiu $a1, $a1, 1
/* 0027E4 800273E4 28A20020 */ slti $v0, $a1, 0x20
/* 0027E8 800273E8 1440FFFA */ bnez $v0, .L800273D4
/* 0027EC 800273EC 00651021 */ addu $v0, $v1, $a1
.L800273F0:
/* 0027F0 800273F0 93A20001 */ lbu $v0, 1($sp)
/* 0027F4 800273F4 00A2102A */ slt $v0, $a1, $v0
/* 0027F8 800273F8 54400001 */ bnel $v0, $zero, .L80027400
/* 0027FC 800273FC A3A50001 */ sb $a1, 1($sp)
.L80027400:
/* 002800 80027400 0000282D */ daddu $a1, $zero, $zero
/* 002804 80027404 27A40058 */ addiu $a0, $sp, 0x58
/* 002808 80027408 00851821 */ addu $v1, $a0, $a1
.L8002740C:
/* 00280C 8002740C 90620000 */ lbu $v0, ($v1)
/* 002810 80027410 50400004 */ beql $v0, $zero, .L80027424
/* 002814 80027414 24A50001 */ addiu $a1, $a1, 1
/* 002818 80027418 2442FFFF */ addiu $v0, $v0, -1
/* 00281C 8002741C 08009D0C */ j .L80027430
/* 002820 80027420 A0620000 */ sb $v0, ($v1)
.L80027424:
/* 002824 80027424 28A20020 */ slti $v0, $a1, 0x20
/* 002828 80027428 1440FFF8 */ bnez $v0, .L8002740C
/* 00282C 8002742C 00851821 */ addu $v1, $a0, $a1
.L80027430:
/* 002830 80027430 28A20020 */ slti $v0, $a1, 0x20
/* 002834 80027434 10400009 */ beqz $v0, .L8002745C
/* 002838 80027438 27A30058 */ addiu $v1, $sp, 0x58
/* 00283C 8002743C 00651021 */ addu $v0, $v1, $a1
.L80027440:
/* 002840 80027440 90420000 */ lbu $v0, ($v0)
/* 002844 80027444 14400005 */ bnez $v0, .L8002745C
/* 002848 80027448 00000000 */ nop
/* 00284C 8002744C 24A50001 */ addiu $a1, $a1, 1
/* 002850 80027450 28A20020 */ slti $v0, $a1, 0x20
/* 002854 80027454 1440FFFA */ bnez $v0, .L80027440
/* 002858 80027458 00651021 */ addu $v0, $v1, $a1
.L8002745C:
/* 00285C 8002745C 93A20002 */ lbu $v0, 2($sp)
/* 002860 80027460 00A2102A */ slt $v0, $a1, $v0
/* 002864 80027464 54400001 */ bnel $v0, $zero, .L8002746C
/* 002868 80027468 A3A50002 */ sb $a1, 2($sp)
.L8002746C:
/* 00286C 8002746C 2405001F */ addiu $a1, $zero, 0x1f
/* 002870 80027470 27A30018 */ addiu $v1, $sp, 0x18
/* 002874 80027474 00651021 */ addu $v0, $v1, $a1
.L80027478:
/* 002878 80027478 90420000 */ lbu $v0, ($v0)
/* 00287C 8002747C 14400004 */ bnez $v0, .L80027490
/* 002880 80027480 00000000 */ nop
/* 002884 80027484 24A5FFFF */ addiu $a1, $a1, -1
/* 002888 80027488 04A1FFFB */ bgez $a1, .L80027478
/* 00288C 8002748C 00651021 */ addu $v0, $v1, $a1
.L80027490:
/* 002890 80027490 93A20008 */ lbu $v0, 8($sp)
/* 002894 80027494 0045102A */ slt $v0, $v0, $a1
/* 002898 80027498 54400001 */ bnel $v0, $zero, .L800274A0
/* 00289C 8002749C A3A50008 */ sb $a1, 8($sp)
.L800274A0:
/* 0028A0 800274A0 2405001F */ addiu $a1, $zero, 0x1f
/* 0028A4 800274A4 27A30038 */ addiu $v1, $sp, 0x38
/* 0028A8 800274A8 00651021 */ addu $v0, $v1, $a1
.L800274AC:
/* 0028AC 800274AC 90420000 */ lbu $v0, ($v0)
/* 0028B0 800274B0 14400004 */ bnez $v0, .L800274C4
/* 0028B4 800274B4 00000000 */ nop
/* 0028B8 800274B8 24A5FFFF */ addiu $a1, $a1, -1
/* 0028BC 800274BC 04A1FFFB */ bgez $a1, .L800274AC
/* 0028C0 800274C0 00651021 */ addu $v0, $v1, $a1
.L800274C4:
/* 0028C4 800274C4 93A20009 */ lbu $v0, 9($sp)
/* 0028C8 800274C8 0045102A */ slt $v0, $v0, $a1
/* 0028CC 800274CC 54400001 */ bnel $v0, $zero, .L800274D4
/* 0028D0 800274D0 A3A50009 */ sb $a1, 9($sp)
.L800274D4:
/* 0028D4 800274D4 2405001F */ addiu $a1, $zero, 0x1f
/* 0028D8 800274D8 27A30058 */ addiu $v1, $sp, 0x58
/* 0028DC 800274DC 00651021 */ addu $v0, $v1, $a1
.L800274E0:
/* 0028E0 800274E0 90420000 */ lbu $v0, ($v0)
/* 0028E4 800274E4 14400004 */ bnez $v0, .L800274F8
/* 0028E8 800274E8 00000000 */ nop
/* 0028EC 800274EC 24A5FFFF */ addiu $a1, $a1, -1
/* 0028F0 800274F0 04A1FFFB */ bgez $a1, .L800274E0
/* 0028F4 800274F4 00651021 */ addu $v0, $v1, $a1
.L800274F8:
/* 0028F8 800274F8 93A2000A */ lbu $v0, 0xa($sp)
/* 0028FC 800274FC 0045102A */ slt $v0, $v0, $a1
/* 002900 80027500 54400001 */ bnel $v0, $zero, .L80027508
/* 002904 80027504 A3A5000A */ sb $a1, 0xa($sp)
.L80027508:
/* 002908 80027508 93A20008 */ lbu $v0, 8($sp)
/* 00290C 8002750C 93A30000 */ lbu $v1, ($sp)
/* 002910 80027510 93A4007C */ lbu $a0, 0x7c($sp)
/* 002914 80027514 00431021 */ addu $v0, $v0, $v1
/* 002918 80027518 00441023 */ subu $v0, $v0, $a0
/* 00291C 8002751C A3A20010 */ sb $v0, 0x10($sp)
/* 002920 80027520 93A20009 */ lbu $v0, 9($sp)
/* 002924 80027524 93A30001 */ lbu $v1, 1($sp)
/* 002928 80027528 93A4007D */ lbu $a0, 0x7d($sp)
/* 00292C 8002752C 00431021 */ addu $v0, $v0, $v1
/* 002930 80027530 00441023 */ subu $v0, $v0, $a0
/* 002934 80027534 A3A20011 */ sb $v0, 0x11($sp)
/* 002938 80027538 93A2000A */ lbu $v0, 0xa($sp)
/* 00293C 8002753C 93A30002 */ lbu $v1, 2($sp)
/* 002940 80027540 93A4007E */ lbu $a0, 0x7e($sp)
/* 002944 80027544 00431021 */ addu $v0, $v0, $v1
/* 002948 80027548 00441023 */ subu $v0, $v0, $a0
/* 00294C 8002754C A3A20012 */ sb $v0, 0x12($sp)
/* 002950 80027550 93A2007C */ lbu $v0, 0x7c($sp)
/* 002954 80027554 93A4007F */ lbu $a0, 0x7f($sp)
/* 002958 80027558 00440018 */ mult $v0, $a0
/* 00295C 8002755C 24030008 */ addiu $v1, $zero, 8
/* 002960 80027560 00002812 */ mflo $a1
/* 002964 80027564 93A20010 */ lbu $v0, 0x10($sp)
/* 002968 80027568 00641823 */ subu $v1, $v1, $a0
/* 00296C 8002756C 00430018 */ mult $v0, $v1
/* 002970 80027570 00001012 */ mflo $v0
/* 002974 80027574 00A21021 */ addu $v0, $a1, $v0
/* 002978 80027578 000210C3 */ sra $v0, $v0, 3
/* 00297C 8002757C A3A20010 */ sb $v0, 0x10($sp)
/* 002980 80027580 93A2007D */ lbu $v0, 0x7d($sp)
/* 002984 80027584 00440018 */ mult $v0, $a0
/* 002988 80027588 00002812 */ mflo $a1
/* 00298C 8002758C 93A20011 */ lbu $v0, 0x11($sp)
/* 002990 80027590 00000000 */ nop
/* 002994 80027594 00430018 */ mult $v0, $v1
/* 002998 80027598 00001012 */ mflo $v0
/* 00299C 8002759C 00A21021 */ addu $v0, $a1, $v0
/* 0029A0 800275A0 000210C3 */ sra $v0, $v0, 3
/* 0029A4 800275A4 A3A20011 */ sb $v0, 0x11($sp)
/* 0029A8 800275A8 93A2007E */ lbu $v0, 0x7e($sp)
/* 0029AC 800275AC 00440018 */ mult $v0, $a0
/* 0029B0 800275B0 00002012 */ mflo $a0
/* 0029B4 800275B4 93A20012 */ lbu $v0, 0x12($sp)
/* 0029B8 800275B8 00000000 */ nop
/* 0029BC 800275BC 00430018 */ mult $v0, $v1
/* 0029C0 800275C0 00001012 */ mflo $v0
/* 0029C4 800275C4 00821021 */ addu $v0, $a0, $v0
/* 0029C8 800275C8 000210C3 */ sra $v0, $v0, 3
/* 0029CC 800275CC A3A20012 */ sb $v0, 0x12($sp)
/* 0029D0 800275D0 93A20010 */ lbu $v0, 0x10($sp)
/* 0029D4 800275D4 93A40011 */ lbu $a0, 0x11($sp)
/* 0029D8 800275D8 93A30012 */ lbu $v1, 0x12($sp)
/* 0029DC 800275DC 000212C0 */ sll $v0, $v0, 0xb
/* 0029E0 800275E0 00042180 */ sll $a0, $a0, 6
/* 0029E4 800275E4 00441021 */ addu $v0, $v0, $a0
/* 0029E8 800275E8 00031840 */ sll $v1, $v1, 1
/* 0029EC 800275EC 00431021 */ addu $v0, $v0, $v1
/* 0029F0 800275F0 24420001 */ addiu $v0, $v0, 1
/* 0029F4 800275F4 A4C20000 */ sh $v0, ($a2)
/* 0029F8 800275F8 03E00008 */ jr $ra
/* 0029FC 800275FC 27BD0078 */ addiu $sp, $sp, 0x78
.set reorder

View File

@ -0,0 +1,109 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_80027600:
/* 002A00 80027600 27BDFF98 */ addiu $sp, $sp, -0x68
/* 002A04 80027604 0080502D */ daddu $t2, $a0, $zero
/* 002A08 80027608 0000302D */ daddu $a2, $zero, $zero
/* 002A0C 8002760C 27A90008 */ addiu $t1, $sp, 8
/* 002A10 80027610 27A80028 */ addiu $t0, $sp, 0x28
/* 002A14 80027614 27A70048 */ addiu $a3, $sp, 0x48
.L80027618:
/* 002A18 80027618 01261021 */ addu $v0, $t1, $a2
/* 002A1C 8002761C 01061821 */ addu $v1, $t0, $a2
/* 002A20 80027620 00E62021 */ addu $a0, $a3, $a2
/* 002A24 80027624 24C60001 */ addiu $a2, $a2, 1
/* 002A28 80027628 A0400000 */ sb $zero, ($v0)
/* 002A2C 8002762C 28C20020 */ slti $v0, $a2, 0x20
/* 002A30 80027630 A0600000 */ sb $zero, ($v1)
/* 002A34 80027634 1440FFF8 */ bnez $v0, .L80027618
/* 002A38 80027638 A0800000 */ sb $zero, ($a0)
/* 002A3C 8002763C 0000302D */ daddu $a2, $zero, $zero
/* 002A40 80027640 27A90008 */ addiu $t1, $sp, 8
/* 002A44 80027644 27A80028 */ addiu $t0, $sp, 0x28
/* 002A48 80027648 27A70048 */ addiu $a3, $sp, 0x48
/* 002A4C 8002764C 0140202D */ daddu $a0, $t2, $zero
.L80027650:
/* 002A50 80027650 90830000 */ lbu $v1, ($a0)
/* 002A54 80027654 01231821 */ addu $v1, $t1, $v1
/* 002A58 80027658 90620000 */ lbu $v0, ($v1)
/* 002A5C 8002765C 24420001 */ addiu $v0, $v0, 1
/* 002A60 80027660 A0620000 */ sb $v0, ($v1)
/* 002A64 80027664 90830001 */ lbu $v1, 1($a0)
/* 002A68 80027668 01031821 */ addu $v1, $t0, $v1
/* 002A6C 8002766C 90620000 */ lbu $v0, ($v1)
/* 002A70 80027670 24420001 */ addiu $v0, $v0, 1
/* 002A74 80027674 A0620000 */ sb $v0, ($v1)
/* 002A78 80027678 90830002 */ lbu $v1, 2($a0)
/* 002A7C 8002767C 24C60001 */ addiu $a2, $a2, 1
/* 002A80 80027680 00E31821 */ addu $v1, $a3, $v1
/* 002A84 80027684 90620000 */ lbu $v0, ($v1)
/* 002A88 80027688 24420001 */ addiu $v0, $v0, 1
/* 002A8C 8002768C A0620000 */ sb $v0, ($v1)
/* 002A90 80027690 28C20009 */ slti $v0, $a2, 9
/* 002A94 80027694 1440FFEE */ bnez $v0, .L80027650
/* 002A98 80027698 24840004 */ addiu $a0, $a0, 4
/* 002A9C 8002769C 0000182D */ daddu $v1, $zero, $zero
/* 002AA0 800276A0 0060302D */ daddu $a2, $v1, $zero
/* 002AA4 800276A4 27A40008 */ addiu $a0, $sp, 8
/* 002AA8 800276A8 00861021 */ addu $v0, $a0, $a2
.L800276AC:
/* 002AAC 800276AC 90420000 */ lbu $v0, ($v0)
/* 002AB0 800276B0 00621821 */ addu $v1, $v1, $v0
/* 002AB4 800276B4 28620005 */ slti $v0, $v1, 5
/* 002AB8 800276B8 50400006 */ beql $v0, $zero, .L800276D4
/* 002ABC 800276BC A3A60000 */ sb $a2, ($sp)
/* 002AC0 800276C0 24C60001 */ addiu $a2, $a2, 1
/* 002AC4 800276C4 28C20020 */ slti $v0, $a2, 0x20
/* 002AC8 800276C8 1440FFF8 */ bnez $v0, .L800276AC
/* 002ACC 800276CC 00861021 */ addu $v0, $a0, $a2
/* 002AD0 800276D0 A3A60000 */ sb $a2, ($sp)
.L800276D4:
/* 002AD4 800276D4 0000182D */ daddu $v1, $zero, $zero
/* 002AD8 800276D8 0060302D */ daddu $a2, $v1, $zero
/* 002ADC 800276DC 27A40028 */ addiu $a0, $sp, 0x28
/* 002AE0 800276E0 00861021 */ addu $v0, $a0, $a2
.L800276E4:
/* 002AE4 800276E4 90420000 */ lbu $v0, ($v0)
/* 002AE8 800276E8 00621821 */ addu $v1, $v1, $v0
/* 002AEC 800276EC 28620005 */ slti $v0, $v1, 5
/* 002AF0 800276F0 50400006 */ beql $v0, $zero, .L8002770C
/* 002AF4 800276F4 A3A60001 */ sb $a2, 1($sp)
/* 002AF8 800276F8 24C60001 */ addiu $a2, $a2, 1
/* 002AFC 800276FC 28C20020 */ slti $v0, $a2, 0x20
/* 002B00 80027700 1440FFF8 */ bnez $v0, .L800276E4
/* 002B04 80027704 00861021 */ addu $v0, $a0, $a2
/* 002B08 80027708 A3A60001 */ sb $a2, 1($sp)
.L8002770C:
/* 002B0C 8002770C 0000182D */ daddu $v1, $zero, $zero
/* 002B10 80027710 0060302D */ daddu $a2, $v1, $zero
/* 002B14 80027714 27A40048 */ addiu $a0, $sp, 0x48
/* 002B18 80027718 00861021 */ addu $v0, $a0, $a2
.L8002771C:
/* 002B1C 8002771C 90420000 */ lbu $v0, ($v0)
/* 002B20 80027720 00621821 */ addu $v1, $v1, $v0
/* 002B24 80027724 28620005 */ slti $v0, $v1, 5
/* 002B28 80027728 50400006 */ beql $v0, $zero, .L80027744
/* 002B2C 8002772C A3A60002 */ sb $a2, 2($sp)
/* 002B30 80027730 24C60001 */ addiu $a2, $a2, 1
/* 002B34 80027734 28C20020 */ slti $v0, $a2, 0x20
/* 002B38 80027738 1440FFF8 */ bnez $v0, .L8002771C
/* 002B3C 8002773C 00861021 */ addu $v0, $a0, $a2
/* 002B40 80027740 A3A60002 */ sb $a2, 2($sp)
.L80027744:
/* 002B44 80027744 30C300FF */ andi $v1, $a2, 0xff
/* 002B48 80027748 00031840 */ sll $v1, $v1, 1
/* 002B4C 8002774C 93A20000 */ lbu $v0, ($sp)
/* 002B50 80027750 93A40001 */ lbu $a0, 1($sp)
/* 002B54 80027754 000212C0 */ sll $v0, $v0, 0xb
/* 002B58 80027758 00042180 */ sll $a0, $a0, 6
/* 002B5C 8002775C 00441021 */ addu $v0, $v0, $a0
/* 002B60 80027760 00431021 */ addu $v0, $v0, $v1
/* 002B64 80027764 24420001 */ addiu $v0, $v0, 1
/* 002B68 80027768 A4A20000 */ sh $v0, ($a1)
/* 002B6C 8002776C 03E00008 */ jr $ra
/* 002B70 80027770 27BD0068 */ addiu $sp, $sp, 0x68
.set reorder

View File

@ -0,0 +1,158 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_80027774:
/* 002B74 80027774 27BDFF90 */ addiu $sp, $sp, -0x70
/* 002B78 80027778 AFB40058 */ sw $s4, 0x58($sp)
/* 002B7C 8002777C 0080A02D */ daddu $s4, $a0, $zero
/* 002B80 80027780 AFB5005C */ sw $s5, 0x5c($sp)
/* 002B84 80027784 00A0A82D */ daddu $s5, $a1, $zero
/* 002B88 80027788 AFB30054 */ sw $s3, 0x54($sp)
/* 002B8C 8002778C 24130001 */ addiu $s3, $zero, 1
/* 002B90 80027790 27A80018 */ addiu $t0, $sp, 0x18
/* 002B94 80027794 AFA80040 */ sw $t0, 0x40($sp)
/* 002B98 80027798 24080140 */ addiu $t0, $zero, 0x140
/* 002B9C 8002779C AFBF006C */ sw $ra, 0x6c($sp)
/* 002BA0 800277A0 AFBE0068 */ sw $fp, 0x68($sp)
/* 002BA4 800277A4 AFB70064 */ sw $s7, 0x64($sp)
/* 002BA8 800277A8 AFB60060 */ sw $s6, 0x60($sp)
/* 002BAC 800277AC AFB20050 */ sw $s2, 0x50($sp)
/* 002BB0 800277B0 AFB1004C */ sw $s1, 0x4c($sp)
/* 002BB4 800277B4 AFB00048 */ sw $s0, 0x48($sp)
/* 002BB8 800277B8 AFA60078 */ sw $a2, 0x78($sp)
/* 002BBC 800277BC AFA80044 */ sw $t0, 0x44($sp)
.L800277C0:
/* 002BC0 800277C0 24120001 */ addiu $s2, $zero, 1
/* 002BC4 800277C4 267EFFFF */ addiu $fp, $s3, -1
/* 002BC8 800277C8 8FA80044 */ lw $t0, 0x44($sp)
/* 002BCC 800277CC 0272B821 */ addu $s7, $s3, $s2
/* 002BD0 800277D0 0112B021 */ addu $s6, $t0, $s2
/* 002BD4 800277D4 00161840 */ sll $v1, $s6, 1
.L800277D8:
/* 002BD8 800277D8 00752021 */ addu $a0, $v1, $s5
/* 002BDC 800277DC 9482FFFE */ lhu $v0, -2($a0)
/* 002BE0 800277E0 00021082 */ srl $v0, $v0, 2
/* 002BE4 800277E4 3042000F */ andi $v0, $v0, 0xf
/* 002BE8 800277E8 2C420008 */ sltiu $v0, $v0, 8
/* 002BEC 800277EC 5440000D */ bnel $v0, $zero, .L80027824
/* 002BF0 800277F0 0280202D */ daddu $a0, $s4, $zero
/* 002BF4 800277F4 94820000 */ lhu $v0, ($a0)
/* 002BF8 800277F8 00021082 */ srl $v0, $v0, 2
/* 002BFC 800277FC 3042000F */ andi $v0, $v0, 0xf
/* 002C00 80027800 2C420008 */ sltiu $v0, $v0, 8
/* 002C04 80027804 54400007 */ bnel $v0, $zero, .L80027824
/* 002C08 80027808 0280202D */ daddu $a0, $s4, $zero
/* 002C0C 8002780C 94820002 */ lhu $v0, 2($a0)
/* 002C10 80027810 00021082 */ srl $v0, $v0, 2
/* 002C14 80027814 3042000F */ andi $v0, $v0, 0xf
/* 002C18 80027818 2C420008 */ sltiu $v0, $v0, 8
/* 002C1C 8002781C 10400048 */ beqz $v0, .L80027940
/* 002C20 80027820 0280202D */ daddu $a0, $s4, $zero
.L80027824:
/* 002C24 80027824 02A0282D */ daddu $a1, $s5, $zero
/* 002C28 80027828 03C0302D */ daddu $a2, $fp, $zero
/* 002C2C 8002782C 2650FFFF */ addiu $s0, $s2, -1
/* 002C30 80027830 8FA80040 */ lw $t0, 0x40($sp)
/* 002C34 80027834 0200382D */ daddu $a3, $s0, $zero
/* 002C38 80027838 0C009C7F */ jal func_800271FC
/* 002C3C 8002783C AFA80010 */ sw $t0, 0x10($sp)
/* 002C40 80027840 0280202D */ daddu $a0, $s4, $zero
/* 002C44 80027844 02A0282D */ daddu $a1, $s5, $zero
/* 002C48 80027848 03C0302D */ daddu $a2, $fp, $zero
/* 002C4C 8002784C 0240382D */ daddu $a3, $s2, $zero
/* 002C50 80027850 27A2001C */ addiu $v0, $sp, 0x1c
/* 002C54 80027854 0C009C7F */ jal func_800271FC
/* 002C58 80027858 AFA20010 */ sw $v0, 0x10($sp)
/* 002C5C 8002785C 0280202D */ daddu $a0, $s4, $zero
/* 002C60 80027860 02A0282D */ daddu $a1, $s5, $zero
/* 002C64 80027864 03C0302D */ daddu $a2, $fp, $zero
/* 002C68 80027868 26510001 */ addiu $s1, $s2, 1
/* 002C6C 8002786C 0220382D */ daddu $a3, $s1, $zero
/* 002C70 80027870 27A20020 */ addiu $v0, $sp, 0x20
/* 002C74 80027874 0C009C7F */ jal func_800271FC
/* 002C78 80027878 AFA20010 */ sw $v0, 0x10($sp)
/* 002C7C 8002787C 0280202D */ daddu $a0, $s4, $zero
/* 002C80 80027880 02A0282D */ daddu $a1, $s5, $zero
/* 002C84 80027884 0260302D */ daddu $a2, $s3, $zero
/* 002C88 80027888 0200382D */ daddu $a3, $s0, $zero
/* 002C8C 8002788C 27A20024 */ addiu $v0, $sp, 0x24
/* 002C90 80027890 0C009C7F */ jal func_800271FC
/* 002C94 80027894 AFA20010 */ sw $v0, 0x10($sp)
/* 002C98 80027898 0280202D */ daddu $a0, $s4, $zero
/* 002C9C 8002789C 02A0282D */ daddu $a1, $s5, $zero
/* 002CA0 800278A0 0260302D */ daddu $a2, $s3, $zero
/* 002CA4 800278A4 0240382D */ daddu $a3, $s2, $zero
/* 002CA8 800278A8 27A20028 */ addiu $v0, $sp, 0x28
/* 002CAC 800278AC 0C009C7F */ jal func_800271FC
/* 002CB0 800278B0 AFA20010 */ sw $v0, 0x10($sp)
/* 002CB4 800278B4 0280202D */ daddu $a0, $s4, $zero
/* 002CB8 800278B8 02A0282D */ daddu $a1, $s5, $zero
/* 002CBC 800278BC 0260302D */ daddu $a2, $s3, $zero
/* 002CC0 800278C0 0220382D */ daddu $a3, $s1, $zero
/* 002CC4 800278C4 27A2002C */ addiu $v0, $sp, 0x2c
/* 002CC8 800278C8 0C009C7F */ jal func_800271FC
/* 002CCC 800278CC AFA20010 */ sw $v0, 0x10($sp)
/* 002CD0 800278D0 0280202D */ daddu $a0, $s4, $zero
/* 002CD4 800278D4 02A0282D */ daddu $a1, $s5, $zero
/* 002CD8 800278D8 02E0302D */ daddu $a2, $s7, $zero
/* 002CDC 800278DC 0200382D */ daddu $a3, $s0, $zero
/* 002CE0 800278E0 27A20030 */ addiu $v0, $sp, 0x30
/* 002CE4 800278E4 0C009C7F */ jal func_800271FC
/* 002CE8 800278E8 AFA20010 */ sw $v0, 0x10($sp)
/* 002CEC 800278EC 0280202D */ daddu $a0, $s4, $zero
/* 002CF0 800278F0 02A0282D */ daddu $a1, $s5, $zero
/* 002CF4 800278F4 02E0302D */ daddu $a2, $s7, $zero
/* 002CF8 800278F8 0240382D */ daddu $a3, $s2, $zero
/* 002CFC 800278FC 27A20034 */ addiu $v0, $sp, 0x34
/* 002D00 80027900 0C009C7F */ jal func_800271FC
/* 002D04 80027904 AFA20010 */ sw $v0, 0x10($sp)
/* 002D08 80027908 0280202D */ daddu $a0, $s4, $zero
/* 002D0C 8002790C 02A0282D */ daddu $a1, $s5, $zero
/* 002D10 80027910 02E0302D */ daddu $a2, $s7, $zero
/* 002D14 80027914 0220382D */ daddu $a3, $s1, $zero
/* 002D18 80027918 27A20038 */ addiu $v0, $sp, 0x38
/* 002D1C 8002791C 0C009C7F */ jal func_800271FC
/* 002D20 80027920 AFA20010 */ sw $v0, 0x10($sp)
/* 002D24 80027924 00162840 */ sll $a1, $s6, 1
/* 002D28 80027928 8FA80078 */ lw $t0, 0x78($sp)
/* 002D2C 8002792C 8FA40040 */ lw $a0, 0x40($sp)
/* 002D30 80027930 0C009D80 */ jal func_80027600
/* 002D34 80027934 01052821 */ addu $a1, $t0, $a1
/* 002D38 80027938 08009E57 */ j .L8002795C
/* 002D3C 8002793C 26D60001 */ addiu $s6, $s6, 1
.L80027940:
/* 002D40 80027940 00741021 */ addu $v0, $v1, $s4
/* 002D44 80027944 8FA80078 */ lw $t0, 0x78($sp)
/* 002D48 80027948 94420000 */ lhu $v0, ($v0)
/* 002D4C 8002794C 00681821 */ addu $v1, $v1, $t0
/* 002D50 80027950 34420001 */ ori $v0, $v0, 1
/* 002D54 80027954 A4620000 */ sh $v0, ($v1)
/* 002D58 80027958 26D60001 */ addiu $s6, $s6, 1
.L8002795C:
/* 002D5C 8002795C 26520001 */ addiu $s2, $s2, 1
/* 002D60 80027960 2A42013F */ slti $v0, $s2, 0x13f
/* 002D64 80027964 1440FF9C */ bnez $v0, .L800277D8
/* 002D68 80027968 00161840 */ sll $v1, $s6, 1
/* 002D6C 8002796C 26730001 */ addiu $s3, $s3, 1
/* 002D70 80027970 8FA80044 */ lw $t0, 0x44($sp)
/* 002D74 80027974 2A6200EF */ slti $v0, $s3, 0xef
/* 002D78 80027978 25080140 */ addiu $t0, $t0, 0x140
/* 002D7C 8002797C 1440FF90 */ bnez $v0, .L800277C0
/* 002D80 80027980 AFA80044 */ sw $t0, 0x44($sp)
/* 002D84 80027984 8FBF006C */ lw $ra, 0x6c($sp)
/* 002D88 80027988 8FBE0068 */ lw $fp, 0x68($sp)
/* 002D8C 8002798C 8FB70064 */ lw $s7, 0x64($sp)
/* 002D90 80027990 8FB60060 */ lw $s6, 0x60($sp)
/* 002D94 80027994 8FB5005C */ lw $s5, 0x5c($sp)
/* 002D98 80027998 8FB40058 */ lw $s4, 0x58($sp)
/* 002D9C 8002799C 8FB30054 */ lw $s3, 0x54($sp)
/* 002DA0 800279A0 8FB20050 */ lw $s2, 0x50($sp)
/* 002DA4 800279A4 8FB1004C */ lw $s1, 0x4c($sp)
/* 002DA8 800279A8 8FB00048 */ lw $s0, 0x48($sp)
/* 002DAC 800279AC 03E00008 */ jr $ra
/* 002DB0 800279B0 27BD0070 */ addiu $sp, $sp, 0x70
.set reorder

View File

@ -0,0 +1,139 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_800279B4:
/* 002DB4 800279B4 27BDFF98 */ addiu $sp, $sp, -0x68
/* 002DB8 800279B8 AFB50054 */ sw $s5, 0x54($sp)
/* 002DBC 800279BC 0080A82D */ daddu $s5, $a0, $zero
/* 002DC0 800279C0 AFB60058 */ sw $s6, 0x58($sp)
/* 002DC4 800279C4 00A0B02D */ daddu $s6, $a1, $zero
/* 002DC8 800279C8 AFB3004C */ sw $s3, 0x4c($sp)
/* 002DCC 800279CC 24130001 */ addiu $s3, $zero, 1
/* 002DD0 800279D0 27A80018 */ addiu $t0, $sp, 0x18
/* 002DD4 800279D4 AFA80038 */ sw $t0, 0x38($sp)
/* 002DD8 800279D8 24080140 */ addiu $t0, $zero, 0x140
/* 002DDC 800279DC AFBF0064 */ sw $ra, 0x64($sp)
/* 002DE0 800279E0 AFBE0060 */ sw $fp, 0x60($sp)
/* 002DE4 800279E4 AFB7005C */ sw $s7, 0x5c($sp)
/* 002DE8 800279E8 AFB40050 */ sw $s4, 0x50($sp)
/* 002DEC 800279EC AFB20048 */ sw $s2, 0x48($sp)
/* 002DF0 800279F0 AFB10044 */ sw $s1, 0x44($sp)
/* 002DF4 800279F4 AFB00040 */ sw $s0, 0x40($sp)
/* 002DF8 800279F8 AFA60070 */ sw $a2, 0x70($sp)
/* 002DFC 800279FC AFA8003C */ sw $t0, 0x3c($sp)
.L80027A00:
/* 002E00 80027A00 24120002 */ addiu $s2, $zero, 2
/* 002E04 80027A04 267EFFFF */ addiu $fp, $s3, -1
/* 002E08 80027A08 26770001 */ addiu $s7, $s3, 1
.L80027A0C:
/* 002E0C 80027A0C 8FA8003C */ lw $t0, 0x3c($sp)
/* 002E10 80027A10 01121021 */ addu $v0, $t0, $s2
/* 002E14 80027A14 0002A040 */ sll $s4, $v0, 1
/* 002E18 80027A18 02961021 */ addu $v0, $s4, $s6
/* 002E1C 80027A1C 94420000 */ lhu $v0, ($v0)
/* 002E20 80027A20 00021082 */ srl $v0, $v0, 2
/* 002E24 80027A24 3042000F */ andi $v0, $v0, 0xf
/* 002E28 80027A28 2C420008 */ sltiu $v0, $v0, 8
/* 002E2C 80027A2C 10400043 */ beqz $v0, .L80027B3C
/* 002E30 80027A30 02A0202D */ daddu $a0, $s5, $zero
/* 002E34 80027A34 02C0282D */ daddu $a1, $s6, $zero
/* 002E38 80027A38 03C0302D */ daddu $a2, $fp, $zero
/* 002E3C 80027A3C 2650FFFF */ addiu $s0, $s2, -1
/* 002E40 80027A40 8FA80038 */ lw $t0, 0x38($sp)
/* 002E44 80027A44 0200382D */ daddu $a3, $s0, $zero
/* 002E48 80027A48 0C009C7F */ jal func_800271FC
/* 002E4C 80027A4C AFA80010 */ sw $t0, 0x10($sp)
/* 002E50 80027A50 02A0202D */ daddu $a0, $s5, $zero
/* 002E54 80027A54 02C0282D */ daddu $a1, $s6, $zero
/* 002E58 80027A58 03C0302D */ daddu $a2, $fp, $zero
/* 002E5C 80027A5C 26510001 */ addiu $s1, $s2, 1
/* 002E60 80027A60 0220382D */ daddu $a3, $s1, $zero
/* 002E64 80027A64 27A2001C */ addiu $v0, $sp, 0x1c
/* 002E68 80027A68 0C009C7F */ jal func_800271FC
/* 002E6C 80027A6C AFA20010 */ sw $v0, 0x10($sp)
/* 002E70 80027A70 02A0202D */ daddu $a0, $s5, $zero
/* 002E74 80027A74 02C0282D */ daddu $a1, $s6, $zero
/* 002E78 80027A78 0260302D */ daddu $a2, $s3, $zero
/* 002E7C 80027A7C 2647FFFE */ addiu $a3, $s2, -2
/* 002E80 80027A80 27A20020 */ addiu $v0, $sp, 0x20
/* 002E84 80027A84 0C009C7F */ jal func_800271FC
/* 002E88 80027A88 AFA20010 */ sw $v0, 0x10($sp)
/* 002E8C 80027A8C 02A0202D */ daddu $a0, $s5, $zero
/* 002E90 80027A90 02C0282D */ daddu $a1, $s6, $zero
/* 002E94 80027A94 0260302D */ daddu $a2, $s3, $zero
/* 002E98 80027A98 26470002 */ addiu $a3, $s2, 2
/* 002E9C 80027A9C 27A20024 */ addiu $v0, $sp, 0x24
/* 002EA0 80027AA0 0C009C7F */ jal func_800271FC
/* 002EA4 80027AA4 AFA20010 */ sw $v0, 0x10($sp)
/* 002EA8 80027AA8 02A0202D */ daddu $a0, $s5, $zero
/* 002EAC 80027AAC 02C0282D */ daddu $a1, $s6, $zero
/* 002EB0 80027AB0 02E0302D */ daddu $a2, $s7, $zero
/* 002EB4 80027AB4 0200382D */ daddu $a3, $s0, $zero
/* 002EB8 80027AB8 27A20028 */ addiu $v0, $sp, 0x28
/* 002EBC 80027ABC 0C009C7F */ jal func_800271FC
/* 002EC0 80027AC0 AFA20010 */ sw $v0, 0x10($sp)
/* 002EC4 80027AC4 02A0202D */ daddu $a0, $s5, $zero
/* 002EC8 80027AC8 02C0282D */ daddu $a1, $s6, $zero
/* 002ECC 80027ACC 02E0302D */ daddu $a2, $s7, $zero
/* 002ED0 80027AD0 0220382D */ daddu $a3, $s1, $zero
/* 002ED4 80027AD4 27A2002C */ addiu $v0, $sp, 0x2c
/* 002ED8 80027AD8 0C009C7F */ jal func_800271FC
/* 002EDC 80027ADC AFA20010 */ sw $v0, 0x10($sp)
/* 002EE0 80027AE0 02A0202D */ daddu $a0, $s5, $zero
/* 002EE4 80027AE4 02C0282D */ daddu $a1, $s6, $zero
/* 002EE8 80027AE8 0260302D */ daddu $a2, $s3, $zero
/* 002EEC 80027AEC 0240382D */ daddu $a3, $s2, $zero
/* 002EF0 80027AF0 27A20030 */ addiu $v0, $sp, 0x30
/* 002EF4 80027AF4 0C009C7F */ jal func_800271FC
/* 002EF8 80027AF8 AFA20010 */ sw $v0, 0x10($sp)
/* 002EFC 80027AFC 8FA40038 */ lw $a0, 0x38($sp)
/* 002F00 80027B00 8FA80070 */ lw $t0, 0x70($sp)
/* 002F04 80027B04 93A50030 */ lbu $a1, 0x30($sp)
/* 002F08 80027B08 93A20031 */ lbu $v0, 0x31($sp)
/* 002F0C 80027B0C 93A30032 */ lbu $v1, 0x32($sp)
/* 002F10 80027B10 01143021 */ addu $a2, $t0, $s4
/* 002F14 80027B14 00052E00 */ sll $a1, $a1, 0x18
/* 002F18 80027B18 00021400 */ sll $v0, $v0, 0x10
/* 002F1C 80027B1C 00A22825 */ or $a1, $a1, $v0
/* 002F20 80027B20 00031A00 */ sll $v1, $v1, 8
/* 002F24 80027B24 93A20033 */ lbu $v0, 0x33($sp)
/* 002F28 80027B28 00A32825 */ or $a1, $a1, $v1
/* 002F2C 80027B2C 0C009C97 */ jal func_8002725C
/* 002F30 80027B30 00A22825 */ or $a1, $a1, $v0
/* 002F34 80027B34 08009ED6 */ j .L80027B58
/* 002F38 80027B38 26520001 */ addiu $s2, $s2, 1
.L80027B3C:
/* 002F3C 80027B3C 02951021 */ addu $v0, $s4, $s5
/* 002F40 80027B40 8FA80070 */ lw $t0, 0x70($sp)
/* 002F44 80027B44 94420000 */ lhu $v0, ($v0)
/* 002F48 80027B48 02881821 */ addu $v1, $s4, $t0
/* 002F4C 80027B4C 34420001 */ ori $v0, $v0, 1
/* 002F50 80027B50 A4620000 */ sh $v0, ($v1)
/* 002F54 80027B54 26520001 */ addiu $s2, $s2, 1
.L80027B58:
/* 002F58 80027B58 2A42013E */ slti $v0, $s2, 0x13e
/* 002F5C 80027B5C 1440FFAB */ bnez $v0, .L80027A0C
/* 002F60 80027B60 00000000 */ nop
/* 002F64 80027B64 26730001 */ addiu $s3, $s3, 1
/* 002F68 80027B68 8FA8003C */ lw $t0, 0x3c($sp)
/* 002F6C 80027B6C 2A6200EF */ slti $v0, $s3, 0xef
/* 002F70 80027B70 25080140 */ addiu $t0, $t0, 0x140
/* 002F74 80027B74 1440FFA2 */ bnez $v0, .L80027A00
/* 002F78 80027B78 AFA8003C */ sw $t0, 0x3c($sp)
/* 002F7C 80027B7C 8FBF0064 */ lw $ra, 0x64($sp)
/* 002F80 80027B80 8FBE0060 */ lw $fp, 0x60($sp)
/* 002F84 80027B84 8FB7005C */ lw $s7, 0x5c($sp)
/* 002F88 80027B88 8FB60058 */ lw $s6, 0x58($sp)
/* 002F8C 80027B8C 8FB50054 */ lw $s5, 0x54($sp)
/* 002F90 80027B90 8FB40050 */ lw $s4, 0x50($sp)
/* 002F94 80027B94 8FB3004C */ lw $s3, 0x4c($sp)
/* 002F98 80027B98 8FB20048 */ lw $s2, 0x48($sp)
/* 002F9C 80027B9C 8FB10044 */ lw $s1, 0x44($sp)
/* 002FA0 80027BA0 8FB00040 */ lw $s0, 0x40($sp)
/* 002FA4 80027BA4 03E00008 */ jr $ra
/* 002FA8 80027BA8 27BD0068 */ addiu $sp, $sp, 0x68
.set reorder

View File

@ -0,0 +1,162 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_80027BAC:
/* 002FAC 80027BAC 27BDFFD0 */ addiu $sp, $sp, -0x30
/* 002FB0 80027BB0 3C06D700 */ lui $a2, 0xd700
/* 002FB4 80027BB4 34C60002 */ ori $a2, $a2, 2
/* 002FB8 80027BB8 3C07FF10 */ lui $a3, 0xff10
/* 002FBC 80027BBC 34E7013F */ ori $a3, $a3, 0x13f
/* 002FC0 80027BC0 3C08E300 */ lui $t0, 0xe300
/* 002FC4 80027BC4 35080A01 */ ori $t0, $t0, 0xa01
/* 002FC8 80027BC8 3C09E300 */ lui $t1, 0xe300
/* 002FCC 80027BCC 35290C00 */ ori $t1, $t1, 0xc00
/* 002FD0 80027BD0 3C0AE300 */ lui $t2, 0xe300
/* 002FD4 80027BD4 354A1001 */ ori $t2, $t2, 0x1001
/* 002FD8 80027BD8 3C0BE200 */ lui $t3, 0xe200
/* 002FDC 80027BDC 356B001C */ ori $t3, $t3, 0x1c
/* 002FE0 80027BE0 3C0CE300 */ lui $t4, 0xe300
/* 002FE4 80027BE4 358C1201 */ ori $t4, $t4, 0x1201
/* 002FE8 80027BE8 0000C82D */ daddu $t9, $zero, $zero
/* 002FEC 80027BEC 3C02800A */ lui $v0, 0x800a
/* 002FF0 80027BF0 2442A66C */ addiu $v0, $v0, -0x5994
/* 002FF4 80027BF4 0040682D */ daddu $t5, $v0, $zero
/* 002FF8 80027BF8 AFB5001C */ sw $s5, 0x1c($sp)
/* 002FFC 80027BFC 3C15FD10 */ lui $s5, 0xfd10
/* 003000 80027C00 36B5013F */ ori $s5, $s5, 0x13f
/* 003004 80027C04 AFB00008 */ sw $s0, 8($sp)
/* 003008 80027C08 3C10F510 */ lui $s0, 0xf510
/* 00300C 80027C0C 3610A000 */ ori $s0, $s0, 0xa000
/* 003010 80027C10 AFB40018 */ sw $s4, 0x18($sp)
/* 003014 80027C14 3C14074F */ lui $s4, 0x74f
/* 003018 80027C18 3694C014 */ ori $s4, $s4, 0xc014
/* 00301C 80027C1C AFB1000C */ sw $s1, 0xc($sp)
/* 003020 80027C20 3C11E700 */ lui $s1, 0xe700
/* 003024 80027C24 AFBE0028 */ sw $fp, 0x28($sp)
/* 003028 80027C28 3C1EF200 */ lui $fp, 0xf200
/* 00302C 80027C2C AFB30014 */ sw $s3, 0x14($sp)
/* 003030 80027C30 3C13004F */ lui $s3, 0x4f
/* 003034 80027C34 3673C014 */ ori $s3, $s3, 0xc014
/* 003038 80027C38 AFB20010 */ sw $s2, 0x10($sp)
/* 00303C 80027C3C 3C12E44F */ lui $s2, 0xe44f
/* 003040 80027C40 3652C000 */ ori $s2, $s2, 0xc000
/* 003044 80027C44 AFB70024 */ sw $s7, 0x24($sp)
/* 003048 80027C48 3C17E100 */ lui $s7, 0xe100
/* 00304C 80027C4C AFB60020 */ sw $s6, 0x20($sp)
/* 003050 80027C50 3C16F100 */ lui $s6, 0xf100
/* 003054 80027C54 0320C02D */ daddu $t8, $t9, $zero
/* 003058 80027C58 240F0014 */ addiu $t7, $zero, 0x14
/* 00305C 80027C5C 0080702D */ daddu $t6, $a0, $zero
/* 003060 80027C60 8DA20000 */ lw $v0, ($t5)
/* 003064 80027C64 0220182D */ daddu $v1, $s1, $zero
/* 003068 80027C68 0040202D */ daddu $a0, $v0, $zero
/* 00306C 80027C6C 24420008 */ addiu $v0, $v0, 8
/* 003070 80027C70 ADA20000 */ sw $v0, ($t5)
/* 003074 80027C74 AC830000 */ sw $v1, ($a0)
/* 003078 80027C78 24430008 */ addiu $v1, $v0, 8
/* 00307C 80027C7C AC800004 */ sw $zero, 4($a0)
/* 003080 80027C80 ADA30000 */ sw $v1, ($t5)
/* 003084 80027C84 2403FFFF */ addiu $v1, $zero, -1
/* 003088 80027C88 AC430004 */ sw $v1, 4($v0)
/* 00308C 80027C8C 24430010 */ addiu $v1, $v0, 0x10
/* 003090 80027C90 AC460000 */ sw $a2, ($v0)
/* 003094 80027C94 ADA30000 */ sw $v1, ($t5)
/* 003098 80027C98 24430018 */ addiu $v1, $v0, 0x18
/* 00309C 80027C9C AC470008 */ sw $a3, 8($v0)
/* 0030A0 80027CA0 AC45000C */ sw $a1, 0xc($v0)
/* 0030A4 80027CA4 ADA30000 */ sw $v1, ($t5)
/* 0030A8 80027CA8 3C030020 */ lui $v1, 0x20
/* 0030AC 80027CAC AC430014 */ sw $v1, 0x14($v0)
/* 0030B0 80027CB0 24430020 */ addiu $v1, $v0, 0x20
/* 0030B4 80027CB4 AC480010 */ sw $t0, 0x10($v0)
/* 0030B8 80027CB8 ADA30000 */ sw $v1, ($t5)
/* 0030BC 80027CBC 24430028 */ addiu $v1, $v0, 0x28
/* 0030C0 80027CC0 AC490018 */ sw $t1, 0x18($v0)
/* 0030C4 80027CC4 AC40001C */ sw $zero, 0x1c($v0)
/* 0030C8 80027CC8 ADA30000 */ sw $v1, ($t5)
/* 0030CC 80027CCC 24430030 */ addiu $v1, $v0, 0x30
/* 0030D0 80027CD0 AC4A0020 */ sw $t2, 0x20($v0)
/* 0030D4 80027CD4 AC400024 */ sw $zero, 0x24($v0)
/* 0030D8 80027CD8 ADA30000 */ sw $v1, ($t5)
/* 0030DC 80027CDC 24430038 */ addiu $v1, $v0, 0x38
/* 0030E0 80027CE0 AC4B0028 */ sw $t3, 0x28($v0)
/* 0030E4 80027CE4 AC40002C */ sw $zero, 0x2c($v0)
/* 0030E8 80027CE8 ADA30000 */ sw $v1, ($t5)
/* 0030EC 80027CEC AC4C0030 */ sw $t4, 0x30($v0)
/* 0030F0 80027CF0 AC400034 */ sw $zero, 0x34($v0)
.L80027CF4:
/* 0030F4 80027CF4 3C061000 */ lui $a2, 0x1000
/* 0030F8 80027CF8 34C60400 */ ori $a2, $a2, 0x400
/* 0030FC 80027CFC 33050FFF */ andi $a1, $t8, 0xfff
/* 003100 80027D00 27180018 */ addiu $t8, $t8, 0x18
/* 003104 80027D04 31E40FFF */ andi $a0, $t7, 0xfff
/* 003108 80027D08 25EF0018 */ addiu $t7, $t7, 0x18
/* 00310C 80027D0C 27390001 */ addiu $t9, $t9, 1
/* 003110 80027D10 8DA20000 */ lw $v0, ($t5)
/* 003114 80027D14 00922025 */ or $a0, $a0, $s2
/* 003118 80027D18 0040182D */ daddu $v1, $v0, $zero
/* 00311C 80027D1C 24420008 */ addiu $v0, $v0, 8
/* 003120 80027D20 AC6E0004 */ sw $t6, 4($v1)
/* 003124 80027D24 ADA20000 */ sw $v0, ($t5)
/* 003128 80027D28 AC750000 */ sw $s5, ($v1)
/* 00312C 80027D2C 24430008 */ addiu $v1, $v0, 8
/* 003130 80027D30 3C070700 */ lui $a3, 0x700
/* 003134 80027D34 ADA30000 */ sw $v1, ($t5)
/* 003138 80027D38 24430010 */ addiu $v1, $v0, 0x10
/* 00313C 80027D3C AC470004 */ sw $a3, 4($v0)
/* 003140 80027D40 3C07E600 */ lui $a3, 0xe600
/* 003144 80027D44 AC500000 */ sw $s0, ($v0)
/* 003148 80027D48 ADA30000 */ sw $v1, ($t5)
/* 00314C 80027D4C 24430018 */ addiu $v1, $v0, 0x18
/* 003150 80027D50 AC470008 */ sw $a3, 8($v0)
/* 003154 80027D54 3C07F400 */ lui $a3, 0xf400
/* 003158 80027D58 AC40000C */ sw $zero, 0xc($v0)
/* 00315C 80027D5C ADA30000 */ sw $v1, ($t5)
/* 003160 80027D60 24430020 */ addiu $v1, $v0, 0x20
/* 003164 80027D64 AC470010 */ sw $a3, 0x10($v0)
/* 003168 80027D68 AC540014 */ sw $s4, 0x14($v0)
/* 00316C 80027D6C ADA30000 */ sw $v1, ($t5)
/* 003170 80027D70 24430028 */ addiu $v1, $v0, 0x28
/* 003174 80027D74 AC510018 */ sw $s1, 0x18($v0)
/* 003178 80027D78 AC40001C */ sw $zero, 0x1c($v0)
/* 00317C 80027D7C ADA30000 */ sw $v1, ($t5)
/* 003180 80027D80 24430030 */ addiu $v1, $v0, 0x30
/* 003184 80027D84 AC500020 */ sw $s0, 0x20($v0)
/* 003188 80027D88 AC400024 */ sw $zero, 0x24($v0)
/* 00318C 80027D8C ADA30000 */ sw $v1, ($t5)
/* 003190 80027D90 24430038 */ addiu $v1, $v0, 0x38
/* 003194 80027D94 AC5E0028 */ sw $fp, 0x28($v0)
/* 003198 80027D98 AC53002C */ sw $s3, 0x2c($v0)
/* 00319C 80027D9C ADA30000 */ sw $v1, ($t5)
/* 0031A0 80027DA0 24430040 */ addiu $v1, $v0, 0x40
/* 0031A4 80027DA4 AC440030 */ sw $a0, 0x30($v0)
/* 0031A8 80027DA8 AC450034 */ sw $a1, 0x34($v0)
/* 0031AC 80027DAC ADA30000 */ sw $v1, ($t5)
/* 0031B0 80027DB0 24430048 */ addiu $v1, $v0, 0x48
/* 0031B4 80027DB4 AC570038 */ sw $s7, 0x38($v0)
/* 0031B8 80027DB8 AC40003C */ sw $zero, 0x3c($v0)
/* 0031BC 80027DBC ADA30000 */ sw $v1, ($t5)
/* 0031C0 80027DC0 24430050 */ addiu $v1, $v0, 0x50
/* 0031C4 80027DC4 AC560040 */ sw $s6, 0x40($v0)
/* 0031C8 80027DC8 AC460044 */ sw $a2, 0x44($v0)
/* 0031CC 80027DCC ADA30000 */ sw $v1, ($t5)
/* 0031D0 80027DD0 AC510048 */ sw $s1, 0x48($v0)
/* 0031D4 80027DD4 AC40004C */ sw $zero, 0x4c($v0)
/* 0031D8 80027DD8 2B220028 */ slti $v0, $t9, 0x28
/* 0031DC 80027DDC 1440FFC5 */ bnez $v0, .L80027CF4
/* 0031E0 80027DE0 25CE0F00 */ addiu $t6, $t6, 0xf00
/* 0031E4 80027DE4 8FBE0028 */ lw $fp, 0x28($sp)
/* 0031E8 80027DE8 8FB70024 */ lw $s7, 0x24($sp)
/* 0031EC 80027DEC 8FB60020 */ lw $s6, 0x20($sp)
/* 0031F0 80027DF0 8FB5001C */ lw $s5, 0x1c($sp)
/* 0031F4 80027DF4 8FB40018 */ lw $s4, 0x18($sp)
/* 0031F8 80027DF8 8FB30014 */ lw $s3, 0x14($sp)
/* 0031FC 80027DFC 8FB20010 */ lw $s2, 0x10($sp)
/* 003200 80027E00 8FB1000C */ lw $s1, 0xc($sp)
/* 003204 80027E04 8FB00008 */ lw $s0, 8($sp)
/* 003208 80027E08 03E00008 */ jr $ra
/* 00320C 80027E0C 27BD0030 */ addiu $sp, $sp, 0x30
.set reorder

View File

@ -0,0 +1,674 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
func_80027E10:
/* 003210 80027E10 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 003214 80027E14 3C040050 */ lui $a0, 0x50
/* 003218 80027E18 3C0C800A */ lui $t4, 0x800a
/* 00321C 80027E1C 258CA66C */ addiu $t4, $t4, -0x5994
/* 003220 80027E20 348403C0 */ ori $a0, $a0, 0x3c0
/* 003224 80027E24 3C02ED00 */ lui $v0, 0xed00
/* 003228 80027E28 AFBF0044 */ sw $ra, 0x44($sp)
/* 00322C 80027E2C AFBE0040 */ sw $fp, 0x40($sp)
/* 003230 80027E30 AFB7003C */ sw $s7, 0x3c($sp)
/* 003234 80027E34 AFB60038 */ sw $s6, 0x38($sp)
/* 003238 80027E38 AFB50034 */ sw $s5, 0x34($sp)
/* 00323C 80027E3C AFB40030 */ sw $s4, 0x30($sp)
/* 003240 80027E40 AFB3002C */ sw $s3, 0x2c($sp)
/* 003244 80027E44 AFB20028 */ sw $s2, 0x28($sp)
/* 003248 80027E48 AFB10024 */ sw $s1, 0x24($sp)
/* 00324C 80027E4C AFB00020 */ sw $s0, 0x20($sp)
/* 003250 80027E50 8D8B0000 */ lw $t3, ($t4)
/* 003254 80027E54 3C108007 */ lui $s0, 0x8007
/* 003258 80027E58 2610419C */ addiu $s0, $s0, 0x419c
/* 00325C 80027E5C 0160182D */ daddu $v1, $t3, $zero
/* 003260 80027E60 256B0008 */ addiu $t3, $t3, 8
/* 003264 80027E64 AD8B0000 */ sw $t3, ($t4)
/* 003268 80027E68 AC640004 */ sw $a0, 4($v1)
/* 00326C 80027E6C 3C04800B */ lui $a0, 0x800b
/* 003270 80027E70 24841D80 */ addiu $a0, $a0, 0x1d80
/* 003274 80027E74 AC620000 */ sw $v0, ($v1)
/* 003278 80027E78 3C038007 */ lui $v1, 0x8007
/* 00327C 80027E7C 8C637410 */ lw $v1, 0x7410($v1)
/* 003280 80027E80 8E0D0000 */ lw $t5, ($s0)
/* 003284 80027E84 00031080 */ sll $v0, $v1, 2
/* 003288 80027E88 00431021 */ addu $v0, $v0, $v1
/* 00328C 80027E8C 00021080 */ sll $v0, $v0, 2
/* 003290 80027E90 00431023 */ subu $v0, $v0, $v1
/* 003294 80027E94 000218C0 */ sll $v1, $v0, 3
/* 003298 80027E98 00431021 */ addu $v0, $v0, $v1
/* 00329C 80027E9C 000210C0 */ sll $v0, $v0, 3
/* 0032A0 80027EA0 00449821 */ addu $s3, $v0, $a0
/* 0032A4 80027EA4 95A30148 */ lhu $v1, 0x148($t5)
/* 0032A8 80027EA8 24020020 */ addiu $v0, $zero, 0x20
/* 0032AC 80027EAC 306300F0 */ andi $v1, $v1, 0xf0
/* 0032B0 80027EB0 1062004E */ beq $v1, $v0, .L80027FEC
/* 0032B4 80027EB4 28620021 */ slti $v0, $v1, 0x21
/* 0032B8 80027EB8 10400005 */ beqz $v0, .L80027ED0
/* 0032BC 80027EBC 24020010 */ addiu $v0, $zero, 0x10
/* 0032C0 80027EC0 10620008 */ beq $v1, $v0, .L80027EE4
/* 0032C4 80027EC4 3C03FF10 */ lui $v1, 0xff10
/* 0032C8 80027EC8 0800A0CB */ j .L8002832C
/* 0032CC 80027ECC 00000000 */ nop
.L80027ED0:
/* 0032D0 80027ED0 24020030 */ addiu $v0, $zero, 0x30
/* 0032D4 80027ED4 10620053 */ beq $v1, $v0, .L80028024
/* 0032D8 80027ED8 00000000 */ nop
/* 0032DC 80027EDC 0800A0CB */ j .L8002832C
/* 0032E0 80027EE0 00000000 */ nop
.L80027EE4:
/* 0032E4 80027EE4 3463013F */ ori $v1, $v1, 0x13f
/* 0032E8 80027EE8 3C06E300 */ lui $a2, 0xe300
/* 0032EC 80027EEC 34C60A01 */ ori $a2, $a2, 0xa01
/* 0032F0 80027EF0 3C078080 */ lui $a3, 0x8080
/* 0032F4 80027EF4 34E780FF */ ori $a3, $a3, 0x80ff
/* 0032F8 80027EF8 3C05E200 */ lui $a1, 0xe200
/* 0032FC 80027EFC 34A51D00 */ ori $a1, $a1, 0x1d00
/* 003300 80027F00 3C0AE200 */ lui $t2, 0xe200
/* 003304 80027F04 354A001C */ ori $t2, $t2, 0x1c
/* 003308 80027F08 3C090FA5 */ lui $t1, 0xfa5
/* 00330C 80027F0C 35294040 */ ori $t1, $t1, 0x4040
/* 003310 80027F10 3C08F650 */ lui $t0, 0xf650
/* 003314 80027F14 350803C0 */ ori $t0, $t0, 0x3c0
/* 003318 80027F18 25620008 */ addiu $v0, $t3, 8
/* 00331C 80027F1C 3C04E700 */ lui $a0, 0xe700
/* 003320 80027F20 AD820000 */ sw $v0, ($t4)
/* 003324 80027F24 25620010 */ addiu $v0, $t3, 0x10
/* 003328 80027F28 AD640000 */ sw $a0, ($t3)
/* 00332C 80027F2C AD600004 */ sw $zero, 4($t3)
/* 003330 80027F30 AD820000 */ sw $v0, ($t4)
/* 003334 80027F34 25620018 */ addiu $v0, $t3, 0x18
/* 003338 80027F38 AD630008 */ sw $v1, 8($t3)
/* 00333C 80027F3C AD820000 */ sw $v0, ($t4)
/* 003340 80027F40 25620020 */ addiu $v0, $t3, 0x20
/* 003344 80027F44 AD820000 */ sw $v0, ($t4)
/* 003348 80027F48 25620028 */ addiu $v0, $t3, 0x28
/* 00334C 80027F4C AD820000 */ sw $v0, ($t4)
/* 003350 80027F50 25620030 */ addiu $v0, $t3, 0x30
/* 003354 80027F54 AD820000 */ sw $v0, ($t4)
/* 003358 80027F58 25620038 */ addiu $v0, $t3, 0x38
/* 00335C 80027F5C AD820000 */ sw $v0, ($t4)
/* 003360 80027F60 3C03800A */ lui $v1, 0x800a
/* 003364 80027F64 8C63A658 */ lw $v1, -0x59a8($v1)
/* 003368 80027F68 25620040 */ addiu $v0, $t3, 0x40
/* 00336C 80027F6C AD820000 */ sw $v0, ($t4)
/* 003370 80027F70 8C630004 */ lw $v1, 4($v1)
/* 003374 80027F74 25620048 */ addiu $v0, $t3, 0x48
/* 003378 80027F78 AD820000 */ sw $v0, ($t4)
/* 00337C 80027F7C 3C02F900 */ lui $v0, 0xf900
/* 003380 80027F80 AD620018 */ sw $v0, 0x18($t3)
/* 003384 80027F84 3C02EE00 */ lui $v0, 0xee00
/* 003388 80027F88 AD620020 */ sw $v0, 0x20($t3)
/* 00338C 80027F8C 2402FFFF */ addiu $v0, $zero, -1
/* 003390 80027F90 AD620024 */ sw $v0, 0x24($t3)
/* 003394 80027F94 24020004 */ addiu $v0, $zero, 4
/* 003398 80027F98 AD660010 */ sw $a2, 0x10($t3)
/* 00339C 80027F9C AD600014 */ sw $zero, 0x14($t3)
/* 0033A0 80027FA0 AD67001C */ sw $a3, 0x1c($t3)
/* 0033A4 80027FA4 AD650028 */ sw $a1, 0x28($t3)
/* 0033A8 80027FA8 AD62002C */ sw $v0, 0x2c($t3)
/* 0033AC 80027FAC AD6A0030 */ sw $t2, 0x30($t3)
/* 0033B0 80027FB0 AD690034 */ sw $t1, 0x34($t3)
/* 0033B4 80027FB4 AD680038 */ sw $t0, 0x38($t3)
/* 0033B8 80027FB8 AD60003C */ sw $zero, 0x3c($t3)
/* 0033BC 80027FBC AD640040 */ sw $a0, 0x40($t3)
/* 0033C0 80027FC0 AD600044 */ sw $zero, 0x44($t3)
/* 0033C4 80027FC4 AD650048 */ sw $a1, 0x48($t3)
/* 0033C8 80027FC8 AD60004C */ sw $zero, 0x4c($t3)
/* 0033CC 80027FCC AD63000C */ sw $v1, 0xc($t3)
/* 0033D0 80027FD0 95A20148 */ lhu $v0, 0x148($t5)
/* 0033D4 80027FD4 25630050 */ addiu $v1, $t3, 0x50
/* 0033D8 80027FD8 AD830000 */ sw $v1, ($t4)
/* 0033DC 80027FDC 3042FF0F */ andi $v0, $v0, 0xff0f
/* 0033E0 80027FE0 34420020 */ ori $v0, $v0, 0x20
/* 0033E4 80027FE4 0800A1E4 */ j .L80028790
/* 0033E8 80027FE8 A5A20148 */ sh $v0, 0x148($t5)
.L80027FEC:
/* 0033EC 80027FEC 3C02800A */ lui $v0, 0x800a
/* 0033F0 80027FF0 8C42A658 */ lw $v0, -0x59a8($v0)
/* 0033F4 80027FF4 3C06800A */ lui $a2, 0x800a
/* 0033F8 80027FF8 8CC6A5DC */ lw $a2, -0x5a24($a2)
/* 0033FC 80027FFC 8C440000 */ lw $a0, ($v0)
/* 003400 80028000 0C009E6D */ jal func_800279B4
/* 003404 80028004 8C450004 */ lw $a1, 4($v0)
/* 003408 80028008 8E030000 */ lw $v1, ($s0)
/* 00340C 8002800C 94620148 */ lhu $v0, 0x148($v1)
/* 003410 80028010 3C018007 */ lui $at, 0x8007
/* 003414 80028014 AC2041F8 */ sw $zero, 0x41f8($at)
/* 003418 80028018 3042FF0F */ andi $v0, $v0, 0xff0f
/* 00341C 8002801C 34420030 */ ori $v0, $v0, 0x30
/* 003420 80028020 A4620148 */ sh $v0, 0x148($v1)
.L80028024:
/* 003424 80028024 3C168007 */ lui $s6, 0x8007
/* 003428 80028028 26D641F8 */ addiu $s6, $s6, 0x41f8
/* 00342C 8002802C 8EC20000 */ lw $v0, ($s6)
/* 003430 80028030 24420010 */ addiu $v0, $v0, 0x10
/* 003434 80028034 AEC20000 */ sw $v0, ($s6)
/* 003438 80028038 28420081 */ slti $v0, $v0, 0x81
/* 00343C 8002803C 14400003 */ bnez $v0, .L8002804C
/* 003440 80028040 3C060050 */ lui $a2, 0x50
/* 003444 80028044 24020080 */ addiu $v0, $zero, 0x80
/* 003448 80028048 AEC20000 */ sw $v0, ($s6)
.L8002804C:
/* 00344C 8002804C 34C603C0 */ ori $a2, $a2, 0x3c0
/* 003450 80028050 3C05E300 */ lui $a1, 0xe300
/* 003454 80028054 34A50A01 */ ori $a1, $a1, 0xa01
/* 003458 80028058 3C07E200 */ lui $a3, 0xe200
/* 00345C 8002805C 34E7001C */ ori $a3, $a3, 0x1c
/* 003460 80028060 3C08FF10 */ lui $t0, 0xff10
/* 003464 80028064 3508013F */ ori $t0, $t0, 0x13f
/* 003468 80028068 3C090001 */ lui $t1, 1
/* 00346C 8002806C 35290001 */ ori $t1, $t1, 1
/* 003470 80028070 3C0AF64F */ lui $t2, 0xf64f
/* 003474 80028074 354AC3BC */ ori $t2, $t2, 0xc3bc
/* 003478 80028078 3C0BE300 */ lui $t3, 0xe300
/* 00347C 8002807C 356B0C00 */ ori $t3, $t3, 0xc00
/* 003480 80028080 3C0CE300 */ lui $t4, 0xe300
/* 003484 80028084 358C1001 */ ori $t4, $t4, 0x1001
/* 003488 80028088 3C0D0F0A */ lui $t5, 0xf0a
/* 00348C 8002808C 35AD4000 */ ori $t5, $t5, 0x4000
/* 003490 80028090 3C0FFC35 */ lui $t7, 0xfc35
/* 003494 80028094 35EF7E6A */ ori $t7, $t7, 0x7e6a
/* 003498 80028098 3C0E12FC */ lui $t6, 0x12fc
/* 00349C 8002809C 35CEFCBE */ ori $t6, $t6, 0xfcbe
/* 0034A0 800280A0 3C112828 */ lui $s1, 0x2828
/* 0034A4 800280A4 36312800 */ ori $s1, $s1, 0x2800
/* 0034A8 800280A8 3C10E300 */ lui $s0, 0xe300
/* 0034AC 800280AC 36101201 */ ori $s0, $s0, 0x1201
/* 0034B0 800280B0 0000C82D */ daddu $t9, $zero, $zero
/* 0034B4 800280B4 3C02800A */ lui $v0, 0x800a
/* 0034B8 800280B8 2442A66C */ addiu $v0, $v0, -0x5994
/* 0034BC 800280BC 0040902D */ daddu $s2, $v0, $zero
/* 0034C0 800280C0 AFAE0018 */ sw $t6, 0x18($sp)
/* 0034C4 800280C4 3C0EFD10 */ lui $t6, 0xfd10
/* 0034C8 800280C8 35CE013F */ ori $t6, $t6, 0x13f
/* 0034CC 800280CC 3C15F510 */ lui $s5, 0xf510
/* 0034D0 800280D0 36B5A000 */ ori $s5, $s5, 0xa000
/* 0034D4 800280D4 AFAE0010 */ sw $t6, 0x10($sp)
/* 0034D8 800280D8 3C0E074F */ lui $t6, 0x74f
/* 0034DC 800280DC 35CEC014 */ ori $t6, $t6, 0xc014
/* 0034E0 800280E0 3C17E700 */ lui $s7, 0xe700
/* 0034E4 800280E4 3C1E004F */ lui $fp, 0x4f
/* 0034E8 800280E8 37DEC014 */ ori $fp, $fp, 0xc014
/* 0034EC 800280EC 0320C02D */ daddu $t8, $t9, $zero
/* 0034F0 800280F0 24140018 */ addiu $s4, $zero, 0x18
/* 0034F4 800280F4 0320982D */ daddu $s3, $t9, $zero
/* 0034F8 800280F8 AFAE0014 */ sw $t6, 0x14($sp)
/* 0034FC 800280FC 8E420000 */ lw $v0, ($s2)
/* 003500 80028100 02E0182D */ daddu $v1, $s7, $zero
/* 003504 80028104 0040202D */ daddu $a0, $v0, $zero
/* 003508 80028108 24420008 */ addiu $v0, $v0, 8
/* 00350C 8002810C AE420000 */ sw $v0, ($s2)
/* 003510 80028110 AC830000 */ sw $v1, ($a0)
/* 003514 80028114 24430008 */ addiu $v1, $v0, 8
/* 003518 80028118 AC800004 */ sw $zero, 4($a0)
/* 00351C 8002811C AE430000 */ sw $v1, ($s2)
/* 003520 80028120 3C03ED00 */ lui $v1, 0xed00
/* 003524 80028124 AC430000 */ sw $v1, ($v0)
/* 003528 80028128 24430010 */ addiu $v1, $v0, 0x10
/* 00352C 8002812C AC460004 */ sw $a2, 4($v0)
/* 003530 80028130 AE430000 */ sw $v1, ($s2)
/* 003534 80028134 3C030030 */ lui $v1, 0x30
/* 003538 80028138 AC43000C */ sw $v1, 0xc($v0)
/* 00353C 8002813C 00541821 */ addu $v1, $v0, $s4
/* 003540 80028140 AC450008 */ sw $a1, 8($v0)
/* 003544 80028144 AE430000 */ sw $v1, ($s2)
/* 003548 80028148 3C04800A */ lui $a0, 0x800a
/* 00354C 8002814C 8C84A64C */ lw $a0, -0x59b4($a0)
/* 003550 80028150 24430020 */ addiu $v1, $v0, 0x20
/* 003554 80028154 AC470010 */ sw $a3, 0x10($v0)
/* 003558 80028158 AC400014 */ sw $zero, 0x14($v0)
/* 00355C 8002815C AE430000 */ sw $v1, ($s2)
/* 003560 80028160 24430028 */ addiu $v1, $v0, 0x28
/* 003564 80028164 AC480018 */ sw $t0, 0x18($v0)
/* 003568 80028168 AC44001C */ sw $a0, 0x1c($v0)
/* 00356C 8002816C AE430000 */ sw $v1, ($s2)
/* 003570 80028170 3C03F700 */ lui $v1, 0xf700
/* 003574 80028174 AC430020 */ sw $v1, 0x20($v0)
/* 003578 80028178 24430030 */ addiu $v1, $v0, 0x30
/* 00357C 8002817C AC490024 */ sw $t1, 0x24($v0)
/* 003580 80028180 AE430000 */ sw $v1, ($s2)
/* 003584 80028184 24430038 */ addiu $v1, $v0, 0x38
/* 003588 80028188 AC4A0028 */ sw $t2, 0x28($v0)
/* 00358C 8002818C AC40002C */ sw $zero, 0x2c($v0)
/* 003590 80028190 AE430000 */ sw $v1, ($s2)
/* 003594 80028194 24430040 */ addiu $v1, $v0, 0x40
/* 003598 80028198 AC450030 */ sw $a1, 0x30($v0)
/* 00359C 8002819C AC400034 */ sw $zero, 0x34($v0)
/* 0035A0 800281A0 AE430000 */ sw $v1, ($s2)
/* 0035A4 800281A4 24430048 */ addiu $v1, $v0, 0x48
/* 0035A8 800281A8 AC4B0038 */ sw $t3, 0x38($v0)
/* 0035AC 800281AC AC40003C */ sw $zero, 0x3c($v0)
/* 0035B0 800281B0 AE430000 */ sw $v1, ($s2)
/* 0035B4 800281B4 24430050 */ addiu $v1, $v0, 0x50
/* 0035B8 800281B8 AC4C0040 */ sw $t4, 0x40($v0)
/* 0035BC 800281BC AC400044 */ sw $zero, 0x44($v0)
/* 0035C0 800281C0 AE430000 */ sw $v1, ($s2)
/* 0035C4 800281C4 24430058 */ addiu $v1, $v0, 0x58
/* 0035C8 800281C8 AC470048 */ sw $a3, 0x48($v0)
/* 0035CC 800281CC AC4D004C */ sw $t5, 0x4c($v0)
/* 0035D0 800281D0 AE430000 */ sw $v1, ($s2)
/* 0035D4 800281D4 AC4F0050 */ sw $t7, 0x50($v0)
/* 0035D8 800281D8 8FAE0018 */ lw $t6, 0x18($sp)
/* 0035DC 800281DC 24430060 */ addiu $v1, $v0, 0x60
/* 0035E0 800281E0 AC4E0054 */ sw $t6, 0x54($v0)
/* 0035E4 800281E4 AE430000 */ sw $v1, ($s2)
/* 0035E8 800281E8 3C03FA00 */ lui $v1, 0xfa00
/* 0035EC 800281EC AC430058 */ sw $v1, 0x58($v0)
/* 0035F0 800281F0 92C40003 */ lbu $a0, 3($s6)
/* 0035F4 800281F4 24430068 */ addiu $v1, $v0, 0x68
/* 0035F8 800281F8 AE430000 */ sw $v1, ($s2)
/* 0035FC 800281FC AC500060 */ sw $s0, 0x60($v0)
/* 003600 80028200 AC400064 */ sw $zero, 0x64($v0)
/* 003604 80028204 00912025 */ or $a0, $a0, $s1
/* 003608 80028208 AC44005C */ sw $a0, 0x5c($v0)
.L8002820C:
/* 00360C 8002820C 3C070400 */ lui $a3, 0x400
/* 003610 80028210 34E70400 */ ori $a3, $a3, 0x400
/* 003614 80028214 33060FFF */ andi $a2, $t8, 0xfff
/* 003618 80028218 27180018 */ addiu $t8, $t8, 0x18
/* 00361C 8002821C 32850FFF */ andi $a1, $s4, 0xfff
/* 003620 80028220 26940018 */ addiu $s4, $s4, 0x18
/* 003624 80028224 27390001 */ addiu $t9, $t9, 1
/* 003628 80028228 8E430000 */ lw $v1, ($s2)
/* 00362C 8002822C 3C02800A */ lui $v0, 0x800a
/* 003630 80028230 8C42A5DC */ lw $v0, -0x5a24($v0)
/* 003634 80028234 0060202D */ daddu $a0, $v1, $zero
/* 003638 80028238 24630008 */ addiu $v1, $v1, 8
/* 00363C 8002823C 00531021 */ addu $v0, $v0, $s3
/* 003640 80028240 AE430000 */ sw $v1, ($s2)
/* 003644 80028244 8FAE0010 */ lw $t6, 0x10($sp)
/* 003648 80028248 26730F00 */ addiu $s3, $s3, 0xf00
/* 00364C 8002824C AC820004 */ sw $v0, 4($a0)
/* 003650 80028250 24620008 */ addiu $v0, $v1, 8
/* 003654 80028254 AC8E0000 */ sw $t6, ($a0)
/* 003658 80028258 3C0E0700 */ lui $t6, 0x700
/* 00365C 8002825C AE420000 */ sw $v0, ($s2)
/* 003660 80028260 24620010 */ addiu $v0, $v1, 0x10
/* 003664 80028264 AC6E0004 */ sw $t6, 4($v1)
/* 003668 80028268 3C0EE600 */ lui $t6, 0xe600
/* 00366C 8002826C AC750000 */ sw $s5, ($v1)
/* 003670 80028270 AE420000 */ sw $v0, ($s2)
/* 003674 80028274 24620018 */ addiu $v0, $v1, 0x18
/* 003678 80028278 AC6E0008 */ sw $t6, 8($v1)
/* 00367C 8002827C 3C0EF400 */ lui $t6, 0xf400
/* 003680 80028280 AC60000C */ sw $zero, 0xc($v1)
/* 003684 80028284 AE420000 */ sw $v0, ($s2)
/* 003688 80028288 AC6E0010 */ sw $t6, 0x10($v1)
/* 00368C 8002828C 8FAE0014 */ lw $t6, 0x14($sp)
/* 003690 80028290 24620020 */ addiu $v0, $v1, 0x20
/* 003694 80028294 AC6E0014 */ sw $t6, 0x14($v1)
/* 003698 80028298 AE420000 */ sw $v0, ($s2)
/* 00369C 8002829C 24620028 */ addiu $v0, $v1, 0x28
/* 0036A0 800282A0 AC770018 */ sw $s7, 0x18($v1)
/* 0036A4 800282A4 AC60001C */ sw $zero, 0x1c($v1)
/* 0036A8 800282A8 AE420000 */ sw $v0, ($s2)
/* 0036AC 800282AC 24620030 */ addiu $v0, $v1, 0x30
/* 0036B0 800282B0 3C0EF200 */ lui $t6, 0xf200
/* 0036B4 800282B4 AC750020 */ sw $s5, 0x20($v1)
/* 0036B8 800282B8 AC600024 */ sw $zero, 0x24($v1)
/* 0036BC 800282BC AE420000 */ sw $v0, ($s2)
/* 0036C0 800282C0 24620038 */ addiu $v0, $v1, 0x38
/* 0036C4 800282C4 AC6E0028 */ sw $t6, 0x28($v1)
/* 0036C8 800282C8 3C0EE450 */ lui $t6, 0xe450
/* 0036CC 800282CC 00AE2825 */ or $a1, $a1, $t6
/* 0036D0 800282D0 AC7E002C */ sw $fp, 0x2c($v1)
/* 0036D4 800282D4 AE420000 */ sw $v0, ($s2)
/* 0036D8 800282D8 24620040 */ addiu $v0, $v1, 0x40
/* 0036DC 800282DC AC650030 */ sw $a1, 0x30($v1)
/* 0036E0 800282E0 AC660034 */ sw $a2, 0x34($v1)
/* 0036E4 800282E4 AE420000 */ sw $v0, ($s2)
/* 0036E8 800282E8 3C02E100 */ lui $v0, 0xe100
/* 0036EC 800282EC AC620038 */ sw $v0, 0x38($v1)
/* 0036F0 800282F0 3C02FFE0 */ lui $v0, 0xffe0
/* 0036F4 800282F4 AC62003C */ sw $v0, 0x3c($v1)
/* 0036F8 800282F8 24620048 */ addiu $v0, $v1, 0x48
/* 0036FC 800282FC AE420000 */ sw $v0, ($s2)
/* 003700 80028300 3C02F100 */ lui $v0, 0xf100
/* 003704 80028304 AC620040 */ sw $v0, 0x40($v1)
/* 003708 80028308 24620050 */ addiu $v0, $v1, 0x50
/* 00370C 8002830C AC670044 */ sw $a3, 0x44($v1)
/* 003710 80028310 AE420000 */ sw $v0, ($s2)
/* 003714 80028314 2B220028 */ slti $v0, $t9, 0x28
/* 003718 80028318 AC770048 */ sw $s7, 0x48($v1)
/* 00371C 8002831C 1440FFBB */ bnez $v0, .L8002820C
/* 003720 80028320 AC60004C */ sw $zero, 0x4c($v1)
/* 003724 80028324 0800A1E4 */ j .L80028790
/* 003728 80028328 00000000 */ nop
.L8002832C:
/* 00372C 8002832C 3C02800A */ lui $v0, 0x800a
/* 003730 80028330 8C42A650 */ lw $v0, -0x59b0($v0)
/* 003734 80028334 30420008 */ andi $v0, $v0, 8
/* 003738 80028338 1040000E */ beqz $v0, .L80028374
/* 00373C 8002833C 3C05FF10 */ lui $a1, 0xff10
/* 003740 80028340 34A5013F */ ori $a1, $a1, 0x13f
/* 003744 80028344 3C03800A */ lui $v1, 0x800a
/* 003748 80028348 2463A66C */ addiu $v1, $v1, -0x5994
/* 00374C 8002834C 8C620000 */ lw $v0, ($v1)
/* 003750 80028350 3C04800A */ lui $a0, 0x800a
/* 003754 80028354 8C84A64C */ lw $a0, -0x59b4($a0)
/* 003758 80028358 0040802D */ daddu $s0, $v0, $zero
/* 00375C 8002835C 24420008 */ addiu $v0, $v0, 8
/* 003760 80028360 AC620000 */ sw $v0, ($v1)
/* 003764 80028364 0C0187A4 */ jal osVirtualToPhysical
/* 003768 80028368 AE050000 */ sw $a1, ($s0)
/* 00376C 8002836C 0800A1ED */ j .L800287B4
/* 003770 80028370 AE020004 */ sw $v0, 4($s0)
.L80028374:
/* 003774 80028374 3C06E300 */ lui $a2, 0xe300
/* 003778 80028378 34C60A01 */ ori $a2, $a2, 0xa01
/* 00377C 8002837C 3C07E200 */ lui $a3, 0xe200
/* 003780 80028380 34E7001C */ ori $a3, $a3, 0x1c
/* 003784 80028384 3C08FF10 */ lui $t0, 0xff10
/* 003788 80028388 3508013F */ ori $t0, $t0, 0x13f
/* 00378C 8002838C 3C09FFFC */ lui $t1, 0xfffc
/* 003790 80028390 3529FFFC */ ori $t1, $t1, 0xfffc
/* 003794 80028394 3C0AF64F */ lui $t2, 0xf64f
/* 003798 80028398 354AC3BC */ ori $t2, $t2, 0xc3bc
/* 00379C 8002839C 3C11800A */ lui $s1, 0x800a
/* 0037A0 800283A0 2631A66C */ addiu $s1, $s1, -0x5994
/* 0037A4 800283A4 3C02FE00 */ lui $v0, 0xfe00
/* 0037A8 800283A8 8E300000 */ lw $s0, ($s1)
/* 0037AC 800283AC 3C04800A */ lui $a0, 0x800a
/* 0037B0 800283B0 8C84A64C */ lw $a0, -0x59b4($a0)
/* 0037B4 800283B4 0200282D */ daddu $a1, $s0, $zero
/* 0037B8 800283B8 26100008 */ addiu $s0, $s0, 8
/* 0037BC 800283BC AE300000 */ sw $s0, ($s1)
/* 0037C0 800283C0 3C03800A */ lui $v1, 0x800a
/* 0037C4 800283C4 8C63A5DC */ lw $v1, -0x5a24($v1)
/* 0037C8 800283C8 3C12F700 */ lui $s2, 0xf700
/* 0037CC 800283CC ACA20000 */ sw $v0, ($a1)
/* 0037D0 800283D0 3C028000 */ lui $v0, 0x8000
/* 0037D4 800283D4 00621821 */ addu $v1, $v1, $v0
/* 0037D8 800283D8 26020008 */ addiu $v0, $s0, 8
/* 0037DC 800283DC ACA30004 */ sw $v1, 4($a1)
/* 0037E0 800283E0 AE220000 */ sw $v0, ($s1)
/* 0037E4 800283E4 3C020030 */ lui $v0, 0x30
/* 0037E8 800283E8 AE020004 */ sw $v0, 4($s0)
/* 0037EC 800283EC 26020010 */ addiu $v0, $s0, 0x10
/* 0037F0 800283F0 AE060000 */ sw $a2, ($s0)
/* 0037F4 800283F4 AE220000 */ sw $v0, ($s1)
/* 0037F8 800283F8 26020018 */ addiu $v0, $s0, 0x18
/* 0037FC 800283FC AE070008 */ sw $a3, 8($s0)
/* 003800 80028400 AE00000C */ sw $zero, 0xc($s0)
/* 003804 80028404 AE220000 */ sw $v0, ($s1)
/* 003808 80028408 26020020 */ addiu $v0, $s0, 0x20
/* 00380C 8002840C AE080010 */ sw $t0, 0x10($s0)
/* 003810 80028410 AE030014 */ sw $v1, 0x14($s0)
/* 003814 80028414 AE220000 */ sw $v0, ($s1)
/* 003818 80028418 26020028 */ addiu $v0, $s0, 0x28
/* 00381C 8002841C AE120018 */ sw $s2, 0x18($s0)
/* 003820 80028420 AE09001C */ sw $t1, 0x1c($s0)
/* 003824 80028424 AE220000 */ sw $v0, ($s1)
/* 003828 80028428 26020030 */ addiu $v0, $s0, 0x30
/* 00382C 8002842C AE0A0020 */ sw $t2, 0x20($s0)
/* 003830 80028430 AE000024 */ sw $zero, 0x24($s0)
/* 003834 80028434 AE220000 */ sw $v0, ($s1)
/* 003838 80028438 3C02E700 */ lui $v0, 0xe700
/* 00383C 8002843C AE020028 */ sw $v0, 0x28($s0)
/* 003840 80028440 26020038 */ addiu $v0, $s0, 0x38
/* 003844 80028444 AE00002C */ sw $zero, 0x2c($s0)
/* 003848 80028448 AE220000 */ sw $v0, ($s1)
/* 00384C 8002844C 0C0187A4 */ jal osVirtualToPhysical
/* 003850 80028450 AE080030 */ sw $t0, 0x30($s0)
/* 003854 80028454 8E230000 */ lw $v1, ($s1)
/* 003858 80028458 AE020034 */ sw $v0, 0x34($s0)
/* 00385C 8002845C 0060282D */ daddu $a1, $v1, $zero
/* 003860 80028460 ACB20000 */ sw $s2, ($a1)
/* 003864 80028464 8664002C */ lh $a0, 0x2c($s3)
/* 003868 80028468 24630008 */ addiu $v1, $v1, 8
/* 00386C 8002846C AE230000 */ sw $v1, ($s1)
/* 003870 80028470 8663002E */ lh $v1, 0x2e($s3)
/* 003874 80028474 96620030 */ lhu $v0, 0x30($s3)
/* 003878 80028478 00042200 */ sll $a0, $a0, 8
/* 00387C 8002847C 3084F800 */ andi $a0, $a0, 0xf800
/* 003880 80028480 000318C0 */ sll $v1, $v1, 3
/* 003884 80028484 306307C0 */ andi $v1, $v1, 0x7c0
/* 003888 80028488 00832025 */ or $a0, $a0, $v1
/* 00388C 8002848C 00021082 */ srl $v0, $v0, 2
/* 003890 80028490 3042003E */ andi $v0, $v0, 0x3e
/* 003894 80028494 00822025 */ or $a0, $a0, $v0
/* 003898 80028498 34820001 */ ori $v0, $a0, 1
/* 00389C 8002849C 00021400 */ sll $v0, $v0, 0x10
/* 0038A0 800284A0 34420001 */ ori $v0, $v0, 1
/* 0038A4 800284A4 3C038007 */ lui $v1, 0x8007
/* 0038A8 800284A8 8C63419C */ lw $v1, 0x419c($v1)
/* 0038AC 800284AC 00441025 */ or $v0, $v0, $a0
/* 0038B0 800284B0 ACA20004 */ sw $v0, 4($a1)
/* 0038B4 800284B4 8470014A */ lh $s0, 0x14a($v1)
/* 0038B8 800284B8 8462014E */ lh $v0, 0x14e($v1)
/* 0038BC 800284BC 8471014C */ lh $s1, 0x14c($v1)
/* 0038C0 800284C0 0202A021 */ addu $s4, $s0, $v0
/* 0038C4 800284C4 84620150 */ lh $v0, 0x150($v1)
/* 0038C8 800284C8 8663000E */ lh $v1, 0xe($s3)
/* 0038CC 800284CC 02229021 */ addu $s2, $s1, $v0
/* 0038D0 800284D0 0203102A */ slt $v0, $s0, $v1
/* 0038D4 800284D4 54400001 */ bnel $v0, $zero, .L800284DC
/* 0038D8 800284D8 0060802D */ daddu $s0, $v1, $zero
.L800284DC:
/* 0038DC 800284DC 86640010 */ lh $a0, 0x10($s3)
/* 0038E0 800284E0 0224102A */ slt $v0, $s1, $a0
/* 0038E4 800284E4 54400001 */ bnel $v0, $zero, .L800284EC
/* 0038E8 800284E8 0080882D */ daddu $s1, $a0, $zero
.L800284EC:
/* 0038EC 800284EC 8662000A */ lh $v0, 0xa($s3)
/* 0038F0 800284F0 00621821 */ addu $v1, $v1, $v0
/* 0038F4 800284F4 0074102A */ slt $v0, $v1, $s4
/* 0038F8 800284F8 54400001 */ bnel $v0, $zero, .L80028500
/* 0038FC 800284FC 0060A02D */ daddu $s4, $v1, $zero
.L80028500:
/* 003900 80028500 8662000C */ lh $v0, 0xc($s3)
/* 003904 80028504 00821821 */ addu $v1, $a0, $v0
/* 003908 80028508 0072102A */ slt $v0, $v1, $s2
/* 00390C 8002850C 54400001 */ bnel $v0, $zero, .L80028514
/* 003910 80028510 0060902D */ daddu $s2, $v1, $zero
.L80028514:
/* 003914 80028514 06020001 */ bltzl $s0, .L8002851C
/* 003918 80028518 0000802D */ daddu $s0, $zero, $zero
.L8002851C:
/* 00391C 8002851C 06220001 */ bltzl $s1, .L80028524
/* 003920 80028520 0000882D */ daddu $s1, $zero, $zero
.L80028524:
/* 003924 80028524 5A800001 */ blezl $s4, .L8002852C
/* 003928 80028528 24140001 */ addiu $s4, $zero, 1
.L8002852C:
/* 00392C 8002852C 5A400001 */ blezl $s2, .L80028534
/* 003930 80028530 24120001 */ addiu $s2, $zero, 1
.L80028534:
/* 003934 80028534 2A020140 */ slti $v0, $s0, 0x140
/* 003938 80028538 50400001 */ beql $v0, $zero, .L80028540
/* 00393C 8002853C 2410013F */ addiu $s0, $zero, 0x13f
.L80028540:
/* 003940 80028540 2A2200F0 */ slti $v0, $s1, 0xf0
/* 003944 80028544 50400001 */ beql $v0, $zero, .L8002854C
/* 003948 80028548 241100EF */ addiu $s1, $zero, 0xef
.L8002854C:
/* 00394C 8002854C 2A820141 */ slti $v0, $s4, 0x141
/* 003950 80028550 50400001 */ beql $v0, $zero, .L80028558
/* 003954 80028554 24140140 */ addiu $s4, $zero, 0x140
.L80028558:
/* 003958 80028558 2A4200F1 */ slti $v0, $s2, 0xf1
/* 00395C 8002855C 50400001 */ beql $v0, $zero, .L80028564
/* 003960 80028560 241200F0 */ addiu $s2, $zero, 0xf0
.L80028564:
/* 003964 80028564 3C028007 */ lui $v0, 0x8007
/* 003968 80028568 8C42419C */ lw $v0, 0x419c($v0)
/* 00396C 8002856C 94420148 */ lhu $v0, 0x148($v0)
/* 003970 80028570 30420001 */ andi $v0, $v0, 1
/* 003974 80028574 14400017 */ bnez $v0, .L800285D4
/* 003978 80028578 3C04F600 */ lui $a0, 0xf600
/* 00397C 8002857C 3C03800A */ lui $v1, 0x800a
/* 003980 80028580 2463A66C */ addiu $v1, $v1, -0x5994
/* 003984 80028584 8C620000 */ lw $v0, ($v1)
/* 003988 80028588 0040282D */ daddu $a1, $v0, $zero
/* 00398C 8002858C 24420008 */ addiu $v0, $v0, 8
/* 003990 80028590 AC620000 */ sw $v0, ($v1)
/* 003994 80028594 2683FFFF */ addiu $v1, $s4, -1
/* 003998 80028598 306303FF */ andi $v1, $v1, 0x3ff
/* 00399C 8002859C 00031B80 */ sll $v1, $v1, 0xe
/* 0039A0 800285A0 2642FFFF */ addiu $v0, $s2, -1
/* 0039A4 800285A4 304203FF */ andi $v0, $v0, 0x3ff
/* 0039A8 800285A8 00021080 */ sll $v0, $v0, 2
/* 0039AC 800285AC 00441025 */ or $v0, $v0, $a0
/* 0039B0 800285B0 00621825 */ or $v1, $v1, $v0
/* 0039B4 800285B4 ACA30000 */ sw $v1, ($a1)
/* 0039B8 800285B8 320303FF */ andi $v1, $s0, 0x3ff
/* 0039BC 800285BC 00031B80 */ sll $v1, $v1, 0xe
/* 0039C0 800285C0 322203FF */ andi $v0, $s1, 0x3ff
/* 0039C4 800285C4 00021080 */ sll $v0, $v0, 2
/* 0039C8 800285C8 00621825 */ or $v1, $v1, $v0
/* 0039CC 800285CC 0800A177 */ j .L800285DC
/* 0039D0 800285D0 ACA30004 */ sw $v1, 4($a1)
.L800285D4:
/* 0039D4 800285D4 0C0517B0 */ jal func_80145EC0
/* 0039D8 800285D8 00000000 */ nop
.L800285DC:
/* 0039DC 800285DC 3C04E300 */ lui $a0, 0xe300
/* 0039E0 800285E0 34840A01 */ ori $a0, $a0, 0xa01
/* 0039E4 800285E4 3C05E200 */ lui $a1, 0xe200
/* 0039E8 800285E8 34A5001C */ ori $a1, $a1, 0x1c
/* 0039EC 800285EC 3C060001 */ lui $a2, 1
/* 0039F0 800285F0 3C08800A */ lui $t0, 0x800a
/* 0039F4 800285F4 2508A66C */ addiu $t0, $t0, -0x5994
/* 0039F8 800285F8 34C60001 */ ori $a2, $a2, 1
/* 0039FC 800285FC 8D070000 */ lw $a3, ($t0)
/* 003A00 80028600 3C03E700 */ lui $v1, 0xe700
/* 003A04 80028604 00E0102D */ daddu $v0, $a3, $zero
/* 003A08 80028608 24E70008 */ addiu $a3, $a3, 8
/* 003A0C 8002860C AD070000 */ sw $a3, ($t0)
/* 003A10 80028610 AC430000 */ sw $v1, ($v0)
/* 003A14 80028614 AC400004 */ sw $zero, 4($v0)
/* 003A18 80028618 24E20008 */ addiu $v0, $a3, 8
/* 003A1C 8002861C AD020000 */ sw $v0, ($t0)
/* 003A20 80028620 3C020030 */ lui $v0, 0x30
/* 003A24 80028624 ACE20004 */ sw $v0, 4($a3)
/* 003A28 80028628 24E20010 */ addiu $v0, $a3, 0x10
/* 003A2C 8002862C ACE40000 */ sw $a0, ($a3)
/* 003A30 80028630 AD020000 */ sw $v0, ($t0)
/* 003A34 80028634 24E20018 */ addiu $v0, $a3, 0x18
/* 003A38 80028638 ACE50008 */ sw $a1, 8($a3)
/* 003A3C 8002863C ACE0000C */ sw $zero, 0xc($a3)
/* 003A40 80028640 AD020000 */ sw $v0, ($t0)
/* 003A44 80028644 3C02F700 */ lui $v0, 0xf700
/* 003A48 80028648 ACE20010 */ sw $v0, 0x10($a3)
/* 003A4C 8002864C 24E20020 */ addiu $v0, $a3, 0x20
/* 003A50 80028650 ACE60014 */ sw $a2, 0x14($a3)
/* 003A54 80028654 AD020000 */ sw $v0, ($t0)
/* 003A58 80028658 ACE30018 */ sw $v1, 0x18($a3)
/* 003A5C 8002865C 1A20000F */ blez $s1, .L8002869C
/* 003A60 80028660 ACE0001C */ sw $zero, 0x1c($a3)
/* 003A64 80028664 3C03F64F */ lui $v1, 0xf64f
/* 003A68 80028668 3463C000 */ ori $v1, $v1, 0xc000
/* 003A6C 8002866C 24E20028 */ addiu $v0, $a3, 0x28
/* 003A70 80028670 AD020000 */ sw $v0, ($t0)
/* 003A74 80028674 2622FFFF */ addiu $v0, $s1, -1
/* 003A78 80028678 304203FF */ andi $v0, $v0, 0x3ff
/* 003A7C 8002867C 00021080 */ sll $v0, $v0, 2
/* 003A80 80028680 00431025 */ or $v0, $v0, $v1
/* 003A84 80028684 ACE20020 */ sw $v0, 0x20($a3)
/* 003A88 80028688 24E20030 */ addiu $v0, $a3, 0x30
/* 003A8C 8002868C ACE00024 */ sw $zero, 0x24($a3)
/* 003A90 80028690 AD020000 */ sw $v0, ($t0)
/* 003A94 80028694 ACE00028 */ sw $zero, 0x28($a3)
/* 003A98 80028698 ACE0002C */ sw $zero, 0x2c($a3)
.L8002869C:
/* 003A9C 8002869C 1A000015 */ blez $s0, .L800286F4
/* 003AA0 800286A0 2603FFFF */ addiu $v1, $s0, -1
/* 003AA4 800286A4 306303FF */ andi $v1, $v1, 0x3ff
/* 003AA8 800286A8 00031B80 */ sll $v1, $v1, 0xe
/* 003AAC 800286AC 2642FFFF */ addiu $v0, $s2, -1
/* 003AB0 800286B0 304203FF */ andi $v0, $v0, 0x3ff
/* 003AB4 800286B4 00021080 */ sll $v0, $v0, 2
/* 003AB8 800286B8 3C04F600 */ lui $a0, 0xf600
/* 003ABC 800286BC 00441025 */ or $v0, $v0, $a0
/* 003AC0 800286C0 00621825 */ or $v1, $v1, $v0
/* 003AC4 800286C4 322203FF */ andi $v0, $s1, 0x3ff
/* 003AC8 800286C8 8D050000 */ lw $a1, ($t0)
/* 003ACC 800286CC 00021080 */ sll $v0, $v0, 2
/* 003AD0 800286D0 00A0302D */ daddu $a2, $a1, $zero
/* 003AD4 800286D4 24A50008 */ addiu $a1, $a1, 8
/* 003AD8 800286D8 AD050000 */ sw $a1, ($t0)
/* 003ADC 800286DC ACC20004 */ sw $v0, 4($a2)
/* 003AE0 800286E0 24A20008 */ addiu $v0, $a1, 8
/* 003AE4 800286E4 ACC30000 */ sw $v1, ($a2)
/* 003AE8 800286E8 AD020000 */ sw $v0, ($t0)
/* 003AEC 800286EC ACA00000 */ sw $zero, ($a1)
/* 003AF0 800286F0 ACA00004 */ sw $zero, 4($a1)
.L800286F4:
/* 003AF4 800286F4 2A820140 */ slti $v0, $s4, 0x140
/* 003AF8 800286F8 10400015 */ beqz $v0, .L80028750
/* 003AFC 800286FC 3C03F64F */ lui $v1, 0xf64f
/* 003B00 80028700 3463C000 */ ori $v1, $v1, 0xc000
/* 003B04 80028704 2642FFFF */ addiu $v0, $s2, -1
/* 003B08 80028708 304203FF */ andi $v0, $v0, 0x3ff
/* 003B0C 8002870C 00021080 */ sll $v0, $v0, 2
/* 003B10 80028710 00431025 */ or $v0, $v0, $v1
/* 003B14 80028714 328303FF */ andi $v1, $s4, 0x3ff
/* 003B18 80028718 8D040000 */ lw $a0, ($t0)
/* 003B1C 8002871C 00031B80 */ sll $v1, $v1, 0xe
/* 003B20 80028720 0080282D */ daddu $a1, $a0, $zero
/* 003B24 80028724 24840008 */ addiu $a0, $a0, 8
/* 003B28 80028728 AD040000 */ sw $a0, ($t0)
/* 003B2C 8002872C ACA20000 */ sw $v0, ($a1)
/* 003B30 80028730 322203FF */ andi $v0, $s1, 0x3ff
/* 003B34 80028734 00021080 */ sll $v0, $v0, 2
/* 003B38 80028738 00621825 */ or $v1, $v1, $v0
/* 003B3C 8002873C 24820008 */ addiu $v0, $a0, 8
/* 003B40 80028740 ACA30004 */ sw $v1, 4($a1)
/* 003B44 80028744 AD020000 */ sw $v0, ($t0)
/* 003B48 80028748 AC800000 */ sw $zero, ($a0)
/* 003B4C 8002874C AC800004 */ sw $zero, 4($a0)
.L80028750:
/* 003B50 80028750 2A4200F0 */ slti $v0, $s2, 0xf0
/* 003B54 80028754 1040000E */ beqz $v0, .L80028790
/* 003B58 80028758 3C02F64F */ lui $v0, 0xf64f
/* 003B5C 8002875C 8D030000 */ lw $v1, ($t0)
/* 003B60 80028760 3442C3BC */ ori $v0, $v0, 0xc3bc
/* 003B64 80028764 0060202D */ daddu $a0, $v1, $zero
/* 003B68 80028768 24630008 */ addiu $v1, $v1, 8
/* 003B6C 8002876C AD030000 */ sw $v1, ($t0)
/* 003B70 80028770 AC820000 */ sw $v0, ($a0)
/* 003B74 80028774 324203FF */ andi $v0, $s2, 0x3ff
/* 003B78 80028778 00021080 */ sll $v0, $v0, 2
/* 003B7C 8002877C AC820004 */ sw $v0, 4($a0)
/* 003B80 80028780 24620008 */ addiu $v0, $v1, 8
/* 003B84 80028784 AD020000 */ sw $v0, ($t0)
/* 003B88 80028788 AC600000 */ sw $zero, ($v1)
/* 003B8C 8002878C AC600004 */ sw $zero, 4($v1)
.L80028790:
/* 003B90 80028790 3C03800A */ lui $v1, 0x800a
/* 003B94 80028794 2463A66C */ addiu $v1, $v1, -0x5994
/* 003B98 80028798 8C620000 */ lw $v0, ($v1)
/* 003B9C 8002879C 0040202D */ daddu $a0, $v0, $zero
/* 003BA0 800287A0 24420008 */ addiu $v0, $v0, 8
/* 003BA4 800287A4 AC620000 */ sw $v0, ($v1)
/* 003BA8 800287A8 3C02E700 */ lui $v0, 0xe700
/* 003BAC 800287AC AC820000 */ sw $v0, ($a0)
/* 003BB0 800287B0 AC800004 */ sw $zero, 4($a0)
.L800287B4:
/* 003BB4 800287B4 8FBF0044 */ lw $ra, 0x44($sp)
/* 003BB8 800287B8 8FBE0040 */ lw $fp, 0x40($sp)
/* 003BBC 800287BC 8FB7003C */ lw $s7, 0x3c($sp)
/* 003BC0 800287C0 8FB60038 */ lw $s6, 0x38($sp)
/* 003BC4 800287C4 8FB50034 */ lw $s5, 0x34($sp)
/* 003BC8 800287C8 8FB40030 */ lw $s4, 0x30($sp)
/* 003BCC 800287CC 8FB3002C */ lw $s3, 0x2c($sp)
/* 003BD0 800287D0 8FB20028 */ lw $s2, 0x28($sp)
/* 003BD4 800287D4 8FB10024 */ lw $s1, 0x24($sp)
/* 003BD8 800287D8 8FB00020 */ lw $s0, 0x20($sp)
/* 003BDC 800287DC 03E00008 */ jr $ra
/* 003BE0 800287E0 27BD0048 */ addiu $sp, $sp, 0x48
/* 003BE4 800287E4 00000000 */ nop
/* 003BE8 800287E8 00000000 */ nop
/* 003BEC 800287EC 00000000 */ nop
.set reorder

View File

@ -0,0 +1,203 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
gfx_draw_frame:
/* 001F08 80026B08 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 001F0C 80026B0C 3C04800A */ lui $a0, 0x800a
/* 001F10 80026B10 8C84A674 */ lw $a0, -0x598c($a0)
/* 001F14 80026B14 3C05800A */ lui $a1, 0x800a
/* 001F18 80026B18 24A5A66C */ addiu $a1, $a1, -0x5994
/* 001F1C 80026B1C AFB00010 */ sw $s0, 0x10($sp)
/* 001F20 80026B20 3C10800A */ lui $s0, 0x800a
/* 001F24 80026B24 2610A650 */ addiu $s0, $s0, -0x59b0
/* 001F28 80026B28 AFBF0018 */ sw $ra, 0x18($sp)
/* 001F2C 80026B2C AFB10014 */ sw $s1, 0x14($sp)
/* 001F30 80026B30 3C018007 */ lui $at, 0x8007
/* 001F34 80026B34 A42041F0 */ sh $zero, 0x41f0($at)
/* 001F38 80026B38 8E020000 */ lw $v0, ($s0)
/* 001F3C 80026B3C 24830230 */ addiu $v1, $a0, 0x230
/* 001F40 80026B40 30420008 */ andi $v0, $v0, 8
/* 001F44 80026B44 10400007 */ beqz $v0, .L80026B64
/* 001F48 80026B48 ACA30000 */ sw $v1, ($a1)
/* 001F4C 80026B4C 3C038007 */ lui $v1, 0x8007
/* 001F50 80026B50 246341F4 */ addiu $v1, $v1, 0x41f4
/* 001F54 80026B54 8C620000 */ lw $v0, ($v1)
/* 001F58 80026B58 38420001 */ xori $v0, $v0, 1
/* 001F5C 80026B5C 08009B72 */ j .L80026DC8
/* 001F60 80026B60 AC620000 */ sw $v0, ($v1)
.L80026B64:
/* 001F64 80026B64 3C03DA38 */ lui $v1, 0xda38
/* 001F68 80026B68 34630003 */ ori $v1, $v1, 3
/* 001F6C 80026B6C 24820238 */ addiu $v0, $a0, 0x238
/* 001F70 80026B70 ACA20000 */ sw $v0, ($a1)
/* 001F74 80026B74 3C028007 */ lui $v0, 0x8007
/* 001F78 80026B78 244241A8 */ addiu $v0, $v0, 0x41a8
/* 001F7C 80026B7C AC830230 */ sw $v1, 0x230($a0)
/* 001F80 80026B80 0C0B7698 */ jal func_802DDA60
/* 001F84 80026B84 AC820234 */ sw $v0, 0x234($a0)
/* 001F88 80026B88 8E020000 */ lw $v0, ($s0)
/* 001F8C 80026B8C 30420002 */ andi $v0, $v0, 2
/* 001F90 80026B90 14400003 */ bnez $v0, .L80026BA0
/* 001F94 80026B94 00000000 */ nop
/* 001F98 80026B98 0C00B5CF */ jal render_frame
/* 001F9C 80026B9C 0000202D */ daddu $a0, $zero, $zero
.L80026BA0:
/* 001FA0 80026BA0 0C038098 */ jal func_800E0260
/* 001FA4 80026BA4 00000000 */ nop
/* 001FA8 80026BA8 0C0B0FB9 */ jal func_802C3EE4
/* 001FAC 80026BAC 00000000 */ nop
/* 001FB0 80026BB0 0C04E088 */ jal func_80138220
/* 001FB4 80026BB4 00000000 */ nop
/* 001FB8 80026BB8 0C048D54 */ jal func_80123550
/* 001FBC 80026BBC 00000000 */ nop
/* 001FC0 80026BC0 0C050884 */ jal func_80142210
/* 001FC4 80026BC4 00000000 */ nop
/* 001FC8 80026BC8 0C0167E5 */ jal func_80059F94
/* 001FCC 80026BCC 00000000 */ nop
/* 001FD0 80026BD0 0C044BD6 */ jal render_ui
/* 001FD4 80026BD4 00000000 */ nop
/* 001FD8 80026BD8 8E020000 */ lw $v0, ($s0)
/* 001FDC 80026BDC 3C030001 */ lui $v1, 1
/* 001FE0 80026BE0 00431024 */ and $v0, $v0, $v1
/* 001FE4 80026BE4 14400003 */ bnez $v0, .L80026BF4
/* 001FE8 80026BE8 00000000 */ nop
/* 001FEC 80026BEC 0C051EB1 */ jal func_80147AC4
/* 001FF0 80026BF0 00000000 */ nop
.L80026BF4:
/* 001FF4 80026BF4 8E020000 */ lw $v0, ($s0)
/* 001FF8 80026BF8 30420002 */ andi $v0, $v0, 2
/* 001FFC 80026BFC 14400009 */ bnez $v0, .L80026C24
/* 002000 80026C00 3C100010 */ lui $s0, 0x10
/* 002004 80026C04 3C028007 */ lui $v0, 0x8007
/* 002008 80026C08 8C42419C */ lw $v0, 0x419c($v0)
/* 00200C 80026C0C 80420078 */ lb $v0, 0x78($v0)
/* 002010 80026C10 14400004 */ bnez $v0, .L80026C24
/* 002014 80026C14 00000000 */ nop
/* 002018 80026C18 0C00B5CF */ jal render_frame
/* 00201C 80026C1C 24040001 */ addiu $a0, $zero, 1
/* 002020 80026C20 3C100010 */ lui $s0, 0x10
.L80026C24:
/* 002024 80026C24 3C11800A */ lui $s1, 0x800a
/* 002028 80026C28 2631A650 */ addiu $s1, $s1, -0x59b0
/* 00202C 80026C2C 8E220000 */ lw $v0, ($s1)
/* 002030 80026C30 36100010 */ ori $s0, $s0, 0x10
/* 002034 80026C34 00501024 */ and $v0, $v0, $s0
/* 002038 80026C38 14400003 */ bnez $v0, .L80026C48
/* 00203C 80026C3C 00000000 */ nop
/* 002040 80026C40 0C049081 */ jal render_messages
/* 002044 80026C44 00000000 */ nop
.L80026C48:
/* 002048 80026C48 0C048D38 */ jal func_801234E0
/* 00204C 80026C4C 00000000 */ nop
/* 002050 80026C50 0C0509C7 */ jal func_8014271C
/* 002054 80026C54 00000000 */ nop
/* 002058 80026C58 0C04E068 */ jal func_801381A0
/* 00205C 80026C5C 00000000 */ nop
/* 002060 80026C60 8E220000 */ lw $v0, ($s1)
/* 002064 80026C64 24030010 */ addiu $v1, $zero, 0x10
/* 002068 80026C68 00501024 */ and $v0, $v0, $s0
/* 00206C 80026C6C 14430003 */ bne $v0, $v1, .L80026C7C
/* 002070 80026C70 00000000 */ nop
/* 002074 80026C74 0C049081 */ jal render_messages
/* 002078 80026C78 00000000 */ nop
.L80026C7C:
/* 00207C 80026C7C 0C00AEA0 */ jal func_8002BA80
/* 002080 80026C80 00000000 */ nop
/* 002084 80026C84 8E220000 */ lw $v0, ($s1)
/* 002088 80026C88 3C030010 */ lui $v1, 0x10
/* 00208C 80026C8C 00431024 */ and $v0, $v0, $v1
/* 002090 80026C90 10400003 */ beqz $v0, .L80026CA0
/* 002094 80026C94 00000000 */ nop
/* 002098 80026C98 0C049081 */ jal render_messages
/* 00209C 80026C9C 00000000 */ nop
.L80026CA0:
/* 0020A0 80026CA0 8E220000 */ lw $v0, ($s1)
/* 0020A4 80026CA4 3C030001 */ lui $v1, 1
/* 0020A8 80026CA8 00431024 */ and $v0, $v0, $v1
/* 0020AC 80026CAC 10400003 */ beqz $v0, .L80026CBC
/* 0020B0 80026CB0 00000000 */ nop
/* 0020B4 80026CB4 0C051EB1 */ jal func_80147AC4
/* 0020B8 80026CB8 00000000 */ nop
.L80026CBC:
/* 0020BC 80026CBC 0C044BF1 */ jal func_80112FC4
/* 0020C0 80026CC0 00000000 */ nop
/* 0020C4 80026CC4 8E220000 */ lw $v0, ($s1)
/* 0020C8 80026CC8 30420020 */ andi $v0, $v0, 0x20
/* 0020CC 80026CCC 10400010 */ beqz $v0, .L80026D10
/* 0020D0 80026CD0 00000000 */ nop
/* 0020D4 80026CD4 3C038007 */ lui $v1, 0x8007
/* 0020D8 80026CD8 846341A2 */ lh $v1, 0x41a2($v1)
/* 0020DC 80026CDC 28620002 */ slti $v0, $v1, 2
/* 0020E0 80026CE0 1040000B */ beqz $v0, .L80026D10
/* 0020E4 80026CE4 00000000 */ nop
/* 0020E8 80026CE8 04600009 */ bltz $v1, .L80026D10
/* 0020EC 80026CEC 24040007 */ addiu $a0, $zero, 7
/* 0020F0 80026CF0 3C028007 */ lui $v0, 0x8007
/* 0020F4 80026CF4 844241A0 */ lh $v0, 0x41a0($v0)
/* 0020F8 80026CF8 44820000 */ mtc1 $v0, $f0
/* 0020FC 80026CFC 00000000 */ nop
/* 002100 80026D00 46800020 */ cvt.s.w $f0, $f0
/* 002104 80026D04 44050000 */ mfc1 $a1, $f0
/* 002108 80026D08 0C04DAA0 */ jal func_80136A80
/* 00210C 80026D0C 0000302D */ daddu $a2, $zero, $zero
.L80026D10:
/* 002110 80026D10 3C02800A */ lui $v0, 0x800a
/* 002114 80026D14 8C42A66C */ lw $v0, -0x5994($v0)
/* 002118 80026D18 3C03800A */ lui $v1, 0x800a
/* 00211C 80026D1C 8C63A674 */ lw $v1, -0x598c($v1)
/* 002120 80026D20 2442FDD0 */ addiu $v0, $v0, -0x230
/* 002124 80026D24 00431023 */ subu $v0, $v0, $v1
/* 002128 80026D28 000210C2 */ srl $v0, $v0, 3
/* 00212C 80026D2C 28422080 */ slti $v0, $v0, 0x2080
/* 002130 80026D30 54400003 */ bnel $v0, $zero, .L80026D40
/* 002134 80026D34 0000302D */ daddu $a2, $zero, $zero
.L80026D38:
/* 002138 80026D38 08009B4E */ j .L80026D38
/* 00213C 80026D3C 00000000 */ nop
.L80026D40:
/* 002140 80026D40 3C070004 */ lui $a3, 4
/* 002144 80026D44 3C08800A */ lui $t0, 0x800a
/* 002148 80026D48 2508A66C */ addiu $t0, $t0, -0x5994
/* 00214C 80026D4C 34E70001 */ ori $a3, $a3, 1
/* 002150 80026D50 8D030000 */ lw $v1, ($t0)
/* 002154 80026D54 3C02800A */ lui $v0, 0x800a
/* 002158 80026D58 8C42A674 */ lw $v0, -0x598c($v0)
/* 00215C 80026D5C 0060482D */ daddu $t1, $v1, $zero
/* 002160 80026D60 24630008 */ addiu $v1, $v1, 8
/* 002164 80026D64 24440230 */ addiu $a0, $v0, 0x230
/* 002168 80026D68 2465FDD8 */ addiu $a1, $v1, -0x228
/* 00216C 80026D6C 00A22823 */ subu $a1, $a1, $v0
/* 002170 80026D70 000528C3 */ sra $a1, $a1, 3
/* 002174 80026D74 000528C0 */ sll $a1, $a1, 3
/* 002178 80026D78 3C02E900 */ lui $v0, 0xe900
/* 00217C 80026D7C AD030000 */ sw $v1, ($t0)
/* 002180 80026D80 AD220000 */ sw $v0, ($t1)
/* 002184 80026D84 24620008 */ addiu $v0, $v1, 8
/* 002188 80026D88 AD200004 */ sw $zero, 4($t1)
/* 00218C 80026D8C AD020000 */ sw $v0, ($t0)
/* 002190 80026D90 3C02DF00 */ lui $v0, 0xdf00
/* 002194 80026D94 AC620000 */ sw $v0, ($v1)
/* 002198 80026D98 0C00B331 */ jal nuGfxTaskStart
/* 00219C 80026D9C AC600004 */ sw $zero, 4($v1)
/* 0021A0 80026DA0 24050140 */ addiu $a1, $zero, 0x140
/* 0021A4 80026DA4 240600F0 */ addiu $a2, $zero, 0xf0
/* 0021A8 80026DA8 3C038007 */ lui $v1, 0x8007
/* 0021AC 80026DAC 246341F4 */ addiu $v1, $v1, 0x41f4
/* 0021B0 80026DB0 8C620000 */ lw $v0, ($v1)
/* 0021B4 80026DB4 3C04800A */ lui $a0, 0x800a
/* 0021B8 80026DB8 8C84A64C */ lw $a0, -0x59b4($a0)
/* 0021BC 80026DBC 38420001 */ xori $v0, $v0, 1
/* 0021C0 80026DC0 0C00B224 */ jal func_8002C890
/* 0021C4 80026DC4 AC620000 */ sw $v0, ($v1)
.L80026DC8:
/* 0021C8 80026DC8 8FBF0018 */ lw $ra, 0x18($sp)
/* 0021CC 80026DCC 8FB10014 */ lw $s1, 0x14($sp)
/* 0021D0 80026DD0 8FB00010 */ lw $s0, 0x10($sp)
/* 0021D4 80026DD4 03E00008 */ jr $ra
/* 0021D8 80026DD8 27BD0020 */ addiu $sp, $sp, 0x20
.set reorder

View File

@ -0,0 +1,180 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
load_engine_data:
/* 0021DC 80026DDC 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 0021E0 80026DE0 3C040010 */ lui $a0, 0x10
/* 0021E4 80026DE4 2484EE30 */ addiu $a0, $a0, -0x11d0
/* 0021E8 80026DE8 3C050010 */ lui $a1, 0x10
/* 0021EC 80026DEC 24A52610 */ addiu $a1, $a1, 0x2610
/* 0021F0 80026DF0 3C06802E */ lui $a2, 0x802e
/* 0021F4 80026DF4 24C6BD40 */ addiu $a2, $a2, -0x42c0
/* 0021F8 80026DF8 AFBF0014 */ sw $ra, 0x14($sp)
/* 0021FC 80026DFC 0C00A5CF */ jal dma_copy
/* 002200 80026E00 AFB00010 */ sw $s0, 0x10($sp)
/* 002204 80026E04 3C040007 */ lui $a0, 7
/* 002208 80026E08 248459B0 */ addiu $a0, $a0, 0x59b0
/* 00220C 80026E0C 3C05000A */ lui $a1, 0xa
/* 002210 80026E10 24A55DD0 */ addiu $a1, $a1, 0x5dd0
/* 002214 80026E14 3C06800E */ lui $a2, 0x800e
/* 002218 80026E18 24C6C500 */ addiu $a2, $a2, -0x3b00
/* 00221C 80026E1C 0C00A5CF */ jal dma_copy
/* 002220 80026E20 00000000 */ nop
/* 002224 80026E24 3C04000E */ lui $a0, 0xe
/* 002228 80026E28 248479B0 */ addiu $a0, $a0, 0x79b0
/* 00222C 80026E2C 3C050010 */ lui $a1, 0x10
/* 002230 80026E30 24A5EE30 */ addiu $a1, $a1, -0x11d0
/* 002234 80026E34 3C06802C */ lui $a2, 0x802c
/* 002238 80026E38 24C63000 */ addiu $a2, $a2, 0x3000
/* 00223C 80026E3C 0C00A5CF */ jal dma_copy
/* 002240 80026E40 00000000 */ nop
/* 002244 80026E44 3C040010 */ lui $a0, 0x10
/* 002248 80026E48 24842610 */ addiu $a0, $a0, 0x2610
/* 00224C 80026E4C 3C050011 */ lui $a1, 0x11
/* 002250 80026E50 24A5CC10 */ addiu $a1, $a1, -0x33f0
/* 002254 80026E54 3C06802E */ lui $a2, 0x802e
/* 002258 80026E58 24C60D90 */ addiu $a2, $a2, 0xd90
/* 00225C 80026E5C 0C00A5CF */ jal dma_copy
/* 002260 80026E60 00000000 */ nop
/* 002264 80026E64 3C04000A */ lui $a0, 0xa
/* 002268 80026E68 24845DD0 */ addiu $a0, $a0, 0x5dd0
/* 00226C 80026E6C 3C05000E */ lui $a1, 0xe
/* 002270 80026E70 24A579B0 */ addiu $a1, $a1, 0x79b0
/* 002274 80026E74 3C068011 */ lui $a2, 0x8011
/* 002278 80026E78 24C6F6D0 */ addiu $a2, $a2, -0x930
/* 00227C 80026E7C 0C00A5CF */ jal dma_copy
/* 002280 80026E80 00000000 */ nop
/* 002284 80026E84 3C040011 */ lui $a0, 0x11
/* 002288 80026E88 2484CC10 */ addiu $a0, $a0, -0x33f0
/* 00228C 80026E8C 3C050011 */ lui $a1, 0x11
/* 002290 80026E90 24A5F1B0 */ addiu $a1, $a1, -0xe50
/* 002294 80026E94 3C06802F */ lui $a2, 0x802f
/* 002298 80026E98 24C6B3D0 */ addiu $a2, $a2, -0x4c30
/* 00229C 80026E9C 0C00A5CF */ jal dma_copy
/* 0022A0 80026EA0 00000000 */ nop
/* 0022A4 80026EA4 3C108007 */ lui $s0, 0x8007
/* 0022A8 80026EA8 2610419C */ addiu $s0, $s0, 0x419c
/* 0022AC 80026EAC 8E020000 */ lw $v0, ($s0)
/* 0022B0 80026EB0 3C01800A */ lui $at, 0x800a
/* 0022B4 80026EB4 AC20A650 */ sw $zero, -0x59b0($at)
/* 0022B8 80026EB8 A0400079 */ sb $zero, 0x79($v0)
/* 0022BC 80026EBC 8E030000 */ lw $v1, ($s0)
/* 0022C0 80026EC0 24040001 */ addiu $a0, $zero, 1
/* 0022C4 80026EC4 A064007A */ sb $a0, 0x7a($v1)
/* 0022C8 80026EC8 8E020000 */ lw $v0, ($s0)
/* 0022CC 80026ECC A4600148 */ sh $zero, 0x148($v1)
/* 0022D0 80026ED0 A044007C */ sb $a0, 0x7c($v0)
/* 0022D4 80026ED4 8E030000 */ lw $v1, ($s0)
/* 0022D8 80026ED8 2402FFFF */ addiu $v0, $zero, -1
/* 0022DC 80026EDC A06200A8 */ sb $v0, 0xa8($v1)
/* 0022E0 80026EE0 8E020000 */ lw $v0, ($s0)
/* 0022E4 80026EE4 A04000AA */ sb $zero, 0xaa($v0)
/* 0022E8 80026EE8 8E020000 */ lw $v0, ($s0)
/* 0022EC 80026EEC A0400081 */ sb $zero, 0x81($v0)
/* 0022F0 80026EF0 8E030000 */ lw $v1, ($s0)
/* 0022F4 80026EF4 2402FFF8 */ addiu $v0, $zero, -8
/* 0022F8 80026EF8 A0620082 */ sb $v0, 0x82($v1)
/* 0022FC 80026EFC 8E030000 */ lw $v1, ($s0)
/* 002300 80026F00 24020004 */ addiu $v0, $zero, 4
/* 002304 80026F04 A0620083 */ sb $v0, 0x83($v1)
/* 002308 80026F08 8E020000 */ lw $v0, ($s0)
/* 00230C 80026F0C 3C01800A */ lui $at, 0x800a
/* 002310 80026F10 AC20A5D8 */ sw $zero, -0x5a28($at)
/* 002314 80026F14 A440013C */ sh $zero, 0x13c($v0)
/* 002318 80026F18 A0400075 */ sb $zero, 0x75($v0)
/* 00231C 80026F1C 8E030000 */ lw $v1, ($s0)
/* 002320 80026F20 24020005 */ addiu $v0, $zero, 5
/* 002324 80026F24 3C018007 */ lui $at, 0x8007
/* 002328 80026F28 A0224021 */ sb $v0, 0x4021($at)
/* 00232C 80026F2C 0C00AE13 */ jal fio_init_flash
/* 002330 80026F30 AC600168 */ sw $zero, 0x168($v1)
/* 002334 80026F34 0C00A20E */ jal func_80028838
/* 002338 80026F38 00000000 */ nop
/* 00233C 80026F3C 0C00AB00 */ jal general_heap_create
/* 002340 80026F40 00000000 */ nop
/* 002344 80026F44 0C047624 */ jal func_8011D890
/* 002348 80026F48 00000000 */ nop
/* 00234C 80026F4C 0C048C2E */ jal func_801230B8
/* 002350 80026F50 00000000 */ nop
/* 002354 80026F54 0C0B0C77 */ jal clear_script_list
/* 002358 80026F58 00000000 */ nop
/* 00235C 80026F5C 0C00B7BD */ jal create_cameras_a
/* 002360 80026F60 00000000 */ nop
/* 002364 80026F64 0C037F14 */ jal clear_player_status
/* 002368 80026F68 00000000 */ nop
/* 00236C 80026F6C 0C0B763E */ jal func_802DD8F8
/* 002370 80026F70 0000202D */ daddu $a0, $zero, $zero
/* 002374 80026F74 0C0482EC */ jal func_80120BB0
/* 002378 80026F78 00000000 */ nop
/* 00237C 80026F7C 0C047889 */ jal func_8011E224
/* 002380 80026F80 00000000 */ nop
/* 002384 80026F84 0C045751 */ jal clear_model_data
/* 002388 80026F88 00000000 */ nop
/* 00238C 80026F8C 0C052010 */ jal func_80148040
/* 002390 80026F90 00000000 */ nop
/* 002394 80026F94 0C05177E */ jal func_80145DF8
/* 002398 80026F98 00000000 */ nop
/* 00239C 80026F9C 0C048D98 */ jal clear_character_set
/* 0023A0 80026FA0 00000000 */ nop
/* 0023A4 80026FA4 0C048D9D */ jal clear_printers
/* 0023A8 80026FA8 00000000 */ nop
/* 0023AC 80026FAC 0C044AE6 */ jal func_80112B98
/* 0023B0 80026FB0 00000000 */ nop
/* 0023B4 80026FB4 0C00E12F */ jal func_800384BC
/* 0023B8 80026FB8 00000000 */ nop
/* 0023BC 80026FBC 0C050440 */ jal func_80141100
/* 0023C0 80026FC0 00000000 */ nop
/* 0023C4 80026FC4 0C0515A0 */ jal clear_trigger_data
/* 0023C8 80026FC8 00000000 */ nop
/* 0023CC 80026FCC 0C04432E */ jal func_80110CB8
/* 0023D0 80026FD0 0000202D */ daddu $a0, $zero, $zero
/* 0023D4 80026FD4 0C039CE8 */ jal clear_player_data
/* 0023D8 80026FD8 00000000 */ nop
/* 0023DC 80026FDC 0C00F8CE */ jal func_8003E338
/* 0023E0 80026FE0 00000000 */ nop
/* 0023E4 80026FE4 0C04E042 */ jal func_80138108
/* 0023E8 80026FE8 00000000 */ nop
/* 0023EC 80026FEC 0C016727 */ jal func_80059C9C
/* 0023F0 80026FF0 00000000 */ nop
/* 0023F4 80026FF4 0C0514C8 */ jal clear_saved_variables
/* 0023F8 80026FF8 00000000 */ nop
/* 0023FC 80026FFC 0C04C3FC */ jal clear_item_entity_data
/* 002400 80027000 00000000 */ nop
/* 002404 80027004 0C052926 */ jal func_8014A498
/* 002408 80027008 00000000 */ nop
/* 00240C 8002700C 0C051C8C */ jal func_80147230
/* 002410 80027010 00000000 */ nop
/* 002414 80027014 0C052586 */ jal func_80149618
/* 002418 80027018 00000000 */ nop
/* 00241C 8002701C 0C051CFC */ jal func_801473F0
/* 002420 80027020 00000000 */ nop
/* 002424 80027024 0C00AE90 */ jal func_8002BA40
/* 002428 80027028 00000000 */ nop
/* 00242C 8002702C 0C00A3B8 */ jal poll_rumble
/* 002430 80027030 00000000 */ nop
/* 002434 80027034 0000182D */ daddu $v1, $zero, $zero
/* 002438 80027038 24050003 */ addiu $a1, $zero, 3
/* 00243C 8002703C 2404000C */ addiu $a0, $zero, 0xc
/* 002440 80027040 8E100000 */ lw $s0, ($s0)
.L80027044:
/* 002444 80027044 A6050050 */ sh $a1, 0x50($s0)
/* 002448 80027048 A6040048 */ sh $a0, 0x48($s0)
/* 00244C 8002704C 24630001 */ addiu $v1, $v1, 1
/* 002450 80027050 28620004 */ slti $v0, $v1, 4
/* 002454 80027054 1440FFFB */ bnez $v0, .L80027044
/* 002458 80027058 26100002 */ addiu $s0, $s0, 2
/* 00245C 8002705C 3C03800A */ lui $v1, 0x800a
/* 002460 80027060 2463A650 */ addiu $v1, $v1, -0x59b0
/* 002464 80027064 8C620000 */ lw $v0, ($v1)
/* 002468 80027068 0000202D */ daddu $a0, $zero, $zero
/* 00246C 8002706C 34420008 */ ori $v0, $v0, 8
/* 002470 80027070 0C00CD3C */ jal set_game_mode
/* 002474 80027074 AC620000 */ sw $v0, ($v1)
/* 002478 80027078 8FBF0014 */ lw $ra, 0x14($sp)
/* 00247C 8002707C 8FB00010 */ lw $s0, 0x10($sp)
/* 002480 80027080 03E00008 */ jr $ra
/* 002484 80027084 27BD0018 */ addiu $sp, $sp, 0x18
.set reorder

View File

@ -0,0 +1,195 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.include "globals.inc"
step_game_loop:
/* 001B40 80026740 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 001B44 80026744 AFBF0018 */ sw $ra, 0x18($sp)
/* 001B48 80026748 AFB10014 */ sw $s1, 0x14($sp)
/* 001B4C 8002674C 0C00A21D */ jal update_input
/* 001B50 80026750 AFB00010 */ sw $s0, 0x10($sp)
/* 001B54 80026754 3C038007 */ lui $v1, 0x8007
/* 001B58 80026758 8C63419C */ lw $v1, 0x419c($v1)
/* 001B5C 8002675C 3C040CDF */ lui $a0, 0xcdf
/* 001B60 80026760 94620134 */ lhu $v0, 0x134($v1)
/* 001B64 80026764 3C108011 */ lui $s0, 0x8011
/* 001B68 80026768 2610F290 */ addiu $s0, $s0, -0xd70
/* 001B6C 8002676C 24420001 */ addiu $v0, $v0, 1
/* 001B70 80026770 A4620134 */ sh $v0, 0x134($v1)
/* 001B74 80026774 8E0202BC */ lw $v0, 0x2bc($s0)
/* 001B78 80026778 3484E5FF */ ori $a0, $a0, 0xe5ff
/* 001B7C 8002677C 24420002 */ addiu $v0, $v0, 2
/* 001B80 80026780 AE0202BC */ sw $v0, 0x2bc($s0)
/* 001B84 80026784 0082102B */ sltu $v0, $a0, $v0
/* 001B88 80026788 54400001 */ bnel $v0, $zero, .L80026790
/* 001B8C 8002678C AE0402BC */ sw $a0, 0x2bc($s0)
.L80026790:
/* 001B90 80026790 0C00A3E3 */ jal func_80028F8C
/* 001B94 80026794 00000000 */ nop
/* 001B98 80026798 3C048007 */ lui $a0, 0x8007
/* 001B9C 8002679C 24844021 */ addiu $a0, $a0, 0x4021
/* 001BA0 800267A0 80820000 */ lb $v0, ($a0)
/* 001BA4 800267A4 90830000 */ lbu $v1, ($a0)
/* 001BA8 800267A8 10400008 */ beqz $v0, .L800267CC
/* 001BAC 800267AC 2462FFFF */ addiu $v0, $v1, -1
/* 001BB0 800267B0 A0820000 */ sb $v0, ($a0)
/* 001BB4 800267B4 00021600 */ sll $v0, $v0, 0x18
/* 001BB8 800267B8 14400087 */ bnez $v0, .L800269D8
/* 001BBC 800267BC 00000000 */ nop
/* 001BC0 800267C0 3C028007 */ lui $v0, 0x8007
/* 001BC4 800267C4 90424020 */ lbu $v0, 0x4020($v0)
/* 001BC8 800267C8 A0820000 */ sb $v0, ($a0)
.L800267CC:
/* 001BCC 800267CC 0C046EBA */ jal func_8011BAE8
/* 001BD0 800267D0 00000000 */ nop
/* 001BD4 800267D4 0C00E15F */ jal func_8003857C
/* 001BD8 800267D8 00000000 */ nop
/* 001BDC 800267DC 0C048D01 */ jal func_80123404
/* 001BE0 800267E0 00000000 */ nop
/* 001BE4 800267E4 0C051618 */ jal update_triggers
/* 001BE8 800267E8 00000000 */ nop
/* 001BEC 800267EC 0C0B0F5D */ jal update_scripts
/* 001BF0 800267F0 00000000 */ nop
/* 001BF4 800267F4 0C048DF6 */ jal update_messages
/* 001BF8 800267F8 00000000 */ nop
/* 001BFC 800267FC 0C050584 */ jal update_menu_icons
/* 001C00 80026800 00000000 */ nop
/* 001C04 80026804 0C044B9E */ jal step_current_game_mode
/* 001C08 80026808 00000000 */ nop
/* 001C0C 8002680C 0C043DB4 */ jal update_entities
/* 001C10 80026810 00000000 */ nop
/* 001C14 80026814 0C04E066 */ jal func_80138198
/* 001C18 80026818 00000000 */ nop
/* 001C1C 8002681C 0C052952 */ jal func_8014A548
/* 001C20 80026820 00000000 */ nop
/* 001C24 80026824 0C051C99 */ jal UpdateMusicPlayers
/* 001C28 80026828 00000000 */ nop
/* 001C2C 8002682C 0C0525CD */ jal func_80149734
/* 001C30 80026830 00000000 */ nop
/* 001C34 80026834 0C051D05 */ jal func_80147414
/* 001C38 80026838 00000000 */ nop
/* 001C3C 8002683C 0C00AE9E */ jal func_8002BA78
/* 001C40 80026840 00000000 */ nop
/* 001C44 80026844 3C10800A */ lui $s0, 0x800a
/* 001C48 80026848 2610A650 */ addiu $s0, $s0, -0x59b0
/* 001C4C 8002684C 8E040000 */ lw $a0, ($s0)
/* 001C50 80026850 30820020 */ andi $v0, $a0, 0x20
/* 001C54 80026854 10400035 */ beqz $v0, .L8002692C
/* 001C58 80026858 00000000 */ nop
/* 001C5C 8002685C 3C118007 */ lui $s1, 0x8007
/* 001C60 80026860 263141A2 */ addiu $s1, $s1, 0x41a2
/* 001C64 80026864 86230000 */ lh $v1, ($s1)
/* 001C68 80026868 10600005 */ beqz $v1, .L80026880
/* 001C6C 8002686C 24020001 */ addiu $v0, $zero, 1
/* 001C70 80026870 1062001C */ beq $v1, $v0, .L800268E4
/* 001C74 80026874 34840008 */ ori $a0, $a0, 8
/* 001C78 80026878 08009A4F */ j .L8002693C
/* 001C7C 8002687C 00000000 */ nop
.L80026880:
/* 001C80 80026880 34820200 */ ori $v0, $a0, 0x200
/* 001C84 80026884 0C03805E */ jal func_800E0178
/* 001C88 80026888 AE020000 */ sw $v0, ($s0)
/* 001C8C 8002688C 3C048007 */ lui $a0, 0x8007
/* 001C90 80026890 248441A0 */ addiu $a0, $a0, 0x41a0
/* 001C94 80026894 240500FF */ addiu $a1, $zero, 0xff
/* 001C98 80026898 84820000 */ lh $v0, ($a0)
/* 001C9C 8002689C 94830000 */ lhu $v1, ($a0)
/* 001CA0 800268A0 14450008 */ bne $v0, $a1, .L800268C4
/* 001CA4 800268A4 2462000A */ addiu $v0, $v1, 0xa
/* 001CA8 800268A8 24020001 */ addiu $v0, $zero, 1
/* 001CAC 800268AC A6220000 */ sh $v0, ($s1)
/* 001CB0 800268B0 24020003 */ addiu $v0, $zero, 3
/* 001CB4 800268B4 3C01800A */ lui $at, 0x800a
/* 001CB8 800268B8 A422A690 */ sh $v0, -0x5970($at)
/* 001CBC 800268BC 08009A4F */ j .L8002693C
/* 001CC0 800268C0 00000000 */ nop
.L800268C4:
/* 001CC4 800268C4 A4820000 */ sh $v0, ($a0)
/* 001CC8 800268C8 00021400 */ sll $v0, $v0, 0x10
/* 001CCC 800268CC 00021403 */ sra $v0, $v0, 0x10
/* 001CD0 800268D0 28420100 */ slti $v0, $v0, 0x100
/* 001CD4 800268D4 50400019 */ beql $v0, $zero, .L8002693C
/* 001CD8 800268D8 A4850000 */ sh $a1, ($a0)
/* 001CDC 800268DC 08009A4F */ j .L8002693C
/* 001CE0 800268E0 00000000 */ nop
.L800268E4:
/* 001CE4 800268E4 3C02800A */ lui $v0, 0x800a
/* 001CE8 800268E8 2442A690 */ addiu $v0, $v0, -0x5970
/* 001CEC 800268EC 94430000 */ lhu $v1, ($v0)
/* 001CF0 800268F0 AE040000 */ sw $a0, ($s0)
/* 001CF4 800268F4 2463FFFF */ addiu $v1, $v1, -1
/* 001CF8 800268F8 A4430000 */ sh $v1, ($v0)
/* 001CFC 800268FC 00031C00 */ sll $v1, $v1, 0x10
/* 001D00 80026900 1460000E */ bnez $v1, .L8002693C
/* 001D04 80026904 00000000 */ nop
/* 001D08 80026908 0C05260E */ jal func_80149838
/* 001D0C 8002690C 00000000 */ nop
/* 001D10 80026910 0C00CD3C */ jal set_game_mode
/* 001D14 80026914 0000202D */ daddu $a0, $zero, $zero
/* 001D18 80026918 8E020000 */ lw $v0, ($s0)
/* 001D1C 8002691C 2403FFDF */ addiu $v1, $zero, -0x21
/* 001D20 80026920 00431024 */ and $v0, $v0, $v1
/* 001D24 80026924 08009A4F */ j .L8002693C
/* 001D28 80026928 AE020000 */ sw $v0, ($s0)
.L8002692C:
/* 001D2C 8002692C 3C018007 */ lui $at, 0x8007
/* 001D30 80026930 A42041A0 */ sh $zero, 0x41a0($at)
/* 001D34 80026934 3C018007 */ lui $at, 0x8007
/* 001D38 80026938 A42041A2 */ sh $zero, 0x41a2($at)
.L8002693C:
/* 001D3C 8002693C 3C04800A */ lui $a0, 0x800a
/* 001D40 80026940 2484A650 */ addiu $a0, $a0, -0x59b0
/* 001D44 80026944 8C830000 */ lw $v1, ($a0)
/* 001D48 80026948 30620100 */ andi $v0, $v1, 0x100
/* 001D4C 8002694C 14400003 */ bnez $v0, .L8002695C
/* 001D50 80026950 34621000 */ ori $v0, $v1, 0x1000
/* 001D54 80026954 2402EFFF */ addiu $v0, $zero, -0x1001
/* 001D58 80026958 00621024 */ and $v0, $v1, $v0
.L8002695C:
/* 001D5C 8002695C AC820000 */ sw $v0, ($a0)
/* 001D60 80026960 3C04800A */ lui $a0, 0x800a
/* 001D64 80026964 2484A650 */ addiu $a0, $a0, -0x59b0
/* 001D68 80026968 8C830000 */ lw $v1, ($a0)
/* 001D6C 8002696C 30620200 */ andi $v0, $v1, 0x200
/* 001D70 80026970 14400003 */ bnez $v0, .L80026980
/* 001D74 80026974 34622000 */ ori $v0, $v1, 0x2000
/* 001D78 80026978 2402DFFF */ addiu $v0, $zero, -0x2001
/* 001D7C 8002697C 00621024 */ and $v0, $v1, $v0
.L80026980:
/* 001D80 80026980 AC820000 */ sw $v0, ($a0)
/* 001D84 80026984 3C04800A */ lui $a0, 0x800a
/* 001D88 80026988 2484A650 */ addiu $a0, $a0, -0x59b0
/* 001D8C 8002698C 8C830000 */ lw $v1, ($a0)
/* 001D90 80026990 30620400 */ andi $v0, $v1, 0x400
/* 001D94 80026994 14400003 */ bnez $v0, .L800269A4
/* 001D98 80026998 34624000 */ ori $v0, $v1, 0x4000
/* 001D9C 8002699C 2402BFFF */ addiu $v0, $zero, -0x4001
/* 001DA0 800269A0 00621024 */ and $v0, $v1, $v0
.L800269A4:
/* 001DA4 800269A4 AC820000 */ sw $v0, ($a0)
/* 001DA8 800269A8 3C04800A */ lui $a0, 0x800a
/* 001DAC 800269AC 2484A650 */ addiu $a0, $a0, -0x59b0
/* 001DB0 800269B0 8C830000 */ lw $v1, ($a0)
/* 001DB4 800269B4 30620800 */ andi $v0, $v1, 0x800
/* 001DB8 800269B8 14400004 */ bnez $v0, .L800269CC
/* 001DBC 800269BC 34628000 */ ori $v0, $v1, 0x8000
/* 001DC0 800269C0 3C02FFFF */ lui $v0, 0xffff
/* 001DC4 800269C4 34427FFF */ ori $v0, $v0, 0x7fff
/* 001DC8 800269C8 00621024 */ and $v0, $v1, $v0
.L800269CC:
/* 001DCC 800269CC AC820000 */ sw $v0, ($a0)
/* 001DD0 800269D0 0C00A67F */ jal rand_int
/* 001DD4 800269D4 24040001 */ addiu $a0, $zero, 1
.L800269D8:
/* 001DD8 800269D8 8FBF0018 */ lw $ra, 0x18($sp)
/* 001DDC 800269DC 8FB10014 */ lw $s1, 0x14($sp)
/* 001DE0 800269E0 8FB00010 */ lw $s0, 0x10($sp)
/* 001DE4 800269E4 03E00008 */ jr $ra
/* 001DE8 800269E8 27BD0020 */ addiu $sp, $sp, 0x20
.set reorder

View File

@ -21,7 +21,7 @@ def fail(msg):
MISSING_PREREQUISITES = ( MISSING_PREREQUISITES = (
"Missing prerequisite python module {}. " "Missing prerequisite python module {}. "
"Run `python3 -m pip install --user colorama ansiwrap attrs watchdog python-Levenshtein cxxfilt` to install prerequisites (python-Levenshtein only needed for --algorithm=levenshtein, cxxfilt only needed with --source)." "Run `python3 -m pip install --user colorama ansiwrap attrs watchdog python-Levenshtein cxxfilt` to install prerequisites (cxxfilt only needed with --source)."
) )
try: try:
@ -60,6 +60,11 @@ parser.add_argument(
action="store_true", action="store_true",
help="Show source code (if possible). Only works with -o and -e.", help="Show source code (if possible). Only works with -o and -e.",
) )
parser.add_argument(
"--inlines",
action="store_true",
help="Show inline function calls (if possible). Only works with -o and -e.",
)
parser.add_argument( parser.add_argument(
"--base-asm", "--base-asm",
dest="base_asm", dest="base_asm",
@ -137,7 +142,7 @@ parser.add_argument(
parser.add_argument( parser.add_argument(
"--algorithm", "--algorithm",
dest="algorithm", dest="algorithm",
default="difflib", default="levenshtein",
choices=["levenshtein", "difflib"], choices=["levenshtein", "difflib"],
help="Diff algorithm to use.", help="Diff algorithm to use.",
) )
@ -185,7 +190,7 @@ COLOR_ROTATION = [
] ]
BUFFER_CMD = ["tail", "-c", str(10 ** 9)] BUFFER_CMD = ["tail", "-c", str(10 ** 9)]
LESS_CMD = ["less", "-Ric"] LESS_CMD = ["less", "-SRic", "-#6"]
DEBOUNCE_DELAY = 0.1 DEBOUNCE_DELAY = 0.1
FS_WATCH_EXTENSIONS = [".c", ".h"] FS_WATCH_EXTENSIONS = [".c", ".h"]
@ -270,12 +275,17 @@ def maybe_get_objdump_source_flags():
if not args.source: if not args.source:
return [] return []
return [ flags = [
"--source", "--source",
"--source-comment=| ", "--source-comment=| ",
"-l", "-l",
] ]
if args.inlines:
flags.append("--inlines")
return flags
def run_objdump(cmd): def run_objdump(cmd):
flags, target, restrict = cmd flags, target, restrict = cmd
@ -431,8 +441,8 @@ def ansi_ljust(s, width):
if arch == "mips": if arch == "mips":
re_int = re.compile(r"[0-9]+") re_int = re.compile(r"[0-9]+")
re_comments = re.compile(r"<.*?>") re_comment = re.compile(r"<.*?>")
re_regs = re.compile(r"\$?\b(a[0-3]|t[0-9]|s[0-8]|at|v[01]|f[12]?[0-9]|f3[01]|fp)\b") re_reg = re.compile(r"\$?\b(a[0-3]|t[0-9]|s[0-8]|at|v[01]|f[12]?[0-9]|f3[01]|k[01]|fp|ra)\b")
re_sprel = re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)") re_sprel = re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)")
re_large_imm = re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}") re_large_imm = re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}")
re_imm = re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(sp)|%(lo|hi)\([^)]*\)") re_imm = re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(sp)|%(lo|hi)\([^)]*\)")
@ -455,10 +465,10 @@ if arch == "mips":
instructions_with_address_immediates = branch_instructions.union({"jal", "j"}) instructions_with_address_immediates = branch_instructions.union({"jal", "j"})
elif arch == "aarch64": elif arch == "aarch64":
re_int = re.compile(r"[0-9]+") re_int = re.compile(r"[0-9]+")
re_comments = re.compile(r"(<.*?>|//.*$)") re_comment = re.compile(r"(<.*?>|//.*$)")
# GPRs and FP registers: X0-X30, W0-W30, [DSHQ]0..31 # GPRs and FP registers: X0-X30, W0-W30, [DSHQ]0..31
# The zero registers and SP should not be in this list. # The zero registers and SP should not be in this list.
re_regs = re.compile(r"\$?\b([dshq][12]?[0-9]|[dshq]3[01]|[xw][12]?[0-9]|[xw]30)\b") re_reg = re.compile(r"\$?\b([dshq][12]?[0-9]|[dshq]3[01]|[xw][12]?[0-9]|[xw]30)\b")
re_sprel = re.compile(r"sp, #-?(0x[0-9a-fA-F]+|[0-9]+)\b") re_sprel = re.compile(r"sp, #-?(0x[0-9a-fA-F]+|[0-9]+)\b")
re_large_imm = re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}") re_large_imm = re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}")
re_imm = re.compile(r"(?<!sp, )#-?(0x[0-9a-fA-F]+|[0-9]+)\b") re_imm = re.compile(r"(?<!sp, )#-?(0x[0-9a-fA-F]+|[0-9]+)\b")
@ -500,13 +510,20 @@ def parse_relocated_line(line):
return before, imm, after return before, imm, after
def process_reloc(row, prev): def process_mips_reloc(row, prev):
before, imm, after = parse_relocated_line(prev) before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1] repl = row.split()[-1]
if imm != "0": if imm != "0":
if before.strip() == "jal" and not imm.startswith("0x"): # MIPS uses relocations with addends embedded in the code as immediates.
# If there is an immediate, show it as part of the relocation. Ideally
# we'd show this addend in both %lo/%hi, but annoyingly objdump's output
# doesn't include enough information to pair up %lo's and %hi's...
# TODO: handle unambiguous cases where all addends for a symbol are the
# same, or show "+???".
mnemonic = prev.split()[0]
if mnemonic in instructions_with_address_immediates and not imm.startswith("0x"):
imm = "0x" + imm imm = "0x" + imm
repl += "+" + imm if int(imm, 16) > 0 else imm repl += "+" + imm if int(imm, 0) > 0 else imm
if "R_MIPS_LO16" in row: if "R_MIPS_LO16" in row:
repl = f"%lo({repl})" repl = f"%lo({repl})"
elif "R_MIPS_HI16" in row: elif "R_MIPS_HI16" in row:
@ -519,27 +536,39 @@ def process_reloc(row, prev):
return before + repl + after return before + repl + after
def cleanup_whitespace(line):
return "".join(f"{o:<8s}" for o in line.strip().split("\t"))
Line = collections.namedtuple(
"Line",
[
"mnemonic",
"diff_row",
"original",
"line_num",
"branch_target",
"source_lines",
"comment",
],
)
def process(lines): def process(lines):
mnemonics = []
diff_rows = []
rows_with_imms = []
skip_next = False skip_next = False
originals = [] source_lines = []
line_nums = []
branch_targets = []
source_lines = collections.defaultdict(list)
comments = []
if not args.diff_obj: if not args.diff_obj:
lines = lines[7:] lines = lines[7:]
if lines and not lines[-1]: if lines and not lines[-1]:
lines.pop() lines.pop()
output = []
for row in lines: for row in lines:
if args.diff_obj and (">:" in row or not row): if args.diff_obj and (">:" in row or not row):
continue continue
if args.source and (row and row[0] != " "): if args.source and (row and row[0] != " "):
source_lines[len(mnemonics)].append(row) source_lines.append(row)
continue continue
if "R_AARCH64_" in row: if "R_AARCH64_" in row:
@ -548,13 +577,15 @@ def process(lines):
if "R_MIPS_" in row: if "R_MIPS_" in row:
# N.B. Don't transform the diff rows, they already ignore immediates # N.B. Don't transform the diff rows, they already ignore immediates
# if diff_rows[-1] != '<delay-slot>': # if output[-1].diff_row != "<delay-slot>":
# diff_rows[-1] = process_reloc(row, rows_with_imms[-1]) # output[-1] = output[-1].replace(diff_row=process_mips_reloc(row, output[-1].row_with_imm))
originals[-1] = process_reloc(row, originals[-1]) new_original = process_mips_reloc(row, output[-1].original)
output[-1] = output[-1]._replace(original=new_original)
continue continue
comments.append(re.search(re_comments, row)) m_comment = re.search(re_comment, row)
row = re.sub(re_comments, "", row) comment = m_comment[0] if m_comment else None
row = re.sub(re_comment, "", row)
row = row.rstrip() row = row.rstrip()
tabs = row.split("\t") tabs = row.split("\t")
row = "\t".join(tabs[2:]) row = "\t".join(tabs[2:])
@ -570,7 +601,7 @@ def process(lines):
mnemonic = "<delay-slot>" mnemonic = "<delay-slot>"
if mnemonic in branch_likely_instructions: if mnemonic in branch_likely_instructions:
skip_next = True skip_next = True
row = re.sub(re_regs, "<reg>", row) row = re.sub(re_reg, "<reg>", row)
row = re.sub(re_sprel, "addr(sp)", row) row = re.sub(re_sprel, "addr(sp)", row)
row_with_imm = row row_with_imm = row
if mnemonic in instructions_with_address_immediates: if mnemonic in instructions_with_address_immediates:
@ -580,28 +611,35 @@ def process(lines):
else: else:
row = normalize_imms(row) row = normalize_imms(row)
mnemonics.append(mnemonic) branch_target = None
rows_with_imms.append(row_with_imm)
diff_rows.append(row)
originals.append(original)
line_nums.append(line_num)
if mnemonic in branch_instructions: if mnemonic in branch_instructions:
target = row_parts[1].strip().split(",")[-1] target = row_parts[1].strip().split(",")[-1]
if mnemonic in branch_likely_instructions: if mnemonic in branch_likely_instructions:
target = hex(int(target, 16) - 4)[2:] target = hex(int(target, 16) - 4)[2:]
branch_targets.append(target.strip()) branch_target = target.strip()
else:
branch_targets.append(None) output.append(
Line(
mnemonic=mnemonic,
diff_row=row,
original=original,
line_num=line_num,
branch_target=branch_target,
source_lines=source_lines,
comment=comment,
)
)
source_lines = []
if args.stop_jrra and mnemonic == "jr" and row_parts[1].strip() == "ra": if args.stop_jrra and mnemonic == "jr" and row_parts[1].strip() == "ra":
break break
# Cleanup whitespace # Cleanup whitespace, after relocation fixups have happened
originals = [original.strip() for original in originals] output = [
originals = [ line._replace(original=cleanup_whitespace(line.original)) for line in output
"".join(f"{o:<8s}" for o in original.split("\t")) for original in originals
] ]
# return diff_rows, diff_rows, line_nums
return mnemonics, diff_rows, originals, line_nums, branch_targets, source_lines, comments return output
def format_single_line_diff(line1, line2, column_width): def format_single_line_diff(line1, line2, column_width):
@ -704,20 +742,13 @@ def diff_sequences(seq1, seq2):
def do_diff(basedump, mydump): def do_diff(basedump, mydump):
asm_lines1 = basedump.split("\n")
asm_lines2 = mydump.split("\n")
output = [] output = []
# TODO: status line? # TODO: status line?
# output.append(sha1sum(mydump)) # output.append(sha1sum(mydump))
mnemonics1, asm_lines1, originals1, line_nums1, branch_targets1, _, _ = process( lines1 = process(basedump.split("\n"))
asm_lines1 lines2 = process(mydump.split("\n"))
)
mnemonics2, asm_lines2, originals2, line_nums2, branch_targets2, source_lines2, comments2 = process(
asm_lines2
)
sc1 = SymbolColorer(0) sc1 = SymbolColorer(0)
sc2 = SymbolColorer(0) sc2 = SymbolColorer(0)
@ -729,68 +760,56 @@ def do_diff(basedump, mydump):
bts2 = set() bts2 = set()
if args.show_branches: if args.show_branches:
for (bts, btset, sc) in [ for (lines, btset, sc) in [
(branch_targets1, bts1, sc5), (lines1, bts1, sc5),
(branch_targets2, bts2, sc6), (lines2, bts2, sc6),
]: ]:
for bt in bts: for line in lines:
bt = line.branch_target
if bt is not None: if bt is not None:
btset.add(bt + ":") btset.add(bt + ":")
sc.color_symbol(bt + ":") sc.color_symbol(bt + ":")
for (tag, i1, i2, j1, j2) in diff_sequences(mnemonics1, mnemonics2): for (tag, i1, i2, j1, j2) in diff_sequences(
lines1 = asm_lines1[i1:i2] [line.mnemonic for line in lines1], [line.mnemonic for line in lines2]
lines2 = asm_lines2[j1:j2] ):
for line1, line2 in itertools.zip_longest(lines1[i1:i2], lines2[j1:j2]):
for k, (line1, line2) in enumerate(itertools.zip_longest(lines1, lines2)):
if tag == "replace": if tag == "replace":
if line1 is None: if line1 is None:
tag = "insert" tag = "insert"
elif line2 is None: elif line2 is None:
tag = "delete" tag = "delete"
elif tag == "insert":
assert line1 is None
elif tag == "delete":
assert line2 is None
try:
original1 = originals1[i1 + k]
line_num1 = line_nums1[i1 + k]
except:
original1 = ""
line_num1 = ""
try:
original2 = originals2[j1 + k]
line_num2 = line_nums2[j1 + k]
except:
original2 = ""
line_num2 = ""
has1 = has2 = True
line_color1 = line_color2 = sym_color = Fore.RESET line_color1 = line_color2 = sym_color = Fore.RESET
line_prefix = " " line_prefix = " "
if line1 == line2: if line1 and line2 and line1.diff_row == line2.diff_row:
if not line1: if maybe_normalize_large_imms(
has1 = has2 = False line1.original
if maybe_normalize_large_imms(original1) == maybe_normalize_large_imms( ) == maybe_normalize_large_imms(line2.original):
original2 out1 = line1.original
): out2 = line2.original
out1 = original1 elif line1.diff_row == "<delay-slot>":
out2 = original2 out1 = f"{Style.BRIGHT}{Fore.LIGHTBLACK_EX}{line1.original}"
elif line1 == "<delay-slot>": out2 = f"{Style.BRIGHT}{Fore.LIGHTBLACK_EX}{line2.original}"
out1 = f"{Style.DIM}{original1}"
out2 = f"{Style.DIM}{original2}"
else: else:
mnemonic = original1.split()[0] mnemonic = line1.original.split()[0]
out1, out2 = original1, original2 out1, out2 = line1.original, line2.original
branch1 = branch2 = "" branch1 = branch2 = ""
if mnemonic in instructions_with_address_immediates: if mnemonic in instructions_with_address_immediates:
out1, branch1 = split_off_branch(original1) out1, branch1 = split_off_branch(line1.original)
out2, branch2 = split_off_branch(original2) out2, branch2 = split_off_branch(line2.original)
branchless1 = out1 branchless1 = out1
branchless2 = out2 branchless2 = out2
out1, out2 = color_imms(out1, out2) out1, out2 = color_imms(out1, out2)
same_relative_target = False same_relative_target = False
if branch_targets1[i1 + k] is not None and branch_targets2[j1 + k] is not None: if line1.branch_target is not None and line2.branch_target is not None:
relative_target1 = eval_line_num(branch_targets1[i1 + k]) - eval_line_num(line_num1) relative_target1 = eval_line_num(line1.branch_target) - eval_line_num(line1.line_num)
relative_target2 = eval_line_num(branch_targets2[j1 + k]) - eval_line_num(line_num2) relative_target2 = eval_line_num(line2.branch_target) - eval_line_num(line2.line_num)
same_relative_target = relative_target1 == relative_target2 same_relative_target = relative_target1 == relative_target2
if not same_relative_target: if not same_relative_target:
@ -805,14 +824,10 @@ def do_diff(basedump, mydump):
line_prefix = "i" line_prefix = "i"
else: else:
out1 = re.sub( out1 = re.sub(
re_sprel, re_sprel, lambda s: sc3.color_symbol(s.group()), out1,
lambda s: sc3.color_symbol(s.group()),
out1,
) )
out2 = re.sub( out2 = re.sub(
re_sprel, re_sprel, lambda s: sc4.color_symbol(s.group()), out2,
lambda s: sc4.color_symbol(s.group()),
out2,
) )
if normalize_stack(branchless1) == normalize_stack(branchless2): if normalize_stack(branchless1) == normalize_stack(branchless2):
# only stack differences (luckily stack and imm # only stack differences (luckily stack and imm
@ -823,76 +838,80 @@ def do_diff(basedump, mydump):
else: else:
# regs differences and maybe imms as well # regs differences and maybe imms as well
out1 = re.sub( out1 = re.sub(
re_regs, lambda s: sc1.color_symbol(s.group()), out1 re_reg, lambda s: sc1.color_symbol(s.group()), out1
) )
out2 = re.sub( out2 = re.sub(
re_regs, lambda s: sc2.color_symbol(s.group()), out2 re_reg, lambda s: sc2.color_symbol(s.group()), out2
) )
line_color1 = line_color2 = sym_color = Fore.YELLOW line_color1 = line_color2 = sym_color = Fore.YELLOW
line_prefix = "r" line_prefix = "r"
elif tag in ["replace", "equal"]: elif line1 and line2:
line_prefix = "|" line_prefix = "|"
line_color1 = Fore.LIGHTBLUE_EX line_color1 = Fore.LIGHTBLUE_EX
line_color2 = Fore.LIGHTBLUE_EX line_color2 = Fore.LIGHTBLUE_EX
sym_color = Fore.LIGHTBLUE_EX sym_color = Fore.LIGHTBLUE_EX
out1 = original1 out1 = line1.original
out2 = original2 out2 = line2.original
elif tag == "delete": elif line1:
line_prefix = "<" line_prefix = "<"
line_color1 = line_color2 = sym_color = Fore.RED line_color1 = line_color2 = sym_color = Fore.RED
has2 = False out1 = line1.original
out1 = original1
out2 = "" out2 = ""
elif tag == "insert": elif line2:
line_prefix = ">" line_prefix = ">"
line_color1 = line_color2 = sym_color = Fore.GREEN line_color1 = line_color2 = sym_color = Fore.GREEN
has1 = False
out1 = "" out1 = ""
out2 = original2 out2 = line2.original
in_arrow1 = " " in_arrow1 = " "
in_arrow2 = " " in_arrow2 = " "
out_arrow1 = "" out_arrow1 = ""
out_arrow2 = "" out_arrow2 = ""
line_num1 = line_num1 if has1 else ""
line_num2 = line_num2 if has2 else ""
if args.show_branches and has1: if args.show_branches and line1:
if line_num1 in bts1: if line1.line_num in bts1:
in_arrow1 = sc5.color_symbol(line_num1, "~>") + line_color1 in_arrow1 = sc5.color_symbol(line1.line_num, "~>") + line_color1
if branch_targets1[i1 + k] is not None: if line1.branch_target is not None:
out_arrow1 = " " + sc5.color_symbol( out_arrow1 = " " + sc5.color_symbol(line1.branch_target + ":", "~>")
branch_targets1[i1 + k] + ":", "~>" if args.show_branches and line2:
) if line2.line_num in bts2:
if args.show_branches and has2: in_arrow2 = sc6.color_symbol(line2.line_num, "~>") + line_color2
if line_num2 in bts2: if line2.branch_target is not None:
in_arrow2 = sc6.color_symbol(line_num2, "~>") + line_color2 out_arrow2 = " " + sc6.color_symbol(line2.branch_target + ":", "~>")
if branch_targets2[j1 + k] is not None:
out_arrow2 = " " + sc6.color_symbol(
branch_targets2[j1 + k] + ":", "~>"
)
if args.source and has2 and comments2[j1 + k] is not None: if args.source and line2 and line2.comment:
out2 += f" {comments2[j1 + k][0]}" out2 += f" {line2.comment}"
line_num1 = line1.line_num if line1 else ""
line_num2 = line2.line_num if line2 else ""
out1 = f"{line_color1}{line_num1} {in_arrow1} {out1}{Style.RESET_ALL}{out_arrow1}" out1 = f"{line_color1}{line_num1} {in_arrow1} {out1}{Style.RESET_ALL}{out_arrow1}"
out2 = f"{line_color2}{line_num2} {in_arrow2} {out2}{Style.RESET_ALL}{out_arrow2}" out2 = f"{line_color2}{line_num2} {in_arrow2} {out2}{Style.RESET_ALL}{out_arrow2}"
mid = f"{sym_color}{line_prefix} " mid = f"{sym_color}{line_prefix} "
for source_line in source_lines2[j1 + k]: if line2:
color = Style.DIM for source_line in line2.source_lines:
# File names and function names color = Style.DIM
if source_line and source_line[0] != "|": # File names and function names
color += Style.BRIGHT if source_line and source_line[0] != "|":
# Function names color += Style.BRIGHT
if source_line.endswith("():"): # Function names
# Underline. Colorama does not provide this feature, unfortunately. if source_line.endswith("():"):
color += "\u001b[4m" # Underline. Colorama does not provide this feature, unfortunately.
try: color += "\u001b[4m"
source_line = cxxfilt.demangle(source_line[:-3], external_only=False) try:
except: source_line = cxxfilt.demangle(
pass source_line[:-3], external_only=False
output.append(format_single_line_diff("", f" {color}{source_line}{Style.RESET_ALL}", args.column_width)) )
except:
pass
output.append(
format_single_line_diff(
"",
f" {color}{source_line}{Style.RESET_ALL}",
args.column_width,
)
)
output.append(format_single_line_diff(out1, mid + out2, args.column_width)) output.append(format_single_line_diff(out1, mid + out2, args.column_width))

View File

@ -4,14 +4,38 @@
#include "ultra64.h" #include "ultra64.h"
typedef struct { typedef struct {
/* 0x00 */ char unk_00[0x68]; /* 0x000 */ s16 unk_00;
/* 0x68 */ u16 demoButtonInput; /* 0x002 */ s16 unk_02;
/* 0x6A */ s8 demoStickX; /* 0x004 */ char unk_04[0x44];
/* 0x6B */ s8 demoStickY; /* 0x048 */ u16 unk_48[4];
/* 0x6C */ char unk_6C[0x5]; /* 0x050 */ u16 unk_50[4];
/* 0x71 */ s8 demoState; /* 0x058 */ char unk_58[0x10];
/* 0x72 */ char unk_72[8]; /* 0x068 */ u16 demoButtonInput;
/* 0x7A */ s8 audio_unk; /* 0x06A */ s8 demoStickX;
/* 0x06B */ s8 demoStickY;
/* 0x06C */ char unk_6C[0x5];
/* 0x071 */ s8 demoState;
/* 0x072 */ char unk_72[3];
/* 0x075 */ s8 unk_75;
/* 0x076 */ char unk_76[3];
/* 0x079 */ s8 unk_79;
/* 0x07A */ s8 musicEnabled;
/* 0x07B */ char unk_7B;
/* 0x07C */ s8 unk_7C;
/* 0x07D */ char unk_7D[4];
/* 0x081 */ s8 unk_81;
/* 0x082 */ s8 unk_82;
/* 0x083 */ s8 unk_83;
/* 0x084 */ char unk_84[0x24];
/* 0x0A8 */ s8 unk_A8;
/* 0x0A9 */ char unk_A9;
/* 0x0AA */ s8 unk_AA;
/* 0x0AB */ char unk_AB[0x91];
/* 0x13C */ s16 unk_13C;
/* 0x13E */ char unk_13E[0xA];
/* 0x148 */ s16 unk_148;
/* 0x14A */ char unk_14A[0x1E];
/* 0x168 */ s32 unk_168;
} game_status; } game_status;
typedef struct { typedef struct {

View File

@ -34,7 +34,7 @@ SECTIONS
/* 0x80026740 001B40-003BF0 [20B0] */ /* 0x80026740 001B40-003BF0 [20B0] */
.text80026740 0x80026740 : AT(0x001B40) { .text80026740 0x80026740 : AT(0x001B40) {
build/asm/code_1b40_len_20b0.o(.text80026740); build/src/code_1b40_len_20b0.o(.text);
} }
/* 0x800287F0 003BF0-0042E0 [6F0] */ /* 0x800287F0 003BF0-0042E0 [6F0] */

View File

@ -0,0 +1,149 @@
#define F3DEX_GBI_2
#include "common.h"
extern Gfx D_00074210[];
extern Gfx D_00074230[];
extern Gfx *D_8009A66C[1];
extern int D_000759B0[];
extern int D_000759B0_end[]; //A55D0
extern int D_000A5DD0[];
extern int D_000A5DD0_end[]; //E79B0
extern int D_000E79B0[];
extern int D_000E79B0_end[]; //FEE30
extern int D_000FEE30[];
extern int D_000FEE30_end[]; //102610
extern int D_00102610[];
extern int D_00102610_end[]; //10CC10
extern int D_0010CC10[];
extern int D_0010CC10_end[]; //10F1B0
extern int D_802DBD40[];
extern int D_800DC500[];
extern int D_802C3000[];
extern int D_802E0D90[];
extern int D_8010F6D0[];
extern int D_802EB3D0[];
extern u8 D_80074021;
extern s32 D_8009A5D8;
extern s32 D_8009A650[1];
void dma_copy(void *, void*, void*);
INCLUDE_ASM(code_1b40_len_20b0, step_game_loop);
INCLUDE_ASM(code_1b40_len_20b0, func_800269EC);
INCLUDE_ASM(code_1b40_len_20b0, gfx_draw_frame);
INCLUDE_ASM(code_1b40_len_20b0, load_engine_data);
/*void load_engine_data(void) {
game_status *phi_s0;
s32 i;
dma_copy(D_000FEE30, D_000FEE30_end, D_802DBD40);
dma_copy(D_000759B0, D_000759B0_end, D_800DC500);
dma_copy(D_000E79B0, D_000E79B0_end, D_802C3000);
dma_copy(D_00102610, D_00102610_end, D_802E0D90);
dma_copy(D_000A5DD0, D_000A5DD0_end, D_8010F6D0);
dma_copy(D_0010CC10, D_0010CC10_end, D_802EB3D0);
(*gGameStatusPtr)->unk_79 = D_8009A650[0] = 0;
//do {
phi_s0 = *gGameStatusPtr;
phi_s0->musicEnabled = 1;
(*gGameStatusPtr)->unk_148 = 0;
//} while (0);
phi_s0->unk_7C = 1;
(*gGameStatusPtr)->unk_A8 = -1;
(*gGameStatusPtr)->unk_AA = 0;
(*gGameStatusPtr)->unk_81 = 0;
(*gGameStatusPtr)->unk_82 = -8;
(*gGameStatusPtr)->unk_83 = 4;
D_8009A5D8 = 0;
(*gGameStatusPtr)->unk_75 = (*gGameStatusPtr)->unk_13C = 0;
D_80074021 = 5;
(*gGameStatusPtr)->unk_168 = 0;
fio_init_flash();
func_80028838();
general_heap_create();
func_8011D890();
func_801230B8();
clear_script_list();
create_cameras_a();
clear_player_status();
func_802DD8F8(0);
func_80120BB0();
func_8011E224();
clear_model_data();
func_80148040();
func_80145DF8();
clear_character_set();
clear_printers();
func_80112B98();
func_800384BC();
func_80141100();
clear_trigger_data();
func_80110CB8(0);
clear_player_data();
func_8003E338();
func_80138108();
func_80059C9C();
clear_saved_variables();
clear_item_entity_data();
func_8014A498();
func_80147230();
func_80149618();
func_801473F0();
func_8002BA40();
poll_rumble();
phi_s0 = *gGameStatusPtr;
for(i = 0; i < 4; i++)
{
phi_s0->unk_50[i] = 3;
phi_s0->unk_48[i] = 0xC;
}
D_8009A650[0] |= 8;
set_game_mode(0);
}*/
INCLUDE_ASM(code_1b40_len_20b0, func_80027088);
s32 func_80027190(void) {
return D_8009A5D8;
}
INCLUDE_ASM(code_1b40_len_20b0, func_800271A0);
/*void func_800271A0(void) {
Gfx *temp = D_8009A66C[0] + 1;
gSPSegment(D_8009A66C[0], 0x00, 0x00000000);
D_8009A66C[0] = temp;
gSPDisplayList(temp, &D_00074230);
D_8009A66C[0]++;
gSPDisplayList(D_8009A66C[0]++, &D_00074210);
}*/
INCLUDE_ASM(code_1b40_len_20b0, func_800271FC);
INCLUDE_ASM(code_1b40_len_20b0, func_8002725C);
INCLUDE_ASM(code_1b40_len_20b0, func_80027600);
INCLUDE_ASM(code_1b40_len_20b0, func_80027774);
INCLUDE_ASM(code_1b40_len_20b0, func_800279B4);
INCLUDE_ASM(code_1b40_len_20b0, func_80027BAC);
INCLUDE_ASM(code_1b40_len_20b0, func_80027E10);

View File

@ -1,3 +1,25 @@
D_000759B0 = 0x000759B0;
D_000759B0_end = 0x000A5DD0;
D_000A5DD0 = 0x000A5DD0;
D_000A5DD0_end = 0x000E79B0;
D_000E79B0 = 0x000E79B0;
D_000E79B0_end = 0x000FEE30;
D_000FEE30 = 0x000FEE30;
D_000FEE30_end = 0x00102610;
D_00102610 = 0x00102610;
D_00102610_end = 0x0010CC10;
D_0010CC10 = 0x0010CC10;
D_0010CC10_end = 0x0010F1B0;
D_80074021 = 0x80074021;
D_8009A5D8 = 0x8009A5D8;
D_8009A650 = 0x8009A650;
D_800DC500 = 0x800DC500;
D_8010F6D0 = 0x8010F6D0;
D_802C3000 = 0x802C3000;
D_802DBD40 = 0x802DBD40;
D_802E0D90 = 0x802E0D90;
D_802EB3D0 = 0x802EB3D0;
D_003169F0 = 0x003169F0; D_003169F0 = 0x003169F0;
D_00316A70 = 0x00316A70; D_00316A70 = 0x00316A70;
D_00316C00 = 0x00316C00; D_00316C00 = 0x00316C00;