From 3f833281144c32ab7452639c060fd4fb01c8d63f Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 6 May 2020 02:02:35 +0200 Subject: Decompile GX_asm and GX_g3 --- arm9/lib/include/gx.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 arm9/lib/include/gx.h (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h new file mode 100644 index 00000000..ad3f1a6e --- /dev/null +++ b/arm9/lib/include/gx.h @@ -0,0 +1,24 @@ +#ifndef GUARD_GX_H +#define GUARD_GX_H + +struct DL +{ + u8 *var00; //end pointer + u32 *var04; //aligned end pointer + u8 *var08; //start pointer + u32 var0C; + u32 var10; //pad end with zero bool +}; + +//GX_g3 +void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct DL *displaylist); + + +//GX_asm +void GX_SendFifo48B(void *src, void *dst); + + +//GXi_NopClearFifo128_ probably asm + +#endif //GUARD_GX_H -- cgit v1.2.3 From 6d3d11491cf6e8289822d2c5ba9cd7e309a5ce11 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 6 May 2020 23:41:54 +0200 Subject: Decompile GX_g3b.s and GX_g3x.s --- arm9/lib/include/gx.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index ad3f1a6e..dd266759 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -1,10 +1,43 @@ #ifndef GUARD_GX_H #define GUARD_GX_H +#include "fx.h" + +//Todos before PR +//TODO: Add defines for GX commands, add structs/unions for HW registers +//TODO: Add ARM_FUNC attributes + +#define HW_REG_END_VTXS 0x04000504 +#define HW_REG_GXSTAT 0x04000600 +#define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG0HOFS 0x04000010 +#define HW_REG_CLEAR_COLOR 0x04000350 +#define HW_REG_CLEAR_DEPTH 0x04000354 +#define HW_REG_CLRIMAGE_OFFSET 0x04000356 +#define HW_REG_FOG_COLOR 0x04000358 +#define HW_REG_FOG_OFFSET 0x0400035C +#define HW_REG_BG0CNT 0x04000008 +#define HW_REG_POLYGON_ATTR 0x040004A4 +#define HW_REG_TEXIMAGE_PARAM 0x040004A8 +#define HW_REG_PLTT_BASE 0x040004AC + +#define HW_REG_GXFIFO 0x04000400 +#define HW_REG_MTX_IDENTITY 0x04000454 +#define HW_REG_MTX_POP 0x04000448 +#define HW_REG_MTX_MODE 0x04000440 + +#define HW_REG_CLIPMTX_RESULT 0x04000640 +#define HW_REG_VECMTX_RESULT 0x04000680 + +#define HW_REG_EDGE_COLOR 0x04000330 +#define HW_REG_FOG_TABLE 0x04000360 + +#define HW_REG_SHININESS 0x040004D0 + struct DL { u8 *var00; //end pointer - u32 *var04; //aligned end pointer + u32 *var04; //aligned end pointer, used to write data u8 *var08; //start pointer u32 var0C; u32 var10; //pad end with zero bool @@ -14,6 +47,41 @@ struct DL void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); s32 G3_EndMakeDL(struct DL *displaylist); +//GX_g3x +asm 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); -- cgit v1.2.3 From 4ca37a40d9fbe67888777e65aea5a6bf1f4c5829 Mon Sep 17 00:00:00 2001 From: Made Date: Sat, 9 May 2020 19:10:59 +0200 Subject: temporarily add register macros till actual definitions are added --- arm9/lib/include/gx.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index dd266759..03e26610 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -34,6 +34,16 @@ #define HW_REG_SHININESS 0x040004D0 +//TODO: wait for register commit and replace these +#define SETREG16(x, y) ((*(vu16 *)x) = y) +#define SETREG32(x, y) ((*(vu32 *)x) = y) +#define SETREG64(x, y) ((*(vu64 *)x) = y) + +#define READREG16(x) (*(vu16 *)x) +#define READREG32(x) (*(vu32 *)x) +#define READREG64(x) (*(vu64 *)x) + + struct DL { u8 *var00; //end pointer -- cgit v1.2.3 From 4abf7d45568d93040fdb86993e915ffdfc4c4a9e Mon Sep 17 00:00:00 2001 From: Made Date: Sat, 9 May 2020 19:44:46 +0200 Subject: start decompiling GX_vramcnt.s --- arm9/lib/include/gx.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 03e26610..81138da3 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -34,11 +34,25 @@ #define HW_REG_SHININESS 0x040004D0 + +#define HW_REG_VRAMCNT_A 0x04000240 +#define HW_REG_VRAMCNT_B 0x04000241 +#define HW_REG_VRAMCNT_C 0x04000242 +#define HW_REG_VRAMCNT_D 0x04000243 +#define HW_REG_VRAMCNT_E 0x04000244 +#define HW_REG_VRAMCNT_F 0x04000245 +#define HW_REG_VRAMCNT_G 0x04000246 +#define HW_REG_WRAMCNT 0x04000247 +#define HW_REG_VRAMCNT_H 0x04000248 +#define HW_REG_VRAMCNT_I 0x04000249 + //TODO: wait for register commit and replace these +#define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) #define SETREG32(x, y) ((*(vu32 *)x) = y) #define SETREG64(x, y) ((*(vu64 *)x) = y) +#define READREG8(x) (*(vu8 *)x) #define READREG16(x) (*(vu16 *)x) #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) -- cgit v1.2.3 From 435f3ce09ee75bc612ac5e827e62a341249c3c67 Mon Sep 17 00:00:00 2001 From: Made Date: Sun, 10 May 2020 04:14:47 +0200 Subject: Finish edcompiling GX_vramcnt.s --- arm9/lib/include/gx.h | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 81138da3..a9cb07b1 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -46,6 +46,11 @@ #define HW_REG_VRAMCNT_H 0x04000248 #define HW_REG_VRAMCNT_I 0x04000249 +#define HW_REG_DISPCNT 0x04000000 +#define HW_REG_DISPCNT_2D 0x04001000 + +#define HW_REG_DISP3DCNT 0x04000060 + //TODO: wait for register commit and replace these #define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) @@ -57,6 +62,9 @@ #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) +//TODO: add SDK signatures and symbols +//TODO: add arm function attributes + struct DL { @@ -67,6 +75,23 @@ struct DL u32 var10; //pad end with zero bool }; +struct VRAM_banks +{ + 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); @@ -110,6 +135,59 @@ 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(u16 bg); +void GX_SetBankForOBJ(u16 obj); +void GX_SetBankForBGExtPltt(u16 bgextpltt); +void GX_SetBankForOBJExtPltt(u16 objextpltt); +void GX_SetBankForTex(u16 tex); +void GX_SetBankForTexPltt(u16 texpltt); +void GX_SetBankForClearImage(u16 clearimage); +void GX_SetBankForARM7(u16 arm7); +void GX_SetBankForLCDC(u16 lcdc); +void GX_SetBankForSubBG(u16 subbg); +void GX_SetBankForSubOBJ(u16 subobj); +void GX_SetBankForSubBGExtPltt(u16 subbgextpltt); +void GX_SetBankForSubOBJExtPltt(u16 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(); //GXi_NopClearFifo128_ probably asm -- cgit v1.2.3 From fd64cccafa5d4d8031ba3b19dc907c672f8b7041 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 11 May 2020 03:08:38 +0200 Subject: Decompile GX_g3_util.h --- arm9/lib/include/gx.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index a9cb07b1..6919cbfd 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -96,6 +96,14 @@ struct VRAM_banks 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 asm void GXi_NopClearFifo128_(void *reg); void G3X_Init(); -- cgit v1.2.3 From 2d3d64c1c94ba8b94147bfbc29bb15bd42772ed3 Mon Sep 17 00:00:00 2001 From: Made Date: Tue, 12 May 2020 01:27:44 +0200 Subject: Decompile GX_bgcnt.s --- arm9/lib/include/gx.h | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 6919cbfd..3f218df9 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -51,6 +51,19 @@ #define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG0CNT_A 0x04000008 +#define HW_REG_BG1CNT_A 0x0400000A +#define HW_REG_BG2CNT_A 0x0400000C +#define HW_REG_BG3CNT_A 0x0400000E + +#define HW_REG_BG0CNT_B 0x04001008 +#define HW_REG_BG1CNT_B 0x0400100A +#define HW_REG_BG2CNT_B 0x0400100C +#define HW_REG_BG3CNT_B 0x0400100E + +#define HW_REG_DISPCNT_A 0x04000000 +#define HW_REG_DISPCNT_B 0x04001000 + //TODO: wait for register commit and replace these #define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) @@ -105,7 +118,7 @@ void G3_RotY(fx32 sinphi, fx32 cosphi); void G3_RotZ(fx32 sinphi, fx32 cosphi); //GX_g3x -asm void GXi_NopClearFifo128_(void *reg); +void GXi_NopClearFifo128_(void *reg); void G3X_Init(); void G3X_ResetMtxStack(); void G3X_ClearFifo(); @@ -197,6 +210,25 @@ 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(); + + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H -- cgit v1.2.3 From 0516c30ad7aa1941882b4e31e6b7bc4ec4ae02a4 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 13 May 2020 19:27:00 +0200 Subject: Fix Function signatures in GX_vramcnt --- arm9/lib/include/gx.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 3f218df9..c8229d3a 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -159,19 +159,19 @@ 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(u16 bg); -void GX_SetBankForOBJ(u16 obj); -void GX_SetBankForBGExtPltt(u16 bgextpltt); -void GX_SetBankForOBJExtPltt(u16 objextpltt); -void GX_SetBankForTex(u16 tex); -void GX_SetBankForTexPltt(u16 texpltt); -void GX_SetBankForClearImage(u16 clearimage); -void GX_SetBankForARM7(u16 arm7); -void GX_SetBankForLCDC(u16 lcdc); -void GX_SetBankForSubBG(u16 subbg); -void GX_SetBankForSubOBJ(u16 subobj); -void GX_SetBankForSubBGExtPltt(u16 subbgextpltt); -void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt); +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(); -- cgit v1.2.3 From 5223256ef928245620bb1a223084df6931999795 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 13 May 2020 20:55:45 +0200 Subject: Decompile GX_load2d.h --- arm9/lib/include/gx.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index c8229d3a..5891753e 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -228,6 +228,43 @@ void *G2S_GetBG2CharPtr(); void *G2_GetBG3CharPtr(); void *G2S_GetBG3CharPtr(); +//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(); //GXi_NopClearFifo128_ probably asm -- cgit v1.2.3 From 0b3c15a399b456bffcd65aa5d100371ce69fa8eb Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 00:22:52 +0200 Subject: Decompile GX_load3d.s --- arm9/lib/include/gx.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 5891753e..edb6f122 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -266,6 +266,18 @@ void GXS_BeginLoadOBJExtPltt(); void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); void GXS_EndLoadOBJExtPltt(); +//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(); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H -- cgit v1.2.3 From 42adea6c97323f7e5738dc05c062af0d6fddd66d Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 02:40:41 +0200 Subject: Decompile GX.s --- arm9/lib/include/gx.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index edb6f122..f3016f44 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -21,6 +21,8 @@ #define HW_REG_TEXIMAGE_PARAM 0x040004A8 #define HW_REG_PLTT_BASE 0x040004AC +#define HW_REG_POWCNT1 0x04000304 + #define HW_REG_GXFIFO 0x04000400 #define HW_REG_MTX_IDENTITY 0x04000454 #define HW_REG_MTX_POP 0x04000448 @@ -34,6 +36,7 @@ #define HW_REG_SHININESS 0x040004D0 +#define HW_REG_MASTER_BRIGHT 0x0400006C #define HW_REG_VRAMCNT_A 0x04000240 #define HW_REG_VRAMCNT_B 0x04000241 @@ -47,10 +50,20 @@ #define HW_REG_VRAMCNT_I 0x04000249 #define HW_REG_DISPCNT 0x04000000 +#define HW_REG_DISPSTAT 0x04000004 #define HW_REG_DISPCNT_2D 0x04001000 #define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG2PA_A 0x04000020 +#define HW_REG_BG2PD_A 0x04000026 +#define HW_REG_BG3PA_A 0x04000030 +#define HW_REG_BG3PD_A 0x04000036 +#define HW_REG_BG2PA_B 0x04001020 +#define HW_REG_BG2PD_B 0x04001026 +#define HW_REG_BG3PA_B 0x04001030 +#define HW_REG_BG3PD_B 0x04001036 + #define HW_REG_BG0CNT_A 0x04000008 #define HW_REG_BG1CNT_A 0x0400000A #define HW_REG_BG2CNT_A 0x0400000C @@ -136,7 +149,6 @@ 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); @@ -278,6 +290,16 @@ void GX_LoadClearImageColor(void *src, u32 size); void GX_LoadClearImageDepth(void *src, u32 size); void GX_EndLoadClearImage(); +//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); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H -- cgit v1.2.3 From 14a5ca7ae49912305b1bcbaa180cfc9fdf8ff17a Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 03:29:32 +0200 Subject: Decompile GX_g2.s --- arm9/lib/include/gx.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index f3016f44..a17132ed 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -300,6 +300,13 @@ void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); void GXS_SetGraphicsMode(u32 mode); void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); +//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); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H -- cgit v1.2.3 From 7e9089849989d5e930eb5b5f7cecfd8d2c6c379c Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 03:47:36 +0200 Subject: Decompile GX_g3imm.s and GX_state.s --- arm9/lib/include/gx.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index a17132ed..c542f560 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -307,6 +307,12 @@ 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); -//GXi_NopClearFifo128_ probably asm +//GX_state +void GX_InitGXState(); + +//GX_g3imm +void G3_LoadMtx43(struct Mtx43 *mtx); +void G3_MultMtx43(struct Mtx43 *mtx); +void G3_MultMtx33(struct Mtx33 *mtx); #endif //GUARD_GX_H -- cgit v1.2.3 From 08e4b4f6657bac9d361a9f6948ae6d2bfe50eebf Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 04:03:35 +0200 Subject: Cleanup --- arm9/lib/include/gx.h | 60 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index c542f560..c4be4deb 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -3,10 +3,35 @@ #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_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 OSi_UnlockVram(u16, u16); +void MIi_CpuClear32(u32, void *, u32); + //Todos before PR //TODO: Add defines for GX commands, add structs/unions for HW registers //TODO: Add ARM_FUNC attributes +#define HW_REG_DIV_NUMER 0x04000290 +#define HW_REG_DIV_DENOM 0x04000298 + +#define HW_REG_MTX_MODE 0x04000440 +#define HW_REG_MTX_LOAD_4x4 0x04000458 +#define HW_REG_MTX_LOAD_4x3 0x0400045C +#define HW_REG_MTX_MULT_3x3 0x04000468 + #define HW_REG_END_VTXS 0x04000504 #define HW_REG_GXSTAT 0x04000600 #define HW_REG_DISP3DCNT 0x04000060 @@ -88,9 +113,38 @@ #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) -//TODO: add SDK signatures and symbols -//TODO: add arm function attributes - +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); + } +} + +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 + { + MIi_CpuCopy32(src, dst, size); + } +} + +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 + { + MIi_CpuCopy32(src, dst, size); + } +} struct DL { -- cgit v1.2.3 From 929c523340dfecbd0e3313e25d36abe47e1cc63e Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 06:46:25 +0200 Subject: Replace register access macros with variables --- arm9/lib/include/gx.h | 90 --------------------------------------------------- 1 file changed, 90 deletions(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 5abc2693..58e4c35f 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -20,98 +20,8 @@ void MIi_CpuCopy32(void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//Todos before PR //TODO: Add defines for GX commands, add structs/unions for HW registers -#define HW_REG_DIV_NUMER 0x04000290 -#define HW_REG_DIV_DENOM 0x04000298 - -#define HW_REG_MTX_MODE 0x04000440 -#define HW_REG_MTX_LOAD_4x4 0x04000458 -#define HW_REG_MTX_LOAD_4x3 0x0400045C -#define HW_REG_MTX_MULT_3x3 0x04000468 - -#define HW_REG_END_VTXS 0x04000504 -#define HW_REG_GXSTAT 0x04000600 -#define HW_REG_DISP3DCNT 0x04000060 -#define HW_REG_BG0HOFS 0x04000010 -#define HW_REG_CLEAR_COLOR 0x04000350 -#define HW_REG_CLEAR_DEPTH 0x04000354 -#define HW_REG_CLRIMAGE_OFFSET 0x04000356 -#define HW_REG_FOG_COLOR 0x04000358 -#define HW_REG_FOG_OFFSET 0x0400035C -#define HW_REG_BG0CNT 0x04000008 -#define HW_REG_POLYGON_ATTR 0x040004A4 -#define HW_REG_TEXIMAGE_PARAM 0x040004A8 -#define HW_REG_PLTT_BASE 0x040004AC - -#define HW_REG_POWCNT1 0x04000304 - -#define HW_REG_GXFIFO 0x04000400 -#define HW_REG_MTX_IDENTITY 0x04000454 -#define HW_REG_MTX_POP 0x04000448 -#define HW_REG_MTX_MODE 0x04000440 - -#define HW_REG_CLIPMTX_RESULT 0x04000640 -#define HW_REG_VECMTX_RESULT 0x04000680 - -#define HW_REG_EDGE_COLOR 0x04000330 -#define HW_REG_FOG_TABLE 0x04000360 - -#define HW_REG_SHININESS 0x040004D0 - -#define HW_REG_MASTER_BRIGHT 0x0400006C - -#define HW_REG_VRAMCNT_A 0x04000240 -#define HW_REG_VRAMCNT_B 0x04000241 -#define HW_REG_VRAMCNT_C 0x04000242 -#define HW_REG_VRAMCNT_D 0x04000243 -#define HW_REG_VRAMCNT_E 0x04000244 -#define HW_REG_VRAMCNT_F 0x04000245 -#define HW_REG_VRAMCNT_G 0x04000246 -#define HW_REG_WRAMCNT 0x04000247 -#define HW_REG_VRAMCNT_H 0x04000248 -#define HW_REG_VRAMCNT_I 0x04000249 - -#define HW_REG_DISPCNT 0x04000000 -#define HW_REG_DISPSTAT 0x04000004 -#define HW_REG_DISPCNT_2D 0x04001000 - -#define HW_REG_DISP3DCNT 0x04000060 - -#define HW_REG_BG2PA_A 0x04000020 -#define HW_REG_BG2PD_A 0x04000026 -#define HW_REG_BG3PA_A 0x04000030 -#define HW_REG_BG3PD_A 0x04000036 -#define HW_REG_BG2PA_B 0x04001020 -#define HW_REG_BG2PD_B 0x04001026 -#define HW_REG_BG3PA_B 0x04001030 -#define HW_REG_BG3PD_B 0x04001036 - -#define HW_REG_BG0CNT_A 0x04000008 -#define HW_REG_BG1CNT_A 0x0400000A -#define HW_REG_BG2CNT_A 0x0400000C -#define HW_REG_BG3CNT_A 0x0400000E - -#define HW_REG_BG0CNT_B 0x04001008 -#define HW_REG_BG1CNT_B 0x0400100A -#define HW_REG_BG2CNT_B 0x0400100C -#define HW_REG_BG3CNT_B 0x0400100E - -#define HW_REG_DISPCNT_A 0x04000000 -#define HW_REG_DISPCNT_B 0x04001000 - -//TODO: wait for register commit and replace these -#define SETREG8(x, y) ((*(vu8 *)x) = y) -#define SETREG16(x, y) ((*(vu16 *)x) = y) -#define SETREG32(x, y) ((*(vu32 *)x) = y) -#define SETREG64(x, y) ((*(vu64 *)x) = y) - -#define READREG8(x) (*(vu8 *)x) -#define READREG16(x) (*(vu16 *)x) -#define READREG32(x) (*(vu32 *)x) -#define READREG64(x) (*(vu64 *)x) - static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ if (var != -1 && size > 0x1C) { -- cgit v1.2.3 From 2e1c3ccd3ff3035acc98b34c2b29ba5c865e6194 Mon Sep 17 00:00:00 2001 From: Made Date: Sun, 17 May 2020 01:40:01 +0200 Subject: struct defs --- arm9/lib/include/gx.h | 80 ++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 36 deletions(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 58e4c35f..82f07a62 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -21,6 +21,12 @@ void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); //TODO: Add defines for GX commands, add structs/unions for HW registers +//TODO: structs +//TODO: useful macros +//TODO: inline functions +//TODO: enums +//TODO: function signatures + static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ if (var != -1 && size > 0x1C) @@ -55,35 +61,37 @@ static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, vo } } -struct DL +struct GXDLInfo { - 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 + u8 *curr_cmd; + u32 *curr_param; + u32 *bottom; + u32 length; + BOOL param0_cmd_flg; }; -struct VRAM_banks + +struct GX_State { - 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 + u16 lcdc; + u16 bg; + u16 obj; + u16 arm7; + u16 tex; + u16 texPltt; + u16 clrImg; + u16 bgExtPltt; + u16 objExtPltt; + + u16 sub_bg; + u16 sub_obj; + u16 sub_bgExtPltt; + u16 sub_objExtPltt; }; //GX_g3 -void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct DL *displaylist); +void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct GXDLInfo *displaylist); //GX_g3_util void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); @@ -113,20 +121,20 @@ 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); +void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_PushMtx(struct GXDLInfo *displaylist); +void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); +void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); +void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); +void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); +void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); +void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); +void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); +void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); +void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); +void G3B_Begin(struct GXDLInfo * displaylist, u32 type); +void G3B_End(struct GXDLInfo * displaylist); //GX_asm void GX_SendFifo48B(void *src, void *dst); -- cgit v1.2.3 From 648c9421d8ecbd8642f4ae393ab8add89fb3dc00 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:10:36 +0200 Subject: Add enums and some other stuff and split header --- arm9/lib/include/gx.h | 406 +++++++++++++++++++------------------------------- 1 file changed, 152 insertions(+), 254 deletions(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 82f07a62..877e5bb2 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -4,286 +4,184 @@ #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 -//TODO: structs -//TODO: useful macros -//TODO: inline functions -//TODO: enums -//TODO: function signatures +//DONE: Add defines for GX commands, add structs/unions for HW registers +//DONE: structs +//DONE: useful macros +//DONE: inline functions used in sdk +//DONE: enums +//DONE: maybe some function signatures +//TODO: proper global names + +#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" +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_16(u32 var, void *src, void *dst, u32 size){ - if (var != -1 && size > 0x1C) - { - MI_DmaCopy16(var, src, dst, size); - } - else +typedef union +{ + u32 raw; + struct { - MIi_CpuCopy16(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(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 _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; -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 - { - MIi_CpuCopy32(src, dst, size); - } +typedef enum +{ + 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 GXDLInfo +typedef enum { - u8 *curr_cmd; - u32 *curr_param; - u32 *bottom; - u32 length; - BOOL param0_cmd_flg; -}; - + GX_BG0_AS_2D = 0, + GX_BG0_AS_3D = 1 +} +GXBG0As; -struct GX_State +typedef enum { - u16 lcdc; - u16 bg; - u16 obj; - u16 arm7; - u16 tex; - u16 texPltt; - u16 clrImg; - u16 bgExtPltt; - u16 objExtPltt; - - u16 sub_bg; - u16 sub_obj; - u16 sub_bgExtPltt; - u16 sub_objExtPltt; -}; - -//GX_g3 -void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct GXDLInfo *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 GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_PushMtx(struct GXDLInfo *displaylist); -void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); -void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); -void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); -void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); -void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); -void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); -void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); -void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); -void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); -void G3B_Begin(struct GXDLInfo * displaylist, u32 type); -void G3B_End(struct GXDLInfo * 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_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(); + 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 -- cgit v1.2.3 From 88e486100e449d8960894c9e30c4f21489ccbc31 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:33:11 +0200 Subject: rename main GX header --- arm9/lib/include/gx.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'arm9/lib/include/gx.h') diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 877e5bb2..8abe4e40 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -20,14 +20,6 @@ void MIi_CpuCopy32(const void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//DONE: Add defines for GX commands, add structs/unions for HW registers -//DONE: structs -//DONE: useful macros -//DONE: inline functions used in sdk -//DONE: enums -//DONE: maybe some function signatures -//TODO: proper global names - #include "GXcommon.h" #include "GX_struct_2d.h" #include "GX_g3.h" -- cgit v1.2.3