From 08529a62330e287489974ce5e3240f1c1b5d12c1 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sun, 17 Oct 2021 23:07:01 -0400 Subject: [PATCH] I believe epcInfo is just __OSThreadContext, and I've cleaned up some naming and another func --- asm/non_matchings/thread0_epc/func_800B6F50.s | 4 +- .../thread0_epc/render_epc_lock_up_display.s | 148 +++++++++--------- .../thread0_epc/{thread0.s => thread0_Main.s} | 2 +- src/thread0_epc.c | 82 +++++----- src/thread0_epc.h | 2 +- 5 files changed, 121 insertions(+), 117 deletions(-) rename asm/non_matchings/thread0_epc/{thread0.s => thread0_Main.s} (99%) diff --git a/asm/non_matchings/thread0_epc/func_800B6F50.s b/asm/non_matchings/thread0_epc/func_800B6F50.s index 381a5b76..54d85ef3 100644 --- a/asm/non_matchings/thread0_epc/func_800B6F50.s +++ b/asm/non_matchings/thread0_epc/func_800B6F50.s @@ -4,10 +4,10 @@ glabel func_800B6F50 /* 0B7B58 800B6F58 AFBF001C */ sw $ra, 0x1c($sp) /* 0B7B5C 800B6F5C 25CE95E0 */ addiu $t6, %lo(D_801295E0) # addiu $t6, $t6, -0x6a20 /* 0B7B60 800B6F60 3C048013 */ lui $a0, %hi(D_801295E0) # $a0, 0x8013 -/* 0B7B64 800B6F64 3C06800B */ lui $a2, %hi(thread0) # $a2, 0x800b +/* 0B7B64 800B6F64 3C06800B */ lui $a2, %hi(thread0_Main) # $a2, 0x800b /* 0B7B68 800B6F68 240F00FF */ li $t7, 255 /* 0B7B6C 800B6F6C AFAF0014 */ sw $t7, 0x14($sp) -/* 0B7B70 800B6F70 24C66FC4 */ addiu $a2, %lo(thread0) # addiu $a2, $a2, 0x6fc4 +/* 0B7B70 800B6F70 24C66FC4 */ addiu $a2, %lo(thread0_Main) # addiu $a2, $a2, 0x6fc4 /* 0B7B74 800B6F74 248495E0 */ addiu $a0, %lo(D_801295E0) # addiu $a0, $a0, -0x6a20 /* 0B7B78 800B6F78 AFAE0010 */ sw $t6, 0x10($sp) /* 0B7B7C 800B6F7C 00002825 */ move $a1, $zero diff --git a/asm/non_matchings/thread0_epc/render_epc_lock_up_display.s b/asm/non_matchings/thread0_epc/render_epc_lock_up_display.s index a66d70a5..f1c321e4 100644 --- a/asm/non_matchings/thread0_epc/render_epc_lock_up_display.s +++ b/asm/non_matchings/thread0_epc/render_epc_lock_up_display.s @@ -116,9 +116,9 @@ glabel render_epc_lock_up_display /* 0B8494 800B7894 00000000 */ nop glabel L800B7898 /* 0B8498 800B7898 444AF800 */ cfc1 $t2, $31 -/* 0B849C 800B789C 3C038013 */ lui $v1, %hi(gEpcInfo) # $v1, 0x8013 +/* 0B849C 800B789C 3C038013 */ lui $v1, %hi(gThread0Context) # $v1, 0x8013 /* 0B84A0 800B78A0 35410003 */ ori $at, $t2, 3 -/* 0B84A4 800B78A4 24639800 */ addiu $v1, %lo(gEpcInfo) # addiu $v1, $v1, -0x6800 +/* 0B84A4 800B78A4 24639800 */ addiu $v1, %lo(gThread0Context) # addiu $v1, $v1, -0x6800 /* 0B84A8 800B78A8 38210002 */ xori $at, $at, 2 /* 0B84AC 800B78AC 44C1F800 */ ctc1 $at, $31 /* 0B84B0 800B78B0 C4640130 */ lwc1 $f4, 0x130($v1) @@ -150,15 +150,15 @@ glabel L800B7898 /* 0B8518 800B7918 44D9F800 */ ctc1 $t9, $31 /* 0B851C 800B791C 15C1002F */ bne $t6, $at, .L800B79DC /* 0B8520 800B7920 AC580008 */ sw $t8, 8($v0) -/* 0B8524 800B7924 3C058013 */ lui $a1, %hi(gEpcInfo+0x11C) # $a1, 0x8013 -/* 0B8528 800B7928 8CA5991C */ lw $a1, %lo(gEpcInfo+0x11C)($a1) +/* 0B8524 800B7924 3C058013 */ lui $a1, %hi(gThread0Context+0x11C) # $a1, 0x8013 +/* 0B8528 800B7928 8CA5991C */ lw $a1, %lo(gThread0Context+0x11C)($a1) /* 0B852C 800B792C 3C04800F */ lui $a0, %hi(D_800E8F18) # $a0, 0x800f /* 0B8530 800B7930 0C02D7B7 */ jal render_printf /* 0B8534 800B7934 24848F18 */ addiu $a0, %lo(D_800E8F18) # addiu $a0, $a0, -0x70e8 -/* 0B8538 800B7938 3C098013 */ lui $t1, %hi(gEpcInfo+0x3C) # $t1, 0x8013 -/* 0B853C 800B793C 3C0B8013 */ lui $t3, %hi(gEpcInfo+0x44) # $t3, 0x8013 -/* 0B8540 800B7940 8D669844 */ lw $a2, %lo(gEpcInfo+0x44)($t3) -/* 0B8544 800B7944 8D25983C */ lw $a1, %lo(gEpcInfo+0x3C)($t1) +/* 0B8538 800B7938 3C098013 */ lui $t1, %hi(gThread0Context+0x3C) # $t1, 0x8013 +/* 0B853C 800B793C 3C0B8013 */ lui $t3, %hi(gThread0Context+0x44) # $t3, 0x8013 +/* 0B8540 800B7940 8D669844 */ lw $a2, %lo(gThread0Context+0x44)($t3) +/* 0B8544 800B7944 8D25983C */ lw $a1, %lo(gThread0Context+0x3C)($t1) /* 0B8548 800B7948 3C04800F */ lui $a0, %hi(D_800E8F28) # $a0, 0x800f /* 0B854C 800B794C 0C02D7B7 */ jal render_printf /* 0B8550 800B7950 24848F28 */ addiu $a0, %lo(D_800E8F28) # addiu $a0, $a0, -0x70d8 @@ -204,23 +204,23 @@ glabel L800B7898 /* 0B85E0 800B79E0 8C650014 */ lw $a1, 0x14($v1) /* 0B85E4 800B79E4 0C02D7B7 */ jal render_printf /* 0B85E8 800B79E8 24848F6C */ addiu $a0, %lo(D_800E8F6C) # addiu $a0, $a0, -0x7094 -/* 0B85EC 800B79EC 3C058013 */ lui $a1, %hi(gEpcInfo+0x11C) # $a1, 0x8013 -/* 0B85F0 800B79F0 8CA5991C */ lw $a1, %lo(gEpcInfo+0x11C)($a1) +/* 0B85EC 800B79EC 3C058013 */ lui $a1, %hi(gThread0Context+0x11C) # $a1, 0x8013 +/* 0B85F0 800B79F0 8CA5991C */ lw $a1, %lo(gThread0Context+0x11C)($a1) /* 0B85F4 800B79F4 3C04800F */ lui $a0, %hi(D_800E8F84) # $a0, 0x800f /* 0B85F8 800B79F8 0C02D7B7 */ jal render_printf /* 0B85FC 800B79FC 24848F84 */ addiu $a0, %lo(D_800E8F84) # addiu $a0, $a0, -0x707c -/* 0B8600 800B7A00 3C058013 */ lui $a1, %hi(gEpcInfo+0x120) # $a1, 0x8013 -/* 0B8604 800B7A04 8CA59920 */ lw $a1, %lo(gEpcInfo+0x120)($a1) +/* 0B8600 800B7A00 3C058013 */ lui $a1, %hi(gThread0Context+0x120) # $a1, 0x8013 +/* 0B8604 800B7A04 8CA59920 */ lw $a1, %lo(gThread0Context+0x120)($a1) /* 0B8608 800B7A08 3C04800F */ lui $a0, %hi(D_800E8F94) # $a0, 0x800f /* 0B860C 800B7A0C 0C02D7B7 */ jal render_printf /* 0B8610 800B7A10 24848F94 */ addiu $a0, %lo(D_800E8F94) # addiu $a0, $a0, -0x706c -/* 0B8614 800B7A14 3C058013 */ lui $a1, %hi(gEpcInfo+0x118) # $a1, 0x8013 -/* 0B8618 800B7A18 8CA59918 */ lw $a1, %lo(gEpcInfo+0x118)($a1) +/* 0B8614 800B7A14 3C058013 */ lui $a1, %hi(gThread0Context+0x118) # $a1, 0x8013 +/* 0B8618 800B7A18 8CA59918 */ lw $a1, %lo(gThread0Context+0x118)($a1) /* 0B861C 800B7A1C 3C04800F */ lui $a0, %hi(D_800E8FA4) # $a0, 0x800f /* 0B8620 800B7A20 0C02D7B7 */ jal render_printf /* 0B8624 800B7A24 24848FA4 */ addiu $a0, %lo(D_800E8FA4) # addiu $a0, $a0, -0x705c -/* 0B8628 800B7A28 3C058013 */ lui $a1, %hi(gEpcInfo+0x124) # $a1, 0x8013 -/* 0B862C 800B7A2C 8CA59924 */ lw $a1, %lo(gEpcInfo+0x124)($a1) +/* 0B8628 800B7A28 3C058013 */ lui $a1, %hi(gThread0Context+0x124) # $a1, 0x8013 +/* 0B862C 800B7A2C 8CA59924 */ lw $a1, %lo(gThread0Context+0x124)($a1) /* 0B8630 800B7A30 3C04800F */ lui $a0, %hi(D_800E8FB4) # $a0, 0x800f /* 0B8634 800B7A34 0C02D7B7 */ jal render_printf /* 0B8638 800B7A38 24848FB4 */ addiu $a0, %lo(D_800E8FB4) # addiu $a0, $a0, -0x704c @@ -256,91 +256,91 @@ glabel L800B7898 /* 0B86A4 800B7AA4 3C04800F */ lui $a0, %hi(D_800E8FDC) # $a0, 0x800f /* 0B86A8 800B7AA8 0C02D7B7 */ jal render_printf /* 0B86AC 800B7AAC 24848FDC */ addiu $a0, %lo(D_800E8FDC) # addiu $a0, $a0, -0x7024 -/* 0B86B0 800B7AB0 3C198013 */ lui $t9, %hi(gEpcInfo+0x24) # $t9, 0x8013 -/* 0B86B4 800B7AB4 3C0F8013 */ lui $t7, %hi(gEpcInfo+0x2C) # $t7, 0x8013 -/* 0B86B8 800B7AB8 3C098013 */ lui $t1, %hi(gEpcInfo+0x34) # $t1, 0x8013 -/* 0B86BC 800B7ABC 8D279834 */ lw $a3, %lo(gEpcInfo+0x34)($t1) -/* 0B86C0 800B7AC0 8DE6982C */ lw $a2, %lo(gEpcInfo+0x2C)($t7) -/* 0B86C4 800B7AC4 8F259824 */ lw $a1, %lo(gEpcInfo+0x24)($t9) +/* 0B86B0 800B7AB0 3C198013 */ lui $t9, %hi(gThread0Context+0x24) # $t9, 0x8013 +/* 0B86B4 800B7AB4 3C0F8013 */ lui $t7, %hi(gThread0Context+0x2C) # $t7, 0x8013 +/* 0B86B8 800B7AB8 3C098013 */ lui $t1, %hi(gThread0Context+0x34) # $t1, 0x8013 +/* 0B86BC 800B7ABC 8D279834 */ lw $a3, %lo(gThread0Context+0x34)($t1) +/* 0B86C0 800B7AC0 8DE6982C */ lw $a2, %lo(gThread0Context+0x2C)($t7) +/* 0B86C4 800B7AC4 8F259824 */ lw $a1, %lo(gThread0Context+0x24)($t9) /* 0B86C8 800B7AC8 3C04800F */ lui $a0, %hi(D_800E8FE0) # $a0, 0x800f /* 0B86CC 800B7ACC 0C02D7B7 */ jal render_printf /* 0B86D0 800B7AD0 24848FE0 */ addiu $a0, %lo(D_800E8FE0) # addiu $a0, $a0, -0x7020 -/* 0B86D4 800B7AD4 3C0B8013 */ lui $t3, %hi(gEpcInfo+0x3C) # $t3, 0x8013 -/* 0B86D8 800B7AD8 3C0D8013 */ lui $t5, %hi(gEpcInfo+0x44) # $t5, 0x8013 -/* 0B86DC 800B7ADC 3C198013 */ lui $t9, %hi(gEpcInfo+0x4C) # $t9, 0x8013 -/* 0B86E0 800B7AE0 8F27984C */ lw $a3, %lo(gEpcInfo+0x4C)($t9) -/* 0B86E4 800B7AE4 8DA69844 */ lw $a2, %lo(gEpcInfo+0x44)($t5) -/* 0B86E8 800B7AE8 8D65983C */ lw $a1, %lo(gEpcInfo+0x3C)($t3) +/* 0B86D4 800B7AD4 3C0B8013 */ lui $t3, %hi(gThread0Context+0x3C) # $t3, 0x8013 +/* 0B86D8 800B7AD8 3C0D8013 */ lui $t5, %hi(gThread0Context+0x44) # $t5, 0x8013 +/* 0B86DC 800B7ADC 3C198013 */ lui $t9, %hi(gThread0Context+0x4C) # $t9, 0x8013 +/* 0B86E0 800B7AE0 8F27984C */ lw $a3, %lo(gThread0Context+0x4C)($t9) +/* 0B86E4 800B7AE4 8DA69844 */ lw $a2, %lo(gThread0Context+0x44)($t5) +/* 0B86E8 800B7AE8 8D65983C */ lw $a1, %lo(gThread0Context+0x3C)($t3) /* 0B86EC 800B7AEC 3C04800F */ lui $a0, %hi(D_800E9000) # $a0, 0x800f /* 0B86F0 800B7AF0 0C02D7B7 */ jal render_printf /* 0B86F4 800B7AF4 24849000 */ addiu $a0, %lo(D_800E9000) # addiu $a0, $a0, -0x7000 -/* 0B86F8 800B7AF8 3C0F8013 */ lui $t7, %hi(gEpcInfo+0x54) # $t7, 0x8013 -/* 0B86FC 800B7AFC 3C098013 */ lui $t1, %hi(gEpcInfo+0x5C) # $t1, 0x8013 -/* 0B8700 800B7B00 3C0B8013 */ lui $t3, %hi(gEpcInfo+0x64) # $t3, 0x8013 -/* 0B8704 800B7B04 8D679864 */ lw $a3, %lo(gEpcInfo+0x64)($t3) -/* 0B8708 800B7B08 8D26985C */ lw $a2, %lo(gEpcInfo+0x5C)($t1) -/* 0B870C 800B7B0C 8DE59854 */ lw $a1, %lo(gEpcInfo+0x54)($t7) +/* 0B86F8 800B7AF8 3C0F8013 */ lui $t7, %hi(gThread0Context+0x54) # $t7, 0x8013 +/* 0B86FC 800B7AFC 3C098013 */ lui $t1, %hi(gThread0Context+0x5C) # $t1, 0x8013 +/* 0B8700 800B7B00 3C0B8013 */ lui $t3, %hi(gThread0Context+0x64) # $t3, 0x8013 +/* 0B8704 800B7B04 8D679864 */ lw $a3, %lo(gThread0Context+0x64)($t3) +/* 0B8708 800B7B08 8D26985C */ lw $a2, %lo(gThread0Context+0x5C)($t1) +/* 0B870C 800B7B0C 8DE59854 */ lw $a1, %lo(gThread0Context+0x54)($t7) /* 0B8710 800B7B10 3C04800F */ lui $a0, %hi(D_800E9020) # $a0, 0x800f /* 0B8714 800B7B14 0C02D7B7 */ jal render_printf /* 0B8718 800B7B18 24849020 */ addiu $a0, %lo(D_800E9020) # addiu $a0, $a0, -0x6fe0 -/* 0B871C 800B7B1C 3C0D8013 */ lui $t5, %hi(gEpcInfo+0x6C) # $t5, 0x8013 -/* 0B8720 800B7B20 3C198013 */ lui $t9, %hi(gEpcInfo+0x74) # $t9, 0x8013 -/* 0B8724 800B7B24 3C0F8013 */ lui $t7, %hi(gEpcInfo+0x7C) # $t7, 0x8013 -/* 0B8728 800B7B28 8DE7987C */ lw $a3, %lo(gEpcInfo+0x7C)($t7) -/* 0B872C 800B7B2C 8F269874 */ lw $a2, %lo(gEpcInfo+0x74)($t9) -/* 0B8730 800B7B30 8DA5986C */ lw $a1, %lo(gEpcInfo+0x6C)($t5) +/* 0B871C 800B7B1C 3C0D8013 */ lui $t5, %hi(gThread0Context+0x6C) # $t5, 0x8013 +/* 0B8720 800B7B20 3C198013 */ lui $t9, %hi(gThread0Context+0x74) # $t9, 0x8013 +/* 0B8724 800B7B24 3C0F8013 */ lui $t7, %hi(gThread0Context+0x7C) # $t7, 0x8013 +/* 0B8728 800B7B28 8DE7987C */ lw $a3, %lo(gThread0Context+0x7C)($t7) +/* 0B872C 800B7B2C 8F269874 */ lw $a2, %lo(gThread0Context+0x74)($t9) +/* 0B8730 800B7B30 8DA5986C */ lw $a1, %lo(gThread0Context+0x6C)($t5) /* 0B8734 800B7B34 3C04800F */ lui $a0, %hi(D_800E9040) # $a0, 0x800f /* 0B8738 800B7B38 0C02D7B7 */ jal render_printf /* 0B873C 800B7B3C 24849040 */ addiu $a0, %lo(D_800E9040) # addiu $a0, $a0, -0x6fc0 -/* 0B8740 800B7B40 3C098013 */ lui $t1, %hi(gEpcInfo+0x84) # $t1, 0x8013 -/* 0B8744 800B7B44 3C0B8013 */ lui $t3, %hi(gEpcInfo+0x8C) # $t3, 0x8013 -/* 0B8748 800B7B48 3C0D8013 */ lui $t5, %hi(gEpcInfo+0x94) # $t5, 0x8013 -/* 0B874C 800B7B4C 8DA79894 */ lw $a3, %lo(gEpcInfo+0x94)($t5) -/* 0B8750 800B7B50 8D66988C */ lw $a2, %lo(gEpcInfo+0x8C)($t3) -/* 0B8754 800B7B54 8D259884 */ lw $a1, %lo(gEpcInfo+0x84)($t1) +/* 0B8740 800B7B40 3C098013 */ lui $t1, %hi(gThread0Context+0x84) # $t1, 0x8013 +/* 0B8744 800B7B44 3C0B8013 */ lui $t3, %hi(gThread0Context+0x8C) # $t3, 0x8013 +/* 0B8748 800B7B48 3C0D8013 */ lui $t5, %hi(gThread0Context+0x94) # $t5, 0x8013 +/* 0B874C 800B7B4C 8DA79894 */ lw $a3, %lo(gThread0Context+0x94)($t5) +/* 0B8750 800B7B50 8D66988C */ lw $a2, %lo(gThread0Context+0x8C)($t3) +/* 0B8754 800B7B54 8D259884 */ lw $a1, %lo(gThread0Context+0x84)($t1) /* 0B8758 800B7B58 3C04800F */ lui $a0, %hi(D_800E9060) # $a0, 0x800f /* 0B875C 800B7B5C 0C02D7B7 */ jal render_printf /* 0B8760 800B7B60 24849060 */ addiu $a0, %lo(D_800E9060) # addiu $a0, $a0, -0x6fa0 -/* 0B8764 800B7B64 3C198013 */ lui $t9, %hi(gEpcInfo+0x9C) # $t9, 0x8013 -/* 0B8768 800B7B68 3C0F8013 */ lui $t7, %hi(gEpcInfo+0xA4) # $t7, 0x8013 -/* 0B876C 800B7B6C 3C098013 */ lui $t1, %hi(gEpcInfo+0xAC) # $t1, 0x8013 -/* 0B8770 800B7B70 8D2798AC */ lw $a3, %lo(gEpcInfo+0xAC)($t1) -/* 0B8774 800B7B74 8DE698A4 */ lw $a2, %lo(gEpcInfo+0xA4)($t7) -/* 0B8778 800B7B78 8F25989C */ lw $a1, %lo(gEpcInfo+0x9C)($t9) +/* 0B8764 800B7B64 3C198013 */ lui $t9, %hi(gThread0Context+0x9C) # $t9, 0x8013 +/* 0B8768 800B7B68 3C0F8013 */ lui $t7, %hi(gThread0Context+0xA4) # $t7, 0x8013 +/* 0B876C 800B7B6C 3C098013 */ lui $t1, %hi(gThread0Context+0xAC) # $t1, 0x8013 +/* 0B8770 800B7B70 8D2798AC */ lw $a3, %lo(gThread0Context+0xAC)($t1) +/* 0B8774 800B7B74 8DE698A4 */ lw $a2, %lo(gThread0Context+0xA4)($t7) +/* 0B8778 800B7B78 8F25989C */ lw $a1, %lo(gThread0Context+0x9C)($t9) /* 0B877C 800B7B7C 3C04800F */ lui $a0, %hi(D_800E9080) # $a0, 0x800f /* 0B8780 800B7B80 0C02D7B7 */ jal render_printf /* 0B8784 800B7B84 24849080 */ addiu $a0, %lo(D_800E9080) # addiu $a0, $a0, -0x6f80 -/* 0B8788 800B7B88 3C0B8013 */ lui $t3, %hi(gEpcInfo+0xB4) # $t3, 0x8013 -/* 0B878C 800B7B8C 3C0D8013 */ lui $t5, %hi(gEpcInfo+0xBC) # $t5, 0x8013 -/* 0B8790 800B7B90 3C198013 */ lui $t9, %hi(gEpcInfo+0xC4) # $t9, 0x8013 -/* 0B8794 800B7B94 8F2798C4 */ lw $a3, %lo(gEpcInfo+0xC4)($t9) -/* 0B8798 800B7B98 8DA698BC */ lw $a2, %lo(gEpcInfo+0xBC)($t5) -/* 0B879C 800B7B9C 8D6598B4 */ lw $a1, %lo(gEpcInfo+0xB4)($t3) +/* 0B8788 800B7B88 3C0B8013 */ lui $t3, %hi(gThread0Context+0xB4) # $t3, 0x8013 +/* 0B878C 800B7B8C 3C0D8013 */ lui $t5, %hi(gThread0Context+0xBC) # $t5, 0x8013 +/* 0B8790 800B7B90 3C198013 */ lui $t9, %hi(gThread0Context+0xC4) # $t9, 0x8013 +/* 0B8794 800B7B94 8F2798C4 */ lw $a3, %lo(gThread0Context+0xC4)($t9) +/* 0B8798 800B7B98 8DA698BC */ lw $a2, %lo(gThread0Context+0xBC)($t5) +/* 0B879C 800B7B9C 8D6598B4 */ lw $a1, %lo(gThread0Context+0xB4)($t3) /* 0B87A0 800B7BA0 3C04800F */ lui $a0, %hi(D_800E90A0) # $a0, 0x800f /* 0B87A4 800B7BA4 0C02D7B7 */ jal render_printf /* 0B87A8 800B7BA8 248490A0 */ addiu $a0, %lo(D_800E90A0) # addiu $a0, $a0, -0x6f60 -/* 0B87AC 800B7BAC 3C0F8013 */ lui $t7, %hi(gEpcInfo+0xCC) # $t7, 0x8013 -/* 0B87B0 800B7BB0 3C098013 */ lui $t1, %hi(gEpcInfo+0xD4) # $t1, 0x8013 -/* 0B87B4 800B7BB4 3C0B8013 */ lui $t3, %hi(gEpcInfo+0xDC) # $t3, 0x8013 -/* 0B87B8 800B7BB8 8D6798DC */ lw $a3, %lo(gEpcInfo+0xDC)($t3) -/* 0B87BC 800B7BBC 8D2698D4 */ lw $a2, %lo(gEpcInfo+0xD4)($t1) -/* 0B87C0 800B7BC0 8DE598CC */ lw $a1, %lo(gEpcInfo+0xCC)($t7) +/* 0B87AC 800B7BAC 3C0F8013 */ lui $t7, %hi(gThread0Context+0xCC) # $t7, 0x8013 +/* 0B87B0 800B7BB0 3C098013 */ lui $t1, %hi(gThread0Context+0xD4) # $t1, 0x8013 +/* 0B87B4 800B7BB4 3C0B8013 */ lui $t3, %hi(gThread0Context+0xDC) # $t3, 0x8013 +/* 0B87B8 800B7BB8 8D6798DC */ lw $a3, %lo(gThread0Context+0xDC)($t3) +/* 0B87BC 800B7BBC 8D2698D4 */ lw $a2, %lo(gThread0Context+0xD4)($t1) +/* 0B87C0 800B7BC0 8DE598CC */ lw $a1, %lo(gThread0Context+0xCC)($t7) /* 0B87C4 800B7BC4 3C04800F */ lui $a0, %hi(D_800E90C0) # $a0, 0x800f /* 0B87C8 800B7BC8 0C02D7B7 */ jal render_printf /* 0B87CC 800B7BCC 248490C0 */ addiu $a0, %lo(D_800E90C0) # addiu $a0, $a0, -0x6f40 -/* 0B87D0 800B7BD0 3C0D8013 */ lui $t5, %hi(gEpcInfo+0xE4) # $t5, 0x8013 -/* 0B87D4 800B7BD4 3C198013 */ lui $t9, %hi(gEpcInfo+0xEC) # $t9, 0x8013 -/* 0B87D8 800B7BD8 3C0F8013 */ lui $t7, %hi(gEpcInfo+0xF4) # $t7, 0x8013 -/* 0B87DC 800B7BDC 8DE798F4 */ lw $a3, %lo(gEpcInfo+0xF4)($t7) -/* 0B87E0 800B7BE0 8F2698EC */ lw $a2, %lo(gEpcInfo+0xEC)($t9) -/* 0B87E4 800B7BE4 8DA598E4 */ lw $a1, %lo(gEpcInfo+0xE4)($t5) +/* 0B87D0 800B7BD0 3C0D8013 */ lui $t5, %hi(gThread0Context+0xE4) # $t5, 0x8013 +/* 0B87D4 800B7BD4 3C198013 */ lui $t9, %hi(gThread0Context+0xEC) # $t9, 0x8013 +/* 0B87D8 800B7BD8 3C0F8013 */ lui $t7, %hi(gThread0Context+0xF4) # $t7, 0x8013 +/* 0B87DC 800B7BDC 8DE798F4 */ lw $a3, %lo(gThread0Context+0xF4)($t7) +/* 0B87E0 800B7BE0 8F2698EC */ lw $a2, %lo(gThread0Context+0xEC)($t9) +/* 0B87E4 800B7BE4 8DA598E4 */ lw $a1, %lo(gThread0Context+0xE4)($t5) /* 0B87E8 800B7BE8 3C04800F */ lui $a0, %hi(D_800E90E0) # $a0, 0x800f /* 0B87EC 800B7BEC 0C02D7B7 */ jal render_printf /* 0B87F0 800B7BF0 248490E0 */ addiu $a0, %lo(D_800E90E0) # addiu $a0, $a0, -0x6f20 -/* 0B87F4 800B7BF4 3C098013 */ lui $t1, %hi(gEpcInfo+0xFC) # $t1, 0x8013 -/* 0B87F8 800B7BF8 3C0B8013 */ lui $t3, %hi(gEpcInfo+0x104) # $t3, 0x8013 -/* 0B87FC 800B7BFC 8D669904 */ lw $a2, %lo(gEpcInfo+0x104)($t3) -/* 0B8800 800B7C00 8D2598FC */ lw $a1, %lo(gEpcInfo+0xFC)($t1) +/* 0B87F4 800B7BF4 3C098013 */ lui $t1, %hi(gThread0Context+0xFC) # $t1, 0x8013 +/* 0B87F8 800B7BF8 3C0B8013 */ lui $t3, %hi(gThread0Context+0x104) # $t3, 0x8013 +/* 0B87FC 800B7BFC 8D669904 */ lw $a2, %lo(gThread0Context+0x104)($t3) +/* 0B8800 800B7C00 8D2598FC */ lw $a1, %lo(gThread0Context+0xFC)($t1) /* 0B8804 800B7C04 3C04800F */ lui $a0, %hi(D_800E9100) # $a0, 0x800f /* 0B8808 800B7C08 0C02D7B7 */ jal render_printf /* 0B880C 800B7C0C 24849100 */ addiu $a0, %lo(D_800E9100) # addiu $a0, $a0, -0x6f00 diff --git a/asm/non_matchings/thread0_epc/thread0.s b/asm/non_matchings/thread0_epc/thread0_Main.s similarity index 99% rename from asm/non_matchings/thread0_epc/thread0.s rename to asm/non_matchings/thread0_epc/thread0_Main.s index e6ff5a83..43d31a87 100644 --- a/asm/non_matchings/thread0_epc/thread0.s +++ b/asm/non_matchings/thread0_epc/thread0_Main.s @@ -1,4 +1,4 @@ -glabel thread0 +glabel thread0_Main /* 0B7BC4 800B6FC4 27BDFFC8 */ addiu $sp, $sp, -0x38 /* 0B7BC8 800B6FC8 AFB40028 */ sw $s4, 0x28($sp) /* 0B7BCC 800B6FCC 3C148013 */ lui $s4, %hi(D_80129790) # $s4, 0x8013 diff --git a/src/thread0_epc.c b/src/thread0_epc.c index 7a5e4e3f..592249bb 100644 --- a/src/thread0_epc.c +++ b/src/thread0_epc.c @@ -8,6 +8,7 @@ #include "controller_pak.h" #include "printf.h" #include "unknown_00BC20.h" +#include "controller.h" /************ .rodata ************/ @@ -37,7 +38,8 @@ char *D_800E302C[3] = { /************ .bss ************/ -epcInfo gEpcInfo; +__OSThreadContext gThread0Context; //Was epcInfo +s32 D_80129990[8]; s32 D_801299B0[64]; extern s32 D_80129BB0[256]; @@ -100,7 +102,7 @@ void func_800B6F50(void) { // Almost matching, just have an issue with argument 4. // The -O2 compiler is too smart. :( - osCreateThread(&D_801295E0, 0, &thread0, 0, &D_801295E0, 255); + osCreateThread(&D_801295E0, 0, thread0_Main, 0, &D_801295E0, 255); osStartThread(&D_801295E0); @@ -113,7 +115,7 @@ GLOBAL_ASM("asm/non_matchings/thread0_epc/func_800B6F50.s") #endif #ifdef NON_MATCHING -void thread0(s32 arg0) { // Has regalloc issues +void thread0_Main(s32 arg0) { // Has regalloc issues s32 sp34; s32 s0 = 0; @@ -140,7 +142,7 @@ void thread0(s32 arg0) { // Has regalloc issues } } #else -GLOBAL_ASM("asm/non_matchings/thread0_epc/thread0.s") +GLOBAL_ASM("asm/non_matchings/thread0_epc/thread0_Main.s") #endif void func_800B70D0(void) { @@ -214,26 +216,28 @@ void func_800B76B8(s32 arg0, s32 arg1) { //Called as a check to see if render_epc_lock_up_display should be called. s32 func_800B76DC(void) { s32 fileNum; - u8 sp820[4]; // Unused? - s16 sp420[0x200]; - u8 sp220[0x200]; - u8 sp1D0[0x50]; // Unused? - epcInfo dataFromControllerPak; + s32 controllerIndex = 0; + u8 *sp420[256]; + u8 *sp220[128]; + u8 *dataFromControllerPak[128]; if (D_800E3020 != -1) { return D_800E3020; } else { D_800E3020 = 0; - if ((func_800758DC(0) == 0) && (func_800764E8(0, &D_800E8EF4, &D_800E8EFC, &fileNum) == 0) - && (read_data_from_controller_pak(0, fileNum, &dataFromControllerPak, 0x800) == 0)) { - bcopy(&dataFromControllerPak, &gEpcInfo, 0x1B0); - bcopy(&sp220, &D_801299B0, 0x200); - bcopy(&sp420, &D_80129BB0, 0x400); + if ((func_800758DC(controllerIndex) == 0) && //Rumble pack check? + (func_800764E8(controllerIndex, &D_800E8EF4, &D_800E8EFC, &fileNum) == 0) && + (read_data_from_controller_pak(controllerIndex, fileNum, &dataFromControllerPak, + sizeof(dataFromControllerPak) * MAXCONTROLLERS) == 0)) + { + bcopy(&dataFromControllerPak, &gThread0Context, sizeof(dataFromControllerPak) - 80); //Why less 80 (0x50)? + bcopy(&sp220, &D_801299B0, sizeof(sp220)); + bcopy(&sp420, &D_80129BB0, sizeof(sp420)); D_800E3020 = 1; } - func_80075AEC(0); + func_80075AEC(controllerIndex); if (D_800E3020 != 0) { - func_800762C8(0, fileNum); + func_800762C8(controllerIndex, fileNum); } return D_800E3020; } @@ -266,15 +270,15 @@ void render_epc_lock_up_display(void) { switch (D_800E3024) { case 0: - D_80129FB0[0] = gEpcInfo.unk130; - D_80129FB0[1] = gEpcInfo.unk134; - D_80129FB0[2] = gEpcInfo.unk138; - if (gEpcInfo.cause != -1) { - render_printf(" Fault in thread %d\n", gEpcInfo.thread); - render_printf(" epc\t\t0x%08x\n", gEpcInfo.epc); - render_printf(" cause\t\t0x%08x\n", gEpcInfo.cause); - render_printf(" sr\t\t0x%08x\n", gEpcInfo.sr); - render_printf(" badvaddr\t0x%08x\n", gEpcInfo.badvaddr); + D_80129FB0[0] = gThread0Context.unk130; + D_80129FB0[1] = gThread0Context.unk134; + D_80129FB0[2] = gThread0Context.unk138; + if (gThread0Context.cause != -1) { + render_printf(" Fault in thread %d\n", gThread0Context.thread); + render_printf(" epc\t\t0x%08x\n", gThread0Context.epc); + render_printf(" cause\t\t0x%08x\n", gThread0Context.cause); + render_printf(" sr\t\t0x%08x\n", gThread0Context.sr); + render_printf(" badvaddr\t0x%08x\n", gThread0Context.badvaddr); for(i = 0; i < 3; i++) { if (D_80129FB0[i] != -1) { if (s3 == 0) { @@ -285,19 +289,19 @@ void render_epc_lock_up_display(void) { } } render_printf("\n"); - render_printf(" at 0x%08x v0 0x%08x v1 0x%08x\n", gEpcInfo.at, gEpcInfo.v0, gEpcInfo.v1); - render_printf(" a0 0x%08x a1 0x%08x a2 0x%08x\n", gEpcInfo.a0, gEpcInfo.a1, gEpcInfo.a2); - render_printf(" a3 0x%08x t0 0x%08x t1 0x%08x\n", gEpcInfo.a3, gEpcInfo.t0, gEpcInfo.t1); - render_printf(" t2 0x%08x t3 0x%08x t4 0x%08x\n", gEpcInfo.t2, gEpcInfo.t3, gEpcInfo.t4); - render_printf(" t5 0x%08x t6 0x%08x t7 0x%08x\n", gEpcInfo.t5, gEpcInfo.t6, gEpcInfo.t7); - render_printf(" s0 0x%08x s1 0x%08x s2 0x%08x\n", gEpcInfo.s0, gEpcInfo.s1, gEpcInfo.s2); - render_printf(" s3 0x%08x s4 0x%08x s5 0x%08x\n", gEpcInfo.s3, gEpcInfo.s4, gEpcInfo.s5); - render_printf(" s6 0x%08x s7 0x%08x t8 0x%08x\n", gEpcInfo.s6, gEpcInfo.s7, gEpcInfo.t8); - render_printf(" t9 0x%08x gp 0x%08x sp 0x%08x\n", gEpcInfo.t9, gEpcInfo.gp, gEpcInfo.sp); - render_printf(" s8 0x%08x ra 0x%08x\n\n", gEpcInfo.s8, gEpcInfo.ra); - } else { // gEpcInfo.cause == -1 - render_printf(" epc\t\t0x%08x\n", gEpcInfo.epc); - render_printf(" cause\t\tmmAlloc(%d,0x%8x)\n", gEpcInfo.a0, gEpcInfo.a1); + render_printf(" at 0x%08x v0 0x%08x v1 0x%08x\n", gThread0Context.at, gThread0Context.v0, gThread0Context.v1); + render_printf(" a0 0x%08x a1 0x%08x a2 0x%08x\n", gThread0Context.a0, gThread0Context.a1, gThread0Context.a2); + render_printf(" a3 0x%08x t0 0x%08x t1 0x%08x\n", gThread0Context.a3, gThread0Context.t0, gThread0Context.t1); + render_printf(" t2 0x%08x t3 0x%08x t4 0x%08x\n", gThread0Context.t2, gThread0Context.t3, gThread0Context.t4); + render_printf(" t5 0x%08x t6 0x%08x t7 0x%08x\n", gThread0Context.t5, gThread0Context.t6, gThread0Context.t7); + render_printf(" s0 0x%08x s1 0x%08x s2 0x%08x\n", gThread0Context.s0, gThread0Context.s1, gThread0Context.s2); + render_printf(" s3 0x%08x s4 0x%08x s5 0x%08x\n", gThread0Context.s3, gThread0Context.s4, gThread0Context.s5); + render_printf(" s6 0x%08x s7 0x%08x t8 0x%08x\n", gThread0Context.s6, gThread0Context.s7, gThread0Context.t8); + render_printf(" t9 0x%08x gp 0x%08x sp 0x%08x\n", gThread0Context.t9, gThread0Context.gp, gThread0Context.sp); + render_printf(" s8 0x%08x ra 0x%08x\n\n", gThread0Context.s8, gThread0Context.ra); + } else { // gThread0Context.cause == -1 + render_printf(" epc\t\t0x%08x\n", gThread0Context.epc); + render_printf(" cause\t\tmmAlloc(%d,0x%8x)\n", gThread0Context.a0, gThread0Context.a1); for(i = 0; i < 3; i++) { if (D_80129FB0[i] != -1) { if (s3 == 0) { @@ -309,7 +313,7 @@ void render_epc_lock_up_display(void) { } render_printf("\n"); render_printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); - render_printf(" s8 0x%08x ra 0x%08x\n\n", gEpcInfo.s8, gEpcInfo.ra); + render_printf(" s8 0x%08x ra 0x%08x\n\n", gThread0Context.s8, gThread0Context.ra); render_printf("\n"); } break; diff --git a/src/thread0_epc.h b/src/thread0_epc.h index 7ffa3b72..b7a46294 100644 --- a/src/thread0_epc.h +++ b/src/thread0_epc.h @@ -81,7 +81,7 @@ s32 func_800B76DC(void); void func_800B77D4(s32 arg0); void func_800B6F50(void); // Non Matching -void thread0(s32 arg0); // Non Matching +void thread0_Main(s32 arg0); // Non Matching void func_800B7460(s32 *epc, s32 size, s32 mask); // Non Matching void render_epc_lock_up_display(void); // Non Matching void func_800B71B0(void); // Non Matching