diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2022-01-10 06:10:00 -0800 |
|---|---|---|
| committer | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2022-01-10 06:10:00 -0800 |
| commit | a08f84abd508ddf6cbdddcd994a300a16be0e46f (patch) | |
| tree | 12d8f1fa732b7c7910088442ff91e3250faaaa52 /libs | |
| parent | 32fc4e2944b053485b03845d387bd28ffe267cbb (diff) | |
JUTGraphFifo
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/JSystem/JFramework/JFWSystem.cpp | 11 | ||||
| -rw-r--r-- | libs/JSystem/JUtility/JUTGraphFifo.cpp | 99 |
2 files changed, 29 insertions, 81 deletions
diff --git a/libs/JSystem/JFramework/JFWSystem.cpp b/libs/JSystem/JFramework/JFWSystem.cpp index 4405ffbf36..329a6f2356 100644 --- a/libs/JSystem/JFramework/JFWSystem.cpp +++ b/libs/JSystem/JFramework/JFWSystem.cpp @@ -9,21 +9,12 @@ #include "JSystem/JUtility/JUTDirectPrint.h" #include "JSystem/JUtility/JUTException.h" #include "JSystem/JUtility/JUTGamePad.h" +#include "JSystem/JUtility/JUTGraphFifo.h" #include "JSystem/JUtility/JUTVideo.h" #include "dol2asm.h" #include "dolphin/types.h" // -// Types: -// - -struct JUTGraphFifo { - /* 802DEB58 */ JUTGraphFifo(u32); - - u8 field_0x0[0x1C]; -}; - -// // Forward References: // diff --git a/libs/JSystem/JUtility/JUTGraphFifo.cpp b/libs/JSystem/JUtility/JUTGraphFifo.cpp index b32ebf1ddb..782708926b 100644 --- a/libs/JSystem/JUtility/JUTGraphFifo.cpp +++ b/libs/JSystem/JUtility/JUTGraphFifo.cpp @@ -4,93 +4,50 @@ // #include "JSystem/JUtility/JUTGraphFifo.h" +#include "JSystem/JKernel/JKRHeap.h" #include "dol2asm.h" #include "dolphin/types.h" // -// Types: -// - -struct JUTGraphFifo { - /* 802DEB58 */ JUTGraphFifo(u32); - /* 802DEC34 */ ~JUTGraphFifo(); - - static u8 sCurrentFifo[4]; - static u8 mGpStatus[5 + 3 /* padding */]; -}; - -struct JKRHeap { - /* 802CE4D4 */ void alloc(u32, int); - /* 802CE548 */ void free(void*); - - static u8 sSystemHeap[4]; -}; - -// -// Forward References: -// - -extern "C" void __ct__12JUTGraphFifoFUl(); -extern "C" void __dt__12JUTGraphFifoFv(); -extern "C" u8 sCurrentFifo__12JUTGraphFifo[4]; -extern "C" u8 mGpStatus__12JUTGraphFifo[5 + 3 /* padding */]; - -// -// External References: -// - -extern "C" void alloc__7JKRHeapFUli(); -extern "C" void free__7JKRHeapFPv(); -extern "C" void __dl__FPv(); -extern "C" void GXInit(); -extern "C" void GXInitFifoBase(); -extern "C" void GXInitFifoPtrs(); -extern "C" void GXSaveCPUFifo(); -extern "C" void GXGetGPStatus(); -extern "C" void _savegpr_26(); -extern "C" void _restgpr_26(); -extern "C" u8 sSystemHeap__7JKRHeap[4]; - -// // Declarations: // -/* ############################################################################################## */ -/* 803CC590-803CC5A0 0296B0 000C+04 2/2 0/0 0/0 .data __vt__12JUTGraphFifo */ -SECTION_DATA extern void* __vt__12JUTGraphFifo[3 + 1 /* padding */] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12JUTGraphFifoFv, - /* padding */ - NULL, -}; - /* 804514B8-804514BC 0009B8 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_804514B8[4]; +static bool data_804514B8; /* 804514BC-804514C0 0009BC 0004+00 2/2 0/0 0/0 .sbss sCurrentFifo__12JUTGraphFifo */ -u8 JUTGraphFifo::sCurrentFifo[4]; +JUTGraphFifo* JUTGraphFifo::sCurrentFifo; /* 802DEB58-802DEC34 2D9498 00DC+00 0/0 1/1 0/0 .text __ct__12JUTGraphFifoFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JUTGraphFifo::JUTGraphFifo(u32 param_0) { - nofralloc -#include "asm/JSystem/JUtility/JUTGraphFifo/__ct__12JUTGraphFifoFUl.s" +JUTGraphFifo::JUTGraphFifo(u32 size) { + mSize = size + 0x1F & ~0x1F; + if (data_804514B8) { + mFifo = (GXFifoObj*)JKRAllocFromSysHeap(mSize + 0x80, 32); + mBase = mFifo + 1; + GXInitFifoBase(mFifo, mBase, mSize); + GXInitFifoPtrs(mFifo, mBase, mBase); + } else { + mBase = JKRAllocFromSysHeap(mSize + 0xA0, 32); + mBase = (void*)((int)mBase + 0x1F & ~0x1F); + mFifo = GXInit(mBase, mSize); + data_804514B8 = true; + sCurrentFifo = this; + } } -#pragma pop /* ############################################################################################## */ /* 804514C0-804514C8 0009C0 0005+03 1/1 0/0 0/0 .sbss mGpStatus__12JUTGraphFifo */ -u8 JUTGraphFifo::mGpStatus[5 + 3 /* padding */]; +bool JUTGraphFifo::mGpStatus[5]; /* 802DEC34-802DECF8 2D9574 00C4+00 1/0 0/0 0/0 .text __dt__12JUTGraphFifoFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JUTGraphFifo::~JUTGraphFifo() { - nofralloc -#include "asm/JSystem/JUtility/JUTGraphFifo/__dt__12JUTGraphFifoFv.s" +JUTGraphFifo::~JUTGraphFifo() { + sCurrentFifo->save(); + + do { + } while (isGPActive()); + + if (sCurrentFifo == this) { + sCurrentFifo = NULL; + } + JKRFreeToSysHeap(mBase); } -#pragma pop |
