summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax <mparisi@stevens.edu>2020-10-21 00:07:51 -0400
committerMax <mparisi@stevens.edu>2020-10-21 00:07:51 -0400
commit2b2dc15d6b79b51ffb09a9d1698bfa687363c242 (patch)
tree5a5dc9c5039e4fe215e8e86e815f35c612548f96
parenta66cb7497f72a1628834b28328da86b4a33326d9 (diff)
match func_801DB92C
-rw-r--r--asm/code_801DB81C_asm.s (renamed from asm/code_801DB81C.s)99
-rw-r--r--include/SDK/OS/OSCache.h14
-rw-r--r--include/SDK/os.h15
-rw-r--r--obj_files.mk3
-rw-r--r--src/code_801DB81C.cpp148
5 files changed, 179 insertions, 100 deletions
diff --git a/asm/code_801DB81C.s b/asm/code_801DB81C_asm.s
index 5544ad5..30007ec 100644
--- a/asm/code_801DB81C.s
+++ b/asm/code_801DB81C_asm.s
@@ -2,105 +2,6 @@
.section .text, "ax" # 0x80006980 - 0x803E1E60
-.global func_801DB81C
-func_801DB81C:
-/* 801DB81C 001D747C 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DB820 001D7480 7C 08 02 A6 */ mflr r0
-/* 801DB824 001D7484 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DB828 001D7488 38 00 00 FF */ li r0, 0xff
-/* 801DB82C 001D748C 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 801DB830 001D7490 3F E0 80 49 */ lis r31, lbl_80491370@ha
-/* 801DB834 001D7494 93 C1 00 18 */ stw r30, 0x18(r1)
-/* 801DB838 001D7498 3B C0 00 00 */ li r30, 0
-/* 801DB83C 001D749C 93 A1 00 14 */ stw r29, 0x14(r1)
-/* 801DB840 001D74A0 3B BF 13 70 */ addi r29, r31, lbl_80491370@l
-/* 801DB844 001D74A4 93 81 00 10 */ stw r28, 0x10(r1)
-/* 801DB848 001D74A8 7C 7C 1B 78 */ mr r28, r3
-/* 801DB84C 001D74AC 98 1D 00 00 */ stb r0, 0(r29)
-/* 801DB850 001D74B0 98 1D 00 08 */ stb r0, 8(r29)
-/* 801DB854 001D74B4 98 1D 00 10 */ stb r0, 0x10(r29)
-/* 801DB858 001D74B8 98 1D 00 18 */ stb r0, 0x18(r29)
-/* 801DB85C 001D74BC 98 1D 00 20 */ stb r0, 0x20(r29)
-/* 801DB860 001D74C0 98 1D 00 28 */ stb r0, 0x28(r29)
-/* 801DB864 001D74C4 98 1D 00 30 */ stb r0, 0x30(r29)
-/* 801DB868 001D74C8 98 1D 00 38 */ stb r0, 0x38(r29)
-/* 801DB86C 001D74CC 98 1D 00 40 */ stb r0, 0x40(r29)
-/* 801DB870 001D74D0 98 1D 00 48 */ stb r0, 0x48(r29)
-/* 801DB874 001D74D4 98 1D 00 50 */ stb r0, 0x50(r29)
-/* 801DB878 001D74D8 98 1D 00 58 */ stb r0, 0x58(r29)
-/* 801DB87C 001D74DC 98 1D 00 60 */ stb r0, 0x60(r29)
-/* 801DB880 001D74E0 98 1D 00 68 */ stb r0, 0x68(r29)
-/* 801DB884 001D74E4 98 1D 00 70 */ stb r0, 0x70(r29)
-/* 801DB888 001D74E8 98 1D 00 78 */ stb r0, 0x78(r29)
-/* 801DB88C 001D74EC 98 1D 00 80 */ stb r0, 0x80(r29)
-/* 801DB890 001D74F0 98 1D 00 88 */ stb r0, 0x88(r29)
-/* 801DB894 001D74F4 98 1D 00 90 */ stb r0, 0x90(r29)
-/* 801DB898 001D74F8 98 1D 00 98 */ stb r0, 0x98(r29)
-/* 801DB89C 001D74FC 98 1D 00 A0 */ stb r0, 0xa0(r29)
-/* 801DB8A0 001D7500 98 1D 00 A8 */ stb r0, 0xa8(r29)
-/* 801DB8A4 001D7504 98 1D 00 B0 */ stb r0, 0xb0(r29)
-/* 801DB8A8 001D7508 98 1D 00 B8 */ stb r0, 0xb8(r29)
-/* 801DB8AC 001D750C 98 1D 00 C0 */ stb r0, 0xc0(r29)
-/* 801DB8B0 001D7510 98 1D 00 C8 */ stb r0, 0xc8(r29)
-/* 801DB8B4 001D7514 98 1D 00 D0 */ stb r0, 0xd0(r29)
-/* 801DB8B8 001D7518 98 1D 00 D8 */ stb r0, 0xd8(r29)
-/* 801DB8BC 001D751C 98 1D 00 E0 */ stb r0, 0xe0(r29)
-/* 801DB8C0 001D7520 98 1D 00 E8 */ stb r0, 0xe8(r29)
-/* 801DB8C4 001D7524 98 1D 00 F0 */ stb r0, 0xf0(r29)
-/* 801DB8C8 001D7528 93 CD A0 48 */ stw r30, lbl_8063F308-_SDA_BASE_(r13)
-/* 801DB8CC 001D752C 98 1D 00 F8 */ stb r0, 0xf8(r29)
-/* 801DB8D0 001D7530 48 08 EF 8D */ bl LCEnable
-/* 801DB8D4 001D7534 57 80 4B EC */ rlwinm r0, r28, 9, 0xf, 0x16
-/* 801DB8D8 001D7538 3C 60 E0 00 */ lis r3, 0xe000
-/* 801DB8DC 001D753C 2C 1C 00 00 */ cmpwi r28, 0
-/* 801DB8E0 001D7540 90 6D A0 3C */ stw r3, lbl_8063F2FC-_SDA_BASE_(r13)
-/* 801DB8E4 001D7544 90 0D A0 38 */ stw r0, lbl_8063F2F8-_SDA_BASE_(r13)
-/* 801DB8E8 001D7548 41 82 00 1C */ beq lbl_801DB904
-/* 801DB8EC 001D754C 7F 84 E3 78 */ mr r4, r28
-/* 801DB8F0 001D7550 38 60 00 00 */ li r3, 0
-/* 801DB8F4 001D7554 38 A0 00 01 */ li r5, 1
-/* 801DB8F8 001D7558 48 00 00 35 */ bl func_801DB92C
-/* 801DB8FC 001D755C 9B DF 13 70 */ stb r30, 0x1370(r31)
-/* 801DB900 001D7560 9B 9D 00 01 */ stb r28, 1(r29)
-lbl_801DB904:
-/* 801DB904 001D7564 38 00 00 00 */ li r0, 0
-/* 801DB908 001D7568 98 0D A0 44 */ stb r0, lbl_8063F304-_SDA_BASE_(r13)
-/* 801DB90C 001D756C 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 801DB910 001D7570 83 C1 00 18 */ lwz r30, 0x18(r1)
-/* 801DB914 001D7574 83 A1 00 14 */ lwz r29, 0x14(r1)
-/* 801DB918 001D7578 83 81 00 10 */ lwz r28, 0x10(r1)
-/* 801DB91C 001D757C 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DB920 001D7580 7C 08 03 A6 */ mtlr r0
-/* 801DB924 001D7584 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DB928 001D7588 4E 80 00 20 */ blr
-
-.global func_801DB92C
-func_801DB92C:
-/* 801DB92C 001D758C 3C C0 80 00 */ lis r6, 0x8000
-/* 801DB930 001D7590 48 00 00 08 */ b lbl_801DB938
-lbl_801DB934:
-/* 801DB934 001D7594 54 C6 F8 7E */ srwi r6, r6, 1
-lbl_801DB938:
-/* 801DB938 001D7598 54 60 06 3F */ clrlwi. r0, r3, 0x18
-/* 801DB93C 001D759C 38 63 FF FF */ addi r3, r3, -1
-/* 801DB940 001D75A0 40 82 FF F4 */ bne lbl_801DB934
-/* 801DB944 001D75A4 80 0D A0 48 */ lwz r0, lbl_8063F308-_SDA_BASE_(r13)
-/* 801DB948 001D75A8 48 00 00 20 */ b lbl_801DB968
-lbl_801DB94C:
-/* 801DB94C 001D75AC 28 05 00 01 */ cmplwi r5, 1
-/* 801DB950 001D75B0 7C 03 30 78 */ andc r3, r0, r6
-/* 801DB954 001D75B4 40 82 00 08 */ bne lbl_801DB95C
-/* 801DB958 001D75B8 7C 03 33 78 */ or r3, r0, r6
-lbl_801DB95C:
-/* 801DB95C 001D75BC 90 6D A0 48 */ stw r3, lbl_8063F308-_SDA_BASE_(r13)
-/* 801DB960 001D75C0 7C 60 1B 78 */ mr r0, r3
-/* 801DB964 001D75C4 54 C6 F8 7E */ srwi r6, r6, 1
-lbl_801DB968:
-/* 801DB968 001D75C8 54 83 06 3F */ clrlwi. r3, r4, 0x18
-/* 801DB96C 001D75CC 38 84 FF FF */ addi r4, r4, -1
-/* 801DB970 001D75D0 40 82 FF DC */ bne lbl_801DB94C
-/* 801DB974 001D75D4 4E 80 00 20 */ blr
-
.global func_801DB978
func_801DB978:
/* 801DB978 001D75D8 94 21 FF F0 */ stwu r1, -0x10(r1)
diff --git a/include/SDK/OS/OSCache.h b/include/SDK/OS/OSCache.h
new file mode 100644
index 0000000..489ed0b
--- /dev/null
+++ b/include/SDK/OS/OSCache.h
@@ -0,0 +1,14 @@
+#ifndef POKEREVO_OSCACHE_H
+#define POKEREVO_OSCACHE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void LCEnable(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //POKEREVO_OSCACHE_H
diff --git a/include/SDK/os.h b/include/SDK/os.h
new file mode 100644
index 0000000..10d4153
--- /dev/null
+++ b/include/SDK/os.h
@@ -0,0 +1,15 @@
+#ifndef POKEREVO_OS_H
+#define POKEREVO_OS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "SDK/OS/OSAlloc.h"
+#include "SDK/OS/OSCache.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //POKEREVO_OS_H
diff --git a/obj_files.mk b/obj_files.mk
index 6ee474c..7bfc40a 100644
--- a/obj_files.mk
+++ b/obj_files.mk
@@ -220,7 +220,8 @@ SPLIT_O_FILES := \
$(BUILD_DIR)/src/code_801DAA30.o \
$(BUILD_DIR)/src/code_801DAAE0.o \
$(BUILD_DIR)/src/code_801DB040.o \
- $(BUILD_DIR)/asm/code_801DB81C.o \
+ $(BUILD_DIR)/src/code_801DB81C.o \
+ $(BUILD_DIR)/asm/code_801DB81C_asm.o \
$(BUILD_DIR)/asm/code_801DBB3C.o \
$(BUILD_DIR)/asm/code_801DBE90.o \
$(BUILD_DIR)/asm/code_801DCE6C.o \
diff --git a/src/code_801DB81C.cpp b/src/code_801DB81C.cpp
new file mode 100644
index 0000000..8940b1d
--- /dev/null
+++ b/src/code_801DB81C.cpp
@@ -0,0 +1,148 @@
+#include "types.h"
+#include "unkStruct.h"
+#include "SDK/os.h"
+
+extern "C" {
+
+// TODO: rename
+struct unkClass3
+{
+ u8 unk0;
+ u8 unk1;
+ u32 unk4;
+};
+
+// TODO: define, rename, localize
+// extern unkClass3 lbl_80491370[32];
+extern u8 lbl_80491370;
+
+
+extern u32 lbl_8063F2F8;
+extern u32 lbl_8063F2FC;
+
+extern u8 lbl_8063F304;
+extern u32 lbl_8063F308;
+
+//static
+void func_801DB81C(u8 p1);
+
+void func_801DB92C(u8 p1, u8 p2, u32 p3);
+
+
+
+#ifdef NONMATCHING
+// 1. wrong instruction order: loading lbl_80491370@ha before 0
+// 2. r30/r31 register swap
+
+//static
+void func_801DB81C(u8 p1)
+{
+ for (size_t i = 0; i < 31; i++)
+ lbl_80491370[i].unk0 = 0xff;
+ lbl_8063F308 = 0;
+ lbl_80491370[31].unk0 = 0xff;
+ LCEnable();
+ lbl_8063F2FC = 0xE0000000;
+ lbl_8063F2F8 = p1 << 9;
+ if (p1) {
+ func_801DB92C(0, p1, 1);
+ lbl_80491370[0].unk0 = 0;
+ lbl_80491370[0].unk1 = p1;
+ }
+ lbl_8063F304 = 0;
+}
+#else
+#define _SDA_BASE_ 0x806452C0;
+asm void func_801DB81C(u8 p1)
+{
+ nofralloc
+ /* 801DB81C 001D747C 94 21 FF E0 */ stwu r1, -0x20(r1)
+ /* 801DB820 001D7480 7C 08 02 A6 */ mflr r0
+ /* 801DB824 001D7484 90 01 00 24 */ stw r0, 0x24(r1)
+ /* 801DB828 001D7488 38 00 00 FF */ li r0, 0xff
+ /* 801DB82C 001D748C 93 E1 00 1C */ stw r31, 0x1c(r1)
+ /* 801DB830 001D7490 3F E0 80 49 */ lis r31, lbl_80491370@ha
+ /* 801DB834 001D7494 93 C1 00 18 */ stw r30, 0x18(r1)
+ /* 801DB838 001D7498 3B C0 00 00 */ li r30, 0
+ /* 801DB83C 001D749C 93 A1 00 14 */ stw r29, 0x14(r1)
+ /* 801DB840 001D74A0 3B BF 13 70 */ addi r29, r31, lbl_80491370@l
+ /* 801DB844 001D74A4 93 81 00 10 */ stw r28, 0x10(r1)
+ /* 801DB848 001D74A8 7C 7C 1B 78 */ mr r28, r3
+ /* 801DB84C 001D74AC 98 1D 00 00 */ stb r0, 0(r29)
+ /* 801DB850 001D74B0 98 1D 00 08 */ stb r0, 8(r29)
+ /* 801DB854 001D74B4 98 1D 00 10 */ stb r0, 0x10(r29)
+ /* 801DB858 001D74B8 98 1D 00 18 */ stb r0, 0x18(r29)
+ /* 801DB85C 001D74BC 98 1D 00 20 */ stb r0, 0x20(r29)
+ /* 801DB860 001D74C0 98 1D 00 28 */ stb r0, 0x28(r29)
+ /* 801DB864 001D74C4 98 1D 00 30 */ stb r0, 0x30(r29)
+ /* 801DB868 001D74C8 98 1D 00 38 */ stb r0, 0x38(r29)
+ /* 801DB86C 001D74CC 98 1D 00 40 */ stb r0, 0x40(r29)
+ /* 801DB870 001D74D0 98 1D 00 48 */ stb r0, 0x48(r29)
+ /* 801DB874 001D74D4 98 1D 00 50 */ stb r0, 0x50(r29)
+ /* 801DB878 001D74D8 98 1D 00 58 */ stb r0, 0x58(r29)
+ /* 801DB87C 001D74DC 98 1D 00 60 */ stb r0, 0x60(r29)
+ /* 801DB880 001D74E0 98 1D 00 68 */ stb r0, 0x68(r29)
+ /* 801DB884 001D74E4 98 1D 00 70 */ stb r0, 0x70(r29)
+ /* 801DB888 001D74E8 98 1D 00 78 */ stb r0, 0x78(r29)
+ /* 801DB88C 001D74EC 98 1D 00 80 */ stb r0, 0x80(r29)
+ /* 801DB890 001D74F0 98 1D 00 88 */ stb r0, 0x88(r29)
+ /* 801DB894 001D74F4 98 1D 00 90 */ stb r0, 0x90(r29)
+ /* 801DB898 001D74F8 98 1D 00 98 */ stb r0, 0x98(r29)
+ /* 801DB89C 001D74FC 98 1D 00 A0 */ stb r0, 0xa0(r29)
+ /* 801DB8A0 001D7500 98 1D 00 A8 */ stb r0, 0xa8(r29)
+ /* 801DB8A4 001D7504 98 1D 00 B0 */ stb r0, 0xb0(r29)
+ /* 801DB8A8 001D7508 98 1D 00 B8 */ stb r0, 0xb8(r29)
+ /* 801DB8AC 001D750C 98 1D 00 C0 */ stb r0, 0xc0(r29)
+ /* 801DB8B0 001D7510 98 1D 00 C8 */ stb r0, 0xc8(r29)
+ /* 801DB8B4 001D7514 98 1D 00 D0 */ stb r0, 0xd0(r29)
+ /* 801DB8B8 001D7518 98 1D 00 D8 */ stb r0, 0xd8(r29)
+ /* 801DB8BC 001D751C 98 1D 00 E0 */ stb r0, 0xe0(r29)
+ /* 801DB8C0 001D7520 98 1D 00 E8 */ stb r0, 0xe8(r29)
+ /* 801DB8C4 001D7524 98 1D 00 F0 */ stb r0, 0xf0(r29)
+ /* 801DB8C8 001D7528 93 CD A0 48 */ stw r30, 0xA048(r13)
+ /* 801DB8CC 001D752C 98 1D 00 F8 */ stb r0, 0xf8(r29)
+ /* 801DB8D0 001D7530 48 08 EF 8D */ bl LCEnable
+ /* 801DB8D4 001D7534 57 80 4B EC */ rlwinm r0, r28, 9, 0xf, 0x16
+ /* 801DB8D8 001D7538 3C 60 E0 00 */ lis r3, 0xe000
+ /* 801DB8DC 001D753C 2C 1C 00 00 */ cmpwi r28, 0
+ /* 801DB8E0 001D7540 90 6D A0 3C */ stw r3, 0xA03C(r13)
+ /* 801DB8E4 001D7544 90 0D A0 38 */ stw r0, 0xA038(r13)
+ /* 801DB8E8 001D7548 41 82 00 1C */ beq lbl_801DB904
+ /* 801DB8EC 001D754C 7F 84 E3 78 */ mr r4, r28
+ /* 801DB8F0 001D7550 38 60 00 00 */ li r3, 0
+ /* 801DB8F4 001D7554 38 A0 00 01 */ li r5, 1
+ /* 801DB8F8 001D7558 48 00 00 35 */ bl func_801DB92C
+ /* 801DB8FC 001D755C 9B DF 13 70 */ stb r30, 0x1370(r31)
+ /* 801DB900 001D7560 9B 9D 00 01 */ stb r28, 1(r29)
+ lbl_801DB904:
+ /* 801DB904 001D7564 38 00 00 00 */ li r0, 0
+ /* 801DB908 001D7568 98 0D A0 44 */ stb r0, 0xA044(r13)
+ /* 801DB90C 001D756C 83 E1 00 1C */ lwz r31, 0x1c(r1)
+ /* 801DB910 001D7570 83 C1 00 18 */ lwz r30, 0x18(r1)
+ /* 801DB914 001D7574 83 A1 00 14 */ lwz r29, 0x14(r1)
+ /* 801DB918 001D7578 83 81 00 10 */ lwz r28, 0x10(r1)
+ /* 801DB91C 001D757C 80 01 00 24 */ lwz r0, 0x24(r1)
+ /* 801DB920 001D7580 7C 08 03 A6 */ mtlr r0
+ /* 801DB924 001D7584 38 21 00 20 */ addi r1, r1, 0x20
+ /* 801DB928 001D7588 4E 80 00 20 */ blr
+}
+#pragma peephole on
+#endif
+
+//static
+void func_801DB92C(u8 p1, u8 p2, u32 p3)
+{
+ u32 r6 = 0x80000000;
+ while (p1--)
+ r6 >>= 1;
+ while (p2--) {
+ lbl_8063F308 = (p3 == 1) ? lbl_8063F308 | r6 : lbl_8063F308 & ~r6;
+ r6 >>= 1;
+ }
+}
+
+
+
+
+
+}