summaryrefslogtreecommitdiff
path: root/arm9/lib
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib')
-rw-r--r--arm9/lib/include/GX_asm.h6
-rw-r--r--arm9/lib/include/GX_bgcnt.h347
-rw-r--r--arm9/lib/include/GX_dma.h53
-rw-r--r--arm9/lib/include/GX_g2.h14
-rw-r--r--arm9/lib/include/GX_g3.h184
-rw-r--r--arm9/lib/include/GX_g3_util.h11
-rw-r--r--arm9/lib/include/GX_g3b.h21
-rw-r--r--arm9/lib/include/GX_g3imm.h10
-rw-r--r--arm9/lib/include/GX_g3x.h69
-rw-r--r--arm9/lib/include/GX_load2d.h41
-rw-r--r--arm9/lib/include/GX_load3d.h15
-rw-r--r--arm9/lib/include/GX_state.h24
-rw-r--r--arm9/lib/include/GX_struct_2d.h243
-rw-r--r--arm9/lib/include/GX_vramcnt.h57
-rw-r--r--arm9/lib/include/GXcommon.h29
-rw-r--r--arm9/lib/include/OS_interrupt.h5
-rw-r--r--arm9/lib/include/gx.h392
-rw-r--r--arm9/lib/src/GX.c38
-rw-r--r--arm9/lib/src/GX_asm.c2
-rw-r--r--arm9/lib/src/GX_bgcnt.c2
-rw-r--r--arm9/lib/src/GX_g2.c2
-rw-r--r--arm9/lib/src/GX_g3.c38
-rw-r--r--arm9/lib/src/GX_g3_util.c2
-rw-r--r--arm9/lib/src/GX_g3b.c132
-rw-r--r--arm9/lib/src/GX_g3imm.c2
-rw-r--r--arm9/lib/src/GX_g3x.c10
-rw-r--r--arm9/lib/src/GX_load2d.c136
-rw-r--r--arm9/lib/src/GX_load3d.c117
-rw-r--r--arm9/lib/src/GX_state.c30
-rw-r--r--arm9/lib/src/GX_vramcnt.c154
-rw-r--r--arm9/lib/src/OS_init.c1
-rw-r--r--arm9/lib/src/OS_interrupt.c56
-rw-r--r--arm9/lib/src/OS_reset.c5
33 files changed, 1662 insertions, 586 deletions
diff --git a/arm9/lib/include/GX_asm.h b/arm9/lib/include/GX_asm.h
new file mode 100644
index 00000000..d2622508
--- /dev/null
+++ b/arm9/lib/include/GX_asm.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_GX_ASM_H
+#define GUARD_GX_ASM_H
+
+void GX_SendFifo48B(register void *pSrc, register void *pDest);
+
+#endif //GUARD_GX_ASM_H
diff --git a/arm9/lib/include/GX_bgcnt.h b/arm9/lib/include/GX_bgcnt.h
new file mode 100644
index 00000000..a581443e
--- /dev/null
+++ b/arm9/lib/include/GX_bgcnt.h
@@ -0,0 +1,347 @@
+#ifndef GUARD_GX_BGCNT_H
+#define GUARD_GX_BGCNT_H
+
+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();
+
+typedef union
+{
+ u16 raw;
+ struct
+ {
+ u16 priority:2;
+ u16 charBase:4;
+ u16 mosaic:1;
+ u16 colorMode:1;
+ u16 screenBase:5;
+ u16 bgExtPltt:1;
+ u16 screenSize:2;
+ };
+}
+GXBg01Control;
+
+typedef union
+{
+ u16 raw;
+ struct
+ {
+ u16 priority:2;
+ u16 charBase:4;
+ u16 mosaic:1;
+ u16 colorMode:1;
+ u16 screenBase:5;
+ u16 _reserve:1;
+ u16 screenSize:2;
+ };
+}
+GXBg23ControlText;
+
+typedef union
+{
+ u16 raw;
+ struct
+ {
+ u16 priority:2;
+ u16 charBase:4;
+ u16 mosaic:1;
+ u16 _reserve:1;
+ u16 screenBase:5;
+ u16 areaOver:1;
+ u16 screenSize:2;
+ };
+}
+GXBg23ControlAffine;
+
+typedef union
+{
+ u16 raw;
+ struct
+ {
+ u16 priority:2;
+ u16 _reserve1:1;
+ u16 charBase:3;
+ u16 mosaic:1;
+ u16 _reserve2:1;
+ u16 screenBase:5;
+ u16 areaOver:1;
+ u16 screenSize:2;
+ };
+}
+GXBg23Control256x16Pltt;
+
+
+typedef union
+{
+ u16 raw;
+ struct
+ {
+ u16 priority:2;
+ u16 _reserve1:4;
+ u16 mosaic:1;
+ u16 _reserve2:1;
+ u16 screenBase:5;
+ u16 areaOver:1;
+ u16 screenSize:2;
+ };
+}
+GXBg23Control256Bmp, GXBg23ControlDCBmp;
+
+typedef union
+{
+ u16 raw;
+ struct
+ {
+ u16 priority:2;
+ u16 _reserve1:4;
+ u16 mosaic:1;
+ u16 _reserve2:6;
+ u16 areaOver:1;
+ u16 screenSize:2;
+ };
+}
+GXBg2ControlLargeBmp;
+
+
+
+typedef enum
+{
+ GX_BG_SCRSIZE_TEXT_256x256 = 0,
+ GX_BG_SCRSIZE_TEXT_512x256 = 1,
+ GX_BG_SCRSIZE_TEXT_256x512 = 2,
+ GX_BG_SCRSIZE_TEXT_512x512 = 3
+}
+GXBGScrSizeText;
+
+typedef enum
+{
+ GX_BG_SCRSIZE_AFFINE_128x128 = 0,
+ GX_BG_SCRSIZE_AFFINE_256x256 = 1,
+ GX_BG_SCRSIZE_AFFINE_512x512 = 2,
+ GX_BG_SCRSIZE_AFFINE_1024x1024 = 3
+}
+GXBGScrSizeAffine;
+
+typedef enum
+{
+ GX_BG_SCRSIZE_256x16PLTT_128x128 = 0,
+ GX_BG_SCRSIZE_256x16PLTT_256x256 = 1,
+ GX_BG_SCRSIZE_256x16PLTT_512x512 = 2,
+ GX_BG_SCRSIZE_256x16PLTT_1024x1024 = 3
+}
+GXBGScrSize256x16Pltt;
+
+typedef enum
+{
+ GX_BG_SCRSIZE_256BMP_128x128 = 0,
+ GX_BG_SCRSIZE_256BMP_256x256 = 1,
+ GX_BG_SCRSIZE_256BMP_512x256 = 2,
+ GX_BG_SCRSIZE_256BMP_512x512 = 3
+}
+GXBGScrSize256Bmp;
+
+typedef enum
+{
+ GX_BG_SCRSIZE_DCBMP_128x128 = 0,
+ GX_BG_SCRSIZE_DCBMP_256x256 = 1,
+ GX_BG_SCRSIZE_DCBMP_512x256 = 2,
+ GX_BG_SCRSIZE_DCBMP_512x512 = 3
+}
+GXBGScrSizeDcBmp;
+
+typedef enum
+{
+ GX_BG_SCRSIZE_LARGEBMP_512x1024 = 0,
+ GX_BG_SCRSIZE_LARGEBMP_1024x512 = 1
+}
+GXBGScrSizeLargeBmp;
+
+typedef enum
+{
+ GX_BG_COLORMODE_16 = 0,
+ GX_BG_COLORMODE_256 = 1
+}
+GXBGColorMode;
+
+typedef enum
+{
+ GX_BG_AREAOVER_XLU = 0,
+ GX_BG_AREAOVER_REPEAT = 1
+}
+GXBGAreaOver;
+
+typedef enum
+{
+ GX_BG_CHARBASE_0x00000 = 0,
+ GX_BG_CHARBASE_0x04000 = 1,
+ GX_BG_CHARBASE_0x08000 = 2,
+ GX_BG_CHARBASE_0x0c000 = 3,
+ GX_BG_CHARBASE_0x10000 = 4,
+ GX_BG_CHARBASE_0x14000 = 5,
+ GX_BG_CHARBASE_0x18000 = 6,
+ GX_BG_CHARBASE_0x1c000 = 7,
+ GX_BG_CHARBASE_0x20000 = 8,
+ GX_BG_CHARBASE_0x24000 = 9,
+ GX_BG_CHARBASE_0x28000 = 10,
+ GX_BG_CHARBASE_0x2c000 = 11,
+ GX_BG_CHARBASE_0x30000 = 12,
+ GX_BG_CHARBASE_0x34000 = 13,
+ GX_BG_CHARBASE_0x38000 = 14,
+ GX_BG_CHARBASE_0x3c000 = 15
+}
+GXBGCharBase;
+
+typedef enum
+{
+ GX_BG_SCRBASE_0x0000 = 0,
+ GX_BG_SCRBASE_0x0800 = 1,
+ GX_BG_SCRBASE_0x1000 = 2,
+ GX_BG_SCRBASE_0x1800 = 3,
+ GX_BG_SCRBASE_0x2000 = 4,
+ GX_BG_SCRBASE_0x2800 = 5,
+ GX_BG_SCRBASE_0x3000 = 6,
+ GX_BG_SCRBASE_0x3800 = 7,
+ GX_BG_SCRBASE_0x4000 = 8,
+ GX_BG_SCRBASE_0x4800 = 9,
+ GX_BG_SCRBASE_0x5000 = 10,
+ GX_BG_SCRBASE_0x5800 = 11,
+ GX_BG_SCRBASE_0x6000 = 12,
+ GX_BG_SCRBASE_0x6800 = 13,
+ GX_BG_SCRBASE_0x7000 = 14,
+ GX_BG_SCRBASE_0x7800 = 15,
+ GX_BG_SCRBASE_0x8000 = 16,
+ GX_BG_SCRBASE_0x8800 = 17,
+ GX_BG_SCRBASE_0x9000 = 18,
+ GX_BG_SCRBASE_0x9800 = 19,
+ GX_BG_SCRBASE_0xa000 = 20,
+ GX_BG_SCRBASE_0xa800 = 21,
+ GX_BG_SCRBASE_0xb000 = 22,
+ GX_BG_SCRBASE_0xb800 = 23,
+ GX_BG_SCRBASE_0xc000 = 24,
+ GX_BG_SCRBASE_0xc800 = 25,
+ GX_BG_SCRBASE_0xd000 = 26,
+ GX_BG_SCRBASE_0xd800 = 27,
+ GX_BG_SCRBASE_0xe000 = 28,
+ GX_BG_SCRBASE_0xe800 = 29,
+ GX_BG_SCRBASE_0xf000 = 30,
+ GX_BG_SCRBASE_0xf800 = 31
+}
+GXBGScrBase;
+
+typedef enum
+{
+ GX_BG_BMPSCRBASE_0x00000 = 0,
+ GX_BG_BMPSCRBASE_0x04000 = 1,
+ GX_BG_BMPSCRBASE_0x08000 = 2,
+ GX_BG_BMPSCRBASE_0x0c000 = 3,
+ GX_BG_BMPSCRBASE_0x10000 = 4,
+ GX_BG_BMPSCRBASE_0x14000 = 5,
+ GX_BG_BMPSCRBASE_0x18000 = 6,
+ GX_BG_BMPSCRBASE_0x1c000 = 7,
+ GX_BG_BMPSCRBASE_0x20000 = 8,
+ GX_BG_BMPSCRBASE_0x24000 = 9,
+ GX_BG_BMPSCRBASE_0x28000 = 10,
+ GX_BG_BMPSCRBASE_0x2c000 = 11,
+ GX_BG_BMPSCRBASE_0x30000 = 12,
+ GX_BG_BMPSCRBASE_0x34000 = 13,
+ GX_BG_BMPSCRBASE_0x38000 = 14,
+ GX_BG_BMPSCRBASE_0x3c000 = 15,
+ GX_BG_BMPSCRBASE_0x40000 = 16,
+ GX_BG_BMPSCRBASE_0x44000 = 17,
+ GX_BG_BMPSCRBASE_0x48000 = 18,
+ GX_BG_BMPSCRBASE_0x4c000 = 19,
+ GX_BG_BMPSCRBASE_0x50000 = 20,
+ GX_BG_BMPSCRBASE_0x54000 = 21,
+ GX_BG_BMPSCRBASE_0x58000 = 22,
+ GX_BG_BMPSCRBASE_0x5c000 = 23,
+ GX_BG_BMPSCRBASE_0x60000 = 24,
+ GX_BG_BMPSCRBASE_0x64000 = 25,
+ GX_BG_BMPSCRBASE_0x68000 = 26,
+ GX_BG_BMPSCRBASE_0x6c000 = 27,
+ GX_BG_BMPSCRBASE_0x70000 = 28,
+ GX_BG_BMPSCRBASE_0x74000 = 29,
+ GX_BG_BMPSCRBASE_0x78000 = 30,
+ GX_BG_BMPSCRBASE_0x7c000 = 31
+}
+GXBGBmpScrBase;
+
+typedef enum
+{
+ GX_BG_EXTPLTT_01 = 0,
+ GX_BG_EXTPLTT_23 = 1
+}
+GXBGExtPltt;
+
+//GX_capture
+typedef enum
+{
+ GX_CAPTURE_DEST_VRAM_A_0x00000 = 0,
+ GX_CAPTURE_DEST_VRAM_B_0x00000 = 1,
+ GX_CAPTURE_DEST_VRAM_C_0x00000 = 2,
+ GX_CAPTURE_DEST_VRAM_D_0x00000 = 3,
+
+ GX_CAPTURE_DEST_VRAM_A_0x08000 = 4,
+ GX_CAPTURE_DEST_VRAM_B_0x08000 = 5,
+ GX_CAPTURE_DEST_VRAM_C_0x08000 = 6,
+ GX_CAPTURE_DEST_VRAM_D_0x08000 = 7,
+
+ GX_CAPTURE_DEST_VRAM_A_0x10000 = 8,
+ GX_CAPTURE_DEST_VRAM_B_0x10000 = 9,
+ GX_CAPTURE_DEST_VRAM_C_0x10000 = 10,
+ GX_CAPTURE_DEST_VRAM_D_0x10000 = 11,
+
+ GX_CAPTURE_DEST_VRAM_A_0x18000 = 12,
+ GX_CAPTURE_DEST_VRAM_B_0x18000 = 13,
+ GX_CAPTURE_DEST_VRAM_C_0x18000 = 14,
+ GX_CAPTURE_DEST_VRAM_D_0x18000 = 15
+}
+GXCaptureDest;
+
+typedef enum
+{
+ GX_CAPTURE_SIZE_128x128 = 0,
+ GX_CAPTURE_SIZE_256x64 = 1,
+ GX_CAPTURE_SIZE_256x128 = 2,
+ GX_CAPTURE_SIZE_256x192 = 3
+}
+GXCaptureSize;
+
+typedef enum
+{
+ GX_CAPTURE_SRCA_2D3D = 0,
+ GX_CAPTURE_SRCA_3D = 1
+}
+GXCaptureSrcA;
+
+typedef enum
+{
+ GX_CAPTURE_SRCB_VRAM_0x00000 = 0,
+ GX_CAPTURE_SRCB_MRAM = 1,
+ GX_CAPTURE_SRCB_VRAM_0x08000 = 2,
+ GX_CAPTURE_SRCB_VRAM_0x10000 = 4,
+ GX_CAPTURE_SRCB_VRAM_0x18000 = 6
+}
+GXCaptureSrcB;
+
+typedef enum
+{
+ GX_CAPTURE_MODE_A = 0,
+ GX_CAPTURE_MODE_B = 1,
+ GX_CAPTURE_MODE_AB = 2
+}
+GXCaptureMode;
+
+#endif //GUARD_GX_BGCNT_H
diff --git a/arm9/lib/include/GX_dma.h b/arm9/lib/include/GX_dma.h
new file mode 100644
index 00000000..98f6a4a2
--- /dev/null
+++ b/arm9/lib/include/GX_dma.h
@@ -0,0 +1,53 @@
+#ifndef GUARD_GX_DMA_H
+#define GUARD_GX_DMA_H
+
+#define GX_DMA_NOT_USE -1
+#define GX_CPU_FASTER32_SIZE 0x30
+#define GX_CPU_FASTER16_SIZE 0x1C
+
+static inline void GXi_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size)
+{
+ if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER32_SIZE)
+ {
+ MI_DmaCopy32(dmaNo, src, dest, size);
+ }
+ else
+ {
+ MIi_CpuCopy32(src, dest, size);
+ }
+}
+
+static inline void GXi_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size)
+{
+ if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER16_SIZE)
+ {
+ MI_DmaCopy16(dmaNo, src, dest, size);
+ }
+ else
+ {
+ MIi_CpuCopy16(src, dest, size);
+ }
+}
+
+static inline void GXi_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size,
+ MIDmaCallback callback, void *arg)
+{
+ if (dmaNo != GX_DMA_NOT_USE)
+ {
+ MI_DmaCopy32Async(dmaNo, src, dest, size, callback, arg);
+ }
+ else
+ {
+ MIi_CpuCopy32(src, dest, size);
+ }
+}
+
+static inline void GXi_WaitDma(u32 dmaNo)
+{
+ if (dmaNo != GX_DMA_NOT_USE)
+ {
+ MI_WaitDma(dmaNo);
+ }
+}
+
+#endif //GUARD_GX_DMA_H
diff --git a/arm9/lib/include/GX_g2.h b/arm9/lib/include/GX_g2.h
new file mode 100644
index 00000000..f8d86df0
--- /dev/null
+++ b/arm9/lib/include/GX_g2.h
@@ -0,0 +1,14 @@
+#ifndef GUARD_GX_G2_H
+#define GUARD_GX_G2_H
+
+#include "fx.h"
+
+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);
+
+//The g2 and g2_oam headers contain a lot of inline functions and enums that may want to be ported over at some point
+
+#endif //GUARD_GX_G2_H
diff --git a/arm9/lib/include/GX_g3.h b/arm9/lib/include/GX_g3.h
new file mode 100644
index 00000000..765ecc64
--- /dev/null
+++ b/arm9/lib/include/GX_g3.h
@@ -0,0 +1,184 @@
+#ifndef GUARD_GX_G3_H
+#define GUARD_GX_G3_H
+
+struct GXDLInfo
+{
+ u8 *curr_cmd;
+ u32 *curr_param;
+ u32 *bottom;
+ u32 length;
+ BOOL param0_cmd_flg;
+};
+
+void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2);
+s32 G3_EndMakeDL(struct GXDLInfo *displaylist);
+
+typedef enum
+{
+ GX_MTXMODE_PROJECTION = 0,
+ GX_MTXMODE_POSITION = 1,
+ GX_MTXMODE_POSITION_VECTOR = 2,
+ GX_MTXMODE_TEXTURE = 3
+}
+GXMtxMode;
+
+typedef enum
+{
+ GX_BEGIN_TRIANGLES = 0,
+ GX_BEGIN_QUADS = 1,
+ GX_BEGIN_TRIANGLE_STRIP = 2,
+ GX_BEGIN_QUAD_STRIP = 3
+}
+GXBegin;
+
+typedef enum
+{
+ GX_SORTMODE_AUTO = 0,
+ GX_SORTMODE_MANUAL = 1
+}
+GXSortMode;
+
+typedef enum
+{
+ GX_BUFFERMODE_Z = 0,
+ GX_BUFFERMODE_W = 1
+}
+GXBufferMode;
+
+typedef enum
+{
+ GX_LIGHTMASK_NONE = 0,
+ GX_LIGHTMASK_0 = 1,
+ GX_LIGHTMASK_1 = 2,
+ GX_LIGHTMASK_01 = 3,
+ GX_LIGHTMASK_2 = 4,
+ GX_LIGHTMASK_02 = 5,
+ GX_LIGHTMASK_12 = 6,
+ GX_LIGHTMASK_012 = 7,
+ GX_LIGHTMASK_3 = 8,
+ GX_LIGHTMASK_03 = 9,
+ GX_LIGHTMASK_13 = 10,
+ GX_LIGHTMASK_013 = 11,
+ GX_LIGHTMASK_23 = 12,
+ GX_LIGHTMASK_023 = 13,
+ GX_LIGHTMASK_123 = 14,
+ GX_LIGHTMASK_0123 = 15
+}
+GXLightMask;
+
+typedef enum
+{
+ GX_POLYGONMODE_MODULATE = 0,
+ GX_POLYGONMODE_DECAL = 1,
+ GX_POLYGONMODE_TOON = 2,
+ GX_POLYGONMODE_SHADOW = 3
+}
+GXPolygonMode;
+
+typedef enum
+{
+ GX_CULL_ALL = 0,
+ GX_CULL_FRONT = 1,
+ GX_CULL_BACK = 2,
+ GX_CULL_NONE = 3
+}
+GXCull;
+
+typedef enum
+{
+ GX_TEXREPEAT_NONE = 0,
+ GX_TEXREPEAT_S = 1,
+ GX_TEXREPEAT_T = 2,
+ GX_TEXREPEAT_ST = 3
+}
+GXTexRepeat;
+
+typedef enum
+{
+ GX_TEXFLIP_NONE = 0,
+ GX_TEXFLIP_S = 1,
+ GX_TEXFLIP_T = 2,
+ GX_TEXFLIP_ST = 3
+}
+GXTexFlip;
+
+typedef enum
+{
+ GX_TEXSIZE_S8 = 0,
+ GX_TEXSIZE_S16 = 1,
+ GX_TEXSIZE_S32 = 2,
+ GX_TEXSIZE_S64 = 3,
+ GX_TEXSIZE_S128 = 4,
+ GX_TEXSIZE_S256 = 5,
+ GX_TEXSIZE_S512 = 6,
+ GX_TEXSIZE_S1024 = 7
+}
+GXTexSizeS;
+
+typedef enum
+{
+ GX_TEXSIZE_T8 = 0,
+ GX_TEXSIZE_T16 = 1,
+ GX_TEXSIZE_T32 = 2,
+ GX_TEXSIZE_T64 = 3,
+ GX_TEXSIZE_T128 = 4,
+ GX_TEXSIZE_T256 = 5,
+ GX_TEXSIZE_T512 = 6,
+ GX_TEXSIZE_T1024 = 7
+}
+GXTexSizeT;
+
+typedef enum
+{
+ GX_TEXFMT_NONE = 0,
+ GX_TEXFMT_A3I5 = 1,
+ GX_TEXFMT_PLTT4 = 2,
+ GX_TEXFMT_PLTT16 = 3,
+ GX_TEXFMT_PLTT256 = 4,
+ GX_TEXFMT_COMP4x4 = 5,
+ GX_TEXFMT_A5I3 = 6,
+ GX_TEXFMT_DIRECT = 7
+}
+GXTexFmt;
+
+typedef enum
+{
+ GX_TEXPLTTCOLOR0_USE = 0,
+ GX_TEXPLTTCOLOR0_TRNS = 1
+}
+GXTexPlttColor0;
+
+typedef enum
+{
+ GX_TEXGEN_NONE = 0,
+ GX_TEXGEN_TEXCOORD = 1,
+ GX_TEXGEN_NORMAL = 2,
+ GX_TEXGEN_VERTEX = 3
+}
+GXTexGen;
+
+typedef enum
+{
+ GX_LIGHTID_0 = 0,
+ GX_LIGHTID_1 = 1,
+ GX_LIGHTID_2 = 2,
+ GX_LIGHTID_3 = 3
+}
+GXLightId;
+
+typedef union
+{
+ u32 val[3];
+ struct
+ {
+ fx16 x;
+ fx16 y;
+ fx16 z;
+ fx16 width;
+ fx16 height;
+ fx16 depth;
+ };
+}
+GXBoxTestParam;
+
+#endif //GUARD_GX_G3_H
diff --git a/arm9/lib/include/GX_g3_util.h b/arm9/lib/include/GX_g3_util.h
new file mode 100644
index 00000000..a9bc4c17
--- /dev/null
+++ b/arm9/lib/include/GX_g3_util.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_GX_G3_UTIL_H
+#define GUARD_GX_G3_UTIL_H
+
+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);
+
+#endif //GUARD_GX_G3_UTIL_H
diff --git a/arm9/lib/include/GX_g3b.h b/arm9/lib/include/GX_g3b.h
new file mode 100644
index 00000000..d299ea34
--- /dev/null
+++ b/arm9/lib/include/GX_g3b.h
@@ -0,0 +1,21 @@
+#ifndef GUARD_GX_G3B_H
+#define GUARD_GX_G3B_H
+
+#include "GX_g3.h"
+
+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);
+
+#endif //GUARD_GX_G3B_H
diff --git a/arm9/lib/include/GX_g3imm.h b/arm9/lib/include/GX_g3imm.h
new file mode 100644
index 00000000..f811dc68
--- /dev/null
+++ b/arm9/lib/include/GX_g3imm.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_GX_G3IMM_H
+#define GUARD_GX_G3IMM_H
+
+#include "fx.h"
+
+void G3_LoadMtx43(struct Mtx43 *mtx);
+void G3_MultMtx43(struct Mtx43 *mtx);
+void G3_MultMtx33(struct Mtx33 *mtx);
+
+#endif //GUARD_GX_G3IMM_H
diff --git a/arm9/lib/include/GX_g3x.h b/arm9/lib/include/GX_g3x.h
new file mode 100644
index 00000000..4bd55831
--- /dev/null
+++ b/arm9/lib/include/GX_g3x.h
@@ -0,0 +1,69 @@
+#ifndef GUARD_GX_G3X_H
+#define GUARD_GX_G3X_H
+
+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);
+
+typedef enum
+{
+ GX_SHADING_TOON = 0,
+ GX_SHADING_HIGHLIGHT = 1
+}
+GXShading;
+
+typedef enum
+{
+ GX_FOGBLEND_COLOR_ALPHA = 0,
+ GX_FOGBLEND_ALPHA = 1
+}
+GXFogBlend;
+
+typedef enum
+{
+ GX_FOGSLOPE_0x8000 = 0,
+ GX_FOGSLOPE_0x4000 = 1,
+ GX_FOGSLOPE_0x2000 = 2,
+ GX_FOGSLOPE_0x1000 = 3,
+ GX_FOGSLOPE_0x0800 = 4,
+ GX_FOGSLOPE_0x0400 = 5,
+ GX_FOGSLOPE_0x0200 = 6,
+ GX_FOGSLOPE_0x0100 = 7,
+ GX_FOGSLOPE_0x0080 = 8,
+ GX_FOGSLOPE_0x0040 = 9,
+ GX_FOGSLOPE_0x0020 = 10
+}
+GXFogSlope;
+
+typedef enum
+{
+ GX_FIFOINTR_COND_DISABLE = 0,
+ GX_FIFOINTR_COND_UNDERHALF = 1,
+ GX_FIFOINTR_COND_EMPTY = 2
+}
+GXFifoIntrCond;
+
+typedef enum
+{
+ GX_FIFOSTAT_EMPTY = 6,
+ GX_FIFOSTAT_UNDERHALF = 2,
+ GX_FIFOSTAT_OVERHALF = 0,
+ GX_FIFOSTAT_FULL = 1
+}
+GXFifoStat;
+
+#endif //GUARD_GX_G3X_H
diff --git a/arm9/lib/include/GX_load2d.h b/arm9/lib/include/GX_load2d.h
new file mode 100644
index 00000000..3c9fb5cb
--- /dev/null
+++ b/arm9/lib/include/GX_load2d.h
@@ -0,0 +1,41 @@
+#ifndef GUARD_GX_LOAD2D_H
+#define GUARD_GX_LOAD2D_H
+
+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();
+
+#endif //GUARD_GX_LOAD2D_H
diff --git a/arm9/lib/include/GX_load3d.h b/arm9/lib/include/GX_load3d.h
new file mode 100644
index 00000000..09fd296a
--- /dev/null
+++ b/arm9/lib/include/GX_load3d.h
@@ -0,0 +1,15 @@
+#ifndef GUARD_GX_LOAD3D_H
+#define GUARD_GX_LOAD3D_H
+
+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();
+
+#endif //GUARD_GX_LOAD3D_H
diff --git a/arm9/lib/include/GX_state.h b/arm9/lib/include/GX_state.h
new file mode 100644
index 00000000..c94b6c07
--- /dev/null
+++ b/arm9/lib/include/GX_state.h
@@ -0,0 +1,24 @@
+#ifndef GUARD_GX_STATE_H
+#define GUARD_GX_STATE_H
+
+struct GX_State
+{
+ 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;
+};
+
+void GX_InitGXState();
+
+#endif //GUARD_GX_STATE_H
diff --git a/arm9/lib/include/GX_struct_2d.h b/arm9/lib/include/GX_struct_2d.h
new file mode 100644
index 00000000..3b544927
--- /dev/null
+++ b/arm9/lib/include/GX_struct_2d.h
@@ -0,0 +1,243 @@
+#ifndef GUARD_GX_STRUCT_2D_H
+#define GUARD_GX_STRUCT_2D_H
+
+typedef u16 GXScrFmtText;
+#define GX_SCRFMT_TEXT_CHARNAME_SHIFT (0)
+#define GX_SCRFMT_TEXT_CHARNAME_MASK (0x03ff)
+#define GX_SCRFMT_TEXT_HF_SHIFT (10)
+#define GX_SCRFMT_TEXT_HF_MASK (0x0400)
+#define GX_SCRFMT_TEXT_VF_SHIFT (11)
+#define GX_SCRFMT_TEXT_VF_MASK (0x0800)
+#define GX_SCRFMT_TEXT_COLORPLTT_SHIFT (12)
+#define GX_SCRFMT_TEXT_COLORPLTT_MASK (0xf000)
+#define GX_SCRFMT_TEXT(pltt, vf, hf, name) \
+ ((u16)(((name) << GX_SCRFMT_TEXT_CHARNAME_SHIFT) | \
+ ((hf) << GX_SCRFMT_TEXT_HF_SHIFT) | \
+ ((vf) << GX_SCRFMT_TEXT_VF_SHIFT) | \
+ ((pltt) << GX_SCRFMT_TEXT_COLORPLTT_SHIFT)))
+
+typedef u8 GXScrFmtAffine;
+#define GX_SCRFMT_AFFINE_CHARNAME_SHIFT (0)
+#define GX_SCRFMT_AFFINE_CHARNAME_MASK (0xff)
+
+typedef u8 GXScrFmt256Bmp;
+#define GX_SCRFMT_256BMP_COLORNO_SHIFT (0)
+#define GX_SCRFMT_256BMP_COLORNO_MASK (0xff)
+
+typedef union
+{
+ u32 data32[8];
+ u16 data16[16];
+ u8 data8[32];
+}
+GXCharFmt16;
+
+typedef union
+{
+ u32 data32[16];
+ u16 data16[32];
+ u8 data8[64];
+}
+GXCharFmt256;
+
+typedef union
+{
+ u16 data16[16];
+ u32 data32[8];
+ GXRgb rgb[16];
+}
+GXBGPltt16;
+
+typedef GXBGPltt16 GXOBJPltt16;
+
+typedef union
+{
+ u16 data16[256];
+ u32 data32[128];
+ GXRgb rgb[256];
+}
+GXBGPltt256;
+
+typedef GXBGPltt256 GXOBJPltt256;
+
+typedef union
+{
+ u16 data16[32 * 32];
+ u32 data32[32 * 32 / 2];
+ GXScrFmtText scr[32][32];
+}
+GXScrText32x32;
+
+typedef union
+{
+ u16 data16[64 * 32];
+ u32 data32[64 * 32 / 2];
+ GXScrFmtText scr[64][32];
+}
+GXScrText64x32;
+
+typedef union
+{
+ // 4K bytes
+ u16 data16[32 * 64];
+ u32 data32[32 * 64 / 2];
+ GXScrFmtText scr[32][64];
+}
+GXScrText32x64;
+
+typedef union
+{
+ u16 data16[64 * 64];
+ u32 data32[64 * 64 / 2];
+ GXScrFmtText scr[64][64];
+}
+GXScrText64x64;
+
+typedef union
+{
+ u8 data8[16 * 16];
+ u32 data32[16 * 16 / 4];
+ GXScrFmtAffine scr[16][16];
+}
+GXScrAffine16x16;
+
+typedef union
+{
+ u8 data8[32 * 32];
+ u32 data32[32 * 32 / 4];
+ GXScrFmtAffine scr[32][32];
+}
+GXScrAffine32x32;
+
+typedef union
+{
+ u8 data8[64 * 64];
+ u32 data32[64 * 64 / 4];
+ GXScrFmtAffine scr[64][64];
+}
+GXScrAffine64x64;
+
+typedef union
+{
+ u8 data8[128 * 128];
+ u32 data32[128 * 128 / 4];
+ GXScrFmtAffine scr[128][128];
+}
+GXScrAffine128x128;
+
+typedef union
+{
+ u8 data8[128 * 128];
+ u32 data32[128 * 128 / 4];
+ GXScrFmt256Bmp scr[128][128];
+}
+GXScr256Bmp128x128;
+
+typedef union
+{
+ u8 data8[256 * 256];
+ u32 data32[256 * 256 / 4];
+ GXScrFmt256Bmp scr[256][256];
+}
+GXScr256Bmp256x256;
+
+typedef union
+{
+ u8 data8[512 * 256];
+ u32 data32[512 * 256 / 4];
+ GXScrFmt256Bmp scr[512][256];
+}
+GXScr256Bmp512x256;
+
+typedef union
+{
+ u8 data8[512 * 512];
+ u32 data32[512 * 512 / 4];
+ GXScrFmt256Bmp scr[512][512];
+}
+GXScr256Bmp512x512;
+
+typedef union
+{
+ u16 data16[128 * 128];
+ u32 data32[128 * 128 / 2];
+ GXRgba scr[128][128];
+}
+GXScrDCBmp128x128;
+
+typedef union
+{
+ u16 data16[256 * 256];
+ u32 data32[256 * 256 / 2];
+ GXRgba scr[256][256];
+}
+GXScrDCBmp256x256;
+
+typedef union
+{
+ u16 data16[512 * 256];
+ u32 data32[512 * 256 / 2];
+ GXRgba scr[512][256];
+}
+GXScrDCBmp512x256;
+
+typedef union
+{
+ u16 data16[512 * 512];
+ u32 data32[512 * 512 / 2];
+ GXRgba scr[512][512];
+}
+GXScrDCBmp512x512;
+
+typedef struct
+{
+ GXCharFmt16 ch[1024];
+}
+GXCharBGText16;
+
+typedef struct
+{
+ GXCharFmt256 ch[1024];
+}
+GXCharBGText256;
+
+typedef struct
+{
+ GXCharFmt256 ch[256];
+}
+GXCharBGAffine256;
+
+typedef union
+{
+ GXBGPltt256 pltt256;
+ GXBGPltt16 pltt16[16];
+}
+GXBGStdPlttData;
+
+typedef union
+{
+ GXOBJPltt256 pltt256;
+ GXOBJPltt16 pltt16[16];
+}
+GXOBJStdPlttData;
+
+typedef struct
+{
+ GXBGStdPlttData bgPltt;
+ GXOBJStdPlttData objPltt;
+}
+GXStdPlttData;
+
+typedef struct
+{
+ GXBGPltt256 pltt256[16];
+}
+GXBGExtPlttData;
+
+typedef struct
+{
+ GXOBJPltt256 pltt256[16];
+}
+GXOBJExtPlttData;
+
+#endif //GUARD_GX_STRUCT_2D_H
diff --git a/arm9/lib/include/GX_vramcnt.h b/arm9/lib/include/GX_vramcnt.h
new file mode 100644
index 00000000..6fe677bc
--- /dev/null
+++ b/arm9/lib/include/GX_vramcnt.h
@@ -0,0 +1,57 @@
+#ifndef GUARD_GX_VRAMCNT_H
+#define GUARD_GX_VRAMCNT_H
+
+//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();
+
+#endif //GUARD_GX_VRAMCNT_H
diff --git a/arm9/lib/include/GXcommon.h b/arm9/lib/include/GXcommon.h
new file mode 100644
index 00000000..a83f4384
--- /dev/null
+++ b/arm9/lib/include/GXcommon.h
@@ -0,0 +1,29 @@
+#ifndef GUARD_GXCOMMON_H
+#define GUARD_GXCOMMON_H
+
+typedef u16 GXRgb;
+#define GXRGB_ASSERT(gxrgb) SDK_ASSERT(((gxrgb) & 0x8000) == 0)
+#define GX_RGB_R_SHIFT (0)
+#define GX_RGB_R_MASK (0x001f)
+#define GX_RGB_G_SHIFT (5)
+#define GX_RGB_G_MASK (0x03e0)
+#define GX_RGB_B_SHIFT (10)
+#define GX_RGB_B_MASK (0x7c00)
+#define GX_RGB(r, g, b) ((GXRgb)(((r) << GX_RGB_R_SHIFT) | \
+ ((g) << GX_RGB_G_SHIFT) | \
+ ((b) << GX_RGB_B_SHIFT)))
+
+typedef u16 GXRgba;
+#define GX_RGBA_R_SHIFT (0)
+#define GX_RGBA_R_MASK (0x001f)
+#define GX_RGBA_G_SHIFT (5)
+#define GX_RGBA_G_MASK (0x03e0)
+#define GX_RGBA_B_SHIFT (10)
+#define GX_RGBA_B_MASK (0x7c00)
+#define GX_RGBA_A_SHIFT (15)
+#define GX_RGBA_A_MASK (0x8000)
+#define GX_RGBA(r, g, b, a) ((GXRgba)(((r) << GX_RGBA_R_SHIFT) | \
+ ((g) << GX_RGBA_G_SHIFT) | \
+ ((b) << GX_RGBA_B_SHIFT) | \
+ ((a) << GX_RGBA_A_SHIFT)))
+#endif //GUARD_GXCOMMON_H
diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h
index 21ce2ea0..21ae8079 100644
--- a/arm9/lib/include/OS_interrupt.h
+++ b/arm9/lib/include/OS_interrupt.h
@@ -26,5 +26,10 @@ void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function);
OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit);
void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg);
void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg);
+OSIrqMask OS_SetIrqMask(OSIrqMask mask);
+OSIrqMask OS_EnableIrqMask(OSIrqMask mask);
+OSIrqMask OS_DisableIrqMask(OSIrqMask mask);
+OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask);
+void OS_SetIrqStackChecker(void);
#endif //POKEDIAMOND_OS_INTERRUPT_H
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
diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c
index 883dfe69..28c3cc01 100644
--- a/arm9/lib/src/GX.c
+++ b/arm9/lib/src/GX.c
@@ -1,11 +1,11 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-extern u16 UNK_021D33BC;
-extern u16 UNK_021D33C0;
-extern u32 UNK_02106814;
-extern u16 UNK_02106810;
+extern u16 GXi_VRamLockId;
+extern u16 sDispMode;
+extern u32 GXi_DmaId;
+extern u16 sIsDispOn;
ARM_FUNC void GX_Init(){
reg_GX_POWCNT |= 0x8000;
@@ -13,22 +13,22 @@ ARM_FUNC void GX_Init(){
reg_GX_POWCNT = reg_GX_POWCNT | 0x1;
GX_InitGXState();
u32 temp;
- while (UNK_021D33BC == 0)
+ while (GXi_VRamLockId == 0)
{
temp = OS_GetLockID();
if (temp == -3)
{
OS_Terminate();
}
- UNK_021D33BC = temp;
+ GXi_VRamLockId = temp;
}
reg_GX_DISPSTAT = 0x0;
reg_GX_DISPCNT = 0x0;
- if (UNK_02106814 != -1)
+ if (GXi_DmaId != -1)
{
- MI_DmaFill32(UNK_02106814, (void *)&reg_G2_BG0CNT, 0x0, 0x60);
+ MI_DmaFill32(GXi_DmaId, (void *)&reg_G2_BG0CNT, 0x0, 0x60);
reg_GX_MASTER_BRIGHT = 0x0;
- MI_DmaFill32(UNK_02106814, (void *)&reg_GXS_DB_DISPCNT, 0x0, 0x70);
+ MI_DmaFill32(GXi_DmaId, (void *)&reg_GXS_DB_DISPCNT, 0x0, 0x70);
}
else
{
@@ -74,16 +74,16 @@ ARM_FUNC u32 GX_VBlankIntr(u32 enable){
ARM_FUNC void GX_DispOff(){
u32 temp = reg_GX_DISPCNT;
- UNK_02106810 = 0x0;
- UNK_021D33C0 = (temp & 0x30000) >> 0x10;
+ sIsDispOn = 0x0;
+ sDispMode = (temp & 0x30000) >> 0x10;
reg_GX_DISPCNT = temp & ~0x30000;
}
ARM_FUNC void GX_DispOn(){
- UNK_02106810 = 0x1;
- if (UNK_021D33C0)
+ sIsDispOn = 0x1;
+ if (sDispMode)
{
- reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (UNK_021D33C0 << 0x10);
+ reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (sDispMode << 0x10);
}
else
{
@@ -93,12 +93,12 @@ ARM_FUNC void GX_DispOn(){
ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){
u32 temp2 = reg_GX_DISPCNT;
- UNK_021D33C0 = mode1;
- if (!UNK_02106810)
+ sDispMode = mode1;
+ if (!sIsDispOn)
mode1 = 0;
reg_GX_DISPCNT = (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3);
- if (!UNK_021D33C0)
- UNK_02106810 = 0x0;
+ if (!sDispMode)
+ sIsDispOn = 0x0;
}
ARM_FUNC void GXS_SetGraphicsMode(u32 mode){
diff --git a/arm9/lib/src/GX_asm.c b/arm9/lib/src/GX_asm.c
index 1eb0a011..f40793d8 100644
--- a/arm9/lib/src/GX_asm.c
+++ b/arm9/lib/src/GX_asm.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
//looks like asm and says asm on the tin...
ARM_FUNC asm void GX_SendFifo48B(void *src, void *dst){
diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c
index 63fe87b1..2086ad16 100644
--- a/arm9/lib/src/GX_bgcnt.c
+++ b/arm9/lib/src/GX_bgcnt.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
ARM_FUNC void *G2_GetBG0ScrPtr(){
u32 temp = (((reg_G2_BG0CNT & 0x1F00) >> 0x8) << 0xB);
diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c
index 5bced1ef..66273541 100644
--- a/arm9/lib/src/GX_g2.c
+++ b/arm9/lib/src/GX_g2.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
ARM_FUNC void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){
fx32 temp0, temp1, temp2, temp3;
diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c
index eb01453d..2b5f2941 100644
--- a/arm9/lib/src/GX_g3.c
+++ b/arm9/lib/src/GX_g3.c
@@ -1,36 +1,36 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-ARM_FUNC void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){
- displaylist->var0C = r2;
- displaylist->var08 = r1;
- displaylist->var00 = r1;
- displaylist->var04 = (u32 *)r1 + 1;
- displaylist->var10 = 0x0;
+ARM_FUNC void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2){
+ displaylist->length = r2;
+ displaylist->bottom = r1;
+ displaylist->curr_cmd = r1;
+ displaylist->curr_param = (u32 *)r1 + 1;
+ displaylist->param0_cmd_flg = 0x0;
}
-ARM_FUNC s32 G3_EndMakeDL(struct DL *displaylist){
- if (displaylist->var08 == displaylist->var00)
+ARM_FUNC s32 G3_EndMakeDL(struct GXDLInfo *displaylist){
+ if (displaylist->bottom == (u32 *)displaylist->curr_cmd)
return 0;
//pads the buffer with 0 to 4byte alignment if needed
- switch((u32)displaylist->var00 & 0x3)
+ switch((u32)displaylist->curr_cmd & 0x3)
{
case 0:
- return displaylist->var00 - displaylist->var08;
+ return displaylist->curr_cmd - (u8 *)displaylist->bottom;
case 1:
- *displaylist->var00++ = 0x0;
+ *displaylist->curr_cmd++ = 0x0;
case 2:
- *displaylist->var00++ = 0x0;
+ *displaylist->curr_cmd++ = 0x0;
case 3:
- *displaylist->var00++ = 0x0;
+ *displaylist->curr_cmd++ = 0x0;
}
- if (displaylist->var10)
+ if (displaylist->param0_cmd_flg)
{
- *displaylist->var04++ = 0x0;
- displaylist->var10 = 0x0;
+ *displaylist->curr_param++ = 0x0;
+ displaylist->param0_cmd_flg = 0x0;
}
- displaylist->var00 = (u8 *)displaylist->var04;
- return displaylist->var00 - displaylist->var08;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param;
+ return displaylist->curr_cmd - (u8 *)displaylist->bottom;
}
diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c
index f34e23ed..c40a3848 100644
--- a/arm9/lib/src/GX_g3_util.c
+++ b/arm9/lib/src/GX_g3_util.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){
diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c
index 50281ec0..21698547 100644
--- a/arm9/lib/src/GX_g3b.c
+++ b/arm9/lib/src/GX_g3b.c
@@ -1,38 +1,38 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-ARM_FUNC void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){
- *(u32 *)displaylist->var00 = 0x16;
- MI_Copy64B(mtx, displaylist->var04);
+ARM_FUNC void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){
+ *(u32 *)displaylist->curr_cmd = 0x16;
+ MI_Copy64B(mtx, displaylist->curr_param);
}
-ARM_FUNC void G3B_PushMtx(struct DL *displaylist){
- *(u32 *)displaylist->var00 = 0x11;
- displaylist->var00 = (u8 *)displaylist->var04;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_PushMtx(struct GXDLInfo *displaylist){
+ *(u32 *)displaylist->curr_cmd = 0x11;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_PopMtx(struct DL *displaylist, void *mtx){
- *(u32 *)displaylist->var00 = 0x12;
- *displaylist->var04 = (u32)mtx;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx){
+ *(u32 *)displaylist->curr_cmd = 0x12;
+ *displaylist->curr_param = (u32)mtx;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){
+ARM_FUNC void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){
G3BS_LoadMtx44(displaylist, mtx);
- displaylist->var00 = (u8 *)displaylist->var04 + sizeof(struct Mtx44);
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + sizeof(struct Mtx44);
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
//color format is RGB555, stored in the lower bits
-ARM_FUNC void G3B_Color(struct DL * displaylist, u32 vtx_col){
- *(u32 *)displaylist->var00 = 0x20;
- *displaylist->var04 = vtx_col;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col){
+ *(u32 *)displaylist->curr_cmd = 0x20;
+ *displaylist->curr_param = vtx_col;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
/*
@@ -40,51 +40,51 @@ Only feed normalized Vectors
only the fractional part and the sign, which is in the first nonfraction bit
since the vector is assumed to be normalized, are used
*/
-ARM_FUNC void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z){
- *(u32 *)displaylist->var00 = 0x21;
- *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) ;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z){
+ *(u32 *)displaylist->curr_cmd = 0x21;
+ *displaylist->curr_param = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) ;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){
- *(u32 *)displaylist->var00 = 0x23;
- displaylist->var04[0] = (u32)(u16)x | (u32)(u16)y << 0x10;
- displaylist->var04[1] = (u32)(u16)z;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x8;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z){
+ *(u32 *)displaylist->curr_cmd = 0x23;
+ displaylist->curr_param[0] = (u32)(u16)x | (u32)(u16)y << 0x10;
+ displaylist->curr_param[1] = (u32)(u16)z;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x8;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
//TODO: name arguments
-ARM_FUNC void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){
- *(u32 *)displaylist->var00 = 0x29;
- *displaylist->var04 = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){
+ *(u32 *)displaylist->curr_cmd = 0x29;
+ *displaylist->curr_param = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){
- *(u32 *)displaylist->var00 = 0x30;
+ARM_FUNC void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){
+ *(u32 *)displaylist->curr_cmd = 0x30;
u32 replace_vtx_color_with_diffuse;
if (replace)
replace_vtx_color_with_diffuse = TRUE;
else
replace_vtx_color_with_diffuse = FALSE;
- *displaylist->var04 = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ *displaylist->curr_param = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){
- *(u32 *)displaylist->var00 = 0x31;
+ARM_FUNC void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){
+ *(u32 *)displaylist->curr_cmd = 0x31;
u32 enable_shininess_table;
if (shiny_table)
enable_shininess_table = TRUE;
else
enable_shininess_table = FALSE;
- *displaylist->var04 = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ *displaylist->curr_param = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
/*
@@ -92,29 +92,29 @@ Only feed normalized Vectors
only the fractional part and the sign, which is in the first nonfraction bit
since the vector is assumed to be normalized, are used
*/
-ARM_FUNC void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){
- *(u32 *)displaylist->var00 = 0x32;
- *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){
+ *(u32 *)displaylist->curr_cmd = 0x32;
+ *displaylist->curr_param = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col){
- *(u32 *)displaylist->var00 = 0x33;
- *displaylist->var04 = col | light_num << 0x1E;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col){
+ *(u32 *)displaylist->curr_cmd = 0x33;
+ *displaylist->curr_param = col | light_num << 0x1E;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_Begin(struct DL * displaylist, u32 type){
- *(u32 *)displaylist->var00 = 0x40;
- *displaylist->var04 = type;
- displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_Begin(struct GXDLInfo * displaylist, u32 type){
+ *(u32 *)displaylist->curr_cmd = 0x40;
+ *displaylist->curr_param = type;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
-ARM_FUNC void G3B_End(struct DL * displaylist){
- *(u32 *)displaylist->var00 = 0x41;
- displaylist->var00 = (u8 *)displaylist->var04;
- displaylist->var04 = (u32 *)displaylist->var00 + 1;
+ARM_FUNC void G3B_End(struct GXDLInfo * displaylist){
+ *(u32 *)displaylist->curr_cmd = 0x41;
+ displaylist->curr_cmd = (u8 *)displaylist->curr_param;
+ displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1;
}
diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c
index a5c62c26..579032a6 100644
--- a/arm9/lib/src/GX_g3imm.c
+++ b/arm9/lib/src/GX_g3imm.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){
reg_G3X_GXFIFO = 0x17;
diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c
index 5a03c4ca..31508e06 100644
--- a/arm9/lib/src/GX_g3x.c
+++ b/arm9/lib/src/GX_g3x.c
@@ -1,8 +1,8 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-extern u32 UNK_02106814;
+extern u32 GXi_DmaId;
ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){
mov r1, #0x0
@@ -178,10 +178,10 @@ ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u
}
ARM_FUNC void G3X_InitTable(){
- if (UNK_02106814 != -1)
+ if (GXi_DmaId != -1)
{
- MI_DmaFill32Async(UNK_02106814, (void *)&reg_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0);
- MI_DmaFill32(UNK_02106814, (void *)&reg_G3X_FOG_TABLE_0, 0x0, 0x60);
+ MI_DmaFill32Async(GXi_DmaId, (void *)&reg_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0);
+ MI_DmaFill32(GXi_DmaId, (void *)&reg_G3X_FOG_TABLE_0, 0x0, 0x60);
}
else
{
diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c
index c0139c41..d4def461 100644
--- a/arm9/lib/src/GX_load2d.c
+++ b/arm9/lib/src/GX_load2d.c
@@ -1,16 +1,16 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-extern u32 UNK_02106814;
+extern u32 GXi_DmaId;
-extern s32 UNK_021D33F8;
-extern s32 UNK_021D33F4;
-extern u32 UNK_021D33F0;
-extern u32 UNK_021D33EC;
-extern s32 UNK_021D33E8;
-extern u32 UNK_021D33E4;
-extern s32 UNK_021D33E0;
+extern s32 sSubOBJExtPltt;
+extern s32 sBGExtPltt;
+extern u32 sBGExtPlttLCDCBlk;
+extern u32 sBGExtPlttLCDCOffset;
+extern s32 sOBJExtPltt;
+extern u32 sOBJExtPlttLCDCBlk;
+extern s32 sSubBGExtPltt;
static inline void *_GX_OBJ_PTR(){
@@ -21,207 +21,203 @@ static inline void *_GXS_OBJ_PTR(){
}
ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){
- _GX_Load_16(UNK_02106814, src, (void *)(0x5000000 + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000000 + offset), size);
}
ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){
- _GX_Load_16(UNK_02106814, src, (void *)(0x5000400 + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000400 + offset), size);
}
ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){
- _GX_Load_16(UNK_02106814, src, (void *)(0x5000200 + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000200 + offset), size);
}
ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){
- _GX_Load_16(UNK_02106814, src, (void *)(0x5000600 + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000600 + offset), size);
}
ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){
- _GX_Load_32(UNK_02106814, src, (void *)(0x7000000 + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000000 + offset), size);
}
ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){
- _GX_Load_32(UNK_02106814, src, (void *)(0x7000400 + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000400 + offset), size);
}
ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){
u32 base = (u32)_GX_OBJ_PTR();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){
u32 base = (u32)_GXS_OBJ_PTR();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG0ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG0ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG1ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG1ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG2ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG2ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG3ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG3ScrPtr();
- _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG0CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG0CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG1CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG1CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG2CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG2CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2_GetBG3CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){
u32 base = (u32)G2S_GetBG3CharPtr();
- _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size);
+ GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size);
}
ARM_FUNC void GX_BeginLoadBGExtPltt(){
- UNK_021D33F4 = GX_ResetBankForBGExtPltt();
- switch (UNK_021D33F4)
+ sBGExtPltt = GX_ResetBankForBGExtPltt();
+ switch (sBGExtPltt)
{
case 0: //needed to match
break;
case 0x10:
- UNK_021D33F0 = 0x06880000;
- UNK_021D33EC = 0x0;
+ sBGExtPlttLCDCBlk = 0x06880000;
+ sBGExtPlttLCDCOffset = 0x0;
break;
case 0x40:
- UNK_021D33F0 = 0x06894000;
- UNK_021D33EC = 0x4000;
+ sBGExtPlttLCDCBlk = 0x06894000;
+ sBGExtPlttLCDCOffset = 0x4000;
break;
case 0x20:
case 0x60:
- UNK_021D33F0 = 0x06890000;
- UNK_021D33EC = 0x0;
+ sBGExtPlttLCDCBlk = 0x06890000;
+ sBGExtPlttLCDCOffset = 0x0;
break;
}
}
ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){
- _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33F0 + offset - UNK_021D33EC), size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sBGExtPlttLCDCBlk + offset - sBGExtPlttLCDCOffset), size, NULL, NULL);
}
ARM_FUNC void GX_EndLoadBGExtPltt(){
- if (UNK_02106814 != -1)
- MI_WaitDma(UNK_02106814);
- GX_SetBankForBGExtPltt(UNK_021D33F4);
- UNK_021D33F4 = 0x0;
- UNK_021D33F0 = 0x0;
- UNK_021D33EC = 0x0;
+ GXi_WaitDma(GXi_DmaId);
+ GX_SetBankForBGExtPltt(sBGExtPltt);
+ sBGExtPltt = 0x0;
+ sBGExtPlttLCDCBlk = 0x0;
+ sBGExtPlttLCDCOffset = 0x0;
}
ARM_FUNC void GX_BeginLoadOBJExtPltt(){
- UNK_021D33E8 = GX_ResetBankForOBJExtPltt();
- switch (UNK_021D33E8)
+ sOBJExtPltt = GX_ResetBankForOBJExtPltt();
+ switch (sOBJExtPltt)
{
case 0: //needed to match
break;
case 0x40:
- UNK_021D33E4 = 0x06894000;
+ sOBJExtPlttLCDCBlk = 0x06894000;
break;
case 0x20:
- UNK_021D33E4 = 0x06890000;
+ sOBJExtPlttLCDCBlk = 0x06890000;
break;
}
}
ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){
- _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33E4 + offset), size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sOBJExtPlttLCDCBlk + offset), size, NULL, NULL);
}
ARM_FUNC void GX_EndLoadOBJExtPltt(){
- if (UNK_02106814 != -1)
- MI_WaitDma(UNK_02106814);
- GX_SetBankForOBJExtPltt(UNK_021D33E8);
- UNK_021D33E8 = 0x0;
- UNK_021D33E4 = 0x0;
+ GXi_WaitDma(GXi_DmaId);
+ GX_SetBankForOBJExtPltt(sOBJExtPltt);
+ sOBJExtPltt = 0x0;
+ sOBJExtPlttLCDCBlk = 0x0;
}
ARM_FUNC void GXS_BeginLoadBGExtPltt(){
- UNK_021D33E0 = FUN_020C6034();
+ sSubBGExtPltt = FUN_020C6034();
}
ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){
- _GX_Load_32_Async(UNK_02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x06898000 + offset), size, NULL, NULL);
}
ARM_FUNC void GXS_EndLoadBGExtPltt(){
- if (UNK_02106814 != -1)
- MI_WaitDma(UNK_02106814);
- GX_SetBankForSubBGExtPltt(UNK_021D33E0);
- UNK_021D33E0 = 0x0;
+ GXi_WaitDma(GXi_DmaId);
+ GX_SetBankForSubBGExtPltt(sSubBGExtPltt);
+ sSubBGExtPltt = 0x0;
}
ARM_FUNC void GXS_BeginLoadOBJExtPltt(){
- UNK_021D33F8 = GX_ResetBankForSubOBJ();
+ sSubOBJExtPltt = GX_ResetBankForSubOBJ();
}
ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){
- _GX_Load_32_Async(UNK_02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x068A0000 + offset), size, NULL, NULL);
}
ARM_FUNC void GXS_EndLoadOBJExtPltt(){
- if (UNK_02106814 != -1)
- MI_WaitDma(UNK_02106814);
- GX_SetBankForSubOBJExtPltt(UNK_021D33F8);
- UNK_021D33F8 = 0x0;
+ GXi_WaitDma(GXi_DmaId);
+ GX_SetBankForSubOBJExtPltt(sSubOBJExtPltt);
+ sSubOBJExtPltt = 0x0;
}
diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c
index 3a8a8c1d..5aa15581 100644
--- a/arm9/lib/src/GX_load3d.c
+++ b/arm9/lib/src/GX_load3d.c
@@ -1,124 +1,125 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-extern u32 UNK_02106814;
+extern u32 GXi_DmaId;
-extern u32 UNK_021D3410;
-extern u32 UNK_021D3400;
-extern u32 UNK_021D3414;
-extern u32 UNK_021D3418;
+extern u32 sTex;
+extern u32 sTexLCDCBlk1;
+extern u32 sTexLCDCBlk2;
+extern u32 sSzTexBlk1;
-//probably structs of length 0x6
-extern u16 UNK_02103B4C[];
-extern u16 UNK_02103B4E[];
-extern u16 UNK_02103B50[];
+static const struct _TexStartAddrTable
+{
+ u16 blk1; // 12 bit shift
+ u16 blk2; // 12 bit shift
+ u16 szBlk1; // 12 bit shift
+};
+extern struct _TexStartAddrTable sTexStartAddrTable[16];
-extern u32 UNK_021D3408;
-extern u32 UNK_021D3404;
-extern u16 UNK_02103B3C[];
-extern s32 UNK_021D33FC;
-extern u32 UNK_021D340C;
+extern u32 sTexPltt;
+extern u32 sTexPlttLCDCBlk;
+extern u16 sTexPlttStartAddrTable[8];
+
+extern s32 sClrImg;
+extern u32 sClrImgLCDCBlk;
ARM_FUNC void GX_BeginLoadTex(){
u32 temp = GX_ResetBankForTex();
- UNK_021D3410 = temp;
- UNK_021D3400 = UNK_02103B4C[temp * 3] << 0xC;
- UNK_021D3414 = UNK_02103B4E[temp * 3] << 0xC;
- UNK_021D3418 = UNK_02103B50[temp * 3] << 0xC;
+ sTex = temp;
+ sTexLCDCBlk1 = sTexStartAddrTable[temp].blk1 << 0xC;
+ sTexLCDCBlk2 = sTexStartAddrTable[temp].blk2 << 0xC;
+ sSzTexBlk1 = sTexStartAddrTable[temp].szBlk1 << 0xC;
}
ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){
void *temp;
- if (!UNK_021D3414)
+ if (!sTexLCDCBlk2)
{
- temp = (void *)(UNK_021D3400 + offset);
+ temp = (void *)(sTexLCDCBlk1 + offset);
}
else
{
- if ((offset + size) < UNK_021D3418)
+ if ((offset + size) < sSzTexBlk1)
{
- temp = (void *)(UNK_021D3400 + offset);
+ temp = (void *)(sTexLCDCBlk1 + offset);
}
- else if (offset >= UNK_021D3418)
+ else if (offset >= sSzTexBlk1)
{
- temp = (void *)(UNK_021D3414 + offset - UNK_021D3418);
+ temp = (void *)(sTexLCDCBlk2 + offset - sSzTexBlk1);
}
else
{
- void *temp2 = (void *)UNK_021D3414;
- u32 temp1 = UNK_021D3418 - offset;
- temp = (void *)(UNK_021D3400 + offset);
- _GX_Load_32(UNK_02106814, src, temp, temp1);
- _GX_Load_32_Async(UNK_02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL);
+ void *temp2 = (void *)sTexLCDCBlk2;
+ u32 temp1 = sSzTexBlk1 - offset;
+ temp = (void *)(sTexLCDCBlk1 + offset);
+ GXi_DmaCopy32(GXi_DmaId, src, temp, temp1);
+ GXi_DmaCopy32Async(GXi_DmaId, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL);
return;
}
}
- _GX_Load_32_Async(UNK_02106814, src, temp, size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, temp, size, NULL, NULL);
}
ARM_FUNC void GX_EndLoadTex(){
- if (UNK_02106814 != -1)
- MI_WaitDma(UNK_02106814);
- GX_SetBankForTex(UNK_021D3410);
- UNK_021D3418 = 0x0;
- UNK_021D3414 = 0x0;
- UNK_021D3400 = 0x0;
- UNK_021D3410 = 0x0;
+ GXi_WaitDma(GXi_DmaId);
+ GX_SetBankForTex(sTex);
+ sSzTexBlk1 = 0x0;
+ sTexLCDCBlk2 = 0x0;
+ sTexLCDCBlk1 = 0x0;
+ sTex = 0x0;
}
ARM_FUNC void GX_BeginLoadTexPltt(){
s32 temp = GX_ResetBankForTexPltt();
- UNK_021D3408 = temp;
- UNK_021D3404 = UNK_02103B3C[temp >> 4] << 0xC;
+ sTexPltt = temp;
+ sTexPlttLCDCBlk = sTexPlttStartAddrTable[temp >> 4] << 0xC;
}
ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){
- _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D3404 + offset), size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sTexPlttLCDCBlk + offset), size, NULL, NULL);
}
ARM_FUNC void GX_EndLoadTexPltt(){
- if (UNK_02106814 != -1)
- MI_WaitDma(UNK_02106814);
- GX_SetBankForTexPltt(UNK_021D3408);
- UNK_021D3408 = 0x0;
- UNK_021D3404 = 0x0;
+ GXi_WaitDma(GXi_DmaId);
+ GX_SetBankForTexPltt(sTexPltt);
+ sTexPltt = 0x0;
+ sTexPlttLCDCBlk = 0x0;
}
ARM_FUNC void GX_BeginLoadClearImage(){
s32 temp = GX_ResetBankForClearImage();
- UNK_021D33FC = temp;
+ sClrImg = temp;
switch (temp)
{
case 2:
case 3:
- UNK_021D340C = 0x6800000;
+ sClrImgLCDCBlk = 0x6800000;
return;
case 8:
case 12:
- UNK_021D340C = 0x6840000;
+ sClrImgLCDCBlk = 0x6840000;
return;
case 1:
- UNK_021D340C = 0x67E0000;
+ sClrImgLCDCBlk = 0x67E0000;
return;
case 4:
- UNK_021D340C = 0x6820000;
+ sClrImgLCDCBlk = 0x6820000;
}
}
ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){
- _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C), size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk), size, NULL, NULL);
}
ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){
- _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C + 0x20000), size, NULL, NULL);
+ GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk + 0x20000), size, NULL, NULL);
}
ARM_FUNC void GX_EndLoadClearImage(){
- if (UNK_02106814 != -1)
- MI_WaitDma(UNK_02106814);
- GX_SetBankForClearImage(UNK_021D33FC);
- UNK_021D33FC = 0x0;
- UNK_021D340C = 0x0;
+ GXi_WaitDma(GXi_DmaId);
+ GX_SetBankForClearImage(sClrImg);
+ sClrImg = 0x0;
+ sClrImgLCDCBlk = 0x0;
}
diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c
index 7da3e1b4..3ca3b266 100644
--- a/arm9/lib/src/GX_state.c
+++ b/arm9/lib/src/GX_state.c
@@ -1,23 +1,23 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-extern struct VRAM_banks UNK_021D33C4;
+extern struct GX_State gGXState;
ARM_FUNC void GX_InitGXState(){
- UNK_021D33C4.var00 = 0x0;
- UNK_021D33C4.var02 = 0x0;
- UNK_021D33C4.var04 = 0x0;
- UNK_021D33C4.var06 = 0x0;
- UNK_021D33C4.var08 = 0x0;
- UNK_021D33C4.var0A = 0x0;
- UNK_021D33C4.var0C = 0x0;
- UNK_021D33C4.var0E = 0x0;
- UNK_021D33C4.var10 = 0x0;
- UNK_021D33C4.var12 = 0x0;
- UNK_021D33C4.var14 = 0x0;
- UNK_021D33C4.var16 = 0x0;
- UNK_021D33C4.var18 = 0x0;
+ gGXState.lcdc = 0x0;
+ gGXState.bg = 0x0;
+ gGXState.obj = 0x0;
+ gGXState.arm7 = 0x0;
+ gGXState.tex = 0x0;
+ gGXState.texPltt = 0x0;
+ gGXState.clrImg = 0x0;
+ gGXState.bgExtPltt = 0x0;
+ gGXState.objExtPltt = 0x0;
+ gGXState.sub_bg = 0x0;
+ gGXState.sub_obj = 0x0;
+ gGXState.sub_bgExtPltt = 0x0;
+ gGXState.sub_objExtPltt = 0x0;
reg_GX_VRAMCNT = 0x0;
reg_GX_VRAMCNT_E = 0x0;
reg_GX_VRAMCNT_F = 0x0;
diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c
index 18507fa4..67749301 100644
--- a/arm9/lib/src/GX_vramcnt.c
+++ b/arm9/lib/src/GX_vramcnt.c
@@ -1,9 +1,9 @@
#include "global.h"
#include "main.h"
-#include "gx.h"
+#include "GX.h"
-extern u16 UNK_021D33BC;
-extern struct VRAM_banks UNK_021D33C4;
+extern u16 GXi_VRamLockId;
+extern struct GX_State gGXState;
ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){
if (mask & (0x1 << 0))
@@ -27,8 +27,8 @@ ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){
}
ARM_FUNC void GX_SetBankForBG(s32 bg){
- UNK_021D33C4.var00 = (u16)(~bg & (UNK_021D33C4.var00 | UNK_021D33C4.var02));
- UNK_021D33C4.var02 = bg;
+ gGXState.lcdc = (u16)(~bg & (gGXState.lcdc | gGXState.bg));
+ gGXState.bg = bg;
switch (bg)
{
case 8:
@@ -96,12 +96,12 @@ ARM_FUNC void GX_SetBankForBG(s32 bg){
default:
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForOBJ(s32 obj){
- UNK_021D33C4.var00 = (u16)(~obj & (UNK_021D33C4.var00 | UNK_021D33C4.var04));
- UNK_021D33C4.var04 = obj;
+ gGXState.lcdc = (u16)(~obj & (gGXState.lcdc | gGXState.obj));
+ gGXState.obj = obj;
switch (obj)
{
case 3:
@@ -135,12 +135,12 @@ ARM_FUNC void GX_SetBankForOBJ(s32 obj){
default:
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){
- UNK_021D33C4.var00 = (u16)(~bgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0E));
- UNK_021D33C4.var0E = bgextpltt;
+ gGXState.lcdc = (u16)(~bgextpltt & (gGXState.lcdc | gGXState.bgExtPltt));
+ gGXState.bgExtPltt = bgextpltt;
switch (bgextpltt)
{
case 0x10:
@@ -161,12 +161,12 @@ ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){
reg_GX_DISPCNT &= ~0x40000000;
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){
- UNK_021D33C4.var00 = (u16)(~objextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var10));
- UNK_021D33C4.var10 = objextpltt;
+ gGXState.lcdc = (u16)(~objextpltt & (gGXState.lcdc | gGXState.objExtPltt));
+ gGXState.objExtPltt = objextpltt;
switch (objextpltt)
{
case 32:
@@ -181,12 +181,12 @@ ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){
reg_GX_DISPCNT &= ~0x80000000;
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForTex(s32 tex){
- UNK_021D33C4.var00 = (u16)(~tex & (UNK_021D33C4.var00 | UNK_021D33C4.var08));
- UNK_021D33C4.var08 = tex;
+ gGXState.lcdc = (u16)(~tex & (gGXState.lcdc | gGXState.tex));
+ gGXState.tex = tex;
if (tex == 0)
{
reg_G3X_DISP3DCNT &= 0x0000CFFE;
@@ -244,12 +244,12 @@ ARM_FUNC void GX_SetBankForTex(s32 tex){
break;
}
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){
- UNK_021D33C4.var00 = (u16)(~texpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0A));
- UNK_021D33C4.var0A = texpltt;
+ gGXState.lcdc = (u16)(~texpltt & (gGXState.lcdc | gGXState.texPltt));
+ gGXState.texPltt = texpltt;
switch (texpltt)
{
case 0: //needed to match
@@ -270,12 +270,12 @@ ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){
reg_GX_VRAMCNT_G = 0x83;
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){
- UNK_021D33C4.var00 = (u16)(~clearimage & (UNK_021D33C4.var00 | UNK_021D33C4.var0C));
- UNK_021D33C4.var0C = clearimage;
+ gGXState.lcdc = (u16)(~clearimage & (gGXState.lcdc | gGXState.clrImg));
+ gGXState.clrImg = clearimage;
switch (clearimage)
{
case 3:
@@ -301,12 +301,12 @@ ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){
reg_GX_VRAMCNT_C = 0x9B;
reg_G3X_DISP3DCNT |= 0x4000;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForARM7(s32 arm7){
- UNK_021D33C4.var00 = (u16)(~arm7 & (UNK_021D33C4.var00 | UNK_021D33C4.var06));
- UNK_021D33C4.var06 = arm7;
+ gGXState.lcdc = (u16)(~arm7 & (gGXState.lcdc | gGXState.arm7));
+ gGXState.arm7 = arm7;
switch (arm7)
{
case 0: //needed to match
@@ -321,17 +321,17 @@ ARM_FUNC void GX_SetBankForARM7(s32 arm7){
case 8:
reg_GX_VRAMCNT_D = 0x82;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){
- UNK_021D33C4.var00 |= lcdc;
+ gGXState.lcdc |= lcdc;
GX_VRAMCNT_SetLCDC_(lcdc);
}
ARM_FUNC void GX_SetBankForSubBG(s32 subbg){
- UNK_021D33C4.var00 = (u16)(~subbg & (UNK_021D33C4.var00 | UNK_021D33C4.var12));
- UNK_021D33C4.var12 = subbg;
+ gGXState.lcdc = (u16)(~subbg & (gGXState.lcdc | gGXState.sub_bg));
+ gGXState.sub_bg = subbg;
switch (subbg)
{
case 0: //needed to match
@@ -344,13 +344,13 @@ ARM_FUNC void GX_SetBankForSubBG(s32 subbg){
case 128:
reg_GX_VRAMCNT_H = 0x81;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){
- UNK_021D33C4.var00 = (u16)(~subobj & (UNK_021D33C4.var00 | UNK_021D33C4.var14));
- UNK_021D33C4.var14 = subobj;
+ gGXState.lcdc = (u16)(~subobj & (gGXState.lcdc | gGXState.sub_obj));
+ gGXState.sub_obj = subobj;
switch (subobj)
{
case 8:
@@ -362,12 +362,12 @@ ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){
case 0: //needed to match
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){
- UNK_021D33C4.var00 = (u16)(~subbgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var16));
- UNK_021D33C4.var16 = subbgextpltt;
+ gGXState.lcdc = (u16)(~subbgextpltt & (gGXState.lcdc | gGXState.sub_bgExtPltt));
+ gGXState.sub_bgExtPltt = subbgextpltt;
switch (subbgextpltt)
{
case 128:
@@ -378,12 +378,12 @@ ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){
reg_GXS_DB_DISPCNT &= ~0x40000000;
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){
- UNK_021D33C4.var00 = (u16)(~subobjextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var18));
- UNK_021D33C4.var18 = subobjextpltt;
+ gGXState.lcdc = (u16)(~subobjextpltt & (gGXState.lcdc | gGXState.sub_objExtPltt));
+ gGXState.sub_objExtPltt = subobjextpltt;
switch (subobjextpltt)
{
case 256:
@@ -394,63 +394,63 @@ ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){
reg_GXS_DB_DISPCNT &= ~0x80000000;
break;
}
- GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00);
+ GX_VRAMCNT_SetLCDC_(gGXState.lcdc);
}
ARM_FUNC u32 FUN_020C6130(u16 *ptr){
u16 temp = *ptr;
*ptr = 0;
- UNK_021D33C4.var00 |= temp;
+ gGXState.lcdc |= temp;
GX_VRAMCNT_SetLCDC_(temp);
return temp;
}
ARM_FUNC u32 GX_ResetBankForBG(){
- return FUN_020C6130(&UNK_021D33C4.var02);
+ return FUN_020C6130(&gGXState.bg);
}
ARM_FUNC u32 GX_ResetBankForOBJ(){
- return FUN_020C6130(&UNK_021D33C4.var04);
+ return FUN_020C6130(&gGXState.obj);
}
ARM_FUNC u32 GX_ResetBankForBGExtPltt(){
reg_GX_DISPCNT &= ~0x40000000;
- return FUN_020C6130(&UNK_021D33C4.var0E);
+ return FUN_020C6130(&gGXState.bgExtPltt);
}
ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){
reg_GX_DISPCNT &= ~0x80000000;
- return FUN_020C6130(&UNK_021D33C4.var10);
+ return FUN_020C6130(&gGXState.objExtPltt);
}
ARM_FUNC u32 GX_ResetBankForTex(){
- return FUN_020C6130(&UNK_021D33C4.var08);
+ return FUN_020C6130(&gGXState.tex);
}
ARM_FUNC u32 GX_ResetBankForTexPltt(){
- return FUN_020C6130(&UNK_021D33C4.var0A);
+ return FUN_020C6130(&gGXState.texPltt);
}
ARM_FUNC u32 GX_ResetBankForClearImage(){
- return FUN_020C6130(&UNK_021D33C4.var0C);
+ return FUN_020C6130(&gGXState.clrImg);
}
ARM_FUNC u32 GX_ResetBankForSubBG(){
- return FUN_020C6130(&UNK_021D33C4.var12);
+ return FUN_020C6130(&gGXState.sub_bg);
}
ARM_FUNC u32 FUN_020C605C(){
- return FUN_020C6130(&UNK_021D33C4.var14);
+ return FUN_020C6130(&gGXState.sub_obj);
}
ARM_FUNC u32 FUN_020C6034(){
reg_GXS_DB_DISPCNT &= ~0x40000000;
- return FUN_020C6130(&UNK_021D33C4.var16);
+ return FUN_020C6130(&gGXState.sub_bgExtPltt);
}
ARM_FUNC u32 GX_ResetBankForSubOBJ(){
reg_GXS_DB_DISPCNT &= ~0x80000000;
- return FUN_020C6130(&UNK_021D33C4.var18);
+ return FUN_020C6130(&gGXState.sub_objExtPltt);
}
ARM_FUNC u32 FUN_020C5F28(u16 *ptr){
@@ -474,106 +474,106 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){
reg_GX_VRAMCNT_H = 0x0;
if (temp & (0x1 << 8))
reg_GX_VRAMCNT_I = 0x0;
- OSi_UnlockVram((u16)temp, UNK_021D33BC);
+ OSi_UnlockVram((u16)temp, GXi_VRamLockId);
return temp;
}
ARM_FUNC u32 disableBankForX_(){
- return FUN_020C5F28(&UNK_021D33C4.var02);
+ return FUN_020C5F28(&gGXState.bg);
}
ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){
- return FUN_020C5F28(&UNK_021D33C4.var04);
+ return FUN_020C5F28(&gGXState.obj);
}
ARM_FUNC u32 GX_DisableBankForBGExtPltt(){
reg_GX_DISPCNT &= ~0x40000000;
- return FUN_020C5F28(&UNK_021D33C4.var0E);
+ return FUN_020C5F28(&gGXState.bgExtPltt);
}
ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){
reg_GX_DISPCNT &= ~0x80000000;
- return FUN_020C5F28(&UNK_021D33C4.var10);
+ return FUN_020C5F28(&gGXState.objExtPltt);
}
ARM_FUNC u32 GX_DisableBankForTexPltt_2(){
- return FUN_020C5F28(&UNK_021D33C4.var08);
+ return FUN_020C5F28(&gGXState.tex);
}
ARM_FUNC u32 GX_DisableBankForTexPltt(){
- return FUN_020C5F28(&UNK_021D33C4.var0A);
+ return FUN_020C5F28(&gGXState.texPltt);
}
ARM_FUNC u32 GX_DisableBankForClearImage(){
- return FUN_020C5F28(&UNK_021D33C4.var0C);
+ return FUN_020C5F28(&gGXState.clrImg);
}
ARM_FUNC u32 GX_DisableBankForARM7(){
- return FUN_020C5F28(&UNK_021D33C4.var06);
+ return FUN_020C5F28(&gGXState.arm7);
}
ARM_FUNC u32 GX_DisableBankForLCDC(){
- return FUN_020C5F28(&UNK_021D33C4.var00);
+ return FUN_020C5F28(&gGXState.lcdc);
}
ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){
- return FUN_020C5F28(&UNK_021D33C4.var12);
+ return FUN_020C5F28(&gGXState.sub_bg);
}
ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){
- return FUN_020C5F28(&UNK_021D33C4.var14);
+ return FUN_020C5F28(&gGXState.sub_obj);
}
ARM_FUNC u32 FUN_020C5E04(){
reg_GXS_DB_DISPCNT &= ~0x40000000;
- return FUN_020C5F28(&UNK_021D33C4.var16);
+ return FUN_020C5F28(&gGXState.sub_bgExtPltt);
}
ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){
reg_GXS_DB_DISPCNT &= ~0x80000000;
- return FUN_020C5F28(&UNK_021D33C4.var18);
+ return FUN_020C5F28(&gGXState.sub_objExtPltt);
}
ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){
- return UNK_021D33C4.var02;
+ return gGXState.bg;
}
ARM_FUNC u32 GX_GetBankForOBJ(){
- return UNK_021D33C4.var04;
+ return gGXState.obj;
}
ARM_FUNC u32 GX_GetBankForBGExtPltt(){
- return UNK_021D33C4.var0E;
+ return gGXState.bgExtPltt;
}
ARM_FUNC u32 GX_GetBankForOBJExtPltt(){
- return UNK_021D33C4.var10;
+ return gGXState.objExtPltt;
}
ARM_FUNC u32 FUN_020C5D8C(){
- return UNK_021D33C4.var08;
+ return gGXState.tex;
}
ARM_FUNC u32 GX_GetBankForTexPltt(){
- return UNK_021D33C4.var0A;
+ return gGXState.texPltt;
}
ARM_FUNC u32 GX_GetBankForLCDC(){
- return UNK_021D33C4.var00;
+ return gGXState.lcdc;
}
ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){
- return UNK_021D33C4.var12;
+ return gGXState.sub_bg;
}
ARM_FUNC u32 GX_GetBankForSubOBJ(){
- return UNK_021D33C4.var14;
+ return gGXState.sub_obj;
}
ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){
- return UNK_021D33C4.var16;
+ return gGXState.sub_bgExtPltt;
}
ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){
- return UNK_021D33C4.var18;
+ return gGXState.sub_objExtPltt;
}
diff --git a/arm9/lib/src/OS_init.c b/arm9/lib/src/OS_init.c
index 7467c672..a1db8788 100644
--- a/arm9/lib/src/OS_init.c
+++ b/arm9/lib/src/OS_init.c
@@ -7,7 +7,6 @@
extern void PXI_Init();
extern void OS_InitLock();
-extern void OS_SetIrqStackChecker();
extern void OS_InitException();
extern void MI_Init();
extern void OS_InitVAlarm();
diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c
index 1fb43821..76deb069 100644
--- a/arm9/lib/src/OS_interrupt.c
+++ b/arm9/lib/src/OS_interrupt.c
@@ -10,7 +10,6 @@
#pragma optimize_for_size on
extern OSThreadQueue OSi_IrqThreadQueue;
-extern OSIrqMask OS_EnableIrqMask(OSIrqMask intr);
ARM_FUNC void OS_InitIrqTable() {
OS_InitThreadQueue(&OSi_IrqThreadQueue);
@@ -87,3 +86,58 @@ ARM_FUNC void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), voi
(void)OS_EnableIrqMask(mask);
OSi_IrqCallbackInfo[timerNo + 4].enable = TRUE;
}
+
+ARM_FUNC OSIrqMask OS_SetIrqMask(OSIrqMask mask)
+{
+ u16 regIme = reg_OS_IME;
+ reg_OS_IME = 0;
+ OSIrqMask regIe = reg_OS_IE;
+ reg_OS_IE = mask;
+ u16 unused = reg_OS_IME; //needed because otherwise it doesn't match
+ reg_OS_IME = regIme;
+ return regIe;
+}
+
+ARM_FUNC OSIrqMask OS_EnableIrqMask(OSIrqMask mask)
+{
+ u16 regIme = reg_OS_IME;
+ reg_OS_IME = 0;
+ OSIrqMask regIe = reg_OS_IE;
+ reg_OS_IE = regIe | mask;
+ u16 unused = reg_OS_IME;
+ reg_OS_IME = regIme;
+ return regIe;
+}
+
+ARM_FUNC OSIrqMask OS_DisableIrqMask(OSIrqMask mask)
+{
+ u16 regIme = reg_OS_IME;
+ reg_OS_IME = 0;
+ OSIrqMask regIe = reg_OS_IE;
+ reg_OS_IE = regIe & ~mask;
+ u16 unused = reg_OS_IME;
+ reg_OS_IME = regIme;
+ return regIe;
+}
+
+ARM_FUNC OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask)
+{
+ u16 regIme = reg_OS_IME;
+ reg_OS_IME = 0;
+ OSIrqMask regIf = reg_OS_IF;
+ reg_OS_IF = mask;
+ u16 unused = reg_OS_IME;
+ reg_OS_IME = regIme;
+ return regIf;
+}
+
+extern void SDK_IRQ_STACKSIZE(void);
+
+#define OSi_IRQ_STACK_TOP (HW_DTCM_SVC_STACK - ((s32)SDK_IRQ_STACKSIZE))
+#define OSi_IRQ_STACK_BOTTOM HW_DTCM_SVC_STACK
+
+ARM_FUNC void OS_SetIrqStackChecker(void)
+{
+ *(u32 *)(OSi_IRQ_STACK_BOTTOM - sizeof(u32)) = 0xfddb597dUL;
+ *(u32 *)(OSi_IRQ_STACK_TOP) = 0x7bf9dd5bUL;
+}
diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c
index c21d20ab..d4254ce3 100644
--- a/arm9/lib/src/OS_reset.c
+++ b/arm9/lib/src/OS_reset.c
@@ -6,6 +6,7 @@
#include "OS_reset.h"
#include "MB_mb.h"
#include "OS_terminate_proc.h"
+#include "OS_interrupt.h"
extern u16 OSi_IsInitReset;
extern vu16 OSi_IsResetOccurred;
@@ -15,8 +16,6 @@ extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
extern u32 PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
extern void CARD_LockRom(u16 lockId);
extern void MI_StopDma(u32 dma);
-extern void OS_SetIrqMask(u32 mask);
-extern void OS_ResetRequestIrqMask(u32 mask);
extern void OSi_DoResetSystem(); //in itcm, should technically be in this file
ARM_FUNC void OS_InitReset() {
@@ -54,7 +53,7 @@ ARM_FUNC void OS_ResetSystem(u32 parameter) {
MI_StopDma(1);
MI_StopDma(2);
MI_StopDma(3);
- OS_SetIrqMask(0x40000);
+ (void)OS_SetIrqMask(0x40000);
OS_ResetRequestIrqMask((u32)~0);
*(u32 *)HW_RESET_PARAMETER_BUF = parameter;
OSi_SendToPxi(OS_PXI_COMMAND_RESET);