diff --git a/asm/JSystem/J2DGraph/J2DManage/getName__15J2DResReferenceCFUs.s b/asm/JSystem/J2DGraph/J2DManage/getName__15J2DResReferenceCFUs.s deleted file mode 100644 index f5bff7333f1..00000000000 --- a/asm/JSystem/J2DGraph/J2DManage/getName__15J2DResReferenceCFUs.s +++ /dev/null @@ -1,98 +0,0 @@ -lbl_8030CF44: -/* 8030CF44 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8030CF48 7C 08 02 A6 */ mflr r0 -/* 8030CF4C 90 01 00 14 */ stw r0, 0x14(r1) -/* 8030CF50 4B FF FF C1 */ bl getResReference__15J2DResReferenceCFUs -/* 8030CF54 28 03 00 00 */ cmplwi r3, 0 -/* 8030CF58 40 82 00 14 */ bne lbl_8030CF6C -/* 8030CF5C 38 00 00 00 */ li r0, 0 -/* 8030CF60 3C 60 80 43 */ lis r3, p_name@ha /* 0x804349C0@ha */ -/* 8030CF64 9C 03 49 C0 */ stbu r0, p_name@l(r3) /* 0x804349C0@l */ -/* 8030CF68 48 00 01 20 */ b lbl_8030D088 -lbl_8030CF6C: -/* 8030CF6C 88 03 00 00 */ lbz r0, 0(r3) -/* 8030CF70 7C 00 07 74 */ extsb r0, r0 -/* 8030CF74 2C 00 00 04 */ cmpwi r0, 4 -/* 8030CF78 41 82 00 5C */ beq lbl_8030CFD4 -/* 8030CF7C 40 80 00 F8 */ bge lbl_8030D074 -/* 8030CF80 2C 00 00 02 */ cmpwi r0, 2 -/* 8030CF84 40 80 00 08 */ bge lbl_8030CF8C -/* 8030CF88 48 00 00 EC */ b lbl_8030D074 -lbl_8030CF8C: -/* 8030CF8C 38 C0 00 00 */ li r6, 0 -/* 8030CF90 3C 80 80 43 */ lis r4, p_name@ha /* 0x804349C0@ha */ -/* 8030CF94 38 A4 49 C0 */ addi r5, r4, p_name@l /* 0x804349C0@l */ -/* 8030CF98 48 00 00 18 */ b lbl_8030CFB0 -lbl_8030CF9C: -/* 8030CF9C 38 06 00 02 */ addi r0, r6, 2 -/* 8030CFA0 7C 03 00 AE */ lbzx r0, r3, r0 -/* 8030CFA4 98 05 00 00 */ stb r0, 0(r5) -/* 8030CFA8 38 C6 00 01 */ addi r6, r6, 1 -/* 8030CFAC 38 A5 00 01 */ addi r5, r5, 1 -lbl_8030CFB0: -/* 8030CFB0 88 03 00 01 */ lbz r0, 1(r3) -/* 8030CFB4 7C 04 07 74 */ extsb r4, r0 -/* 8030CFB8 7C 06 20 00 */ cmpw r6, r4 -/* 8030CFBC 41 80 FF E0 */ blt lbl_8030CF9C -/* 8030CFC0 38 00 00 00 */ li r0, 0 -/* 8030CFC4 3C 60 80 43 */ lis r3, p_name@ha /* 0x804349C0@ha */ -/* 8030CFC8 38 63 49 C0 */ addi r3, r3, p_name@l /* 0x804349C0@l */ -/* 8030CFCC 7C 03 21 AE */ stbx r0, r3, r4 -/* 8030CFD0 48 00 00 B0 */ b lbl_8030D080 -lbl_8030CFD4: -/* 8030CFD4 88 03 00 01 */ lbz r0, 1(r3) -/* 8030CFD8 7C 04 07 74 */ extsb r4, r0 -/* 8030CFDC 38 E4 00 01 */ addi r7, r4, 1 -/* 8030CFE0 7C 83 3A 14 */ add r4, r3, r7 -/* 8030CFE4 38 07 FF FF */ addi r0, r7, -1 -/* 8030CFE8 7C 09 03 A6 */ mtctr r0 -/* 8030CFEC 2C 07 00 02 */ cmpwi r7, 2 -/* 8030CFF0 41 80 00 28 */ blt lbl_8030D018 -lbl_8030CFF4: -/* 8030CFF4 88 04 00 00 */ lbz r0, 0(r4) -/* 8030CFF8 7C 00 07 74 */ extsb r0, r0 -/* 8030CFFC 2C 00 00 5C */ cmpwi r0, 0x5c -/* 8030D000 41 82 00 18 */ beq lbl_8030D018 -/* 8030D004 2C 00 00 2F */ cmpwi r0, 0x2f -/* 8030D008 41 82 00 10 */ beq lbl_8030D018 -/* 8030D00C 38 E7 FF FF */ addi r7, r7, -1 -/* 8030D010 38 84 FF FF */ addi r4, r4, -1 -/* 8030D014 42 00 FF E0 */ bdnz lbl_8030CFF4 -lbl_8030D018: -/* 8030D018 39 00 00 00 */ li r8, 0 -/* 8030D01C 3C 80 80 43 */ lis r4, p_name@ha /* 0x804349C0@ha */ -/* 8030D020 38 04 49 C0 */ addi r0, r4, p_name@l /* 0x804349C0@l */ -/* 8030D024 38 E7 00 01 */ addi r7, r7, 1 -/* 8030D028 7C A3 3A 14 */ add r5, r3, r7 -/* 8030D02C 7C 04 03 78 */ mr r4, r0 -/* 8030D030 48 00 00 1C */ b lbl_8030D04C -lbl_8030D034: -/* 8030D034 88 05 00 00 */ lbz r0, 0(r5) -/* 8030D038 98 04 00 00 */ stb r0, 0(r4) -/* 8030D03C 39 08 00 01 */ addi r8, r8, 1 -/* 8030D040 38 84 00 01 */ addi r4, r4, 1 -/* 8030D044 38 E7 00 01 */ addi r7, r7, 1 -/* 8030D048 38 A5 00 01 */ addi r5, r5, 1 -lbl_8030D04C: -/* 8030D04C 88 03 00 01 */ lbz r0, 1(r3) -/* 8030D050 7C 06 07 74 */ extsb r6, r0 -/* 8030D054 38 06 00 02 */ addi r0, r6, 2 -/* 8030D058 7C 07 00 00 */ cmpw r7, r0 -/* 8030D05C 41 80 FF D8 */ blt lbl_8030D034 -/* 8030D060 38 00 00 00 */ li r0, 0 -/* 8030D064 3C 60 80 43 */ lis r3, p_name@ha /* 0x804349C0@ha */ -/* 8030D068 38 63 49 C0 */ addi r3, r3, p_name@l /* 0x804349C0@l */ -/* 8030D06C 7C 03 41 AE */ stbx r0, r3, r8 -/* 8030D070 48 00 00 10 */ b lbl_8030D080 -lbl_8030D074: -/* 8030D074 38 00 00 00 */ li r0, 0 -/* 8030D078 3C 60 80 43 */ lis r3, p_name@ha /* 0x804349C0@ha */ -/* 8030D07C 98 03 49 C0 */ stb r0, p_name@l(r3) /* 0x804349C0@l */ -lbl_8030D080: -/* 8030D080 3C 60 80 43 */ lis r3, p_name@ha /* 0x804349C0@ha */ -/* 8030D084 38 63 49 C0 */ addi r3, r3, p_name@l /* 0x804349C0@l */ -lbl_8030D088: -/* 8030D088 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8030D08C 7C 08 03 A6 */ mtlr r0 -/* 8030D090 38 21 00 10 */ addi r1, r1, 0x10 -/* 8030D094 4E 80 00 20 */ blr diff --git a/asm/JSystem/J2DGraph/J2DManage/getResReference__15J2DResReferenceCFUs.s b/asm/JSystem/J2DGraph/J2DManage/getResReference__15J2DResReferenceCFUs.s deleted file mode 100644 index 201b1bce2dc..00000000000 --- a/asm/JSystem/J2DGraph/J2DManage/getResReference__15J2DResReferenceCFUs.s +++ /dev/null @@ -1,16 +0,0 @@ -lbl_8030CF10: -/* 8030CF10 A0 A3 00 00 */ lhz r5, 0(r3) -/* 8030CF14 54 80 04 3E */ clrlwi r0, r4, 0x10 -/* 8030CF18 7C 05 00 40 */ cmplw r5, r0 -/* 8030CF1C 40 81 00 0C */ ble lbl_8030CF28 -/* 8030CF20 28 00 FF FF */ cmplwi r0, 0xffff -/* 8030CF24 40 82 00 0C */ bne lbl_8030CF30 -lbl_8030CF28: -/* 8030CF28 38 60 00 00 */ li r3, 0 -/* 8030CF2C 4E 80 00 20 */ blr -lbl_8030CF30: -/* 8030CF30 54 80 0B FC */ rlwinm r0, r4, 1, 0xf, 0x1e -/* 8030CF34 7C 83 02 14 */ add r4, r3, r0 -/* 8030CF38 A0 04 00 02 */ lhz r0, 2(r4) -/* 8030CF3C 7C 63 02 14 */ add r3, r3, r0 -/* 8030CF40 4E 80 00 20 */ blr diff --git a/asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFP14JSUInputStream.s b/asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFP14JSUInputStream.s deleted file mode 100644 index d4d1f736b42..00000000000 --- a/asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFP14JSUInputStream.s +++ /dev/null @@ -1,40 +0,0 @@ -lbl_8030CE7C: -/* 8030CE7C 94 21 FE E0 */ stwu r1, -0x120(r1) -/* 8030CE80 7C 08 02 A6 */ mflr r0 -/* 8030CE84 90 01 01 24 */ stw r0, 0x124(r1) -/* 8030CE88 39 61 01 20 */ addi r11, r1, 0x120 -/* 8030CE8C 48 05 53 51 */ bl _savegpr_29 -/* 8030CE90 7C 7D 1B 78 */ mr r29, r3 -/* 8030CE94 7C 9E 23 78 */ mr r30, r4 -/* 8030CE98 7F C3 F3 78 */ mr r3, r30 -/* 8030CE9C 38 80 00 01 */ li r4, 1 -/* 8030CEA0 81 9E 00 00 */ lwz r12, 0(r30) -/* 8030CEA4 81 8C 00 10 */ lwz r12, 0x10(r12) -/* 8030CEA8 7D 89 03 A6 */ mtctr r12 -/* 8030CEAC 4E 80 04 21 */ bctrl -/* 8030CEB0 7F C3 F3 78 */ mr r3, r30 -/* 8030CEB4 38 81 00 08 */ addi r4, r1, 8 -/* 8030CEB8 38 A0 00 01 */ li r5, 1 -/* 8030CEBC 4B FC F3 DD */ bl read__14JSUInputStreamFPvl -/* 8030CEC0 8B E1 00 08 */ lbz r31, 8(r1) -/* 8030CEC4 28 1F 00 00 */ cmplwi r31, 0 -/* 8030CEC8 40 82 00 0C */ bne lbl_8030CED4 -/* 8030CECC 38 60 00 00 */ li r3, 0 -/* 8030CED0 48 00 00 28 */ b lbl_8030CEF8 -lbl_8030CED4: -/* 8030CED4 7F C3 F3 78 */ mr r3, r30 -/* 8030CED8 38 81 00 0C */ addi r4, r1, 0xc -/* 8030CEDC 7F E5 FB 78 */ mr r5, r31 -/* 8030CEE0 4B FC F3 B9 */ bl read__14JSUInputStreamFPvl -/* 8030CEE4 38 00 00 00 */ li r0, 0 -/* 8030CEE8 38 81 00 0C */ addi r4, r1, 0xc -/* 8030CEEC 7C 04 F9 AE */ stbx r0, r4, r31 -/* 8030CEF0 7F A3 EB 78 */ mr r3, r29 -/* 8030CEF4 4B FF FF 25 */ bl get__13J2DDataManageFPCc -lbl_8030CEF8: -/* 8030CEF8 39 61 01 20 */ addi r11, r1, 0x120 -/* 8030CEFC 48 05 53 2D */ bl _restgpr_29 -/* 8030CF00 80 01 01 24 */ lwz r0, 0x124(r1) -/* 8030CF04 7C 08 03 A6 */ mtlr r0 -/* 8030CF08 38 21 01 20 */ addi r1, r1, 0x120 -/* 8030CF0C 4E 80 00 20 */ blr diff --git a/asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFPCc.s b/asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFPCc.s deleted file mode 100644 index 16f26a7db5f..00000000000 --- a/asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFPCc.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_8030CE18: -/* 8030CE18 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8030CE1C 7C 08 02 A6 */ mflr r0 -/* 8030CE20 90 01 00 14 */ stw r0, 0x14(r1) -/* 8030CE24 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8030CE28 93 C1 00 08 */ stw r30, 8(r1) -/* 8030CE2C 7C 9E 23 78 */ mr r30, r4 -/* 8030CE30 83 E3 00 00 */ lwz r31, 0(r3) -/* 8030CE34 48 00 00 24 */ b lbl_8030CE58 -lbl_8030CE38: -/* 8030CE38 80 7F 00 04 */ lwz r3, 4(r31) -/* 8030CE3C 7F C4 F3 78 */ mr r4, r30 -/* 8030CE40 48 05 BB 55 */ bl strcmp -/* 8030CE44 2C 03 00 00 */ cmpwi r3, 0 -/* 8030CE48 40 82 00 0C */ bne lbl_8030CE54 -/* 8030CE4C 80 7F 00 00 */ lwz r3, 0(r31) -/* 8030CE50 48 00 00 14 */ b lbl_8030CE64 -lbl_8030CE54: -/* 8030CE54 83 FF 00 08 */ lwz r31, 8(r31) -lbl_8030CE58: -/* 8030CE58 28 1F 00 00 */ cmplwi r31, 0 -/* 8030CE5C 40 82 FF DC */ bne lbl_8030CE38 -/* 8030CE60 38 60 00 00 */ li r3, 0 -lbl_8030CE64: -/* 8030CE64 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8030CE68 83 C1 00 08 */ lwz r30, 8(r1) -/* 8030CE6C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8030CE70 7C 08 03 A6 */ mtlr r0 -/* 8030CE74 38 21 00 10 */ addi r1, r1, 0x10 -/* 8030CE78 4E 80 00 20 */ blr diff --git a/include/JSystem/J2DGraph/J2DManage.h b/include/JSystem/J2DGraph/J2DManage.h index 769b9cc0e1b..96a9e5ebc03 100644 --- a/include/JSystem/J2DGraph/J2DManage.h +++ b/include/JSystem/J2DGraph/J2DManage.h @@ -5,11 +5,23 @@ #include "dolphin/types.h" struct J2DResReference { - /* 8030CF10 */ void getResReference(u16) const; - /* 8030CF44 */ void getName(u16) const; + /* 0x00 */ u16 mCount; + /* 0x02 */ u16 mOffsets[1]; + + /* 8030CF10 */ s8* getResReference(u16) const; + /* 8030CF44 */ char* getName(u16) const; +}; + +struct J2DataManageLink { + /* 0x00 */ void* mData; + /* 0x04 */ char* mName; + /* 0x08 */ J2DataManageLink* mNext; }; class J2DDataManage { +private: + /* 0x00 */ J2DataManageLink* mList; + public: /* 8030CE18 */ void* get(char const*); /* 8030CE7C */ void* get(JSUInputStream*); diff --git a/libs/JSystem/J2DGraph/J2DManage.cpp b/libs/JSystem/J2DGraph/J2DManage.cpp index 039bc10e3eb..acedc704a86 100644 --- a/libs/JSystem/J2DGraph/J2DManage.cpp +++ b/libs/JSystem/J2DGraph/J2DManage.cpp @@ -4,71 +4,85 @@ // #include "JSystem/J2DGraph/J2DManage.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/string.h" #include "dol2asm.h" #include "dolphin/types.h" -// -// Forward References: -// - -extern "C" void get__13J2DDataManageFPCc(); -extern "C" void get__13J2DDataManageFP14JSUInputStream(); -extern "C" void getResReference__15J2DResReferenceCFUs(); -extern "C" void getName__15J2DResReferenceCFUs(); - -// -// External References: -// - -extern "C" void read__14JSUInputStreamFPvl(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" void strcmp(); - // // Declarations: // /* 8030CE18-8030CE7C 307758 0064+00 1/1 3/3 0/0 .text get__13J2DDataManageFPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* J2DDataManage::get(char const* param_0) { - nofralloc -#include "asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFPCc.s" +void* J2DDataManage::get(char const* name) { + for (J2DataManageLink* link = mList; link != NULL; link = link->mNext) { + if (strcmp(link->mName, name) == 0) { + return link->mData; + } + } + return NULL; } -#pragma pop /* 8030CE7C-8030CF10 3077BC 0094+00 0/0 1/1 0/0 .text get__13J2DDataManageFP14JSUInputStream */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* J2DDataManage::get(JSUInputStream* param_0) { - nofralloc -#include "asm/JSystem/J2DGraph/J2DManage/get__13J2DDataManageFP14JSUInputStream.s" +void* J2DDataManage::get(JSUInputStream* inputStream) { + inputStream->skip(1); + u8 nameLen = inputStream->readU8(); + if (nameLen == 0) { + return NULL; + } else { + char nameBuffer[257]; + inputStream->read(&nameBuffer, nameLen); + nameBuffer[nameLen] = 0; + return this->get(nameBuffer); + } } -#pragma pop /* 8030CF10-8030CF44 307850 0034+00 1/1 2/2 0/0 .text getResReference__15J2DResReferenceCFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J2DResReference::getResReference(u16 param_0) const { - nofralloc -#include "asm/JSystem/J2DGraph/J2DManage/getResReference__15J2DResReferenceCFUs.s" +s8* J2DResReference::getResReference(u16 idx) const { + if (mCount <= idx || idx == 0xFFFF) { + return NULL; + } else { + return (((s8*)this) + mOffsets[idx]); + } } -#pragma pop /* ############################################################################################## */ /* 804349C0-80434AC8 0616E0 0101+07 1/1 0/0 0/0 .bss p_name$494 */ -static u8 p_name[257 + 7 /* padding */]; +static char p_name[257]; /* 8030CF44-8030D098 307884 0154+00 0/0 2/2 0/0 .text getName__15J2DResReferenceCFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J2DResReference::getName(u16 param_0) const { - nofralloc -#include "asm/JSystem/J2DGraph/J2DManage/getName__15J2DResReferenceCFUs.s" +char* J2DResReference::getName(u16 idx) const { + s8* resRef = this->getResReference(idx); + if (resRef == NULL) { + p_name[0] = 0; + return p_name; + } else { + s8 first = resRef[0]; + switch (first) { + case 2: + case 3: + for (s32 i = 0; i < resRef[1]; i++) { + p_name[i] = resRef[2 + i]; + } + p_name[resRef[1]] = 0; + break; + case 4: + s32 pos = resRef[1] + 1; + for (; pos >= 2; pos--) { + if (resRef[pos] == '\\' || resRef[pos] == '/') { + break; + } + } + s32 i = 0; + pos++; + for (; pos < resRef[1] + 2; i++, pos++) { + p_name[i] = resRef[pos]; + } + p_name[i] = 0; + + break; + default: + p_name[0] = 0; + } + return p_name; + } } -#pragma pop