summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax <mparisi@stevens.edu>2020-11-05 12:14:26 -0500
committerMax <mparisi@stevens.edu>2020-11-05 12:14:26 -0500
commit0e08bf4c6af66095cf6294df9354cf77adaf992a (patch)
tree014b1eba2aa39dc23b15a141cf401e7e45001d9a
parentad63244f06faaf566506dfbba2c8c8e71226180c (diff)
decompile code_801DD8C0 with some nonmatchings
-rw-r--r--asm/code_801DD8C0_asm.s348
-rw-r--r--asm/ctors_2.s1
-rw-r--r--asm/sbss_2.s7
-rw-r--r--include/code_801DD5C8.h1
-rw-r--r--src/code_801DD8C0.cpp186
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 <SDK/mem.h>
#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;
+ }
+}