diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | asm/NdevExi2A/DebuggerDriver.s (renamed from asm/SDK/NdevExi2A/DebuggerDriver.s) | 0 | ||||
-rw-r--r-- | asm/NdevExi2A/exi2.s (renamed from asm/SDK/NdevExi2A/exi2.s) | 0 | ||||
-rw-r--r-- | asm/code_80036F88.s | 4 | ||||
-rw-r--r-- | asm/code_801DD8C0.s | 502 | ||||
-rw-r--r-- | asm/code_801DDF78.s | 13 | ||||
-rw-r--r-- | asm/code_801E6BF8.s | 4 | ||||
-rw-r--r-- | asm/code_801EE044.s | 2 | ||||
-rw-r--r-- | asm/code_801F1AE8.s | 8 | ||||
-rw-r--r-- | asm/code_801F40E0.s | 14 | ||||
-rw-r--r-- | asm/code_80205954.s | 4 | ||||
-rw-r--r-- | asm/ctors_2.s | 1 | ||||
-rw-r--r-- | asm/sbss_2.s | 7 | ||||
-rw-r--r-- | asm/sdata2_2.s | 6 | ||||
-rw-r--r-- | include/GSanimationObject.h | 20 | ||||
-rw-r--r-- | include/GSblendObject.h | 19 | ||||
-rw-r--r-- | include/GShierMemObject.h | 30 | ||||
-rw-r--r-- | include/code_801DD5C8.h | 18 | ||||
-rw-r--r-- | obj_files.mk | 6 | ||||
-rw-r--r-- | src/code_801DAAE0.cpp | 3 | ||||
-rw-r--r-- | src/code_801DBB3C.cpp | 4 | ||||
-rw-r--r-- | src/code_801DD5C8.cpp | 13 | ||||
-rw-r--r-- | src/code_801DD8C0.cpp | 404 |
23 files changed, 535 insertions, 551 deletions
@@ -28,7 +28,7 @@ TARGET := pbr_pal BUILD_DIR := build/$(TARGET) -SRC_DIRS := src src/SDK/OS src/SDK/EXI src/SDK/SI src/SDK/DB src/SDK/VI src/SDK/MTX \ +SRC_DIRS := src src/NdevExi2A src/SDK/OS src/SDK/EXI src/SDK/SI src/SDK/DB src/SDK/VI src/SDK/MTX \ src/SDK/GX src/SDK/DVD src/SDK/AI src/SDK/AX src/SDK/AXFX src/SDK/MEM src/SDK/MIX src/SDK/DSP \ src/SDK/TPL src/SDK/THP src/SDK/KPAD src/SDK/CX src/SDK/PAD src/SDK/WPAD src/SDK/FS src/SDK/IPC \ src/SDK/NdevExi2A src/SDK/USB src/SDK/EUART src/SDK/WUD src/SDK/BTE src/SDK/NAND \ @@ -39,7 +39,7 @@ SRC_DIRS := src src/SDK/OS src/SDK/EXI src/SDK/SI src/SDK/DB src/SDK/VI src/SDK/ src/MSL_C/MSL_Common_Embedded/Math src/MSL_C/PPC_EABI src/Runtime \ src/MetroTRK src/nw4r/db src/nw4r/ut src/nw4r/snd src/nw4r/ut/detail \ src/nw4r/snd/detail src/nw4r/math src/nw4r/lyt src/nw4r/lyt/detail -ASM_DIRS := asm asm/SDK/OS asm/SDK/EXI asm/SDK/SI asm/SDK/DB asm/SDK/VI asm/SDK/MTX \ +ASM_DIRS := asm asm/NdevExi2A asm/SDK/OS asm/SDK/EXI asm/SDK/SI asm/SDK/DB asm/SDK/VI asm/SDK/MTX \ asm/SDK/GX asm/SDK/DVD asm/SDK/AI asm/SDK/AX asm/SDK/AXFX asm/SDK/MEM asm/SDK/MIX asm/SDK/DSP \ asm/SDK/TPL asm/SDK/THP asm/SDK/KPAD asm/SDK/CX asm/SDK/PAD asm/SDK/WPAD asm/SDK/FS asm/SDK/IPC \ asm/SDK/NdevExi2A asm/SDK/USB asm/SDK/EUART asm/SDK/WUD asm/SDK/BTE asm/SDK/NAND \ diff --git a/asm/SDK/NdevExi2A/DebuggerDriver.s b/asm/NdevExi2A/DebuggerDriver.s index bf83ef9..bf83ef9 100644 --- a/asm/SDK/NdevExi2A/DebuggerDriver.s +++ b/asm/NdevExi2A/DebuggerDriver.s diff --git a/asm/SDK/NdevExi2A/exi2.s b/asm/NdevExi2A/exi2.s index d69761e..d69761e 100644 --- a/asm/SDK/NdevExi2A/exi2.s +++ b/asm/NdevExi2A/exi2.s diff --git a/asm/code_80036F88.s b/asm/code_80036F88.s index 7903f3e..9377523 100644 --- a/asm/code_80036F88.s +++ b/asm/code_80036F88.s @@ -2377,7 +2377,7 @@ lbl_80039068: /* 8003906C 00034CCC 54 84 04 3E */ clrlwi r4, r4, 0x10
/* 80039070 00034CD0 C0 42 82 30 */ lfs f2, lbl_80640830-_SDA2_BASE_(r2)
/* 80039074 00034CD4 38 A0 00 01 */ li r5, 1
-/* 80039078 00034CD8 48 1A 4D D5 */ bl func_801DDE4C
+/* 80039078 00034CD8 48 1A 4D D5 */ bl func_801DDE4C__13GSblendObjectFUsUsff
lbl_8003907C:
/* 8003907C 00034CDC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80039080 00034CE0 83 E1 00 0C */ lwz r31, 0xc(r1)
@@ -5962,7 +5962,7 @@ lbl_8003C124: /* 8003C130 00037D90 57 E4 04 3E */ clrlwi r4, r31, 0x10
/* 8003C134 00037D94 C0 42 82 30 */ lfs f2, lbl_80640830-_SDA2_BASE_(r2)
/* 8003C138 00037D98 38 A0 00 00 */ li r5, 0
-/* 8003C13C 00037D9C 48 1A 19 81 */ bl func_801DDABC
+/* 8003C13C 00037D9C 48 1A 19 81 */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 8003C140 00037DA0 48 00 00 24 */ b lbl_8003C164
lbl_8003C144:
/* 8003C144 00037DA4 C0 22 82 20 */ lfs f1, lbl_80640820-_SDA2_BASE_(r2)
diff --git a/asm/code_801DD8C0.s b/asm/code_801DD8C0.s deleted file mode 100644 index a381f03..0000000 --- a/asm/code_801DD8C0.s +++ /dev/null @@ -1,502 +0,0 @@ -.include "macros.inc"
-
-.section .text, "ax" # 0x80006980 - 0x803E1E60
-
-.global func_801DD8C0
-func_801DD8C0:
-/* 801DD8C0 001D9520 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DD8C4 001D9524 7C 08 02 A6 */ mflr r0
-/* 801DD8C8 001D9528 2C 04 00 00 */ cmpwi r4, 0
-/* 801DD8CC 001D952C 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DD8D0 001D9530 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DD8D4 001D9534 3B E0 00 00 */ li r31, 0
-/* 801DD8D8 001D9538 93 C1 00 08 */ stw r30, 8(r1)
-/* 801DD8DC 001D953C 7C 7E 1B 78 */ mr r30, r3
-/* 801DD8E0 001D9540 90 83 00 00 */ stw r4, 0(r3)
-/* 801DD8E4 001D9544 93 E3 00 04 */ stw r31, 4(r3)
-/* 801DD8E8 001D9548 41 82 00 54 */ beq lbl_801DD93C
-/* 801DD8EC 001D954C 4B FF D2 3D */ bl func_801DAB28
-/* 801DD8F0 001D9550 2C 03 00 00 */ cmpwi r3, 0
-/* 801DD8F4 001D9554 41 82 00 14 */ beq lbl_801DD908
-/* 801DD8F8 001D9558 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13)
-/* 801DD8FC 001D955C 38 80 00 10 */ li r4, 0x10
-/* 801DD900 001D9560 4B FF D3 95 */ bl func_801DAC94
-/* 801DD904 001D9564 48 00 00 08 */ b lbl_801DD90C
-lbl_801DD908:
-/* 801DD908 001D9568 7F E3 FB 78 */ mr r3, r31
-lbl_801DD90C:
-/* 801DD90C 001D956C 2C 03 00 00 */ cmpwi r3, 0
-/* 801DD910 001D9570 41 82 00 28 */ beq lbl_801DD938
-/* 801DD914 001D9574 38 80 00 00 */ li r4, 0
-/* 801DD918 001D9578 38 00 00 0C */ li r0, 0xc
-/* 801DD91C 001D957C 90 83 00 00 */ stw r4, 0(r3)
-/* 801DD920 001D9580 C0 22 95 F0 */ lfs f1, lbl_80641BF0-_SDA2_BASE_(r2)
-/* 801DD924 001D9584 B0 83 00 04 */ sth r4, 4(r3)
-/* 801DD928 001D9588 C0 02 95 F4 */ lfs f0, lbl_80641BF4-_SDA2_BASE_(r2)
-/* 801DD92C 001D958C B0 03 00 06 */ sth r0, 6(r3)
-/* 801DD930 001D9590 D0 23 00 08 */ stfs f1, 8(r3)
-/* 801DD934 001D9594 D0 03 00 0C */ stfs f0, 0xc(r3)
-lbl_801DD938:
-/* 801DD938 001D9598 90 7E 00 04 */ stw r3, 4(r30)
-lbl_801DD93C:
-/* 801DD93C 001D959C 7F C3 F3 78 */ mr r3, r30
-/* 801DD940 001D95A0 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DD944 001D95A4 83 C1 00 08 */ lwz r30, 8(r1)
-/* 801DD948 001D95A8 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DD94C 001D95AC 7C 08 03 A6 */ mtlr r0
-/* 801DD950 001D95B0 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DD954 001D95B4 4E 80 00 20 */ blr
-
-.global func_801DD958
-func_801DD958:
-/* 801DD958 001D95B8 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DD95C 001D95BC 7C 08 02 A6 */ mflr r0
-/* 801DD960 001D95C0 2C 03 00 00 */ cmpwi r3, 0
-/* 801DD964 001D95C4 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DD968 001D95C8 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DD96C 001D95CC 7C 9F 23 78 */ mr r31, r4
-/* 801DD970 001D95D0 93 C1 00 08 */ stw r30, 8(r1)
-/* 801DD974 001D95D4 7C 7E 1B 78 */ mr r30, r3
-/* 801DD978 001D95D8 41 82 00 34 */ beq lbl_801DD9AC
-/* 801DD97C 001D95DC 80 83 00 04 */ lwz r4, 4(r3)
-/* 801DD980 001D95E0 2C 04 00 00 */ cmpwi r4, 0
-/* 801DD984 001D95E4 41 82 00 14 */ beq lbl_801DD998
-/* 801DD988 001D95E8 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13)
-/* 801DD98C 001D95EC 4B FF D3 BD */ bl func_801DAD48
-/* 801DD990 001D95F0 38 00 00 00 */ li r0, 0
-/* 801DD994 001D95F4 90 1E 00 04 */ stw r0, 4(r30)
-lbl_801DD998:
-/* 801DD998 001D95F8 2C 1F 00 00 */ cmpwi r31, 0
-/* 801DD99C 001D95FC 40 81 00 10 */ ble lbl_801DD9AC
-/* 801DD9A0 001D9600 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13)
-/* 801DD9A4 001D9604 7F C4 F3 78 */ mr r4, r30
-/* 801DD9A8 001D9608 4B FF D3 A1 */ bl func_801DAD48
-lbl_801DD9AC:
-/* 801DD9AC 001D960C 7F C3 F3 78 */ mr r3, r30
-/* 801DD9B0 001D9610 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DD9B4 001D9614 83 C1 00 08 */ lwz r30, 8(r1)
-/* 801DD9B8 001D9618 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DD9BC 001D961C 7C 08 03 A6 */ mtlr r0
-/* 801DD9C0 001D9620 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DD9C4 001D9624 4E 80 00 20 */ blr
-
-.global func_801DD9C8
-func_801DD9C8:
-/* 801DD9C8 001D9628 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DD9CC 001D962C 7C 08 02 A6 */ mflr r0
-/* 801DD9D0 001D9630 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DD9D4 001D9634 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DD9D8 001D9638 7C 7F 1B 78 */ mr r31, r3
-/* 801DD9DC 001D963C 80 83 00 04 */ lwz r4, 4(r3)
-/* 801DD9E0 001D9640 2C 04 00 00 */ cmpwi r4, 0
-/* 801DD9E4 001D9644 41 82 00 9C */ beq lbl_801DDA80
-/* 801DD9E8 001D9648 80 04 00 00 */ lwz r0, 0(r4)
-/* 801DD9EC 001D964C 38 60 00 00 */ li r3, 0
-/* 801DD9F0 001D9650 2C 00 00 00 */ cmpwi r0, 0
-/* 801DD9F4 001D9654 41 82 00 14 */ beq lbl_801DDA08
-/* 801DD9F8 001D9658 A0 04 00 06 */ lhz r0, 6(r4)
-/* 801DD9FC 001D965C 54 00 07 FF */ clrlwi. r0, r0, 0x1f
-/* 801DDA00 001D9660 41 82 00 08 */ beq lbl_801DDA08
-/* 801DDA04 001D9664 38 60 00 01 */ li r3, 1
-lbl_801DDA08:
-/* 801DDA08 001D9668 2C 03 00 00 */ cmpwi r3, 0
-/* 801DDA0C 001D966C 41 82 00 74 */ beq lbl_801DDA80
-/* 801DDA10 001D9670 7C 83 23 78 */ mr r3, r4
-/* 801DDA14 001D9674 4B FF FB B5 */ bl func_801DD5C8
-/* 801DDA18 001D9678 80 7F 00 04 */ lwz r3, 4(r31)
-/* 801DDA1C 001D967C 7F E4 FB 78 */ mr r4, r31
-/* 801DDA20 001D9680 38 A0 00 00 */ li r5, 0
-/* 801DDA24 001D9684 4B FF FD D9 */ bl func_801DD7FC
-/* 801DDA28 001D9688 80 DF 00 04 */ lwz r6, 4(r31)
-/* 801DDA2C 001D968C 38 80 00 01 */ li r4, 1
-/* 801DDA30 001D9690 A0 A6 00 06 */ lhz r5, 6(r6)
-/* 801DDA34 001D9694 54 A0 07 39 */ rlwinm. r0, r5, 0, 0x1c, 0x1c
-/* 801DDA38 001D9698 40 82 00 2C */ bne lbl_801DDA64
-/* 801DDA3C 001D969C 80 06 00 00 */ lwz r0, 0(r6)
-/* 801DDA40 001D96A0 38 60 00 00 */ li r3, 0
-/* 801DDA44 001D96A4 2C 00 00 00 */ cmpwi r0, 0
-/* 801DDA48 001D96A8 41 82 00 10 */ beq lbl_801DDA58
-/* 801DDA4C 001D96AC 54 A0 07 FF */ clrlwi. r0, r5, 0x1f
-/* 801DDA50 001D96B0 41 82 00 08 */ beq lbl_801DDA58
-/* 801DDA54 001D96B4 38 60 00 01 */ li r3, 1
-lbl_801DDA58:
-/* 801DDA58 001D96B8 2C 03 00 00 */ cmpwi r3, 0
-/* 801DDA5C 001D96BC 41 82 00 08 */ beq lbl_801DDA64
-/* 801DDA60 001D96C0 38 80 00 00 */ li r4, 0
-lbl_801DDA64:
-/* 801DDA64 001D96C4 2C 04 00 00 */ cmpwi r4, 0
-/* 801DDA68 001D96C8 41 82 00 18 */ beq lbl_801DDA80
-/* 801DDA6C 001D96CC A0 66 00 06 */ lhz r3, 6(r6)
-/* 801DDA70 001D96D0 54 60 06 F7 */ rlwinm. r0, r3, 0, 0x1b, 0x1b
-/* 801DDA74 001D96D4 40 82 00 0C */ bne lbl_801DDA80
-/* 801DDA78 001D96D8 54 60 04 3C */ rlwinm r0, r3, 0, 0x10, 0x1e
-/* 801DDA7C 001D96DC B0 06 00 06 */ sth r0, 6(r6)
-lbl_801DDA80:
-/* 801DDA80 001D96E0 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DDA84 001D96E4 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DDA88 001D96E8 7C 08 03 A6 */ mtlr r0
-/* 801DDA8C 001D96EC 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DDA90 001D96F0 4E 80 00 20 */ blr
-
-.global func_801DDA94
-func_801DDA94:
-/* 801DDA94 001D96F4 80 63 00 00 */ lwz r3, 0(r3)
-/* 801DDA98 001D96F8 48 00 00 14 */ b lbl_801DDAAC
-lbl_801DDA9C:
-/* 801DDA9C 001D96FC A0 03 00 00 */ lhz r0, 0(r3)
-/* 801DDAA0 001D9700 7C 00 20 40 */ cmplw r0, r4
-/* 801DDAA4 001D9704 4D 82 00 20 */ beqlr
-/* 801DDAA8 001D9708 80 63 00 0C */ lwz r3, 0xc(r3)
-lbl_801DDAAC:
-/* 801DDAAC 001D970C 2C 03 00 00 */ cmpwi r3, 0
-/* 801DDAB0 001D9710 40 82 FF EC */ bne lbl_801DDA9C
-/* 801DDAB4 001D9714 38 60 00 00 */ li r3, 0
-/* 801DDAB8 001D9718 4E 80 00 20 */ blr
-
-.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/code_801DDF78.s b/asm/code_801DDF78.s index 4a2901f..d3af0ca 100644 --- a/asm/code_801DDF78.s +++ b/asm/code_801DDF78.s @@ -2,6 +2,7 @@ .section .text, "ax" # 0x80006980 - 0x803E1E60
+# GScamera constructor
.global func_801DDF78
func_801DDF78:
/* 801DDF78 001D9BD8 94 21 FF F0 */ stwu r1, -0x10(r1)
@@ -72,6 +73,7 @@ func_801DDF78: /* 801DE07C 001D9CDC 38 21 00 10 */ addi r1, r1, 0x10
/* 801DE080 001D9CE0 4E 80 00 20 */ blr
+# GScamera constructor
.global func_801DE084
func_801DE084:
/* 801DE084 001D9CE4 94 21 FF F0 */ stwu r1, -0x10(r1)
@@ -145,6 +147,7 @@ func_801DE084: /* 801DE194 001D9DF4 38 21 00 10 */ addi r1, r1, 0x10
/* 801DE198 001D9DF8 4E 80 00 20 */ blr
+# GScamera virtual
.global func_801DE19C
func_801DE19C:
/* 801DE19C 001D9DFC 94 21 FF F0 */ stwu r1, -0x10(r1)
@@ -450,6 +453,9 @@ lbl_801DE5E4: /* 801DE5EC 001DA24C 7C 08 03 A6 */ mtlr r0
/* 801DE5F0 001DA250 38 21 00 50 */ addi r1, r1, 0x50
/* 801DE5F4 001DA254 4E 80 00 20 */ blr
+
+# GScamera virtual
+func_801DE5F8:
/* 801DE5F8 001DA258 94 21 FE B0 */ stwu r1, -0x150(r1)
/* 801DE5FC 001DA25C 7C 08 02 A6 */ mflr r0
/* 801DE600 001DA260 90 01 01 54 */ stw r0, 0x154(r1)
@@ -922,7 +928,7 @@ lbl_801DEC9C: /* 801DECB4 001DA914 38 21 00 B0 */ addi r1, r1, 0xb0
/* 801DECB8 001DA918 4E 80 00 20 */ blr
-# virtual
+# GScamera virtual
func_801DECBC:
/* 801DECBC 001DA91C 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 801DECC0 001DA920 7C 08 02 A6 */ mflr r0
@@ -939,7 +945,7 @@ func_801DECBC: lbl_801DECEC:
/* 801DECEC 001DA94C FC 20 F8 90 */ fmr f1, f31
/* 801DECF0 001DA950 7F E3 FB 78 */ mr r3, r31
-/* 801DECF4 001DA954 4B FF EF 91 */ bl func_801DDC84
+/* 801DECF4 001DA954 4B FF EF 91 */ bl func_801DDC84__13GSblendObjectFf
/* 801DECF8 001DA958 81 9F 01 00 */ lwz r12, 0x100(r31)
/* 801DECFC 001DA95C 7F E3 FB 78 */ mr r3, r31
/* 801DED00 001DA960 81 8C 00 14 */ lwz r12, 0x14(r12)
@@ -957,6 +963,9 @@ lbl_801DECEC: /* 801DED30 001DA990 7C 08 03 A6 */ mtlr r0
/* 801DED34 001DA994 38 21 00 20 */ addi r1, r1, 0x20
/* 801DED38 001DA998 4E 80 00 20 */ blr
+
+# GScamera virtual
+func_801DED3C:
/* 801DED3C 001DA99C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 801DED40 001DA9A0 7C 08 02 A6 */ mflr r0
/* 801DED44 001DA9A4 90 01 00 14 */ stw r0, 0x14(r1)
diff --git a/asm/code_801E6BF8.s b/asm/code_801E6BF8.s index ad6ef55..659a4ad 100644 --- a/asm/code_801E6BF8.s +++ b/asm/code_801E6BF8.s @@ -13,7 +13,7 @@ func_801E6BF8: /* 801E6C10 001E2870 80 84 00 84 */ lwz r4, 0x84(r4)
/* 801E6C14 001E2874 7C 7A 1B 78 */ mr r26, r3
/* 801E6C18 001E2878 7C B8 2B 78 */ mr r24, r5
-/* 801E6C1C 001E287C 4B FF 6C A5 */ bl func_801DD8C0
+/* 801E6C1C 001E287C 4B FF 6C A5 */ bl __ct__17GSanimationObjectFP10gUnkClass8
/* 801E6C20 001E2880 3C C0 80 42 */ lis r6, lbl_80423620@ha
/* 801E6C24 001E2884 38 A0 00 00 */ li r5, 0
/* 801E6C28 001E2888 38 80 00 FF */ li r4, 0xff
@@ -236,7 +236,7 @@ lbl_801E6F1C: lbl_801E6F34:
/* 801E6F34 001E2B94 7F C3 F3 78 */ mr r3, r30
/* 801E6F38 001E2B98 38 80 00 00 */ li r4, 0
-/* 801E6F3C 001E2B9C 4B FF 6A 1D */ bl func_801DD958
+/* 801E6F3C 001E2B9C 4B FF 6A 1D */ bl __dt__17GSanimationObjectFv
/* 801E6F40 001E2BA0 2C 1F 00 00 */ cmpwi r31, 0
/* 801E6F44 001E2BA4 40 81 00 10 */ ble lbl_801E6F54
/* 801E6F48 001E2BA8 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13)
diff --git a/asm/code_801EE044.s b/asm/code_801EE044.s index c4e0fec..5118332 100644 --- a/asm/code_801EE044.s +++ b/asm/code_801EE044.s @@ -2720,7 +2720,7 @@ lbl_801F0698: /* 801F069C 001EC2FC 2C 03 00 00 */ cmpwi r3, 0
/* 801F06A0 001EC300 41 82 00 0C */ beq lbl_801F06AC
/* 801F06A4 001EC304 FC 20 F8 90 */ fmr f1, f31
-/* 801F06A8 001EC308 4B FE D3 21 */ bl func_801DD9C8
+/* 801F06A8 001EC308 4B FE D3 21 */ bl func_801DD9C8__17GSanimationObjectFf
lbl_801F06AC:
/* 801F06AC 001EC30C 83 DE 00 20 */ lwz r30, 0x20(r30)
lbl_801F06B0:
diff --git a/asm/code_801F1AE8.s b/asm/code_801F1AE8.s index eeb8f21..fd861d8 100644 --- a/asm/code_801F1AE8.s +++ b/asm/code_801F1AE8.s @@ -12,7 +12,7 @@ func_801F1AE8: /* 801F1AFC 001ED75C 38 80 00 00 */ li r4, 0
/* 801F1B00 001ED760 93 C1 00 08 */ stw r30, 8(r1)
/* 801F1B04 001ED764 7C 7E 1B 78 */ mr r30, r3
-/* 801F1B08 001ED768 4B FE C0 5D */ bl func_801DDB64
+/* 801F1B08 001ED768 4B FE C0 5D */ bl __ct__13GSblendObjectFP10gUnkClass8
/* 801F1B0C 001ED76C C0 22 97 F0 */ lfs f1, lbl_80641DF0-_SDA2_BASE_(r2)
/* 801F1B10 001ED770 3C 60 80 42 */ lis r3, lbl_804236C8@ha
/* 801F1B14 001ED774 38 80 00 00 */ li r4, 0
@@ -74,7 +74,7 @@ func_801F1BC8: /* 801F1BE8 001ED848 93 81 00 10 */ stw r28, 0x10(r1)
/* 801F1BEC 001ED84C 7C BC 2B 78 */ mr r28, r5
/* 801F1BF0 001ED850 80 85 00 20 */ lwz r4, 0x20(r5)
-/* 801F1BF4 001ED854 4B FE BF 71 */ bl func_801DDB64
+/* 801F1BF4 001ED854 4B FE BF 71 */ bl __ct__13GSblendObjectFP10gUnkClass8
/* 801F1BF8 001ED858 80 1E 00 08 */ lwz r0, 8(r30)
/* 801F1BFC 001ED85C 38 80 00 00 */ li r4, 0
/* 801F1C00 001ED860 C0 22 97 F0 */ lfs f1, lbl_80641DF0-_SDA2_BASE_(r2)
@@ -374,7 +374,7 @@ lbl_801F1FE4: lbl_801F2000:
/* 801F2000 001EDC60 7F 83 E3 78 */ mr r3, r28
/* 801F2004 001EDC64 38 80 00 00 */ li r4, 0
-/* 801F2008 001EDC68 4B FE BC 01 */ bl func_801DDC08
+/* 801F2008 001EDC68 4B FE BC 01 */ bl __dt__13GSblendObjectFv
/* 801F200C 001EDC6C 2C 1D 00 00 */ cmpwi r29, 0
/* 801F2010 001EDC70 40 81 00 10 */ ble lbl_801F2020
/* 801F2014 001EDC74 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13)
@@ -2269,7 +2269,7 @@ func_801F3960: lbl_801F3990:
/* 801F3990 001EF5F0 FC 20 F8 90 */ fmr f1, f31
/* 801F3994 001EF5F4 7F E3 FB 78 */ mr r3, r31
-/* 801F3998 001EF5F8 4B FE A2 ED */ bl func_801DDC84
+/* 801F3998 001EF5F8 4B FE A2 ED */ bl func_801DDC84__13GSblendObjectFf
/* 801F399C 001EF5FC A0 1F 00 10 */ lhz r0, 0x10(r31)
/* 801F39A0 001EF600 54 00 07 FE */ clrlwi r0, r0, 0x1f
/* 801F39A4 001EF604 2C 00 00 01 */ cmpwi r0, 1
diff --git a/asm/code_801F40E0.s b/asm/code_801F40E0.s index 96cfeec..79fdf7e 100644 --- a/asm/code_801F40E0.s +++ b/asm/code_801F40E0.s @@ -1023,7 +1023,7 @@ lbl_801F4EA0: /* 801F4EBC 001F0B1C FC 40 F8 90 */ fmr f2, f31
/* 801F4EC0 001F0B20 7E 64 9B 78 */ mr r4, r19
/* 801F4EC4 001F0B24 7E 85 A3 78 */ mr r5, r20
-/* 801F4EC8 001F0B28 4B FE 8F 85 */ bl func_801DDE4C
+/* 801F4EC8 001F0B28 4B FE 8F 85 */ bl func_801DDE4C__13GSblendObjectFUsUsff
/* 801F4ECC 001F0B2C 2C 15 00 00 */ cmpwi r21, 0
/* 801F4ED0 001F0B30 41 82 00 34 */ beq lbl_801F4F04
/* 801F4ED4 001F0B34 80 71 00 04 */ lwz r3, 4(r17)
@@ -1077,7 +1077,7 @@ lbl_801F4F5C: /* 801F4F80 001F0BE0 FC 40 F8 90 */ fmr f2, f31
/* 801F4F84 001F0BE4 7E 64 9B 78 */ mr r4, r19
/* 801F4F88 001F0BE8 7E 85 A3 78 */ mr r5, r20
-/* 801F4F8C 001F0BEC 4B FE 8E C1 */ bl func_801DDE4C
+/* 801F4F8C 001F0BEC 4B FE 8E C1 */ bl func_801DDE4C__13GSblendObjectFUsUsff
/* 801F4F90 001F0BF0 2C 15 00 00 */ cmpwi r21, 0
/* 801F4F94 001F0BF4 41 82 00 34 */ beq lbl_801F4FC8
/* 801F4F98 001F0BF8 80 7C 00 04 */ lwz r3, 4(r28)
@@ -1124,7 +1124,7 @@ lbl_801F5000: /* 801F5028 001F0C88 FC 40 F8 90 */ fmr f2, f31
/* 801F502C 001F0C8C 7E 64 9B 78 */ mr r4, r19
/* 801F5030 001F0C90 7E 85 A3 78 */ mr r5, r20
-/* 801F5034 001F0C94 4B FE 8A 89 */ bl func_801DDABC
+/* 801F5034 001F0C94 4B FE 8A 89 */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 801F5038 001F0C98 2C 16 00 00 */ cmpwi r22, 0
/* 801F503C 001F0C9C 41 82 00 1C */ beq lbl_801F5058
/* 801F5040 001F0CA0 80 71 00 04 */ lwz r3, 4(r17)
@@ -1170,7 +1170,7 @@ lbl_801F50A4: /* 801F50C4 001F0D24 FC 40 F8 90 */ fmr f2, f31
/* 801F50C8 001F0D28 7E 64 9B 78 */ mr r4, r19
/* 801F50CC 001F0D2C 7E 85 A3 78 */ mr r5, r20
-/* 801F50D0 001F0D30 4B FE 89 ED */ bl func_801DDABC
+/* 801F50D0 001F0D30 4B FE 89 ED */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 801F50D4 001F0D34 2C 16 00 00 */ cmpwi r22, 0
/* 801F50D8 001F0D38 41 82 00 1C */ beq lbl_801F50F4
/* 801F50DC 001F0D3C 80 71 00 04 */ lwz r3, 4(r17)
@@ -1204,7 +1204,7 @@ lbl_801F5114: /* 801F513C 001F0D9C FC 40 F8 90 */ fmr f2, f31
/* 801F5140 001F0DA0 7E 64 9B 78 */ mr r4, r19
/* 801F5144 001F0DA4 7E 85 A3 78 */ mr r5, r20
-/* 801F5148 001F0DA8 4B FE 89 75 */ bl func_801DDABC
+/* 801F5148 001F0DA8 4B FE 89 75 */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 801F514C 001F0DAC 2C 16 00 00 */ cmpwi r22, 0
/* 801F5150 001F0DB0 41 82 00 1C */ beq lbl_801F516C
/* 801F5154 001F0DB4 80 71 00 04 */ lwz r3, 4(r17)
@@ -1464,7 +1464,7 @@ lbl_801F549C: /* 801F54BC 001F111C 7F 63 DB 78 */ mr r3, r27
/* 801F54C0 001F1120 7E A4 AB 78 */ mr r4, r21
/* 801F54C4 001F1124 7E C5 B3 78 */ mr r5, r22
-/* 801F54C8 001F1128 4B FE 89 D9 */ bl func_801DDEA0
+/* 801F54C8 001F1128 4B FE 89 D9 */ bl func_801DDEA0__13GSblendObjectFUsUsfff
/* 801F54CC 001F112C 2C 18 00 00 */ cmpwi r24, 0
/* 801F54D0 001F1130 41 82 00 14 */ beq lbl_801F54E4
/* 801F54D4 001F1134 A0 1B 00 10 */ lhz r0, 0x10(r27)
@@ -1527,7 +1527,7 @@ lbl_801F556C: /* 801F5594 001F11F4 7F 63 DB 78 */ mr r3, r27
/* 801F5598 001F11F8 7E A4 AB 78 */ mr r4, r21
/* 801F559C 001F11FC 7E C5 B3 78 */ mr r5, r22
-/* 801F55A0 001F1200 4B FE 89 01 */ bl func_801DDEA0
+/* 801F55A0 001F1200 4B FE 89 01 */ bl func_801DDEA0__13GSblendObjectFUsUsfff
/* 801F55A4 001F1204 2C 18 00 00 */ cmpwi r24, 0
/* 801F55A8 001F1208 41 82 00 14 */ beq lbl_801F55BC
/* 801F55AC 001F120C A0 1B 00 10 */ lhz r0, 0x10(r27)
diff --git a/asm/code_80205954.s b/asm/code_80205954.s index 61cff22..2b1558f 100644 --- a/asm/code_80205954.s +++ b/asm/code_80205954.s @@ -837,7 +837,7 @@ lbl_80206424: /* 80206448 002020A8 38 80 00 00 */ li r4, 0
/* 8020644C 002020AC C0 42 99 6C */ lfs f2, lbl_80641F6C-_SDA2_BASE_(r2)
/* 80206450 002020B0 38 A0 00 01 */ li r5, 1
-/* 80206454 002020B4 4B FD 76 69 */ bl func_801DDABC
+/* 80206454 002020B4 4B FD 76 69 */ bl func_801DDABC__17GSanimationObjectFUsUsff
lbl_80206458:
/* 80206458 002020B8 3A 73 00 01 */ addi r19, r19, 1
lbl_8020645C:
@@ -849,7 +849,7 @@ lbl_8020645C: /* 80206470 002020D0 C0 22 99 68 */ lfs f1, lbl_80641F68-_SDA2_BASE_(r2)
/* 80206474 002020D4 38 A0 00 01 */ li r5, 1
/* 80206478 002020D8 C0 42 99 6C */ lfs f2, lbl_80641F6C-_SDA2_BASE_(r2)
-/* 8020647C 002020DC 4B FD 79 D1 */ bl func_801DDE4C
+/* 8020647C 002020DC 4B FD 79 D1 */ bl func_801DDE4C__13GSblendObjectFUsUsff
/* 80206480 002020E0 48 00 00 10 */ b lbl_80206490
lbl_80206484:
/* 80206484 002020E4 38 84 00 0C */ addi r4, r4, 0xc
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/asm/sdata2_2.s b/asm/sdata2_2.s index f5ddb7c..45ba27b 100644 --- a/asm/sdata2_2.s +++ b/asm/sdata2_2.s @@ -2,12 +2,6 @@ .section .sdata2, "wa" # 0x80640600 - 0x80643020
-.global lbl_80641BF0
-lbl_80641BF0:
- .incbin "baserom.dol", 0x473C10, 0x4
-.global lbl_80641BF4
-lbl_80641BF4:
- .incbin "baserom.dol", 0x473C14, 0x4
.global lbl_80641BF8
lbl_80641BF8:
.incbin "baserom.dol", 0x473C18, 0x4
diff --git a/include/GSanimationObject.h b/include/GSanimationObject.h new file mode 100644 index 0000000..206acf6 --- /dev/null +++ b/include/GSanimationObject.h @@ -0,0 +1,20 @@ +#ifndef POKEREVO_GSANIMATIONOBJECT_H
+#define POKEREVO_GSANIMATIONOBJECT_H
+
+#include "GShierMemObject.h"
+#include "code_801DD5C8.h"
+
+class GSanimationObject : public GShierMemObject
+{
+protected:
+ gUnkClass8* unk0;
+ gUnkClass7* unk4;
+public:
+ GSanimationObject(gUnkClass8* list);
+ ~GSanimationObject();
+ void func_801DD9C8(float p2);
+ gUnkClass8* func_801DDA94(u16 id);
+ void func_801DDABC(u16 id, u16 p3, float p4, float p5);
+};
+
+#endif //POKEREVO_GSANIMATIONOBJECT_H
diff --git a/include/GSblendObject.h b/include/GSblendObject.h new file mode 100644 index 0000000..8d8499f --- /dev/null +++ b/include/GSblendObject.h @@ -0,0 +1,19 @@ +#ifndef POKEREVO_GSBLENDOBJECT_H
+#define POKEREVO_GSBLENDOBJECT_H
+
+#include "GSanimationObject.h"
+#include "code_801DD5C8.h"
+
+class GSblendObject : public GSanimationObject
+{
+ gUnkClass7* unk8;
+ float unkC;
+public:
+ GSblendObject(gUnkClass8* list);
+ ~GSblendObject();
+ void func_801DDC84(float p2);
+ void func_801DDE4C(u16 id, u16 p3, float p4, float p5);
+ void func_801DDEA0(u16 id, u16 p3, float p4, float p5, float p6);
+};
+
+#endif //POKEREVO_GSBLENDOBJECT_H
diff --git a/include/GShierMemObject.h b/include/GShierMemObject.h new file mode 100644 index 0000000..aaec6fb --- /dev/null +++ b/include/GShierMemObject.h @@ -0,0 +1,30 @@ +#ifndef POKEREVO_GSHIERMEMOBJECT_H
+#define POKEREVO_GSHIERMEMOBJECT_H
+
+#include "code_801DAAE0.h"
+
+// TODO: determine file that defines this
+extern MEMHeapHandle lbl_8063E8F8;
+
+// Note: This is the root base class for various classes such as GScamera,
+// GSlight, GSmodel, etc. Instances of these classes seem to be new/deleted using an alternative set of
+// routines than the global new and delete, which may be defined inline here.
+
+class GShierMemObject
+{
+public:
+ void* operator new(size_t sz)
+ {
+ if (func_801DAB28())
+ return func_801DAC94(lbl_8063E8F8, sz);
+ else
+ return NULL;
+ }
+
+ void operator delete(void* ptr)
+ {
+ func_801DAD48(lbl_8063E8F8, ptr);
+ }
+};
+
+#endif //POKEREVO_GSHIERMEMOBJECT_H
diff --git a/include/code_801DD5C8.h b/include/code_801DD5C8.h index 55499b2..8f7ace1 100644 --- a/include/code_801DD5C8.h +++ b/include/code_801DD5C8.h @@ -5,33 +5,39 @@ extern "C" {
#endif
-// TODO: identify data structures
+#include "GShierMemObject.h"
struct gUnkClass9
{
u8 pad[0xC];
- void (*unkC)(u32, gUnkClass9*, u32, float);
+ void (*unkC)(void*, gUnkClass9*, u32, float);
};
+// linked list node
+// size >= 0xC
struct gUnkClass8
{
- u8 pad[0x2];
+ u16 unk0; // id
u16 unk2;
gUnkClass9* unk4;
float unk8;
+ gUnkClass8* next;
};
-struct gUnkClass7
+struct gUnkClass7 : public GShierMemObject
{
- gUnkClass8* unk0;
+ gUnkClass8* unk0; // linked list head
u16 unk4;
u16 unk6;
float unk8;
float unkC;
+
+ gUnkClass7() : unk0(NULL), unk4(0), unk6(0xC), unk8(1.0f), unkC(0.0f) { }
+ ~gUnkClass7() { }
};
void func_801DD5C8(gUnkClass7* p1, float p2);
-void func_801DD7FC(gUnkClass7* p1, u32 p2, u32 p3);
+void func_801DD7FC(gUnkClass7* p1, void* p2, u32 p3);
#ifdef __cplusplus
}
diff --git a/obj_files.mk b/obj_files.mk index a7451e0..a5cfb9f 100644 --- a/obj_files.mk +++ b/obj_files.mk @@ -218,8 +218,8 @@ SPLIT_O_FILES := \ $(BUILD_DIR)/asm/MetroTRK/main.o \ $(BUILD_DIR)/asm/MetroTRK/CircleBuffer.o \ $(BUILD_DIR)/asm/MetroTRK/MWCriticalSection_gc.o \ - $(BUILD_DIR)/asm/SDK/NdevExi2A/DebuggerDriver.o \ - $(BUILD_DIR)/asm/SDK/NdevExi2A/exi2.o \ + $(BUILD_DIR)/asm/NdevExi2A/DebuggerDriver.o \ + $(BUILD_DIR)/asm/NdevExi2A/exi2.o \ $(BUILD_DIR)/src/code_801DAA30.o \ $(BUILD_DIR)/src/code_801DAAE0.o \ $(BUILD_DIR)/src/code_801DB040.o \ @@ -228,7 +228,7 @@ SPLIT_O_FILES := \ $(BUILD_DIR)/src/code_801DBE90.o \ $(BUILD_DIR)/src/code_801DCE6C.o \ $(BUILD_DIR)/src/code_801DD5C8.o \ - $(BUILD_DIR)/asm/code_801DD8C0.o \ + $(BUILD_DIR)/src/code_801DD8C0.o \ $(BUILD_DIR)/asm/code_801DDF78.o \ $(BUILD_DIR)/asm/code_801DF040.o \ $(BUILD_DIR)/asm/code_801E07E8.o \ diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 0db2018..8d1563f 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -98,6 +98,7 @@ u16 func_801DAC90(MEMHeapHandle heap, u16 groupID) return MEMSetGroupIDForExpHeap(heap, groupID);
}
+// "new" used in combination with func_801DAD48
void* func_801DAC94(MEMHeapHandle heap, u32 size)
{
return MEMAllocFromExpHeapEx(heap, size, 32);
@@ -132,6 +133,8 @@ static BOOL func_801DAD1C(MEMHeapHandle heap, void* memBlock, u32 size) return MEMResizeForMBlockExpHeap(heap, memBlock, size) != 0;
}
+// TODO: another "delete" that seems to be called in some destructors
+// see func_8016E5C0 for a destructor that calls both this and global operator delete
void func_801DAD48(MEMHeapHandle heap, void* memBlock)
{
if (memBlock)
diff --git a/src/code_801DBB3C.cpp b/src/code_801DBB3C.cpp index bfaa7cd..0092622 100644 --- a/src/code_801DBB3C.cpp +++ b/src/code_801DBB3C.cpp @@ -44,6 +44,7 @@ static void func_801DBB48(gUnkClass2 *p1, size_t nodes, size_t size) r8->unk0 = 0;
}
+// Allocate linked list node from free store
gUnkClass1* func_801DBC58(gUnkClass2* p1)
{
gUnkClass3* r31 = p1->unk18;
@@ -53,6 +54,8 @@ gUnkClass1* func_801DBC58(gUnkClass2* p1) p1->unk18 = r31->unk0;
goto passCheck;
}
+
+failCheck:
func_801DBB44(r30);
return NULL;
passCheck:
@@ -63,6 +66,7 @@ passCheck: return &r31->unk4;
}
+// Return linked list node to free store
void func_801DBD00(gUnkClass2* p1, gUnkClass1* p2)
{
u32 r31;
diff --git a/src/code_801DD5C8.cpp b/src/code_801DD5C8.cpp index f91832a..7fb6cc4 100644 --- a/src/code_801DD5C8.cpp +++ b/src/code_801DD5C8.cpp @@ -3,14 +3,15 @@ static ctorStruct gUnk8063F348(1, 4, 0);
+// gUnkClass7 implementation
+
extern "C" {
void func_801DD5C8(gUnkClass7* p1, float p2)
{
if (!p1->unk0 || !(p1->unk6 & 0x1) || (p1->unk6 & 0x8))
return;
- float f3 = p1->unk8;
- p1->unkC += p2 * f3;
+ p1->unkC += p2 * p1->unk8;
if (p1->unkC < 0.0f) {
p1->unk6 |= 0x4;
switch (p1->unk4) {
@@ -29,10 +30,10 @@ void func_801DD5C8(gUnkClass7* p1, float p2) p1->unkC = f2 * (1.0f - f4);
} else {
p1->unkC = f2 * f4;
- p1->unk8 = -f3;
+ p1->unk8 = -p1->unk8;
}
} else {
- p1->unk8 = -f3;
+ p1->unk8 = -p1->unk8;
}
break;
default:
@@ -54,7 +55,7 @@ void func_801DD5C8(gUnkClass7* p1, float p2) f4 -= r5;
if (((r5 & 0x1) ^ ((u32)r5 >> 31 & 0x1)) - ((u32)r5 >> 31 & 0x1) != 0) {
float temp = f2 * (1.0f - f4);
- p1->unk8 = -f3;
+ p1->unk8 = -p1->unk8;
p1->unkC = temp;
} else {
p1->unkC = f2 * f4;
@@ -69,7 +70,7 @@ void func_801DD5C8(gUnkClass7* p1, float p2) p1->unk6 |= 0x2;
}
-void func_801DD7FC(gUnkClass7* p1, u32 p2, u32 p3)
+void func_801DD7FC(gUnkClass7* p1, void* p2, u32 p3)
{
if (!p1->unk0 || !(p1->unk6 & 0x2))
return;
diff --git a/src/code_801DD8C0.cpp b/src/code_801DD8C0.cpp new file mode 100644 index 0000000..dc82f62 --- /dev/null +++ b/src/code_801DD8C0.cpp @@ -0,0 +1,404 @@ +#include "ctorStruct.h"
+#include "GSanimationObject.h"
+#include "GSblendObject.h"
+
+// GSanimationObject and GSblendObject implementations
+
+static ctorStruct gUnk8063F350(1, 4, 0);
+
+GSanimationObject::GSanimationObject(gUnkClass8* list) : unk0(list), unk4(NULL)
+{
+ if (list)
+ unk4 = new gUnkClass7;
+}
+
+#ifdef NONMATCHING
+// Can't get this to match with an operator delete
+// because mwcc adds an extra beq instruction
+GSanimationObject::~GSanimationObject()
+{
+ if (unk4) {
+ delete unk4;
+ unk4 = NULL;
+ }
+}
+#else
+GSanimationObject::~GSanimationObject()
+{
+ if (unk4) {
+ func_801DAD48(lbl_8063E8F8, unk4);
+ unk4 = NULL;
+ }
+}
+#endif
+
+// Note: inferred static inline functions
+static inline BOOL inline_TestFunction(gUnkClass7* ptr)
+{
+ return ptr->unk0 && ptr->unk6 & 0x1;
+}
+
+static inline void inline_ClearFunction(gUnkClass7* ptr)
+{
+ if (!(ptr->unk6 & 0x10))
+ ptr->unk6 &= ~0x1;
+}
+
+#ifdef NONMATCHING
+// r4/r6 regswap
+void GSanimationObject::func_801DD9C8(float p2)
+{
+ if (unk4) {
+ if (inline_TestFunction(unk4)) {
+ func_801DD5C8(unk4, p2);
+ func_801DD7FC(unk4, this, 0);
+ BOOL flag2 = TRUE;
+ u16* new_var = &unk4->unk6;
+ if (!(unk4->unk6 & 0x8)) {
+ BOOL flag = FALSE;
+ if (unk4->unk0 && (*new_var & 0x1))
+ flag = TRUE;
+ if (flag)
+ flag2 = FALSE;
+ }
+ if (flag2) {
+ gUnkClass7* r3 = unk4;
+ if (!(r3->unk6 & 0x10)) {
+ r3->unk6 &= ~0x1;
+ }
+ }
+ }
+ }
+}
+#else
+asm void GSanimationObject::func_801DD9C8(float p2)
+{
+ nofralloc
+/* 801DD9C8 001D9628 94 21 FF F0 */ stwu r1, -0x10(r1)
+/* 801DD9CC 001D962C 7C 08 02 A6 */ mflr r0
+/* 801DD9D0 001D9630 90 01 00 14 */ stw r0, 0x14(r1)
+/* 801DD9D4 001D9634 93 E1 00 0C */ stw r31, 0xc(r1)
+/* 801DD9D8 001D9638 7C 7F 1B 78 */ mr r31, r3
+/* 801DD9DC 001D963C 80 83 00 04 */ lwz r4, 4(r3)
+/* 801DD9E0 001D9640 2C 04 00 00 */ cmpwi r4, 0
+/* 801DD9E4 001D9644 41 82 00 9C */ beq lbl_801DDA80
+/* 801DD9E8 001D9648 80 04 00 00 */ lwz r0, 0(r4)
+/* 801DD9EC 001D964C 38 60 00 00 */ li r3, 0
+/* 801DD9F0 001D9650 2C 00 00 00 */ cmpwi r0, 0
+/* 801DD9F4 001D9654 41 82 00 14 */ beq lbl_801DDA08
+/* 801DD9F8 001D9658 A0 04 00 06 */ lhz r0, 6(r4)
+/* 801DD9FC 001D965C 54 00 07 FF */ clrlwi. r0, r0, 0x1f
+/* 801DDA00 001D9660 41 82 00 08 */ beq lbl_801DDA08
+/* 801DDA04 001D9664 38 60 00 01 */ li r3, 1
+lbl_801DDA08:
+/* 801DDA08 001D9668 2C 03 00 00 */ cmpwi r3, 0
+/* 801DDA0C 001D966C 41 82 00 74 */ beq lbl_801DDA80
+/* 801DDA10 001D9670 7C 83 23 78 */ mr r3, r4
+/* 801DDA14 001D9674 4B FF FB B5 */ bl func_801DD5C8
+/* 801DDA18 001D9678 80 7F 00 04 */ lwz r3, 4(r31)
+/* 801DDA1C 001D967C 7F E4 FB 78 */ mr r4, r31
+/* 801DDA20 001D9680 38 A0 00 00 */ li r5, 0
+/* 801DDA24 001D9684 4B FF FD D9 */ bl func_801DD7FC
+/* 801DDA28 001D9688 80 DF 00 04 */ lwz r6, 4(r31)
+/* 801DDA2C 001D968C 38 80 00 01 */ li r4, 1
+/* 801DDA30 001D9690 A0 A6 00 06 */ lhz r5, 6(r6)
+/* 801DDA34 001D9694 54 A0 07 39 */ rlwinm. r0, r5, 0, 0x1c, 0x1c
+/* 801DDA38 001D9698 40 82 00 2C */ bne lbl_801DDA64
+/* 801DDA3C 001D969C 80 06 00 00 */ lwz r0, 0(r6)
+/* 801DDA40 001D96A0 38 60 00 00 */ li r3, 0
+/* 801DDA44 001D96A4 2C 00 00 00 */ cmpwi r0, 0
+/* 801DDA48 001D96A8 41 82 00 10 */ beq lbl_801DDA58
+/* 801DDA4C 001D96AC 54 A0 07 FF */ clrlwi. r0, r5, 0x1f
+/* 801DDA50 001D96B0 41 82 00 08 */ beq lbl_801DDA58
+/* 801DDA54 001D96B4 38 60 00 01 */ li r3, 1
+lbl_801DDA58:
+/* 801DDA58 001D96B8 2C 03 00 00 */ cmpwi r3, 0
+/* 801DDA5C 001D96BC 41 82 00 08 */ beq lbl_801DDA64
+/* 801DDA60 001D96C0 38 80 00 00 */ li r4, 0
+lbl_801DDA64:
+/* 801DDA64 001D96C4 2C 04 00 00 */ cmpwi r4, 0
+/* 801DDA68 001D96C8 41 82 00 18 */ beq lbl_801DDA80
+/* 801DDA6C 001D96CC A0 66 00 06 */ lhz r3, 6(r6)
+/* 801DDA70 001D96D0 54 60 06 F7 */ rlwinm. r0, r3, 0, 0x1b, 0x1b
+/* 801DDA74 001D96D4 40 82 00 0C */ bne lbl_801DDA80
+/* 801DDA78 001D96D8 54 60 04 3C */ rlwinm r0, r3, 0, 0x10, 0x1e
+/* 801DDA7C 001D96DC B0 06 00 06 */ sth r0, 6(r6)
+lbl_801DDA80:
+/* 801DDA80 001D96E0 80 01 00 14 */ lwz r0, 0x14(r1)
+/* 801DDA84 001D96E4 83 E1 00 0C */ lwz r31, 0xc(r1)
+/* 801DDA88 001D96E8 7C 08 03 A6 */ mtlr r0
+/* 801DDA8C 001D96EC 38 21 00 10 */ addi r1, r1, 0x10
+/* 801DDA90 001D96F0 4E 80 00 20 */ blr
+}
+#pragma peephole on
+#endif
+
+// Search the linked list referenced by unk0 for a node with the specified id
+gUnkClass8* GSanimationObject::func_801DDA94(u16 id)
+{
+ gUnkClass8* p = unk0;
+ while (p) {
+ if (p->unk0 == id)
+ return p;
+ p = p->next;
+ }
+ return NULL;
+}
+
+// Populate unk4 member
+void GSanimationObject::func_801DDABC(u16 id, u16 p3, float p4, float p5)
+{
+ gUnkClass7* r6 = unk4;
+ if (r6) {
+ if (!(r6->unk6 & 0x10))
+ r6->unk6 &= ~0x1;
+ gUnkClass8* r3 = func_801DDA94(id);
+ if (r3) {
+ gUnkClass7* r4 = unk4;
+ if (!(r4->unk6 & 0x10)) {
+ r4->unk0 = r3;
+ r4->unkC = p4;
+ r4->unk8 = p5;
+ r4->unk4 = (u16)(p3 & 0xFF);
+ r4->unk6 = 0x3;
+ }
+ }
+ }
+}
+
+GSblendObject::GSblendObject(gUnkClass8* list) : GSanimationObject(list), unk8(NULL), unkC(0.0f)
+{
+ if (unk4)
+ unk8 = new gUnkClass7;
+}
+
+#ifdef NONMATCHING
+// Same issue as ~GSanimationObject()... extra beq instruction
+GSblendObject::~GSblendObject()
+{
+ if (unk8) {
+ delete unk8;
+ unk8 = NULL;
+ }
+}
+#else
+GSblendObject::~GSblendObject()
+{
+ if (unk8) {
+ func_801DAD48(lbl_8063E8F8, unk8);
+ unk8 = NULL;
+ }
+}
+#endif
+
+#ifdef NONMATCHING
+// regswaps and instruction ordering issue near if (r4 && !(unk4->unk6 & 0x10))
+void GSblendObject::func_801DDC84(float p2)
+{
+ if (unk4) {
+ BOOL r29 = inline_TestFunction(unk4);
+
+ BOOL r30 = FALSE;
+ if (unk8) {
+ BOOL r3 = inline_TestFunction(unk8);
+ if (r3)
+ r30 = TRUE;
+ if (r29)
+ func_801DD5C8(unk4, p2);
+ if (r30) {
+ func_801DD5C8(unk8, p2);
+ r29 = TRUE;
+ unk4->unk6 |= 0x2;
+ }
+ // Note: inlined function call?
+ if (r29) {
+ func_801DD7FC(unk4, this, 0);
+ BOOL r4 = TRUE;
+ if (!(unk4->unk6 & 0x8)) {
+ BOOL r3 = unk4->unk0 && (unk4->unk6 & 0x1);
+ if (r3)
+ r4 = FALSE;
+ }
+ if (r4 && !(unk4->unk6 & 0x10)) {
+ unk4->unk6 &= ~0x1;
+ }
+ }
+ if (r30) {
+ func_801DD7FC(unk8, this, 0);
+ BOOL r4 = TRUE;
+ if (!(unk8->unk6 & 0x8)) {
+ BOOL r3 = unk8->unk0 && (unk8->unk6 & 0x1);
+ if (r3)
+ r4 = FALSE;
+ }
+ if (r4 && !(unk8->unk6 & 0x10)) {
+ unk8->unk6 &= ~0x1;
+ }
+ }
+ }
+ }
+}
+#else
+asm void GSblendObject::func_801DDC84(float p2)
+{
+ nofralloc
+/* 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
+}
+#pragma peephole on
+#endif
+
+void GSblendObject::func_801DDE4C(u16 id, u16 p3, float p4, float p5)
+{
+ if (unk8) {
+ unkC = 0.0f;
+ if (inline_TestFunction(unk8))
+ inline_ClearFunction(unk8);
+ }
+ func_801DDABC(id, p3, p4, p5);
+}
+
+// NOTE: nearly identical to func_801DDABC. Modifies unk8 instead of unk4, and initializes unkC
+// Populate structure referenced by unk8, attaching it to a gUnkClass8 with the matching id
+void GSblendObject::func_801DDEA0(u16 id, u16 p3, float p4, float p5, float p6)
+{
+ if (unk8) {
+ inline_ClearFunction(unk8);
+ gUnkClass8* r3 = func_801DDA94(id);
+ if (r3) {
+ gUnkClass7* r4 = unk8;
+ if (!(r4->unk6 & 0x10)) {
+ r4->unk0 = r3;
+ r4->unkC = p4;
+ r4->unk8 = p5;
+ r4->unk4 = (u16)(p3 & 0xFF);
+ r4->unk6 = 3;
+ }
+ }
+ unkC = p6;
+ }
+}
+
|