summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf1
-rw-r--r--arm9/asm/OS_interrupt_asm.s95
-rw-r--r--arm9/data/bss_2.s72
-rw-r--r--arm9/data/rom2_2.s36
-rw-r--r--arm9/data/rom2_3.s8
-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
-rw-r--r--arm9/undefined_syms.txt42
39 files changed, 1738 insertions, 764 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 9ae0d28a..5504c2dd 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -161,7 +161,6 @@ SECTIONS {
GX_asm.o (.text)
OS_irqHandler.o (.text)
OS_irqTable.o (.text)
- OS_interrupt_asm.o (.text)
OS_interrupt.o (.text)
OS_spinLock.o (.text)
OS_printf.o (.text)
diff --git a/arm9/asm/OS_interrupt_asm.s b/arm9/asm/OS_interrupt_asm.s
deleted file mode 100644
index 7fdc1ccc..00000000
--- a/arm9/asm/OS_interrupt_asm.s
+++ /dev/null
@@ -1,95 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- arm_func_start OS_SetIrqStackChecker
-OS_SetIrqStackChecker: ; 0x020C9DAC
- ldr ip, _020C9DD0 ; =0x027E0000
- ldr r3, _020C9DD4 ; =0xFDDB597D
- add r0, r12, #0x3000
- ldr r2, _020C9DD8 ; =0x7BF9DD5B
- ldr r1, _020C9DDC ; =0x00000400
- str r3, [r0, #0xf7c]
- add r0, r12, #0x3f80
- str r2, [r0, -r1]
- bx lr
- .balign 4
-_020C9DD0: .word 0x027E0000
-_020C9DD4: .word 0xFDDB597D
-_020C9DD8: .word 0x7BF9DD5B
-_020C9DDC: .word 0x00000400
-
- arm_func_start OS_ResetRequestIrqMask
-OS_ResetRequestIrqMask: ; 0x020C9DE0
- ldr ip, _020C9E0C ; =0x04000208
- mov r1, #0x0
- ldrh r3, [r12, #0x0]
- ldr r2, _020C9E10 ; =0x04000214
- strh r1, [r12, #0x0]
- ldr r1, [r2, #0x0]
- str r0, [r2, #0x0]
- ldrh r0, [r12, #0x0]
- mov r0, r1
- strh r3, [r12, #0x0]
- bx lr
- .balign 4
-_020C9E0C: .word 0x04000208
-_020C9E10: .word 0x04000214
-
- arm_func_start OS_DisableIrqMask
-OS_DisableIrqMask: ; 0x020C9E14
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr lr, _020C9E54 ; =0x04000208
- mov r3, #0x0
- ldrh r12, [lr, #0x0]
- ldr r2, _020C9E58 ; =0x04000210
- mvn r1, r0
- strh r3, [lr, #0x0]
- ldr r0, [r2, #0x0]
- and r1, r0, r1
- str r1, [r2, #0x0]
- ldrh r1, [lr, #0x0]
- strh r12, [lr, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020C9E54: .word 0x04000208
-_020C9E58: .word 0x04000210
-
- arm_func_start OS_EnableIrqMask
-OS_EnableIrqMask: ; 0x020C9E5C
- ldr ip, _020C9E8C ; =0x04000208
- mov r1, #0x0
- ldrh r3, [r12, #0x0]
- ldr r2, _020C9E90 ; =0x04000210
- strh r1, [r12, #0x0]
- ldr r1, [r2, #0x0]
- orr r0, r1, r0
- str r0, [r2, #0x0]
- ldrh r0, [r12, #0x0]
- mov r0, r1
- strh r3, [r12, #0x0]
- bx lr
- .balign 4
-_020C9E8C: .word 0x04000208
-_020C9E90: .word 0x04000210
-
- arm_func_start OS_SetIrqMask
-OS_SetIrqMask: ; 0x020C9E94
- ldr ip, _020C9EC0 ; =0x04000208
- mov r1, #0x0
- ldrh r3, [r12, #0x0]
- ldr r2, _020C9EC4 ; =0x04000210
- strh r1, [r12, #0x0]
- ldr r1, [r2, #0x0]
- str r0, [r2, #0x0]
- ldrh r0, [r12, #0x0]
- mov r0, r1
- strh r3, [r12, #0x0]
- bx lr
- .balign 4
-_020C9EC0: .word 0x04000208
-_020C9EC4: .word 0x04000210
diff --git a/arm9/data/bss_2.s b/arm9/data/bss_2.s
index 5c9d538b..1a39bbf1 100644
--- a/arm9/data/bss_2.s
+++ b/arm9/data/bss_2.s
@@ -932,16 +932,16 @@ UNK_021D2DF0: ; 0x021D2DF0
UNK_021D2DFC: ; 0x021D2DFC
.space 0x5c0
- .global UNK_021D33BC
-UNK_021D33BC: ; 0x021D33BC
+ .global GXi_VRamLockId
+GXi_VRamLockId: ; 0x021D33BC
.space 0x4
- .global UNK_021D33C0
-UNK_021D33C0: ; 0x021D33C0
+ .global sDispMode
+sDispMode: ; 0x021D33C0
.space 0x4
- .global UNK_021D33C4
-UNK_021D33C4: ; 0x021D33C4
+ .global gGXState
+gGXState: ; 0x021D33C4
.space 0x2
.global UNK_021D33C6
@@ -992,64 +992,64 @@ UNK_021D33DA: ; 0x021D33DA
UNK_021D33DC: ; 0x021D33DC
.space 0x4
- .global UNK_021D33E0
-UNK_021D33E0: ; 0x021D33E0
+ .global sSubBGExtPltt
+sSubBGExtPltt: ; 0x021D33E0
.space 0x4
- .global UNK_021D33E4
-UNK_021D33E4: ; 0x021D33E4
+ .global sOBJExtPlttLCDCBlk
+sOBJExtPlttLCDCBlk: ; 0x021D33E4
.space 0x4
- .global UNK_021D33E8
-UNK_021D33E8: ; 0x021D33E8
+ .global sOBJExtPltt
+sOBJExtPltt: ; 0x021D33E8
.space 0x4
- .global UNK_021D33EC
-UNK_021D33EC: ; 0x021D33EC
+ .global sBGExtPlttLCDCOffset
+sBGExtPlttLCDCOffset: ; 0x021D33EC
.space 0x4
- .global UNK_021D33F0
-UNK_021D33F0: ; 0x021D33F0
+ .global sBGExtPlttLCDCBlk
+sBGExtPlttLCDCBlk: ; 0x021D33F0
.space 0x4
- .global UNK_021D33F4
-UNK_021D33F4: ; 0x021D33F4
+ .global sBGExtPltt
+sBGExtPltt: ; 0x021D33F4
.space 0x4
- .global UNK_021D33F8
-UNK_021D33F8: ; 0x021D33F8
+ .global sSubOBJExtPltt
+sSubOBJExtPltt: ; 0x021D33F8
.space 0x4
- .global UNK_021D33FC
-UNK_021D33FC: ; 0x021D33FC
+ .global sClrImg
+sClrImg: ; 0x021D33FC
.space 0x4
- .global UNK_021D3400
-UNK_021D3400: ; 0x021D3400
+ .global sTexLCDCBlk1
+sTexLCDCBlk1: ; 0x021D3400
.space 0x4
- .global UNK_021D3404
-UNK_021D3404: ; 0x021D3404
+ .global sTexPlttLCDCBlk
+sTexPlttLCDCBlk: ; 0x021D3404
.space 0x4
- .global UNK_021D3408
-UNK_021D3408: ; 0x021D3408
+ .global sTexPltt
+sTexPltt: ; 0x021D3408
.space 0x4
- .global UNK_021D340C
-UNK_021D340C: ; 0x021D340C
+ .global sClrImgLCDCBlk
+sClrImgLCDCBlk: ; 0x021D340C
.space 0x4
- .global UNK_021D3410
-UNK_021D3410: ; 0x021D3410
+ .global sTex
+sTex: ; 0x021D3410
.space 0x4
- .global UNK_021D3414
-UNK_021D3414: ; 0x021D3414
+ .global sTexLCDCBlk2
+sTexLCDCBlk2: ; 0x021D3414
.space 0x4
- .global UNK_021D3418
-UNK_021D3418: ; 0x021D3418
+ .global sSzTexBlk1
+sSzTexBlk1: ; 0x021D3418
.space 0x4
.global OSi_IrqCallbackInfo
diff --git a/arm9/data/rom2_2.s b/arm9/data/rom2_2.s
index 9eba6039..013410bd 100644
--- a/arm9/data/rom2_2.s
+++ b/arm9/data/rom2_2.s
@@ -171,45 +171,45 @@ UNK_020ECEF4: ; 0x020ECEF4
.word 0x0200E851
.word 0x0200E86D
.word 0x0200E88D
- .word 0x0200E8C9
+ .word 0x0200E8C9
.word 0x0200E901
.word 0x0200E93D
.word 0x0200E975
- .word 0x0200E9A1
+ .word 0x0200E9A1
.word 0x0200E9CD
.word 0x0200EA09
.word 0x0200EA41
- .word 0x0200EA7D
+ .word 0x0200EA7D
.word 0x0200EAB5
.word 0x0200EAE1
.word 0x0200EB0D
- .word 0x0200EB41
+ .word 0x0200EB41
.word 0x0200EB71
.word 0x0200EB9D
.word 0x0200EBC9
- .word 0x0200EBF5
+ .word 0x0200EBF5
.word 0x0200EC21
.word 0x0200EC4D
.word 0x0200EC79
- .word 0x0200ECA5
+ .word 0x0200ECA5
.word 0x0200ECD1
.word 0x0200ECFD
.word 0x0200ED29
- .word 0x0200ED55
+ .word 0x0200ED55
.word 0x0200ED81
.word 0x0200EDD5
.word 0x0200EE25
- .word 0x0200EE61
+ .word 0x0200EE61
.word 0x0200EE99
.word 0x0200EED9
.word 0x0200EF15
- .word 0x0200EF55
+ .word 0x0200EF55
.word 0x0200EF91
.word 0x0200EFBD
.word 0x0200EFE9
- .word 0x0200F015
+ .word 0x0200F015
.word 0x0200F041
- .word 0x0200F07D
+ .word 0x0200F07D
.global UNK_020ECF9C
UNK_020ECF9C: ; 0x020ECF9C
@@ -10232,20 +10232,14 @@ FX_AtanTable_: ; 0x02103A38
.byte 0xB0, 0x1E, 0xDB, 0x1E, 0x06, 0x1F, 0x30, 0x1F, 0x5A, 0x1F, 0x84, 0x1F, 0xAE, 0x1F, 0xD7, 0x1F
.byte 0x00, 0x20, 0x00, 0x00
- .global UNK_02103B3C
-UNK_02103B3C: ; 0x02103B3C
+ .global sTexPlttStartAddrTable
+sTexPlttStartAddrTable: ; 0x02103B3C
.byte 0x00, 0x00, 0x80, 0x68, 0x90, 0x68, 0x80, 0x68, 0x94, 0x68, 0x00, 0x00, 0x90, 0x68, 0x80, 0x68
- .global UNK_02103B4C
-UNK_02103B4C: ; 0x02103B4C
+ .global sTexStartAddrTable
+sTexStartAddrTable: ; 0x02103B4C
.byte 0x00, 0x00
-
- .global UNK_02103B4E
-UNK_02103B4E: ; 0x02103B4E
.byte 0x00, 0x00
-
- .global UNK_02103B50
-UNK_02103B50: ; 0x02103B50
.byte 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68
.byte 0x00, 0x00, 0x00, 0x00, 0x40, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x40, 0x68, 0x20, 0x00
.byte 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x60, 0x68, 0x00, 0x00
diff --git a/arm9/data/rom2_3.s b/arm9/data/rom2_3.s
index 1324e85c..3a317b36 100644
--- a/arm9/data/rom2_3.s
+++ b/arm9/data/rom2_3.s
@@ -2055,12 +2055,12 @@ UNK_021067F0: ; 0x021067F0
.word 0x020BFC4C
.word 0x020BFC28
- .global UNK_02106810
-UNK_02106810: ; 0x02106810
+ .global sIsDispOn
+sIsDispOn: ; 0x02106810
.byte 0x01, 0x00, 0x00, 0x00
- .global UNK_02106814
-UNK_02106814: ; 0x02106814
+ .global GXi_DmaId
+GXi_DmaId: ; 0x02106814
.byte 0x03, 0x00, 0x00, 0x00
.global OSi_IrqCallbackInfoIndex
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);
diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt
index 587556dc..adc05ca0 100644
--- a/arm9/undefined_syms.txt
+++ b/arm9/undefined_syms.txt
@@ -8,7 +8,7 @@ SDK_IRQ_STACKSIZE = 0x00000400;
FX_AtanTable_ = 0x02103A38;
// OS
gUnk02106810 = 0x02106810;
-UNK_02106814 = 0x02106814;
+GXi_DmaId = 0x02106814;
OSi_IrqCallbackInfoIndex = 0x02106818;
OSi_ConsoleTypeCache = 0x02106828;
// DGT
@@ -23,29 +23,29 @@ SDK_OVERLAY_DIGEST_END = 0x02106F84;
//GX
gUnk021D33BC = 0x021D33BC;
gUnk021D33C0 = 0x021D33C0;
-UNK_021D33C4 = 0x021D33C4;
+gGXState = 0x021D33C4;
-UNK_021D33E0 = 0x021D33E0;
-UNK_021D33E4 = 0x021D33E4;
-UNK_021D33E8 = 0x021D33E8;
-UNK_021D33EC = 0x021D33EC;
-UNK_021D33F0 = 0x021D33F0;
-UNK_021D33F4 = 0x021D33F4;
-UNK_021D33F8 = 0x021D33F8;
-UNK_021D33FC = 0x021D33FC;
-UNK_021D3400 = 0x021D3400;
-UNK_021D3404 = 0x021D3404;
-UNK_021D3408 = 0x021D3408;
-UNK_021D340C = 0x021D340C;
-UNK_021D3410 = 0x021D3410;
-UNK_021D3414 = 0x021D3414;
-UNK_021D3418 = 0x021D3418;
+sSubBGExtPltt = 0x021D33E0;
+sOBJExtPlttLCDCBlk = 0x021D33E4;
+sOBJExtPltt = 0x021D33E8;
+sBGExtPlttLCDCOffset = 0x021D33EC;
+sBGExtPlttLCDCBlk = 0x021D33F0;
+sBGExtPltt = 0x021D33F4;
+sSubOBJExtPltt = 0x021D33F8;
+sClrImg = 0x021D33FC;
+sTexLCDCBlk1 = 0x021D3400;
+sTexPlttLCDCBlk = 0x021D3404;
+sTexPltt = 0x021D3408;
+sClrImgLCDCBlk = 0x021D340C;
+sTex = 0x021D3410;
+sTexLCDCBlk2 = 0x021D3414;
+sSzTexBlk1 = 0x021D3418;
-UNK_02103B3C = 0x02103B3C;
+sTexPlttStartAddrTable = 0x02103B3C;
-UNK_02103B4C = 0x02103B4C;
-UNK_02103B4E = 0x02103B4E;
-UNK_02103B50 = 0x02103B50;
+sTexStartAddrTable = 0x02103B4C;
+sTexStartAddrTable = 0x02103B4E;
+sTexStartAddrTable = 0x02103B50;
// Overlay
FUN_021D76AC = 0x021D76AC;