From 8244d9a6e1aed5fb3cd96a1cbbd0f72401f2baa7 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 16:16:36 -0700 Subject: [PATCH] d_ky_thunder first pass (#223) * dThunder_c::adjustHeap and dThunder_c::createHeap * remove asm --- .../d_ky_thunder/adjustHeap__10dThunder_cFv.s | 21 ---- .../d_ky_thunder/createHeap__10dThunder_cFv.s | 26 ---- include/d/d_ky_thunder.h | 32 +++++ src/d/d_ky_thunder.cpp | 117 ++++++++---------- 4 files changed, 85 insertions(+), 111 deletions(-) delete mode 100644 asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s delete mode 100644 asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s diff --git a/asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s b/asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s deleted file mode 100644 index 7d587e2af7d..00000000000 --- a/asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_801ADFB4: -/* 801ADFB4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801ADFB8 7C 08 02 A6 */ mflr r0 -/* 801ADFBC 90 01 00 14 */ stw r0, 0x14(r1) -/* 801ADFC0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801ADFC4 7C 7F 1B 78 */ mr r31, r3 -/* 801ADFC8 4B E6 12 2D */ bl mDoExt_restoreCurrentHeap__Fv -/* 801ADFCC 80 7F 00 F8 */ lwz r3, 0xf8(r31) -/* 801ADFD0 4B E6 10 BD */ bl mDoExt_adjustSolidHeap__FP12JKRSolidHeap -/* 801ADFD4 2C 03 00 00 */ cmpwi r3, 0 -/* 801ADFD8 41 80 00 14 */ blt lbl_801ADFEC -/* 801ADFDC 80 7F 00 F8 */ lwz r3, 0xf8(r31) -/* 801ADFE0 80 83 00 38 */ lwz r4, 0x38(r3) -/* 801ADFE4 80 63 00 30 */ lwz r3, 0x30(r3) -/* 801ADFE8 48 18 D6 51 */ bl DCStoreRangeNoSync -lbl_801ADFEC: -/* 801ADFEC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801ADFF0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801ADFF4 7C 08 03 A6 */ mtlr r0 -/* 801ADFF8 38 21 00 10 */ addi r1, r1, 0x10 -/* 801ADFFC 4E 80 00 20 */ blr diff --git a/asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s b/asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s deleted file mode 100644 index 887cb6968f7..00000000000 --- a/asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s +++ /dev/null @@ -1,26 +0,0 @@ -lbl_801ADF58: -/* 801ADF58 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801ADF5C 7C 08 02 A6 */ mflr r0 -/* 801ADF60 90 01 00 14 */ stw r0, 0x14(r1) -/* 801ADF64 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801ADF68 7C 7F 1B 78 */ mr r31, r3 -/* 801ADF6C 80 03 00 F8 */ lwz r0, 0xf8(r3) -/* 801ADF70 28 00 00 00 */ cmplwi r0, 0 -/* 801ADF74 40 82 00 28 */ bne lbl_801ADF9C -/* 801ADF78 38 60 00 00 */ li r3, 0 -/* 801ADF7C 38 80 00 20 */ li r4, 0x20 -/* 801ADF80 4B E6 10 C5 */ bl mDoExt_createSolidHeapFromGameToCurrent__FUlUl -/* 801ADF84 90 7F 00 F8 */ stw r3, 0xf8(r31) -/* 801ADF88 80 1F 00 F8 */ lwz r0, 0xf8(r31) -/* 801ADF8C 28 00 00 00 */ cmplwi r0, 0 -/* 801ADF90 40 82 00 0C */ bne lbl_801ADF9C -/* 801ADF94 38 60 00 00 */ li r3, 0 -/* 801ADF98 48 00 00 08 */ b lbl_801ADFA0 -lbl_801ADF9C: -/* 801ADF9C 38 60 00 01 */ li r3, 1 -lbl_801ADFA0: -/* 801ADFA0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801ADFA4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801ADFA8 7C 08 03 A6 */ mtlr r0 -/* 801ADFAC 38 21 00 10 */ addi r1, r1, 0x10 -/* 801ADFB0 4E 80 00 20 */ blr diff --git a/include/d/d_ky_thunder.h b/include/d/d_ky_thunder.h index 644c2cdecd7..fd2049b86c1 100644 --- a/include/d/d_ky_thunder.h +++ b/include/d/d_ky_thunder.h @@ -2,5 +2,37 @@ #define D_D_KY_THUNDER_H #include "dolphin/types.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "m_Do/m_Do_ext.h" + +class dThunder_c { +private: + /* 0x00 */ u8 field_0x00[0xf8]; + /* 0xF8 */ JKRSolidHeap* mpHeap; +public: + /* 801ADF58 */ int createHeap(); + /* 801ADFB4 */ void adjustHeap(); + /* 801AE458 */ int create(); + + ~dThunder_c() { + mDoExt_destroySolidHeap(mpHeap); + } + +}; + +inline int draw() { + // finish +}; + +inline int execute() { + // finish +}; + +inline int thunder_delete(dThunder_c* i_dthunderP) { + if (i_dthunderP) { + delete i_dthunderP; + } + return 1; +} #endif /* D_D_KY_THUNDER_H */ diff --git a/src/d/d_ky_thunder.cpp b/src/d/d_ky_thunder.cpp index 2bfaf8446ed..546a81f8fc1 100644 --- a/src/d/d_ky_thunder.cpp +++ b/src/d/d_ky_thunder.cpp @@ -15,28 +15,9 @@ struct mDoMtx_stack_c { static u8 now[48]; }; -struct J3DAnmTevRegKey {}; - -struct J3DMaterialTable { - /* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*); -}; - -struct mDoExt_brkAnm { - /* 8000D70C */ void init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, f32, s16, s16); - /* 8000D7A8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - struct kankyo_class {}; -struct dThunder_c { - /* 801ADF58 */ void createHeap(); - /* 801ADFB4 */ void adjustHeap(); - /* 801AE458 */ void create(); -}; + struct dRes_info_c {}; @@ -44,30 +25,6 @@ struct dRes_control_c { /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); }; -struct cXyz { - /* 80009184 */ ~cXyz(); -}; - -struct Vec {}; - -struct Z2EnvSeMgr { - /* 802C7E68 */ void startFarThunderSe(Vec*, s8); -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct JKRSolidHeap {}; - -struct J3DModelData {}; - -struct J3DModel {}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); -}; - // // Forward References: // @@ -111,9 +68,6 @@ extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); extern "C" void startFarThunderSe__10Z2EnvSeMgrFP3VecSc(); extern "C" void init__12J3DFrameCtrlFs(); extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); -extern "C" void DCStoreRangeNoSync(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); extern "C" void __register_global_object(); extern "C" void _savegpr_27(); extern "C" void _restgpr_27(); @@ -124,9 +78,7 @@ extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" u8 now__14mDoMtx_stack_c[48]; extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 g_mEnvSeMgr[780]; extern "C" extern u8 g_Counter[12 + 4 /* padding */]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; extern "C" extern u8 struct_80451070[8]; @@ -136,24 +88,23 @@ extern "C" extern u8 struct_80451070[8]; // /* 801ADF58-801ADFB4 1A8898 005C+00 1/1 0/0 0/0 .text createHeap__10dThunder_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dThunder_c::createHeap() { - nofralloc -#include "asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s" +int dThunder_c::createHeap() { + if (!mpHeap) { + mpHeap = mDoExt_createSolidHeapFromGameToCurrent(0,0x20); + if (!mpHeap) { + return 0; + } + } + return 1; } -#pragma pop /* 801ADFB4-801AE000 1A88F4 004C+00 1/1 0/0 0/0 .text adjustHeap__10dThunder_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dThunder_c::adjustHeap() { - nofralloc -#include "asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s" +void dThunder_c::adjustHeap() { + mDoExt_restoreCurrentHeap(); + if ((s32)mDoExt_adjustSolidHeap(mpHeap) >= 0) { + DCStoreRangeNoSync(mpHeap->getStartAddr(),mpHeap->getHeapSize()); + } } -#pragma pop /* ############################################################################################## */ /* 8042E7F0-8042E7FC 05B510 000C+00 1/1 0/0 0/0 .bss @3816 */ @@ -187,6 +138,12 @@ SECTION_SDATA2 static f32 lit_3884 = -250.0f; SECTION_SDATA2 static f32 lit_3885 = 1.0f; /* 801AE000-801AE19C 1A8940 019C+00 1/0 0/0 0/0 .text dThunder_Draw__FP10dThunder_c */ +#ifdef NONMATCHING +// needs to have inline defined +void dThunder_Draw(dThunder_c* i_dthunderP) { + i_dthunderP->draw(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -195,6 +152,7 @@ static asm void dThunder_Draw(dThunder_c* param_0) { #include "asm/d/d_ky_thunder/dThunder_Draw__FP10dThunder_c.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80453E80-80453E84 002480 0004+00 2/2 0/0 0/0 .sdata2 @3923 */ @@ -219,6 +177,12 @@ SECTION_SDATA2 static f32 lit_3928 = 1.0f / 100.0f; SECTION_SDATA2 static f32 lit_3929 = 1.0f / 50.0f; /* 801AE19C-801AE374 1A8ADC 01D8+00 1/0 0/0 0/0 .text dThunder_Execute__FP10dThunder_c */ +#ifdef NONMATCHING +// needs to have inline defined +void dThunder_Execute(dThunder_c* i_dthunderP) { + i_dthunderP->execute(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -227,6 +191,7 @@ static asm void dThunder_Execute(dThunder_c* param_0) { #include "asm/d/d_ky_thunder/dThunder_Execute__FP10dThunder_c.s" } #pragma pop +#endif /* 801AE374-801AE37C 1A8CB4 0008+00 1/0 0/0 0/0 .text dThunder_IsDelete__FP10dThunder_c */ @@ -235,6 +200,12 @@ static bool dThunder_IsDelete(dThunder_c* param_0) { } /* 801AE37C-801AE3FC 1A8CBC 0080+00 1/0 0/0 0/0 .text dThunder_Delete__FP10dThunder_c */ +#ifdef NONMATCHING +// needs to have destructor defined +void dThunder_Delete(dThunder_c* i_dthunderP) { + thunder_delete(i_dthunderP); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -243,9 +214,26 @@ static asm void dThunder_Delete(dThunder_c* param_0) { #include "asm/d/d_ky_thunder/dThunder_Delete__FP10dThunder_c.s" } #pragma pop +#endif /* 801AE3FC-801AE458 1A8D3C 005C+00 1/0 0/0 0/0 .text dThunder_Create__FP12kankyo_class */ +#ifdef NONMATCHING +// regalloc +static int dThunder_Create(kankyo_class* param_0) { + dThunder_c* thunder_ptr = (dThunder_c*)param_0; + int ret = thunder_ptr->createHeap(); + + if (ret == 0) { + return 5; + } else { + ret = thunder_ptr->create(); + thunder_ptr->adjustHeap(); + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -254,6 +242,7 @@ static asm void dThunder_Create(kankyo_class* param_0) { #include "asm/d/d_ky_thunder/dThunder_Create__FP12kankyo_class.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80394F40-80394F40 0215A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -336,7 +325,7 @@ SECTION_SDATA2 static f32 lit_4099 = 3.0f / 10.0f; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dThunder_c::create() { +asm int dThunder_c::create() { nofralloc #include "asm/d/d_ky_thunder/create__10dThunder_cFv.s" }