mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-10 22:31:52 -04:00
GX work
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user