summaryrefslogtreecommitdiff
path: root/arm9/lib/src/GX_load3d.c
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/src/GX_load3d.c')
-rw-r--r--arm9/lib/src/GX_load3d.c117
1 files changed, 59 insertions, 58 deletions
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;
}