diff --git a/asm/JGadget/binary.s b/asm/JGadget/binary.s deleted file mode 100644 index 2cf6e6907e2..00000000000 --- a/asm/JGadget/binary.s +++ /dev/null @@ -1,137 +0,0 @@ -.include "macros.inc" - -.section .text, "ax" # 802dc864 - - -.global JGadget_NS_binary_NS_parseVariableUInt_16_32_following -JGadget_NS_binary_NS_parseVariableUInt_16_32_following: -/* 802DC864 002D97A4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802DC868 002D97A8 28 06 00 00 */ cmplwi r6, 0 -/* 802DC86C 002D97AC 40 82 00 08 */ bne lbl_802DC874 -/* 802DC870 002D97B0 38 C1 00 08 */ addi r6, r1, 8 -lbl_802DC874: -/* 802DC874 002D97B4 A0 E3 00 00 */ lhz r7, 0(r3) -/* 802DC878 002D97B8 54 E0 04 21 */ rlwinm. r0, r7, 0, 0x10, 0x10 -/* 802DC87C 002D97BC 40 82 00 20 */ bne lbl_802DC89C -/* 802DC880 002D97C0 38 00 00 10 */ li r0, 0x10 -/* 802DC884 002D97C4 90 06 00 00 */ stw r0, 0(r6) -/* 802DC888 002D97C8 90 E4 00 00 */ stw r7, 0(r4) -/* 802DC88C 002D97CC A0 03 00 02 */ lhz r0, 2(r3) -/* 802DC890 002D97D0 90 05 00 00 */ stw r0, 0(r5) -/* 802DC894 002D97D4 38 63 00 04 */ addi r3, r3, 4 -/* 802DC898 002D97D8 48 00 00 28 */ b lbl_802DC8C0 -lbl_802DC89C: -/* 802DC89C 002D97DC 38 00 00 20 */ li r0, 0x20 -/* 802DC8A0 002D97E0 90 06 00 00 */ stw r0, 0(r6) -/* 802DC8A4 002D97E4 54 E7 80 5E */ rlwinm r7, r7, 0x10, 1, 0xf -/* 802DC8A8 002D97E8 A0 03 00 02 */ lhz r0, 2(r3) -/* 802DC8AC 002D97EC 7C E7 03 78 */ or r7, r7, r0 -/* 802DC8B0 002D97F0 90 E4 00 00 */ stw r7, 0(r4) -/* 802DC8B4 002D97F4 80 03 00 04 */ lwz r0, 4(r3) -/* 802DC8B8 002D97F8 90 05 00 00 */ stw r0, 0(r5) -/* 802DC8BC 002D97FC 38 63 00 08 */ addi r3, r3, 8 -lbl_802DC8C0: -/* 802DC8C0 002D9800 38 21 00 10 */ addi r1, r1, 0x10 -/* 802DC8C4 002D9804 4E 80 00 20 */ blr - -.global __dt__Q37JGadget6binary19TParse_header_blockFv -__dt__Q37JGadget6binary19TParse_header_blockFv: -/* 802DC8C8 002D9808 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802DC8CC 002D980C 7C 08 02 A6 */ mflr r0 -/* 802DC8D0 002D9810 90 01 00 14 */ stw r0, 0x14(r1) -/* 802DC8D4 002D9814 93 E1 00 0C */ stw r31, 0xc(r1) -/* 802DC8D8 002D9818 7C 7F 1B 79 */ or. r31, r3, r3 -/* 802DC8DC 002D981C 41 82 00 1C */ beq lbl_802DC8F8 -/* 802DC8E0 002D9820 3C A0 80 3C */ lis r5, lbl_803C488C@ha -/* 802DC8E4 002D9824 38 05 48 8C */ addi r0, r5, lbl_803C488C@l -/* 802DC8E8 002D9828 90 1F 00 00 */ stw r0, 0(r31) -/* 802DC8EC 002D982C 7C 80 07 35 */ extsh. r0, r4 -/* 802DC8F0 002D9830 40 81 00 08 */ ble lbl_802DC8F8 -/* 802DC8F4 002D9834 4B FF 24 49 */ bl __dl__FPv -lbl_802DC8F8: -/* 802DC8F8 002D9838 7F E3 FB 78 */ mr r3, r31 -/* 802DC8FC 002D983C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 802DC900 002D9840 80 01 00 14 */ lwz r0, 0x14(r1) -/* 802DC904 002D9844 7C 08 03 A6 */ mtlr r0 -/* 802DC908 002D9848 38 21 00 10 */ addi r1, r1, 0x10 -/* 802DC90C 002D984C 4E 80 00 20 */ blr - -.global JGadget_NS_binary_NS_TParse_header_block_NS_parse_next -JGadget_NS_binary_NS_TParse_header_block_NS_parse_next: -/* 802DC910 002D9850 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 802DC914 002D9854 7C 08 02 A6 */ mflr r0 -/* 802DC918 002D9858 90 01 00 34 */ stw r0, 0x34(r1) -/* 802DC91C 002D985C 39 61 00 30 */ addi r11, r1, 0x30 -/* 802DC920 002D9860 48 08 58 B1 */ bl _savegpr_26 -/* 802DC924 002D9864 7C 7A 1B 78 */ mr r26, r3 -/* 802DC928 002D9868 7C 9B 23 79 */ or. r27, r4, r4 -/* 802DC92C 002D986C 7C BC 2B 78 */ mr r28, r5 -/* 802DC930 002D9870 41 82 00 10 */ beq lbl_802DC940 -/* 802DC934 002D9874 80 1B 00 00 */ lwz r0, 0(r27) -/* 802DC938 002D9878 28 00 00 00 */ cmplwi r0, 0 -/* 802DC93C 002D987C 40 82 00 0C */ bne lbl_802DC948 -lbl_802DC940: -/* 802DC940 002D9880 38 60 00 00 */ li r3, 0 -/* 802DC944 002D9884 48 00 00 C0 */ b lbl_802DCA04 -lbl_802DC948: -/* 802DC948 002D9888 3B E0 00 00 */ li r31, 0 -/* 802DC94C 002D988C 38 A1 00 0C */ addi r5, r1, 0xc -/* 802DC950 002D9890 7F 86 E3 78 */ mr r6, r28 -/* 802DC954 002D9894 81 83 00 00 */ lwz r12, 0(r3) -/* 802DC958 002D9898 81 8C 00 0C */ lwz r12, 0xc(r12) -/* 802DC95C 002D989C 7D 89 03 A6 */ mtctr r12 -/* 802DC960 002D98A0 4E 80 04 21 */ bctrl -/* 802DC964 002D98A4 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 802DC968 002D98A8 41 82 00 08 */ beq lbl_802DC970 -/* 802DC96C 002D98AC 3B E0 00 01 */ li r31, 1 -lbl_802DC970: -/* 802DC970 002D98B0 7F FD FB 78 */ mr r29, r31 -/* 802DC974 002D98B4 57 80 07 FF */ clrlwi. r0, r28, 0x1f -/* 802DC978 002D98B8 40 82 00 14 */ bne lbl_802DC98C -/* 802DC97C 002D98BC 57 E0 06 3F */ clrlwi. r0, r31, 0x18 -/* 802DC980 002D98C0 40 82 00 0C */ bne lbl_802DC98C -/* 802DC984 002D98C4 7F E3 FB 78 */ mr r3, r31 -/* 802DC988 002D98C8 48 00 00 7C */ b lbl_802DCA04 -lbl_802DC98C: -/* 802DC98C 002D98CC 57 9E 07 BC */ rlwinm r30, r28, 0, 0x1e, 0x1e -/* 802DC990 002D98D0 48 00 00 64 */ b lbl_802DC9F4 -lbl_802DC994: -/* 802DC994 002D98D4 3B E0 00 00 */ li r31, 0 -/* 802DC998 002D98D8 7F 43 D3 78 */ mr r3, r26 -/* 802DC99C 002D98DC 7F 64 DB 78 */ mr r4, r27 -/* 802DC9A0 002D98E0 38 A1 00 08 */ addi r5, r1, 8 -/* 802DC9A4 002D98E4 7F 86 E3 78 */ mr r6, r28 -/* 802DC9A8 002D98E8 81 9A 00 00 */ lwz r12, 0(r26) -/* 802DC9AC 002D98EC 81 8C 00 10 */ lwz r12, 0x10(r12) -/* 802DC9B0 002D98F0 7D 89 03 A6 */ mtctr r12 -/* 802DC9B4 002D98F4 4E 80 04 21 */ bctrl -/* 802DC9B8 002D98F8 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 802DC9BC 002D98FC 41 82 00 10 */ beq lbl_802DC9CC -/* 802DC9C0 002D9900 57 A0 06 3F */ clrlwi. r0, r29, 0x18 -/* 802DC9C4 002D9904 41 82 00 08 */ beq lbl_802DC9CC -/* 802DC9C8 002D9908 3B E0 00 01 */ li r31, 1 -lbl_802DC9CC: -/* 802DC9CC 002D990C 7F FD FB 78 */ mr r29, r31 -/* 802DC9D0 002D9910 28 1E 00 00 */ cmplwi r30, 0 -/* 802DC9D4 002D9914 40 82 00 14 */ bne lbl_802DC9E8 -/* 802DC9D8 002D9918 57 E0 06 3F */ clrlwi. r0, r31, 0x18 -/* 802DC9DC 002D991C 40 82 00 0C */ bne lbl_802DC9E8 -/* 802DC9E0 002D9920 7F E3 FB 78 */ mr r3, r31 -/* 802DC9E4 002D9924 48 00 00 20 */ b lbl_802DCA04 -lbl_802DC9E8: -/* 802DC9E8 002D9928 80 61 00 0C */ lwz r3, 0xc(r1) -/* 802DC9EC 002D992C 38 03 FF FF */ addi r0, r3, -1 -/* 802DC9F0 002D9930 90 01 00 0C */ stw r0, 0xc(r1) -lbl_802DC9F4: -/* 802DC9F4 002D9934 80 01 00 0C */ lwz r0, 0xc(r1) -/* 802DC9F8 002D9938 28 00 00 00 */ cmplwi r0, 0 -/* 802DC9FC 002D993C 40 82 FF 98 */ bne lbl_802DC994 -/* 802DCA00 002D9940 7F A3 EB 78 */ mr r3, r29 -lbl_802DCA04: -/* 802DCA04 002D9944 39 61 00 30 */ addi r11, r1, 0x30 -/* 802DCA08 002D9948 48 08 58 15 */ bl _restgpr_26 -/* 802DCA0C 002D994C 80 01 00 34 */ lwz r0, 0x34(r1) -/* 802DCA10 002D9950 7C 08 03 A6 */ mtlr r0 -/* 802DCA14 002D9954 38 21 00 30 */ addi r1, r1, 0x30 -/* 802DCA18 002D9958 4E 80 00 20 */ blr - diff --git a/asm/JStudio/fvb-data-parse.s b/asm/JStudio/fvb-data-parse.s index 872f0f5b6a5..a862b17e486 100644 --- a/asm/JStudio/fvb-data-parse.s +++ b/asm/JStudio/fvb-data-parse.s @@ -13,7 +13,7 @@ JStudio_NS_fvb_NS_data_NS_TParse_TParagraph_NS_getData: /* 802850C0 00282000 80 63 00 00 */ lwz r3, 0(r3) /* 802850C4 00282004 38 BF 00 04 */ addi r5, r31, 4 /* 802850C8 00282008 38 C0 00 00 */ li r6, 0 -/* 802850CC 0028200C 48 05 77 99 */ bl JGadget_NS_binary_NS_parseVariableUInt_16_32_following +/* 802850CC 0028200C 48 05 77 99 */ bl parseVariableUInt_16_32_following__Q27JGadget6binaryFPCvPUlPUlPQ37JGadget6binary5TEBit /* 802850D0 00282010 80 9F 00 00 */ lwz r4, 0(r31) /* 802850D4 00282014 28 04 00 00 */ cmplwi r4, 0 /* 802850D8 00282018 40 82 00 14 */ bne lbl_802850EC diff --git a/asm/JStudio/jstudio-control.s b/asm/JStudio/jstudio-control.s index 7eacd99d87e..36775b2b0cb 100644 --- a/asm/JStudio/jstudio-control.s +++ b/asm/JStudio/jstudio-control.s @@ -547,7 +547,7 @@ lbl_8028588C: /* 8028589C 002827DC 38 61 00 0C */ addi r3, r1, 0xc /* 802858A0 002827E0 38 81 00 08 */ addi r4, r1, 8 /* 802858A4 002827E4 7F C5 F3 78 */ mr r5, r30 -/* 802858A8 002827E8 48 05 70 69 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 802858A8 002827E8 48 05 70 69 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 802858AC 002827EC 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 802858B0 002827F0 40 82 00 18 */ bne lbl_802858C8 /* 802858B4 002827F4 38 61 00 0C */ addi r3, r1, 0xc @@ -599,7 +599,7 @@ lbl_8028593C: /* 8028594C 0028288C 38 61 00 0C */ addi r3, r1, 0xc /* 80285950 00282890 38 81 00 08 */ addi r4, r1, 8 /* 80285954 00282894 7F A5 EB 78 */ mr r5, r29 -/* 80285958 00282898 48 05 6F B9 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80285958 00282898 48 05 6F B9 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 8028595C 0028289C 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 80285960 002828A0 40 82 00 18 */ bne lbl_80285978 /* 80285964 002828A4 38 61 00 0C */ addi r3, r1, 0xc diff --git a/asm/JStudio/stb-data-parse.s b/asm/JStudio/stb-data-parse.s index 07f31658684..8ee4b789752 100644 --- a/asm/JStudio/stb-data-parse.s +++ b/asm/JStudio/stb-data-parse.s @@ -37,7 +37,7 @@ JStudio_NS_stb_NS_data_NS_TParse_TParagraph_NS_getData: /* 80289A20 00286960 38 81 00 08 */ addi r4, r1, 8 /* 80289A24 00286964 7F E5 FB 78 */ mr r5, r31 /* 80289A28 00286968 38 C0 00 00 */ li r6, 0 -/* 80289A2C 0028696C 48 05 2E 39 */ bl JGadget_NS_binary_NS_parseVariableUInt_16_32_following +/* 80289A2C 0028696C 48 05 2E 39 */ bl parseVariableUInt_16_32_following__Q27JGadget6binaryFPCvPUlPUlPQ37JGadget6binary5TEBit /* 80289A30 00286970 80 01 00 08 */ lwz r0, 8(r1) /* 80289A34 00286974 90 1F 00 04 */ stw r0, 4(r31) /* 80289A38 00286978 80 01 00 08 */ lwz r0, 8(r1) diff --git a/asm/d/d_demo.s b/asm/d/d_demo.s index 38a1d36d60c..4f629dd7cf1 100644 --- a/asm/d/d_demo.s +++ b/asm/d/d_demo.s @@ -2135,7 +2135,7 @@ dDemo_c_NS_start: /* 80039BAC 00036AEC 38 61 00 0C */ addi r3, r1, 0xc /* 80039BB0 00036AF0 38 81 00 08 */ addi r4, r1, 8 /* 80039BB4 00036AF4 38 A0 00 00 */ li r5, 0 -/* 80039BB8 00036AF8 48 2A 2D 59 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80039BB8 00036AF8 48 2A 2D 59 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 80039BBC 00036AFC 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 80039BC0 00036B00 40 82 00 2C */ bne lbl_80039BEC /* 80039BC4 00036B04 3C 60 80 38 */ lis r3, lbl_803797F8@ha diff --git a/asm/d/msg/d_msg_object.s b/asm/d/msg/d_msg_object.s index 1324cff5004..2768c561553 100644 --- a/asm/d/msg/d_msg_object.s +++ b/asm/d/msg/d_msg_object.s @@ -689,7 +689,7 @@ lbl_8023346C: /* 80233478 002303B8 80 7E 01 24 */ lwz r3, 0x124(r30) /* 8023347C 002303BC 38 81 00 08 */ addi r4, r1, 8 /* 80233480 002303C0 38 A0 00 00 */ li r5, 0 -/* 80233484 002303C4 48 0A 94 8D */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80233484 002303C4 48 0A 94 8D */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 80233488 002303C8 80 7E 01 14 */ lwz r3, 0x114(r30) /* 8023348C 002303CC 48 07 41 49 */ bl JMessage_NS_TControl_NS_reset /* 80233490 002303D0 80 7E 01 14 */ lwz r3, 0x114(r30) @@ -4713,7 +4713,7 @@ lbl_80236D9C: /* 80236DB0 00233CF0 80 7E 01 24 */ lwz r3, 0x124(r30) /* 80236DB4 00233CF4 38 81 00 08 */ addi r4, r1, 8 /* 80236DB8 00233CF8 38 A0 00 80 */ li r5, 0x80 -/* 80236DBC 00233CFC 48 0A 5B 55 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80236DBC 00233CFC 48 0A 5B 55 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl lbl_80236DC0: /* 80236DC0 00233D00 B3 FE 01 6C */ sth r31, 0x16c(r30) lbl_80236DC4: diff --git a/asm/d/msg/string/d_msg_string_base.s b/asm/d/msg/string/d_msg_string_base.s index 7324fe5dc0d..c465975af77 100644 --- a/asm/d/msg/string/d_msg_string_base.s +++ b/asm/d/msg/string/d_msg_string_base.s @@ -82,7 +82,7 @@ lbl_80249494: /* 802494C4 00246404 80 7F 00 18 */ lwz r3, 0x18(r31) /* 802494C8 00246408 38 81 00 08 */ addi r4, r1, 8 /* 802494CC 0024640C 38 A0 00 00 */ li r5, 0 -/* 802494D0 00246410 48 09 34 41 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 802494D0 00246410 48 09 34 41 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 802494D4 00246414 80 7F 00 08 */ lwz r3, 8(r31) /* 802494D8 00246418 48 05 E0 FD */ bl JMessage_NS_TControl_NS_reset /* 802494DC 0024641C 80 7F 00 08 */ lwz r3, 8(r31) @@ -300,7 +300,7 @@ dMsgStringBase_c_NS_getStringLocal: /* 802497D4 00246714 80 7E 00 18 */ lwz r3, 0x18(r30) /* 802497D8 00246718 38 81 00 0C */ addi r4, r1, 0xc /* 802497DC 0024671C 38 A0 00 80 */ li r5, 0x80 -/* 802497E0 00246720 48 09 31 31 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 802497E0 00246720 48 09 31 31 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 802497E4 00246724 48 00 00 2C */ b lbl_80249810 lbl_802497E8: /* 802497E8 00246728 80 1E 00 1C */ lwz r0, 0x1c(r30) @@ -312,7 +312,7 @@ lbl_802497E8: /* 80249800 00246740 80 7E 00 18 */ lwz r3, 0x18(r30) /* 80249804 00246744 38 81 00 08 */ addi r4, r1, 8 /* 80249808 00246748 38 A0 00 80 */ li r5, 0x80 -/* 8024980C 0024674C 48 09 31 05 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 8024980C 0024674C 48 09 31 05 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl lbl_80249810: /* 80249810 00246750 80 7E 00 0C */ lwz r3, 0xc(r30) /* 80249814 00246754 7F 24 CB 78 */ mr r4, r25 @@ -400,7 +400,7 @@ dMsgStringBase_c_NS_getStringPageLocal: /* 80249948 00246888 80 78 00 18 */ lwz r3, 0x18(r24) /* 8024994C 0024688C 38 81 00 0C */ addi r4, r1, 0xc /* 80249950 00246890 38 A0 00 80 */ li r5, 0x80 -/* 80249954 00246894 48 09 2F BD */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80249954 00246894 48 09 2F BD */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 80249958 00246898 48 00 00 2C */ b lbl_80249984 lbl_8024995C: /* 8024995C 0024689C 80 18 00 1C */ lwz r0, 0x1c(r24) @@ -412,7 +412,7 @@ lbl_8024995C: /* 80249974 002468B4 80 78 00 18 */ lwz r3, 0x18(r24) /* 80249978 002468B8 38 81 00 08 */ addi r4, r1, 8 /* 8024997C 002468BC 38 A0 00 80 */ li r5, 0x80 -/* 80249980 002468C0 48 09 2F 91 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80249980 002468C0 48 09 2F 91 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl lbl_80249984: /* 80249984 002468C4 80 78 00 0C */ lwz r3, 0xc(r24) /* 80249988 002468C8 7F 84 E3 78 */ mr r4, r28 @@ -506,7 +506,7 @@ dMsgStringBase_c_NS_getMessageLocal: /* 80249AC8 00246A08 80 7D 00 18 */ lwz r3, 0x18(r29) /* 80249ACC 00246A0C 38 81 00 0C */ addi r4, r1, 0xc /* 80249AD0 00246A10 38 A0 00 80 */ li r5, 0x80 -/* 80249AD4 00246A14 48 09 2E 3D */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80249AD4 00246A14 48 09 2E 3D */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl /* 80249AD8 00246A18 48 00 00 2C */ b lbl_80249B04 lbl_80249ADC: /* 80249ADC 00246A1C 80 1D 00 1C */ lwz r0, 0x1c(r29) @@ -518,7 +518,7 @@ lbl_80249ADC: /* 80249AF4 00246A34 80 7D 00 18 */ lwz r3, 0x18(r29) /* 80249AF8 00246A38 38 81 00 08 */ addi r4, r1, 8 /* 80249AFC 00246A3C 38 A0 00 80 */ li r5, 0x80 -/* 80249B00 00246A40 48 09 2E 11 */ bl JGadget_NS_binary_NS_TParse_header_block_NS_parse_next +/* 80249B00 00246A40 48 09 2E 11 */ bl parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl lbl_80249B04: /* 80249B04 00246A44 80 7D 00 0C */ lwz r3, 0xc(r29) /* 80249B08 00246A48 38 80 00 00 */ li r4, 0 diff --git a/include/JSystem/JGadget/asm/func_802DC864.s b/include/JSystem/JGadget/asm/func_802DC864.s new file mode 100644 index 00000000000..a28117bf5e5 --- /dev/null +++ b/include/JSystem/JGadget/asm/func_802DC864.s @@ -0,0 +1,28 @@ +/* 802DC864 002D97A4 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 802DC868 002D97A8 28 06 00 00 */ cmplwi r6, 0 +/* 802DC86C 002D97AC 40 82 00 08 */ bne lbl_802DC874 +/* 802DC870 002D97B0 38 C1 00 08 */ addi r6, r1, 8 +lbl_802DC874: +/* 802DC874 002D97B4 A0 E3 00 00 */ lhz r7, 0(r3) +/* 802DC878 002D97B8 54 E0 04 21 */ rlwinm. r0, r7, 0, 0x10, 0x10 +/* 802DC87C 002D97BC 40 82 00 20 */ bne lbl_802DC89C +/* 802DC880 002D97C0 38 00 00 10 */ li r0, 0x10 +/* 802DC884 002D97C4 90 06 00 00 */ stw r0, 0(r6) +/* 802DC888 002D97C8 90 E4 00 00 */ stw r7, 0(r4) +/* 802DC88C 002D97CC A0 03 00 02 */ lhz r0, 2(r3) +/* 802DC890 002D97D0 90 05 00 00 */ stw r0, 0(r5) +/* 802DC894 002D97D4 38 63 00 04 */ addi r3, r3, 4 +/* 802DC898 002D97D8 48 00 00 28 */ b lbl_802DC8C0 +lbl_802DC89C: +/* 802DC89C 002D97DC 38 00 00 20 */ li r0, 0x20 +/* 802DC8A0 002D97E0 90 06 00 00 */ stw r0, 0(r6) +/* 802DC8A4 002D97E4 54 E7 80 5E */ rlwinm r7, r7, 0x10, 1, 0xf +/* 802DC8A8 002D97E8 A0 03 00 02 */ lhz r0, 2(r3) +/* 802DC8AC 002D97EC 7C E7 03 78 */ or r7, r7, r0 +/* 802DC8B0 002D97F0 90 E4 00 00 */ stw r7, 0(r4) +/* 802DC8B4 002D97F4 80 03 00 04 */ lwz r0, 4(r3) +/* 802DC8B8 002D97F8 90 05 00 00 */ stw r0, 0(r5) +/* 802DC8BC 002D97FC 38 63 00 08 */ addi r3, r3, 8 +lbl_802DC8C0: +/* 802DC8C0 002D9800 38 21 00 10 */ addi r1, r1, 0x10 +/* 802DC8C4 002D9804 4E 80 00 20 */ blr diff --git a/include/JSystem/JGadget/asm/func_802DC910.s b/include/JSystem/JGadget/asm/func_802DC910.s new file mode 100644 index 00000000000..c216b2e5584 --- /dev/null +++ b/include/JSystem/JGadget/asm/func_802DC910.s @@ -0,0 +1,76 @@ +/* 802DC910 002D9850 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 802DC914 002D9854 7C 08 02 A6 */ mflr r0 +/* 802DC918 002D9858 90 01 00 34 */ stw r0, 0x34(r1) +/* 802DC91C 002D985C 39 61 00 30 */ addi r11, r1, 0x30 +/* 802DC920 002D9860 48 08 58 B1 */ bl _savegpr_26 +/* 802DC924 002D9864 7C 7A 1B 78 */ mr r26, r3 +/* 802DC928 002D9868 7C 9B 23 79 */ or. r27, r4, r4 +/* 802DC92C 002D986C 7C BC 2B 78 */ mr r28, r5 +/* 802DC930 002D9870 41 82 00 10 */ beq lbl_802DC940 +/* 802DC934 002D9874 80 1B 00 00 */ lwz r0, 0(r27) +/* 802DC938 002D9878 28 00 00 00 */ cmplwi r0, 0 +/* 802DC93C 002D987C 40 82 00 0C */ bne lbl_802DC948 +lbl_802DC940: +/* 802DC940 002D9880 38 60 00 00 */ li r3, 0 +/* 802DC944 002D9884 48 00 00 C0 */ b lbl_802DCA04 +lbl_802DC948: +/* 802DC948 002D9888 3B E0 00 00 */ li r31, 0 +/* 802DC94C 002D988C 38 A1 00 0C */ addi r5, r1, 0xc +/* 802DC950 002D9890 7F 86 E3 78 */ mr r6, r28 +/* 802DC954 002D9894 81 83 00 00 */ lwz r12, 0(r3) +/* 802DC958 002D9898 81 8C 00 0C */ lwz r12, 0xc(r12) +/* 802DC95C 002D989C 7D 89 03 A6 */ mtctr r12 +/* 802DC960 002D98A0 4E 80 04 21 */ bctrl +/* 802DC964 002D98A4 54 60 06 3F */ clrlwi. r0, r3, 0x18 +/* 802DC968 002D98A8 41 82 00 08 */ beq lbl_802DC970 +/* 802DC96C 002D98AC 3B E0 00 01 */ li r31, 1 +lbl_802DC970: +/* 802DC970 002D98B0 7F FD FB 78 */ mr r29, r31 +/* 802DC974 002D98B4 57 80 07 FF */ clrlwi. r0, r28, 0x1f +/* 802DC978 002D98B8 40 82 00 14 */ bne lbl_802DC98C +/* 802DC97C 002D98BC 57 E0 06 3F */ clrlwi. r0, r31, 0x18 +/* 802DC980 002D98C0 40 82 00 0C */ bne lbl_802DC98C +/* 802DC984 002D98C4 7F E3 FB 78 */ mr r3, r31 +/* 802DC988 002D98C8 48 00 00 7C */ b lbl_802DCA04 +lbl_802DC98C: +/* 802DC98C 002D98CC 57 9E 07 BC */ rlwinm r30, r28, 0, 0x1e, 0x1e +/* 802DC990 002D98D0 48 00 00 64 */ b lbl_802DC9F4 +lbl_802DC994: +/* 802DC994 002D98D4 3B E0 00 00 */ li r31, 0 +/* 802DC998 002D98D8 7F 43 D3 78 */ mr r3, r26 +/* 802DC99C 002D98DC 7F 64 DB 78 */ mr r4, r27 +/* 802DC9A0 002D98E0 38 A1 00 08 */ addi r5, r1, 8 +/* 802DC9A4 002D98E4 7F 86 E3 78 */ mr r6, r28 +/* 802DC9A8 002D98E8 81 9A 00 00 */ lwz r12, 0(r26) +/* 802DC9AC 002D98EC 81 8C 00 10 */ lwz r12, 0x10(r12) +/* 802DC9B0 002D98F0 7D 89 03 A6 */ mtctr r12 +/* 802DC9B4 002D98F4 4E 80 04 21 */ bctrl +/* 802DC9B8 002D98F8 54 60 06 3F */ clrlwi. r0, r3, 0x18 +/* 802DC9BC 002D98FC 41 82 00 10 */ beq lbl_802DC9CC +/* 802DC9C0 002D9900 57 A0 06 3F */ clrlwi. r0, r29, 0x18 +/* 802DC9C4 002D9904 41 82 00 08 */ beq lbl_802DC9CC +/* 802DC9C8 002D9908 3B E0 00 01 */ li r31, 1 +lbl_802DC9CC: +/* 802DC9CC 002D990C 7F FD FB 78 */ mr r29, r31 +/* 802DC9D0 002D9910 28 1E 00 00 */ cmplwi r30, 0 +/* 802DC9D4 002D9914 40 82 00 14 */ bne lbl_802DC9E8 +/* 802DC9D8 002D9918 57 E0 06 3F */ clrlwi. r0, r31, 0x18 +/* 802DC9DC 002D991C 40 82 00 0C */ bne lbl_802DC9E8 +/* 802DC9E0 002D9920 7F E3 FB 78 */ mr r3, r31 +/* 802DC9E4 002D9924 48 00 00 20 */ b lbl_802DCA04 +lbl_802DC9E8: +/* 802DC9E8 002D9928 80 61 00 0C */ lwz r3, 0xc(r1) +/* 802DC9EC 002D992C 38 03 FF FF */ addi r0, r3, -1 +/* 802DC9F0 002D9930 90 01 00 0C */ stw r0, 0xc(r1) +lbl_802DC9F4: +/* 802DC9F4 002D9934 80 01 00 0C */ lwz r0, 0xc(r1) +/* 802DC9F8 002D9938 28 00 00 00 */ cmplwi r0, 0 +/* 802DC9FC 002D993C 40 82 FF 98 */ bne lbl_802DC994 +/* 802DCA00 002D9940 7F A3 EB 78 */ mr r3, r29 +lbl_802DCA04: +/* 802DCA04 002D9944 39 61 00 30 */ addi r11, r1, 0x30 +/* 802DCA08 002D9948 48 08 58 15 */ bl _restgpr_26 +/* 802DCA0C 002D994C 80 01 00 34 */ lwz r0, 0x34(r1) +/* 802DCA10 002D9950 7C 08 03 A6 */ mtlr r0 +/* 802DCA14 002D9954 38 21 00 30 */ addi r1, r1, 0x30 +/* 802DCA18 002D9958 4E 80 00 20 */ blr diff --git a/include/JSystem/JGadget/binary.h b/include/JSystem/JGadget/binary.h index 8b947587ab9..47b831acc04 100644 --- a/include/JSystem/JGadget/binary.h +++ b/include/JSystem/JGadget/binary.h @@ -6,6 +6,13 @@ namespace JGadget { namespace binary { +struct TEBit { + u32 value; +}; + +const void* parseVariableUInt_16_32_following(const void* pu16, u32* pu32First, u32* pu32Second, + TEBit* tebit); + inline u32 align_roundUp(u32 arg0, u32 uAlign) { return (arg0 + uAlign - 1) & ~(uAlign - 1); } @@ -27,8 +34,10 @@ struct TParseData_aligned : public TParseData { struct TParse_header_block { virtual ~TParse_header_block(); - virtual int parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg2) = 0; - virtual int parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg2) = 0; + virtual bool parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg2) = 0; + virtual bool parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg2) = 0; + + bool parse_next(const void** ppData_inout, u32 a2); }; } // namespace binary diff --git a/include/JSystem/JStudio/stb.h b/include/JSystem/JStudio/stb.h index 3a6df1d44d6..5de377d7bd4 100644 --- a/include/JSystem/JStudio/stb.h +++ b/include/JSystem/JStudio/stb.h @@ -109,9 +109,9 @@ public: virtual ~TParse(); // virtuals - virtual int parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg3); - virtual int parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg3); - virtual int parseHeader(const data::TParse_THeader& header, u32 arg2); + virtual bool parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg3); + virtual bool parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg3); + virtual bool parseHeader(const data::TParse_THeader& header, u32 arg2); virtual bool parseBlock_block(const data::TParse_TBlock& referBlock, u32 arg2); virtual bool parseBlock_object(const data::TParse_TBlock_object& referObject, u32 arg2); diff --git a/libs/JSystem/JGadget/binary.cpp b/libs/JSystem/JGadget/binary.cpp index 4bf93c8658d..84bdb2c1cd0 100644 --- a/libs/JSystem/JGadget/binary.cpp +++ b/libs/JSystem/JGadget/binary.cpp @@ -1 +1,103 @@ -// ok +#include "JSystem/JGadget/binary.h" +#include "global.h" + +extern "C" { +void parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl(void); +void parseVariableUInt_16_32_following__Q27JGadget6binaryFPCvPUlPUlPQ37JGadget6binary5TEBit(void); +void __dt__Q37JGadget6binary19TParse_header_blockFv(void); +} + +extern u8 lbl_803C488C; + +namespace JGadget { +namespace binary { + +#ifdef NONMATCHING // really small difference +const void* parseVariableUInt_16_32_following(const void* pu16, u32* pu32First, u32* pu32Second, + TEBit* tebit) { + JUT_ASSERT(pu_16 != NULL); + JUT_ASSERT(pu32First != NULL); + JUT_ASSERT(pu32Second != NULL); + + TEBit bit; + + if (tebit == NULL) { + tebit = &bit; + } + + const u16* u = static_cast(pu16); + + if (!(u[0] & 0x8000)) { + tebit->value = 0x10; + *pu32First = u[0]; + *pu32Second = u[1]; + return &u[2]; + } else { + tebit->value = 0x20; + + const u32* u2 = static_cast(pu16); + *pu32First = (u[0] << 16) | u[1]; + *pu32Second = u2[1]; + return &u[4]; + } +} +#else +asm const void* parseVariableUInt_16_32_following(const void* pu16, u32* pu32First, u32* pu32Second, + TEBit* tebit) { + nofralloc +#include "JSystem/JGadget/asm/func_802DC864.s" +} +#endif + +TParse_header_block::~TParse_header_block() {} + +#ifdef NONMATCHING // minor regalloc +bool TParse_header_block::parse_next(const void** ppData_inout, u32 a2) { + bool result; + u32 count; + + if (ppData_inout == NULL || *ppData_inout == NULL) { + JUTWarn w; + w << "data not specified"; + + return false; + } + + bool headerOK = false; + if (parseHeader_next(ppData_inout, &count, a2)) { + headerOK = true; + } + + result = headerOK; + + if (!(a2 & 1) && !result) { + return result; + } + + for (; count != 0; --count) { + bool blockOK = false; + + const void* p = *ppData_inout; + + if (parseBlock_next(ppData_inout, &count, a2) && result) { + blockOK = true; + } + result = blockOK; + + JUT_ASSERT(std::uintptr_t(*ppData_inout) == std::uintptr_t(p) + uData); + + if (!(a2 & 2) && !blockOK) { + return result; + } + } + return result; +} +#else +asm bool TParse_header_block::parse_next(const void** ppData_inout, u32 a2) { + nofralloc +#include "JSystem/JGadget/asm/func_802DC910.s" +} +#endif + +} // namespace binary +} // namespace JGadget diff --git a/libs/JSystem/JStudio/stb.cpp b/libs/JSystem/JStudio/stb.cpp index 6d9f02f783e..acdf026ccaf 100644 --- a/libs/JSystem/JStudio/stb.cpp +++ b/libs/JSystem/JStudio/stb.cpp @@ -256,7 +256,7 @@ TParse::TParse(TControl* pControl) : pControl(pControl) {} TParse::~TParse() {} #ifdef NONMATCHING // Close but is missing a temp or something -int TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg3) { +bool TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg3) { const void* pData = *ppData_inout; const data::TParse_THeader& header(pData); @@ -279,19 +279,19 @@ int TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 ar return parseHeader(header, arg3); } #else -asm int TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg3) { +asm bool TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg3) { nofralloc #include "JSystem/JStudio/asm/parseHeader_next__Q37JStudio3stb6TParseFPPCvPUlUl.s" } #endif -asm int TParse::parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg3) { +asm bool TParse::parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg3) { nofralloc #include "JSystem/JStudio/asm/parseBlock_next__Q37JStudio3stb6TParseFPPCvPUlUl.s" } -int TParse::parseHeader(const data::TParse_THeader& header, u32 arg2) { - return 1; +bool TParse::parseHeader(const data::TParse_THeader& header, u32 arg2) { + return true; } bool TParse::parseBlock_block(const data::TParse_TBlock& ppBlock, u32 arg2) { diff --git a/obj_files.mk b/obj_files.mk index 129835ee9b5..7dacc7520cd 100644 --- a/obj_files.mk +++ b/obj_files.mk @@ -459,7 +459,7 @@ TEXT_O_FILES := \ $(BUILD_DIR)/asm/JSupport/JSUInputStream.o \ $(BUILD_DIR)/asm/JSupport/JSUMemoryStream.o \ $(BUILD_DIR)/asm/JSupport/JSUFileStream.o \ - $(BUILD_DIR)/asm/JGadget/binary.o \ + $(BUILD_DIR)/libs/JSystem/JGadget/binary.o \ $(BUILD_DIR)/libs/JSystem/JGadget/linklist.o \ $(BUILD_DIR)/asm/JGadget/linklist.o \ $(BUILD_DIR)/libs/JSystem/JGadget/std-vector.o \