summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-01-10 06:10:00 -0800
committerTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-01-10 06:10:00 -0800
commita08f84abd508ddf6cbdddcd994a300a16be0e46f (patch)
tree12d8f1fa732b7c7910088442ff91e3250faaaa52 /libs
parent32fc4e2944b053485b03845d387bd28ffe267cbb (diff)
JUTGraphFifo
Diffstat (limited to 'libs')
-rw-r--r--libs/JSystem/JFramework/JFWSystem.cpp11
-rw-r--r--libs/JSystem/JUtility/JUTGraphFifo.cpp99
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