From 2b2dc15d6b79b51ffb09a9d1698bfa687363c242 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 21 Oct 2020 00:07:51 -0400 Subject: match func_801DB92C --- asm/code_801DB81C.s | 235 ----------------------------------------------- asm/code_801DB81C_asm.s | 136 +++++++++++++++++++++++++++ include/SDK/OS/OSCache.h | 14 +++ include/SDK/os.h | 15 +++ obj_files.mk | 3 +- src/code_801DB81C.cpp | 148 +++++++++++++++++++++++++++++ 6 files changed, 315 insertions(+), 236 deletions(-) delete mode 100644 asm/code_801DB81C.s create mode 100644 asm/code_801DB81C_asm.s create mode 100644 include/SDK/OS/OSCache.h create mode 100644 include/SDK/os.h create mode 100644 src/code_801DB81C.cpp diff --git a/asm/code_801DB81C.s b/asm/code_801DB81C.s deleted file mode 100644 index 5544ad5..0000000 --- a/asm/code_801DB81C.s +++ /dev/null @@ -1,235 +0,0 @@ -.include "macros.inc" - -.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) -/* 801DB97C 001D75DC 7C 08 02 A6 */ mflr r0 -/* 801DB980 001D75E0 90 01 00 14 */ stw r0, 0x14(r1) -/* 801DB984 001D75E4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801DB988 001D75E8 7C 3F 0B 78 */ mr r31, r1 -/* 801DB98C 001D75EC 93 C1 00 08 */ stw r30, 8(r1) -/* 801DB990 001D75F0 7C 7E 1B 78 */ mr r30, r3 -/* 801DB994 001D75F4 7C 68 02 A6 */ mflr r3 -/* 801DB998 001D75F8 90 6D A0 40 */ stw r3, lbl_8063F300-_SDA_BASE_(r13) -/* 801DB99C 001D75FC 7F C3 F3 78 */ mr r3, r30 -/* 801DB9A0 001D7600 4B FF FE 7D */ bl func_801DB81C -/* 801DB9A4 001D7604 2C 1E 00 00 */ cmpwi r30, 0 -/* 801DB9A8 001D7608 40 82 00 0C */ bne lbl_801DB9B4 -/* 801DB9AC 001D760C 38 60 00 01 */ li r3, 1 -/* 801DB9B0 001D7610 48 00 00 2C */ b lbl_801DB9DC -lbl_801DB9B4: -/* 801DB9B4 001D7614 80 6D A0 3C */ lwz r3, lbl_8063F2FC-_SDA_BASE_(r13) -/* 801DB9B8 001D7618 80 AD A0 38 */ lwz r5, lbl_8063F2F8-_SDA_BASE_(r13) -/* 801DB9BC 001D761C 7C 63 2A 14 */ add r3, r3, r5 -/* 801DB9C0 001D7620 38 23 FF F8 */ addi r1, r3, -8 -/* 801DB9C4 001D7624 38 60 FF FF */ li r3, -1 -/* 801DB9C8 001D7628 90 61 00 00 */ stw r3, 0(r1) -/* 801DB9CC 001D762C 80 6D A0 40 */ lwz r3, lbl_8063F300-_SDA_BASE_(r13) -/* 801DB9D0 001D7630 7C 68 03 A6 */ mtlr r3 -/* 801DB9D4 001D7634 4E 80 00 20 */ blr -/* 801DB9D8 001D7638 38 60 00 01 */ li r3, 1 -lbl_801DB9DC: -/* 801DB9DC 001D763C 7F EA FB 78 */ mr r10, r31 -/* 801DB9E0 001D7640 83 FF 00 0C */ lwz r31, 0xc(r31) -/* 801DB9E4 001D7644 83 CA 00 08 */ lwz r30, 8(r10) -/* 801DB9E8 001D7648 81 41 00 00 */ lwz r10, 0(r1) -/* 801DB9EC 001D764C 80 0A 00 04 */ lwz r0, 4(r10) -/* 801DB9F0 001D7650 7D 41 53 78 */ mr r1, r10 -/* 801DB9F4 001D7654 7C 08 03 A6 */ mtlr r0 -/* 801DB9F8 001D7658 4E 80 00 20 */ blr - -.global func_801DB9FC -func_801DB9FC: -/* 801DB9FC 001D765C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801DBA00 001D7660 7C 08 02 A6 */ mflr r0 -/* 801DBA04 001D7664 90 01 00 14 */ stw r0, 0x14(r1) -/* 801DBA08 001D7668 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801DBA0C 001D766C 93 C1 00 08 */ stw r30, 8(r1) -/* 801DBA10 001D7670 88 0D A0 44 */ lbz r0, lbl_8063F304-_SDA_BASE_(r13) -/* 801DBA14 001D7674 28 00 00 01 */ cmplwi r0, 1 -/* 801DBA18 001D7678 41 82 00 5C */ beq lbl_801DBA74 -/* 801DBA1C 001D767C 3F C0 80 49 */ lis r30, lbl_80491370@ha -/* 801DBA20 001D7680 3B E0 00 1F */ li r31, 0x1f -/* 801DBA24 001D7684 3B DE 13 70 */ addi r30, r30, lbl_80491370@l -lbl_801DBA28: -/* 801DBA28 001D7688 88 1E 00 00 */ lbz r0, 0(r30) -/* 801DBA2C 001D768C 28 00 00 FF */ cmplwi r0, 0xff -/* 801DBA30 001D7690 41 82 00 2C */ beq lbl_801DBA5C -/* 801DBA34 001D7694 81 9E 00 04 */ lwz r12, 4(r30) -/* 801DBA38 001D7698 2C 0C 00 00 */ cmpwi r12, 0 -/* 801DBA3C 001D769C 41 82 00 20 */ beq lbl_801DBA5C -/* 801DBA40 001D76A0 80 6D A0 3C */ lwz r3, lbl_8063F2FC-_SDA_BASE_(r13) -/* 801DBA44 001D76A4 54 00 4B EC */ rlwinm r0, r0, 9, 0xf, 0x16 -/* 801DBA48 001D76A8 88 BE 00 01 */ lbz r5, 1(r30) -/* 801DBA4C 001D76AC 7C 83 02 14 */ add r4, r3, r0 -/* 801DBA50 001D76B0 38 60 00 00 */ li r3, 0 -/* 801DBA54 001D76B4 7D 89 03 A6 */ mtctr r12 -/* 801DBA58 001D76B8 4E 80 04 21 */ bctrl -lbl_801DBA5C: -/* 801DBA5C 001D76BC 2C 1F 00 00 */ cmpwi r31, 0 -/* 801DBA60 001D76C0 3B FF FF FF */ addi r31, r31, -1 -/* 801DBA64 001D76C4 3B DE 00 08 */ addi r30, r30, 8 -/* 801DBA68 001D76C8 40 82 FF C0 */ bne lbl_801DBA28 -/* 801DBA6C 001D76CC 38 00 00 01 */ li r0, 1 -/* 801DBA70 001D76D0 98 0D A0 44 */ stb r0, lbl_8063F304-_SDA_BASE_(r13) -lbl_801DBA74: -/* 801DBA74 001D76D4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801DBA78 001D76D8 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801DBA7C 001D76DC 83 C1 00 08 */ lwz r30, 8(r1) -/* 801DBA80 001D76E0 7C 08 03 A6 */ mtlr r0 -/* 801DBA84 001D76E4 38 21 00 10 */ addi r1, r1, 0x10 -/* 801DBA88 001D76E8 4E 80 00 20 */ blr - -.global func_801DBA8C -func_801DBA8C: -/* 801DBA8C 001D76EC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801DBA90 001D76F0 7C 08 02 A6 */ mflr r0 -/* 801DBA94 001D76F4 90 01 00 14 */ stw r0, 0x14(r1) -/* 801DBA98 001D76F8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801DBA9C 001D76FC 93 C1 00 08 */ stw r30, 8(r1) -/* 801DBAA0 001D7700 88 0D A0 44 */ lbz r0, lbl_8063F304-_SDA_BASE_(r13) -/* 801DBAA4 001D7704 2C 00 00 00 */ cmpwi r0, 0 -/* 801DBAA8 001D7708 41 82 00 5C */ beq lbl_801DBB04 -/* 801DBAAC 001D770C 3F C0 80 49 */ lis r30, lbl_80491370@ha -/* 801DBAB0 001D7710 3B E0 00 1F */ li r31, 0x1f -/* 801DBAB4 001D7714 3B DE 13 70 */ addi r30, r30, lbl_80491370@l -lbl_801DBAB8: -/* 801DBAB8 001D7718 88 1E 00 00 */ lbz r0, 0(r30) -/* 801DBABC 001D771C 28 00 00 FF */ cmplwi r0, 0xff -/* 801DBAC0 001D7720 41 82 00 2C */ beq lbl_801DBAEC -/* 801DBAC4 001D7724 81 9E 00 04 */ lwz r12, 4(r30) -/* 801DBAC8 001D7728 2C 0C 00 00 */ cmpwi r12, 0 -/* 801DBACC 001D772C 41 82 00 20 */ beq lbl_801DBAEC -/* 801DBAD0 001D7730 80 6D A0 3C */ lwz r3, lbl_8063F2FC-_SDA_BASE_(r13) -/* 801DBAD4 001D7734 54 00 4B EC */ rlwinm r0, r0, 9, 0xf, 0x16 -/* 801DBAD8 001D7738 88 BE 00 01 */ lbz r5, 1(r30) -/* 801DBADC 001D773C 7C 83 02 14 */ add r4, r3, r0 -/* 801DBAE0 001D7740 38 60 00 01 */ li r3, 1 -/* 801DBAE4 001D7744 7D 89 03 A6 */ mtctr r12 -/* 801DBAE8 001D7748 4E 80 04 21 */ bctrl -lbl_801DBAEC: -/* 801DBAEC 001D774C 2C 1F 00 00 */ cmpwi r31, 0 -/* 801DBAF0 001D7750 3B FF FF FF */ addi r31, r31, -1 -/* 801DBAF4 001D7754 3B DE 00 08 */ addi r30, r30, 8 -/* 801DBAF8 001D7758 40 82 FF C0 */ bne lbl_801DBAB8 -/* 801DBAFC 001D775C 38 00 00 00 */ li r0, 0 -/* 801DBB00 001D7760 98 0D A0 44 */ stb r0, lbl_8063F304-_SDA_BASE_(r13) -lbl_801DBB04: -/* 801DBB04 001D7764 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801DBB08 001D7768 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801DBB0C 001D776C 83 C1 00 08 */ lwz r30, 8(r1) -/* 801DBB10 001D7770 7C 08 03 A6 */ mtlr r0 -/* 801DBB14 001D7774 38 21 00 10 */ addi r1, r1, 0x10 -/* 801DBB18 001D7778 4E 80 00 20 */ blr - -.global func_801DBB1C -func_801DBB1C: -/* 801DBB1C 001D777C 38 A0 00 01 */ li r5, 1 -/* 801DBB20 001D7780 38 6D A0 30 */ addi r3, r13, lbl_8063F2F0-_SDA_BASE_ -/* 801DBB24 001D7784 38 80 00 04 */ li r4, 4 -/* 801DBB28 001D7788 38 00 00 00 */ li r0, 0 -/* 801DBB2C 001D778C 98 AD A0 30 */ stb r5, lbl_8063F2F0-_SDA_BASE_(r13) -/* 801DBB30 001D7790 B0 83 00 02 */ sth r4, 2(r3) -/* 801DBB34 001D7794 98 03 00 04 */ stb r0, 4(r3) -/* 801DBB38 001D7798 4E 80 00 20 */ blr diff --git a/asm/code_801DB81C_asm.s b/asm/code_801DB81C_asm.s new file mode 100644 index 0000000..30007ec --- /dev/null +++ b/asm/code_801DB81C_asm.s @@ -0,0 +1,136 @@ +.include "macros.inc" + +.section .text, "ax" # 0x80006980 - 0x803E1E60 + +.global func_801DB978 +func_801DB978: +/* 801DB978 001D75D8 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 801DB97C 001D75DC 7C 08 02 A6 */ mflr r0 +/* 801DB980 001D75E0 90 01 00 14 */ stw r0, 0x14(r1) +/* 801DB984 001D75E4 93 E1 00 0C */ stw r31, 0xc(r1) +/* 801DB988 001D75E8 7C 3F 0B 78 */ mr r31, r1 +/* 801DB98C 001D75EC 93 C1 00 08 */ stw r30, 8(r1) +/* 801DB990 001D75F0 7C 7E 1B 78 */ mr r30, r3 +/* 801DB994 001D75F4 7C 68 02 A6 */ mflr r3 +/* 801DB998 001D75F8 90 6D A0 40 */ stw r3, lbl_8063F300-_SDA_BASE_(r13) +/* 801DB99C 001D75FC 7F C3 F3 78 */ mr r3, r30 +/* 801DB9A0 001D7600 4B FF FE 7D */ bl func_801DB81C +/* 801DB9A4 001D7604 2C 1E 00 00 */ cmpwi r30, 0 +/* 801DB9A8 001D7608 40 82 00 0C */ bne lbl_801DB9B4 +/* 801DB9AC 001D760C 38 60 00 01 */ li r3, 1 +/* 801DB9B0 001D7610 48 00 00 2C */ b lbl_801DB9DC +lbl_801DB9B4: +/* 801DB9B4 001D7614 80 6D A0 3C */ lwz r3, lbl_8063F2FC-_SDA_BASE_(r13) +/* 801DB9B8 001D7618 80 AD A0 38 */ lwz r5, lbl_8063F2F8-_SDA_BASE_(r13) +/* 801DB9BC 001D761C 7C 63 2A 14 */ add r3, r3, r5 +/* 801DB9C0 001D7620 38 23 FF F8 */ addi r1, r3, -8 +/* 801DB9C4 001D7624 38 60 FF FF */ li r3, -1 +/* 801DB9C8 001D7628 90 61 00 00 */ stw r3, 0(r1) +/* 801DB9CC 001D762C 80 6D A0 40 */ lwz r3, lbl_8063F300-_SDA_BASE_(r13) +/* 801DB9D0 001D7630 7C 68 03 A6 */ mtlr r3 +/* 801DB9D4 001D7634 4E 80 00 20 */ blr +/* 801DB9D8 001D7638 38 60 00 01 */ li r3, 1 +lbl_801DB9DC: +/* 801DB9DC 001D763C 7F EA FB 78 */ mr r10, r31 +/* 801DB9E0 001D7640 83 FF 00 0C */ lwz r31, 0xc(r31) +/* 801DB9E4 001D7644 83 CA 00 08 */ lwz r30, 8(r10) +/* 801DB9E8 001D7648 81 41 00 00 */ lwz r10, 0(r1) +/* 801DB9EC 001D764C 80 0A 00 04 */ lwz r0, 4(r10) +/* 801DB9F0 001D7650 7D 41 53 78 */ mr r1, r10 +/* 801DB9F4 001D7654 7C 08 03 A6 */ mtlr r0 +/* 801DB9F8 001D7658 4E 80 00 20 */ blr + +.global func_801DB9FC +func_801DB9FC: +/* 801DB9FC 001D765C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 801DBA00 001D7660 7C 08 02 A6 */ mflr r0 +/* 801DBA04 001D7664 90 01 00 14 */ stw r0, 0x14(r1) +/* 801DBA08 001D7668 93 E1 00 0C */ stw r31, 0xc(r1) +/* 801DBA0C 001D766C 93 C1 00 08 */ stw r30, 8(r1) +/* 801DBA10 001D7670 88 0D A0 44 */ lbz r0, lbl_8063F304-_SDA_BASE_(r13) +/* 801DBA14 001D7674 28 00 00 01 */ cmplwi r0, 1 +/* 801DBA18 001D7678 41 82 00 5C */ beq lbl_801DBA74 +/* 801DBA1C 001D767C 3F C0 80 49 */ lis r30, lbl_80491370@ha +/* 801DBA20 001D7680 3B E0 00 1F */ li r31, 0x1f +/* 801DBA24 001D7684 3B DE 13 70 */ addi r30, r30, lbl_80491370@l +lbl_801DBA28: +/* 801DBA28 001D7688 88 1E 00 00 */ lbz r0, 0(r30) +/* 801DBA2C 001D768C 28 00 00 FF */ cmplwi r0, 0xff +/* 801DBA30 001D7690 41 82 00 2C */ beq lbl_801DBA5C +/* 801DBA34 001D7694 81 9E 00 04 */ lwz r12, 4(r30) +/* 801DBA38 001D7698 2C 0C 00 00 */ cmpwi r12, 0 +/* 801DBA3C 001D769C 41 82 00 20 */ beq lbl_801DBA5C +/* 801DBA40 001D76A0 80 6D A0 3C */ lwz r3, lbl_8063F2FC-_SDA_BASE_(r13) +/* 801DBA44 001D76A4 54 00 4B EC */ rlwinm r0, r0, 9, 0xf, 0x16 +/* 801DBA48 001D76A8 88 BE 00 01 */ lbz r5, 1(r30) +/* 801DBA4C 001D76AC 7C 83 02 14 */ add r4, r3, r0 +/* 801DBA50 001D76B0 38 60 00 00 */ li r3, 0 +/* 801DBA54 001D76B4 7D 89 03 A6 */ mtctr r12 +/* 801DBA58 001D76B8 4E 80 04 21 */ bctrl +lbl_801DBA5C: +/* 801DBA5C 001D76BC 2C 1F 00 00 */ cmpwi r31, 0 +/* 801DBA60 001D76C0 3B FF FF FF */ addi r31, r31, -1 +/* 801DBA64 001D76C4 3B DE 00 08 */ addi r30, r30, 8 +/* 801DBA68 001D76C8 40 82 FF C0 */ bne lbl_801DBA28 +/* 801DBA6C 001D76CC 38 00 00 01 */ li r0, 1 +/* 801DBA70 001D76D0 98 0D A0 44 */ stb r0, lbl_8063F304-_SDA_BASE_(r13) +lbl_801DBA74: +/* 801DBA74 001D76D4 80 01 00 14 */ lwz r0, 0x14(r1) +/* 801DBA78 001D76D8 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 801DBA7C 001D76DC 83 C1 00 08 */ lwz r30, 8(r1) +/* 801DBA80 001D76E0 7C 08 03 A6 */ mtlr r0 +/* 801DBA84 001D76E4 38 21 00 10 */ addi r1, r1, 0x10 +/* 801DBA88 001D76E8 4E 80 00 20 */ blr + +.global func_801DBA8C +func_801DBA8C: +/* 801DBA8C 001D76EC 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 801DBA90 001D76F0 7C 08 02 A6 */ mflr r0 +/* 801DBA94 001D76F4 90 01 00 14 */ stw r0, 0x14(r1) +/* 801DBA98 001D76F8 93 E1 00 0C */ stw r31, 0xc(r1) +/* 801DBA9C 001D76FC 93 C1 00 08 */ stw r30, 8(r1) +/* 801DBAA0 001D7700 88 0D A0 44 */ lbz r0, lbl_8063F304-_SDA_BASE_(r13) +/* 801DBAA4 001D7704 2C 00 00 00 */ cmpwi r0, 0 +/* 801DBAA8 001D7708 41 82 00 5C */ beq lbl_801DBB04 +/* 801DBAAC 001D770C 3F C0 80 49 */ lis r30, lbl_80491370@ha +/* 801DBAB0 001D7710 3B E0 00 1F */ li r31, 0x1f +/* 801DBAB4 001D7714 3B DE 13 70 */ addi r30, r30, lbl_80491370@l +lbl_801DBAB8: +/* 801DBAB8 001D7718 88 1E 00 00 */ lbz r0, 0(r30) +/* 801DBABC 001D771C 28 00 00 FF */ cmplwi r0, 0xff +/* 801DBAC0 001D7720 41 82 00 2C */ beq lbl_801DBAEC +/* 801DBAC4 001D7724 81 9E 00 04 */ lwz r12, 4(r30) +/* 801DBAC8 001D7728 2C 0C 00 00 */ cmpwi r12, 0 +/* 801DBACC 001D772C 41 82 00 20 */ beq lbl_801DBAEC +/* 801DBAD0 001D7730 80 6D A0 3C */ lwz r3, lbl_8063F2FC-_SDA_BASE_(r13) +/* 801DBAD4 001D7734 54 00 4B EC */ rlwinm r0, r0, 9, 0xf, 0x16 +/* 801DBAD8 001D7738 88 BE 00 01 */ lbz r5, 1(r30) +/* 801DBADC 001D773C 7C 83 02 14 */ add r4, r3, r0 +/* 801DBAE0 001D7740 38 60 00 01 */ li r3, 1 +/* 801DBAE4 001D7744 7D 89 03 A6 */ mtctr r12 +/* 801DBAE8 001D7748 4E 80 04 21 */ bctrl +lbl_801DBAEC: +/* 801DBAEC 001D774C 2C 1F 00 00 */ cmpwi r31, 0 +/* 801DBAF0 001D7750 3B FF FF FF */ addi r31, r31, -1 +/* 801DBAF4 001D7754 3B DE 00 08 */ addi r30, r30, 8 +/* 801DBAF8 001D7758 40 82 FF C0 */ bne lbl_801DBAB8 +/* 801DBAFC 001D775C 38 00 00 00 */ li r0, 0 +/* 801DBB00 001D7760 98 0D A0 44 */ stb r0, lbl_8063F304-_SDA_BASE_(r13) +lbl_801DBB04: +/* 801DBB04 001D7764 80 01 00 14 */ lwz r0, 0x14(r1) +/* 801DBB08 001D7768 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 801DBB0C 001D776C 83 C1 00 08 */ lwz r30, 8(r1) +/* 801DBB10 001D7770 7C 08 03 A6 */ mtlr r0 +/* 801DBB14 001D7774 38 21 00 10 */ addi r1, r1, 0x10 +/* 801DBB18 001D7778 4E 80 00 20 */ blr + +.global func_801DBB1C +func_801DBB1C: +/* 801DBB1C 001D777C 38 A0 00 01 */ li r5, 1 +/* 801DBB20 001D7780 38 6D A0 30 */ addi r3, r13, lbl_8063F2F0-_SDA_BASE_ +/* 801DBB24 001D7784 38 80 00 04 */ li r4, 4 +/* 801DBB28 001D7788 38 00 00 00 */ li r0, 0 +/* 801DBB2C 001D778C 98 AD A0 30 */ stb r5, lbl_8063F2F0-_SDA_BASE_(r13) +/* 801DBB30 001D7790 B0 83 00 02 */ sth r4, 2(r3) +/* 801DBB34 001D7794 98 03 00 04 */ stb r0, 4(r3) +/* 801DBB38 001D7798 4E 80 00 20 */ blr 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; + } +} + + + + + +} -- cgit v1.2.3