From 0e08bf4c6af66095cf6294df9354cf77adaf992a Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 5 Nov 2020 12:14:26 -0500 Subject: decompile code_801DD8C0 with some nonmatchings --- asm/code_801DD8C0_asm.s | 348 ------------------------------------------------ asm/ctors_2.s | 1 - asm/sbss_2.s | 7 +- include/code_801DD5C8.h | 1 + src/code_801DD8C0.cpp | 186 +++++++++++++++++++++++--- 5 files changed, 172 insertions(+), 371 deletions(-) diff --git a/asm/code_801DD8C0_asm.s b/asm/code_801DD8C0_asm.s index c4954b5..4ea72fe 100644 --- a/asm/code_801DD8C0_asm.s +++ b/asm/code_801DD8C0_asm.s @@ -1,351 +1,3 @@ .include "macros.inc" .section .text, "ax" # 0x80006980 - 0x803E1E60 - -.global func_801DDABC -func_801DDABC: -/* 801DDABC 001D971C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 801DDAC0 001D9720 7C 08 02 A6 */ mflr r0 -/* 801DDAC4 001D9724 90 01 00 24 */ stw r0, 0x24(r1) -/* 801DDAC8 001D9728 DB E1 00 18 */ stfd f31, 0x18(r1) -/* 801DDACC 001D972C FF E0 10 90 */ fmr f31, f2 -/* 801DDAD0 001D9730 DB C1 00 10 */ stfd f30, 0x10(r1) -/* 801DDAD4 001D9734 FF C0 08 90 */ fmr f30, f1 -/* 801DDAD8 001D9738 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801DDADC 001D973C 7C BF 2B 78 */ mr r31, r5 -/* 801DDAE0 001D9740 93 C1 00 08 */ stw r30, 8(r1) -/* 801DDAE4 001D9744 7C 7E 1B 78 */ mr r30, r3 -/* 801DDAE8 001D9748 80 C3 00 04 */ lwz r6, 4(r3) -/* 801DDAEC 001D974C 2C 06 00 00 */ cmpwi r6, 0 -/* 801DDAF0 001D9750 41 82 00 54 */ beq lbl_801DDB44 -/* 801DDAF4 001D9754 A0 66 00 06 */ lhz r3, 6(r6) -/* 801DDAF8 001D9758 54 60 06 F7 */ rlwinm. r0, r3, 0, 0x1b, 0x1b -/* 801DDAFC 001D975C 40 82 00 0C */ bne lbl_801DDB08 -/* 801DDB00 001D9760 54 60 04 3C */ rlwinm r0, r3, 0, 0x10, 0x1e -/* 801DDB04 001D9764 B0 06 00 06 */ sth r0, 6(r6) -lbl_801DDB08: -/* 801DDB08 001D9768 7F C3 F3 78 */ mr r3, r30 -/* 801DDB0C 001D976C 4B FF FF 89 */ bl func_801DDA94 -/* 801DDB10 001D9770 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDB14 001D9774 41 82 00 30 */ beq lbl_801DDB44 -/* 801DDB18 001D9778 80 9E 00 04 */ lwz r4, 4(r30) -/* 801DDB1C 001D977C A0 04 00 06 */ lhz r0, 6(r4) -/* 801DDB20 001D9780 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b -/* 801DDB24 001D9784 40 82 00 20 */ bne lbl_801DDB44 -/* 801DDB28 001D9788 90 64 00 00 */ stw r3, 0(r4) -/* 801DDB2C 001D978C 57 E3 06 3E */ clrlwi r3, r31, 0x18 -/* 801DDB30 001D9790 38 00 00 03 */ li r0, 3 -/* 801DDB34 001D9794 D3 C4 00 0C */ stfs f30, 0xc(r4) -/* 801DDB38 001D9798 D3 E4 00 08 */ stfs f31, 8(r4) -/* 801DDB3C 001D979C B0 64 00 04 */ sth r3, 4(r4) -/* 801DDB40 001D97A0 B0 04 00 06 */ sth r0, 6(r4) -lbl_801DDB44: -/* 801DDB44 001D97A4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 801DDB48 001D97A8 CB E1 00 18 */ lfd f31, 0x18(r1) -/* 801DDB4C 001D97AC CB C1 00 10 */ lfd f30, 0x10(r1) -/* 801DDB50 001D97B0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801DDB54 001D97B4 83 C1 00 08 */ lwz r30, 8(r1) -/* 801DDB58 001D97B8 7C 08 03 A6 */ mtlr r0 -/* 801DDB5C 001D97BC 38 21 00 20 */ addi r1, r1, 0x20 -/* 801DDB60 001D97C0 4E 80 00 20 */ blr - -.global func_801DDB64 -func_801DDB64: -/* 801DDB64 001D97C4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801DDB68 001D97C8 7C 08 02 A6 */ mflr r0 -/* 801DDB6C 001D97CC 90 01 00 14 */ stw r0, 0x14(r1) -/* 801DDB70 001D97D0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801DDB74 001D97D4 93 C1 00 08 */ stw r30, 8(r1) -/* 801DDB78 001D97D8 7C 7E 1B 78 */ mr r30, r3 -/* 801DDB7C 001D97DC 4B FF FD 45 */ bl func_801DD8C0 -/* 801DDB80 001D97E0 80 1E 00 04 */ lwz r0, 4(r30) -/* 801DDB84 001D97E4 3B E0 00 00 */ li r31, 0 -/* 801DDB88 001D97E8 C0 02 95 F4 */ lfs f0, lbl_80641BF4-_SDA2_BASE_(r2) -/* 801DDB8C 001D97EC 2C 00 00 00 */ cmpwi r0, 0 -/* 801DDB90 001D97F0 93 FE 00 08 */ stw r31, 8(r30) -/* 801DDB94 001D97F4 D0 1E 00 0C */ stfs f0, 0xc(r30) -/* 801DDB98 001D97F8 41 82 00 54 */ beq lbl_801DDBEC -/* 801DDB9C 001D97FC 4B FF CF 8D */ bl func_801DAB28 -/* 801DDBA0 001D9800 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDBA4 001D9804 41 82 00 14 */ beq lbl_801DDBB8 -/* 801DDBA8 001D9808 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13) -/* 801DDBAC 001D980C 38 80 00 10 */ li r4, 0x10 -/* 801DDBB0 001D9810 4B FF D0 E5 */ bl func_801DAC94 -/* 801DDBB4 001D9814 48 00 00 08 */ b lbl_801DDBBC -lbl_801DDBB8: -/* 801DDBB8 001D9818 7F E3 FB 78 */ mr r3, r31 -lbl_801DDBBC: -/* 801DDBBC 001D981C 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDBC0 001D9820 41 82 00 28 */ beq lbl_801DDBE8 -/* 801DDBC4 001D9824 38 80 00 00 */ li r4, 0 -/* 801DDBC8 001D9828 38 00 00 0C */ li r0, 0xc -/* 801DDBCC 001D982C 90 83 00 00 */ stw r4, 0(r3) -/* 801DDBD0 001D9830 C0 22 95 F0 */ lfs f1, lbl_80641BF0-_SDA2_BASE_(r2) -/* 801DDBD4 001D9834 B0 83 00 04 */ sth r4, 4(r3) -/* 801DDBD8 001D9838 C0 02 95 F4 */ lfs f0, lbl_80641BF4-_SDA2_BASE_(r2) -/* 801DDBDC 001D983C B0 03 00 06 */ sth r0, 6(r3) -/* 801DDBE0 001D9840 D0 23 00 08 */ stfs f1, 8(r3) -/* 801DDBE4 001D9844 D0 03 00 0C */ stfs f0, 0xc(r3) -lbl_801DDBE8: -/* 801DDBE8 001D9848 90 7E 00 08 */ stw r3, 8(r30) -lbl_801DDBEC: -/* 801DDBEC 001D984C 7F C3 F3 78 */ mr r3, r30 -/* 801DDBF0 001D9850 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801DDBF4 001D9854 83 C1 00 08 */ lwz r30, 8(r1) -/* 801DDBF8 001D9858 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801DDBFC 001D985C 7C 08 03 A6 */ mtlr r0 -/* 801DDC00 001D9860 38 21 00 10 */ addi r1, r1, 0x10 -/* 801DDC04 001D9864 4E 80 00 20 */ blr - -.global func_801DDC08 -func_801DDC08: -/* 801DDC08 001D9868 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801DDC0C 001D986C 7C 08 02 A6 */ mflr r0 -/* 801DDC10 001D9870 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDC14 001D9874 90 01 00 14 */ stw r0, 0x14(r1) -/* 801DDC18 001D9878 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801DDC1C 001D987C 7C 9F 23 78 */ mr r31, r4 -/* 801DDC20 001D9880 93 C1 00 08 */ stw r30, 8(r1) -/* 801DDC24 001D9884 7C 7E 1B 78 */ mr r30, r3 -/* 801DDC28 001D9888 41 82 00 40 */ beq lbl_801DDC68 -/* 801DDC2C 001D988C 80 83 00 08 */ lwz r4, 8(r3) -/* 801DDC30 001D9890 2C 04 00 00 */ cmpwi r4, 0 -/* 801DDC34 001D9894 41 82 00 14 */ beq lbl_801DDC48 -/* 801DDC38 001D9898 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13) -/* 801DDC3C 001D989C 4B FF D1 0D */ bl func_801DAD48 -/* 801DDC40 001D98A0 38 00 00 00 */ li r0, 0 -/* 801DDC44 001D98A4 90 1E 00 08 */ stw r0, 8(r30) -lbl_801DDC48: -/* 801DDC48 001D98A8 7F C3 F3 78 */ mr r3, r30 -/* 801DDC4C 001D98AC 38 80 00 00 */ li r4, 0 -/* 801DDC50 001D98B0 4B FF FD 09 */ bl func_801DD958 -/* 801DDC54 001D98B4 2C 1F 00 00 */ cmpwi r31, 0 -/* 801DDC58 001D98B8 40 81 00 10 */ ble lbl_801DDC68 -/* 801DDC5C 001D98BC 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13) -/* 801DDC60 001D98C0 7F C4 F3 78 */ mr r4, r30 -/* 801DDC64 001D98C4 4B FF D0 E5 */ bl func_801DAD48 -lbl_801DDC68: -/* 801DDC68 001D98C8 7F C3 F3 78 */ mr r3, r30 -/* 801DDC6C 001D98CC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801DDC70 001D98D0 83 C1 00 08 */ lwz r30, 8(r1) -/* 801DDC74 001D98D4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801DDC78 001D98D8 7C 08 03 A6 */ mtlr r0 -/* 801DDC7C 001D98DC 38 21 00 10 */ addi r1, r1, 0x10 -/* 801DDC80 001D98E0 4E 80 00 20 */ blr - -.global func_801DDC84 -func_801DDC84: -/* 801DDC84 001D98E4 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 801DDC88 001D98E8 7C 08 02 A6 */ mflr r0 -/* 801DDC8C 001D98EC 90 01 00 24 */ stw r0, 0x24(r1) -/* 801DDC90 001D98F0 DB E1 00 18 */ stfd f31, 0x18(r1) -/* 801DDC94 001D98F4 FF E0 08 90 */ fmr f31, f1 -/* 801DDC98 001D98F8 93 E1 00 14 */ stw r31, 0x14(r1) -/* 801DDC9C 001D98FC 7C 7F 1B 78 */ mr r31, r3 -/* 801DDCA0 001D9900 93 C1 00 10 */ stw r30, 0x10(r1) -/* 801DDCA4 001D9904 93 A1 00 0C */ stw r29, 0xc(r1) -/* 801DDCA8 001D9908 80 83 00 04 */ lwz r4, 4(r3) -/* 801DDCAC 001D990C 2C 04 00 00 */ cmpwi r4, 0 -/* 801DDCB0 001D9910 41 82 01 7C */ beq lbl_801DDE2C -/* 801DDCB4 001D9914 80 04 00 00 */ lwz r0, 0(r4) -/* 801DDCB8 001D9918 3B A0 00 00 */ li r29, 0 -/* 801DDCBC 001D991C 2C 00 00 00 */ cmpwi r0, 0 -/* 801DDCC0 001D9920 41 82 00 14 */ beq lbl_801DDCD4 -/* 801DDCC4 001D9924 A0 04 00 06 */ lhz r0, 6(r4) -/* 801DDCC8 001D9928 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 801DDCCC 001D992C 41 82 00 08 */ beq lbl_801DDCD4 -/* 801DDCD0 001D9930 3B A0 00 01 */ li r29, 1 -lbl_801DDCD4: -/* 801DDCD4 001D9934 80 A3 00 08 */ lwz r5, 8(r3) -/* 801DDCD8 001D9938 3B C0 00 00 */ li r30, 0 -/* 801DDCDC 001D993C 2C 05 00 00 */ cmpwi r5, 0 -/* 801DDCE0 001D9940 41 82 00 30 */ beq lbl_801DDD10 -/* 801DDCE4 001D9944 80 05 00 00 */ lwz r0, 0(r5) -/* 801DDCE8 001D9948 38 60 00 00 */ li r3, 0 -/* 801DDCEC 001D994C 2C 00 00 00 */ cmpwi r0, 0 -/* 801DDCF0 001D9950 41 82 00 14 */ beq lbl_801DDD04 -/* 801DDCF4 001D9954 A0 05 00 06 */ lhz r0, 6(r5) -/* 801DDCF8 001D9958 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 801DDCFC 001D995C 41 82 00 08 */ beq lbl_801DDD04 -/* 801DDD00 001D9960 38 60 00 01 */ li r3, 1 -lbl_801DDD04: -/* 801DDD04 001D9964 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDD08 001D9968 41 82 00 08 */ beq lbl_801DDD10 -/* 801DDD0C 001D996C 3B C0 00 01 */ li r30, 1 -lbl_801DDD10: -/* 801DDD10 001D9970 2C 1D 00 00 */ cmpwi r29, 0 -/* 801DDD14 001D9974 41 82 00 10 */ beq lbl_801DDD24 -/* 801DDD18 001D9978 FC 20 F8 90 */ fmr f1, f31 -/* 801DDD1C 001D997C 7C 83 23 78 */ mr r3, r4 -/* 801DDD20 001D9980 4B FF F8 A9 */ bl func_801DD5C8 -lbl_801DDD24: -/* 801DDD24 001D9984 2C 1E 00 00 */ cmpwi r30, 0 -/* 801DDD28 001D9988 41 82 00 24 */ beq lbl_801DDD4C -/* 801DDD2C 001D998C FC 20 F8 90 */ fmr f1, f31 -/* 801DDD30 001D9990 80 7F 00 08 */ lwz r3, 8(r31) -/* 801DDD34 001D9994 4B FF F8 95 */ bl func_801DD5C8 -/* 801DDD38 001D9998 80 7F 00 04 */ lwz r3, 4(r31) -/* 801DDD3C 001D999C 3B A0 00 01 */ li r29, 1 -/* 801DDD40 001D99A0 A0 03 00 06 */ lhz r0, 6(r3) -/* 801DDD44 001D99A4 60 00 00 02 */ ori r0, r0, 2 -/* 801DDD48 001D99A8 B0 03 00 06 */ sth r0, 6(r3) -lbl_801DDD4C: -/* 801DDD4C 001D99AC 2C 1D 00 00 */ cmpwi r29, 0 -/* 801DDD50 001D99B0 41 82 00 6C */ beq lbl_801DDDBC -/* 801DDD54 001D99B4 80 7F 00 04 */ lwz r3, 4(r31) -/* 801DDD58 001D99B8 7F E4 FB 78 */ mr r4, r31 -/* 801DDD5C 001D99BC 38 A0 00 00 */ li r5, 0 -/* 801DDD60 001D99C0 4B FF FA 9D */ bl func_801DD7FC -/* 801DDD64 001D99C4 80 DF 00 04 */ lwz r6, 4(r31) -/* 801DDD68 001D99C8 38 80 00 01 */ li r4, 1 -/* 801DDD6C 001D99CC A0 A6 00 06 */ lhz r5, 6(r6) -/* 801DDD70 001D99D0 54 A0 07 39 */ rlwinm. r0, r5, 0, 0x1c, 0x1c -/* 801DDD74 001D99D4 40 82 00 2C */ bne lbl_801DDDA0 -/* 801DDD78 001D99D8 80 06 00 00 */ lwz r0, 0(r6) -/* 801DDD7C 001D99DC 38 60 00 00 */ li r3, 0 -/* 801DDD80 001D99E0 2C 00 00 00 */ cmpwi r0, 0 -/* 801DDD84 001D99E4 41 82 00 10 */ beq lbl_801DDD94 -/* 801DDD88 001D99E8 54 A0 07 FF */ clrlwi. r0, r5, 0x1f -/* 801DDD8C 001D99EC 41 82 00 08 */ beq lbl_801DDD94 -/* 801DDD90 001D99F0 38 60 00 01 */ li r3, 1 -lbl_801DDD94: -/* 801DDD94 001D99F4 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDD98 001D99F8 41 82 00 08 */ beq lbl_801DDDA0 -/* 801DDD9C 001D99FC 38 80 00 00 */ li r4, 0 -lbl_801DDDA0: -/* 801DDDA0 001D9A00 2C 04 00 00 */ cmpwi r4, 0 -/* 801DDDA4 001D9A04 41 82 00 18 */ beq lbl_801DDDBC -/* 801DDDA8 001D9A08 A0 66 00 06 */ lhz r3, 6(r6) -/* 801DDDAC 001D9A0C 54 60 06 F7 */ rlwinm. r0, r3, 0, 0x1b, 0x1b -/* 801DDDB0 001D9A10 40 82 00 0C */ bne lbl_801DDDBC -/* 801DDDB4 001D9A14 54 60 04 3C */ rlwinm r0, r3, 0, 0x10, 0x1e -/* 801DDDB8 001D9A18 B0 06 00 06 */ sth r0, 6(r6) -lbl_801DDDBC: -/* 801DDDBC 001D9A1C 2C 1E 00 00 */ cmpwi r30, 0 -/* 801DDDC0 001D9A20 41 82 00 6C */ beq lbl_801DDE2C -/* 801DDDC4 001D9A24 80 7F 00 08 */ lwz r3, 8(r31) -/* 801DDDC8 001D9A28 7F E4 FB 78 */ mr r4, r31 -/* 801DDDCC 001D9A2C 38 A0 00 01 */ li r5, 1 -/* 801DDDD0 001D9A30 4B FF FA 2D */ bl func_801DD7FC -/* 801DDDD4 001D9A34 80 DF 00 08 */ lwz r6, 8(r31) -/* 801DDDD8 001D9A38 38 80 00 01 */ li r4, 1 -/* 801DDDDC 001D9A3C A0 A6 00 06 */ lhz r5, 6(r6) -/* 801DDDE0 001D9A40 54 A0 07 39 */ rlwinm. r0, r5, 0, 0x1c, 0x1c -/* 801DDDE4 001D9A44 40 82 00 2C */ bne lbl_801DDE10 -/* 801DDDE8 001D9A48 80 06 00 00 */ lwz r0, 0(r6) -/* 801DDDEC 001D9A4C 38 60 00 00 */ li r3, 0 -/* 801DDDF0 001D9A50 2C 00 00 00 */ cmpwi r0, 0 -/* 801DDDF4 001D9A54 41 82 00 10 */ beq lbl_801DDE04 -/* 801DDDF8 001D9A58 54 A0 07 FF */ clrlwi. r0, r5, 0x1f -/* 801DDDFC 001D9A5C 41 82 00 08 */ beq lbl_801DDE04 -/* 801DDE00 001D9A60 38 60 00 01 */ li r3, 1 -lbl_801DDE04: -/* 801DDE04 001D9A64 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDE08 001D9A68 41 82 00 08 */ beq lbl_801DDE10 -/* 801DDE0C 001D9A6C 38 80 00 00 */ li r4, 0 -lbl_801DDE10: -/* 801DDE10 001D9A70 2C 04 00 00 */ cmpwi r4, 0 -/* 801DDE14 001D9A74 41 82 00 18 */ beq lbl_801DDE2C -/* 801DDE18 001D9A78 A0 66 00 06 */ lhz r3, 6(r6) -/* 801DDE1C 001D9A7C 54 60 06 F7 */ rlwinm. r0, r3, 0, 0x1b, 0x1b -/* 801DDE20 001D9A80 40 82 00 0C */ bne lbl_801DDE2C -/* 801DDE24 001D9A84 54 60 04 3C */ rlwinm r0, r3, 0, 0x10, 0x1e -/* 801DDE28 001D9A88 B0 06 00 06 */ sth r0, 6(r6) -lbl_801DDE2C: -/* 801DDE2C 001D9A8C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 801DDE30 001D9A90 CB E1 00 18 */ lfd f31, 0x18(r1) -/* 801DDE34 001D9A94 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 801DDE38 001D9A98 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 801DDE3C 001D9A9C 83 A1 00 0C */ lwz r29, 0xc(r1) -/* 801DDE40 001D9AA0 7C 08 03 A6 */ mtlr r0 -/* 801DDE44 001D9AA4 38 21 00 20 */ addi r1, r1, 0x20 -/* 801DDE48 001D9AA8 4E 80 00 20 */ blr - -.global func_801DDE4C -func_801DDE4C: -/* 801DDE4C 001D9AAC 80 E3 00 08 */ lwz r7, 8(r3) -/* 801DDE50 001D9AB0 2C 07 00 00 */ cmpwi r7, 0 -/* 801DDE54 001D9AB4 41 82 00 48 */ beq lbl_801DDE9C -/* 801DDE58 001D9AB8 C0 02 95 F4 */ lfs f0, lbl_80641BF4-_SDA2_BASE_(r2) -/* 801DDE5C 001D9ABC 38 C0 00 00 */ li r6, 0 -/* 801DDE60 001D9AC0 D0 03 00 0C */ stfs f0, 0xc(r3) -/* 801DDE64 001D9AC4 80 07 00 00 */ lwz r0, 0(r7) -/* 801DDE68 001D9AC8 2C 00 00 00 */ cmpwi r0, 0 -/* 801DDE6C 001D9ACC 41 82 00 14 */ beq lbl_801DDE80 -/* 801DDE70 001D9AD0 A0 07 00 06 */ lhz r0, 6(r7) -/* 801DDE74 001D9AD4 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 801DDE78 001D9AD8 41 82 00 08 */ beq lbl_801DDE80 -/* 801DDE7C 001D9ADC 38 C0 00 01 */ li r6, 1 -lbl_801DDE80: -/* 801DDE80 001D9AE0 2C 06 00 00 */ cmpwi r6, 0 -/* 801DDE84 001D9AE4 41 82 00 18 */ beq lbl_801DDE9C -/* 801DDE88 001D9AE8 A0 C7 00 06 */ lhz r6, 6(r7) -/* 801DDE8C 001D9AEC 54 C0 06 F7 */ rlwinm. r0, r6, 0, 0x1b, 0x1b -/* 801DDE90 001D9AF0 40 82 00 0C */ bne lbl_801DDE9C -/* 801DDE94 001D9AF4 54 C0 04 3C */ rlwinm r0, r6, 0, 0x10, 0x1e -/* 801DDE98 001D9AF8 B0 07 00 06 */ sth r0, 6(r7) -lbl_801DDE9C: -/* 801DDE9C 001D9AFC 4B FF FC 20 */ b func_801DDABC - -.global func_801DDEA0 -func_801DDEA0: -/* 801DDEA0 001D9B00 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 801DDEA4 001D9B04 7C 08 02 A6 */ mflr r0 -/* 801DDEA8 001D9B08 90 01 00 34 */ stw r0, 0x34(r1) -/* 801DDEAC 001D9B0C DB E1 00 28 */ stfd f31, 0x28(r1) -/* 801DDEB0 001D9B10 FF E0 18 90 */ fmr f31, f3 -/* 801DDEB4 001D9B14 DB C1 00 20 */ stfd f30, 0x20(r1) -/* 801DDEB8 001D9B18 FF C0 10 90 */ fmr f30, f2 -/* 801DDEBC 001D9B1C DB A1 00 18 */ stfd f29, 0x18(r1) -/* 801DDEC0 001D9B20 FF A0 08 90 */ fmr f29, f1 -/* 801DDEC4 001D9B24 93 E1 00 14 */ stw r31, 0x14(r1) -/* 801DDEC8 001D9B28 7C BF 2B 78 */ mr r31, r5 -/* 801DDECC 001D9B2C 93 C1 00 10 */ stw r30, 0x10(r1) -/* 801DDED0 001D9B30 7C 7E 1B 78 */ mr r30, r3 -/* 801DDED4 001D9B34 80 C3 00 08 */ lwz r6, 8(r3) -/* 801DDED8 001D9B38 2C 06 00 00 */ cmpwi r6, 0 -/* 801DDEDC 001D9B3C 41 82 00 58 */ beq lbl_801DDF34 -/* 801DDEE0 001D9B40 A0 66 00 06 */ lhz r3, 6(r6) -/* 801DDEE4 001D9B44 54 60 06 F7 */ rlwinm. r0, r3, 0, 0x1b, 0x1b -/* 801DDEE8 001D9B48 40 82 00 0C */ bne lbl_801DDEF4 -/* 801DDEEC 001D9B4C 54 60 04 3C */ rlwinm r0, r3, 0, 0x10, 0x1e -/* 801DDEF0 001D9B50 B0 06 00 06 */ sth r0, 6(r6) -lbl_801DDEF4: -/* 801DDEF4 001D9B54 7F C3 F3 78 */ mr r3, r30 -/* 801DDEF8 001D9B58 4B FF FB 9D */ bl func_801DDA94 -/* 801DDEFC 001D9B5C 2C 03 00 00 */ cmpwi r3, 0 -/* 801DDF00 001D9B60 41 82 00 30 */ beq lbl_801DDF30 -/* 801DDF04 001D9B64 80 9E 00 08 */ lwz r4, 8(r30) -/* 801DDF08 001D9B68 A0 04 00 06 */ lhz r0, 6(r4) -/* 801DDF0C 001D9B6C 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b -/* 801DDF10 001D9B70 40 82 00 20 */ bne lbl_801DDF30 -/* 801DDF14 001D9B74 90 64 00 00 */ stw r3, 0(r4) -/* 801DDF18 001D9B78 57 E3 06 3E */ clrlwi r3, r31, 0x18 -/* 801DDF1C 001D9B7C 38 00 00 03 */ li r0, 3 -/* 801DDF20 001D9B80 D3 A4 00 0C */ stfs f29, 0xc(r4) -/* 801DDF24 001D9B84 D3 C4 00 08 */ stfs f30, 8(r4) -/* 801DDF28 001D9B88 B0 64 00 04 */ sth r3, 4(r4) -/* 801DDF2C 001D9B8C B0 04 00 06 */ sth r0, 6(r4) -lbl_801DDF30: -/* 801DDF30 001D9B90 D3 FE 00 0C */ stfs f31, 0xc(r30) -lbl_801DDF34: -/* 801DDF34 001D9B94 80 01 00 34 */ lwz r0, 0x34(r1) -/* 801DDF38 001D9B98 CB E1 00 28 */ lfd f31, 0x28(r1) -/* 801DDF3C 001D9B9C CB C1 00 20 */ lfd f30, 0x20(r1) -/* 801DDF40 001D9BA0 CB A1 00 18 */ lfd f29, 0x18(r1) -/* 801DDF44 001D9BA4 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 801DDF48 001D9BA8 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 801DDF4C 001D9BAC 7C 08 03 A6 */ mtlr r0 -/* 801DDF50 001D9BB0 38 21 00 30 */ addi r1, r1, 0x30 -/* 801DDF54 001D9BB4 4E 80 00 20 */ blr - -.global func_801DDF58 -func_801DDF58: -/* 801DDF58 001D9BB8 38 A0 00 01 */ li r5, 1 -/* 801DDF5C 001D9BBC 38 6D A0 90 */ addi r3, r13, lbl_8063F350-_SDA_BASE_ -/* 801DDF60 001D9BC0 38 80 00 04 */ li r4, 4 -/* 801DDF64 001D9BC4 38 00 00 00 */ li r0, 0 -/* 801DDF68 001D9BC8 98 AD A0 90 */ stb r5, lbl_8063F350-_SDA_BASE_(r13) -/* 801DDF6C 001D9BCC B0 83 00 02 */ sth r4, 2(r3) -/* 801DDF70 001D9BD0 98 03 00 04 */ stb r0, 4(r3) -/* 801DDF74 001D9BD4 4E 80 00 20 */ blr diff --git a/asm/ctors_2.s b/asm/ctors_2.s index 71ec058..9c8c611 100644 --- a/asm/ctors_2.s +++ b/asm/ctors_2.s @@ -2,7 +2,6 @@ .section .ctors, "wa" # 0x803E1E60 - 0x803E22A0 -.4byte func_801DDF58 .4byte func_801DF020, func_801E07C8, func_801E07F0, func_801E0A34 .4byte func_801E4308, func_801E472C, func_801E5F5C, func_801E6BD8 .4byte func_801ED364, func_801EE024, func_801F1A68, func_801F40C0 diff --git a/asm/sbss_2.s b/asm/sbss_2.s index 327cc6b..a7ac896 100644 --- a/asm/sbss_2.s +++ b/asm/sbss_2.s @@ -1,11 +1,8 @@ .section .sbss, "wa" # 0x80474F00 - 0x80643050 -.global lbl_8063F34E -lbl_8063F34E: - .skip 0x2 -.global lbl_8063F350 +.global lbl_8063F356 lbl_8063F350: - .skip 0x8 + .skip 0x2 .global lbl_8063F358 lbl_8063F358: .skip 0x8 diff --git a/include/code_801DD5C8.h b/include/code_801DD5C8.h index 15df23f..7b6d851 100644 --- a/include/code_801DD5C8.h +++ b/include/code_801DD5C8.h @@ -14,6 +14,7 @@ struct gUnkClass9 void (*unkC)(void*, gUnkClass9*, u32, float); // TODO: identify 1st parameter }; +// TODO: linked list? // size >= 0xC struct gUnkClass8 { diff --git a/src/code_801DD8C0.cpp b/src/code_801DD8C0.cpp index 8636ccc..cd42f0f 100644 --- a/src/code_801DD8C0.cpp +++ b/src/code_801DD8C0.cpp @@ -1,9 +1,12 @@ +#include "ctorStruct.h" #include #include "code_801DAAE0.h" #include "code_801DD5C8.h" // TODO: C++ +static ctorStruct gUnk8063F350(1, 4, 0); + extern "C" { // TODO: determine file that defines this @@ -13,20 +16,25 @@ struct gUnkClass10 { gUnkClass8* unk0; // TODO: check type gUnkClass7* unk4; + + // TODO: begin derived class? + gUnkClass7* unk8; + float unkC; }; // TODO: gUnkClass10 constructor? gUnkClass10* func_801DD8C0(gUnkClass10* p1, gUnkClass8* p2) { p1->unk0 = p2; - p1->unk4 = 0; + p1->unk4 = NULL; if (p2) { gUnkClass7* r3; if (func_801DAB28()) r3 = (gUnkClass7*)func_801DAC94(lbl_8063E8F8, sizeof(gUnkClass7)); else r3 = NULL; - + + // TODO: inlined gUnkClass7 constructor? if (r3) { r3->unk0 = NULL; r3->unk4 = 0; @@ -39,7 +47,7 @@ gUnkClass10* func_801DD8C0(gUnkClass10* p1, gUnkClass8* p2) return p1; } -// TODO: Destructor. Get mwcc to generate parts of this function implicitly +// TODO: gUnkClass10 destructor? Get mwcc to generate parts of this function implicitly gUnkClass10* func_801DD958(gUnkClass10* p1, s32 p2) { if (p1) { @@ -53,23 +61,28 @@ gUnkClass10* func_801DD958(gUnkClass10* p1, s32 p2) return p1; } +// Note: inferred static inline functions +static inline BOOL helper_1(gUnkClass7* p1) +{ + return p1->unk0 && (p1->unk6 & 0x1); +} + +static inline BOOL helper_2(gUnkClass7* p1) +{ + return !helper_1(p1) && !(p1->unk6 & 0x10); +} + +// TODO: "flag"s are the results of inline functions? // NONMATCHING void func_801DD9C8(gUnkClass10* p1, float p2) { if (p1->unk4) { - BOOL flag = FALSE; - if (p1->unk4->unk0 && (p1->unk4->unk6 & 0x1)) - flag = TRUE; - if (flag) { + if (helper_1(p1->unk4)) { func_801DD5C8(p1->unk4, p2); func_801DD7FC(p1->unk4, p1, 0); BOOL flag2 = TRUE; //r4 if (!(p1->unk4->unk6 & 0x8)) { - BOOL flag3 = FALSE; //r3 - if (p1->unk4->unk0 && (p1->unk4->unk6 & 0x1)) { - flag3 = TRUE; - } - if (flag3) + if (helper_1(p1->unk4)) flag2 = FALSE; if (flag2 && !(p1->unk4->unk6 & 0x10)) { p1->unk4->unk6 &= ~0x1; @@ -80,6 +93,7 @@ void func_801DD9C8(gUnkClass10* p1, float p2) } // TODO: assuming gUnkClass8* member here +// search linked list //static gUnkClass8* func_801DDA94(gUnkClass10* p1, u16 p2) { @@ -92,20 +106,158 @@ gUnkClass8* func_801DDA94(gUnkClass10* p1, u16 p2) return NULL; } -func_801DDABC +// allocate gUnkClass8 from heap, set unk4 member of p1 +// TODO: parameterized base class constructor? +void func_801DDABC(gUnkClass10* p1, u16 p2, u16 p3, float p4, float p5) { - + gUnkClass7* r6 = p1->unk4; + if (r6) { + if (!(r6->unk6 & 0x10)) + r6->unk6 &= ~0x1; + gUnkClass8* r3 = func_801DDA94(p1, p2); + if (r3) { + gUnkClass7* r4 = p1->unk4; + if (!(r4->unk6 & 0x10)) { + r4->unk0 = r3; + r4->unkC = p4; + r4->unk8 = p5; + r4->unk4 = p3 & 0xFF; + r4->unk6 = 3; + } + } + } } +// TODO: derived class constructor? +gUnkClass10* func_801DDB64(gUnkClass10* p1, gUnkClass8* p2) +{ + func_801DD8C0(p1, p2); + p1->unk8 = NULL; + p1->unkC = 0.0f; + if (p1->unk4) { + gUnkClass7* r3; + if (func_801DAB28()) + r3 = (gUnkClass7*)func_801DAC94(lbl_8063E8F8, sizeof(gUnkClass7)); + else + r3 = NULL; + if (r3) { + r3->unk0 = NULL; + r3->unk4 = 0; + r3->unk6 = 0xC; + r3->unk8 = 1.0f; + r3->unkC = 0.0f; + } + p1->unk8 = r3; + } + return p1; +} +// TODO: derived class destructor? +gUnkClass10* func_801DDC08(gUnkClass10* p1, s32 p2) +{ + if (p1) { + if (p1->unk8) { + func_801DAD48(lbl_8063E8F8, p1->unk8); + p1->unk8 = NULL; + } + func_801DD958(p1, 0); + if (p2 > 0) + func_801DAD48(lbl_8063E8F8, p1); + } + return p1; +} +// derived class method calling base class method? +// NONMATCHING +void func_801DDC84(gUnkClass10* p1, float p2) +{ + if (p1->unk4) { + BOOL r29 = helper_1(p1->unk4); + + BOOL r30 = FALSE; + if (p1->unk8) { + BOOL r3 = helper_1(p1->unk8); + if (r3) + r30 = TRUE; + if (r29) + func_801DD5C8(p1->unk4, p2); + if (r30) { + func_801DD5C8(p1->unk8, p2); + r29 = TRUE; + p1->unk4->unk6 |= 0x2; + } + // inlined function call? + if (r29) { + func_801DD7FC(p1->unk4, p1, 0); + BOOL r4 = TRUE; + if (!(p1->unk4->unk6 & 0x8)) { + BOOL r3 = helper_1(p1->unk4); + if (r3) + r4 = FALSE; + } + if (r4 && !(p1->unk4->unk6 & 0x10)) { + p1->unk4->unk6 &= ~0x1; + } + } + if (r30) { + func_801DD7FC(p1->unk8, p1, 0); + BOOL r4 = TRUE; + if (!(p1->unk8->unk6 & 0x8)) { + BOOL r3 = helper_1(p1->unk8); + if (r3) + r4 = FALSE; + } + if (r4 && !(p1->unk8->unk6 & 0x10)) { + p1->unk8->unk6 &= ~0x1; + } + } + } + } +} +// TODO: inlining +// TODO: parameterized derived class constructor? +// This matches +void func_801DDE4C(gUnkClass10* p1, u16 p2, u16 p3, float p4, float p5) +{ + if (p1->unk8) { + BOOL r6 = FALSE; + p1->unkC = 0.0f; + if (p1->unk8->unk0 && (p1->unk8->unk6 & 0x1)) { + r6 = TRUE; + } + if (r6 && !(p1->unk8->unk6 & 0x10)) { + p1->unk8->unk6 &= ~0x1; + } + } + func_801DDABC(p1, p2, p3, p4, p5); +} - - - +// derived class method? +// matches +void func_801DDEA0(gUnkClass10* p1, u16 p2, u16 p3, float p4, float p5, float p6) +{ + if (p1->unk8) { + if (!(p1->unk8->unk6 & 0x10)) { + p1->unk8->unk6 &= ~0x1; + } + gUnkClass8* r3 = func_801DDA94(p1, p2); + + if (r3) { + gUnkClass7* r4 = p1->unk8; + if (!(r4->unk6 & 0x10)) { + r4->unk0 = r3; + r4->unkC = p4; + r4->unk8 = p5; + r4->unk4 = p3 & 0xFF; + r4->unk6 = 3; + } + } + p1->unkC = p6; + } +} -- cgit v1.2.3