diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2024-01-11 01:16:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-11 01:16:40 +0200 |
| commit | f342bd71716619832c47eea7e90f57d106cd6b63 (patch) | |
| tree | 01deaad96b0460180739743609186efd1c6f5589 /libs/JSystem | |
| parent | 99f0efe97501b8dc17343fdf9ff1e46f835a766d (diff) | |
Import JASCmdStack, std-vector work, Z2StatusMgr OK (#2029)
* Import JASCmdStack
* Work on std-vector
* Z2StatusMgr OK
Diffstat (limited to 'libs/JSystem')
| -rw-r--r-- | libs/JSystem/JAudio2/JASCmdStack.cpp | 137 | ||||
| -rw-r--r-- | libs/JSystem/JGadget/std-vector.cpp | 219 |
2 files changed, 202 insertions, 154 deletions
diff --git a/libs/JSystem/JAudio2/JASCmdStack.cpp b/libs/JSystem/JAudio2/JASCmdStack.cpp index 15c0383508..52669b0c31 100644 --- a/libs/JSystem/JAudio2/JASCmdStack.cpp +++ b/libs/JSystem/JAudio2/JASCmdStack.cpp @@ -1,135 +1,42 @@ // -// Generated By: dol2asm -// Translation Unit: JASCmdStack +// JASCmdStack // #include "JSystem/JAudio2/JASCmdStack.h" -#include "dol2asm.h" - -// -// Types: -// - -struct JSUPtrLink {}; - -struct JSUPtrList { - /* 802DBEAC */ ~JSUPtrList(); - /* 802DBF14 */ void initiate(); - /* 802DC15C */ void remove(JSUPtrLink*); -}; - -struct JASPortCmd { - struct TPortHead { - /* 80291094 */ void execCommandOnce(); - /* 8029110C */ void execCommandStay(); - /* 802911D0 */ ~TPortHead(); - }; - - /* 80291060 */ void execAllCommand(); - - static u8 sCommandListOnce[12]; - static u8 sCommandListStay[12]; -}; - -// -// Forward References: -// - -extern "C" void execAllCommand__10JASPortCmdFv(); -extern "C" void execCommandOnce__Q210JASPortCmd9TPortHeadFv(); -extern "C" void execCommandStay__Q210JASPortCmd9TPortHeadFv(); -extern "C" void __sinit_JASCmdStack_cpp(); -extern "C" void __dt__Q210JASPortCmd9TPortHeadFv(); -extern "C" u8 sCommandListOnce__10JASPortCmd[12]; -extern "C" u8 sCommandListStay__10JASPortCmd[12]; - -// -// External References: -// - -extern "C" void __dl__FPv(); -extern "C" void __dt__10JSUPtrListFv(); -extern "C" void initiate__10JSUPtrListFv(); -extern "C" void remove__10JSUPtrListFP10JSUPtrLink(); -extern "C" void OSDisableInterrupts(); -extern "C" void OSRestoreInterrupts(); -extern "C" void __register_global_object(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80431678-80431684 05E398 000C+00 1/1 0/0 0/0 .bss @80 */ -static u8 lit_80[12]; +#include "dolphin/os/OS.h" /* 80431684-80431690 05E3A4 000C+00 1/2 0/0 0/0 .bss sCommandListOnce__10JASPortCmd */ -u8 JASPortCmd::sCommandListOnce[12]; - -/* 80431690-8043169C 05E3B0 000C+00 0/1 0/0 0/0 .bss @82 */ -#pragma push -#pragma force_active on -static u8 lit_82[12]; -#pragma pop +JASPortCmd::TPortHead JASPortCmd::sCommandListOnce; /* 8043169C-804316A8 05E3BC 000C+00 1/2 0/0 0/0 .bss sCommandListStay__10JASPortCmd */ -u8 JASPortCmd::sCommandListStay[12]; +JASPortCmd::TPortHead JASPortCmd::sCommandListStay; /* 80291060-80291094 28B9A0 0034+00 0/0 1/1 0/0 .text execAllCommand__10JASPortCmdFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASPortCmd::execAllCommand() { - nofralloc -#include "asm/JSystem/JAudio2/JASCmdStack/execAllCommand__10JASPortCmdFv.s" +void JASPortCmd::execAllCommand() { + sCommandListOnce.execCommandOnce(); + sCommandListStay.execCommandStay(); } -#pragma pop /* 80291094-8029110C 28B9D4 0078+00 1/1 0/0 0/0 .text execCommandOnce__Q210JASPortCmd9TPortHeadFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASPortCmd::TPortHead::execCommandOnce() { - nofralloc -#include "asm/JSystem/JAudio2/JASCmdStack/execCommandOnce__Q210JASPortCmd9TPortHeadFv.s" +void JASPortCmd::TPortHead::execCommandOnce() { + volatile BOOL interrupts = OSDisableInterrupts(); + JSULink<JASPortCmd>* next; + for (JSULink<JASPortCmd>* link = getFirst(); link != NULL; link = next) { + next = link->getNext(); + link->getObject()->_10(link->getObject()->_14); + remove(link); + } + OSRestoreInterrupts(interrupts); } -#pragma pop /* 8029110C-8029116C 28BA4C 0060+00 1/1 0/0 0/0 .text execCommandStay__Q210JASPortCmd9TPortHeadFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASPortCmd::TPortHead::execCommandStay() { - nofralloc -#include "asm/JSystem/JAudio2/JASCmdStack/execCommandStay__Q210JASPortCmd9TPortHeadFv.s" -} -#pragma pop - -/* 8029116C-802911D0 28BAAC 0064+00 0/0 1/0 0/0 .text __sinit_JASCmdStack_cpp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __sinit_JASCmdStack_cpp() { - nofralloc -#include "asm/JSystem/JAudio2/JASCmdStack/__sinit_JASCmdStack_cpp.s" +void JASPortCmd::TPortHead::execCommandStay() { + volatile int interrupts = OSDisableInterrupts(); + for (JSULink<JASPortCmd>* link = getFirst(); link != NULL; link = link->getNext()) { + link->getObject()->_10(link->getObject()->_14); + } + OSRestoreInterrupts(interrupts); } -#pragma pop - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x8029116C, __sinit_JASCmdStack_cpp); -#pragma pop -/* 802911D0-80291228 28BB10 0058+00 1/1 0/0 0/0 .text __dt__Q210JASPortCmd9TPortHeadFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASPortCmd::TPortHead::~TPortHead() { - nofralloc -#include "asm/JSystem/JAudio2/JASCmdStack/__dt__Q210JASPortCmd9TPortHeadFv.s" -} -#pragma pop diff --git a/libs/JSystem/JGadget/std-vector.cpp b/libs/JSystem/JGadget/std-vector.cpp index ccca33afe2..9f88dfb221 100644 --- a/libs/JSystem/JGadget/std-vector.cpp +++ b/libs/JSystem/JGadget/std-vector.cpp @@ -5,6 +5,8 @@ #include "JSystem/JGadget/std-vector.h" #include "dolphin/types.h" +#include "algorithm.h" +#include "msl_memory.h" // // Types: @@ -12,23 +14,170 @@ namespace JGadget { struct vector { - /* 802DCCC8 */ void extend_default(u32, u32, u32); + /* 802DCCC8 */ static u32 extend_default(u32, u32, u32); }; -template <typename A1> -struct TAllocator {}; +template <typename T> +struct TAllocator { + void destroy(T* item) {} + void deallocate(T* mem, u32 size) { + DeallocateRaw(mem); + } + void DeallocateRaw(T* mem) { + delete mem; + } + T* allocate(u32 count, void *param_2) { + return AllocateRaw(count * sizeof(T)); + } + T* AllocateRaw(u32 size) { + return (T*)new char[size]; + } + + u8 field_0x0; +}; /* TAllocator<void*> */ struct TAllocator__template0 {}; -struct TVector_pointer_void { - /* 802DCCD0 */ TVector_pointer_void(JGadget::TAllocator<void*> const&); - /* 802DCCFC */ ~TVector_pointer_void(); - /* 802DCDA4 */ void insert(void**, void* const&); - /* 802DCDC4 */ void erase(void**, void**); -}; +typedef u32 (*extendFunc)(u32, u32, u32); + +template <typename T, typename Allocator = JGadget::TAllocator<T> > +struct TVector { + struct TDestructed_deallocate_ { + TDestructed_deallocate_(Allocator* allocator, T* addr) { + mAllocator = allocator; + mAddr = addr; + } + void set(T* addr) { + mAddr = addr; + } + inline ~TDestructed_deallocate_() { + mAllocator->deallocate(mAddr, 0); + } + Allocator* mAllocator; + T* mAddr; + }; + + TVector(Allocator const& param_0) { + field_0x0 = param_0; + pBegin_ = NULL; + pEnd_ = pBegin_; + mCapacity = 0; + pfnExtend_ = JGadget::vector::extend_default; + } + + ~TVector() { + clear(); + field_0x0.deallocate(pBegin_, 0); + } + + T* insert(T* pos, const T& val) { + u32 diff = (u32)pos - (u32)begin(); + insert(pos, 1, val); + return pBegin_ + diff; + } + + void insert(T* pos, u32 count, const T& val) { + if (count != 0) { + T* this_00 = Insert_raw(pos, count); + if (this_00 != end()) { + std::uninitialized_fill_n(this_00, count, val); + } + } + } + + T* Insert_raw(T* pos, u32 count) { + if (count == 0) { + return pos; + } + if (mCapacity < count + size()) { + u32 uVar4 = GetSize_extend_(count); + T* ppvVar5 = field_0x0.allocate(uVar4, NULL); + if (ppvVar5 == NULL) { + pos = end(); + } else { + TDestructed_deallocate_ aTStack_30(&field_0x0, ppvVar5); + T* ppvVar6 = std::uninitialized_copy(pBegin_, pos, ppvVar5); + std::uninitialized_copy(pos, pEnd_, ppvVar6 + count); + DestroyElement_all_(); + aTStack_30.set(pBegin_); + u32 uVar2 = (u32)pEnd_ - (u32)pBegin_; + pEnd_ = ppvVar5 + count + (uVar2 / 4); + pBegin_ = ppvVar5; + mCapacity = uVar4; + pos = ppvVar6; + } + } else { + T* ppvVar5 = pos + count; + if (ppvVar5 < pEnd_) { + T* ppvVar6 = pEnd_ - count; + std::uninitialized_copy(ppvVar6, pEnd_, pEnd_); + std::copy_backward(pos, ppvVar6, pEnd_); + DestroyElement_(pos, ppvVar5); + pEnd_ += count; + } else { + std::uninitialized_copy(pos, pEnd_, ppvVar5); + DestroyElement_(pos, pEnd_); + pEnd_ += count; + } + } + return pos; + } -template <typename A1, typename B1> -struct TVector {}; + T* begin() { + return pBegin_; + } + + T* end() { + return pEnd_; + } + + u32 size() { + if (pBegin_ == 0) { + return 0; + } + return ((u32)pEnd_ - (u32)pBegin_) / 4; + } + + u32 capacity() { return mCapacity; } + + u32 GetSize_extend_(u32 count) { + u32 iVar2 = size(); + u32 uVar3 = capacity(); + u32 uVar4 = pfnExtend_(uVar3, iVar2, count); + if (uVar4 < iVar2 + count) { + uVar4 = iVar2 + count; + } + return uVar4; + } + + void DestroyElement_(T* start, T* end) { + for (; start != end; start++) { + field_0x0.destroy(start); + } + } + + void DestroyElement_all_() { + DestroyElement_(pBegin_, pEnd_); + } + + T* erase(T* start, T* end) { + T* vectorEnd = pEnd_; + T* ppvVar3 = std::copy(end, vectorEnd, start); + DestroyElement_(ppvVar3, pEnd_); + pEnd_ = ppvVar3; + return start; + } + + void clear() { + erase(begin(), end()); + } + + Allocator field_0x0; + T* pBegin_; + T* pEnd_; + u32 mCapacity; + extendFunc pfnExtend_; +}; /* TVector<void*, JGadget::TAllocator<void*>> */ struct TVector__template0 { /* 802DD130 */ void func_802DD130(void* _this, void**, void* const&); @@ -36,6 +185,13 @@ struct TVector__template0 { /* 802DCE8C */ void func_802DCE8C(void* _this, void**, u32); }; +struct TVector_pointer_void : public TVector<void*> { + /* 802DCCD0 */ TVector_pointer_void(JGadget::TAllocator<void*> const&); + /* 802DCCFC */ ~TVector_pointer_void(); + /* 802DCDA4 */ void insert(void**, void* const&); + /* 802DCDC4 */ void** erase(void**, void**); +}; + }; // namespace JGadget // @@ -67,38 +223,27 @@ extern "C" void _restgpr_29(); // /* 802DCCC8-802DCCD0 2D7608 0008+00 1/1 0/0 0/0 .text extend_default__Q27JGadget6vectorFUlUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JGadget::vector::extend_default(u32 param_0, u32 param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JGadget/std-vector/extend_default__Q27JGadget6vectorFUlUlUl.s" +u32 JGadget::vector::extend_default(u32 param_0, u32 param_1, u32 param_2) { + return param_1 << 1; } -#pragma pop /* 802DCCD0-802DCCFC 2D7610 002C+00 0/0 1/1 0/0 .text * __ct__Q27JGadget20TVector_pointer_voidFRCQ27JGadget14TAllocator<Pv> */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JGadget::TVector_pointer_void::TVector_pointer_void(JGadget::TAllocator<void*> const& param_0) { - nofralloc -#include "asm/JSystem/JGadget/std-vector/func_802DCCD0.s" +JGadget::TVector_pointer_void::TVector_pointer_void(JGadget::TAllocator<void*> const& param_0) : TVector<void*>(param_0) { } -#pragma pop /* 802DCCFC-802DCDA4 2D763C 00A8+00 0/0 2/2 0/0 .text __dt__Q27JGadget20TVector_pointer_voidFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JGadget::TVector_pointer_void::~TVector_pointer_void() { - nofralloc -#include "asm/JSystem/JGadget/std-vector/__dt__Q27JGadget20TVector_pointer_voidFv.s" +JGadget::TVector_pointer_void::~TVector_pointer_void() { } -#pragma pop /* 802DCDA4-802DCDC4 2D76E4 0020+00 0/0 1/1 0/0 .text * insert__Q27JGadget20TVector_pointer_voidFPPvRCPv */ +// the entire function chain needs work +#ifdef NONMATCHING +void JGadget::TVector_pointer_void::insert(void** param_0, void* const& param_1) { + TVector<void*>::insert(param_0, param_1); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -107,17 +252,13 @@ asm void JGadget::TVector_pointer_void::insert(void** param_0, void* const& para #include "asm/JSystem/JGadget/std-vector/insert__Q27JGadget20TVector_pointer_voidFPPvRCPv.s" } #pragma pop +#endif /* 802DCDC4-802DCE1C 2D7704 0058+00 0/0 1/1 0/0 .text * erase__Q27JGadget20TVector_pointer_voidFPPvPPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JGadget::TVector_pointer_void::erase(void** param_0, void** param_1) { - nofralloc -#include "asm/JSystem/JGadget/std-vector/erase__Q27JGadget20TVector_pointer_voidFPPvPPv.s" +void** JGadget::TVector_pointer_void::erase(void** param_0, void** param_1) { + return TVector<void*>::erase(param_0, param_1); } -#pragma pop /* 802DCE1C-802DCE8C 2D775C 0070+00 1/1 0/0 0/0 .text * insert__Q27JGadget38TVector<Pv,Q27JGadget14TAllocator<Pv>>FPPvUlRCPv */ |
