summaryrefslogtreecommitdiff
path: root/arm9/lib/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/src')
-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
16 files changed, 388 insertions, 339 deletions
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);