JUTGraphFifo

This commit is contained in:
TakaRikka 2022-01-10 06:10:00 -08:00
parent 32fc4e2944
commit a08f84abd5
6 changed files with 61 additions and 192 deletions

View File

@ -1,58 +0,0 @@
lbl_802DEB58:
/* 802DEB58 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802DEB5C 7C 08 02 A6 */ mflr r0
/* 802DEB60 90 01 00 14 */ stw r0, 0x14(r1)
/* 802DEB64 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802DEB68 7C 7F 1B 78 */ mr r31, r3
/* 802DEB6C 3C 60 80 3D */ lis r3, __vt__12JUTGraphFifo@ha /* 0x803CC590@ha */
/* 802DEB70 38 03 C5 90 */ addi r0, r3, __vt__12JUTGraphFifo@l /* 0x803CC590@l */
/* 802DEB74 90 1F 00 00 */ stw r0, 0(r31)
/* 802DEB78 38 04 00 1F */ addi r0, r4, 0x1f
/* 802DEB7C 54 00 00 34 */ rlwinm r0, r0, 0, 0, 0x1a
/* 802DEB80 90 1F 00 0C */ stw r0, 0xc(r31)
/* 802DEB84 88 0D 8F 38 */ lbz r0, data_804514B8(r13)
/* 802DEB88 28 00 00 00 */ cmplwi r0, 0
/* 802DEB8C 41 82 00 4C */ beq lbl_802DEBD8
/* 802DEB90 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13)
/* 802DEB94 80 9F 00 0C */ lwz r4, 0xc(r31)
/* 802DEB98 38 84 00 80 */ addi r4, r4, 0x80
/* 802DEB9C 38 A0 00 20 */ li r5, 0x20
/* 802DEBA0 4B FE F9 35 */ bl alloc__7JKRHeapFUli
/* 802DEBA4 90 7F 00 04 */ stw r3, 4(r31)
/* 802DEBA8 80 7F 00 04 */ lwz r3, 4(r31)
/* 802DEBAC 38 03 00 80 */ addi r0, r3, 0x80
/* 802DEBB0 90 1F 00 08 */ stw r0, 8(r31)
/* 802DEBB4 80 7F 00 04 */ lwz r3, 4(r31)
/* 802DEBB8 80 9F 00 08 */ lwz r4, 8(r31)
/* 802DEBBC 80 BF 00 0C */ lwz r5, 0xc(r31)
/* 802DEBC0 48 07 BB 1D */ bl GXInitFifoBase
/* 802DEBC4 80 9F 00 08 */ lwz r4, 8(r31)
/* 802DEBC8 80 7F 00 04 */ lwz r3, 4(r31)
/* 802DEBCC 7C 85 23 78 */ mr r5, r4
/* 802DEBD0 48 07 BB 79 */ bl GXInitFifoPtrs
/* 802DEBD4 48 00 00 48 */ b lbl_802DEC1C
lbl_802DEBD8:
/* 802DEBD8 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13)
/* 802DEBDC 80 9F 00 0C */ lwz r4, 0xc(r31)
/* 802DEBE0 38 84 00 A0 */ addi r4, r4, 0xa0
/* 802DEBE4 38 A0 00 20 */ li r5, 0x20
/* 802DEBE8 4B FE F8 ED */ bl alloc__7JKRHeapFUli
/* 802DEBEC 90 7F 00 08 */ stw r3, 8(r31)
/* 802DEBF0 80 7F 00 08 */ lwz r3, 8(r31)
/* 802DEBF4 38 03 00 1F */ addi r0, r3, 0x1f
/* 802DEBF8 54 00 00 34 */ rlwinm r0, r0, 0, 0, 0x1a
/* 802DEBFC 90 1F 00 08 */ stw r0, 8(r31)
/* 802DEC00 80 7F 00 08 */ lwz r3, 8(r31)
/* 802DEC04 80 9F 00 0C */ lwz r4, 0xc(r31)
/* 802DEC08 48 07 AA 69 */ bl GXInit
/* 802DEC0C 90 7F 00 04 */ stw r3, 4(r31)
/* 802DEC10 38 00 00 01 */ li r0, 1
/* 802DEC14 98 0D 8F 38 */ stb r0, data_804514B8(r13)
/* 802DEC18 93 ED 8F 3C */ stw r31, sCurrentFifo__12JUTGraphFifo(r13)
lbl_802DEC1C:
/* 802DEC1C 7F E3 FB 78 */ mr r3, r31
/* 802DEC20 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802DEC24 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802DEC28 7C 08 03 A6 */ mtlr r0
/* 802DEC2C 38 21 00 10 */ addi r1, r1, 0x10
/* 802DEC30 4E 80 00 20 */ blr

View File

@ -1,53 +0,0 @@
lbl_802DEC34:
/* 802DEC34 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802DEC38 7C 08 02 A6 */ mflr r0
/* 802DEC3C 90 01 00 24 */ stw r0, 0x24(r1)
/* 802DEC40 39 61 00 20 */ addi r11, r1, 0x20
/* 802DEC44 48 08 35 8D */ bl _savegpr_26
/* 802DEC48 7C 7A 1B 79 */ or. r26, r3, r3
/* 802DEC4C 7C 9B 23 78 */ mr r27, r4
/* 802DEC50 41 82 00 8C */ beq lbl_802DECDC
/* 802DEC54 3C 60 80 3D */ lis r3, __vt__12JUTGraphFifo@ha /* 0x803CC590@ha */
/* 802DEC58 38 03 C5 90 */ addi r0, r3, __vt__12JUTGraphFifo@l /* 0x803CC590@l */
/* 802DEC5C 90 1A 00 00 */ stw r0, 0(r26)
/* 802DEC60 80 6D 8F 3C */ lwz r3, sCurrentFifo__12JUTGraphFifo(r13)
/* 802DEC64 80 63 00 04 */ lwz r3, 4(r3)
/* 802DEC68 48 07 BE 25 */ bl GXSaveCPUFifo
/* 802DEC6C 3B ED 8F 40 */ la r31, mGpStatus__12JUTGraphFifo(r13) /* 804514C0-_SDA_BASE_ */
/* 802DEC70 7F FE FB 78 */ mr r30, r31
/* 802DEC74 7F FD FB 78 */ mr r29, r31
/* 802DEC78 3B 9F 00 01 */ addi r28, r31, 1
/* 802DEC7C 3B FF 00 04 */ addi r31, r31, 4
/* 802DEC80 3B DE 00 03 */ addi r30, r30, 3
/* 802DEC84 3B BD 00 02 */ addi r29, r29, 2
lbl_802DEC88:
/* 802DEC88 38 6D 8F 40 */ la r3, mGpStatus__12JUTGraphFifo(r13) /* 804514C0-_SDA_BASE_ */
/* 802DEC8C 7F 84 E3 78 */ mr r4, r28
/* 802DEC90 7F A5 EB 78 */ mr r5, r29
/* 802DEC94 7F C6 F3 78 */ mr r6, r30
/* 802DEC98 7F E7 FB 78 */ mr r7, r31
/* 802DEC9C 48 07 BE ED */ bl GXGetGPStatus
/* 802DECA0 88 1D 00 00 */ lbz r0, 0(r29)
/* 802DECA4 28 00 00 00 */ cmplwi r0, 0
/* 802DECA8 41 82 FF E0 */ beq lbl_802DEC88
/* 802DECAC 80 0D 8F 3C */ lwz r0, sCurrentFifo__12JUTGraphFifo(r13)
/* 802DECB0 7C 00 D0 40 */ cmplw r0, r26
/* 802DECB4 40 82 00 0C */ bne lbl_802DECC0
/* 802DECB8 38 00 00 00 */ li r0, 0
/* 802DECBC 90 0D 8F 3C */ stw r0, sCurrentFifo__12JUTGraphFifo(r13)
lbl_802DECC0:
/* 802DECC0 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13)
/* 802DECC4 80 9A 00 08 */ lwz r4, 8(r26)
/* 802DECC8 4B FE F8 81 */ bl free__7JKRHeapFPv
/* 802DECCC 7F 60 07 35 */ extsh. r0, r27
/* 802DECD0 40 81 00 0C */ ble lbl_802DECDC
/* 802DECD4 7F 43 D3 78 */ mr r3, r26
/* 802DECD8 4B FF 00 65 */ bl __dl__FPv
lbl_802DECDC:
/* 802DECDC 7F 43 D3 78 */ mr r3, r26
/* 802DECE0 39 61 00 20 */ addi r11, r1, 0x20
/* 802DECE4 48 08 35 39 */ bl _restgpr_26
/* 802DECE8 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802DECEC 7C 08 03 A6 */ mtlr r0
/* 802DECF0 38 21 00 20 */ addi r1, r1, 0x20
/* 802DECF4 4E 80 00 20 */ blr

View File

@ -1,6 +1,35 @@
#ifndef JUTGRAPHFIFO_H
#define JUTGRAPHFIFO_H
#include "dolphin/gx/GX.h"
#include "dolphin/types.h"
class JUTGraphFifo {
public:
/* 802DEB58 */ JUTGraphFifo(u32);
/* 802DEC34 */ virtual ~JUTGraphFifo();
void getGpStatus() {
GXGetGPStatus((GXBool*)&mGpStatus[0], (GXBool*)&mGpStatus[1], (GXBool*)&mGpStatus[2],
(GXBool*)&mGpStatus[3], (GXBool*)&mGpStatus[4]);
}
bool isGPActive() {
getGpStatus();
return mGpStatus[2] == false;
}
void save() { GXSaveCPUFifo(this->mFifo); }
static JUTGraphFifo* sCurrentFifo;
static bool mGpStatus[5];
private:
/* 0x04 */ GXFifoObj* mFifo;
/* 0x08 */ void* mBase;
/* 0x0C */ u32 mSize;
/* 0x10 */ u8 field_0x10[0xC];
};
#endif /* JUTGRAPHFIFO_H */

View File

@ -959,6 +959,9 @@ GXFifoObj* GXInit(void*, u32);
GXFifoObj* GXGetCPUFifo(void);
void GXGetGPStatus(GXBool*, GXBool*, GXBool*, GXBool*, GXBool*);
void GXReadXfRasMetric(u32*, u32*, u32*, u32*);
void GXInitFifoBase(GXFifoObj*, void*, u32);
void GXInitFifoPtrs(GXFifoObj*, void*, void*);
void GXSaveCPUFifo(GXFifoObj*);
#define GFX_FIFO(T) (*(volatile T*)0xCC008000)

View File

@ -9,20 +9,11 @@
#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:
//

View File

@ -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