summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2020-10-23 23:41:49 -0400
committerGitHub <noreply@github.com>2020-10-23 23:41:49 -0400
commit52139f47a6c4df33fda98b3be5b140cd48ab218d (patch)
tree3f997a2b6086a26684ec76c2e666dc4a34a1a645
parent8fd68eac26a17cd4b7a2bdb637d4d1f5497c5201 (diff)
parent828020713c213b3e02af7f8c87f473c2a3ce26ba (diff)
Merge pull request #152 from mparisi20/master
decompile code_801DBB3C.o and simplify some functions in code_801DB81C.cpp
-rw-r--r--asm/bss_2.s3
-rw-r--r--asm/code_801DBB3C.s250
-rw-r--r--asm/ctors_2.s1
-rw-r--r--asm/sbss_2.s9
-rw-r--r--include/SDK/OS/OSCache.h3
-rw-r--r--include/code_801DBB3C.h14
-rw-r--r--obj_files.mk2
-rw-r--r--src/code_801DB040.cpp2
-rw-r--r--src/code_801DB81C.cpp59
-rw-r--r--src/code_801DBB3C.cpp94
10 files changed, 131 insertions, 306 deletions
diff --git a/asm/bss_2.s b/asm/bss_2.s
index d2c9f39..0879621 100644
--- a/asm/bss_2.s
+++ b/asm/bss_2.s
@@ -1,8 +1,5 @@
.section .bss, "wa" # 0x80474F00 - 0x80643050
-.global lbl_80491470
-lbl_80491470:
- .skip 0x380
.global lbl_804917F0
lbl_804917F0:
.skip 0x40
diff --git a/asm/code_801DBB3C.s b/asm/code_801DBB3C.s
deleted file mode 100644
index 6a84265..0000000
--- a/asm/code_801DBB3C.s
+++ /dev/null
@@ -1,250 +0,0 @@
-.include "macros.inc"
-
-.section .text, "ax" # 0x80006980 - 0x803E1E60
-
-.global func_801DBB3C
-func_801DBB3C:
-/* 801DBB3C 001D779C 38 60 00 00 */ li r3, 0
-/* 801DBB40 001D77A0 4E 80 00 20 */ blr
-
-.global func_801DBB44
-func_801DBB44:
-/* 801DBB44 001D77A4 4E 80 00 20 */ blr
-
-.global func_801DBB48
-func_801DBB48:
-/* 801DBB48 001D77A8 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DBB4C 001D77AC 7C 08 02 A6 */ mflr r0
-/* 801DBB50 001D77B0 38 A5 00 07 */ addi r5, r5, 7
-/* 801DBB54 001D77B4 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DBB58 001D77B8 38 04 00 01 */ addi r0, r4, 1
-/* 801DBB5C 001D77BC 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 801DBB60 001D77C0 54 BF 00 3A */ rlwinm r31, r5, 0, 0, 0x1d
-/* 801DBB64 001D77C4 93 C1 00 18 */ stw r30, 0x18(r1)
-/* 801DBB68 001D77C8 7C 9E 23 78 */ mr r30, r4
-/* 801DBB6C 001D77CC 93 A1 00 14 */ stw r29, 0x14(r1)
-/* 801DBB70 001D77D0 7C 7D 1B 78 */ mr r29, r3
-/* 801DBB74 001D77D4 90 83 00 08 */ stw r4, 8(r3)
-/* 801DBB78 001D77D8 93 E3 00 0C */ stw r31, 0xc(r3)
-/* 801DBB7C 001D77DC 7C 60 F9 D6 */ mullw r3, r0, r31
-/* 801DBB80 001D77E0 4B FF F2 19 */ bl func_801DAD98
-/* 801DBB84 001D77E4 7C 1E F9 D6 */ mullw r0, r30, r31
-/* 801DBB88 001D77E8 2C 1E 00 00 */ cmpwi r30, 0
-/* 801DBB8C 001D77EC 90 7D 00 10 */ stw r3, 0x10(r29)
-/* 801DBB90 001D77F0 39 00 00 00 */ li r8, 0
-/* 801DBB94 001D77F4 38 E0 00 00 */ li r7, 0
-/* 801DBB98 001D77F8 90 7D 00 18 */ stw r3, 0x18(r29)
-/* 801DBB9C 001D77FC 7C 03 02 14 */ add r0, r3, r0
-/* 801DBBA0 001D7800 90 1D 00 14 */ stw r0, 0x14(r29)
-/* 801DBBA4 001D7804 41 82 00 90 */ beq lbl_801DBC34
-/* 801DBBA8 001D7808 28 1E 00 08 */ cmplwi r30, 8
-/* 801DBBAC 001D780C 38 9E FF F8 */ addi r4, r30, -8
-/* 801DBBB0 001D7810 40 81 00 60 */ ble lbl_801DBC10
-/* 801DBBB4 001D7814 38 04 00 07 */ addi r0, r4, 7
-/* 801DBBB8 001D7818 54 00 E8 FE */ srwi r0, r0, 3
-/* 801DBBBC 001D781C 7C 09 03 A6 */ mtctr r0
-/* 801DBBC0 001D7820 28 04 00 00 */ cmplwi r4, 0
-/* 801DBBC4 001D7824 40 81 00 4C */ ble lbl_801DBC10
-lbl_801DBBC8:
-/* 801DBBC8 001D7828 7C A3 FA 14 */ add r5, r3, r31
-/* 801DBBCC 001D782C 38 E7 00 08 */ addi r7, r7, 8
-/* 801DBBD0 001D7830 90 A3 00 00 */ stw r5, 0(r3)
-/* 801DBBD4 001D7834 7C 85 FA 14 */ add r4, r5, r31
-/* 801DBBD8 001D7838 7C 64 FA 14 */ add r3, r4, r31
-/* 801DBBDC 001D783C 90 85 00 00 */ stw r4, 0(r5)
-/* 801DBBE0 001D7840 7C C3 FA 14 */ add r6, r3, r31
-/* 801DBBE4 001D7844 7C A6 FA 14 */ add r5, r6, r31
-/* 801DBBE8 001D7848 90 64 00 00 */ stw r3, 0(r4)
-/* 801DBBEC 001D784C 7C 85 FA 14 */ add r4, r5, r31
-/* 801DBBF0 001D7850 7D 04 FA 14 */ add r8, r4, r31
-/* 801DBBF4 001D7854 90 C3 00 00 */ stw r6, 0(r3)
-/* 801DBBF8 001D7858 7C 68 FA 14 */ add r3, r8, r31
-/* 801DBBFC 001D785C 90 A6 00 00 */ stw r5, 0(r6)
-/* 801DBC00 001D7860 7C 86 F9 2E */ stwx r4, r6, r31
-/* 801DBC04 001D7864 7D 05 F9 2E */ stwx r8, r5, r31
-/* 801DBC08 001D7868 7C 64 F9 2E */ stwx r3, r4, r31
-/* 801DBC0C 001D786C 42 00 FF BC */ bdnz lbl_801DBBC8
-lbl_801DBC10:
-/* 801DBC10 001D7870 7C 07 F0 50 */ subf r0, r7, r30
-/* 801DBC14 001D7874 7C 09 03 A6 */ mtctr r0
-/* 801DBC18 001D7878 7C 07 F0 40 */ cmplw r7, r30
-/* 801DBC1C 001D787C 40 80 00 18 */ bge lbl_801DBC34
-lbl_801DBC20:
-/* 801DBC20 001D7880 7C 03 FA 14 */ add r0, r3, r31
-/* 801DBC24 001D7884 7C 68 1B 78 */ mr r8, r3
-/* 801DBC28 001D7888 90 03 00 00 */ stw r0, 0(r3)
-/* 801DBC2C 001D788C 7C 03 03 78 */ mr r3, r0
-/* 801DBC30 001D7890 42 00 FF F0 */ bdnz lbl_801DBC20
-lbl_801DBC34:
-/* 801DBC34 001D7894 38 00 00 00 */ li r0, 0
-/* 801DBC38 001D7898 90 08 00 00 */ stw r0, 0(r8)
-/* 801DBC3C 001D789C 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 801DBC40 001D78A0 83 C1 00 18 */ lwz r30, 0x18(r1)
-/* 801DBC44 001D78A4 83 A1 00 14 */ lwz r29, 0x14(r1)
-/* 801DBC48 001D78A8 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DBC4C 001D78AC 7C 08 03 A6 */ mtlr r0
-/* 801DBC50 001D78B0 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DBC54 001D78B4 4E 80 00 20 */ blr
-
-.global func_801DBC58
-func_801DBC58:
-/* 801DBC58 001D78B8 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DBC5C 001D78BC 7C 08 02 A6 */ mflr r0
-/* 801DBC60 001D78C0 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DBC64 001D78C4 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 801DBC68 001D78C8 93 C1 00 18 */ stw r30, 0x18(r1)
-/* 801DBC6C 001D78CC 93 A1 00 14 */ stw r29, 0x14(r1)
-/* 801DBC70 001D78D0 7C 7D 1B 78 */ mr r29, r3
-/* 801DBC74 001D78D4 83 E3 00 18 */ lwz r31, 0x18(r3)
-/* 801DBC78 001D78D8 4B FF FE C5 */ bl func_801DBB3C
-/* 801DBC7C 001D78DC 7C 7E 1B 78 */ mr r30, r3
-/* 801DBC80 001D78E0 38 60 00 00 */ li r3, 0
-/* 801DBC84 001D78E4 4B FF FE C1 */ bl func_801DBB44
-/* 801DBC88 001D78E8 2C 1F 00 00 */ cmpwi r31, 0
-/* 801DBC8C 001D78EC 41 82 00 10 */ beq lbl_801DBC9C
-/* 801DBC90 001D78F0 80 1F 00 00 */ lwz r0, 0(r31)
-/* 801DBC94 001D78F4 90 1D 00 18 */ stw r0, 0x18(r29)
-/* 801DBC98 001D78F8 48 00 00 14 */ b lbl_801DBCAC
-lbl_801DBC9C:
-/* 801DBC9C 001D78FC 7F C3 F3 78 */ mr r3, r30
-/* 801DBCA0 001D7900 4B FF FE A5 */ bl func_801DBB44
-/* 801DBCA4 001D7904 38 60 00 00 */ li r3, 0
-/* 801DBCA8 001D7908 48 00 00 3C */ b lbl_801DBCE4
-lbl_801DBCAC:
-/* 801DBCAC 001D790C 7F C3 F3 78 */ mr r3, r30
-/* 801DBCB0 001D7910 4B FF FE 95 */ bl func_801DBB44
-/* 801DBCB4 001D7914 80 BD 00 0C */ lwz r5, 0xc(r29)
-/* 801DBCB8 001D7918 7F E3 FB 78 */ mr r3, r31
-/* 801DBCBC 001D791C 38 80 00 00 */ li r4, 0
-/* 801DBCC0 001D7920 4B E2 84 45 */ bl memset
-/* 801DBCC4 001D7924 80 7D 00 00 */ lwz r3, 0(r29)
-/* 801DBCC8 001D7928 80 1D 00 04 */ lwz r0, 4(r29)
-/* 801DBCCC 001D792C 38 63 00 01 */ addi r3, r3, 1
-/* 801DBCD0 001D7930 7C 03 00 40 */ cmplw r3, r0
-/* 801DBCD4 001D7934 90 7D 00 00 */ stw r3, 0(r29)
-/* 801DBCD8 001D7938 40 81 00 08 */ ble lbl_801DBCE0
-/* 801DBCDC 001D793C 90 7D 00 04 */ stw r3, 4(r29)
-lbl_801DBCE0:
-/* 801DBCE0 001D7940 38 7F 00 04 */ addi r3, r31, 4
-lbl_801DBCE4:
-/* 801DBCE4 001D7944 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DBCE8 001D7948 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 801DBCEC 001D794C 83 C1 00 18 */ lwz r30, 0x18(r1)
-/* 801DBCF0 001D7950 83 A1 00 14 */ lwz r29, 0x14(r1)
-/* 801DBCF4 001D7954 7C 08 03 A6 */ mtlr r0
-/* 801DBCF8 001D7958 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DBCFC 001D795C 4E 80 00 20 */ blr
-
-.global func_801DBD00
-func_801DBD00:
-/* 801DBD00 001D7960 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DBD04 001D7964 7C 08 02 A6 */ mflr r0
-/* 801DBD08 001D7968 2C 04 00 00 */ cmpwi r4, 0
-/* 801DBD0C 001D796C 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DBD10 001D7970 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 801DBD14 001D7974 93 C1 00 18 */ stw r30, 0x18(r1)
-/* 801DBD18 001D7978 93 A1 00 14 */ stw r29, 0x14(r1)
-/* 801DBD1C 001D797C 7C 7D 1B 78 */ mr r29, r3
-/* 801DBD20 001D7980 41 82 00 38 */ beq lbl_801DBD58
-/* 801DBD24 001D7984 80 03 00 18 */ lwz r0, 0x18(r3)
-/* 801DBD28 001D7988 3B C4 FF FC */ addi r30, r4, -4
-/* 801DBD2C 001D798C 90 04 FF FC */ stw r0, -4(r4)
-/* 801DBD30 001D7990 80 83 00 00 */ lwz r4, 0(r3)
-/* 801DBD34 001D7994 38 04 FF FF */ addi r0, r4, -1
-/* 801DBD38 001D7998 90 03 00 00 */ stw r0, 0(r3)
-/* 801DBD3C 001D799C 4B FF FE 01 */ bl func_801DBB3C
-/* 801DBD40 001D79A0 7C 7F 1B 78 */ mr r31, r3
-/* 801DBD44 001D79A4 38 60 00 00 */ li r3, 0
-/* 801DBD48 001D79A8 4B FF FD FD */ bl func_801DBB44
-/* 801DBD4C 001D79AC 93 DD 00 18 */ stw r30, 0x18(r29)
-/* 801DBD50 001D79B0 7F E3 FB 78 */ mr r3, r31
-/* 801DBD54 001D79B4 4B FF FD F1 */ bl func_801DBB44
-lbl_801DBD58:
-/* 801DBD58 001D79B8 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DBD5C 001D79BC 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 801DBD60 001D79C0 83 C1 00 18 */ lwz r30, 0x18(r1)
-/* 801DBD64 001D79C4 83 A1 00 14 */ lwz r29, 0x14(r1)
-/* 801DBD68 001D79C8 7C 08 03 A6 */ mtlr r0
-/* 801DBD6C 001D79CC 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DBD70 001D79D0 4E 80 00 20 */ blr
-
-.global func_801DBD74
-func_801DBD74:
-/* 801DBD74 001D79D4 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DBD78 001D79D8 7C 08 02 A6 */ mflr r0
-/* 801DBD7C 001D79DC 3C C0 80 49 */ lis r6, lbl_80491470@ha
-/* 801DBD80 001D79E0 7C 67 1B 78 */ mr r7, r3
-/* 801DBD84 001D79E4 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DBD88 001D79E8 38 00 00 04 */ li r0, 4
-/* 801DBD8C 001D79EC 7C 85 23 78 */ mr r5, r4
-/* 801DBD90 001D79F0 38 C6 14 70 */ addi r6, r6, lbl_80491470@l
-/* 801DBD94 001D79F4 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DBD98 001D79F8 38 60 00 00 */ li r3, 0
-/* 801DBD9C 001D79FC 7C 09 03 A6 */ mtctr r0
-lbl_801DBDA0:
-/* 801DBDA0 001D7A00 80 06 00 08 */ lwz r0, 8(r6)
-/* 801DBDA4 001D7A04 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBDA8 001D7A08 41 82 00 80 */ beq lbl_801DBE28
-/* 801DBDAC 001D7A0C 80 06 00 24 */ lwz r0, 0x24(r6)
-/* 801DBDB0 001D7A10 38 63 00 01 */ addi r3, r3, 1
-/* 801DBDB4 001D7A14 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBDB8 001D7A18 41 82 00 70 */ beq lbl_801DBE28
-/* 801DBDBC 001D7A1C 80 06 00 40 */ lwz r0, 0x40(r6)
-/* 801DBDC0 001D7A20 38 63 00 01 */ addi r3, r3, 1
-/* 801DBDC4 001D7A24 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBDC8 001D7A28 41 82 00 60 */ beq lbl_801DBE28
-/* 801DBDCC 001D7A2C 80 06 00 5C */ lwz r0, 0x5c(r6)
-/* 801DBDD0 001D7A30 38 63 00 01 */ addi r3, r3, 1
-/* 801DBDD4 001D7A34 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBDD8 001D7A38 41 82 00 50 */ beq lbl_801DBE28
-/* 801DBDDC 001D7A3C 80 06 00 78 */ lwz r0, 0x78(r6)
-/* 801DBDE0 001D7A40 38 63 00 01 */ addi r3, r3, 1
-/* 801DBDE4 001D7A44 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBDE8 001D7A48 41 82 00 40 */ beq lbl_801DBE28
-/* 801DBDEC 001D7A4C 80 06 00 94 */ lwz r0, 0x94(r6)
-/* 801DBDF0 001D7A50 38 63 00 01 */ addi r3, r3, 1
-/* 801DBDF4 001D7A54 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBDF8 001D7A58 41 82 00 30 */ beq lbl_801DBE28
-/* 801DBDFC 001D7A5C 80 06 00 B0 */ lwz r0, 0xb0(r6)
-/* 801DBE00 001D7A60 38 63 00 01 */ addi r3, r3, 1
-/* 801DBE04 001D7A64 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBE08 001D7A68 41 82 00 20 */ beq lbl_801DBE28
-/* 801DBE0C 001D7A6C 80 06 00 CC */ lwz r0, 0xcc(r6)
-/* 801DBE10 001D7A70 38 63 00 01 */ addi r3, r3, 1
-/* 801DBE14 001D7A74 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBE18 001D7A78 41 82 00 10 */ beq lbl_801DBE28
-/* 801DBE1C 001D7A7C 38 C6 00 E0 */ addi r6, r6, 0xe0
-/* 801DBE20 001D7A80 38 63 00 01 */ addi r3, r3, 1
-/* 801DBE24 001D7A84 42 00 FF 7C */ bdnz lbl_801DBDA0
-lbl_801DBE28:
-/* 801DBE28 001D7A88 1C 03 00 1C */ mulli r0, r3, 0x1c
-/* 801DBE2C 001D7A8C 3C 60 80 49 */ lis r3, lbl_80491470@ha
-/* 801DBE30 001D7A90 38 63 14 70 */ addi r3, r3, lbl_80491470@l
-/* 801DBE34 001D7A94 7F E3 02 14 */ add r31, r3, r0
-/* 801DBE38 001D7A98 80 1F 00 08 */ lwz r0, 8(r31)
-/* 801DBE3C 001D7A9C 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBE40 001D7AA0 41 82 00 0C */ beq lbl_801DBE4C
-/* 801DBE44 001D7AA4 38 60 00 00 */ li r3, 0
-/* 801DBE48 001D7AA8 48 00 00 14 */ b lbl_801DBE5C
-lbl_801DBE4C:
-/* 801DBE4C 001D7AAC 7F E3 FB 78 */ mr r3, r31
-/* 801DBE50 001D7AB0 7C E4 3B 78 */ mr r4, r7
-/* 801DBE54 001D7AB4 4B FF FC F5 */ bl func_801DBB48
-/* 801DBE58 001D7AB8 7F E3 FB 78 */ mr r3, r31
-lbl_801DBE5C:
-/* 801DBE5C 001D7ABC 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DBE60 001D7AC0 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DBE64 001D7AC4 7C 08 03 A6 */ mtlr r0
-/* 801DBE68 001D7AC8 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DBE6C 001D7ACC 4E 80 00 20 */ blr
-
-.global func_801DBE70
-func_801DBE70:
-/* 801DBE70 001D7AD0 38 A0 00 01 */ li r5, 1
-/* 801DBE74 001D7AD4 38 6D A0 50 */ addi r3, r13, lbl_8063F310-_SDA_BASE_
-/* 801DBE78 001D7AD8 38 80 00 04 */ li r4, 4
-/* 801DBE7C 001D7ADC 38 00 00 00 */ li r0, 0
-/* 801DBE80 001D7AE0 98 AD A0 50 */ stb r5, lbl_8063F310-_SDA_BASE_(r13)
-/* 801DBE84 001D7AE4 B0 83 00 02 */ sth r4, 2(r3)
-/* 801DBE88 001D7AE8 98 03 00 04 */ stb r0, 4(r3)
-/* 801DBE8C 001D7AEC 4E 80 00 20 */ blr
diff --git a/asm/ctors_2.s b/asm/ctors_2.s
index bc10cf0..d0465f4 100644
--- a/asm/ctors_2.s
+++ b/asm/ctors_2.s
@@ -2,7 +2,6 @@
.section .ctors, "wa" # 0x803E1E60 - 0x803E22A0
-.4byte func_801DBE70
.4byte func_801DCE4C, func_801DD5A8, func_801DD8A0, func_801DDF58
.4byte func_801DF020, func_801E07C8, func_801E07F0, func_801E0A34
.4byte func_801E4308, func_801E472C, func_801E5F5C, func_801E6BD8
diff --git a/asm/sbss_2.s b/asm/sbss_2.s
index 48ba9f2..4f0b423 100644
--- a/asm/sbss_2.s
+++ b/asm/sbss_2.s
@@ -1,11 +1,8 @@
.section .sbss, "wa" # 0x80474F00 - 0x80643050
-.global lbl_8063F30C
-lbl_8063F30C:
- .skip 0x4
-.global lbl_8063F310
-lbl_8063F310:
- .skip 0x8
+.global lbl_8063F316
+lbl_8063F316:
+ .skip 0x2
.global lbl_8063F318
lbl_8063F318:
.skip 0x6
diff --git a/include/SDK/OS/OSCache.h b/include/SDK/OS/OSCache.h
index 489ed0b..a6fb490 100644
--- a/include/SDK/OS/OSCache.h
+++ b/include/SDK/OS/OSCache.h
@@ -6,6 +6,9 @@ extern "C" {
#endif
void LCEnable(void);
+#define LC_BASE (0xE000 << 16)
+#define LCGetBase() ((void*)LC_BASE)
+
#ifdef __cplusplus
}
diff --git a/include/code_801DBB3C.h b/include/code_801DBB3C.h
index 394bd32..fbc1996 100644
--- a/include/code_801DBB3C.h
+++ b/include/code_801DBB3C.h
@@ -7,9 +7,21 @@ extern "C" {
#include "code_801DB040.h"
+struct gUnkClass3
+{
+ gUnkClass3* unk0;
+ gUnkClass1 unk4;
+};
+
struct gUnkClass2
{
- u8 pad[0x24];
+ u32 unk0;
+ u32 unk4;
+ u32 unk8;
+ size_t unkC;
+ u8* unk10;
+ u8* unk14;
+ gUnkClass3* unk18;
};
gUnkClass1* func_801DBC58(gUnkClass2* p1);
diff --git a/obj_files.mk b/obj_files.mk
index 9cf946e..b8fa1bf 100644
--- a/obj_files.mk
+++ b/obj_files.mk
@@ -221,7 +221,7 @@ SPLIT_O_FILES := \
$(BUILD_DIR)/src/code_801DAAE0.o \
$(BUILD_DIR)/src/code_801DB040.o \
$(BUILD_DIR)/src/code_801DB81C.o \
- $(BUILD_DIR)/asm/code_801DBB3C.o \
+ $(BUILD_DIR)/src/code_801DBB3C.o \
$(BUILD_DIR)/asm/code_801DBE90.o \
$(BUILD_DIR)/asm/code_801DCE6C.o \
$(BUILD_DIR)/asm/code_801DD5C8.o \
diff --git a/src/code_801DB040.cpp b/src/code_801DB040.cpp
index 088dc2a..ce9740a 100644
--- a/src/code_801DB040.cpp
+++ b/src/code_801DB040.cpp
@@ -53,7 +53,7 @@ gUnkClass1* func_801DB07C(gUnkClass1* p1, BOOL p2)
void func_801DB15C(u32 p1)
{
- gUnk8063F2EC = func_801DBD74(p1, 36);
+ gUnk8063F2EC = func_801DBD74(p1, sizeof(gUnkClass1));
}
static void* func_801DB184(MEMHeapHandle heap, u32 size, u32 p3, u32 p4, gFuncPtr1 p5)
diff --git a/src/code_801DB81C.cpp b/src/code_801DB81C.cpp
index 678fafa..95af182 100644
--- a/src/code_801DB81C.cpp
+++ b/src/code_801DB81C.cpp
@@ -18,7 +18,8 @@ namespace
static void func_801DB81C(u8 p1);
static void func_801DB92C(u8 start, u8 width, u32 setOrClear);
-static unkClass gUnk80491370[32];
+static const size_t ARR_SIZE = 32;
+static unkClass gUnk80491370[ARR_SIZE];
static ctorStruct gUnk8063F2F0(1, 4, 0);
static u32 gUnk8063F2F8;
static u32 gUnk8063F2FC;
@@ -30,36 +31,17 @@ extern "C" {
static void func_801DB81C(u8 p1)
{
- size_t i;
- size_t new_var;
- size_t new_var2;
- size_t *new_var3;
- size_t *new_var4;
- size_t *new_var5;
- new_var = 0;
- new_var5 = &i;
- for (i = new_var; i < 32; i++) {
- gUnk8063F308 = new_var;
+ gUnk8063F308 = 0;
+ for (size_t i = 0; i < ARR_SIZE; i++)
gUnk80491370[i].unk0 = 0xff;
- }
-
LCEnable();
-
- gUnk8063F2FC = 0xE0000000;
- i = p1;
- new_var = 9;
- gUnk8063F2F8 = i << new_var;
- if (i) {
- new_var3 = new_var5;
- new_var4 = new_var3;
- new_var3 = new_var4;
- new_var4 = new_var3;
- new_var2 = *new_var4;
- func_801DB92C(0 & 0xFFu, (u8)new_var2, 1);
+ gUnk8063F2FC = (u32)LCGetBase();
+ gUnk8063F2F8 = (u32)(p1 << 9);
+ if (p1) {
+ func_801DB92C(0, p1, 1);
gUnk80491370[0].unk0 = 0;
- gUnk80491370[0].unk1 = (u8)*new_var3;
+ gUnk80491370[0].unk1 = p1;
}
-
gUnk8063F304 = 0;
}
@@ -113,29 +95,25 @@ asm u32 func_801DB978(u8 p1)
/* 801DB9F4 001D7654 7C 08 03 A6 */ mtlr r0
/* 801DB9F8 001D7658 4E 80 00 20 */ blr
}
+#pragma peephole on
void func_801DB9FC(void)
{
u32 i;
short j;
- unsigned short new_var;
- char new_var2;
u32 *new_var3;
u32 new_var4;
u32 *new_var5;
- new_var = 0xff;
if (gUnk8063F304 != 1) {
- new_var2 = 9;
- i = 31, j = 0;
+ i = ARR_SIZE-1, j = 0;
new_var3 = &i;
new_var5 = &new_var4;
do {
unsigned char r0 = gUnk80491370[j].unk0;
new_var4 = *new_var3;
- if ((((u32) r0) != new_var) && gUnk80491370[j].unk4) {
- gUnk80491370[j].unk4(0, gUnk8063F2FC + (r0 << new_var2), gUnk80491370[j].unk1);
+ if ((((u32) r0) != 0xff) && gUnk80491370[j].unk4) {
+ gUnk80491370[j].unk4(0, gUnk8063F2FC + (r0 << 9), gUnk80491370[j].unk1);
}
-
i = *new_var5;
j++;
} while ((i--) != 0);
@@ -147,24 +125,19 @@ void func_801DBA8C(void)
{
u32 i;
short j;
- unsigned short new_var;
- char new_var2;
u32 *new_var3;
u32 new_var4;
u32 *new_var5;
- new_var = 0xff;
if (gUnk8063F304 != 0) {
- new_var2 = 9;
- i = 31, j = 0;
+ i = ARR_SIZE-1, j = 0;
new_var3 = &i;
new_var5 = &new_var4;
do {
unsigned char r0 = gUnk80491370[j].unk0;
new_var4 = *new_var3;
- if ((((u32) r0) != new_var) && gUnk80491370[j].unk4) {
- gUnk80491370[j].unk4(1, gUnk8063F2FC + (r0 << new_var2), gUnk80491370[j].unk1);
+ if ((((u32) r0) != 0xff) && gUnk80491370[j].unk4) {
+ gUnk80491370[j].unk4(1, gUnk8063F2FC + (r0 << 9), gUnk80491370[j].unk1);
}
-
i = *new_var5;
j++;
} while ((i--) != 0);
diff --git a/src/code_801DBB3C.cpp b/src/code_801DBB3C.cpp
new file mode 100644
index 0000000..5037b5a
--- /dev/null
+++ b/src/code_801DBB3C.cpp
@@ -0,0 +1,94 @@
+#include "types.h"
+#include "ctorStruct.h"
+#include "Runtime/__mem.h"
+#include "code_801DAAE0.h"
+#include "code_801DB040.h"
+#include "code_801DBB3C.h"
+
+static u32 func_801DBB3C(void);
+static void func_801DBB44(u32);
+static void func_801DBB48(gUnkClass2 *p1, size_t nodes, size_t size);
+
+static gUnkClass2 gUnk80491470[32];
+static ctorStruct gUnk8063F310(1, 4, 0);
+
+extern "C" {
+
+static u32 func_801DBB3C(void)
+{
+ return 0;
+}
+
+static void func_801DBB44(u32)
+{
+
+}
+static void func_801DBB48(gUnkClass2 *p1, size_t nodes, size_t size)
+{
+ size_t blockSize = (size+7) & ~0x3;
+ p1->unk8 = nodes;
+ p1->unkC = blockSize;
+ u8* data = (u8*)func_801DAD98((nodes + 1) * blockSize);
+ p1->unk10 = data;
+ p1->unk18 = (gUnkClass3*)data;
+ p1->unk14 = data + (nodes * blockSize);
+ u8* next;
+ u8** pnext = &next;
+ size_t i;
+ gUnkClass3* r8 = NULL;
+ for (i = 0; i < nodes; i++) {
+ *pnext = data + blockSize;
+ r8 = (gUnkClass3*)data;
+ ((gUnkClass3*)data)->unk0 = (gUnkClass3*)(*pnext);
+ data = *pnext;
+ }
+ r8->unk0 = 0;
+}
+
+gUnkClass1* func_801DBC58(gUnkClass2* p1)
+{
+ gUnkClass3* r31 = p1->unk18;
+ u32 r30 = func_801DBB3C();
+ func_801DBB44(0);
+ if (r31) {
+ p1->unk18 = r31->unk0;
+ goto passCheck;
+ }
+ func_801DBB44(r30);
+ return NULL;
+passCheck:
+ func_801DBB44(r30);
+ memset(r31, 0, p1->unkC);
+ if (++p1->unk0 > p1->unk4)
+ p1->unk4 = p1->unk0;
+ return &r31->unk4;
+}
+
+void func_801DBD00(gUnkClass2* p1, gUnkClass1* p2)
+{
+ u32 r31;
+ if (p2) {
+ gUnkClass3* r30 = (gUnkClass3*)((u8*)p2 - 4);
+ r30->unk0 = p1->unk18;
+ p1->unk0--;
+ r31 = func_801DBB3C();
+ func_801DBB44(0);
+ p1->unk18 = r30;
+ func_801DBB44(r31);
+ }
+}
+
+gUnkClass2* func_801DBD74(u32 nodes, u32 size)
+{
+ size_t i;
+ for (i = 0; i < 32; i++)
+ if (gUnk80491470[i].unk8 == 0)
+ break;
+ gUnkClass2* r31 = &gUnk80491470[i];
+ if (r31->unk8)
+ return NULL;
+ func_801DBB48(r31, nodes, size);
+ return r31;
+}
+
+}