This commit is contained in:
LagoLunatic
2024-11-07 14:24:48 -05:00
parent 0492ca2b52
commit 04a5b59db5
15 changed files with 183 additions and 92 deletions
+2 -1
View File
@@ -1,7 +1,8 @@
#ifndef JMATH_H
#define JMATH_H
#include "dolphin/mtx/mtx.h"
#include "dolphin/mtx/quat.h"
#include "math.h"
bool JMANewSinTable(u8 numBits);
void JMAEulerToQuat(s16 x, s16 y, s16 z, Quaternion* out);
+82
View File
@@ -205,6 +205,88 @@ inline void GFWriteBPCmd(u32 x) {
inline void GXEnd() {}
#define GX_WRITE_U8(ub) \
GXFIFO.u8 = (u8)(ub)
#define GX_WRITE_U16(us) \
GXFIFO.u16 = (u16)(us)
#define GX_WRITE_U32(ui) \
GXFIFO.u32 = (u32)(ui)
#define GX_WRITE_F32(f) \
GXFIFO.f32 = (f32)(f);
#define GX_WRITE_XF_REG(addr, value) \
do { \
GX_WRITE_U8(0x10); \
GX_WRITE_U32(0x1000 + (addr)); \
GX_WRITE_U32(value); \
VERIF_XF_REG(addr, value); \
} while (0)
#if DEBUG
#define GX_WRITE_XF_REG_2(addr, value) \
do { \
u32 xfData = (value); &xfData; \
GX_WRITE_U32(value); \
VERIF_XF_REG_alt(addr, xfData); \
} while (0)
#define GX_WRITE_XF_REG_F(addr, value) \
do { \
f32 xfData = (value); \
GX_WRITE_F32(value); \
VERIF_XF_REG_alt(addr, *(u32 *)&xfData); \
} while (0)
#else
#define GX_WRITE_XF_REG_2(addr, value) \
do { \
GX_WRITE_U32(value); \
} while (0)
#define GX_WRITE_XF_REG_F(addr, value) \
do { \
GX_WRITE_F32(value); \
} while (0)
#endif
#define GX_WRITE_RAS_REG(value) \
do { \
GX_WRITE_U8(0x61); \
GX_WRITE_U32(value); \
VERIF_RAS_REG(value); \
} while (0)
#define GX_WRITE_SOME_REG2(a, b, c, addr) \
do { \
long regAddr; \
GX_WRITE_U8(a); \
GX_WRITE_U8(b); \
GX_WRITE_U32(c); \
regAddr = addr; \
if (regAddr >= 0 && regAddr < 4) { \
gx->indexBase[regAddr] = c; \
} \
} while (0)
#define GX_WRITE_SOME_REG3(a, b, c, addr) \
do { \
long regAddr; \
GX_WRITE_U8(a); \
GX_WRITE_U8(b); \
GX_WRITE_U32(c); \
regAddr = addr; \
if (regAddr >= 0 && regAddr < 4) { \
gx->indexStride[regAddr] = c; \
} \
} while (0)
#define GX_WRITE_SOME_REG4(a, b, c, addr) \
do { \
long regAddr; \
GX_WRITE_U8(a); \
GX_WRITE_U8(b); \
GX_WRITE_U32(c); \
regAddr = addr; \
} while (0)
#ifdef __cplusplus
};
#endif
+1 -1
View File
@@ -454,7 +454,7 @@ typedef enum _GXAnisotropy {
typedef enum _GXCITexFmt {
/* 0x8 */ GX_TF_C4 = 8,
/* 0x8 */ GX_TF_C8,
/* 0x9 */ GX_TF_C8,
/* 0xA */ GX_TF_C14X2
} GXCITexFmt;
+12 -2
View File
@@ -81,8 +81,8 @@ typedef struct _GXData {
// Texture regions
/* 0x208 */ GXTexRegion TexRegions0[GX_MAX_TEXMAP];
/* 0x288 */ GXTexRegion TexRegions1[4];
/* 0x2C8 */ u32 m2C8;
/* 0x2C8 */ u32 m2CC;
/* 0x2C8 */ u32 nextTexRgn;
/* 0x2C8 */ u32 nextTexRgnCI;
// Texture lookup table regions
/* 0x2D0 */ GXTlutRegion TlutRegions[GX_MAX_TLUT_ALL];
@@ -140,6 +140,16 @@ extern u16* __cpReg;
extern u16* __peReg;
extern vu16* __memReg;
#define GX_GET_MEM_REG(offset) (*(vu16*)((vu16*)(__memReg) + (offset)))
#define GX_GET_CP_REG(offset) (*(vu16*)((vu16*)(__cpReg) + (offset)))
#define GX_GET_PE_REG(offset) (*(vu16*)((vu16*)(__peReg) + (offset)))
#define GX_GET_PI_REG(offset) (*(vu32*)((vu32*)(__piReg) + (offset)))
#define GX_SET_MEM_REG(offset, val) (*(vu16*)((vu16*)(__memReg) + (offset)) = val)
#define GX_SET_CP_REG(offset, val) (*(vu16*)((vu16*)(__cpReg) + (offset)) = val)
#define GX_SET_PE_REG(offset, val) (*(vu16*)((vu16*)(__peReg) + (offset)) = val)
#define GX_SET_PI_REG(offset, val) (*(vu32*)((vu32*)(__piReg) + (offset)) = val)
inline void GXSetWasteFlags() {
GXData* data = __GXData;
data->dirtyState |= GX_DIRTY_SU_TEX | GX_DIRTY_BP_MASK;
+1 -1
View File
@@ -40,7 +40,7 @@ void GXSetTexCoordBias(GXTexCoordID coord, GXBool s_enable, GXBool t_enable);
void __SetSURegs();
void __GXSetSUTexRegs();
void __GXSetTmemConfig();
void __GXSetTmemConfig(u32);
#ifdef __cplusplus
};
+2
View File
@@ -23,6 +23,8 @@ void GXGetScissor(u32* left, u32* top, u32* width, u32* height);
void GXSetScissorBoxOffset(s32 x, s32 y);
void GXSetClipMode(GXClipMode mode);
void __GXSetMatrixIndex(GXAttr index);
#ifdef __cplusplus
};
#endif
+1
View File
@@ -41,6 +41,7 @@
#endif
extern int __cntlzw(uint);
extern int __rlwimi(int, int, int, int, int);
extern void __dcbz(void*, int);
#define VERSION_JPN 0