diff options
Diffstat (limited to 'arm9/lib/include/gx.h')
-rw-r--r-- | arm9/lib/include/gx.h | 392 |
1 files changed, 145 insertions, 247 deletions
diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 58e4c35f..8abe4e40 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -4,278 +4,176 @@ #include "fx.h" //temporary while other files aren't decompiled -void MIi_CpuCopy16(void *, void *, u32); + void GXi_NopClearFifo128_(void *); -void MI_Copy16B(void *, void *); +void MI_Copy16B(const void *, void *); void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); void MI_DmaFill32(u32, void *, u32, u32); void MIi_CpuClear32(u32, void *, u32); void MI_Copy64B(void *src, void *dst); void MI_WaitDma(u32); -void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *); -void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy16(void *src, void *dst, u32 size); -void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy32(void *src, void *dst, u32 size); +void MI_DmaCopy32Async(u32, const void *, void *, u32, void *, void *); +void MI_DmaCopy16(u32 unk, const void *src, void *dst, u32 size); +void MIi_CpuCopy16(const void *src, void *dst, u32 size); +void MI_DmaCopy32(u32 unk, const void *src, void *dst, u32 size); +void MIi_CpuCopy32(const void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//TODO: Add defines for GX commands, add structs/unions for HW registers +#include "GXcommon.h" +#include "GX_struct_2d.h" +#include "GX_g3.h" +#include "GX_g3_util.h" +#include "GX_g3x.h" +#include "GX_g3b.h" +#include "GX_asm.h" +#include "GX_vramcnt.h" +#include "GX_bgcnt.h" +#include "GX_load2d.h" +#include "GX_load3d.h" +#include "GX_g2.h" +#include "GX_state.h" +#include "GX_g3imm.h" +#include "GX_dma.h" -static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ - if (var != -1 && size > 0x1C) - { - MI_DmaCopy16(var, src, dst, size); - } - else - { - MIi_CpuCopy16(src, dst, size); - } -} +void GX_Init(); +u32 GX_HBlankIntr(u32 enable); +u32 GX_VBlankIntr(u32 enable); +void GX_DispOff(); +void GX_DispOn(); +void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); +void GXS_SetGraphicsMode(u32 mode); +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); -static inline void _GX_Load_32(u32 var, void *src, void *dst, u32 size){ - if (var != -1 && size > 0x30) - { - MI_DmaCopy32(var, src, dst, size); - } - else +typedef union +{ + u32 raw; + struct { - MIi_CpuCopy32(src, dst, size); - } + u32 bgMode:3; + u32 bg0_2d3d:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:4; + u32 extObjMapChar:2; + u32 extObjMapBmp:1; + u32 hBlankObjProc:1; + u32 bgCharOffset:3; + u32 bgScrOffset:3; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; } +GXDispCnt; -static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, void *func, void *ptr){ - if (var != -1) - { - MI_DmaCopy32Async(var, src, dst, size, func, ptr); - } - else +typedef union +{ + u32 raw; + struct { - MIi_CpuCopy32(src, dst, size); - } + u32 bgMode:3; + u32 _reserve1:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:1; + u32 _reserve2:3; + u32 extObjMapChar:2; + u32 _reserve3:1; + u32 hBlankObjProc:1; + u32 _reserve4:6; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; } +GXSDispCnt; -struct DL +typedef enum { - u8 *var00; //end pointer - u32 *var04; //aligned end pointer, used to write data - u8 *var08; //start pointer - u32 var0C; - u32 var10; //pad end with zero bool -}; + GX_BGMODE_0 = 0, + GX_BGMODE_1 = 1, + GX_BGMODE_2 = 2, + GX_BGMODE_3 = 3, + GX_BGMODE_4 = 4, + GX_BGMODE_5 = 5, + GX_BGMODE_6 = 6 +} +GXBGMode; -struct VRAM_banks +typedef enum { - u16 var00; //lcdc - u16 var02; //bg - u16 var04; //obj - u16 var06; //arm7 - u16 var08; //tex - u16 var0A; //texpltt - u16 var0C; //clearimage - u16 var0E; //bgextpltt - u16 var10; //objextpltt - u16 var12; //subbg - u16 var14; //subobj - u16 var16; //subbgextpltt - u16 var18; //subobjextpltt -}; - -//GX_g3 -void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct DL *displaylist); - -//GX_g3_util -void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); -void G3_RotX(fx32 sinphi, fx32 cosphi); -void G3_RotY(fx32 sinphi, fx32 cosphi); -void G3_RotZ(fx32 sinphi, fx32 cosphi); - -//GX_g3x -void GXi_NopClearFifo128_(void *reg); -void G3X_Init(); -void G3X_ResetMtxStack(); -void G3X_ClearFifo(); -void G3X_InitMtxStack(); -void G3X_ResetMtxStack_2(); -void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); -u32 G3X_GetClipMtx(struct Mtx44 *dst); -u32 G3X_GetVectorMtx(struct Mtx33 *dst); -void G3X_SetEdgeColorTable(void *tbl_ptr); -void G3X_SetFogTable(void *tbl_ptr); -void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); -void G3X_InitTable(); -u32 G3X_GetMtxStackLevelPV(u32 *level); -u32 G3X_GetMtxStackLevelPJ(u32 *level); -u32 G3X_GetBoxTestResult(u32 *result); -void G3X_SetHOffset(u32 offset); - -//GX_g3b -void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); -void G3B_PushMtx(struct DL *displaylist); -void G3B_PopMtx(struct DL *displaylist, void *mtx); -void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); -void G3B_Color(struct DL * displaylist, u32 vtx_col); -void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z); -void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z); -void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); -void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); -void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); -void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); -void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col); -void G3B_Begin(struct DL * displaylist, u32 type); -void G3B_End(struct DL * displaylist); - -//GX_asm -void GX_SendFifo48B(void *src, void *dst); - -//GX_vramcnt -//some of the symbols don't match what the function does -void GX_VRAMCNT_SetLCDC_(u32 mask); -void GX_SetBankForBG(s32 bg); -void GX_SetBankForOBJ(s32 obj); -void GX_SetBankForBGExtPltt(s32 bgextpltt); -void GX_SetBankForOBJExtPltt(s32 objextpltt); -void GX_SetBankForTex(s32 tex); -void GX_SetBankForTexPltt(s32 texpltt); -void GX_SetBankForClearImage(s32 clearimage); -void GX_SetBankForARM7(s32 arm7); -void GX_SetBankForLCDC(s32 lcdc); -void GX_SetBankForSubBG(s32 subbg); -void GX_SetBankForSubOBJ(s32 subobj); -void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); -void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); -u32 FUN_020C6130(u16 *ptr); -u32 GX_ResetBankForBG(); -u32 GX_ResetBankForOBJ(); -u32 GX_ResetBankForBGExtPltt(); -u32 GX_ResetBankForOBJExtPltt(); -u32 GX_ResetBankForTex(); -u32 GX_ResetBankForTexPltt(); -u32 GX_ResetBankForClearImage(); -u32 GX_ResetBankForSubBG(); -u32 FUN_020C605C(); -u32 FUN_020C6034(); -u32 GX_ResetBankForSubOBJ(); -u32 FUN_020C5F28(u16 *ptr); -u32 disableBankForX_(); -u32 GX_DisableBankForOBJExtPltt_2(); -u32 GX_DisableBankForBGExtPltt(); -u32 GX_DisableBankForOBJExtPltt(); -u32 GX_DisableBankForTexPltt_2(); -u32 GX_DisableBankForTexPltt(); -u32 GX_DisableBankForClearImage(); -u32 GX_DisableBankForARM7(); -u32 GX_DisableBankForLCDC(); -u32 GX_DisableBankForSubBGExtPltt(); -u32 GX_DisableBankForSubOBJExtPltt_2(); -u32 FUN_020C5E04(); -u32 GX_DisableBankForSubOBJExtPltt(); -u32 GX_GetBankForBGExtPltt_2(); -u32 GX_GetBankForOBJ(); -u32 GX_GetBankForBGExtPltt(); -u32 GX_GetBankForOBJExtPltt(); -u32 FUN_020C5D8C(); -u32 GX_GetBankForTexPltt(); -u32 GX_GetBankForLCDC(); -u32 GX_GetBankForSubBGExtPltt_2(); -u32 GX_GetBankForSubOBJ(); -u32 GX_GetBankForSubBGExtPltt(); -u32 GX_GetBankForSubOBJExtPltt(); - -//GX_bgcnt -void *G2_GetBG0ScrPtr(); -void *G2S_GetBG0ScrPtr(); -void *G2_GetBG1ScrPtr(); -void *G2S_GetBG1ScrPtr(); -void *G2_GetBG2ScrPtr(); -void *G2S_GetBG2ScrPtr(); -void *G2_GetBG3ScrPtr(); -void *G2S_GetBG3ScrPtr(); -void *G2_GetBG0CharPtr(); -void *G2S_GetBG0CharPtr(); -void *G2_GetBG1CharPtr(); -void *G2S_GetBG1CharPtr(); -void *G2_GetBG2CharPtr(); -void *G2S_GetBG2CharPtr(); -void *G2_GetBG3CharPtr(); -void *G2S_GetBG3CharPtr(); + GX_BG0_AS_2D = 0, + GX_BG0_AS_3D = 1 +} +GXBG0As; -//GX_load2d -void GX_LoadBGPltt(void *src, u32 offset, u32 size); -void GXS_LoadBGPltt(void *src, u32 offset, u32 size); -void GX_LoadOBJPltt(void *src, u32 offset, u32 size); -void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); -void GX_LoadOAM(void *src, u32 offset, u32 size); -void GXS_LoadOAM(void *src, u32 offset, u32 size); -void GX_LoadOBJ(void *src, u32 offset, u32 size); -void GXS_LoadOBJ(void *src, u32 offset, u32 size); -void GX_LoadBG0Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); -void GX_LoadBG1Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); -void GX_LoadBG2Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); -void GX_LoadBG3Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); -void GX_LoadBG0Char(void *src, u32 offset, u32 size); -void GXS_LoadBG0Char(void *src, u32 offset, u32 size); -void GX_LoadBG1Char(void *src, u32 offset, u32 size); -void GXS_LoadBG1Char(void *src, u32 offset, u32 size); -void GX_LoadBG2Char(void *src, u32 offset, u32 size); -void GXS_LoadBG2Char(void *src, u32 offset, u32 size); -void GX_LoadBG3Char(void *src, u32 offset, u32 size); -void GXS_LoadBG3Char(void *src, u32 offset, u32 size); -void GX_BeginLoadBGExtPltt(); -void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadBGExtPltt(); -void GX_BeginLoadOBJExtPltt(); -void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadOBJExtPltt(); -void GXS_BeginLoadBGExtPltt(); -void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadBGExtPltt(); -void GXS_BeginLoadOBJExtPltt(); -void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadOBJExtPltt(); +typedef enum +{ + GX_DISPMODE_GRAPHICS = 0x01, + GX_DISPMODE_VRAM_A = 0x02, + GX_DISPMODE_VRAM_B = 0x06, + GX_DISPMODE_VRAM_C = 0x0a, + GX_DISPMODE_VRAM_D = 0x0e, + GX_DISPMODE_MMEM = 0x03 +} +GXDispMode; -//GX_load3d -void GX_BeginLoadTex(); -void GX_LoadTex(void *src, u32 offset, u32 size); -void GX_EndLoadTex(); -void GX_BeginLoadTexPltt(); -void GX_LoadTexPltt(void *src, u32 offset, u32 size); -void GX_EndLoadTexPltt(); -void GX_BeginLoadClearImage(); -void GX_LoadClearImageColor(void *src, u32 size); -void GX_LoadClearImageDepth(void *src, u32 size); -void GX_EndLoadClearImage(); +typedef enum +{ + GX_PLANEMASK_NONE = 0x00, + GX_PLANEMASK_BG0 = 0x01, + GX_PLANEMASK_BG1 = 0x02, + GX_PLANEMASK_BG2 = 0x04, + GX_PLANEMASK_BG3 = 0x08, + GX_PLANEMASK_OBJ = 0x10 +} +GXPlaneMask; -//GX -void GX_Init(); -u32 GX_HBlankIntr(u32 enable); -u32 GX_VBlankIntr(u32 enable); -void GX_DispOff(); -void GX_DispOn(); -void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); -void GXS_SetGraphicsMode(u32 mode); -void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); +typedef enum +{ + GX_WNDMASK_NONE = 0x00, + GX_WNDMASK_W0 = 0x01, + GX_WNDMASK_W1 = 0x02, + GX_WNDMASK_OW = 0x04 +} +GXWndMask; -//GX_g2 -void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); -void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); -void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); +typedef enum +{ + GX_BGCHAROFFSET_0x00000 = 0x00, + GX_BGCHAROFFSET_0x10000 = 0x01, + GX_BGCHAROFFSET_0x20000 = 0x02, + GX_BGCHAROFFSET_0x30000 = 0x03, + GX_BGCHAROFFSET_0x40000 = 0x04, + GX_BGCHAROFFSET_0x50000 = 0x05, + GX_BGCHAROFFSET_0x60000 = 0x06, + GX_BGCHAROFFSET_0x70000 = 0x07 +} +GXBGCharOffset; -//GX_state -void GX_InitGXState(); +typedef enum +{ + GX_BGSCROFFSET_0x00000 = 0x00, + GX_BGSCROFFSET_0x10000 = 0x01, + GX_BGSCROFFSET_0x20000 = 0x02, + GX_BGSCROFFSET_0x30000 = 0x03, + GX_BGSCROFFSET_0x40000 = 0x04, + GX_BGSCROFFSET_0x50000 = 0x05, + GX_BGSCROFFSET_0x60000 = 0x06, + GX_BGSCROFFSET_0x70000 = 0x07 +} +GXBGScrOffset; -//GX_g3imm -void G3_LoadMtx43(struct Mtx43 *mtx); -void G3_MultMtx43(struct Mtx43 *mtx); -void G3_MultMtx33(struct Mtx33 *mtx); +typedef enum +{ + GX_DISP_SELECT_SUB_MAIN = 0, + GX_DISP_SELECT_MAIN_SUB = 1 +} +GXDispSelect; #endif //GUARD_GX_H |