From 3f833281144c32ab7452639c060fd4fb01c8d63f Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 6 May 2020 02:02:35 +0200 Subject: Decompile GX_asm and GX_g3 --- arm9/asm/GX_asm.s | 16 ------------ arm9/asm/GX_g3.s | 72 --------------------------------------------------- arm9/lib/include/gx.h | 24 +++++++++++++++++ arm9/lib/src/GX_asm.c | 16 ++++++++++++ arm9/lib/src/GX_g3.c | 36 ++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 88 deletions(-) delete mode 100644 arm9/asm/GX_asm.s delete mode 100644 arm9/asm/GX_g3.s create mode 100644 arm9/lib/include/gx.h create mode 100644 arm9/lib/src/GX_asm.c create mode 100644 arm9/lib/src/GX_g3.c diff --git a/arm9/asm/GX_asm.s b/arm9/asm/GX_asm.s deleted file mode 100644 index ae9b81e3..00000000 --- a/arm9/asm/GX_asm.s +++ /dev/null @@ -1,16 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_SendFifo48B -GX_SendFifo48B: ; 0x020C9BE8 - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - bx lr diff --git a/arm9/asm/GX_g3.s b/arm9/asm/GX_g3.s deleted file mode 100644 index 078ddf22..00000000 --- a/arm9/asm/GX_g3.s +++ /dev/null @@ -1,72 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3_EndMakeDL -G3_EndMakeDL: ; 0x020C9B18 - ldr r3, [r0, #0x0] - ldr r2, [r0, #0x8] - cmp r2, r3 - moveq r0, #0x0 - bxeq lr - and r1, r3, #0x3 - cmp r1, #0x3 - addls pc, pc, r1, lsl #0x2 - b _020C9B8C -_020C9B3C: - b _020C9B4C -_020C9B40: - b _020C9B54 -_020C9B44: - b _020C9B64 -_020C9B48: - b _020C9B78 -_020C9B4C: - sub r0, r3, r2 - bx lr -_020C9B54: - add r1, r3, #0x1 - str r1, [r0, #0x0] - mov r1, #0x0 - strb r1, [r3, #0x0] -_020C9B64: - ldr r3, [r0, #0x0] - mov r1, #0x0 - add r2, r3, #0x1 - str r2, [r0, #0x0] - strb r1, [r3, #0x0] -_020C9B78: - ldr r3, [r0, #0x0] - mov r1, #0x0 - add r2, r3, #0x1 - str r2, [r0, #0x0] - strb r1, [r3, #0x0] -_020C9B8C: - ldr r1, [r0, #0x10] - cmp r1, #0x0 - beq _020C9BB0 - ldr r3, [r0, #0x4] - mov r1, #0x0 - add r2, r3, #0x4 - str r2, [r0, #0x4] - str r1, [r3, #0x0] - str r1, [r0, #0x10] -_020C9BB0: - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - ldr r0, [r0, #0x8] - sub r0, r1, r0 - bx lr - - arm_func_start G3_BeginMakeDL -G3_BeginMakeDL: ; 0x020C9BC8 - str r2, [r0, #0xc] - str r1, [r0, #0x8] - str r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - mov r1, #0x0 - str r1, [r0, #0x10] - bx lr diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h new file mode 100644 index 00000000..ad3f1a6e --- /dev/null +++ b/arm9/lib/include/gx.h @@ -0,0 +1,24 @@ +#ifndef GUARD_GX_H +#define GUARD_GX_H + +struct DL +{ + u8 *var00; //end pointer + u32 *var04; //aligned end pointer + u8 *var08; //start pointer + u32 var0C; + u32 var10; //pad end with zero bool +}; + +//GX_g3 +void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct DL *displaylist); + + +//GX_asm +void GX_SendFifo48B(void *src, void *dst); + + +//GXi_NopClearFifo128_ probably asm + +#endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_asm.c b/arm9/lib/src/GX_asm.c new file mode 100644 index 00000000..1eb0a011 --- /dev/null +++ b/arm9/lib/src/GX_asm.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +//looks like asm and says asm on the tin... +ARM_FUNC asm void GX_SendFifo48B(void *src, void *dst){ + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + bx lr +} diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c new file mode 100644 index 00000000..66e34dc7 --- /dev/null +++ b/arm9/lib/src/GX_g3.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + + +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; +} + +s32 G3_EndMakeDL(struct DL *displaylist){ + if (displaylist->var08 == displaylist->var00) + return 0; + //pads the buffer with 0 to 4byte alignment if needed + switch((u32)displaylist->var00 & 0x3) + { + case 0: + return displaylist->var00 - displaylist->var08; + case 1: + *displaylist->var00++ = 0x0; + case 2: + *displaylist->var00++ = 0x0; + case 3: + *displaylist->var00++ = 0x0; + } + if (displaylist->var10) + { + *displaylist->var04++ = 0x0; + displaylist->var10 = 0x0; + } + displaylist->var00 = (u8 *)displaylist->var04; + return displaylist->var00 - displaylist->var08; +} -- cgit v1.2.3 From 6d3d11491cf6e8289822d2c5ba9cd7e309a5ce11 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 6 May 2020 23:41:54 +0200 Subject: Decompile GX_g3b.s and GX_g3x.s --- arm9/asm/GX_g3b.s | 269 -------------------------- arm9/asm/GX_g3x.s | 503 ------------------------------------------------ arm9/lib/include/gx.h | 70 ++++++- arm9/lib/src/GX_g3b.c | 122 ++++++++++++ arm9/lib/src/GX_g3x.c | 242 +++++++++++++++++++++++ arm9/undefined_syms.txt | 1 + 6 files changed, 434 insertions(+), 773 deletions(-) delete mode 100644 arm9/asm/GX_g3b.s delete mode 100644 arm9/asm/GX_g3x.s create mode 100644 arm9/lib/src/GX_g3b.c create mode 100644 arm9/lib/src/GX_g3x.c diff --git a/arm9/asm/GX_g3b.s b/arm9/asm/GX_g3b.s deleted file mode 100644 index 5bb7ac21..00000000 --- a/arm9/asm/GX_g3b.s +++ /dev/null @@ -1,269 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3B_End -G3B_End: ; 0x020C75AC - ldr r1, [r0, #0x0] - mov r2, #0x41 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_Begin -G3B_Begin: ; 0x020C75D0 - ldr r2, [r0, #0x0] - mov r3, #0x40 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LightColor -G3B_LightColor: ; 0x020C7600 - ldr r3, [r0, #0x0] - mov r12, #0x33 - str r12, [r3, #0x0] - ldr r3, [r0, #0x4] - orr r1, r2, r1, lsl #0x1e - str r1, [r3, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LightVector -G3B_LightVector: ; 0x020C7634 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr ip, _020C7694 ; =0x000003FF - ldrsh r4, [sp, #0x10] - ldr lr, [r0, #0x0] - mov r5, #0x32 - str r5, [lr, #0x0] - and lr, r12, r2, asr #0x3 - and r2, r12, r3, asr #0x3 - and r3, r12, r4, asr #0x3 - orr r2, lr, r2, lsl #0xa - orr r3, r2, r3, lsl #0x14 - ldr r2, [r0, #0x4] - orr r1, r3, r1, lsl #0x1e - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C7694: .word 0x000003FF - - arm_func_start G3B_MaterialColorSpecEmi -G3B_MaterialColorSpecEmi: ; 0x020C7698 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x31 - cmp r3, #0x0 - movne r3, #0x1 - str lr, [r12, #0x0] - orr r2, r1, r2, lsl #0x10 - moveq r3, #0x0 - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0xf - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_MaterialColorDiffAmb -G3B_MaterialColorDiffAmb: ; 0x020C76EC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x30 - cmp r3, #0x0 - movne r3, #0x1 - str lr, [r12, #0x0] - orr r2, r1, r2, lsl #0x10 - moveq r3, #0x0 - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0xf - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_PolygonAttr -G3B_PolygonAttr: ; 0x020C7740 - orr r1, r1, r2, lsl #0x4 - ldr r2, [r0, #0x0] - mov r12, #0x29 - str r12, [r2, #0x0] - ldr r2, [sp, #0x8] - orr r1, r1, r3, lsl #0x6 - ldr r3, [sp, #0x0] - orr r1, r2, r1 - ldr r12, [sp, #0x4] - orr r2, r1, r3, lsl #0x18 - ldr r1, [r0, #0x4] - orr r2, r2, r12, lsl #0x10 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_Vtx -G3B_Vtx: ; 0x020C7790 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x23 - str lr, [r12, #0x0] - mov r1, r1, lsl #0x10 - mov r2, r2, lsl #0x10 - mov lr, r1, lsr #0x10 - mov r12, r2, lsr #0x10 - mov r1, r3, lsl #0x10 - ldr r2, [r0, #0x4] - orr r3, lr, r12, lsl #0x10 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - mov r1, r1, lsr #0x10 - str r1, [r2, #0x4] - ldr r1, [r0, #0x4] - add r1, r1, #0x8 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_Normal -G3B_Normal: ; 0x020C77F4 - stmdb sp!, {r4,lr} - ldr ip, _020C7844 ; =0x000003FF - ldr lr, [r0, #0x0] - mov r4, #0x21 - str r4, [lr, #0x0] - and lr, r12, r1, asr #0x3 - and r1, r12, r2, asr #0x3 - and r3, r12, r3, asr #0x3 - orr r2, lr, r1, lsl #0xa - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0x14 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7844: .word 0x000003FF - - arm_func_start G3B_Color -G3B_Color: ; 0x020C7848 - ldr r2, [r0, #0x0] - mov r3, #0x20 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LoadMtx44 -G3B_LoadMtx44: ; 0x020C7878 - stmdb sp!, {r4,lr} - mov r4, r0 - bl G3BS_LoadMtx44 - ldr r0, [r4, #0x4] - add r0, r0, #0x40 - str r0, [r4, #0x0] - ldr r0, [r4, #0x0] - add r0, r0, #0x4 - str r0, [r4, #0x4] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start G3B_PopMtx -G3B_PopMtx: ; 0x020C78A4 - ldr r2, [r0, #0x0] - mov r3, #0x12 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_PushMtx -G3B_PushMtx: ; 0x020C78D4 - ldr r1, [r0, #0x0] - mov r2, #0x11 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3BS_LoadMtx44 -G3BS_LoadMtx44: ; 0x020C78F8 - mov r3, r0 - ldr r0, [r3, #0x0] - mov r2, #0x16 - str r2, [r0, #0x0] - mov r0, r1 - ldr ip, _020C7918 ; =MI_Copy64B - ldr r1, [r3, #0x4] - bx r12 - .balign 4 -_020C7918: .word MI_Copy64B diff --git a/arm9/asm/GX_g3x.s b/arm9/asm/GX_g3x.s deleted file mode 100644 index a8513372..00000000 --- a/arm9/asm/GX_g3x.s +++ /dev/null @@ -1,503 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GXi_NopClearFifo128_ -GXi_NopClearFifo128_: ; 0x020C7970 - mov r1, #0x0 - mov r2, #0x0 - mov r3, #0x0 - mov r12, #0x0 - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - bx lr - - arm_func_start G3X_SetHOffset -G3X_SetHOffset: ; 0x020C7A04 - ldr r1, _020C7A10 ; =0x04000010 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C7A10: .word 0x04000010 - - arm_func_start G3X_GetBoxTestResult -G3X_GetBoxTestResult: ; 0x020C7A14 - ldr r2, _020C7A38 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x1 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x2 - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A38: .word 0x04000600 - - arm_func_start G3X_GetMtxStackLevelPJ -G3X_GetMtxStackLevelPJ: - ldr r2, _020C7A64 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x4000 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x2000 - moveq r1, r1, lsr #0xd - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A64: .word 0x04000600 - - arm_func_start G3X_GetMtxStackLevelPV -G3X_GetMtxStackLevelPV: - ldr r2, _020C7A90 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x4000 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x1f00 - moveq r1, r1, lsr #0x8 - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A90: .word 0x04000600 - - arm_func_start G3X_InitTable -G3X_InitTable: ; 0x020C7A94 - stmdb sp!, {lr} - sub sp, sp, #0xc - ldr r0, _020C7B2C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C7AE4 - mov r2, #0x0 - str r2, [sp, #0x0] - ldr r1, _020C7B30 ; =0x04000330 - mov r3, #0x10 - str r2, [sp, #0x4] - bl MI_DmaFill32Async - ldr r0, _020C7B2C ; =0x02106814 - ldr r1, _020C7B34 ; =0x04000360 - ldr r0, [r0, #0x0] - mov r2, #0x0 - mov r3, #0x60 - bl MI_DmaFill32 - b _020C7B04 -_020C7AE4: - ldr r1, _020C7B30 ; =0x04000330 - mov r0, #0x0 - mov r2, #0x10 - bl MIi_CpuClear32 - ldr r1, _020C7B34 ; =0x04000360 - mov r0, #0x0 - mov r2, #0x60 - bl MIi_CpuClear32 -_020C7B04: - mov r2, #0x0 - ldr r0, _020C7B38 ; =0x040004D0 - mov r1, r2 -_020C7B10: - add r2, r2, #0x1 - str r1, [r0, #0x0] - cmp r2, #0x20 - blt _020C7B10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7B2C: .word 0x02106814 -_020C7B30: .word 0x04000330 -_020C7B34: .word 0x04000360 -_020C7B38: .word 0x040004D0 - - arm_func_start G3X_SetClearColor -G3X_SetClearColor: ; 0x020C7B3C - orr r0, r0, r1, lsl #0x10 - ldr r12, [sp, #0x0] - orr r3, r0, r3, lsl #0x18 - cmp r12, #0x0 - ldr r1, _020C7B64 ; =0x04000350 - orrne r3, r3, #0x8000 - ldr r0, _020C7B68 ; =0x04000354 - str r3, [r1, #0x0] - strh r2, [r0, #0x0] - bx lr - .balign 4 -_020C7B64: .word 0x04000350 -_020C7B68: .word 0x04000354 - - arm_func_start G3X_SetFogTable -G3X_SetFogTable: ; 0x020C7B6C - ldr ip, _020C7B78 ; =0x020CE2C4 - ldr r1, _020C7B7C ; =0x04000360 - bx r12 - .balign 4 -_020C7B78: .word 0x020CE2C4 -_020C7B7C: .word 0x04000360 - - arm_func_start G3X_SetEdgeColorTable -G3X_SetEdgeColorTable: ; 0x020C7B80 - ldr ip, _020C7B90 ; =MIi_CpuCopy16 - ldr r1, _020C7B94 ; =0x04000330 - mov r2, #0x10 - bx r12 - .balign 4 -_020C7B90: .word MIi_CpuCopy16 -_020C7B94: .word 0x04000330 - - arm_func_start G3X_GetVectorMtx -G3X_GetVectorMtx: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7BD8 ; =0x04000600 - mov r1, r0 - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - addne sp, sp, #0x4 - mvnne r0, #0x0 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020C7BDC ; =0x04000680 - bl MI_Copy36B -_020C7BC8: ; 0x020C7BC8 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7BD8: .word 0x04000600 -_020C7BDC: .word 0x04000680 - - arm_func_start G3X_GetClipMtx -G3X_GetClipMtx: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7C20 ; =0x04000600 - mov r1, r0 - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - addne sp, sp, #0x4 - mvnne r0, #0x0 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020C7C24 ; =0x04000640 - bl MI_Copy64B -_020C7C10: ; 0x020C7C10 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7C20: .word 0x04000600 -_020C7C24: .word 0x04000640 - - arm_func_start G3X_SetFog -G3X_SetFog: ; 0x020C7C28 - cmp r0, #0x0 - ldreq r2, _020C7C70 ; =0x04000060 - ldreq r0, _020C7C74 ; =0x0000CF7F - ldreqh r1, [r2, #0x0] - andeq r0, r1, r0 - streqh r0, [r2, #0x0] - bxeq lr - ldr r0, _020C7C78 ; =0x0400035C - ldr ip, _020C7C70 ; =0x04000060 - strh r3, [r0, #0x0] - mov r0, r2, lsl #0x8 - orr r0, r0, r1, lsl #0x6 - ldrh r3, [r12, #0x0] - orr r0, r0, #0x80 - bic r1, r3, #0x3f40 - orr r0, r1, r0 - strh r0, [r12, #0x0] - bx lr - .balign 4 -_020C7C70: .word 0x04000060 -_020C7C74: .word 0x0000CF7F -_020C7C78: .word 0x0400035C - - arm_func_start G3X_ResetMtxStack_2 -G3X_ResetMtxStack_2: ; 0x020C7C7C - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020C7D18 ; =0x04000600 - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - add r4, sp, #0x0 -_020C7C98: - mov r0, r4 - bl G3X_GetMtxStackLevelPV -_020C7CA0: ; 0x020C7CA0 - cmp r0, #0x0 - bne _020C7C98 - add r4, sp, #0x4 -_020C7CAC: - mov r0, r4 - bl G3X_GetMtxStackLevelPJ -_020C7CB4: ; 0x020C7CB4 - cmp r0, #0x0 - bne _020C7CAC - ldr r2, _020C7D1C ; =0x04000440 - mov r1, #0x3 - str r1, [r2, #0x0] - ldr r0, _020C7D20 ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r2, #0x0] - ldr r1, [sp, #0x4] - cmp r1, #0x0 - ldrne r0, _020C7D24 ; =0x04000448 - strne r1, [r0, #0x0] - ldr r0, _020C7D1C ; =0x04000440 - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r2, [sp, #0x0] - ldr r1, _020C7D24 ; =0x04000448 - ldr r0, _020C7D20 ; =0x04000454 - str r2, [r1, #0x0] - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7D18: .word 0x04000600 -_020C7D1C: .word 0x04000440 -_020C7D20: .word 0x04000454 -_020C7D24: .word 0x04000448 - - arm_func_start G3X_InitMtxStack -G3X_InitMtxStack: ; 0x020C7D28 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020C7DC8 ; =0x04000600 - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - add r4, sp, #0x0 -_020C7D44: - mov r0, r4 - bl G3X_GetMtxStackLevelPV -_020C7D4C: ; 0x020C7D4C - cmp r0, #0x0 - bne _020C7D44 - add r4, sp, #0x4 -_020C7D58: - mov r0, r4 - bl G3X_GetMtxStackLevelPJ -_020C7D60: ; 0x020C7D60 - cmp r0, #0x0 - bne _020C7D58 - ldr r2, _020C7DCC ; =0x04000440 - mov r1, #0x3 - str r1, [r2, #0x0] - ldr r0, _020C7DD0 ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r2, #0x0] - ldr r1, [sp, #0x4] - ldr r2, _020C7DD0 ; =0x04000454 - cmp r1, #0x0 - ldrne r0, _020C7DD4 ; =0x04000448 - mov r3, #0x0 - strne r1, [r0, #0x0] - ldr r0, _020C7DCC ; =0x04000440 - str r3, [r2, #0x0] - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r1, [sp, #0x0] - ldr r0, _020C7DD4 ; =0x04000448 - str r1, [r0, #0x0] - str r3, [r2, #0x0] - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7DC8: .word 0x04000600 -_020C7DCC: .word 0x04000440 -_020C7DD0: .word 0x04000454 -_020C7DD4: .word 0x04000448 - - arm_func_start G3X_ClearFifo -G3X_ClearFifo: ; 0x020C7DD8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C7E04 ; =0x04000400 - bl GXi_NopClearFifo128_ - ldr r1, _020C7E08 ; =0x04000600 -_020C7DEC: - ldr r0, [r1, #0x0] - ands r0, r0, #0x8000000 - bne _020C7DEC - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7E04: .word 0x04000400 -_020C7E08: .word 0x04000600 - - arm_func_start G3X_ResetMtxStack -G3X_ResetMtxStack: ; 0x020C7E0C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7E7C ; =0x04000600 -_020C7E18: - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - bne _020C7E18 - ldr r0, [r2, #0x0] - ldr r1, _020C7E80 ; =0x04000060 - orr r0, r0, #0x8000 - str r0, [r2, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x2000 - strh r0, [r1, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x1000 - strh r0, [r1, #0x0] - bl G3X_ResetMtxStack_2 - ldr r2, _020C7E84 ; =0x001F0080 - ldr r0, _020C7E88 ; =0x040004A4 - ldr r1, _020C7E8C ; =0x040004A8 - str r2, [r0, #0x0] - mov r2, #0x0 - ldr r0, _020C7E90 ; =0x040004AC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7E7C: .word 0x04000600 -_020C7E80: .word 0x04000060 -_020C7E84: .word 0x001F0080 -_020C7E88: .word 0x040004A4 -_020C7E8C: .word 0x040004A8 -_020C7E90: .word 0x040004AC - - arm_func_start G3X_Init -G3X_Init: ; 0x020C7E94 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl G3X_ClearFifo - ldr r0, _020C7FAC ; =0x04000504 - mov r1, #0x0 - str r1, [r0, #0x0] - ldr r1, _020C7FB0 ; =0x04000600 -_020C7EB0: - ldr r0, [r1, #0x0] - ands r0, r0, #0x8000000 - bne _020C7EB0 - ldr r0, _020C7FB4 ; =0x04000060 - mov r3, #0x0 - strh r3, [r0, #0x0] - ldr r2, _020C7FB8 ; =0x04000010 - str r3, [r1, #0x0] - str r3, [r2, #0x0] - ldrh r12, [r0, #0x0] - ldr r2, _020C7FBC ; =0xFFFFCFFD - ldr r3, _020C7FC0 ; =0x0000CFFB - orr r12, r12, #0x2000 - strh r12, [r0, #0x0] - ldrh r12, [r0, #0x0] - orr r12, r12, #0x1000 - strh r12, [r0, #0x0] - ldrh r12, [r0, #0x0] - and r2, r12, r2 - strh r2, [r0, #0x0] - ldrh r2, [r0, #0x0] - bic r2, r2, #0x3000 - orr r2, r2, #0x10 - strh r2, [r0, #0x0] - ldrh r2, [r0, #0x0] - and r2, r2, r3 - strh r2, [r0, #0x0] - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - ldr r0, [r1, #0x0] - bic r0, r0, #0xc0000000 - orr r0, r0, #0x80000000 - str r0, [r1, #0x0] - bl G3X_InitMtxStack - ldr r0, _020C7FC4 ; =0x04000350 - mov r3, #0x0 - ldr r2, _020C7FC8 ; =0x00007FFF - ldr r1, _020C7FCC ; =0x04000354 - str r3, [r0, #0x0] - ldr r0, _020C7FD0 ; =0x04000356 - strh r2, [r1, #0x0] - ldr r1, _020C7FD4 ; =0x04000358 - strh r3, [r0, #0x0] - ldr r0, _020C7FD8 ; =0x0400035C - str r3, [r1, #0x0] - ldr r1, _020C7FDC ; =0x04000008 - strh r3, [r0, #0x0] - ldrh r0, [r1, #0x0] - bic r0, r0, #0x3 - strh r0, [r1, #0x0] - bl G3X_InitTable - ldr r2, _020C7FE0 ; =0x001F0080 - ldr r0, _020C7FE4 ; =0x040004A4 - ldr r1, _020C7FE8 ; =0x040004A8 - str r2, [r0, #0x0] - mov r2, #0x0 - ldr r0, _020C7FEC ; =0x040004AC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7FAC: .word 0x04000504 -_020C7FB0: .word 0x04000600 -_020C7FB4: .word 0x04000060 -_020C7FB8: .word 0x04000010 -_020C7FBC: .word 0xFFFFCFFD -_020C7FC0: .word 0x0000CFFB -_020C7FC4: .word 0x04000350 -_020C7FC8: .word 0x00007FFF -_020C7FCC: .word 0x04000354 -_020C7FD0: .word 0x04000356 -_020C7FD4: .word 0x04000358 -_020C7FD8: .word 0x0400035C -_020C7FDC: .word 0x04000008 -_020C7FE0: .word 0x001F0080 -_020C7FE4: .word 0x040004A4 -_020C7FE8: .word 0x040004A8 -_020C7FEC: .word 0x040004AC diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index ad3f1a6e..dd266759 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -1,10 +1,43 @@ #ifndef GUARD_GX_H #define GUARD_GX_H +#include "fx.h" + +//Todos before PR +//TODO: Add defines for GX commands, add structs/unions for HW registers +//TODO: Add ARM_FUNC attributes + +#define HW_REG_END_VTXS 0x04000504 +#define HW_REG_GXSTAT 0x04000600 +#define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG0HOFS 0x04000010 +#define HW_REG_CLEAR_COLOR 0x04000350 +#define HW_REG_CLEAR_DEPTH 0x04000354 +#define HW_REG_CLRIMAGE_OFFSET 0x04000356 +#define HW_REG_FOG_COLOR 0x04000358 +#define HW_REG_FOG_OFFSET 0x0400035C +#define HW_REG_BG0CNT 0x04000008 +#define HW_REG_POLYGON_ATTR 0x040004A4 +#define HW_REG_TEXIMAGE_PARAM 0x040004A8 +#define HW_REG_PLTT_BASE 0x040004AC + +#define HW_REG_GXFIFO 0x04000400 +#define HW_REG_MTX_IDENTITY 0x04000454 +#define HW_REG_MTX_POP 0x04000448 +#define HW_REG_MTX_MODE 0x04000440 + +#define HW_REG_CLIPMTX_RESULT 0x04000640 +#define HW_REG_VECMTX_RESULT 0x04000680 + +#define HW_REG_EDGE_COLOR 0x04000330 +#define HW_REG_FOG_TABLE 0x04000360 + +#define HW_REG_SHININESS 0x040004D0 + struct DL { u8 *var00; //end pointer - u32 *var04; //aligned end pointer + u32 *var04; //aligned end pointer, used to write data u8 *var08; //start pointer u32 var0C; u32 var10; //pad end with zero bool @@ -14,6 +47,41 @@ struct DL void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); s32 G3_EndMakeDL(struct DL *displaylist); +//GX_g3x +asm void GXi_NopClearFifo128_(void *reg); +void G3X_Init(); +void G3X_ResetMtxStack(); +void G3X_ClearFifo(); +void G3X_InitMtxStack(); +void G3X_ResetMtxStack_2(); +void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); +u32 G3X_GetClipMtx(struct Mtx44 *dst); +u32 G3X_GetVectorMtx(struct Mtx33 *dst); +void G3X_SetEdgeColorTable(void *tbl_ptr); +void G3X_SetFogTable(void *tbl_ptr); +void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); +void G3X_InitTable(); +u32 G3X_GetMtxStackLevelPV(u32 *level); +u32 G3X_GetMtxStackLevelPJ(u32 *level); +u32 G3X_GetBoxTestResult(u32 *result); +void G3X_SetHOffset(u32 offset); + + +//GX_g3b +void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); +void G3B_PushMtx(struct DL *displaylist); +void G3B_PopMtx(struct DL *displaylist, void *mtx); +void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); +void G3B_Color(struct DL * displaylist, u32 vtx_col); +void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z); +void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z); +void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); +void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); +void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); +void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); +void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col); +void G3B_Begin(struct DL * displaylist, u32 type); +void G3B_End(struct DL * displaylist); //GX_asm void GX_SendFifo48B(void *src, void *dst); diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c new file mode 100644 index 00000000..1e25adb5 --- /dev/null +++ b/arm9/lib/src/GX_g3b.c @@ -0,0 +1,122 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + + +void MI_Copy64B(void *src, void *dst); + +void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ + *(u32 *)displaylist->var00 = 0x16; + MI_Copy64B(mtx, displaylist->var04); +} + +void G3B_PushMtx(struct DL *displaylist){ + *(u32 *)displaylist->var00 = 0x11; + displaylist->var00 = (u8 *)displaylist->var04; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +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; +} + +void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ + G3BS_LoadMtx44(displaylist, mtx); + displaylist->var00 = (u8 *)displaylist->var04 + sizeof(struct Mtx44); + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +//color format is RGB555, stored in the lower bits +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; +} + +/* +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 +*/ +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; +} + +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; +} + +//TODO: name arguments +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; +} + +void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ + *(u32 *)displaylist->var00 = 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; +} + +void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ + *(u32 *)displaylist->var00 = 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; +} + +/* +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 +*/ +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; +} + +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; +} + +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; +} + +void G3B_End(struct DL * displaylist){ + *(u32 *)displaylist->var00 = 0x41; + displaylist->var00 = (u8 *)displaylist->var04; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c new file mode 100644 index 00000000..f9c2adb7 --- /dev/null +++ b/arm9/lib/src/GX_g3x.c @@ -0,0 +1,242 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 gUnk02106814; +void MI_Copy64B(void *, void *); +void MIi_CpuCopy16(void *, void *, u32); +void GXi_NopClearFifo128_(void *); +void MI_Copy16B(void *, void *); +void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); +void MI_DmaFill32(u32, void *, u32, u32); +void MIi_CpuClear32(u32, void *, u32); + +asm void GXi_NopClearFifo128_(void *reg){ + mov r1, #0x0 + mov r2, #0x0 + mov r3, #0x0 + mov r12, #0x0 + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + bx lr +} + +void G3X_Init(){ + G3X_ClearFifo(); + SETREG32(HW_REG_END_VTXS, 0x0); + while (READREG32(HW_REG_GXSTAT) & 0x8000000); //wait for geometry engine to not be busy + SETREG16(HW_REG_DISP3DCNT, 0x0); + SETREG32(HW_REG_GXSTAT, 0x0); + SETREG32(HW_REG_BG0HOFS, 0x0); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3002); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3000 | 0x10); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3004); + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) & ~0xC0000000 | 0x80000000); + G3X_InitMtxStack(); + SETREG32(HW_REG_CLEAR_COLOR, 0x0); + SETREG16(HW_REG_CLEAR_DEPTH, 0x7FFF); + SETREG16(HW_REG_CLRIMAGE_OFFSET, 0x0); + SETREG32(HW_REG_FOG_COLOR, 0x0); + SETREG16(HW_REG_FOG_OFFSET, 0x0); + SETREG16(HW_REG_BG0CNT, READREG16(HW_REG_BG0CNT) & ~0x3); + G3X_InitTable(); + SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); + SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); + SETREG32(HW_REG_PLTT_BASE, 0x0); +} + +void G3X_ResetMtxStack(){ + while (READREG32(HW_REG_GXSTAT) & 0x8000000); + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); + G3X_ResetMtxStack_2(); + SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); + SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); + SETREG32(HW_REG_PLTT_BASE, 0x0); +} + +void G3X_ClearFifo(){ + GXi_NopClearFifo128_((void *)HW_REG_GXFIFO); + while (READREG32(HW_REG_GXSTAT) & 0x8000000); +} + +void G3X_InitMtxStack(){ + u32 PV_level, PJ_level; + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + while (G3X_GetMtxStackLevelPV(&PV_level)); + while (G3X_GetMtxStackLevelPJ(&PJ_level)); + SETREG32(HW_REG_MTX_MODE, 0x3); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + SETREG32(HW_REG_MTX_MODE, 0x0); + if (PJ_level) + { + SETREG32(HW_REG_MTX_POP, PJ_level); + } + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + SETREG32(HW_REG_MTX_MODE, 0x2); + SETREG32(HW_REG_MTX_POP, PV_level); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); +} + +void G3X_ResetMtxStack_2(){ + u32 PV_level, PJ_level; + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + while (G3X_GetMtxStackLevelPV(&PV_level)); + while (G3X_GetMtxStackLevelPJ(&PJ_level)); + SETREG32(HW_REG_MTX_MODE, 0x3); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + SETREG32(HW_REG_MTX_MODE, 0x0); + if (PJ_level) + { + SETREG32(HW_REG_MTX_POP, PJ_level); + } + + SETREG32(HW_REG_MTX_MODE, 0x2); + SETREG32(HW_REG_MTX_POP, PV_level); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + +} + +void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ + if (enable) + { + SETREG16(HW_REG_FOG_OFFSET, offset); + SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 ))); + + } + else + { + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3080); + } +} + +u32 G3X_GetClipMtx(struct Mtx44 *dst){ + if (READREG32(HW_REG_GXSTAT) & 0x8000000) + { + return -1; + } + else + { + MI_Copy64B((void *)HW_REG_CLIPMTX_RESULT, dst); + return 0; + } +} + +u32 G3X_GetVectorMtx(struct Mtx33 *dst){ + if (READREG32(HW_REG_GXSTAT) & 0x8000000) + { + return -1; + } + else + { + MI_Copy36B((void *)HW_REG_VECMTX_RESULT, dst); + return 0; + } +} + +void G3X_SetEdgeColorTable(void *tbl_ptr){ + MIi_CpuCopy16(tbl_ptr, (void *)HW_REG_EDGE_COLOR, 0x10); +} + +void G3X_SetFogTable(void *tbl_ptr){ + MI_Copy16B(tbl_ptr, (void *)HW_REG_FOG_TABLE); +} + +void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ + u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); + if (enable_fog) + temp |= 0x8000; + SETREG32(HW_REG_CLEAR_COLOR, temp); + SETREG16(HW_REG_CLEAR_DEPTH, depth); +} + +void G3X_InitTable(){ + if (gUnk02106814 != -1) + { + MI_DmaFill32Async(gUnk02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(gUnk02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); + } + else + { + MIi_CpuClear32(0x0, (void *)HW_REG_EDGE_COLOR, 0x10); + MIi_CpuClear32(0x0, (void *)HW_REG_FOG_TABLE, 0x60); + } + for (int i = 0; i < 0x20; i++) + { + SETREG32(HW_REG_SHININESS, 0x0); + } +} + +u32 G3X_GetMtxStackLevelPV(u32 *level){ + if (READREG32(HW_REG_GXSTAT) & 0x4000) + { + return -1; + } + else + { + *level = (READREG32(HW_REG_GXSTAT) & 0x1F00) >> 0x8; + return 0; + } +} + +u32 G3X_GetMtxStackLevelPJ(u32 *level){ + if (READREG32(HW_REG_GXSTAT) & 0x4000) + { + return -1; + } + else + { + *level = (READREG32(HW_REG_GXSTAT) & 0x2000) >> 0xD; + return 0; + } +} + +u32 G3X_GetBoxTestResult(u32 *result){ + if (READREG32(HW_REG_GXSTAT) & 0x1) + { + return -1; + } + else + { + *result = (READREG32(HW_REG_GXSTAT) & 0x2); + return 0; + } +} + +void G3X_SetHOffset(u32 offset){ + SETREG32(HW_REG_BG0HOFS, offset); +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 9b6d2115..2ab88c4e 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -7,6 +7,7 @@ SDK_IRQ_STACKSIZE = 0x00000400; // FX FX_AtanTable_ = 0x02103A38; // OS +gUnk02106814 = 0x02106814; OSi_IrqCallbackInfoIndex = 0x02106818; // DGT Unk_0210683C = 0x0210683C; -- cgit v1.2.3 From 4ca37a40d9fbe67888777e65aea5a6bf1f4c5829 Mon Sep 17 00:00:00 2001 From: Made Date: Sat, 9 May 2020 19:10:59 +0200 Subject: temporarily add register macros till actual definitions are added --- arm9/lib/include/gx.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index dd266759..03e26610 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -34,6 +34,16 @@ #define HW_REG_SHININESS 0x040004D0 +//TODO: wait for register commit and replace these +#define SETREG16(x, y) ((*(vu16 *)x) = y) +#define SETREG32(x, y) ((*(vu32 *)x) = y) +#define SETREG64(x, y) ((*(vu64 *)x) = y) + +#define READREG16(x) (*(vu16 *)x) +#define READREG32(x) (*(vu32 *)x) +#define READREG64(x) (*(vu64 *)x) + + struct DL { u8 *var00; //end pointer -- cgit v1.2.3 From 4abf7d45568d93040fdb86993e915ffdfc4c4a9e Mon Sep 17 00:00:00 2001 From: Made Date: Sat, 9 May 2020 19:44:46 +0200 Subject: start decompiling GX_vramcnt.s --- arm9/arm9.lcf | 1 + arm9/asm/GX_vramcnt.s | 98 ++++++++++++++++++++++----------------------- arm9/lib/include/gx.h | 14 +++++++ arm9/lib/src/GX_vramcnt_c.c | 24 +++++++++++ 4 files changed, 88 insertions(+), 49 deletions(-) create mode 100644 arm9/lib/src/GX_vramcnt_c.c diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index eeb735db..d5ebf272 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -143,6 +143,7 @@ SECTIONS { GX.o (.text) GX_state.o (.text) GX_vramcnt.o (.text) + GX_vramcnt_c.o (.text) GX_bgcnt.o (.text) GX_g2.o (.text) GX_g3b.o (.text) diff --git a/arm9/asm/GX_vramcnt.s b/arm9/asm/GX_vramcnt.s index 0dc8890b..bf11bd92 100644 --- a/arm9/asm/GX_vramcnt.s +++ b/arm9/asm/GX_vramcnt.s @@ -1489,52 +1489,52 @@ _020C6E9C: .word 0x04000246 _020C6EA0: .word 0x04000245 _020C6EA4: .word 0x04000244 - arm_func_start GX_VRAMCNT_SetLCDC_ -GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 - ands r1, r0, #0x1 - ldrne r1, _020C6F3C ; =0x04000240 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x2 - ldrne r1, _020C6F40 ; =0x04000241 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x4 - ldrne r1, _020C6F44 ; =0x04000242 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x8 - ldrne r1, _020C6F48 ; =0x04000243 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x10 - ldrne r1, _020C6F4C ; =0x04000244 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x20 - ldrne r1, _020C6F50 ; =0x04000245 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x40 - ldrne r1, _020C6F54 ; =0x04000246 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x80 - ldrne r1, _020C6F58 ; =0x04000248 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r0, r0, #0x100 - ldrne r0, _020C6F5C ; =0x04000249 - movne r1, #0x80 - strneb r1, [r0, #0x0] - bx lr - .balign 4 -_020C6F3C: .word 0x04000240 -_020C6F40: .word 0x04000241 -_020C6F44: .word 0x04000242 -_020C6F48: .word 0x04000243 -_020C6F4C: .word 0x04000244 -_020C6F50: .word 0x04000245 -_020C6F54: .word 0x04000246 -_020C6F58: .word 0x04000248 -_020C6F5C: .word 0x04000249 +.extern GX_VRAMCNT_SetLCDC_ +;GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 +; ands r1, r0, #0x1 +; ldrne r1, _020C6F3C ; =0x04000240 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x2 +; ldrne r1, _020C6F40 ; =0x04000241 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x4 +; ldrne r1, _020C6F44 ; =0x04000242 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x8 +; ldrne r1, _020C6F48 ; =0x04000243 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x10 +; ldrne r1, _020C6F4C ; =0x04000244 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x20 +; ldrne r1, _020C6F50 ; =0x04000245 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x40 +; ldrne r1, _020C6F54 ; =0x04000246 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x80 +; ldrne r1, _020C6F58 ; =0x04000248 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r0, r0, #0x100 +; ldrne r0, _020C6F5C ; =0x04000249 +; movne r1, #0x80 +; strneb r1, [r0, #0x0] +; bx lr +; .balign 4 +;_020C6F3C: .word 0x04000240 +;_020C6F40: .word 0x04000241 +;_020C6F44: .word 0x04000242 +;_020C6F48: .word 0x04000243 +;_020C6F4C: .word 0x04000244 +;_020C6F50: .word 0x04000245 +;_020C6F54: .word 0x04000246 +;_020C6F58: .word 0x04000248 +;_020C6F5C: .word 0x04000249 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 03e26610..81138da3 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -34,11 +34,25 @@ #define HW_REG_SHININESS 0x040004D0 + +#define HW_REG_VRAMCNT_A 0x04000240 +#define HW_REG_VRAMCNT_B 0x04000241 +#define HW_REG_VRAMCNT_C 0x04000242 +#define HW_REG_VRAMCNT_D 0x04000243 +#define HW_REG_VRAMCNT_E 0x04000244 +#define HW_REG_VRAMCNT_F 0x04000245 +#define HW_REG_VRAMCNT_G 0x04000246 +#define HW_REG_WRAMCNT 0x04000247 +#define HW_REG_VRAMCNT_H 0x04000248 +#define HW_REG_VRAMCNT_I 0x04000249 + //TODO: wait for register commit and replace these +#define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) #define SETREG32(x, y) ((*(vu32 *)x) = y) #define SETREG64(x, y) ((*(vu64 *)x) = y) +#define READREG8(x) (*(vu8 *)x) #define READREG16(x) (*(vu16 *)x) #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) diff --git a/arm9/lib/src/GX_vramcnt_c.c b/arm9/lib/src/GX_vramcnt_c.c new file mode 100644 index 00000000..50107888 --- /dev/null +++ b/arm9/lib/src/GX_vramcnt_c.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void GX_VRAMCNT_SetLCDC_(u32 r0){ + if (r0 & (0x1 << 0)) + SETREG8(HW_REG_VRAMCNT_A, 0x80); + if (r0 & (0x1 << 1)) + SETREG8(HW_REG_VRAMCNT_B, 0x80); + if (r0 & (0x1 << 2)) + SETREG8(HW_REG_VRAMCNT_C, 0x80); + if (r0 & (0x1 << 3)) + SETREG8(HW_REG_VRAMCNT_D, 0x80); + if (r0 & (0x1 << 4)) + SETREG8(HW_REG_VRAMCNT_E, 0x80); + if (r0 & (0x1 << 5)) + SETREG8(HW_REG_VRAMCNT_F, 0x80); + if (r0 & (0x1 << 6)) + SETREG8(HW_REG_VRAMCNT_G, 0x80); + if (r0 & (0x1 << 7)) + SETREG8(HW_REG_VRAMCNT_H, 0x80); + if (r0 & (0x1 << 8)) + SETREG8(HW_REG_VRAMCNT_I, 0x80); +} -- cgit v1.2.3 From 435f3ce09ee75bc612ac5e827e62a341249c3c67 Mon Sep 17 00:00:00 2001 From: Made Date: Sun, 10 May 2020 04:14:47 +0200 Subject: Finish edcompiling GX_vramcnt.s --- arm9/arm9.lcf | 1 - arm9/asm/GX_vramcnt.s | 1540 ------------------------------------------- arm9/lib/include/gx.h | 78 +++ arm9/lib/src/GX_vramcnt.c | 581 ++++++++++++++++ arm9/lib/src/GX_vramcnt_c.c | 24 - arm9/undefined_syms.txt | 3 + 6 files changed, 662 insertions(+), 1565 deletions(-) delete mode 100644 arm9/asm/GX_vramcnt.s create mode 100644 arm9/lib/src/GX_vramcnt.c delete mode 100644 arm9/lib/src/GX_vramcnt_c.c diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 91b80e07..68347ea4 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -148,7 +148,6 @@ SECTIONS { GX.o (.text) GX_state.o (.text) GX_vramcnt.o (.text) - GX_vramcnt_c.o (.text) GX_bgcnt.o (.text) GX_g2.o (.text) GX_g3b.o (.text) diff --git a/arm9/asm/GX_vramcnt.s b/arm9/asm/GX_vramcnt.s deleted file mode 100644 index bf11bd92..00000000 --- a/arm9/asm/GX_vramcnt.s +++ /dev/null @@ -1,1540 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_GetBankForSubOBJExtPltt -GX_GetBankForSubOBJExtPltt: ; 0x020C5D2C - ldr r0, _020C5D38 ; =0x021D33C4 - ldrh r0, [r0, #0x18] - bx lr - .balign 4 -_020C5D38: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubBGExtPltt -GX_GetBankForSubBGExtPltt: ; 0x020C5D3C - ldr r0, _020C5D48 ; =0x021D33C4 - ldrh r0, [r0, #0x16] - bx lr - .balign 4 -_020C5D48: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubOBJ -GX_GetBankForSubOBJ: ; 0x020C5D4C - ldr r0, _020C5D58 ; =0x021D33C4 - ldrh r0, [r0, #0x14] - bx lr - .balign 4 -_020C5D58: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubBGExtPltt_2 -GX_GetBankForSubBGExtPltt_2: ; 0x020C5D5C - ldr r0, _020C5D68 ; =0x021D33C4 - ldrh r0, [r0, #0x12] - bx lr - .balign 4 -_020C5D68: .word 0x021D33C4 - - arm_func_start GX_GetBankForLCDC -GX_GetBankForLCDC: ; 0x020C5D6C - ldr r0, _020C5D78 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bx lr - .balign 4 -_020C5D78: .word 0x021D33C4 - - arm_func_start GX_GetBankForTexPltt -GX_GetBankForTexPltt: ; 0x020C5D7C - ldr r0, _020C5D88 ; =0x021D33C4 - - arm_func_start FUN_020C5D80 -FUN_020C5D80: ; 0x020C5D80 - ldrh r0, [r0, #0xa] - bx lr - .balign 4 -_020C5D88: .word 0x021D33C4 - - arm_func_start FUN_020C5D8C -FUN_020C5D8C: ; 0x020C5D8C - ldr r0, _020C5D98 ; =0x021D33C4 - ldrh r0, [r0, #0x8] - bx lr - .balign 4 -_020C5D98: .word 0x021D33C4 - - arm_func_start GX_GetBankForOBJExtPltt -GX_GetBankForOBJExtPltt: ; 0x020C5D9C - ldr r0, _020C5DA8 ; =0x021D33C4 - ldrh r0, [r0, #0x10] - bx lr - .balign 4 -_020C5DA8: .word 0x021D33C4 - - arm_func_start GX_GetBankForBGExtPltt -GX_GetBankForBGExtPltt: ; 0x020C5DAC - ldr r0, _020C5DB8 ; =0x021D33C4 - ldrh r0, [r0, #0xe] - bx lr - .balign 4 -_020C5DB8: .word 0x021D33C4 - - arm_func_start GX_GetBankForOBJ -GX_GetBankForOBJ: ; 0x020C5DBC - ldr r0, _020C5DC8 ; =0x021D33C4 - ldrh r0, [r0, #0x4] - bx lr - .balign 4 -_020C5DC8: .word 0x021D33C4 - - arm_func_start GX_GetBankForBGExtPltt_2 -GX_GetBankForBGExtPltt_2: ; 0x020C5DCC - ldr r0, _020C5DD8 ; =0x021D33C4 - ldrh r0, [r0, #0x2] - bx lr - .balign 4 -_020C5DD8: .word 0x021D33C4 - - arm_func_start GX_DisableBankForSubOBJExtPltt -GX_DisableBankForSubOBJExtPltt: ; 0x020C5DDC - ldr r2, _020C5DF8 ; =0x04001000 - ldr ip, _020C5DFC ; =FUN_020C5F28 - ldr r1, [r2, #0x0] - ldr r0, _020C5E00 ; =0x021D33DC - bic r1, r1, #0x80000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5DF8: .word 0x04001000 -_020C5DFC: .word FUN_020C5F28 -_020C5E00: .word 0x021D33DC - - arm_func_start FUN_020C5E04 -FUN_020C5E04: ; 0x020C5E04 - ldr r2, _020C5E20 ; =0x04001000 - ldr ip, _020C5E24 ; =FUN_020C5F28 - ldr r1, [r2, #0x0] - ldr r0, _020C5E28 ; =0x021D33DA - bic r1, r1, #0x40000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5E20: .word 0x04001000 -_020C5E24: .word FUN_020C5F28 -_020C5E28: .word 0x021D33DA - - arm_func_start GX_DisableBankForSubOBJExtPltt_2 -GX_DisableBankForSubOBJExtPltt_2: ; 0x020C5E2C - ldr ip, _020C5E38 ; =FUN_020C5F28 - ldr r0, _020C5E3C ; =0x021D33D8 - bx r12 - .balign 4 -_020C5E38: .word FUN_020C5F28 -_020C5E3C: .word 0x021D33D8 - - arm_func_start GX_DisableBankForSubBGExtPltt -GX_DisableBankForSubBGExtPltt: ; 0x020C5E40 - ldr ip, _020C5E4C ; =FUN_020C5F28 - ldr r0, _020C5E50 ; =0x021D33D6 - bx r12 - .balign 4 -_020C5E4C: .word FUN_020C5F28 -_020C5E50: .word 0x021D33D6 - - arm_func_start GX_DisableBankForLCDC -GX_DisableBankForLCDC: ; 0x020C5E54 - ldr ip, _020C5E60 ; =FUN_020C5F28 - ldr r0, _020C5E64 ; =0x021D33C4 - bx r12 - .balign 4 -_020C5E60: .word FUN_020C5F28 -_020C5E64: .word 0x021D33C4 - - arm_func_start GX_DisableBankForARM7 -GX_DisableBankForARM7: ; 0x020C5E68 - ldr ip, _020C5E74 ; =FUN_020C5F28 - ldr r0, _020C5E78 ; =0x021D33CA - bx r12 - .balign 4 -_020C5E74: .word FUN_020C5F28 -_020C5E78: .word 0x021D33CA - - arm_func_start GX_DisableBankForClearImage -GX_DisableBankForClearImage: ; 0x020C5E7C - ldr ip, _020C5E88 ; =FUN_020C5F28 - ldr r0, _020C5E8C ; =0x021D33D0 - bx r12 - .balign 4 -_020C5E88: .word FUN_020C5F28 -_020C5E8C: .word 0x021D33D0 - - arm_func_start GX_DisableBankForTexPltt -GX_DisableBankForTexPltt: ; 0x020C5E90 - ldr ip, _020C5E9C ; =FUN_020C5F28 - ldr r0, _020C5EA0 ; =0x021D33CE - bx r12 - .balign 4 -_020C5E9C: .word FUN_020C5F28 -_020C5EA0: .word 0x021D33CE - - arm_func_start GX_DisableBankForTexPltt_2 -GX_DisableBankForTexPltt_2: ; 0x020C5EA4 - ldr ip, _020C5EB0 ; =FUN_020C5F28 - ldr r0, _020C5EB4 ; =0x021D33CC - bx r12 - .balign 4 -_020C5EB0: .word FUN_020C5F28 -_020C5EB4: .word 0x021D33CC - - arm_func_start GX_DisableBankForOBJExtPltt -GX_DisableBankForOBJExtPltt: ; 0x020C5EB8 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C5ED4 ; =FUN_020C5F28 - bic r1, r1, #0x80000000 - ldr r0, _020C5ED8 ; =0x021D33D4 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5ED4: .word FUN_020C5F28 -_020C5ED8: .word 0x021D33D4 - - arm_func_start GX_DisableBankForBGExtPltt -GX_DisableBankForBGExtPltt: ; 0x020C5EDC - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C5EF8 ; =FUN_020C5F28 - bic r1, r1, #0x40000000 - ldr r0, _020C5EFC ; =0x021D33D2 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5EF8: .word FUN_020C5F28 -_020C5EFC: .word 0x021D33D2 - - arm_func_start GX_DisableBankForOBJExtPltt_2 -GX_DisableBankForOBJExtPltt_2: ; 0x020C5F00 - ldr ip, _020C5F0C ; =FUN_020C5F28 - ldr r0, _020C5F10 ; =0x021D33C8 - bx r12 - .balign 4 -_020C5F0C: .word FUN_020C5F28 -_020C5F10: .word 0x021D33C8 - - arm_func_start disableBankForX_ -disableBankForX_: ; 0x020C5F14 - ldr ip, _020C5F20 ; =FUN_020C5F28 - ldr r0, _020C5F24 ; =0x021D33C6 - bx r12 - .balign 4 -_020C5F20: .word FUN_020C5F28 -_020C5F24: .word 0x021D33C6 - - arm_func_start FUN_020C5F28 -FUN_020C5F28: ; 0x020C5F28 - stmdb sp!, {r4,lr} - ldrh r4, [r0, #0x0] - mov r1, #0x0 - strh r1, [r0, #0x0] - ands r0, r4, #0x1 - ldrne r0, _020C5FE4 ; =0x04000240 - strneb r1, [r0, #0x0] - ands r0, r4, #0x2 - ldrne r0, _020C5FE8 ; =0x04000241 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x4 - ldrne r0, _020C5FEC ; =0x04000242 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x8 - ldrne r0, _020C5FF0 ; =0x04000243 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x10 - ldrne r0, _020C5FF4 ; =0x04000244 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x20 - ldrne r0, _020C5FF8 ; =0x04000245 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x40 - ldrne r0, _020C5FFC ; =0x04000246 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x80 - ldrne r0, _020C6000 ; =0x04000248 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x100 - ldrne r0, _020C6004 ; =0x04000249 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ldr r1, _020C6008 ; =0x021D33BC - mov r0, r4, lsl #0x10 - ldrh r1, [r1, #0x0] - mov r0, r0, lsr #0x10 - bl OSi_UnlockVram - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C5FE4: .word 0x04000240 -_020C5FE8: .word 0x04000241 -_020C5FEC: .word 0x04000242 -_020C5FF0: .word 0x04000243 -_020C5FF4: .word 0x04000244 -_020C5FF8: .word 0x04000245 -_020C5FFC: .word 0x04000246 -_020C6000: .word 0x04000248 -_020C6004: .word 0x04000249 -_020C6008: .word 0x021D33BC - - arm_func_start GX_ResetBankForSubOBJ -GX_ResetBankForSubOBJ: ; 0x020C600C - ldr r2, _020C6028 ; =0x04001000 - ldr ip, _020C602C ; =FUN_020C6130 - ldr r1, [r2, #0x0] - ldr r0, _020C6030 ; =0x021D33DC - bic r1, r1, #0x80000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6028: .word 0x04001000 -_020C602C: .word FUN_020C6130 -_020C6030: .word 0x021D33DC - - arm_func_start FUN_020C6034 -FUN_020C6034: ; 0x020C6034 - ldr r2, _020C6050 ; =0x04001000 - ldr ip, _020C6054 ; =FUN_020C6130 - ldr r1, [r2, #0x0] - ldr r0, _020C6058 ; =0x021D33DA - bic r1, r1, #0x40000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6050: .word 0x04001000 -_020C6054: .word FUN_020C6130 -_020C6058: .word 0x021D33DA - - arm_func_start FUN_020C605C -FUN_020C605C: ; 0x020C605C - ldr ip, _020C6068 ; =FUN_020C6130 - ldr r0, _020C606C ; =0x021D33D8 - bx r12 - .balign 4 -_020C6068: .word FUN_020C6130 -_020C606C: .word 0x021D33D8 - - arm_func_start GX_ResetBankForSubBG -GX_ResetBankForSubBG: ; 0x020C6070 - ldr ip, _020C607C ; =FUN_020C6130 - ldr r0, _020C6080 ; =0x021D33D6 - bx r12 - .balign 4 -_020C607C: .word FUN_020C6130 -_020C6080: .word 0x021D33D6 - - arm_func_start GX_ResetBankForClearImage -GX_ResetBankForClearImage: ; 0x020C6084 - ldr ip, _020C6090 ; =FUN_020C6130 - ldr r0, _020C6094 ; =0x021D33D0 - bx r12 - .balign 4 -_020C6090: .word FUN_020C6130 -_020C6094: .word 0x021D33D0 - - arm_func_start GX_ResetBankForTexPltt -GX_ResetBankForTexPltt: ; 0x020C6098 - ldr ip, _020C60A4 ; =FUN_020C6130 - ldr r0, _020C60A8 ; =0x021D33CE - bx r12 - .balign 4 -_020C60A4: .word FUN_020C6130 -_020C60A8: .word 0x021D33CE - - arm_func_start GX_ResetBankForTex -GX_ResetBankForTex: ; 0x020C60AC - ldr ip, _020C60B8 ; =FUN_020C6130 - ldr r0, _020C60BC ; =0x021D33CC - bx r12 - .balign 4 -_020C60B8: .word FUN_020C6130 -_020C60BC: .word 0x021D33CC - - arm_func_start GX_ResetBankForOBJExtPltt -GX_ResetBankForOBJExtPltt: ; 0x020C60C0 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C60DC ; =FUN_020C6130 - bic r1, r1, #0x80000000 - ldr r0, _020C60E0 ; =0x021D33D4 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C60DC: .word FUN_020C6130 -_020C60E0: .word 0x021D33D4 - - arm_func_start GX_ResetBankForBGExtPltt -GX_ResetBankForBGExtPltt: ; 0x020C60E4 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C6100 ; =FUN_020C6130 - bic r1, r1, #0x40000000 - ldr r0, _020C6104 ; =0x021D33D2 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6100: .word FUN_020C6130 -_020C6104: .word 0x021D33D2 - - arm_func_start GX_ResetBankForOBJ -GX_ResetBankForOBJ: ; 0x020C6108 - ldr ip, _020C6114 ; =FUN_020C6130 - ldr r0, _020C6118 ; =0x021D33C8 - bx r12 - .balign 4 -_020C6114: .word FUN_020C6130 -_020C6118: .word 0x021D33C8 - - arm_func_start GX_ResetBankForBG -GX_ResetBankForBG: ; 0x020C611C - ldr ip, _020C6128 ; =FUN_020C6130 - ldr r0, _020C612C ; =0x021D33C6 - bx r12 - .balign 4 -_020C6128: .word FUN_020C6130 -_020C612C: .word 0x021D33C6 - - arm_func_start FUN_020C6130 -FUN_020C6130: ; 0x020C6130 - stmdb sp!, {r4,lr} - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020C6164 ; =0x021D33C4 - strh r2, [r0, #0x0] - ldrh r2, [r1, #0x0] - mov r0, r4 - orr r2, r2, r4 - strh r2, [r1, #0x0] - bl GX_VRAMCNT_SetLCDC_ - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C6164: .word 0x021D33C4 - - arm_func_start GX_SetBankForSubOBJExtPltt -GX_SetBankForSubOBJExtPltt: ; 0x020C6168 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C61E8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x18] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x18] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C61C0 - cmp r0, #0x100 - bne _020C61D0 - ldr r3, _020C61EC ; =0x04001000 - ldr r0, _020C61F0 ; =0x04000249 - ldr r2, [r3, #0x0] - mov r1, #0x83 - orr r2, r2, #0x80000000 - str r2, [r3, #0x0] - strb r1, [r0, #0x0] - b _020C61D0 -_020C61C0: - ldr r1, _020C61EC ; =0x04001000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x80000000 - str r0, [r1, #0x0] -_020C61D0: - ldr r0, _020C61E8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C61E8: .word 0x021D33C4 -_020C61EC: .word 0x04001000 -_020C61F0: .word 0x04000249 - - arm_func_start GX_SetBankForSubBGExtPltt -GX_SetBankForSubBGExtPltt: ; 0x020C61F4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6274 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x16] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x16] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C624C - cmp r0, #0x80 - bne _020C625C - ldr r3, _020C6278 ; =0x04001000 - ldr r0, _020C627C ; =0x04000248 - ldr r2, [r3, #0x0] - mov r1, #0x82 - orr r2, r2, #0x40000000 - str r2, [r3, #0x0] - strb r1, [r0, #0x0] - b _020C625C -_020C624C: - ldr r1, _020C6278 ; =0x04001000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x40000000 - str r0, [r1, #0x0] -_020C625C: - ldr r0, _020C6274 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6274: .word 0x021D33C4 -_020C6278: .word 0x04001000 -_020C627C: .word 0x04000248 - - arm_func_start GX_SetBankForSubOBJ -GX_SetBankForSubOBJ: ; 0x020C6280 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C62F0 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x14] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x14] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C62D8 - cmp r0, #0x8 - beq _020C62CC - cmp r0, #0x100 - ldreq r0, _020C62F4 ; =0x04000249 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C62D8 -_020C62CC: - ldr r0, _020C62F8 ; =0x04000243 - mov r1, #0x84 - strb r1, [r0, #0x0] -_020C62D8: - ldr r0, _020C62F0 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C62F0: .word 0x021D33C4 -_020C62F4: .word 0x04000249 -_020C62F8: .word 0x04000243 - - arm_func_start GX_SetBankForSubBG -GX_SetBankForSubBG: ; 0x020C62FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6398 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x12] - ldrh r3, [r1, #0x0] - cmp r0, #0x80 - strh r0, [r1, #0x12] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6360 - cmp r0, #0x80 - bge _020C6374 - cmp r0, #0x4 - bgt _020C6380 - cmp r0, #0x0 - blt _020C6380 - cmp r0, #0x0 - beq _020C6380 - cmp r0, #0x4 - ldreq r0, _020C639C ; =0x04000242 - moveq r1, #0x84 - streqb r1, [r0, #0x0] - b _020C6380 -_020C6360: - cmp r0, #0x180 - bne _020C6380 - ldr r0, _020C63A0 ; =0x04000249 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6374: - ldr r0, _020C63A4 ; =0x04000248 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6380: - ldr r0, _020C6398 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6398: .word 0x021D33C4 -_020C639C: .word 0x04000242 -_020C63A0: .word 0x04000249 -_020C63A4: .word 0x04000248 - - arm_func_start GX_SetBankForLCDC -GX_SetBankForLCDC: ; 0x020C63A8 - ldr r1, _020C63C0 ; =0x021D33C4 - ldr ip, _020C63C4 ; =GX_VRAMCNT_SetLCDC_ - ldrh r2, [r1, #0x0] - orr r2, r2, r0 - strh r2, [r1, #0x0] - bx r12 - .balign 4 -_020C63C0: .word 0x021D33C4 -_020C63C4: .word GX_VRAMCNT_SetLCDC_ - - arm_func_start GX_SetBankForARM7 -GX_SetBankForARM7: ; 0x020C63C8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6474 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x6] - ldrh r3, [r1, #0x0] - cmp r0, #0x8 - strh r0, [r1, #0x6] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C642C - cmp r0, #0x8 - bge _020C6450 - cmp r0, #0x4 - bgt _020C645C - cmp r0, #0x0 - blt _020C645C - cmp r0, #0x0 - beq _020C645C - cmp r0, #0x4 - ldreq r0, _020C6478 ; =0x04000242 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C645C -_020C642C: - cmp r0, #0xc - bne _020C645C - ldr r1, _020C647C ; =0x04000243 - mov r2, #0x8a - strb r2, [r1, #0x0] - ldr r0, _020C6478 ; =0x04000242 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C645C -_020C6450: - ldr r0, _020C647C ; =0x04000243 - mov r1, #0x82 - strb r1, [r0, #0x0] -_020C645C: - ldr r0, _020C6474 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6474: .word 0x021D33C4 -_020C6478: .word 0x04000242 -_020C647C: .word 0x04000243 - - arm_func_start GX_SetBankForClearImage -GX_SetBankForClearImage: ; 0x020C6480 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C65A8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xc] - ldrh r3, [r1, #0x0] - cmp r0, #0xc - strh r0, [r1, #0xc] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C6590 -_020C64B4: ; 0x020C64B4 - b _020C6540 -_020C64B8: ; 0x020C64B8 - b _020C6554 -_020C64BC: ; 0x020C64BC - b _020C64F4 -_020C64C0: ; 0x020C64C0 - b _020C64E8 -_020C64C4: ; 0x020C64C4 - b _020C6574 -_020C64C8: ; 0x020C64C8 - b _020C6590 -_020C64CC: ; 0x020C64CC - b _020C6590 -_020C64D0: ; 0x020C64D0 - b _020C6590 -_020C64D4: ; 0x020C64D4 - b _020C6520 -_020C64D8: ; 0x020C64D8 - b _020C6590 -_020C64DC: ; 0x020C64DC - b _020C6590 -_020C64E0: ; 0x020C64E0 - b _020C6590 -_020C64E4: ; 0x020C64E4 - b _020C6514 -_020C64E8: - ldr r0, _020C65AC ; =0x04000240 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C64F4: - ldr r0, _020C65B0 ; =0x04000241 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6514: - ldr r0, _020C65B8 ; =0x04000242 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6520: - ldr r0, _020C65BC ; =0x04000243 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6540: - ldr r1, _020C65B4 ; =0x04000060 - ldrh r0, [r1, #0x0] - bic r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6554: - ldr r0, _020C65AC ; =0x04000240 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6574: - ldr r0, _020C65B8 ; =0x04000242 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] -_020C6590: - ldr r0, _020C65A8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C65A8: .word 0x021D33C4 -_020C65AC: .word 0x04000240 -_020C65B0: .word 0x04000241 -_020C65B4: .word 0x04000060 -_020C65B8: .word 0x04000242 -_020C65BC: .word 0x04000243 - - arm_func_start GX_SetBankForTexPltt -GX_SetBankForTexPltt: ; 0x020C65C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C66A4 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xa] - ldrh r3, [r1, #0x0] - cmp r0, #0x30 - strh r0, [r1, #0xa] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C661C - cmp r0, #0x30 - bge _020C6674 - cmp r0, #0x10 - bgt _020C6610 - cmp r0, #0x10 - bge _020C6680 - cmp r0, #0x0 - b _020C668C -_020C6610: - cmp r0, #0x20 - beq _020C6658 - b _020C668C -_020C661C: - cmp r0, #0x60 - bgt _020C6640 - cmp r0, #0x60 - bge _020C664C - cmp r0, #0x40 - ldreq r0, _020C66A8 ; =0x04000246 - moveq r1, #0x83 - streqb r1, [r0, #0x0] - b _020C668C -_020C6640: - cmp r0, #0x70 - beq _020C6668 - b _020C668C -_020C664C: - ldr r0, _020C66A8 ; =0x04000246 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6658: - ldr r0, _020C66AC ; =0x04000245 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C668C -_020C6668: - ldr r0, _020C66A8 ; =0x04000246 - mov r1, #0x9b - strb r1, [r0, #0x0] -_020C6674: - ldr r0, _020C66AC ; =0x04000245 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6680: - ldr r0, _020C66B0 ; =0x04000244 - mov r1, #0x83 - strb r1, [r0, #0x0] -_020C668C: - ldr r0, _020C66A4 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C66A4: .word 0x021D33C4 -_020C66A8: .word 0x04000246 -_020C66AC: .word 0x04000245 -_020C66B0: .word 0x04000244 - - arm_func_start GX_SetBankForTex -GX_SetBankForTex: ; 0x020C66B4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C689C ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x8] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x8] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bne _020C66FC - ldr r2, _020C68A0 ; =0x04000060 - ldr r0, _020C68A4 ; =0x0000CFFE - ldrh r1, [r2, #0x0] - and r0, r1, r0 - strh r0, [r2, #0x0] - b _020C6884 -_020C66FC: - ldr r2, _020C68A0 ; =0x04000060 - cmp r0, #0xf - ldrh r1, [r2, #0x0] - bic r1, r1, #0x3000 - orr r1, r1, #0x1 - strh r1, [r2, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C6884 -_020C671C: ; 0x020C671C - b _020C6884 -_020C6720: ; 0x020C6720 - b _020C6878 -_020C6724: ; 0x020C6724 - b _020C6844 -_020C6728: ; 0x020C6728 - b _020C686C -_020C672C: ; 0x020C672C - b _020C681C -_020C6730: ; 0x020C6730 - b _020C675C -_020C6734: ; 0x020C6734 - b _020C6838 -_020C6738: ; 0x020C6738 - b _020C6860 -_020C673C: ; 0x020C673C - b _020C6800 -_020C6740: ; 0x020C6740 - b _020C6778 -_020C6744: ; 0x020C6744 - b _020C6794 -_020C6748: ; 0x020C6748 - b _020C67B0 -_020C674C: ; 0x020C674C - b _020C6810 -_020C6750: ; 0x020C6750 - b _020C67D8 -_020C6754: ; 0x020C6754 - b _020C682C -_020C6758: ; 0x020C6758 - b _020C6854 -_020C675C: - ldr r1, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r0, _020C68AC ; =0x04000242 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C6778: - ldr r1, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C6794: - ldr r1, _020C68B4 ; =0x04000241 - mov r2, #0x83 - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C67B0: - ldr r0, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r1, _020C68B4 ; =0x04000241 - strb r2, [r0, #0x0] - mov r2, #0x8b - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x93 - strb r1, [r0, #0x0] - b _020C6884 -_020C67D8: - ldr r0, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r1, _020C68AC ; =0x04000242 - strb r2, [r0, #0x0] - mov r2, #0x8b - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x93 - strb r1, [r0, #0x0] - b _020C6884 -_020C6800: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C6810: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C681C: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C682C: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6838: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6844: - ldr r0, _020C68B4 ; =0x04000241 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C6854: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x9b - strb r1, [r0, #0x0] -_020C6860: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C686C: - ldr r0, _020C68B4 ; =0x04000241 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6878: - ldr r0, _020C68A8 ; =0x04000240 - mov r1, #0x83 - strb r1, [r0, #0x0] -_020C6884: - ldr r0, _020C689C ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C689C: .word 0x021D33C4 -_020C68A0: .word 0x04000060 -_020C68A4: .word 0x0000CFFE -_020C68A8: .word 0x04000240 -_020C68AC: .word 0x04000242 -_020C68B0: .word 0x04000243 -_020C68B4: .word 0x04000241 - - arm_func_start GX_SetBankForOBJExtPltt -GX_SetBankForOBJExtPltt: ; 0x020C68B8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6964 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x10] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x10] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C693C - cmp r0, #0x20 - beq _020C68FC - cmp r0, #0x40 - beq _020C691C - b _020C694C -_020C68FC: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6968 ; =0x04000245 - orr r1, r1, #0x80000000 - str r1, [r2, #0x0] - mov r1, #0x85 - strb r1, [r0, #0x0] - b _020C694C -_020C691C: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C696C ; =0x04000246 - orr r1, r1, #0x80000000 - str r1, [r2, #0x0] - mov r1, #0x85 - strb r1, [r0, #0x0] - b _020C694C -_020C693C: - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x80000000 - str r0, [r1, #0x0] -_020C694C: - ldr r0, _020C6964 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6964: .word 0x021D33C4 -_020C6968: .word 0x04000245 -_020C696C: .word 0x04000246 - - arm_func_start GX_SetBankForBGExtPltt -GX_SetBankForBGExtPltt: ; 0x020C6970 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6A74 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xe] - ldrh r3, [r1, #0x0] - cmp r0, #0x20 - strh r0, [r1, #0xe] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C69D4 - cmp r0, #0x20 - bge _020C6A40 - cmp r0, #0x0 - bgt _020C69C8 - cmp r0, #0x0 - moveq r1, #0x4000000 - ldreq r0, [r1, #0x0] - biceq r0, r0, #0x40000000 - streq r0, [r1, #0x0] - b _020C6A5C -_020C69C8: - cmp r0, #0x10 - beq _020C69F4 - b _020C6A5C -_020C69D4: - cmp r0, #0x40 - bgt _020C69E8 - cmp r0, #0x40 - beq _020C6A14 - b _020C6A5C -_020C69E8: - cmp r0, #0x60 - beq _020C6A34 - b _020C6A5C -_020C69F4: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6A78 ; =0x04000244 - orr r1, r1, #0x40000000 - str r1, [r2, #0x0] - mov r1, #0x84 - strb r1, [r0, #0x0] - b _020C6A5C -_020C6A14: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6A7C ; =0x04000246 - orr r1, r1, #0x40000000 - str r1, [r2, #0x0] - mov r1, #0x8c - strb r1, [r0, #0x0] - b _020C6A5C -_020C6A34: - ldr r0, _020C6A7C ; =0x04000246 - mov r1, #0x8c - strb r1, [r0, #0x0] -_020C6A40: - ldr r0, _020C6A80 ; =0x04000245 - mov r1, #0x84 - strb r1, [r0, #0x0] - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - orr r0, r0, #0x40000000 - str r0, [r1, #0x0] -_020C6A5C: - ldr r0, _020C6A74 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6A74: .word 0x021D33C4 -_020C6A78: .word 0x04000244 -_020C6A7C: .word 0x04000246 -_020C6A80: .word 0x04000245 - - arm_func_start GX_SetBankForOBJ -GX_SetBankForOBJ: ; 0x020C6A84 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6BD8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x4] - ldrh r3, [r1, #0x0] - cmp r0, #0x30 - strh r0, [r1, #0x4] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6AF4 - cmp r0, #0x30 - bge _020C6B70 - cmp r0, #0x10 - bgt _020C6AE8 - cmp r0, #0x10 - bge _020C6B7C - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020C6BC0 -_020C6AD8: ; 0x020C6AD8 - b _020C6BC0 -_020C6ADC: ; 0x020C6ADC - b _020C6B44 -_020C6AE0: ; 0x020C6AE0 - b _020C6B54 -_020C6AE4: ; 0x020C6AE4 - b _020C6B38 -_020C6AE8: - cmp r0, #0x20 - beq _020C6BB4 - b _020C6BC0 -_020C6AF4: - cmp r0, #0x50 - bgt _020C6B18 - cmp r0, #0x50 - bge _020C6B8C - cmp r0, #0x40 - ldreq r0, _020C6BDC ; =0x04000246 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C6BC0 -_020C6B18: - cmp r0, #0x60 - bgt _020C6B2C - cmp r0, #0x60 - beq _020C6BA8 - b _020C6BC0 -_020C6B2C: - cmp r0, #0x70 - beq _020C6B64 - b _020C6BC0 -_020C6B38: - ldr r0, _020C6BE0 ; =0x04000241 - mov r1, #0x8a - strb r1, [r0, #0x0] -_020C6B44: - ldr r0, _020C6BE4 ; =0x04000240 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B54: - ldr r0, _020C6BE0 ; =0x04000241 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B64: - ldr r0, _020C6BDC ; =0x04000246 - mov r1, #0x9a - strb r1, [r0, #0x0] -_020C6B70: - ldr r0, _020C6BE8 ; =0x04000245 - mov r1, #0x92 - strb r1, [r0, #0x0] -_020C6B7C: - ldr r0, _020C6BEC ; =0x04000244 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B8C: - ldr r1, _020C6BDC ; =0x04000246 - mov r2, #0x92 - ldr r0, _020C6BEC ; =0x04000244 - strb r2, [r1, #0x0] - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6BA8: - ldr r0, _020C6BDC ; =0x04000246 - mov r1, #0x8a - strb r1, [r0, #0x0] -_020C6BB4: - ldr r0, _020C6BE8 ; =0x04000245 - mov r1, #0x82 - strb r1, [r0, #0x0] -_020C6BC0: - ldr r0, _020C6BD8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6BD8: .word 0x021D33C4 -_020C6BDC: .word 0x04000246 -_020C6BE0: .word 0x04000241 -_020C6BE4: .word 0x04000240 -_020C6BE8: .word 0x04000245 -_020C6BEC: .word 0x04000244 - - arm_func_start GX_SetBankForBG -GX_SetBankForBG: ; 0x020C6BF0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6E88 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x2] - ldrh r3, [r1, #0x0] - cmp r0, #0x40 - strh r0, [r1, #0x2] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6CCC - cmp r0, #0x40 - bge _020C6E64 - cmp r0, #0x20 - bgt _020C6CC0 - cmp r0, #0x0 - addge pc, pc, r0, lsl #0x2 - b _020C6E70 -_020C6C3C: ; 0x020C6C3C - b _020C6E70 -_020C6C40: ; 0x020C6C40 - b _020C6D6C -_020C6C44: ; 0x020C6C44 - b _020C6D38 -_020C6C48: ; 0x020C6C48 - b _020C6D60 -_020C6C4C: ; 0x020C6C4C - b _020C6D10 -_020C6C50: ; 0x020C6C50 - b _020C6DB0 -_020C6C54: ; 0x020C6C54 - b _020C6D2C -_020C6C58: ; 0x020C6C58 - b _020C6D54 -_020C6C5C: ; 0x020C6C5C - b _020C6CF4 -_020C6C60: ; 0x020C6C60 - b _020C6DCC -_020C6C64: ; 0x020C6C64 - b _020C6DE8 -_020C6C68: ; 0x020C6C68 - b _020C6D7C -_020C6C6C: ; 0x020C6C6C - b _020C6D04 -_020C6C70: ; 0x020C6C70 - b _020C6DA4 -_020C6C74: ; 0x020C6C74 - b _020C6D20 -_020C6C78: ; 0x020C6C78 - b _020C6D48 -_020C6C7C: ; 0x020C6C7C - b _020C6E1C -_020C6C80: ; 0x020C6C80 - b _020C6E70 -_020C6C84: ; 0x020C6C84 - b _020C6E70 -_020C6C88: ; 0x020C6C88 - b _020C6E70 -_020C6C8C: ; 0x020C6C8C - b _020C6E70 -_020C6C90: ; 0x020C6C90 - b _020C6E70 -_020C6C94: ; 0x020C6C94 - b _020C6E70 -_020C6C98: ; 0x020C6C98 - b _020C6E70 -_020C6C9C: ; 0x020C6C9C - b _020C6E70 -_020C6CA0: ; 0x020C6CA0 - b _020C6E70 -_020C6CA4: ; 0x020C6CA4 - b _020C6E70 -_020C6CA8: ; 0x020C6CA8 - b _020C6E70 -_020C6CAC: ; 0x020C6CAC - b _020C6E70 -_020C6CB0: ; 0x020C6CB0 - b _020C6E70 -_020C6CB4: ; 0x020C6CB4 - b _020C6E70 -_020C6CB8: ; 0x020C6CB8 - b _020C6E70 -_020C6CBC: ; 0x020C6CBC - b _020C6E54 -_020C6CC0: - cmp r0, #0x30 - beq _020C6E10 - b _020C6E70 -_020C6CCC: - cmp r0, #0x60 - bgt _020C6CE8 - cmp r0, #0x60 - bge _020C6E48 - cmp r0, #0x50 - beq _020C6E2C - b _020C6E70 -_020C6CE8: - cmp r0, #0x70 - beq _020C6E04 - b _020C6E70 -_020C6CF4: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D04: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D10: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D20: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6D2C: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D38: - ldr r0, _020C6E94 ; =0x04000241 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D48: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x99 - strb r1, [r0, #0x0] -_020C6D54: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6D60: - ldr r0, _020C6E94 ; =0x04000241 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D6C: - ldr r0, _020C6E98 ; =0x04000240 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D7C: - ldr r0, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r1, _020C6E94 ; =0x04000241 - strb r2, [r0, #0x0] - mov r2, #0x89 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x91 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DA4: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6DB0: - ldr r1, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r0, _020C6E90 ; =0x04000242 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DCC: - ldr r1, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DE8: - ldr r1, _020C6E94 ; =0x04000241 - mov r2, #0x81 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E04: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x99 - strb r1, [r0, #0x0] -_020C6E10: - ldr r0, _020C6EA0 ; =0x04000245 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6E1C: - ldr r0, _020C6EA4 ; =0x04000244 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E2C: - ldr r1, _020C6E9C ; =0x04000246 - mov r2, #0x91 - ldr r0, _020C6EA4 ; =0x04000244 - strb r2, [r1, #0x0] - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E48: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6E54: - ldr r0, _020C6EA0 ; =0x04000245 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E64: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6E70: - ldr r0, _020C6E88 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6E88: .word 0x021D33C4 -_020C6E8C: .word 0x04000243 -_020C6E90: .word 0x04000242 -_020C6E94: .word 0x04000241 -_020C6E98: .word 0x04000240 -_020C6E9C: .word 0x04000246 -_020C6EA0: .word 0x04000245 -_020C6EA4: .word 0x04000244 - -.extern GX_VRAMCNT_SetLCDC_ -;GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 -; ands r1, r0, #0x1 -; ldrne r1, _020C6F3C ; =0x04000240 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x2 -; ldrne r1, _020C6F40 ; =0x04000241 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x4 -; ldrne r1, _020C6F44 ; =0x04000242 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x8 -; ldrne r1, _020C6F48 ; =0x04000243 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x10 -; ldrne r1, _020C6F4C ; =0x04000244 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x20 -; ldrne r1, _020C6F50 ; =0x04000245 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x40 -; ldrne r1, _020C6F54 ; =0x04000246 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x80 -; ldrne r1, _020C6F58 ; =0x04000248 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r0, r0, #0x100 -; ldrne r0, _020C6F5C ; =0x04000249 -; movne r1, #0x80 -; strneb r1, [r0, #0x0] -; bx lr -; .balign 4 -;_020C6F3C: .word 0x04000240 -;_020C6F40: .word 0x04000241 -;_020C6F44: .word 0x04000242 -;_020C6F48: .word 0x04000243 -;_020C6F4C: .word 0x04000244 -;_020C6F50: .word 0x04000245 -;_020C6F54: .word 0x04000246 -;_020C6F58: .word 0x04000248 -;_020C6F5C: .word 0x04000249 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 81138da3..a9cb07b1 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -46,6 +46,11 @@ #define HW_REG_VRAMCNT_H 0x04000248 #define HW_REG_VRAMCNT_I 0x04000249 +#define HW_REG_DISPCNT 0x04000000 +#define HW_REG_DISPCNT_2D 0x04001000 + +#define HW_REG_DISP3DCNT 0x04000060 + //TODO: wait for register commit and replace these #define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) @@ -57,6 +62,9 @@ #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) +//TODO: add SDK signatures and symbols +//TODO: add arm function attributes + struct DL { @@ -67,6 +75,23 @@ struct DL u32 var10; //pad end with zero bool }; +struct VRAM_banks +{ + u16 var00; //lcdc + u16 var02; //bg + u16 var04; //obj + u16 var06; //arm7 + u16 var08; //tex + u16 var0A; //texpltt + u16 var0C; //clearimage + u16 var0E; //bgextpltt + u16 var10; //objextpltt + u16 var12; //subbg + u16 var14; //subobj + u16 var16; //subbgextpltt + u16 var18; //subobjextpltt +}; + //GX_g3 void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); s32 G3_EndMakeDL(struct DL *displaylist); @@ -110,6 +135,59 @@ void G3B_End(struct DL * displaylist); //GX_asm void GX_SendFifo48B(void *src, void *dst); +//GX_vramcnt +//some of the symbols don't match what the function does +void GX_VRAMCNT_SetLCDC_(u32 mask); +void GX_SetBankForBG(u16 bg); +void GX_SetBankForOBJ(u16 obj); +void GX_SetBankForBGExtPltt(u16 bgextpltt); +void GX_SetBankForOBJExtPltt(u16 objextpltt); +void GX_SetBankForTex(u16 tex); +void GX_SetBankForTexPltt(u16 texpltt); +void GX_SetBankForClearImage(u16 clearimage); +void GX_SetBankForARM7(u16 arm7); +void GX_SetBankForLCDC(u16 lcdc); +void GX_SetBankForSubBG(u16 subbg); +void GX_SetBankForSubOBJ(u16 subobj); +void GX_SetBankForSubBGExtPltt(u16 subbgextpltt); +void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt); +u32 FUN_020C6130(u16 *ptr); +u32 GX_ResetBankForBG(); +u32 GX_ResetBankForOBJ(); +u32 GX_ResetBankForBGExtPltt(); +u32 GX_ResetBankForOBJExtPltt(); +u32 GX_ResetBankForTex(); +u32 GX_ResetBankForTexPltt(); +u32 GX_ResetBankForClearImage(); +u32 GX_ResetBankForSubBG(); +u32 FUN_020C605C(); +u32 FUN_020C6034(); +u32 GX_ResetBankForSubOBJ(); +u32 FUN_020C5F28(u16 *ptr); +u32 disableBankForX_(); +u32 GX_DisableBankForOBJExtPltt_2(); +u32 GX_DisableBankForBGExtPltt(); +u32 GX_DisableBankForOBJExtPltt(); +u32 GX_DisableBankForTexPltt_2(); +u32 GX_DisableBankForTexPltt(); +u32 GX_DisableBankForClearImage(); +u32 GX_DisableBankForARM7(); +u32 GX_DisableBankForLCDC(); +u32 GX_DisableBankForSubBGExtPltt(); +u32 GX_DisableBankForSubOBJExtPltt_2(); +u32 FUN_020C5E04(); +u32 GX_DisableBankForSubOBJExtPltt(); +u32 GX_GetBankForBGExtPltt_2(); +u32 GX_GetBankForOBJ(); +u32 GX_GetBankForBGExtPltt(); +u32 GX_GetBankForOBJExtPltt(); +u32 FUN_020C5D8C(); +u32 GX_GetBankForTexPltt(); +u32 GX_GetBankForLCDC(); +u32 GX_GetBankForSubBGExtPltt_2(); +u32 GX_GetBankForSubOBJ(); +u32 GX_GetBankForSubBGExtPltt(); +u32 GX_GetBankForSubOBJExtPltt(); //GXi_NopClearFifo128_ probably asm diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c new file mode 100644 index 00000000..aa3d9cc9 --- /dev/null +++ b/arm9/lib/src/GX_vramcnt.c @@ -0,0 +1,581 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u16 gUnk021D33BC; +extern struct VRAM_banks gUnk021D33C4; + +void OSi_UnlockVram(u16, u16); + +void GX_VRAMCNT_SetLCDC_(u32 mask){ + if (mask & (0x1 << 0)) + SETREG8(HW_REG_VRAMCNT_A, 0x80); + if (mask & (0x1 << 1)) + SETREG8(HW_REG_VRAMCNT_B, 0x80); + if (mask & (0x1 << 2)) + SETREG8(HW_REG_VRAMCNT_C, 0x80); + if (mask & (0x1 << 3)) + SETREG8(HW_REG_VRAMCNT_D, 0x80); + if (mask & (0x1 << 4)) + SETREG8(HW_REG_VRAMCNT_E, 0x80); + if (mask & (0x1 << 5)) + SETREG8(HW_REG_VRAMCNT_F, 0x80); + if (mask & (0x1 << 6)) + SETREG8(HW_REG_VRAMCNT_G, 0x80); + if (mask & (0x1 << 7)) + SETREG8(HW_REG_VRAMCNT_H, 0x80); + if (mask & (0x1 << 8)) + SETREG8(HW_REG_VRAMCNT_I, 0x80); +} + +void GX_SetBankForBG(u16 bg){ + gUnk021D33C4.var00 = ~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02); + gUnk021D33C4.var02 = bg; + switch (bg) + { + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x81); + break; + case 12: + SETREG8(HW_REG_VRAMCNT_D, 0x89); + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x81); + break; + case 14: + SETREG8(HW_REG_VRAMCNT_D, 0x91); + case 6: + SETREG8(HW_REG_VRAMCNT_C, 0x89); + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x81); + break; + case 15: + SETREG8(HW_REG_VRAMCNT_D, 0x99); + case 7: + SETREG8(HW_REG_VRAMCNT_C, 0x91); + case 3: + SETREG8(HW_REG_VRAMCNT_B, 0x89); + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + break; + case 11: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + SETREG8(HW_REG_VRAMCNT_B, 0x89); + SETREG8(HW_REG_VRAMCNT_D, 0x91); + break; + case 13: + SETREG8(HW_REG_VRAMCNT_D, 0x91); + case 5: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + SETREG8(HW_REG_VRAMCNT_C, 0x89); + break; + case 9: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + SETREG8(HW_REG_VRAMCNT_D, 0x89); + break; + case 10: + SETREG8(HW_REG_VRAMCNT_B, 0x81); + SETREG8(HW_REG_VRAMCNT_D, 0x89); + break; + case 112: + SETREG8(HW_REG_VRAMCNT_G, 0x99); + case 48: + SETREG8(HW_REG_VRAMCNT_F, 0x91); + case 16: + SETREG8(HW_REG_VRAMCNT_E, 0x81); + break; + case 80: + SETREG8(HW_REG_VRAMCNT_G, 0x91); + SETREG8(HW_REG_VRAMCNT_E, 0x81); + break; + case 96: + SETREG8(HW_REG_VRAMCNT_G, 0x89); + case 32: + SETREG8(HW_REG_VRAMCNT_F, 0x81); + break; + case 64: + SETREG8(HW_REG_VRAMCNT_G, 0x81); + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForOBJ(u16 obj){ + gUnk021D33C4.var00 = ~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04); + gUnk021D33C4.var04 = obj; + switch (obj) + { + case 3: + SETREG8(HW_REG_VRAMCNT_B, 0x8A); + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x82); + case 0: //needed to match + break; + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x82); + break; + case 112: + SETREG8(HW_REG_VRAMCNT_G, 0x9A); + case 48: + SETREG8(HW_REG_VRAMCNT_F, 0x92); + case 16: + SETREG8(HW_REG_VRAMCNT_E, 0x82); + break; + case 80: + SETREG8(HW_REG_VRAMCNT_G, 0x92); + SETREG8(HW_REG_VRAMCNT_E, 0x82); + break; + case 96: + SETREG8(HW_REG_VRAMCNT_G, 0x8A); + case 32: + SETREG8(HW_REG_VRAMCNT_F, 0x82); + break; + case 64: + SETREG8(HW_REG_VRAMCNT_G, 0x82); + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForBGExtPltt(u16 bgextpltt){ + gUnk021D33C4.var00 = ~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E); + gUnk021D33C4.var0E = bgextpltt; + switch (bgextpltt) + { + case 0x10: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + SETREG8(HW_REG_VRAMCNT_E, 0x84); + break; + case 0x40: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + SETREG8(HW_REG_VRAMCNT_G, 0x8C); + break; + case 0x60: + SETREG8(HW_REG_VRAMCNT_G, 0x8C); + case 0x20: + SETREG8(HW_REG_VRAMCNT_F, 0x84); + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + break; + case 0: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForOBJExtPltt(u16 objextpltt){ + gUnk021D33C4.var00 = ~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10); + gUnk021D33C4.var10 = objextpltt; + switch (objextpltt) + { + case 32: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); + SETREG8(HW_REG_VRAMCNT_F, 0x85); + break; + case 64: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); + SETREG8(HW_REG_VRAMCNT_G, 0x85); + break; + case 0: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForTex(u16 tex){ + gUnk021D33C4.var00 = ~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08); + gUnk021D33C4.var08 = tex; + if (tex == 0) + { + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & 0x0000CFFE); + } + else + { + SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) & ~0x3000) | 0x1); + switch (tex) + { + case 5: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_C, 0x8B); + break; + case 9: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_D, 0x8B); + break; + case 10: + SETREG8(HW_REG_VRAMCNT_B, 0x83); + SETREG8(HW_REG_VRAMCNT_D, 0x8B); + break; + case 11: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_B, 0x8B); + SETREG8(HW_REG_VRAMCNT_D, 0x93); + break; + case 13: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_C, 0x8B); + SETREG8(HW_REG_VRAMCNT_D, 0x93); + break; + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x83); + break; + case 12: + SETREG8(HW_REG_VRAMCNT_D, 0x8B); + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x83); + break; + case 14: + SETREG8(HW_REG_VRAMCNT_D, 0x93); + case 6: + SETREG8(HW_REG_VRAMCNT_C, 0x8B); + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x83); + break; + case 15: + SETREG8(HW_REG_VRAMCNT_D, 0x9B); + case 7: + SETREG8(HW_REG_VRAMCNT_C, 0x93); + case 3: + SETREG8(HW_REG_VRAMCNT_B, 0x8B); + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + break; + } + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForTexPltt(u16 texpltt){ + gUnk021D33C4.var00 = ~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A); + gUnk021D33C4.var0A = texpltt; + switch (texpltt) + { + case 0: //needed to match + break; + case 96: + SETREG8(HW_REG_VRAMCNT_G, 0x8B); + case 32: + SETREG8(HW_REG_VRAMCNT_F, 0x83); + break; + case 112: + SETREG8(HW_REG_VRAMCNT_G, 0x9B); + case 48: + SETREG8(HW_REG_VRAMCNT_F, 0x93); + case 16: + SETREG8(HW_REG_VRAMCNT_E, 0x83); + break; + case 64: + SETREG8(HW_REG_VRAMCNT_G, 0x83); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForClearImage(u16 clearimage){ + gUnk021D33C4.var00 = ~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C); + gUnk021D33C4.var0C = clearimage; + switch (clearimage) + { + case 3: + SETREG8(HW_REG_VRAMCNT_A, 0x93); + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + break; + case 12: + SETREG8(HW_REG_VRAMCNT_C, 0x93); + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + break; + case 0: + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x4000); + break; + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + break; + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForARM7(u16 arm7){ + gUnk021D33C4.var00 = ~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06); + gUnk021D33C4.var06 = arm7; + switch (arm7) + { + case 0: //needed to match + break; + case 12: + SETREG8(HW_REG_VRAMCNT_D, 0x8A); + SETREG8(HW_REG_VRAMCNT_C, 0x82); + break; + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x82); + break; + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x82); + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForLCDC(u16 lcdc){ + gUnk021D33C4.var00 |= lcdc; + GX_VRAMCNT_SetLCDC_(lcdc); +} + +void GX_SetBankForSubBG(u16 subbg){ + gUnk021D33C4.var00 = ~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12); + gUnk021D33C4.var12 = subbg; + switch (subbg) + { + case 0: //needed to match + break; + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x84); + break; + case 384: + SETREG8(HW_REG_VRAMCNT_I, 0x81); + case 128: + SETREG8(HW_REG_VRAMCNT_H, 0x81); + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + + +void GX_SetBankForSubOBJ(u16 subobj){ + gUnk021D33C4.var00 = ~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14); + gUnk021D33C4.var14 = subobj; + switch (subobj) + { + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x84); + break; + case 256: + SETREG8(HW_REG_VRAMCNT_I, 0x82); + break; + case 0: //needed to match + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForSubBGExtPltt(u16 subbgextpltt){ + gUnk021D33C4.var00 = ~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16); + gUnk021D33C4.var16 = subbgextpltt; + switch (subbgextpltt) + { + case 128: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x40000000); + SETREG8(HW_REG_VRAMCNT_H, 0x82); + break; + case 0: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt){ + gUnk021D33C4.var00 = ~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18); + gUnk021D33C4.var18 = subobjextpltt; + switch (subobjextpltt) + { + case 256: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x80000000); + SETREG8(HW_REG_VRAMCNT_I, 0x83); + break; + case 0: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +u32 FUN_020C6130(u16 *ptr){ + u16 temp = *ptr; + *ptr = 0; + gUnk021D33C4.var00 |= temp; + GX_VRAMCNT_SetLCDC_(temp); + return temp; +} + +u32 GX_ResetBankForBG(){ + return FUN_020C6130(&gUnk021D33C4.var02); +} + +u32 GX_ResetBankForOBJ(){ + return FUN_020C6130(&gUnk021D33C4.var04); +} + +u32 GX_ResetBankForBGExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + return FUN_020C6130(&gUnk021D33C4.var0E); +} + +u32 GX_ResetBankForOBJExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + return FUN_020C6130(&gUnk021D33C4.var10); +} + +u32 GX_ResetBankForTex(){ + return FUN_020C6130(&gUnk021D33C4.var08); +} + +u32 GX_ResetBankForTexPltt(){ + return FUN_020C6130(&gUnk021D33C4.var0A); +} + +u32 GX_ResetBankForClearImage(){ + return FUN_020C6130(&gUnk021D33C4.var0C); +} + +u32 GX_ResetBankForSubBG(){ + return FUN_020C6130(&gUnk021D33C4.var12); +} + +u32 FUN_020C605C(){ + return FUN_020C6130(&gUnk021D33C4.var14); +} + +u32 FUN_020C6034(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + return FUN_020C6130(&gUnk021D33C4.var16); +} + +u32 GX_ResetBankForSubOBJ(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + return FUN_020C6130(&gUnk021D33C4.var18); +} + +u32 FUN_020C5F28(u16 *ptr){ + u32 temp = *ptr; + *ptr = 0; + if (temp & (0x1 << 0)) + SETREG8(HW_REG_VRAMCNT_A, 0x0); + if (temp & (0x1 << 1)) + SETREG8(HW_REG_VRAMCNT_B, 0x0); + if (temp & (0x1 << 2)) + SETREG8(HW_REG_VRAMCNT_C, 0x0); + if (temp & (0x1 << 3)) + SETREG8(HW_REG_VRAMCNT_D, 0x0); + if (temp & (0x1 << 4)) + SETREG8(HW_REG_VRAMCNT_E, 0x0); + if (temp & (0x1 << 5)) + SETREG8(HW_REG_VRAMCNT_F, 0x0); + if (temp & (0x1 << 6)) + SETREG8(HW_REG_VRAMCNT_G, 0x0); + if (temp & (0x1 << 7)) + SETREG8(HW_REG_VRAMCNT_H, 0x0); + if (temp & (0x1 << 8)) + SETREG8(HW_REG_VRAMCNT_I, 0x0); + OSi_UnlockVram((u16)temp, gUnk021D33BC); + return temp; +} + +u32 disableBankForX_(){ + return FUN_020C5F28(&gUnk021D33C4.var02); +} + +u32 GX_DisableBankForOBJExtPltt_2(){ + return FUN_020C5F28(&gUnk021D33C4.var04); +} + +u32 GX_DisableBankForBGExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + return FUN_020C5F28(&gUnk021D33C4.var0E); +} + +u32 GX_DisableBankForOBJExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + return FUN_020C5F28(&gUnk021D33C4.var10); +} + +u32 GX_DisableBankForTexPltt_2(){ + return FUN_020C5F28(&gUnk021D33C4.var08); +} + +u32 GX_DisableBankForTexPltt(){ + return FUN_020C5F28(&gUnk021D33C4.var0A); +} + +u32 GX_DisableBankForClearImage(){ + return FUN_020C5F28(&gUnk021D33C4.var0C); +} + +u32 GX_DisableBankForARM7(){ + return FUN_020C5F28(&gUnk021D33C4.var06); +} + +u32 GX_DisableBankForLCDC(){ + return FUN_020C5F28(&gUnk021D33C4.var00); +} + +u32 GX_DisableBankForSubBGExtPltt(){ + return FUN_020C5F28(&gUnk021D33C4.var12); +} + +u32 GX_DisableBankForSubOBJExtPltt_2(){ + return FUN_020C5F28(&gUnk021D33C4.var14); +} + +u32 FUN_020C5E04(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + return FUN_020C5F28(&gUnk021D33C4.var16); +} + +u32 GX_DisableBankForSubOBJExtPltt(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + return FUN_020C5F28(&gUnk021D33C4.var18); +} + +u32 GX_GetBankForBGExtPltt_2(){ + return gUnk021D33C4.var02; +} + +u32 GX_GetBankForOBJ(){ + return gUnk021D33C4.var04; +} + +u32 GX_GetBankForBGExtPltt(){ + return gUnk021D33C4.var0E; +} + +u32 GX_GetBankForOBJExtPltt(){ + return gUnk021D33C4.var10; +} + +u32 FUN_020C5D8C(){ + return gUnk021D33C4.var08; +} + +u32 GX_GetBankForTexPltt(){ + return gUnk021D33C4.var0A; +} + +u32 GX_GetBankForLCDC(){ + return gUnk021D33C4.var00; +} + +u32 GX_GetBankForSubBGExtPltt_2(){ + return gUnk021D33C4.var12; +} + +u32 GX_GetBankForSubOBJ(){ + return gUnk021D33C4.var14; +} + +u32 GX_GetBankForSubBGExtPltt(){ + return gUnk021D33C4.var16; +} + +u32 GX_GetBankForSubOBJExtPltt(){ + return gUnk021D33C4.var18; +} diff --git a/arm9/lib/src/GX_vramcnt_c.c b/arm9/lib/src/GX_vramcnt_c.c deleted file mode 100644 index 50107888..00000000 --- a/arm9/lib/src/GX_vramcnt_c.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "global.h" -#include "main.h" -#include "gx.h" - -void GX_VRAMCNT_SetLCDC_(u32 r0){ - if (r0 & (0x1 << 0)) - SETREG8(HW_REG_VRAMCNT_A, 0x80); - if (r0 & (0x1 << 1)) - SETREG8(HW_REG_VRAMCNT_B, 0x80); - if (r0 & (0x1 << 2)) - SETREG8(HW_REG_VRAMCNT_C, 0x80); - if (r0 & (0x1 << 3)) - SETREG8(HW_REG_VRAMCNT_D, 0x80); - if (r0 & (0x1 << 4)) - SETREG8(HW_REG_VRAMCNT_E, 0x80); - if (r0 & (0x1 << 5)) - SETREG8(HW_REG_VRAMCNT_F, 0x80); - if (r0 & (0x1 << 6)) - SETREG8(HW_REG_VRAMCNT_G, 0x80); - if (r0 & (0x1 << 7)) - SETREG8(HW_REG_VRAMCNT_H, 0x80); - if (r0 & (0x1 << 8)) - SETREG8(HW_REG_VRAMCNT_I, 0x80); -} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index b5d30064..973e6b51 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -19,6 +19,9 @@ Unk_02106A04 = 0x02106A04; // FS SDK_OVERLAY_DIGEST = 0x02106F84; SDK_OVERLAY_DIGEST_END = 0x02106F84; +//GX +gUnk021D33BC = 0x021D33BC; +gUnk021D33C4 = 0x021D33C4; // Overlay FUN_021D76AC = 0x021D76AC; -- cgit v1.2.3 From 95a1f4a566dcdfc1c50bf2a41bce2d76fae127ca Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 11 May 2020 03:02:15 +0200 Subject: add some macros to fx.h --- arm9/lib/include/fx.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arm9/lib/include/fx.h b/arm9/lib/include/fx.h index b1c3aa88..e0ba52f3 100644 --- a/arm9/lib/include/fx.h +++ b/arm9/lib/include/fx.h @@ -46,10 +46,14 @@ typedef s64 fx64c; #define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x) #define FX64C_FRAC(x) FX_FRAC(FX64C, x) -#define FX32_MUL(a, b) ((fx32)(((fx64)a * b) >> FX32_INT_SHIFT)) -#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)a * b + (fx64)c * d) >> FX32_INT_SHIFT)) +//TODO: clean up these macros +#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT)) +#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))) +#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT)) //the extra term here is for rounding -#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)a * b - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) +#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) + +#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT))) struct Vecx32 { -- cgit v1.2.3 From fd64cccafa5d4d8031ba3b19dc907c672f8b7041 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 11 May 2020 03:08:38 +0200 Subject: Decompile GX_g3_util.h --- arm9/asm/GX_g3_util.s | 503 ---------------------------------------------- arm9/lib/include/gx.h | 8 + arm9/lib/src/GX_g3_util.c | 267 ++++++++++++++++++++++++ 3 files changed, 275 insertions(+), 503 deletions(-) delete mode 100644 arm9/asm/GX_g3_util.s create mode 100644 arm9/lib/src/GX_g3_util.c diff --git a/arm9/asm/GX_g3_util.s b/arm9/asm/GX_g3_util.s deleted file mode 100644 index ba78fdfc..00000000 --- a/arm9/asm/GX_g3_util.s +++ /dev/null @@ -1,503 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3_RotZ -G3_RotZ: ; 0x020C7FF0 - ldr r3, _020C8028 ; =0x04000468 - mov r2, #0x0 - str r1, [r3, #0x0] - str r0, [r3, #0x0] - str r2, [r3, #0x0] - rsb r0, r0, #0x0 - str r0, [r3, #0x0] - str r1, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - mov r0, #0x1000 - str r0, [r3, #0x0] - bx lr - .balign 4 -_020C8028: .word 0x04000468 - - arm_func_start G3_RotY -G3_RotY: ; 0x020C802C - ldr ip, _020C8064 ; =0x04000468 - mov r3, #0x0 - str r1, [r12, #0x0] - str r3, [r12, #0x0] - rsb r2, r0, #0x0 - str r2, [r12, #0x0] - str r3, [r12, #0x0] - mov r2, #0x1000 - str r2, [r12, #0x0] - str r3, [r12, #0x0] - str r0, [r12, #0x0] - str r3, [r12, #0x0] - str r1, [r12, #0x0] - bx lr - .balign 4 -_020C8064: .word 0x04000468 - - arm_func_start G3_RotX -G3_RotX: ; 0x020C8068 - ldr r3, _020C80A0 ; =0x04000468 - mov r2, #0x1000 - str r2, [r3, #0x0] - mov r2, #0x0 - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r1, [r3, #0x0] - str r0, [r3, #0x0] - str r2, [r3, #0x0] - rsb r0, r0, #0x0 - str r0, [r3, #0x0] - str r1, [r3, #0x0] - bx lr - .balign 4 -_020C80A0: .word 0x04000468 - - arm_func_start G3i_LookAt_ -G3i_LookAt_: ; 0x020C80A4 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r9, r0 - ldr r6, [r9, #0x0] - ldr r5, [r2, #0x0] - add r0, sp, #0x0 - sub r5, r6, r5 - str r5, [sp, #0x0] - ldr r7, [r9, #0x4] - ldr r6, [r2, #0x4] - mov r5, r1 - sub r1, r7, r6 - str r1, [sp, #0x4] - ldr r6, [r9, #0x8] - ldr r2, [r2, #0x8] - mov r1, r0 - sub r2, r6, r2 - mov r8, r3 - str r2, [sp, #0x8] - ldr r7, [sp, #0x40] - bl VEC_Normalize - add r1, sp, #0x0 - add r2, sp, #0xc - mov r0, r5 - bl VEC_CrossProduct - add r0, sp, #0xc - mov r1, r0 - bl VEC_Normalize -_020C8114: ; 0x020C8114 - add r0, sp, #0x0 - add r1, sp, #0xc - add r2, sp, #0x18 - bl VEC_CrossProduct -_020C8124: ; 0x020C8124 - cmp r8, #0x0 - beq _020C8184 - ldr r0, _020C8234 ; =0x04000440 - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r0, [sp, #0xc] - ldr r4, _020C8238 ; =0x0400045C - str r0, [r4, #0x0] - ldr r0, [sp, #0x18] - str r0, [r4, #0x0] - ldr r0, [sp, #0x0] - str r0, [r4, #0x0] - ldr r0, [sp, #0x10] - str r0, [r4, #0x0] - ldr r0, [sp, #0x1c] - str r0, [r4, #0x0] - ldr r0, [sp, #0x4] - str r0, [r4, #0x0] - ldr r0, [sp, #0x14] - str r0, [r4, #0x0] - ldr r0, [sp, #0x20] - str r0, [r4, #0x0] - ldr r0, [sp, #0x8] - str r0, [r4, #0x0] -_020C8184: - add r1, sp, #0xc - mov r0, r9 - bl VEC_DotProduct - rsb r6, r0, #0x0 - add r1, sp, #0x18 - mov r0, r9 - bl VEC_DotProduct - rsb r5, r0, #0x0 - add r1, sp, #0x0 - mov r0, r9 - bl VEC_DotProduct -_020C81B0: ; 0x020C81B0 - cmp r8, #0x0 - strne r6, [r4, #0x0] - rsb r0, r0, #0x0 - strne r5, [r4, #0x0] - strne r0, [r4, #0x0] - cmp r7, #0x0 - addeq sp, sp, #0x24 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - ldr r1, [sp, #0xc] - str r1, [r7, #0x0] - ldr r1, [sp, #0x18] - str r1, [r7, #0x4] - ldr r1, [sp, #0x0] - str r1, [r7, #0x8] - ldr r1, [sp, #0x10] - str r1, [r7, #0xc] - ldr r1, [sp, #0x1c] - str r1, [r7, #0x10] - ldr r1, [sp, #0x4] - str r1, [r7, #0x14] - ldr r1, [sp, #0x14] - str r1, [r7, #0x18] - ldr r1, [sp, #0x20] - str r1, [r7, #0x1c] - ldr r1, [sp, #0x8] - str r1, [r7, #0x20] - str r6, [r7, #0x24] - str r5, [r7, #0x28] - str r0, [r7, #0x2c] - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020C8234: .word 0x04000440 -_020C8238: .word 0x0400045C - - arm_func_start G3i_OrthoW_ -G3i_OrthoW_: ; 0x020C823C - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - str r2, [sp, #0x8] - str r0, [sp, #0x0] - ldr r0, [sp, #0x8] - mov r2, r3 - ldr r7, [sp, #0x64] - sub r0, r2, r0 - str r3, [sp, #0xc] - str r1, [sp, #0x4] - ldr r8, [sp, #0x60] - ldr r6, [sp, #0x68] - bl FX_InvAsync -_020C8270: ; 0x020C8270 - cmp r7, #0x0 - ldrne r0, _020C8528 ; =0x04000440 - movne r1, #0x0 - ldrne r4, _020C852C ; =0x04000458 - strne r1, [r0, #0x0] - cmp r6, #0x0 - beq _020C82B8 - mov r0, #0x0 - str r0, [r6, #0x4] - str r0, [r6, #0x8] - str r0, [r6, #0xc] - str r0, [r6, #0x10] - str r0, [r6, #0x18] - str r0, [r6, #0x1c] - str r0, [r6, #0x20] - str r0, [r6, #0x24] - str r0, [r6, #0x2c] - str r8, [r6, #0x3c] -_020C82B8: - bl FX_GetDivResultFx64c - mov r5, r0 - str r1, [sp, #0x14] - ldr sb, _020C8530 ; =0x04000290 - mov r3, #0x0 - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - str r3, [r9, #0x0] - mov r2, #0x1000 - sub r1, r1, r0 - ldr r0, _020C8534 ; =0x04000298 - str r2, [r9, #0x4] - str r1, [r0, #0x0] - cmp r8, #0x1000 - str r3, [r0, #0x4] - beq _020C8318 - mov r9, r8, asr #0x1f - umull r0, r1, r5, r8 - mla r1, r5, r9, r1 - ldr r5, [sp, #0x14] - mla r1, r5, r8, r1 - bl _ll_sdiv - mov r5, r0 - str r1, [sp, #0x14] -_020C8318: - ldr r0, [sp, #0x14] - mov r2, r5, lsl #0xd - mov r1, r0, lsl #0xd - mov r0, #0x80000000 - adds r0, r2, r0 - orr r1, r1, r5, lsr #0x13 - adc r1, r1, #0x0 - cmp r7, #0x0 - mov r0, #0x0 - strne r1, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - cmp r6, #0x0 - strne r1, [r6, #0x0] - bl FX_GetDivResultFx64c - mov r11, r0 - str r1, [sp, #0x2c] - ldr r0, _020C8530 ; =0x04000290 - mov r3, #0x0 - mov r2, #0x1000 - str r3, [r0, #0x0] - str r2, [r0, #0x4] - ldr r9, [sp, #0x58] - ldr r1, [sp, #0x5c] - ldr r0, _020C8534 ; =0x04000298 - sub r1, r9, r1 - str r1, [r0, #0x0] - cmp r8, #0x1000 - str r3, [r0, #0x4] - beq _020C83B8 - mov r9, r8, asr #0x1f - umull r0, r1, r11, r8 - mla r1, r11, r9, r1 - ldr r9, [sp, #0x2c] - mla r1, r9, r8, r1 - bl _ll_sdiv - mov r11, r0 - str r1, [sp, #0x2c] -_020C83B8: - ldr r0, [sp, #0x2c] - mov r3, r11, lsl #0xd - mov r2, r0, lsl #0xd - mov r0, #0x80000000 - orr r2, r2, r11, lsr #0x13 - adds r0, r3, r0 - adc r0, r2, #0x0 - cmp r7, #0x0 - mov r1, #0x0 - strne r0, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - cmp r6, #0x0 - strne r0, [r6, #0x14] - bl FX_GetDivResultFx64c - cmp r8, #0x1000 - beq _020C8428 - mov r9, r8, asr #0x1f - mov r2, #0x1000 - mov r3, #0x0 - umull r12, r10, r0, r8 - mla r10, r0, r9, r10 - mov r0, r12 - mla r10, r1, r8, r10 - mov r1, r10 - bl _ll_sdiv -_020C8428: - mov r9, r1, lsl #0xd - mov r10, r0, lsl #0xd - mov r2, #0x80000000 - orr r9, r9, r0, lsr #0x13 - adds r2, r10, r2 - adc r2, r9, #0x0 - cmp r7, #0x0 - mov r3, #0x0 - strne r2, [r4, #0x0] - strne r3, [r4, #0x0] - cmp r6, #0x0 - strne r2, [r6, #0x28] - ldr r3, [sp, #0xc] - ldr r2, [sp, #0x8] - add r9, r3, r2 - rsb lr, r9, #0x0 - ldr r3, [sp, #0x0] - ldr r2, [sp, #0x4] - ldr r9, [sp, #0x5c] - add r2, r3, r2 - ldr r3, [sp, #0x58] - rsb r12, r2, #0x0 - add r3, r9, r3 - mov r9, r12, asr #0x1f - str r9, [sp, #0x20] - mov r9, r3, asr #0x1f - str r9, [sp, #0x24] - umull r10, r9, r5, lr - mov r2, lr, asr #0x1f - str r2, [sp, #0x1c] - str r10, [sp, #0x18] - ldr r10, [sp, #0x1c] - mov r2, #0x80000000 - mla r9, r5, r10, r9 - ldr r5, [sp, #0x14] - mla r9, r5, lr, r9 - ldr r5, [sp, #0x18] - adds r5, r5, r2 - adc r10, r9, #0x0 - ldr r5, [sp, #0x20] - umull lr, r9, r11, r12 - mla r9, r11, r5, r9 - ldr r5, [sp, #0x2c] - mla r9, r5, r12, r9 - adds r5, lr, r2 - adc r5, r9, #0x0 - umull r11, r9, r0, r3 - adds r2, r11, r2 - ldr r2, [sp, #0x24] - mla r9, r0, r2, r9 - mla r9, r1, r3, r9 - adc r0, r9, #0x0 - cmp r7, #0x0 - strne r10, [r4, #0x0] - strne r5, [r4, #0x0] - strne r0, [r4, #0x0] - strne r8, [r4, #0x0] - cmp r6, #0x0 - strne r10, [r6, #0x30] - strne r5, [r6, #0x34] - strne r0, [r6, #0x38] - add sp, sp, #0x34 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020C8528: .word 0x04000440 -_020C852C: .word 0x04000458 -_020C8530: .word 0x04000290 -_020C8534: .word 0x04000298 - - arm_func_start G3i_PerspectiveW_ -G3i_PerspectiveW_: ; 0x020C8538 - stmdb sp!, {r4-r10,lr} - mov r5, r0 - mov r0, r1 - mov r1, r5 - ldr r6, [sp, #0x24] - mov r9, r2 - mov r8, r3 - ldr r5, [sp, #0x2c] - bl FX_Div - mov r7, r0 - cmp r6, #0x1000 - mulne r1, r7, r6 - movne r0, r1, asr #0xb - addne r0, r1, r0, lsr #0x14 - movne r7, r0, asr #0xc - ldr r0, [sp, #0x28] - ldr r2, _020C8718 ; =0x04000290 - cmp r0, #0x0 - mov r3, #0x0 - str r3, [r2, #0x0] - ldr r1, _020C871C ; =0x04000298 - str r7, [r2, #0x4] - str r9, [r1, #0x0] - ldrne r0, _020C8720 ; =0x04000440 - str r3, [r1, #0x4] - ldrne r4, _020C8724 ; =0x04000458 - strne r3, [r0, #0x0] - cmp r5, #0x0 - beq _020C85E4 - mov r1, #0x0 - str r1, [r5, #0x4] - str r1, [r5, #0x8] - str r1, [r5, #0xc] - str r1, [r5, #0x10] - str r1, [r5, #0x18] - str r1, [r5, #0x1c] - str r1, [r5, #0x20] - str r1, [r5, #0x24] - rsb r0, r6, #0x0 - str r0, [r5, #0x2c] - str r1, [r5, #0x30] - str r1, [r5, #0x34] - str r1, [r5, #0x3c] -_020C85E4: - bl FX_GetDivResult - ldr r3, [sp, #0x20] - ldr r1, [sp, #0x28] - ldr sb, _020C8718 ; =0x04000290 - mov r12, #0x0 - str r12, [r9, #0x0] - mov r10, #0x1000 - ldr r2, _020C871C ; =0x04000298 - str r10, [r9, #0x4] - sub r3, r8, r3 - str r3, [r2, #0x0] - str r12, [r2, #0x4] - cmp r1, #0x0 - beq _020C8644 - str r0, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r7, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] -_020C8644: - cmp r5, #0x0 - strne r0, [r5, #0x0] - strne r7, [r5, #0x14] - bl FX_GetDivResultFx64c - cmp r6, #0x1000 - beq _020C8680 - mov r2, r6, asr #0x1f - umull r7, r3, r0, r6 - mla r3, r0, r2, r3 - mla r3, r1, r6, r3 - mov r0, r7 - mov r1, r3 - mov r2, #0x1000 - mov r3, #0x0 - bl _ll_sdiv -_020C8680: - ldr r3, [sp, #0x20] - mov r10, r8, lsl #0x1 - add r12, r3, r8 - mov r2, r12, asr #0x1f - umull r7, lr, r0, r12 - mla lr, r0, r2, lr - mov r9, #0x80000000 - smull r3, r2, r10, r3 - mla lr, r1, r12, lr - adds r7, r7, r9 - mov r8, #0x800 - adc r7, lr, #0x0 - adds r3, r3, r8 - adc r2, r2, #0x0 - mov r3, r3, lsr #0xc - orr r3, r3, r2, lsl #0x14 - umull r10, r8, r0, r3 - mov r2, r3, asr #0x1f - adds r9, r10, r9 - mla r8, r0, r2, r8 - mla r8, r1, r3, r8 - ldr r0, [sp, #0x28] - adc r2, r8, #0x0 - cmp r0, #0x0 - mov r0, #0x0 - beq _020C8704 - str r7, [r4, #0x0] - rsb r1, r6, #0x0 - str r1, [r4, #0x0] - str r0, [r4, #0x0] - str r0, [r4, #0x0] - str r2, [r4, #0x0] - str r0, [r4, #0x0] -_020C8704: - cmp r5, #0x0 - strne r7, [r5, #0x28] - strne r2, [r5, #0x38] - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020C8718: .word 0x04000290 -_020C871C: .word 0x04000298 -_020C8720: .word 0x04000440 -_020C8724: .word 0x04000458 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index a9cb07b1..6919cbfd 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -96,6 +96,14 @@ struct VRAM_banks void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); s32 G3_EndMakeDL(struct DL *displaylist); +//GX_g3_util +void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); +void G3_RotX(fx32 sinphi, fx32 cosphi); +void G3_RotY(fx32 sinphi, fx32 cosphi); +void G3_RotZ(fx32 sinphi, fx32 cosphi); + //GX_g3x asm void GXi_NopClearFifo128_(void *reg); void G3X_Init(); diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c new file mode 100644 index 00000000..049b9366 --- /dev/null +++ b/arm9/lib/src/GX_g3_util.c @@ -0,0 +1,267 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +#define HW_REG_DIV_NUMER 0x04000290 +#define HW_REG_DIV_DENOM 0x04000298 + +#define HW_REG_MTX_MODE 0x04000440 +#define HW_REG_MTX_LOAD_4x4 0x04000458 +#define HW_REG_MTX_LOAD_4x3 0x0400045C +#define HW_REG_MTX_MULT_3x3 0x04000468 + +void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ + fx32 fovcot, temp1, temp2; + fx64c temp0; + vu32 *reg_ptr; + + fovcot = FX_Div(fovcos, fovsin); + if (scale != 0x1000) //!= 1.0 + fovcot = (fovcot * scale) / 0x1000; + SETREG64(HW_REG_DIV_NUMER, (s64)fovcot << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)ratio); + if (load) + { + SETREG32(HW_REG_MTX_MODE, 0x0); + reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + } + if (mtx) + { + mtx->_[1] = 0x0; + mtx->_[2] = 0x0; + mtx->_[3] = 0x0; + mtx->_[4] = 0x0; + mtx->_[6] = 0x0; + mtx->_[7] = 0x0; + mtx->_[8] = 0x0; + mtx->_[9] = 0x0; + mtx->_[11] = -scale; + mtx->_[12] = 0x0; + mtx->_[13] = 0x0; + mtx->_[15] = 0x0; + } + temp1 = FX_GetDivResult(); + SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + if (load) + { + *reg_ptr = temp1; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = fovcot; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[0] = temp1; + mtx->_[5] = fovcot; + } + temp0 = FX_GetDivResultFx64c(); + if (scale != 0x1000) + temp0 = (temp0 * scale) / 0x1000; + temp1 = ((far + near) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + temp2 = (((fx32)(((fx64)(near << 1) * far + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp1; + *reg_ptr = -scale; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = temp2; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[10] = temp1; + mtx->_[14] = temp2; + } +} + +void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ + fx64c temp1, temp2, temp3; + fx32 temp0, temp4, temp5; + vu32 *reg_ptr; + + FX_InvAsync(right - left); + if (load) + { + SETREG32(HW_REG_MTX_MODE, 0x0); + reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + } + if (mtx) + { + mtx->_[1] = 0x0; + mtx->_[2] = 0x0; + mtx->_[3] = 0x0; + mtx->_[4] = 0x0; + mtx->_[6] = 0x0; + mtx->_[7] = 0x0; + mtx->_[8] = 0x0; + mtx->_[9] = 0x0; + mtx->_[11] = 0x0; + mtx->_[15] = scale; + } + temp1 = FX_GetDivResultFx64c(); + SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)(top - bottom)); + if (scale != 0x1000) + temp1 = (temp1 * scale) / 0x1000; + temp0 = (0x2000 * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[0] = temp0; + } + temp2 = FX_GetDivResultFx64c(); + SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + if (scale != 0x1000) + temp2 = (temp2 * scale) / 0x1000; + temp0 = (0x2000 * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[5] = temp0; + } + temp3 = FX_GetDivResultFx64c(); + if (scale != 0x1000) + temp3 = (temp3 * scale) / 0x1000; + temp0 = (0x2000 * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[10] = temp0; + } + temp0 = ((-(right + left)) * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + temp4 = ((-(top + bottom)) * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + temp5 = ((far + near) * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = temp4; + *reg_ptr = temp5; + *reg_ptr = scale; + } + if (mtx) + { + mtx->_[12] = temp0; + mtx->_[13] = temp4; + mtx->_[14] = temp5; + } +} + +void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ + struct Vecx32 temp, temp1, temp2; + fx32 c1, c2, c3; + vu32 *reg_ptr; + temp.x = a->x - c->x; + temp.y = a->y - c->y; + temp.z = a->z - c->z; + VEC_Normalize(&temp, &temp); + VEC_CrossProduct(b, &temp, &temp1); + VEC_Normalize(&temp1, &temp1); + VEC_CrossProduct(&temp, &temp1, &temp2); + if (load) + { + SETREG32(HW_REG_MTX_MODE, 0x2); + reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x3; + *reg_ptr = temp1.x; + *reg_ptr = temp2.x; + *reg_ptr = temp.x; + *reg_ptr = temp1.y; + *reg_ptr = temp2.y; + *reg_ptr = temp.y; + *reg_ptr = temp1.z; + *reg_ptr = temp2.z; + *reg_ptr = temp.z; + } + c1 = -VEC_DotProduct(a, &temp1); + c2 = -VEC_DotProduct(a, &temp2); + c3 = -VEC_DotProduct(a, &temp); + if (load) + { + *reg_ptr = c1; + *reg_ptr = c2; + *reg_ptr = c3; + } + if (mtx) + { + mtx->_[0] = temp1.x; + mtx->_[1] = temp2.x; + mtx->_[2] = temp.x; + mtx->_[3] = temp1.y; + mtx->_[4] = temp2.y; + mtx->_[5] = temp.y; + mtx->_[6] = temp1.z; + mtx->_[7] = temp2.z; + mtx->_[8] = temp.z; + mtx->_[9] = c1; + mtx->_[10] = c2; + mtx->_[11] = c3; + } +} + +void G3_RotX(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + *reg_ptr = 0x1000; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = cosphi; + *reg_ptr = sinphi; + *reg_ptr = 0x0; + *reg_ptr = -sinphi; + *reg_ptr = cosphi; +} + +void G3_RotY(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + *reg_ptr = cosphi; + *reg_ptr = 0x0; + *reg_ptr = -sinphi; + *reg_ptr = 0x0; + *reg_ptr = 0x1000; + *reg_ptr = 0x0; + *reg_ptr = sinphi; + *reg_ptr = 0x0; + *reg_ptr = cosphi; +} + +void G3_RotZ(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + *reg_ptr = cosphi; + *reg_ptr = sinphi; + *reg_ptr = 0x0; + *reg_ptr = -sinphi; + *reg_ptr = cosphi; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x1000; +} -- cgit v1.2.3 From 2d3d64c1c94ba8b94147bfbc29bb15bd42772ed3 Mon Sep 17 00:00:00 2001 From: Made Date: Tue, 12 May 2020 01:27:44 +0200 Subject: Decompile GX_bgcnt.s --- arm9/asm/GX_bgcnt.s | 422 ------------------------------------------------ arm9/lib/include/gx.h | 34 +++- arm9/lib/src/GX_bgcnt.c | 195 ++++++++++++++++++++++ 3 files changed, 228 insertions(+), 423 deletions(-) delete mode 100644 arm9/asm/GX_bgcnt.s create mode 100644 arm9/lib/src/GX_bgcnt.c diff --git a/arm9/asm/GX_bgcnt.s b/arm9/asm/GX_bgcnt.s deleted file mode 100644 index 136c9d1d..00000000 --- a/arm9/asm/GX_bgcnt.s +++ /dev/null @@ -1,422 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G2S_GetBG3CharPtr -G2S_GetBG3CharPtr: ; 0x020C6F60 - ldr r1, _020C6FA8 ; =0x04001000 - ldr r0, _020C6FAC ; =0x0400100E - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r0, r1, #0x7 - cmp r0, #0x3 - blt _020C6F8C - cmp r0, #0x6 - bge _020C6FA0 - ands r0, r2, #0x80 - bne _020C6FA0 -_020C6F8C: - and r0, r2, #0x3c - mov r0, r0, lsr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr -_020C6FA0: - mov r0, #0x0 - bx lr - .balign 4 -_020C6FA8: .word 0x04001000 -_020C6FAC: .word 0x0400100E - - arm_func_start G2_GetBG3CharPtr -G2_GetBG3CharPtr: ; 0x020C6FB0 - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - ldr r0, _020C700C ; =0x0400000E - and r1, r1, #0x7 - cmp r1, #0x3 - ldrh r2, [r0, #0x0] - blt _020C6FDC - cmp r1, #0x6 - bge _020C7004 - ands r0, r2, #0x80 - bne _020C7004 -_020C6FDC: - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - and r0, r2, #0x3c - and r1, r1, #0x7000000 - mov r1, r1, lsr #0x18 - mov r1, r1, lsl #0x10 - add r1, r1, #0x6000000 - mov r0, r0, lsr #0x2 - add r0, r1, r0, lsl #0xe - bx lr -_020C7004: - mov r0, #0x0 - bx lr - .balign 4 -_020C700C: .word 0x0400000E - - arm_func_start G2S_GetBG2CharPtr -G2S_GetBG2CharPtr: ; 0x020C7010 - ldr r1, _020C7050 ; =0x04001000 - ldr r0, _020C7054 ; =0x0400100C - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r0, r1, #0x7 - cmp r0, #0x5 - blt _020C7034 - ands r0, r2, #0x80 - bne _020C7048 -_020C7034: - and r0, r2, #0x3c - mov r0, r0, lsr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr -_020C7048: - mov r0, #0x0 - bx lr - .balign 4 -_020C7050: .word 0x04001000 -_020C7054: .word 0x0400100C - - arm_func_start G2_GetBG2CharPtr -G2_GetBG2CharPtr: ; 0x020C7058 - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - ldr r0, _020C70AC ; =0x0400000C - and r1, r1, #0x7 - cmp r1, #0x5 - ldrh r2, [r0, #0x0] - blt _020C707C - ands r0, r2, #0x80 - bne _020C70A4 -_020C707C: - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - and r0, r2, #0x3c - and r1, r1, #0x7000000 - mov r1, r1, lsr #0x18 - mov r1, r1, lsl #0x10 - add r1, r1, #0x6000000 - mov r0, r0, lsr #0x2 - add r0, r1, r0, lsl #0xe - bx lr -_020C70A4: - mov r0, #0x0 - bx lr - .balign 4 -_020C70AC: .word 0x0400000C - - arm_func_start G2S_GetBG1CharPtr -G2S_GetBG1CharPtr: ; 0x020C70B0 - ldr r0, _020C70CC ; =0x0400100A - ldrh r0, [r0, #0x0] - and r0, r0, #0x3c - mov r0, r0, asr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C70CC: .word 0x0400100A - - arm_func_start G2_GetBG1CharPtr -G2_GetBG1CharPtr: ; 0x020C70D0 - ldr r1, _020C7100 ; =0x0400000A - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x7000000 - mov r0, r0, lsr #0x18 - and r1, r1, #0x3c - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x2 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xe - bx lr - .balign 4 -_020C7100: .word 0x0400000A - - arm_func_start G2S_GetBG0CharPtr -G2S_GetBG0CharPtr: ; 0x020C7104 - ldr r0, _020C7120 ; =0x04001008 - ldrh r0, [r0, #0x0] - and r0, r0, #0x3c - mov r0, r0, asr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C7120: .word 0x04001008 - - arm_func_start G2_GetBG0CharPtr -G2_GetBG0CharPtr: ; 0x020C7124 - ldr r1, _020C7154 ; =0x04000008 - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x7000000 - mov r0, r0, lsr #0x18 - and r1, r1, #0x3c - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x2 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xe - bx lr - .balign 4 -_020C7154: .word 0x04000008 - - arm_func_start G2S_GetBG3ScrPtr -G2S_GetBG3ScrPtr: ; 0x020C7158 - ldr r1, _020C71D0 ; =0x04001000 - ldr r0, _020C71D4 ; =0x0400100E - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r3, r1, #0x7 - cmp r3, #0x6 - and r0, r2, #0x1f00 - mov r1, r0, lsr #0x8 - addls pc, pc, r3, lsl #0x2 - b _020C71C8 -_020C7180: ; 0x020C7180 - b _020C719C -_020C7184: ; 0x020C7184 - b _020C719C -_020C7188: ; 0x020C7188 - b _020C719C -_020C718C: ; 0x020C718C - b _020C71A8 -_020C7190: ; 0x020C7190 - b _020C71A8 -_020C7194: ; 0x020C7194 - b _020C71A8 -_020C7198: ; 0x020C7198 - b _020C71C0 -_020C719C: - mov r0, r1, lsl #0xb - add r0, r0, #0x6200000 - bx lr -_020C71A8: - ands r0, r2, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6200000 - moveq r0, r1, lsl #0xb - addeq r0, r0, #0x6200000 - bx lr -_020C71C0: - mov r0, #0x0 - bx lr -_020C71C8: - mov r0, #0x0 - bx lr - .balign 4 -_020C71D0: .word 0x04001000 -_020C71D4: .word 0x0400100E - - arm_func_start G2_GetBG3ScrPtr -G2_GetBG3ScrPtr: ; 0x020C71D8 - ldr r0, _020C7260 ; =0x0400000E - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldrh r3, [r0, #0x0] - ldr r0, [r2, #0x0] - and r12, r1, #0x7 - and r0, r0, #0x38000000 - mov r1, r0, lsr #0x1b - and r0, r3, #0x1f00 - mov r2, r1, lsl #0x10 - cmp r12, #0x6 - mov r1, r0, lsr #0x8 - addls pc, pc, r12, lsl #0x2 - b _020C7258 -_020C7210: - b _020C722C -_020C7214: - b _020C722C -_020C7218: - b _020C722C -_020C721C: - b _020C7238 -_020C7220: - b _020C7238 -_020C7224: - b _020C7238 -_020C7228: - b _020C7250 -_020C722C: - add r0, r2, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr -_020C7238: - ands r0, r3, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6000000 - addeq r0, r2, #0x6000000 - addeq r0, r0, r1, lsl #0xb - bx lr -_020C7250: - mov r0, #0x0 - bx lr -_020C7258: - mov r0, #0x0 - bx lr - .balign 4 -_020C7260: .word 0x0400000E - - arm_func_start G2S_GetBG2ScrPtr -G2S_GetBG2ScrPtr: ; 0x020C7264 - ldr r1, _020C72DC ; =0x04001000 - ldr r0, _020C72E0 ; =0x0400100C - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r3, r1, #0x7 - cmp r3, #0x6 - and r0, r2, #0x1f00 - mov r1, r0, lsr #0x8 - addls pc, pc, r3, lsl #0x2 - b _020C72D4 -_020C728C: ; 0x020C728C - b _020C72A8 -_020C7290: ; 0x020C7290 - b _020C72A8 -_020C7294: ; 0x020C7294 - b _020C72A8 -_020C7298: ; 0x020C7298 - b _020C72A8 -_020C729C: ; 0x020C729C - b _020C72A8 -_020C72A0: ; 0x020C72A0 - b _020C72B4 -_020C72A4: ; 0x020C72A4 - b _020C72CC -_020C72A8: - mov r0, r1, lsl #0xb - add r0, r0, #0x6200000 - bx lr -_020C72B4: - ands r0, r2, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6200000 - moveq r0, r1, lsl #0xb - addeq r0, r0, #0x6200000 - bx lr -_020C72CC: - mov r0, #0x0 - bx lr -_020C72D4: - mov r0, #0x0 - bx lr - .balign 4 -_020C72DC: .word 0x04001000 -_020C72E0: .word 0x0400100C - - arm_func_start G2_GetBG2ScrPtr -G2_GetBG2ScrPtr: ; 0x020C72E4 - ldr r0, _020C736C ; =0x0400000C - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldrh r3, [r0, #0x0] - ldr r0, [r2, #0x0] - and r12, r1, #0x7 - and r0, r0, #0x38000000 - mov r1, r0, lsr #0x1b - and r0, r3, #0x1f00 - mov r2, r1, lsl #0x10 - cmp r12, #0x6 - mov r1, r0, lsr #0x8 - addls pc, pc, r12, lsl #0x2 - b _020C7364 -_020C731C: - b _020C7338 -_020C7320: - b _020C7338 -_020C7324: - b _020C7338 -_020C7328: - b _020C7338 -_020C732C: - b _020C7338 -_020C7330: - b _020C7344 -_020C7334: - b _020C735C -_020C7338: - add r0, r2, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr -_020C7344: - ands r0, r3, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6000000 - addeq r0, r2, #0x6000000 - addeq r0, r0, r1, lsl #0xb - bx lr -_020C735C: - mov r0, #0x6000000 - bx lr -_020C7364: - mov r0, #0x0 - bx lr - .balign 4 -_020C736C: .word 0x0400000C - - arm_func_start G2S_GetBG1ScrPtr -G2S_GetBG1ScrPtr: ; 0x020C7370 - ldr r0, _020C738C ; =0x0400100A - ldrh r0, [r0, #0x0] - and r0, r0, #0x1f00 - mov r0, r0, asr #0x8 - mov r0, r0, lsl #0xb - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C738C: .word 0x0400100A - - arm_func_start G2_GetBG1ScrPtr -G2_GetBG1ScrPtr: ; 0x020C7390 - ldr r1, _020C73C0 ; =0x0400000A - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x38000000 - mov r0, r0, lsr #0x1b - and r1, r1, #0x1f00 - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x8 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr - .balign 4 -_020C73C0: .word 0x0400000A - - arm_func_start G2S_GetBG0ScrPtr -G2S_GetBG0ScrPtr: ; 0x020C73C4 - ldr r0, _020C73E0 ; =0x04001008 - ldrh r0, [r0, #0x0] - and r0, r0, #0x1f00 - mov r0, r0, asr #0x8 - mov r0, r0, lsl #0xb - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C73E0: .word 0x04001008 - - arm_func_start G2_GetBG0ScrPtr -G2_GetBG0ScrPtr: ; 0x020C73E4 - ldr r1, _020C7414 ; =0x04000008 - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x38000000 - mov r0, r0, lsr #0x1b - and r1, r1, #0x1f00 - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x8 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr - .balign 4 -_020C7414: .word 0x04000008 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 6919cbfd..3f218df9 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -51,6 +51,19 @@ #define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG0CNT_A 0x04000008 +#define HW_REG_BG1CNT_A 0x0400000A +#define HW_REG_BG2CNT_A 0x0400000C +#define HW_REG_BG3CNT_A 0x0400000E + +#define HW_REG_BG0CNT_B 0x04001008 +#define HW_REG_BG1CNT_B 0x0400100A +#define HW_REG_BG2CNT_B 0x0400100C +#define HW_REG_BG3CNT_B 0x0400100E + +#define HW_REG_DISPCNT_A 0x04000000 +#define HW_REG_DISPCNT_B 0x04001000 + //TODO: wait for register commit and replace these #define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) @@ -105,7 +118,7 @@ void G3_RotY(fx32 sinphi, fx32 cosphi); void G3_RotZ(fx32 sinphi, fx32 cosphi); //GX_g3x -asm void GXi_NopClearFifo128_(void *reg); +void GXi_NopClearFifo128_(void *reg); void G3X_Init(); void G3X_ResetMtxStack(); void G3X_ClearFifo(); @@ -197,6 +210,25 @@ u32 GX_GetBankForSubOBJ(); u32 GX_GetBankForSubBGExtPltt(); u32 GX_GetBankForSubOBJExtPltt(); +//GX_bgcnt +void *G2_GetBG0ScrPtr(); +void *G2S_GetBG0ScrPtr(); +void *G2_GetBG1ScrPtr(); +void *G2S_GetBG1ScrPtr(); +void *G2_GetBG2ScrPtr(); +void *G2S_GetBG2ScrPtr(); +void *G2_GetBG3ScrPtr(); +void *G2S_GetBG3ScrPtr(); +void *G2_GetBG0CharPtr(); +void *G2S_GetBG0CharPtr(); +void *G2_GetBG1CharPtr(); +void *G2S_GetBG1CharPtr(); +void *G2_GetBG2CharPtr(); +void *G2S_GetBG2CharPtr(); +void *G2_GetBG3CharPtr(); +void *G2S_GetBG3CharPtr(); + + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c new file mode 100644 index 00000000..918f4d32 --- /dev/null +++ b/arm9/lib/src/GX_bgcnt.c @@ -0,0 +1,195 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void *G2_GetBG0ScrPtr(){ + u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); +} + +void *G2S_GetBG0ScrPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x1F00) >> 0x8) << 0xB)); +} + +void *G2_GetBG1ScrPtr(){ + u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); +} + +void *G2S_GetBG1ScrPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x1F00) >> 0x8) << 0xB)); +} + +void *G2_GetBG2ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp3 = READREG16(HW_REG_BG2CNT_A); + u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 5: + if (temp3 & 0x80) + return (void *)(0x6000000 + (temp1 << 0xE)); + else + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 6: + return (void *)0x6000000; + default: + return NULL; + } +} + +void *G2S_GetBG2ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp3 = READREG16(HW_REG_BG2CNT_B); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return (void *)(0x6200000 + (temp1 << 0xB)); + case 5: + if (temp3 & 0x80) + return (void *)(0x6200000 + (temp1 << 0xE)); + else + return (void *)(0x6200000 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +void *G2_GetBG3ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp3 = READREG16(HW_REG_BG3CNT_A); + u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 3: + case 4: + case 5: + if (temp3 & 0x80) + return (void *)(0x6000000 + (temp1 << 0xE)); + else + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +void *G2S_GetBG3ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp3 = READREG16(HW_REG_BG3CNT_B); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + return (void *)(0x6200000 + (temp1 << 0xB)); + case 3: + case 4: + case 5: + if (temp3 & 0x80) + return (void *)(0x6200000 + (temp1 << 0xE)); + else + return (void *)(0x6200000 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +void *G2_GetBG0CharPtr(){ + u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); +} + +void *G2S_GetBG0CharPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x3C) >> 0x2) << 0xE)); +} + +void *G2_GetBG1CharPtr(){ + u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); +} + +void *G2S_GetBG1CharPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x3C) >> 0x2) << 0xE)); +} + +void *G2_GetBG2CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp = READREG16(HW_REG_BG2CNT_A); + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +void *G2S_GetBG2CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp = READREG16(HW_REG_BG2CNT_B); + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} + +void *G2_GetBG3CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp = READREG16(HW_REG_BG3CNT_A); + if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) + { + u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +void *G2S_GetBG3CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp = READREG16(HW_REG_BG3CNT_B); + if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) + { + u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} -- cgit v1.2.3 From 0516c30ad7aa1941882b4e31e6b7bc4ec4ae02a4 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 13 May 2020 19:27:00 +0200 Subject: Fix Function signatures in GX_vramcnt --- arm9/lib/include/gx.h | 26 ++++++++++++------------ arm9/lib/src/GX_vramcnt.c | 50 +++++++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 3f218df9..c8229d3a 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -159,19 +159,19 @@ void GX_SendFifo48B(void *src, void *dst); //GX_vramcnt //some of the symbols don't match what the function does void GX_VRAMCNT_SetLCDC_(u32 mask); -void GX_SetBankForBG(u16 bg); -void GX_SetBankForOBJ(u16 obj); -void GX_SetBankForBGExtPltt(u16 bgextpltt); -void GX_SetBankForOBJExtPltt(u16 objextpltt); -void GX_SetBankForTex(u16 tex); -void GX_SetBankForTexPltt(u16 texpltt); -void GX_SetBankForClearImage(u16 clearimage); -void GX_SetBankForARM7(u16 arm7); -void GX_SetBankForLCDC(u16 lcdc); -void GX_SetBankForSubBG(u16 subbg); -void GX_SetBankForSubOBJ(u16 subobj); -void GX_SetBankForSubBGExtPltt(u16 subbgextpltt); -void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt); +void GX_SetBankForBG(s32 bg); +void GX_SetBankForOBJ(s32 obj); +void GX_SetBankForBGExtPltt(s32 bgextpltt); +void GX_SetBankForOBJExtPltt(s32 objextpltt); +void GX_SetBankForTex(s32 tex); +void GX_SetBankForTexPltt(s32 texpltt); +void GX_SetBankForClearImage(s32 clearimage); +void GX_SetBankForARM7(s32 arm7); +void GX_SetBankForLCDC(s32 lcdc); +void GX_SetBankForSubBG(s32 subbg); +void GX_SetBankForSubOBJ(s32 subobj); +void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); +void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); u32 FUN_020C6130(u16 *ptr); u32 GX_ResetBankForBG(); u32 GX_ResetBankForOBJ(); diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index aa3d9cc9..52be412c 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -28,8 +28,8 @@ void GX_VRAMCNT_SetLCDC_(u32 mask){ SETREG8(HW_REG_VRAMCNT_I, 0x80); } -void GX_SetBankForBG(u16 bg){ - gUnk021D33C4.var00 = ~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02); +void GX_SetBankForBG(s32 bg){ + gUnk021D33C4.var00 = (u16)(~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02)); gUnk021D33C4.var02 = bg; switch (bg) { @@ -101,8 +101,8 @@ void GX_SetBankForBG(u16 bg){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJ(u16 obj){ - gUnk021D33C4.var00 = ~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04); +void GX_SetBankForOBJ(s32 obj){ + gUnk021D33C4.var00 = (u16)(~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04)); gUnk021D33C4.var04 = obj; switch (obj) { @@ -140,8 +140,8 @@ void GX_SetBankForOBJ(u16 obj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForBGExtPltt(u16 bgextpltt){ - gUnk021D33C4.var00 = ~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E); +void GX_SetBankForBGExtPltt(s32 bgextpltt){ + gUnk021D33C4.var00 = (u16)(~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E)); gUnk021D33C4.var0E = bgextpltt; switch (bgextpltt) { @@ -166,8 +166,8 @@ void GX_SetBankForBGExtPltt(u16 bgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJExtPltt(u16 objextpltt){ - gUnk021D33C4.var00 = ~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10); +void GX_SetBankForOBJExtPltt(s32 objextpltt){ + gUnk021D33C4.var00 = (u16)(~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10)); gUnk021D33C4.var10 = objextpltt; switch (objextpltt) { @@ -186,8 +186,8 @@ void GX_SetBankForOBJExtPltt(u16 objextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTex(u16 tex){ - gUnk021D33C4.var00 = ~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08); +void GX_SetBankForTex(s32 tex){ + gUnk021D33C4.var00 = (u16)(~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08)); gUnk021D33C4.var08 = tex; if (tex == 0) { @@ -249,8 +249,8 @@ void GX_SetBankForTex(u16 tex){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTexPltt(u16 texpltt){ - gUnk021D33C4.var00 = ~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A); +void GX_SetBankForTexPltt(s32 texpltt){ + gUnk021D33C4.var00 = (u16)(~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A)); gUnk021D33C4.var0A = texpltt; switch (texpltt) { @@ -275,8 +275,8 @@ void GX_SetBankForTexPltt(u16 texpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForClearImage(u16 clearimage){ - gUnk021D33C4.var00 = ~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C); +void GX_SetBankForClearImage(s32 clearimage){ + gUnk021D33C4.var00 = (u16)(~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C)); gUnk021D33C4.var0C = clearimage; switch (clearimage) { @@ -306,8 +306,8 @@ void GX_SetBankForClearImage(u16 clearimage){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForARM7(u16 arm7){ - gUnk021D33C4.var00 = ~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06); +void GX_SetBankForARM7(s32 arm7){ + gUnk021D33C4.var00 = (u16)(~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06)); gUnk021D33C4.var06 = arm7; switch (arm7) { @@ -326,13 +326,13 @@ void GX_SetBankForARM7(u16 arm7){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForLCDC(u16 lcdc){ +void GX_SetBankForLCDC(s32 lcdc){ gUnk021D33C4.var00 |= lcdc; GX_VRAMCNT_SetLCDC_(lcdc); } -void GX_SetBankForSubBG(u16 subbg){ - gUnk021D33C4.var00 = ~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12); +void GX_SetBankForSubBG(s32 subbg){ + gUnk021D33C4.var00 = (u16)(~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12)); gUnk021D33C4.var12 = subbg; switch (subbg) { @@ -350,8 +350,8 @@ void GX_SetBankForSubBG(u16 subbg){ } -void GX_SetBankForSubOBJ(u16 subobj){ - gUnk021D33C4.var00 = ~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14); +void GX_SetBankForSubOBJ(s32 subobj){ + gUnk021D33C4.var00 = (u16)(~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14)); gUnk021D33C4.var14 = subobj; switch (subobj) { @@ -367,8 +367,8 @@ void GX_SetBankForSubOBJ(u16 subobj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubBGExtPltt(u16 subbgextpltt){ - gUnk021D33C4.var00 = ~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16); +void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ + gUnk021D33C4.var00 = (u16)(~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16)); gUnk021D33C4.var16 = subbgextpltt; switch (subbgextpltt) { @@ -383,8 +383,8 @@ void GX_SetBankForSubBGExtPltt(u16 subbgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt){ - gUnk021D33C4.var00 = ~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18); +void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ + gUnk021D33C4.var00 = (u16)(~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18)); gUnk021D33C4.var18 = subobjextpltt; switch (subobjextpltt) { -- cgit v1.2.3 From 5223256ef928245620bb1a223084df6931999795 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 13 May 2020 20:55:45 +0200 Subject: Decompile GX_load2d.h --- arm9/asm/GX_load2d.s | 1116 ---------------------------------------------- arm9/lib/include/gx.h | 37 ++ arm9/lib/src/GX_load2d.c | 267 +++++++++++ arm9/undefined_syms.txt | 8 + 4 files changed, 312 insertions(+), 1116 deletions(-) delete mode 100644 arm9/asm/GX_load2d.s create mode 100644 arm9/lib/src/GX_load2d.c diff --git a/arm9/asm/GX_load2d.s b/arm9/asm/GX_load2d.s deleted file mode 100644 index 3d48c5d2..00000000 --- a/arm9/asm/GX_load2d.s +++ /dev/null @@ -1,1116 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GXS_EndLoadOBJExtPltt -GXS_EndLoadOBJExtPltt: ; 0x020C8728 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C876C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8748 - bl MI_WaitDma -_020C8748: - ldr r0, _020C8770 ; =0x021D33F8 - ldr r0, [r0, #0x0] - bl GX_SetBankForSubOBJExtPltt - ldr r0, _020C8770 ; =0x021D33F8 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C876C: .word 0x02106814 -_020C8770: .word 0x021D33F8 - - arm_func_start GXS_LoadOBJExtPltt -GXS_LoadOBJExtPltt: ; 0x020C8774 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr r3, _020C87E0 ; =0x02106814 - mvn r12, #0x0 - ldr lr, [r3, #0x0] - mov r5, r0 - mov r4, r1 - mov r3, r2 - cmp lr, r12 - beq _020C87C8 - ldr r2, _020C87E4 ; =0x068A0000 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - add r2, r4, r2 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C87C8: - ldr r1, _020C87E4 ; =0x068A0000 - add r1, r4, r1 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C87E0: .word 0x02106814 -_020C87E4: .word 0x068A0000 - - arm_func_start GXS_BeginLoadOBJExtPltt -GXS_BeginLoadOBJExtPltt: ; 0x020C87E8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForSubOBJ - ldr r1, _020C8808 ; =0x021D33F8 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8808: .word 0x021D33F8 - - arm_func_start GXS_EndLoadBGExtPltt -GXS_EndLoadBGExtPltt: ; 0x020C880C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C8850 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C882C - bl MI_WaitDma -_020C882C: - ldr r0, _020C8854 ; =0x021D33E0 - ldr r0, [r0, #0x0] - bl GX_SetBankForSubBGExtPltt - ldr r0, _020C8854 ; =0x021D33E0 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8850: .word 0x02106814 -_020C8854: .word 0x021D33E0 - - arm_func_start GXS_LoadBGExtPltt -GXS_LoadBGExtPltt: ; 0x020C8858 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr r3, _020C88C4 ; =0x02106814 - mvn r12, #0x0 - ldr lr, [r3, #0x0] - mov r5, r0 - mov r4, r1 - mov r3, r2 - cmp lr, r12 - beq _020C88AC - ldr r2, _020C88C8 ; =0x06898000 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - add r2, r4, r2 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C88AC: - ldr r1, _020C88C8 ; =0x06898000 - add r1, r4, r1 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C88C4: .word 0x02106814 -_020C88C8: .word 0x06898000 - - arm_func_start GXS_BeginLoadBGExtPltt -GXS_BeginLoadBGExtPltt: ; 0x020C88CC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020C6034 - ldr r1, _020C88EC ; =0x021D33E0 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C88EC: .word 0x021D33E0 - - arm_func_start GX_EndLoadOBJExtPltt -GX_EndLoadOBJExtPltt: ; 0x020C88F0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C893C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8910 - bl MI_WaitDma -_020C8910: - ldr r0, _020C8940 ; =0x021D33E8 - ldr r0, [r0, #0x0] - bl GX_SetBankForOBJExtPltt - ldr r1, _020C8940 ; =0x021D33E8 - mov r2, #0x0 - ldr r0, _020C8944 ; =0x021D33E4 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C893C: .word 0x02106814 -_020C8940: .word 0x021D33E8 -_020C8944: .word 0x021D33E4 - - arm_func_start GX_LoadOBJExtPltt -GX_LoadOBJExtPltt: ; 0x020C8948 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr ip, _020C89B4 ; =0x021D33E4 - ldr r3, _020C89B8 ; =0x02106814 - ldr r4, [r12, #0x0] - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r5, r0 - mov r3, r2 - cmp lr, r12 - add r4, r4, r1 - beq _020C89A0 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C89A0: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C89B4: .word 0x021D33E4 -_020C89B8: .word 0x02106814 - - arm_func_start GX_BeginLoadOBJExtPltt -GX_BeginLoadOBJExtPltt: ; 0x020C89BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForOBJExtPltt - ldr r1, _020C8A1C ; =0x021D33E8 - cmp r0, #0x0 - str r0, [r1, #0x0] - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - cmp r0, #0x20 - beq _020C8A04 - cmp r0, #0x40 - ldreq r1, _020C8A20 ; =0x06894000 - ldreq r0, _020C8A24 ; =0x021D33E4 - add sp, sp, #0x4 - streq r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C8A04: - ldr r1, _020C8A28 ; =0x06890000 - ldr r0, _020C8A24 ; =0x021D33E4 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8A1C: .word 0x021D33E8 -_020C8A20: .word 0x06894000 -_020C8A24: .word 0x021D33E4 -_020C8A28: .word 0x06890000 - - arm_func_start GX_EndLoadBGExtPltt -GX_EndLoadBGExtPltt: ; 0x020C8A2C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C8A80 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8A4C - bl MI_WaitDma -_020C8A4C: - ldr r0, _020C8A84 ; =0x021D33F4 - ldr r0, [r0, #0x0] - bl GX_SetBankForBGExtPltt - ldr r2, _020C8A84 ; =0x021D33F4 - mov r3, #0x0 - ldr r1, _020C8A88 ; =0x021D33F0 - ldr r0, _020C8A8C ; =0x021D33EC - str r3, [r2, #0x0] - str r3, [r1, #0x0] - str r3, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8A80: .word 0x02106814 -_020C8A84: .word 0x021D33F4 -_020C8A88: .word 0x021D33F0 -_020C8A8C: .word 0x021D33EC - - arm_func_start GX_LoadBGExtPltt -GX_LoadBGExtPltt: ; 0x020C8A90 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr lr, _020C8B04 ; =0x021D33F0 - ldr ip, _020C8B08 ; =0x021D33EC - ldr r3, _020C8B0C ; =0x02106814 - ldr lr, [lr, #0x0] - ldr r4, [r12, #0x0] - add r5, lr, r1 - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r1, r0 - mov r3, r2 - cmp lr, r12 - sub r4, r5, r4 - beq _020C8AF0 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C8AF0: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C8B04: .word 0x021D33F0 -_020C8B08: .word 0x021D33EC -_020C8B0C: .word 0x02106814 - - arm_func_start GX_BeginLoadBGExtPltt -GX_BeginLoadBGExtPltt: ; 0x020C8B10 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForBGExtPltt - ldr r1, _020C8BFC ; =0x021D33F4 - cmp r0, #0x20 - str r0, [r1, #0x0] - bgt _020C8B60 - cmp r0, #0x20 - bge _020C8BD8 - cmp r0, #0x0 - bgt _020C8B4C - add sp, sp, #0x4 - cmp r0, #0x0 - ldmia sp!, {lr} - bx lr -_020C8B4C: - cmp r0, #0x10 - beq _020C8B90 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B60: - cmp r0, #0x40 - bgt _020C8B7C - cmp r0, #0x40 - beq _020C8BB4 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B7C: - cmp r0, #0x60 - beq _020C8BD8 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B90: - ldr r3, _020C8C00 ; =0x06880000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x0 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8BB4: - ldr r3, _020C8C0C ; =0x06894000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x4000 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8BD8: - ldr r3, _020C8C10 ; =0x06890000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x0 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8BFC: .word 0x021D33F4 -_020C8C00: .word 0x06880000 -_020C8C04: .word 0x021D33F0 -_020C8C08: .word 0x021D33EC -_020C8C0C: .word 0x06894000 -_020C8C10: .word 0x06890000 - - arm_func_start GXS_LoadBG3Char -GXS_LoadBG3Char: ; 0x020C8C14 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG3CharPtr - ldr r1, _020C8C78 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8C60 - cmp r4, #0x30 - bls _020C8C60 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8C60: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8C78: .word 0x02106814 - - arm_func_start GX_LoadBG3Char -GX_LoadBG3Char: ; 0x020C8C7C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG3CharPtr - ldr r1, _020C8CE0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8CC8 - cmp r4, #0x30 - bls _020C8CC8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8CC8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8CE0: .word 0x02106814 - - arm_func_start GXS_LoadBG2Char -GXS_LoadBG2Char: ; 0x020C8CE4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG2CharPtr - ldr r1, _020C8D48 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8D30 - cmp r4, #0x30 - bls _020C8D30 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8D30: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8D48: .word 0x02106814 - - arm_func_start GX_LoadBG2Char -GX_LoadBG2Char: ; 0x020C8D4C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG2CharPtr - ldr r1, _020C8DB0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8D98 - cmp r4, #0x30 - bls _020C8D98 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8D98: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8DB0: .word 0x02106814 - - arm_func_start GXS_LoadBG1Char -GXS_LoadBG1Char: ; 0x020C8DB4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG1CharPtr - ldr r1, _020C8E18 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8E00 - cmp r4, #0x30 - bls _020C8E00 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8E00: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8E18: .word 0x02106814 - - arm_func_start GX_LoadBG1Char -GX_LoadBG1Char: ; 0x020C8E1C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG1CharPtr - ldr r1, _020C8E80 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8E68 - cmp r4, #0x30 - bls _020C8E68 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8E68: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8E80: .word 0x02106814 - - arm_func_start GXS_LoadBG0Char -GXS_LoadBG0Char: ; 0x020C8E84 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG0CharPtr - ldr r1, _020C8EE8 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8ED0 - cmp r4, #0x30 - bls _020C8ED0 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8ED0: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8EE8: .word 0x02106814 - - arm_func_start GX_LoadBG0Char -GX_LoadBG0Char: ; 0x020C8EEC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG0CharPtr - ldr r1, _020C8F50 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8F38 - cmp r4, #0x30 - bls _020C8F38 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8F38: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8F50: .word 0x02106814 - - arm_func_start GXS_LoadBG3Scr -GXS_LoadBG3Scr: ; 0x020C8F54 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG3ScrPtr - ldr r1, _020C8FB8 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8FA0 - cmp r4, #0x1c - bls _020C8FA0 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8FA0: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8FB8: .word 0x02106814 - - arm_func_start GX_LoadBG3Scr -GX_LoadBG3Scr: ; 0x020C8FBC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG3ScrPtr - ldr r1, _020C9020 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9008 - cmp r4, #0x1c - bls _020C9008 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9008: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9020: .word 0x02106814 - - arm_func_start GXS_LoadBG2Scr -GXS_LoadBG2Scr: ; 0x020C9024 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG2ScrPtr - ldr r1, _020C9088 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9070 - cmp r4, #0x1c - bls _020C9070 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9070: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9088: .word 0x02106814 - - arm_func_start GX_LoadBG2Scr -GX_LoadBG2Scr: ; 0x020C908C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG2ScrPtr - ldr r1, _020C90F0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C90D8 - cmp r4, #0x1c - bls _020C90D8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C90D8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C90F0: .word 0x02106814 - - arm_func_start GXS_LoadBG1Scr -GXS_LoadBG1Scr: ; 0x020C90F4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG1ScrPtr - ldr r1, _020C9158 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9140 - cmp r4, #0x1c - bls _020C9140 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9140: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9158: .word 0x02106814 - - arm_func_start GX_LoadBG1Scr -GX_LoadBG1Scr: ; 0x020C915C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG1ScrPtr - ldr r1, _020C91C0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C91A8 - cmp r4, #0x1c - bls _020C91A8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C91A8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C91C0: .word 0x02106814 - - arm_func_start GXS_LoadBG0Scr -GXS_LoadBG0Scr: ; 0x020C91C4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG0ScrPtr - ldr r1, _020C9228 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9210 - cmp r4, #0x1c - bls _020C9210 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9210: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9228: .word 0x02106814 - - arm_func_start GX_LoadBG0Scr -GX_LoadBG0Scr: ; 0x020C922C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG0ScrPtr - ldr r1, _020C9290 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9278 - cmp r4, #0x1c - bls _020C9278 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9278: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9290: .word 0x02106814 - - arm_func_start GXS_LoadOBJ -GXS_LoadOBJ: ; 0x020C9294 - stmdb sp!, {r4,lr} - ldr r3, _020C92F0 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - mov r12, #0x6600000 - beq _020C92D8 - cmp r3, #0x30 - bls _020C92D8 - mov r1, r4 - add r2, r12, lr - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C92D8: - mov r0, r4 - mov r2, r3 - add r1, r12, lr - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C92F0: .word 0x02106814 - - arm_func_start GX_LoadOBJ -GX_LoadOBJ: ; 0x020C92F4 - stmdb sp!, {r4,lr} - ldr r3, _020C9350 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - mov r12, #0x6400000 - beq _020C9338 - cmp r3, #0x30 - bls _020C9338 - mov r1, r4 - add r2, r12, lr - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C9338: - mov r0, r4 - mov r2, r3 - add r1, r12, lr - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9350: .word 0x02106814 - - arm_func_start GXS_LoadOAM -GXS_LoadOAM: ; 0x020C9354 - stmdb sp!, {r4,lr} - ldr r3, _020C93B4 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C9398 - cmp r3, #0x30 - bls _020C9398 - ldr r2, _020C93B8 ; =0x07000400 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C9398: - ldr r1, _020C93B8 ; =0x07000400 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C93B4: .word 0x02106814 -_020C93B8: .word 0x07000400 - - arm_func_start GX_LoadOAM -GX_LoadOAM: ; 0x020C93BC - stmdb sp!, {r4,lr} - ldr r3, _020C9414 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C93FC - cmp r3, #0x30 - bls _020C93FC - mov r1, r4 - add r2, lr, #0x7000000 - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C93FC: - mov r0, r4 - mov r2, r3 - add r1, lr, #0x7000000 - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9414: .word 0x02106814 - - arm_func_start GXS_LoadOBJPltt -GXS_LoadOBJPltt: ; 0x020C9418 - stmdb sp!, {r4,lr} - ldr r3, _020C9478 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C945C - cmp r3, #0x1c - bls _020C945C - ldr r2, _020C947C ; =0x05000600 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C945C: - ldr r1, _020C947C ; =0x05000600 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9478: .word 0x02106814 -_020C947C: .word 0x05000600 - - arm_func_start GX_LoadOBJPltt -GX_LoadOBJPltt: ; 0x020C9480 - stmdb sp!, {r4,lr} - ldr r3, _020C94E0 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C94C4 - cmp r3, #0x1c - bls _020C94C4 - ldr r2, _020C94E4 ; =0x05000200 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C94C4: - ldr r1, _020C94E4 ; =0x05000200 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C94E0: .word 0x02106814 -_020C94E4: .word 0x05000200 - - arm_func_start GXS_LoadBGPltt -GXS_LoadBGPltt: ; 0x020C94E8 - stmdb sp!, {r4,lr} - ldr r3, _020C9548 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C952C - cmp r3, #0x1c - bls _020C952C - ldr r2, _020C954C ; =0x05000400 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C952C: - ldr r1, _020C954C ; =0x05000400 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9548: .word 0x02106814 -_020C954C: .word 0x05000400 - - arm_func_start GX_LoadBGPltt -GX_LoadBGPltt: ; 0x020C9550 - stmdb sp!, {r4,lr} - ldr r3, _020C95A8 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C9590 - cmp r3, #0x1c - bls _020C9590 - mov r1, r4 - add r2, lr, #0x5000000 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C9590: - mov r0, r4 - mov r2, r3 - add r1, lr, #0x5000000 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C95A8: .word 0x02106814 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index c8229d3a..5891753e 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -228,6 +228,43 @@ void *G2S_GetBG2CharPtr(); void *G2_GetBG3CharPtr(); void *G2S_GetBG3CharPtr(); +//GX_load2d +void GX_LoadBGPltt(void *src, u32 offset, u32 size); +void GXS_LoadBGPltt(void *src, u32 offset, u32 size); +void GX_LoadOBJPltt(void *src, u32 offset, u32 size); +void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); +void GX_LoadOAM(void *src, u32 offset, u32 size); +void GXS_LoadOAM(void *src, u32 offset, u32 size); +void GX_LoadOBJ(void *src, u32 offset, u32 size); +void GXS_LoadOBJ(void *src, u32 offset, u32 size); +void GX_LoadBG0Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); +void GX_LoadBG1Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); +void GX_LoadBG2Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); +void GX_LoadBG3Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); +void GX_LoadBG0Char(void *src, u32 offset, u32 size); +void GXS_LoadBG0Char(void *src, u32 offset, u32 size); +void GX_LoadBG1Char(void *src, u32 offset, u32 size); +void GXS_LoadBG1Char(void *src, u32 offset, u32 size); +void GX_LoadBG2Char(void *src, u32 offset, u32 size); +void GXS_LoadBG2Char(void *src, u32 offset, u32 size); +void GX_LoadBG3Char(void *src, u32 offset, u32 size); +void GXS_LoadBG3Char(void *src, u32 offset, u32 size); +void GX_BeginLoadBGExtPltt(); +void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadBGExtPltt(); +void GX_BeginLoadOBJExtPltt(); +void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadOBJExtPltt(); +void GXS_BeginLoadBGExtPltt(); +void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadBGExtPltt(); +void GXS_BeginLoadOBJExtPltt(); +void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadOBJExtPltt(); //GXi_NopClearFifo128_ probably asm diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c new file mode 100644 index 00000000..b0af0e8c --- /dev/null +++ b/arm9/lib/src/GX_load2d.c @@ -0,0 +1,267 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 gUnk02106814; + +extern s32 gUnk021D33F8; +extern s32 gUnk021D33F4; +extern u32 gUnk021D33F0; +extern u32 gUnk021D33EC; +extern s32 gUnk021D33E8; +extern u32 gUnk021D33E4; +extern s32 gUnk021D33E0; + +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); + + +static inline void _GX_Load_16(void *src, u32 offset, u32 size, u32 base){ + if (gUnk02106814 != -1 && size > 0x1C) + { + MI_DmaCopy16(gUnk02106814, src, (void *)(base + offset), size); + } + else + { + MIi_CpuCopy16(src, (void *)(base + offset), size); + } +} + +static inline void _GX_Load_32(void *src, u32 offset, u32 size, u32 base){ + if (gUnk02106814 != -1 && size > 0x30) + { + MI_DmaCopy32(gUnk02106814, src, (void *)(base + offset), size); + } + else + { + MIi_CpuCopy32(src, (void *)(base + offset), size); + } +} + +static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ + if (gUnk02106814 != -1) + { + MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +static inline void *_GX_OBJ_PTR(){ + return (void *)0x6400000; +} +static inline void *_GXS_OBJ_PTR(){ + return (void *)0x6600000; +} + +void GX_LoadBGPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000000); +} + +void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000400); +} + +void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000200); +} + +void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000600); +} + +void GX_LoadOAM(void *src, u32 offset, u32 size){ + _GX_Load_32(src, offset, size, 0x7000000); +} + +void GXS_LoadOAM(void *src, u32 offset, u32 size){ + _GX_Load_32(src, offset, size, 0x7000400); +} + +void GX_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GX_OBJ_PTR(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GXS_OBJ_PTR(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_BeginLoadBGExtPltt(){ + gUnk021D33F4 = GX_ResetBankForBGExtPltt(); + switch (gUnk021D33F4) + { + case 0: //needed to match + break; + case 0x10: + gUnk021D33F0 = 0x06880000; + gUnk021D33EC = 0x0; + break; + case 0x40: + gUnk021D33F0 = 0x06894000; + gUnk021D33EC = 0x4000; + break; + case 0x20: + case 0x60: + gUnk021D33F0 = 0x06890000; + gUnk021D33EC = 0x0; + break; + } +} + +void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); +} + +void GX_EndLoadBGExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForBGExtPltt(gUnk021D33F4); + gUnk021D33F4 = 0x0; + gUnk021D33F0 = 0x0; + gUnk021D33EC = 0x0; +} + +void GX_BeginLoadOBJExtPltt(){ + gUnk021D33E8 = GX_ResetBankForOBJExtPltt(); + switch (gUnk021D33E8) + { + case 0: //needed to match + break; + case 0x40: + gUnk021D33E4 = 0x06894000; + break; + case 0x20: + gUnk021D33E4 = 0x06890000; + break; + } +} + +void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); +} + +void GX_EndLoadOBJExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForOBJExtPltt(gUnk021D33E8); + gUnk021D33E8 = 0x0; + gUnk021D33E4 = 0x0; +} + +void GXS_BeginLoadBGExtPltt(){ + gUnk021D33E0 = FUN_020C6034(); +} + +void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(0x06898000 + offset), size, NULL, NULL); +} + +void GXS_EndLoadBGExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForSubBGExtPltt(gUnk021D33E0); + gUnk021D33E0 = 0x0; +} + +void GXS_BeginLoadOBJExtPltt(){ + gUnk021D33F8 = GX_ResetBankForSubOBJ(); +} + +void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(0x068A0000 + offset), size, NULL, NULL); +} + +void GXS_EndLoadOBJExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForSubOBJExtPltt(gUnk021D33F8); + gUnk021D33F8 = 0x0; +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 973e6b51..72bd6f94 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -23,6 +23,14 @@ SDK_OVERLAY_DIGEST_END = 0x02106F84; gUnk021D33BC = 0x021D33BC; gUnk021D33C4 = 0x021D33C4; +gUnk021D33E0 = 0x021D33E0; +gUnk021D33E4 = 0x021D33E4; +gUnk021D33E8 = 0x021D33E8; +gUnk021D33EC = 0x021D33EC; +gUnk021D33F0 = 0x021D33F0; +gUnk021D33F4 = 0x021D33F4; +gUnk021D33F8 = 0x021D33F8; + // Overlay FUN_021D76AC = 0x021D76AC; gUnk021D76C8 = 0x021D76C8; -- cgit v1.2.3 From 0b3c15a399b456bffcd65aa5d100371ce69fa8eb Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 00:22:52 +0200 Subject: Decompile GX_load3d.s --- arm9/asm/GX_load3d.s | 420 ----------------------------------------------- arm9/lib/include/gx.h | 12 ++ arm9/lib/src/GX_load3d.c | 157 ++++++++++++++++++ arm9/undefined_syms.txt | 14 ++ 4 files changed, 183 insertions(+), 420 deletions(-) delete mode 100644 arm9/asm/GX_load3d.s create mode 100644 arm9/lib/src/GX_load3d.c diff --git a/arm9/asm/GX_load3d.s b/arm9/asm/GX_load3d.s deleted file mode 100644 index 0c32f530..00000000 --- a/arm9/asm/GX_load3d.s +++ /dev/null @@ -1,420 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_EndLoadClearImage -GX_EndLoadClearImage: ; 0x020C95AC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C95F8 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C95CC - bl MI_WaitDma -_020C95CC: - ldr r0, _020C95FC ; =0x021D33FC - ldr r0, [r0, #0x0] - bl GX_SetBankForClearImage - ldr r1, _020C95FC ; =0x021D33FC - mov r2, #0x0 - ldr r0, _020C9600 ; =0x021D340C - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C95F8: .word 0x02106814 -_020C95FC: .word 0x021D33FC -_020C9600: .word 0x021D340C - - arm_func_start GX_LoadClearImageDepth -GX_LoadClearImageDepth: ; 0x020C9604 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r3, _020C9670 ; =0x021D340C - ldr r2, _020C9674 ; =0x02106814 - ldr r12, [r3, #0x0] - ldr lr, [r2, #0x0] - mvn r2, #0x0 - mov r4, r0 - mov r3, r1 - cmp lr, r2 - add r2, r12, #0x20000 - beq _020C9658 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020C9658: - mov r1, r2 - mov r2, r3 - bl MIi_CpuCopy32 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9670: .word 0x021D340C -_020C9674: .word 0x02106814 - - arm_func_start GX_LoadClearImageColor -GX_LoadClearImageColor: ; 0x020C9678 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r2, _020C96E0 ; =0x02106814 - ldr ip, _020C96E4 ; =0x021D340C - ldr lr, [r2, #0x0] - mvn r2, #0x0 - mov r4, r0 - mov r3, r1 - cmp lr, r2 - ldr r2, [r12, #0x0] - beq _020C96C8 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020C96C8: - mov r1, r2 - mov r2, r3 - bl MIi_CpuCopy32 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C96E0: .word 0x02106814 -_020C96E4: .word 0x021D340C - - arm_func_start GX_BeginLoadClearImage -GX_BeginLoadClearImage: ; 0x020C96E8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForClearImage - ldr r1, _020C979C ; =0x021D33FC - cmp r0, #0xc - str r0, [r1, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C9790 -_020C9708: - b _020C9790 -_020C970C: - b _020C976C -_020C9710: - b _020C973C -_020C9714: - b _020C973C -_020C9718: - b _020C9784 -_020C971C: - b _020C9790 -_020C9720: - b _020C9790 -_020C9724: - b _020C9790 -_020C9728: - b _020C9754 -_020C972C: - b _020C9790 -_020C9730: - b _020C9790 -_020C9734: - b _020C9790 -_020C9738: - b _020C9754 -_020C973C: - ldr r0, _020C97A0 ; =0x021D340C - mov r1, #0x6800000 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C9754: - ldr r1, _020C97A4 ; =0x06840000 - ldr r0, _020C97A0 ; =0x021D340C - add sp, sp, #0x4 - str r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C976C: - ldr r1, _020C97A8 ; =0x067E0000 - ldr r0, _020C97A0 ; =0x021D340C - add sp, sp, #0x4 - str r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C9784: - ldr r1, _020C97AC ; =0x06820000 - ldr r0, _020C97A0 ; =0x021D340C - str r1, [r0, #0x0] -_020C9790: - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C979C: .word 0x021D33FC -_020C97A0: .word 0x021D340C -_020C97A4: .word 0x06840000 -_020C97A8: .word 0x067E0000 -_020C97AC: .word 0x06820000 - - arm_func_start GX_EndLoadTexPltt -GX_EndLoadTexPltt: ; 0x020C97B0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C97FC ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C97D0 - bl MI_WaitDma -_020C97D0: - ldr r0, _020C9800 ; =0x021D3408 - ldr r0, [r0, #0x0] - bl GX_SetBankForTexPltt - ldr r1, _020C9800 ; =0x021D3408 - mov r2, #0x0 - ldr r0, _020C9804 ; =0x021D3404 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C97FC: .word 0x02106814 -_020C9800: .word 0x021D3408 -_020C9804: .word 0x021D3404 - - arm_func_start GX_LoadTexPltt -GX_LoadTexPltt: ; 0x020C9808 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr ip, _020C9874 ; =0x021D3404 - ldr r3, _020C9878 ; =0x02106814 - ldr r4, [r12, #0x0] - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r5, r0 - mov r3, r2 - cmp lr, r12 - add r4, r4, r1 - beq _020C9860 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C9860: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C9874: .word 0x021D3404 -_020C9878: .word 0x02106814 - - arm_func_start GX_BeginLoadTexPltt -GX_BeginLoadTexPltt: ; 0x020C987C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForTexPltt - mov r3, r0, asr #0x4 - ldr r2, _020C98B8 ; =0x021D3408 - ldr r1, _020C98BC ; =0x02103B3C - mov r3, r3, lsl #0x1 - ldrh r3, [r1, r3] - ldr r1, _020C98C0 ; =0x021D3404 - str r0, [r2, #0x0] - mov r0, r3, lsl #0xc - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C98B8: .word 0x021D3408 -_020C98BC: .word 0x02103B3C -_020C98C0: .word 0x021D3404 - - arm_func_start GX_EndLoadTex -GX_EndLoadTex: ; 0x020C98C4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C9920 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C98E4 - bl MI_WaitDma -_020C98E4: - ldr r0, _020C9924 ; =0x021D3410 - ldr r0, [r0, #0x0] - bl GX_SetBankForTex - ldr r3, _020C9928 ; =0x021D3418 - mov r12, #0x0 - ldr r2, _020C992C ; =0x021D3414 - ldr r1, _020C9930 ; =0x021D3400 - ldr r0, _020C9924 ; =0x021D3410 - str r12, [r3, #0x0] - str r12, [r2, #0x0] - str r12, [r1, #0x0] - str r12, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C9920: .word 0x02106814 -_020C9924: .word 0x021D3410 -_020C9928: .word 0x021D3418 -_020C992C: .word 0x021D3414 -_020C9930: .word 0x021D3400 - - arm_func_start GX_LoadTex -GX_LoadTex: ; 0x020C9934 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - ldr r3, _020C9A88 ; =0x021D3414 - mov r7, r0 - ldr r5, [r3, #0x0] - mov r6, r2 - cmp r5, #0x0 - ldreq r0, _020C9A8C ; =0x021D3400 - ldreq r0, [r0, #0x0] - addeq r2, r0, r1 - beq _020C9A34 - ldr r0, _020C9A90 ; =0x021D3418 - add r2, r1, r6 - ldr r4, [r0, #0x0] - cmp r2, r4 - ldrlo r0, _020C9A8C ; =0x021D3400 - ldrcc r0, [r0, #0x0] - addcc r2, r0, r1 - blo _020C9A34 - cmp r1, r4 - addcs r0, r5, r1 - subcs r2, r0, r4 - bhs _020C9A34 - ldr r2, _020C9A8C ; =0x021D3400 - ldr r0, _020C9A94 ; =0x02106814 - ldr r3, [r2, #0x0] - ldr r0, [r0, #0x0] - mvn r2, #0x0 - cmp r0, r2 - sub r4, r4, r1 - add r2, r3, r1 - beq _020C99CC - cmp r4, #0x30 - bls _020C99CC - mov r1, r7 - mov r3, r4 - bl MI_DmaCopy32 - b _020C99DC -_020C99CC: - mov r1, r2 - mov r0, r7 - mov r2, r4 - bl MIi_CpuCopy32 -_020C99DC: - ldr r0, _020C9A94 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C9A18 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r2, r5 - add r1, r7, r4 - sub r3, r6, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A18: - mov r1, r5 - add r0, r7, r4 - sub r2, r6, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A34: - ldr r0, _020C9A94 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C9A6C - mov r4, #0x0 - str r4, [sp, #0x0] - mov r1, r7 - mov r3, r6 - str r4, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A6C: - mov r1, r2 - mov r0, r7 - mov r2, r6 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020C9A88: .word 0x021D3414 -_020C9A8C: .word 0x021D3400 -_020C9A90: .word 0x021D3418 -_020C9A94: .word 0x02106814 - - arm_func_start GX_BeginLoadTex -GX_BeginLoadTex: ; 0x020C9A98 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl GX_ResetBankForTex - mov r1, #0x6 - mul r12, r0, r1 - ldr r3, _020C9AFC ; =0x02103B4C - ldr r2, _020C9B00 ; =0x02103B4E - ldr r1, _020C9B04 ; =0x02103B50 - ldrh r5, [r3, r12] - ldrh r4, [r2, r12] - ldrh lr, [r1, r12] - ldr ip, _020C9B08 ; =0x021D3410 - ldr r3, _020C9B0C ; =0x021D3400 - mov r5, r5, lsl #0xc - ldr r2, _020C9B10 ; =0x021D3414 - mov r4, r4, lsl #0xc - ldr r1, _020C9B14 ; =0x021D3418 - mov lr, lr, lsl #0xc - str r0, [r12, #0x0] - str r5, [r3, #0x0] - str r4, [r2, #0x0] - str lr, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C9AFC: .word 0x02103B4C -_020C9B00: .word 0x02103B4E -_020C9B04: .word 0x02103B50 -_020C9B08: .word 0x021D3410 -_020C9B0C: .word 0x021D3400 -_020C9B10: .word 0x021D3414 -_020C9B14: .word 0x021D3418 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 5891753e..edb6f122 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -266,6 +266,18 @@ void GXS_BeginLoadOBJExtPltt(); void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); void GXS_EndLoadOBJExtPltt(); +//GX_load3d +void GX_BeginLoadTex(); +void GX_LoadTex(void *src, u32 offset, u32 size); +void GX_EndLoadTex(); +void GX_BeginLoadTexPltt(); +void GX_LoadTexPltt(void *src, u32 offset, u32 size); +void GX_EndLoadTexPltt(); +void GX_BeginLoadClearImage(); +void GX_LoadClearImageColor(void *src, u32 size); +void GX_LoadClearImageDepth(void *src, u32 size); +void GX_EndLoadClearImage(); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c new file mode 100644 index 00000000..9ae7427a --- /dev/null +++ b/arm9/lib/src/GX_load3d.c @@ -0,0 +1,157 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 gUnk02106814; + +extern u32 gUnk021D3410; +extern u32 gUnk021D3400; +extern u32 gUnk021D3414; +extern u32 gUnk021D3418; + +//probably structs of length 0x6 +extern u16 gUnk02103B4C[]; +extern u16 gUnk02103B4E[]; +extern u16 gUnk02103B50[]; + +extern u32 gUnk021D3408; +extern u32 gUnk021D3404; +extern u16 gUnk02103B3C[]; + +extern s32 gUnk021D33FC; +extern u32 gUnk021D340C; + +static inline void _GX_Load_16(void *src, void *dst, u32 size){ + if (gUnk02106814 != -1 && size > 0x1C) + { + MI_DmaCopy16(gUnk02106814, src, dst, size); + } + else + { + MIi_CpuCopy16(src, dst, size); + } +} + +static inline void _GX_Load_32(void *src, void *dst, u32 size){ + if (gUnk02106814 != -1 && size > 0x30) + { + MI_DmaCopy32(gUnk02106814, src, dst, size); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ + if (gUnk02106814 != -1) + { + MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +void GX_BeginLoadTex(){ + u32 temp = GX_ResetBankForTex(); + gUnk021D3410 = temp; + gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC; + gUnk021D3414 = gUnk02103B4E[temp * 3] << 0xC; + gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC; +} + +void GX_LoadTex(void *src, u32 offset, u32 size){ + void *temp; + if (!gUnk021D3414) + { + temp = (void *)(gUnk021D3400 + offset); + } + else + { + if ((offset + size) < gUnk021D3418) + { + temp = (void *)(gUnk021D3400 + offset); + } + else if (offset >= gUnk021D3418) + { + temp = (void *)(gUnk021D3414 + offset - gUnk021D3418); + } + else + { + void *temp2 = (void *)gUnk021D3414; + u32 temp1 = gUnk021D3418 - offset; + temp = (void *)(gUnk021D3400 + offset); + _GX_Load_32(src, temp, temp1); + _GX_Load_32_Async((void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + return; + } + } + _GX_Load_32_Async(src, temp, size, NULL, NULL); +} + +void GX_EndLoadTex(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForTex(gUnk021D3410); + gUnk021D3418 = 0x0; + gUnk021D3414 = 0x0; + gUnk021D3400 = 0x0; + gUnk021D3410 = 0x0; +} + +void GX_BeginLoadTexPltt(){ + s32 temp = GX_ResetBankForTexPltt(); + gUnk021D3408 = temp; + gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC; +} + +void GX_LoadTexPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); +} + +void GX_EndLoadTexPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForTexPltt(gUnk021D3408); + gUnk021D3408 = 0x0; + gUnk021D3404 = 0x0; +} + +void GX_BeginLoadClearImage(){ + s32 temp = GX_ResetBankForClearImage(); + gUnk021D33FC = temp; + switch (temp) + { + case 2: + case 3: + gUnk021D340C = 0x6800000; + return; + case 8: + case 12: + gUnk021D340C = 0x6840000; + return; + case 1: + gUnk021D340C = 0x67E0000; + return; + case 4: + gUnk021D340C = 0x6820000; + } +} + +void GX_LoadClearImageColor(void *src, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D340C), size, NULL, NULL); +} + +void GX_LoadClearImageDepth(void *src, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); +} + +void GX_EndLoadClearImage(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForClearImage(gUnk021D33FC); + gUnk021D33FC = 0x0; + gUnk021D340C = 0x0; +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 72bd6f94..1705fd25 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -30,6 +30,20 @@ gUnk021D33EC = 0x021D33EC; gUnk021D33F0 = 0x021D33F0; gUnk021D33F4 = 0x021D33F4; gUnk021D33F8 = 0x021D33F8; +gUnk021D33FC = 0x021D33FC; +gUnk021D3400 = 0x021D3400; +gUnk021D3404 = 0x021D3404; +gUnk021D3408 = 0x021D3408; +gUnk021D340C = 0x021D340C; +gUnk021D3410 = 0x021D3410; +gUnk021D3414 = 0x021D3414; +gUnk021D3418 = 0x021D3418; + +gUnk02103B3C = 0x02103B3C; + +gUnk02103B4C = 0x02103B4C; +gUnk02103B4E = 0x02103B4E; +gUnk02103B50 = 0x02103B50; // Overlay FUN_021D76AC = 0x021D76AC; -- cgit v1.2.3 From 42adea6c97323f7e5738dc05c062af0d6fddd66d Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 02:40:41 +0200 Subject: Decompile GX.s --- arm9/asm/GX.s | 245 ------------------------------------------------ arm9/lib/include/gx.h | 24 ++++- arm9/lib/src/GX.c | 127 +++++++++++++++++++++++++ arm9/undefined_syms.txt | 2 + 4 files changed, 152 insertions(+), 246 deletions(-) delete mode 100644 arm9/asm/GX.s create mode 100644 arm9/lib/src/GX.c diff --git a/arm9/asm/GX.s b/arm9/asm/GX.s deleted file mode 100644 index 1e6bdc88..00000000 --- a/arm9/asm/GX.s +++ /dev/null @@ -1,245 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GXx_SetMasterBrightness_ -GXx_SetMasterBrightness_: ; 0x020C5978 - cmp r1, #0x0 - moveq r1, #0x0 - streqh r1, [r0, #0x0] - bxeq lr - cmp r1, #0x0 - orrgt r1, r1, #0x4000 - strgth r1, [r0, #0x0] - rsble r1, r1, #0x0 - orrle r1, r1, #0x8000 - strleh r1, [r0, #0x0] - bx lr - - arm_func_start GXS_SetGraphicsMode -GXS_SetGraphicsMode: ; 0x020C59A4 - ldr r2, _020C59BC ; =0x04001000 - ldr r1, [r2, #0x0] - bic r1, r1, #0x7 - orr r0, r1, r0 - str r0, [r2, #0x0] - bx lr - .balign 4 -_020C59BC: .word 0x04001000 - - arm_func_start GX_SetGraphicsMode -GX_SetGraphicsMode: ; 0x020C59C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, _020C5A28 ; =0x02106810 - mov lr, #0x4000000 - ldrh r12, [r3, #0x0] - ldr lr, [lr, #0x0] - ldr r3, _020C5A2C ; =0x021D33C0 - cmp r12, #0x0 - strh r0, [r3, #0x0] - ldr r3, _020C5A30 ; =0xFFF0FFF0 - moveq r0, #0x0 - and r3, lr, r3 - orr r0, r3, r0, lsl #0x10 - orr r0, r1, r0 - orr r1, r0, r2, lsl #0x3 - mov r12, #0x4000000 - ldr r0, _020C5A2C ; =0x021D33C0 - str r1, [r12, #0x0] - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r0, _020C5A28 ; =0x02106810 - moveq r1, #0x0 - streqh r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C5A28: .word 0x02106810 -_020C5A2C: .word 0x021D33C0 -_020C5A30: .word 0xFFF0FFF0 - - arm_func_start GX_DispOn -GX_DispOn: ; 0x020C5A34 - ldr r0, _020C5A78 ; =0x021D33C0 - ldr r1, _020C5A7C ; =0x02106810 - ldrh r2, [r0, #0x0] - mov r0, #0x1 - strh r0, [r1, #0x0] - cmp r2, #0x0 - moveq r1, #0x4000000 - ldreq r0, [r1, #0x0] - orreq r0, r0, #0x10000 - streq r0, [r1, #0x0] - bxeq lr - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x30000 - orr r0, r0, r2, lsl #0x10 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C5A78: .word 0x021D33C0 -_020C5A7C: .word 0x02106810 - - arm_func_start GX_DispOff -GX_DispOff: ; 0x020C5A80 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, #0x4000000 - ldr r12, [lr, #0x0] - ldr r1, _020C5AC0 ; =0x02106810 - and r2, r12, #0x30000 - mov r3, #0x0 - ldr r0, _020C5AC4 ; =0x021D33C0 - mov r2, r2, lsr #0x10 - strh r3, [r1, #0x0] - strh r2, [r0, #0x0] - bic r0, r12, #0x30000 - str r0, [lr, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C5AC0: .word 0x02106810 -_020C5AC4: .word 0x021D33C0 - - arm_func_start GX_VBlankIntr -GX_VBlankIntr: ; 0x020C5AC8 - ldr r2, _020C5AF4 ; =0x04000004 - cmp r0, #0x0 - ldrh r0, [r2, #0x0] - ldrneh r1, [r2, #0x0] - and r0, r0, #0x8 - orrne r1, r1, #0x8 - strneh r1, [r2, #0x0] - ldreqh r1, [r2, #0x0] - biceq r1, r1, #0x8 - streqh r1, [r2, #0x0] - bx lr - .balign 4 -_020C5AF4: .word 0x04000004 - - arm_func_start GX_HBlankIntr -GX_HBlankIntr: ; 0x020C5AF8 - ldr r2, _020C5B24 ; =0x04000004 - cmp r0, #0x0 - ldrh r0, [r2, #0x0] - ldrneh r1, [r2, #0x0] - and r0, r0, #0x10 - orrne r1, r1, #0x10 - strneh r1, [r2, #0x0] - ldreqh r1, [r2, #0x0] - biceq r1, r1, #0x10 - streqh r1, [r2, #0x0] - bx lr - .balign 4 -_020C5B24: .word 0x04000004 - - arm_func_start GX_Init -GX_Init: ; 0x020C5B28 - stmdb sp!, {r4-r6,lr} - ldr r3, _020C5C68 ; =0x04000304 - ldr r0, _020C5C6C ; =0xFFFFFDF1 - ldrh r2, [r3, #0x0] - ldr r1, _020C5C70 ; =0x0000020E - orr r2, r2, #0x8000 - strh r2, [r3, #0x0] - ldrh r2, [r3, #0x0] - and r0, r2, r0 - orr r0, r0, r1 - strh r0, [r3, #0x0] - ldrh r0, [r3, #0x0] - orr r0, r0, #0x1 - strh r0, [r3, #0x0] - bl GX_InitGXState - ldr r5, _020C5C74 ; =0x021D33BC - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - bne _020C5B9C - mvn r4, #0x2 -_020C5B78: - bl OS_GetLockID - mov r6, r0 - cmp r6, r4 - bne _020C5B8C - bl OS_Terminate -_020C5B8C: - strh r6, [r5, #0x0] - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020C5B78 -_020C5B9C: - ldr r0, _020C5C78 ; =0x04000004 - mov r2, #0x0 - strh r2, [r0, #0x0] - mov r1, #0x4000000 - ldr r0, _020C5C7C ; =0x02106814 - str r2, [r1, #0x0] - ldr r0, [r0, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C5BF4 - ldr r1, _020C5C80 ; =0x04000008 - mov r3, #0x60 - bl MI_DmaFill32 - ldr r1, _020C5C84 ; =0x0400006C - mov r2, #0x0 - ldr r0, _020C5C7C ; =0x02106814 - strh r2, [r1, #0x0] - ldr r0, [r0, #0x0] - ldr r1, _020C5C88 ; =0x04001000 - mov r3, #0x70 - bl MI_DmaFill32 - b _020C5C1C -_020C5BF4: - ldr r1, _020C5C80 ; =0x04000008 - mov r0, r2 - mov r2, #0x60 - bl MIi_CpuClear32 - ldr r3, _020C5C84 ; =0x0400006C - mov r0, #0x0 - ldr r1, _020C5C88 ; =0x04001000 - mov r2, #0x70 - strh r0, [r3, #0x0] - bl MIi_CpuClear32 -_020C5C1C: - ldr r1, _020C5C8C ; =0x04000020 - mov r2, #0x100 - ldr r0, _020C5C90 ; =0x04000026 - strh r2, [r1, #0x0] - ldr r1, _020C5C94 ; =0x04000030 - strh r2, [r0, #0x0] - ldr r0, _020C5C98 ; =0x04000036 - strh r2, [r1, #0x0] - ldr r1, _020C5C9C ; =0x04001020 - strh r2, [r0, #0x0] - ldr r0, _020C5CA0 ; =0x04001026 - strh r2, [r1, #0x0] - ldr r1, _020C5CA4 ; =0x04001030 - strh r2, [r0, #0x0] - ldr r0, _020C5CA8 ; =0x04001036 - strh r2, [r1, #0x0] - strh r2, [r0, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C5C68: .word 0x04000304 -_020C5C6C: .word 0xFFFFFDF1 -_020C5C70: .word 0x0000020E -_020C5C74: .word 0x021D33BC -_020C5C78: .word 0x04000004 -_020C5C7C: .word 0x02106814 -_020C5C80: .word 0x04000008 -_020C5C84: .word 0x0400006C -_020C5C88: .word 0x04001000 -_020C5C8C: .word 0x04000020 -_020C5C90: .word 0x04000026 -_020C5C94: .word 0x04000030 -_020C5C98: .word 0x04000036 -_020C5C9C: .word 0x04001020 -_020C5CA0: .word 0x04001026 -_020C5CA4: .word 0x04001030 -_020C5CA8: .word 0x04001036 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index edb6f122..f3016f44 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -21,6 +21,8 @@ #define HW_REG_TEXIMAGE_PARAM 0x040004A8 #define HW_REG_PLTT_BASE 0x040004AC +#define HW_REG_POWCNT1 0x04000304 + #define HW_REG_GXFIFO 0x04000400 #define HW_REG_MTX_IDENTITY 0x04000454 #define HW_REG_MTX_POP 0x04000448 @@ -34,6 +36,7 @@ #define HW_REG_SHININESS 0x040004D0 +#define HW_REG_MASTER_BRIGHT 0x0400006C #define HW_REG_VRAMCNT_A 0x04000240 #define HW_REG_VRAMCNT_B 0x04000241 @@ -47,10 +50,20 @@ #define HW_REG_VRAMCNT_I 0x04000249 #define HW_REG_DISPCNT 0x04000000 +#define HW_REG_DISPSTAT 0x04000004 #define HW_REG_DISPCNT_2D 0x04001000 #define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG2PA_A 0x04000020 +#define HW_REG_BG2PD_A 0x04000026 +#define HW_REG_BG3PA_A 0x04000030 +#define HW_REG_BG3PD_A 0x04000036 +#define HW_REG_BG2PA_B 0x04001020 +#define HW_REG_BG2PD_B 0x04001026 +#define HW_REG_BG3PA_B 0x04001030 +#define HW_REG_BG3PD_B 0x04001036 + #define HW_REG_BG0CNT_A 0x04000008 #define HW_REG_BG1CNT_A 0x0400000A #define HW_REG_BG2CNT_A 0x0400000C @@ -136,7 +149,6 @@ u32 G3X_GetMtxStackLevelPJ(u32 *level); u32 G3X_GetBoxTestResult(u32 *result); void G3X_SetHOffset(u32 offset); - //GX_g3b void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); void G3B_PushMtx(struct DL *displaylist); @@ -278,6 +290,16 @@ void GX_LoadClearImageColor(void *src, u32 size); void GX_LoadClearImageDepth(void *src, u32 size); void GX_EndLoadClearImage(); +//GX +void GX_Init(); +u32 GX_HBlankIntr(u32 enable); +u32 GX_VBlankIntr(u32 enable); +void GX_DispOff(); +void GX_DispOn(); +void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); +void GXS_SetGraphicsMode(u32 mode); +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c new file mode 100644 index 00000000..6d979139 --- /dev/null +++ b/arm9/lib/src/GX.c @@ -0,0 +1,127 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u16 gUnk021D33BC; +extern u16 gUnk021D33C0; +extern u32 gUnk02106814; +extern u16 gUnk02106810; + +void GX_InitGXState(); + +void MI_DmaFill32(u32, void *, u32, u32); +void MIi_CpuClear32(u32, void *, u32); + +void GX_Init(){ + SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); + SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); + SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); + GX_InitGXState(); + u32 temp; + while (gUnk021D33BC == 0) + { + temp = OS_GetLockID(); + if (temp == -3) + { + OS_Terminate(); + } + gUnk021D33BC = temp; + } + SETREG16(HW_REG_DISPSTAT, 0x0); + SETREG32(HW_REG_DISPCNT, 0x0); + if (gUnk02106814 != -1) + { + MI_DmaFill32(gUnk02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); + SETREG16(HW_REG_MASTER_BRIGHT, 0x0); + MI_DmaFill32(gUnk02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); + } + else + { + MIi_CpuClear32(0x0, (void *)HW_REG_BG0CNT_A, 0x60); + SETREG16(HW_REG_MASTER_BRIGHT, 0x0); + MIi_CpuClear32(0x0, (void *)HW_REG_DISPCNT_2D, 0x70); + } + SETREG16(HW_REG_BG2PA_A, 0x100); + SETREG16(HW_REG_BG2PD_A, 0x100); + SETREG16(HW_REG_BG3PA_A, 0x100); + SETREG16(HW_REG_BG3PD_A, 0x100); + SETREG16(HW_REG_BG2PA_B, 0x100); + SETREG16(HW_REG_BG2PD_B, 0x100); + SETREG16(HW_REG_BG3PA_B, 0x100); + SETREG16(HW_REG_BG3PD_B, 0x100); +} + +u32 GX_HBlankIntr(u32 enable){ + u32 temp = READREG16(HW_REG_DISPSTAT) & 0x10; + if (enable) + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x10); + } + else + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x10); + } + return temp; +} + +u32 GX_VBlankIntr(u32 enable){ + u32 temp = READREG16(HW_REG_DISPSTAT) & 0x8; + if (enable) + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x8); + } + else + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x8); + } + return temp; +} + +void GX_DispOff(){ + u32 temp = READREG32(HW_REG_DISPCNT); + gUnk02106810 = 0x0; + gUnk021D33C0 = (temp & 0x30000) >> 0x10; + SETREG32(HW_REG_DISPCNT, temp & ~0x30000); +} + +void GX_DispOn(){ + gUnk02106810 = 0x1; + if (gUnk021D33C0) + { + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (gUnk021D33C0 << 0x10)); + + } + else + { + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x10000); + } +} + +void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ + u32 temp2 = READREG32(HW_REG_DISPCNT); + gUnk021D33C0 = mode1; + if (!gUnk02106810) + mode1 = 0; + SETREG32(HW_REG_DISPCNT, (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3)); + if (!gUnk021D33C0) + gUnk02106810 = 0x0; +} + +void GXS_SetGraphicsMode(u32 mode){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x7 | mode); +} + +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ + if (!brightness) + { + *dst = 0x0; + } + else if (brightness > 0) + { + *dst = 0x4000 | brightness; + } + else + { + *dst = 0x8000 | -brightness; + } +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 1705fd25..6735579a 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -7,6 +7,7 @@ SDK_IRQ_STACKSIZE = 0x00000400; // FX FX_AtanTable_ = 0x02103A38; // OS +gUnk02106810 = 0x02106810; gUnk02106814 = 0x02106814; OSi_IrqCallbackInfoIndex = 0x02106818; OSi_ConsoleTypeCache = 0x02106828; @@ -21,6 +22,7 @@ SDK_OVERLAY_DIGEST = 0x02106F84; SDK_OVERLAY_DIGEST_END = 0x02106F84; //GX gUnk021D33BC = 0x021D33BC; +gUnk021D33C0 = 0x021D33C0; gUnk021D33C4 = 0x021D33C4; gUnk021D33E0 = 0x021D33E0; -- cgit v1.2.3 From 14a5ca7ae49912305b1bcbaa180cfc9fdf8ff17a Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 03:29:32 +0200 Subject: Decompile GX_g2.s --- arm9/asm/GX_g2.s | 121 -------------------------------------------------- arm9/lib/include/gx.h | 7 +++ arm9/lib/src/GX_g2.c | 66 +++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 121 deletions(-) delete mode 100644 arm9/asm/GX_g2.s create mode 100644 arm9/lib/src/GX_g2.c diff --git a/arm9/asm/GX_g2.s b/arm9/asm/GX_g2.s deleted file mode 100644 index 7ed2f124..00000000 --- a/arm9/asm/GX_g2.s +++ /dev/null @@ -1,121 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G2x_ChangeBlendBrightness_ -G2x_ChangeBlendBrightness_: ; 0x020C7418 - cmp r1, #0x0 - ldrh r3, [r0, #0x0] - bge _020C7444 - and r2, r3, #0xc0 - cmp r2, #0x80 - biceq r2, r3, #0xc0 - orreq r2, r2, #0xc0 - streqh r2, [r0, #0x0] - rsb r1, r1, #0x0 - strh r1, [r0, #0x4] - bx lr -_020C7444: - and r2, r3, #0xc0 - cmp r2, #0xc0 - biceq r2, r3, #0xc0 - orreq r2, r2, #0x80 - streqh r2, [r0, #0x0] - strh r1, [r0, #0x4] - bx lr - - arm_func_start G2x_SetBlendBrightnessExt_ -G2x_SetBlendBrightnessExt_: ; 0x020C7460 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr lr, [sp, #0x8] - ldr r12, [sp, #0xc] - orr r3, r3, lr, lsl #0x8 - cmp r12, #0x0 - orrge r1, r1, #0x80 - strh r3, [r0, #0x2] - orrge r1, r1, r2, lsl #0x8 - strgeh r1, [r0, #0x0] - strgeh r12, [r0, #0x4] - addge sp, sp, #0x4 - ldmgeia sp!, {lr} - bxge lr - orr r1, r1, #0xc0 - orr r1, r1, r2, lsl #0x8 - strh r1, [r0, #0x0] - rsb r1, r12, #0x0 - strh r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G2x_SetBlendBrightness_ -G2x_SetBlendBrightness_: ; 0x020C74B8 - cmp r2, #0x0 - orrlt r1, r1, #0xc0 - strlth r1, [r0, #0x0] - rsblt r1, r2, #0x0 - strlth r1, [r0, #0x4] - orrge r1, r1, #0x80 - strgeh r1, [r0, #0x0] - strgeh r2, [r0, #0x4] - bx lr - - arm_func_start G2x_SetBlendAlpha_ -G2x_SetBlendAlpha_: ; 0x020C74DC - ldr r12, [sp, #0x0] - orr r1, r1, #0x40 - orr r2, r1, r2, lsl #0x8 - orr r1, r3, r12, lsl #0x8 - orr r1, r2, r1, lsl #0x10 - str r1, [r0, #0x0] - bx lr - - arm_func_start G2x_SetBGyAffine_ -G2x_SetBGyAffine_: ; 0x020C74F8 - stmdb sp!, {r4-r6,lr} - ldr r5, [r1, #0x0] - ldr r4, [r1, #0x4] - mov r12, r5, lsl #0xc - mov lr, r4, lsl #0xc - mov r5, r12, asr #0x10 - mov r4, lr, asr #0x10 - mov r12, r5, lsl #0x10 - mov lr, r4, lsl #0x10 - mov r5, r12, lsr #0x10 - mov r4, lr, lsr #0x10 - orr r4, r5, r4, lsl #0x10 - str r4, [r0, #0x0] - ldr r5, [r1, #0x8] - ldr r4, [r1, #0xc] - mov r12, r5, lsl #0xc - mov lr, r4, lsl #0xc - mov r5, r12, asr #0x10 - mov r4, lr, asr #0x10 - mov r12, r5, lsl #0x10 - mov lr, r4, lsl #0x10 - ldr r4, [sp, #0x14] - ldr r6, [sp, #0x10] - mov r12, r12, lsr #0x10 - mov r5, lr, lsr #0x10 - orr r5, r12, r5, lsl #0x10 - str r5, [r0, #0x4] - ldr r12, [r1, #0x4] - sub r5, r4, r3 - ldr r4, [r1, #0xc] - mul lr, r12, r5 - mul r5, r4, r5 - ldr r12, [r1, #0x0] - sub r6, r6, r2 - ldr r4, [r1, #0x8] - mla r1, r12, r6, lr - mla r5, r4, r6, r5 - add r1, r1, r2, lsl #0xc - add r2, r5, r3, lsl #0xc - mov r1, r1, asr #0x4 - str r1, [r0, #0x8] - mov r1, r2, asr #0x4 - str r1, [r0, #0xc] - ldmia sp!, {r4-r6,lr} - bx lr diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index f3016f44..a17132ed 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -300,6 +300,13 @@ void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); void GXS_SetGraphicsMode(u32 mode); void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); +//GX_g2 +void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); +void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); +void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c new file mode 100644 index 00000000..7441e302 --- /dev/null +++ b/arm9/lib/src/GX_g2.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ + fx32 temp0, temp1, temp2, temp3; + ptr[0] = ((u16)(fx16)(mtx->_[0] >> 4) | (u16)(fx16)(mtx->_[1] >> 4)<< 0x10); + ptr[1] = ((u16)(fx16)(mtx->_[2] >> 4) | (u16)(fx16)(mtx->_[3] >> 4)<< 0x10); + temp0 = c - a; + temp1 = d - b; + temp2 = mtx->_[0] * temp0 + mtx->_[1] * temp1 + (a << 0xC); + temp3 = mtx->_[2] * temp0 + mtx->_[3] * temp1 + (b << 0xC); + ptr[2] = temp2 >> 4; + ptr[3] = temp3 >> 4; +} + +void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ + *ptr = ((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10); +} + +void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ + if (brightness < 0) + { + ptr[0] = a | 0xC0; + ptr[2] = -brightness; + } + else + { + ptr[0] = a | 0x80; + ptr[2] = brightness; + } +} + +void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ + ptr[1] = c | (d << 0x8); + if (brightness < 0) + { + ptr[0] = 0xC0 | a | (b << 0x8); + ptr[2] = -brightness; + } + else + { + ptr[0] = 0x80 | a | (b << 0x8); + ptr[2] = brightness; + } +} + +void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ + u32 temp = *ptr; + if (brightness < 0) + { + if ((temp & 0xC0) == 0x80) + { + ptr[0] = temp & ~0xC0 | 0xC0; + } + ptr[2] = -brightness; + } + else + { + if ((temp & 0xC0) == 0xC0) + { + ptr[0] = temp & ~0xC0 | 0x80; + } + ptr[2] = brightness; + } +} -- cgit v1.2.3 From 7e9089849989d5e930eb5b5f7cecfd8d2c6c379c Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 03:47:36 +0200 Subject: Decompile GX_g3imm.s and GX_state.s --- arm9/asm/GX_g3imm.s | 37 ------------------------------------- arm9/asm/GX_state.s | 40 ---------------------------------------- arm9/lib/include/gx.h | 8 +++++++- arm9/lib/src/GX_g3imm.c | 18 ++++++++++++++++++ arm9/lib/src/GX_state.c | 26 ++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 78 deletions(-) delete mode 100644 arm9/asm/GX_g3imm.s delete mode 100644 arm9/asm/GX_state.s create mode 100644 arm9/lib/src/GX_g3imm.c create mode 100644 arm9/lib/src/GX_state.c diff --git a/arm9/asm/GX_g3imm.s b/arm9/asm/GX_g3imm.s deleted file mode 100644 index 34ba9328..00000000 --- a/arm9/asm/GX_g3imm.s +++ /dev/null @@ -1,37 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3_MultMtx33 -G3_MultMtx33: ; 0x020C791C - ldr r1, _020C7930 ; =0x04000400 - mov r2, #0x1a - ldr ip, _020C7934 ; =MI_Copy36B - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C7930: .word 0x04000400 -_020C7934: .word MI_Copy36B - - arm_func_start G3_MultMtx43 -G3_MultMtx43: - ldr r1, _020C794C ; =0x04000400 - mov r2, #0x19 - ldr ip, _020C7950 ; =GX_SendFifo48B - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C794C: .word 0x04000400 -_020C7950: .word GX_SendFifo48B - - arm_func_start G3_LoadMtx43 -G3_LoadMtx43: ; 0x020C7954 - ldr r1, _020C7968 ; =0x04000400 - mov r2, #0x17 - ldr ip, _020C796C ; =GX_SendFifo48B - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C7968: .word 0x04000400 -_020C796C: .word GX_SendFifo48B diff --git a/arm9/asm/GX_state.s b/arm9/asm/GX_state.s deleted file mode 100644 index 42089a09..00000000 --- a/arm9/asm/GX_state.s +++ /dev/null @@ -1,40 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_InitGXState -GX_InitGXState: ; 0x020C5CAC - ldr r0, _020C5D14 ; =0x021D33C4 - mov r3, #0x0 - ldr r2, _020C5D18 ; =0x04000240 - strh r3, [r0, #0x0] - strh r3, [r0, #0x2] - strh r3, [r0, #0x4] - strh r3, [r0, #0x6] - strh r3, [r0, #0x8] - strh r3, [r0, #0xa] - strh r3, [r0, #0xc] - strh r3, [r0, #0xe] - strh r3, [r0, #0x10] - strh r3, [r0, #0x12] - strh r3, [r0, #0x14] - strh r3, [r0, #0x16] - strh r3, [r0, #0x18] - ldr r1, _020C5D1C ; =0x04000244 - str r3, [r2, #0x0] - ldr r0, _020C5D20 ; =0x04000245 - strb r3, [r1, #0x0] - ldr r1, _020C5D24 ; =0x04000246 - strb r3, [r0, #0x0] - ldr r0, _020C5D28 ; =0x04000248 - strb r3, [r1, #0x0] - strh r3, [r0, #0x0] - bx lr - .balign 4 -_020C5D14: .word 0x021D33C4 -_020C5D18: .word 0x04000240 -_020C5D1C: .word 0x04000244 -_020C5D20: .word 0x04000245 -_020C5D24: .word 0x04000246 -_020C5D28: .word 0x04000248 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index a17132ed..c542f560 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -307,6 +307,12 @@ void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); -//GXi_NopClearFifo128_ probably asm +//GX_state +void GX_InitGXState(); + +//GX_g3imm +void G3_LoadMtx43(struct Mtx43 *mtx); +void G3_MultMtx43(struct Mtx43 *mtx); +void G3_MultMtx33(struct Mtx33 *mtx); #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c new file mode 100644 index 00000000..f41b5cbf --- /dev/null +++ b/arm9/lib/src/GX_g3imm.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void G3_LoadMtx43(struct Mtx43 *mtx){ + SETREG32(HW_REG_GXFIFO, 0x17); + GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); +} + +void G3_MultMtx43(struct Mtx43 *mtx){ + SETREG32(HW_REG_GXFIFO, 0x19); + GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); +} + +void G3_MultMtx33(struct Mtx33 *mtx){ + SETREG32(HW_REG_GXFIFO, 0x1A); + MI_Copy36B(mtx, (void *)HW_REG_GXFIFO); +} diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c new file mode 100644 index 00000000..52d3c6f5 --- /dev/null +++ b/arm9/lib/src/GX_state.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern struct VRAM_banks gUnk021D33C4; + +void GX_InitGXState(){ + gUnk021D33C4.var00 = 0x0; + gUnk021D33C4.var02 = 0x0; + gUnk021D33C4.var04 = 0x0; + gUnk021D33C4.var06 = 0x0; + gUnk021D33C4.var08 = 0x0; + gUnk021D33C4.var0A = 0x0; + gUnk021D33C4.var0C = 0x0; + gUnk021D33C4.var0E = 0x0; + gUnk021D33C4.var10 = 0x0; + gUnk021D33C4.var12 = 0x0; + gUnk021D33C4.var14 = 0x0; + gUnk021D33C4.var16 = 0x0; + gUnk021D33C4.var18 = 0x0; + SETREG32(HW_REG_VRAMCNT_A, 0x0); + SETREG8(HW_REG_VRAMCNT_E, 0x0); + SETREG8(HW_REG_VRAMCNT_F, 0x0); + SETREG8(HW_REG_VRAMCNT_G, 0x0); + SETREG16(HW_REG_VRAMCNT_H, 0x0); +} -- cgit v1.2.3 From 08e4b4f6657bac9d361a9f6948ae6d2bfe50eebf Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 04:03:35 +0200 Subject: Cleanup --- arm9/lib/include/gx.h | 60 +++++++++++++++++++++++++++-- arm9/lib/src/GX.c | 5 --- arm9/lib/src/GX_g3_util.c | 6 --- arm9/lib/src/GX_g3b.c | 2 - arm9/lib/src/GX_g3x.c | 7 ---- arm9/lib/src/GX_load2d.c | 96 ++++++++++++++--------------------------------- arm9/lib/src/GX_load3d.c | 45 +++------------------- arm9/lib/src/GX_vramcnt.c | 2 - 8 files changed, 91 insertions(+), 132 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index c542f560..c4be4deb 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -3,10 +3,35 @@ #include "fx.h" +//temporary while other files aren't decompiled +void MIi_CpuCopy16(void *, void *, u32); +void GXi_NopClearFifo128_(void *); +void MI_Copy16B(void *, void *); +void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); +void MI_DmaFill32(u32, void *, u32, u32); +void MIi_CpuClear32(u32, void *, u32); +void MI_Copy64B(void *src, void *dst); +void MI_WaitDma(u32); +void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *); +void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size); +void MIi_CpuCopy16(void *src, void *dst, u32 size); +void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size); +void MIi_CpuCopy32(void *src, void *dst, u32 size); +void OSi_UnlockVram(u16, u16); +void MIi_CpuClear32(u32, void *, u32); + //Todos before PR //TODO: Add defines for GX commands, add structs/unions for HW registers //TODO: Add ARM_FUNC attributes +#define HW_REG_DIV_NUMER 0x04000290 +#define HW_REG_DIV_DENOM 0x04000298 + +#define HW_REG_MTX_MODE 0x04000440 +#define HW_REG_MTX_LOAD_4x4 0x04000458 +#define HW_REG_MTX_LOAD_4x3 0x0400045C +#define HW_REG_MTX_MULT_3x3 0x04000468 + #define HW_REG_END_VTXS 0x04000504 #define HW_REG_GXSTAT 0x04000600 #define HW_REG_DISP3DCNT 0x04000060 @@ -88,9 +113,38 @@ #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) -//TODO: add SDK signatures and symbols -//TODO: add arm function attributes - +static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ + if (var != -1 && size > 0x1C) + { + MI_DmaCopy16(var, src, dst, size); + } + else + { + MIi_CpuCopy16(src, dst, size); + } +} + +static inline void _GX_Load_32(u32 var, void *src, void *dst, u32 size){ + if (var != -1 && size > 0x30) + { + MI_DmaCopy32(var, src, dst, size); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, void *func, void *ptr){ + if (var != -1) + { + MI_DmaCopy32Async(var, src, dst, size, func, ptr); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} struct DL { diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 6d979139..9823e8ba 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -7,11 +7,6 @@ extern u16 gUnk021D33C0; extern u32 gUnk02106814; extern u16 gUnk02106810; -void GX_InitGXState(); - -void MI_DmaFill32(u32, void *, u32, u32); -void MIi_CpuClear32(u32, void *, u32); - void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c index 049b9366..1cd956ad 100644 --- a/arm9/lib/src/GX_g3_util.c +++ b/arm9/lib/src/GX_g3_util.c @@ -2,13 +2,7 @@ #include "main.h" #include "gx.h" -#define HW_REG_DIV_NUMER 0x04000290 -#define HW_REG_DIV_DENOM 0x04000298 -#define HW_REG_MTX_MODE 0x04000440 -#define HW_REG_MTX_LOAD_4x4 0x04000458 -#define HW_REG_MTX_LOAD_4x3 0x0400045C -#define HW_REG_MTX_MULT_3x3 0x04000468 void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ fx32 fovcot, temp1, temp2; diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c index 1e25adb5..0efe8518 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -3,8 +3,6 @@ #include "gx.h" -void MI_Copy64B(void *src, void *dst); - void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ *(u32 *)displaylist->var00 = 0x16; MI_Copy64B(mtx, displaylist->var04); diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index f9c2adb7..70c4f3fe 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -3,13 +3,6 @@ #include "gx.h" extern u32 gUnk02106814; -void MI_Copy64B(void *, void *); -void MIi_CpuCopy16(void *, void *, u32); -void GXi_NopClearFifo128_(void *); -void MI_Copy16B(void *, void *); -void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); -void MI_DmaFill32(u32, void *, u32, u32); -void MIi_CpuClear32(u32, void *, u32); asm void GXi_NopClearFifo128_(void *reg){ mov r1, #0x0 diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index b0af0e8c..9ebf24cc 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -12,46 +12,6 @@ extern s32 gUnk021D33E8; extern u32 gUnk021D33E4; extern s32 gUnk021D33E0; -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); - - -static inline void _GX_Load_16(void *src, u32 offset, u32 size, u32 base){ - if (gUnk02106814 != -1 && size > 0x1C) - { - MI_DmaCopy16(gUnk02106814, src, (void *)(base + offset), size); - } - else - { - MIi_CpuCopy16(src, (void *)(base + offset), size); - } -} - -static inline void _GX_Load_32(void *src, u32 offset, u32 size, u32 base){ - if (gUnk02106814 != -1 && size > 0x30) - { - MI_DmaCopy32(gUnk02106814, src, (void *)(base + offset), size); - } - else - { - MIi_CpuCopy32(src, (void *)(base + offset), size); - } -} - -static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ - if (gUnk02106814 != -1) - { - MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); - } - else - { - MIi_CpuCopy32(src, dst, size); - } -} static inline void *_GX_OBJ_PTR(){ return (void *)0x6400000; @@ -61,117 +21,117 @@ static inline void *_GXS_OBJ_PTR(){ } void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000000); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000000 + offset), size); } void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000400); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000400 + offset), size); } void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000200); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000200 + offset), size); } void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000600); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000600 + offset), size); } void GX_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(src, offset, size, 0x7000000); + _GX_Load_32(gUnk02106814, src, (void *)(0x7000000 + offset), size); } void GXS_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(src, offset, size, 0x7000400); + _GX_Load_32(gUnk02106814, src, (void *)(0x7000400 + offset), size); } void GX_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GX_OBJ_PTR(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GXS_OBJ_PTR(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_BeginLoadBGExtPltt(){ @@ -197,7 +157,7 @@ void GX_BeginLoadBGExtPltt(){ } void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); } void GX_EndLoadBGExtPltt(){ @@ -225,7 +185,7 @@ void GX_BeginLoadOBJExtPltt(){ } void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); } void GX_EndLoadOBJExtPltt(){ @@ -241,7 +201,7 @@ void GXS_BeginLoadBGExtPltt(){ } void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(0x06898000 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } void GXS_EndLoadBGExtPltt(){ @@ -256,7 +216,7 @@ void GXS_BeginLoadOBJExtPltt(){ } void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(0x068A0000 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } void GXS_EndLoadOBJExtPltt(){ diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index 9ae7427a..bad119fd 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -21,39 +21,6 @@ extern u16 gUnk02103B3C[]; extern s32 gUnk021D33FC; extern u32 gUnk021D340C; -static inline void _GX_Load_16(void *src, void *dst, u32 size){ - if (gUnk02106814 != -1 && size > 0x1C) - { - MI_DmaCopy16(gUnk02106814, src, dst, size); - } - else - { - MIi_CpuCopy16(src, dst, size); - } -} - -static inline void _GX_Load_32(void *src, void *dst, u32 size){ - if (gUnk02106814 != -1 && size > 0x30) - { - MI_DmaCopy32(gUnk02106814, src, dst, size); - } - else - { - MIi_CpuCopy32(src, dst, size); - } -} - -static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ - if (gUnk02106814 != -1) - { - MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); - } - else - { - MIi_CpuCopy32(src, dst, size); - } -} - void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); gUnk021D3410 = temp; @@ -83,12 +50,12 @@ void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp2 = (void *)gUnk021D3414; u32 temp1 = gUnk021D3418 - offset; temp = (void *)(gUnk021D3400 + offset); - _GX_Load_32(src, temp, temp1); - _GX_Load_32_Async((void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + _GX_Load_32(gUnk02106814, src, temp, temp1); + _GX_Load_32_Async(gUnk02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); return; } } - _GX_Load_32_Async(src, temp, size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, temp, size, NULL, NULL); } void GX_EndLoadTex(){ @@ -108,7 +75,7 @@ void GX_BeginLoadTexPltt(){ } void GX_LoadTexPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); } void GX_EndLoadTexPltt(){ @@ -141,11 +108,11 @@ void GX_BeginLoadClearImage(){ } void GX_LoadClearImageColor(void *src, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D340C), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C), size, NULL, NULL); } void GX_LoadClearImageDepth(void *src, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); } void GX_EndLoadClearImage(){ diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index 52be412c..d0ac5f7a 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -5,8 +5,6 @@ extern u16 gUnk021D33BC; extern struct VRAM_banks gUnk021D33C4; -void OSi_UnlockVram(u16, u16); - void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) SETREG8(HW_REG_VRAMCNT_A, 0x80); -- cgit v1.2.3 From a92d77224c8ec645752a56aa35cc8a8457cd4cd3 Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 04:14:48 +0200 Subject: Add ARM_FUNC to GX --- arm9/lib/src/GX.c | 16 ++++---- arm9/lib/src/GX_bgcnt.c | 32 +++++++-------- arm9/lib/src/GX_g2.c | 10 ++--- arm9/lib/src/GX_g3.c | 4 +- arm9/lib/src/GX_g3_util.c | 13 +++--- arm9/lib/src/GX_g3b.c | 28 ++++++------- arm9/lib/src/GX_g3imm.c | 6 +-- arm9/lib/src/GX_g3x.c | 34 ++++++++-------- arm9/lib/src/GX_load2d.c | 72 ++++++++++++++++---------------- arm9/lib/src/GX_load3d.c | 20 ++++----- arm9/lib/src/GX_state.c | 2 +- arm9/lib/src/GX_vramcnt.c | 102 +++++++++++++++++++++++----------------------- 12 files changed, 169 insertions(+), 170 deletions(-) diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 9823e8ba..bae16fca 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -7,7 +7,7 @@ extern u16 gUnk021D33C0; extern u32 gUnk02106814; extern u16 gUnk02106810; -void GX_Init(){ +ARM_FUNC void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); @@ -46,7 +46,7 @@ void GX_Init(){ SETREG16(HW_REG_BG3PD_B, 0x100); } -u32 GX_HBlankIntr(u32 enable){ +ARM_FUNC u32 GX_HBlankIntr(u32 enable){ u32 temp = READREG16(HW_REG_DISPSTAT) & 0x10; if (enable) { @@ -59,7 +59,7 @@ u32 GX_HBlankIntr(u32 enable){ return temp; } -u32 GX_VBlankIntr(u32 enable){ +ARM_FUNC u32 GX_VBlankIntr(u32 enable){ u32 temp = READREG16(HW_REG_DISPSTAT) & 0x8; if (enable) { @@ -72,14 +72,14 @@ u32 GX_VBlankIntr(u32 enable){ return temp; } -void GX_DispOff(){ +ARM_FUNC void GX_DispOff(){ u32 temp = READREG32(HW_REG_DISPCNT); gUnk02106810 = 0x0; gUnk021D33C0 = (temp & 0x30000) >> 0x10; SETREG32(HW_REG_DISPCNT, temp & ~0x30000); } -void GX_DispOn(){ +ARM_FUNC void GX_DispOn(){ gUnk02106810 = 0x1; if (gUnk021D33C0) { @@ -92,7 +92,7 @@ void GX_DispOn(){ } } -void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ +ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ u32 temp2 = READREG32(HW_REG_DISPCNT); gUnk021D33C0 = mode1; if (!gUnk02106810) @@ -102,11 +102,11 @@ void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ gUnk02106810 = 0x0; } -void GXS_SetGraphicsMode(u32 mode){ +ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x7 | mode); } -void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ +ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ if (!brightness) { *dst = 0x0; diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c index 918f4d32..1eeffab6 100644 --- a/arm9/lib/src/GX_bgcnt.c +++ b/arm9/lib/src/GX_bgcnt.c @@ -2,25 +2,25 @@ #include "main.h" #include "gx.h" -void *G2_GetBG0ScrPtr(){ +ARM_FUNC void *G2_GetBG0ScrPtr(){ u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x1F00) >> 0x8) << 0xB); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); } -void *G2S_GetBG0ScrPtr(){ +ARM_FUNC void *G2S_GetBG0ScrPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x1F00) >> 0x8) << 0xB)); } -void *G2_GetBG1ScrPtr(){ +ARM_FUNC void *G2_GetBG1ScrPtr(){ u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x1F00) >> 0x8) << 0xB); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); } -void *G2S_GetBG1ScrPtr(){ +ARM_FUNC void *G2S_GetBG1ScrPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x1F00) >> 0x8) << 0xB)); } -void *G2_GetBG2ScrPtr(){ +ARM_FUNC void *G2_GetBG2ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp3 = READREG16(HW_REG_BG2CNT_A); u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); @@ -45,7 +45,7 @@ void *G2_GetBG2ScrPtr(){ } } -void *G2S_GetBG2ScrPtr(){ +ARM_FUNC void *G2S_GetBG2ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp3 = READREG16(HW_REG_BG2CNT_B); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); @@ -69,7 +69,7 @@ void *G2S_GetBG2ScrPtr(){ } } -void *G2_GetBG3ScrPtr(){ +ARM_FUNC void *G2_GetBG3ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp3 = READREG16(HW_REG_BG3CNT_A); u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); @@ -94,7 +94,7 @@ void *G2_GetBG3ScrPtr(){ } } -void *G2S_GetBG3ScrPtr(){ +ARM_FUNC void *G2S_GetBG3ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp3 = READREG16(HW_REG_BG3CNT_B); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); @@ -118,25 +118,25 @@ void *G2S_GetBG3ScrPtr(){ } } -void *G2_GetBG0CharPtr(){ +ARM_FUNC void *G2_GetBG0CharPtr(){ u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x3C) >> 0x2) << 0xE); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); } -void *G2S_GetBG0CharPtr(){ +ARM_FUNC void *G2S_GetBG0CharPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x3C) >> 0x2) << 0xE)); } -void *G2_GetBG1CharPtr(){ +ARM_FUNC void *G2_GetBG1CharPtr(){ u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x3C) >> 0x2) << 0xE); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); } -void *G2S_GetBG1CharPtr(){ +ARM_FUNC void *G2S_GetBG1CharPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x3C) >> 0x2) << 0xE)); } -void *G2_GetBG2CharPtr(){ +ARM_FUNC void *G2_GetBG2CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp = READREG16(HW_REG_BG2CNT_A); if (temp1 < 5 || !(temp & 0x80)) @@ -151,7 +151,7 @@ void *G2_GetBG2CharPtr(){ } } -void *G2S_GetBG2CharPtr(){ +ARM_FUNC void *G2S_GetBG2CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp = READREG16(HW_REG_BG2CNT_B); if (temp1 < 5 || !(temp & 0x80)) @@ -165,7 +165,7 @@ void *G2S_GetBG2CharPtr(){ } } -void *G2_GetBG3CharPtr(){ +ARM_FUNC void *G2_GetBG3CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp = READREG16(HW_REG_BG3CNT_A); if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) @@ -180,7 +180,7 @@ void *G2_GetBG3CharPtr(){ } } -void *G2S_GetBG3CharPtr(){ +ARM_FUNC void *G2S_GetBG3CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp = READREG16(HW_REG_BG3CNT_B); if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c index 7441e302..5bced1ef 100644 --- a/arm9/lib/src/GX_g2.c +++ b/arm9/lib/src/GX_g2.c @@ -2,7 +2,7 @@ #include "main.h" #include "gx.h" -void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ +ARM_FUNC void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ fx32 temp0, temp1, temp2, temp3; ptr[0] = ((u16)(fx16)(mtx->_[0] >> 4) | (u16)(fx16)(mtx->_[1] >> 4)<< 0x10); ptr[1] = ((u16)(fx16)(mtx->_[2] >> 4) | (u16)(fx16)(mtx->_[3] >> 4)<< 0x10); @@ -14,11 +14,11 @@ void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 ptr[3] = temp3 >> 4; } -void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ +ARM_FUNC void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ *ptr = ((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10); } -void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ +ARM_FUNC void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ if (brightness < 0) { ptr[0] = a | 0xC0; @@ -31,7 +31,7 @@ void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ } } -void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ +ARM_FUNC void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ ptr[1] = c | (d << 0x8); if (brightness < 0) { @@ -45,7 +45,7 @@ void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 b } } -void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ +ARM_FUNC void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ u32 temp = *ptr; if (brightness < 0) { diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c index 66e34dc7..eb01453d 100644 --- a/arm9/lib/src/GX_g3.c +++ b/arm9/lib/src/GX_g3.c @@ -3,7 +3,7 @@ #include "gx.h" -void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ +ARM_FUNC void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ displaylist->var0C = r2; displaylist->var08 = r1; displaylist->var00 = r1; @@ -11,7 +11,7 @@ void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ displaylist->var10 = 0x0; } -s32 G3_EndMakeDL(struct DL *displaylist){ +ARM_FUNC s32 G3_EndMakeDL(struct DL *displaylist){ if (displaylist->var08 == displaylist->var00) return 0; //pads the buffer with 0 to 4byte alignment if needed diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c index 1cd956ad..75e18589 100644 --- a/arm9/lib/src/GX_g3_util.c +++ b/arm9/lib/src/GX_g3_util.c @@ -3,8 +3,7 @@ #include "gx.h" - -void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ +ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ fx32 fovcot, temp1, temp2; fx64c temp0; vu32 *reg_ptr; @@ -76,7 +75,7 @@ void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far } } -void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ +ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ fx64c temp1, temp2, temp3; fx32 temp0, temp4, temp5; vu32 *reg_ptr; @@ -167,7 +166,7 @@ void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 f } } -void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ +ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ struct Vecx32 temp, temp1, temp2; fx32 c1, c2, c3; vu32 *reg_ptr; @@ -218,7 +217,7 @@ void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, } } -void G3_RotX(fx32 sinphi, fx32 cosphi){ +ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; *reg_ptr = 0x1000; @@ -232,7 +231,7 @@ void G3_RotX(fx32 sinphi, fx32 cosphi){ *reg_ptr = cosphi; } -void G3_RotY(fx32 sinphi, fx32 cosphi){ +ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; *reg_ptr = cosphi; @@ -246,7 +245,7 @@ void G3_RotY(fx32 sinphi, fx32 cosphi){ *reg_ptr = cosphi; } -void G3_RotZ(fx32 sinphi, fx32 cosphi){ +ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; *reg_ptr = cosphi; diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c index 0efe8518..50281ec0 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -3,32 +3,32 @@ #include "gx.h" -void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ +ARM_FUNC void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ *(u32 *)displaylist->var00 = 0x16; MI_Copy64B(mtx, displaylist->var04); } -void G3B_PushMtx(struct DL *displaylist){ +ARM_FUNC void G3B_PushMtx(struct DL *displaylist){ *(u32 *)displaylist->var00 = 0x11; displaylist->var00 = (u8 *)displaylist->var04; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_PopMtx(struct DL *displaylist, void *mtx){ +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; } -void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ +ARM_FUNC void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ G3BS_LoadMtx44(displaylist, mtx); displaylist->var00 = (u8 *)displaylist->var04 + sizeof(struct Mtx44); displaylist->var04 = (u32 *)displaylist->var00 + 1; } //color format is RGB555, stored in the lower bits -void G3B_Color(struct DL * displaylist, u32 vtx_col){ +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; @@ -40,14 +40,14 @@ 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 */ -void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z){ +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; } -void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){ +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; @@ -56,14 +56,14 @@ void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){ } //TODO: name arguments -void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ +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; } -void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ +ARM_FUNC void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ *(u32 *)displaylist->var00 = 0x30; u32 replace_vtx_color_with_diffuse; if (replace) @@ -75,7 +75,7 @@ void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambie displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ +ARM_FUNC void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ *(u32 *)displaylist->var00 = 0x31; u32 enable_shininess_table; if (shiny_table) @@ -92,28 +92,28 @@ 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 */ -void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ +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; } -void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col){ +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; } -void G3B_Begin(struct DL * displaylist, u32 type){ +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; } -void G3B_End(struct DL * displaylist){ +ARM_FUNC void G3B_End(struct DL * displaylist){ *(u32 *)displaylist->var00 = 0x41; displaylist->var00 = (u8 *)displaylist->var04; displaylist->var04 = (u32 *)displaylist->var00 + 1; diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c index f41b5cbf..f11e2927 100644 --- a/arm9/lib/src/GX_g3imm.c +++ b/arm9/lib/src/GX_g3imm.c @@ -2,17 +2,17 @@ #include "main.h" #include "gx.h" -void G3_LoadMtx43(struct Mtx43 *mtx){ +ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ SETREG32(HW_REG_GXFIFO, 0x17); GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); } -void G3_MultMtx43(struct Mtx43 *mtx){ +ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){ SETREG32(HW_REG_GXFIFO, 0x19); GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); } -void G3_MultMtx33(struct Mtx33 *mtx){ +ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){ SETREG32(HW_REG_GXFIFO, 0x1A); MI_Copy36B(mtx, (void *)HW_REG_GXFIFO); } diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index 70c4f3fe..7ced9de6 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -4,7 +4,7 @@ extern u32 gUnk02106814; -asm void GXi_NopClearFifo128_(void *reg){ +ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ mov r1, #0x0 mov r2, #0x0 mov r3, #0x0 @@ -44,7 +44,7 @@ asm void GXi_NopClearFifo128_(void *reg){ bx lr } -void G3X_Init(){ +ARM_FUNC void G3X_Init(){ G3X_ClearFifo(); SETREG32(HW_REG_END_VTXS, 0x0); while (READREG32(HW_REG_GXSTAT) & 0x8000000); //wait for geometry engine to not be busy @@ -71,7 +71,7 @@ void G3X_Init(){ SETREG32(HW_REG_PLTT_BASE, 0x0); } -void G3X_ResetMtxStack(){ +ARM_FUNC void G3X_ResetMtxStack(){ while (READREG32(HW_REG_GXSTAT) & 0x8000000); SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); @@ -82,12 +82,12 @@ void G3X_ResetMtxStack(){ SETREG32(HW_REG_PLTT_BASE, 0x0); } -void G3X_ClearFifo(){ +ARM_FUNC void G3X_ClearFifo(){ GXi_NopClearFifo128_((void *)HW_REG_GXFIFO); while (READREG32(HW_REG_GXSTAT) & 0x8000000); } -void G3X_InitMtxStack(){ +ARM_FUNC void G3X_InitMtxStack(){ u32 PV_level, PJ_level; SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); while (G3X_GetMtxStackLevelPV(&PV_level)); @@ -105,7 +105,7 @@ void G3X_InitMtxStack(){ SETREG32(HW_REG_MTX_IDENTITY, 0x0); } -void G3X_ResetMtxStack_2(){ +ARM_FUNC void G3X_ResetMtxStack_2(){ u32 PV_level, PJ_level; SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); while (G3X_GetMtxStackLevelPV(&PV_level)); @@ -124,7 +124,7 @@ void G3X_ResetMtxStack_2(){ } -void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ +ARM_FUNC void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ if (enable) { SETREG16(HW_REG_FOG_OFFSET, offset); @@ -137,7 +137,7 @@ void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ } } -u32 G3X_GetClipMtx(struct Mtx44 *dst){ +ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){ if (READREG32(HW_REG_GXSTAT) & 0x8000000) { return -1; @@ -149,7 +149,7 @@ u32 G3X_GetClipMtx(struct Mtx44 *dst){ } } -u32 G3X_GetVectorMtx(struct Mtx33 *dst){ +ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){ if (READREG32(HW_REG_GXSTAT) & 0x8000000) { return -1; @@ -161,15 +161,15 @@ u32 G3X_GetVectorMtx(struct Mtx33 *dst){ } } -void G3X_SetEdgeColorTable(void *tbl_ptr){ +ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ MIi_CpuCopy16(tbl_ptr, (void *)HW_REG_EDGE_COLOR, 0x10); } -void G3X_SetFogTable(void *tbl_ptr){ +ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ MI_Copy16B(tbl_ptr, (void *)HW_REG_FOG_TABLE); } -void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ +ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); if (enable_fog) temp |= 0x8000; @@ -177,7 +177,7 @@ void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable SETREG16(HW_REG_CLEAR_DEPTH, depth); } -void G3X_InitTable(){ +ARM_FUNC void G3X_InitTable(){ if (gUnk02106814 != -1) { MI_DmaFill32Async(gUnk02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); @@ -194,7 +194,7 @@ void G3X_InitTable(){ } } -u32 G3X_GetMtxStackLevelPV(u32 *level){ +ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){ if (READREG32(HW_REG_GXSTAT) & 0x4000) { return -1; @@ -206,7 +206,7 @@ u32 G3X_GetMtxStackLevelPV(u32 *level){ } } -u32 G3X_GetMtxStackLevelPJ(u32 *level){ +ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){ if (READREG32(HW_REG_GXSTAT) & 0x4000) { return -1; @@ -218,7 +218,7 @@ u32 G3X_GetMtxStackLevelPJ(u32 *level){ } } -u32 G3X_GetBoxTestResult(u32 *result){ +ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){ if (READREG32(HW_REG_GXSTAT) & 0x1) { return -1; @@ -230,6 +230,6 @@ u32 G3X_GetBoxTestResult(u32 *result){ } } -void G3X_SetHOffset(u32 offset){ +ARM_FUNC void G3X_SetHOffset(u32 offset){ SETREG32(HW_REG_BG0HOFS, offset); } diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 9ebf24cc..972babad 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -20,121 +20,121 @@ static inline void *_GXS_OBJ_PTR(){ return (void *)0x6600000; } -void GX_LoadBGPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000000 + offset), size); } -void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000400 + offset), size); } -void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000200 + offset), size); } -void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000600 + offset), size); } -void GX_LoadOAM(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ _GX_Load_32(gUnk02106814, src, (void *)(0x7000000 + offset), size); } -void GXS_LoadOAM(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ _GX_Load_32(gUnk02106814, src, (void *)(0x7000400 + offset), size); } -void GX_LoadOBJ(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GX_OBJ_PTR(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadOBJ(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GXS_OBJ_PTR(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG0Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG1Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG2Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG3Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_BeginLoadBGExtPltt(){ +ARM_FUNC void GX_BeginLoadBGExtPltt(){ gUnk021D33F4 = GX_ResetBankForBGExtPltt(); switch (gUnk021D33F4) { @@ -156,11 +156,11 @@ void GX_BeginLoadBGExtPltt(){ } } -void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); } -void GX_EndLoadBGExtPltt(){ +ARM_FUNC void GX_EndLoadBGExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForBGExtPltt(gUnk021D33F4); @@ -169,7 +169,7 @@ void GX_EndLoadBGExtPltt(){ gUnk021D33EC = 0x0; } -void GX_BeginLoadOBJExtPltt(){ +ARM_FUNC void GX_BeginLoadOBJExtPltt(){ gUnk021D33E8 = GX_ResetBankForOBJExtPltt(); switch (gUnk021D33E8) { @@ -184,11 +184,11 @@ void GX_BeginLoadOBJExtPltt(){ } } -void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); } -void GX_EndLoadOBJExtPltt(){ +ARM_FUNC void GX_EndLoadOBJExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForOBJExtPltt(gUnk021D33E8); @@ -196,30 +196,30 @@ void GX_EndLoadOBJExtPltt(){ gUnk021D33E4 = 0x0; } -void GXS_BeginLoadBGExtPltt(){ +ARM_FUNC void GXS_BeginLoadBGExtPltt(){ gUnk021D33E0 = FUN_020C6034(); } -void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } -void GXS_EndLoadBGExtPltt(){ +ARM_FUNC void GXS_EndLoadBGExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForSubBGExtPltt(gUnk021D33E0); gUnk021D33E0 = 0x0; } -void GXS_BeginLoadOBJExtPltt(){ +ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ gUnk021D33F8 = GX_ResetBankForSubOBJ(); } -void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } -void GXS_EndLoadOBJExtPltt(){ +ARM_FUNC void GXS_EndLoadOBJExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForSubOBJExtPltt(gUnk021D33F8); diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index bad119fd..ee7502db 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -21,7 +21,7 @@ extern u16 gUnk02103B3C[]; extern s32 gUnk021D33FC; extern u32 gUnk021D340C; -void GX_BeginLoadTex(){ +ARM_FUNC void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); gUnk021D3410 = temp; gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC; @@ -29,7 +29,7 @@ void GX_BeginLoadTex(){ gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC; } -void GX_LoadTex(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp; if (!gUnk021D3414) { @@ -58,7 +58,7 @@ void GX_LoadTex(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, temp, size, NULL, NULL); } -void GX_EndLoadTex(){ +ARM_FUNC void GX_EndLoadTex(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForTex(gUnk021D3410); @@ -68,17 +68,17 @@ void GX_EndLoadTex(){ gUnk021D3410 = 0x0; } -void GX_BeginLoadTexPltt(){ +ARM_FUNC void GX_BeginLoadTexPltt(){ s32 temp = GX_ResetBankForTexPltt(); gUnk021D3408 = temp; gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC; } -void GX_LoadTexPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); } -void GX_EndLoadTexPltt(){ +ARM_FUNC void GX_EndLoadTexPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForTexPltt(gUnk021D3408); @@ -86,7 +86,7 @@ void GX_EndLoadTexPltt(){ gUnk021D3404 = 0x0; } -void GX_BeginLoadClearImage(){ +ARM_FUNC void GX_BeginLoadClearImage(){ s32 temp = GX_ResetBankForClearImage(); gUnk021D33FC = temp; switch (temp) @@ -107,15 +107,15 @@ void GX_BeginLoadClearImage(){ } } -void GX_LoadClearImageColor(void *src, u32 size){ +ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C), size, NULL, NULL); } -void GX_LoadClearImageDepth(void *src, u32 size){ +ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); } -void GX_EndLoadClearImage(){ +ARM_FUNC void GX_EndLoadClearImage(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForClearImage(gUnk021D33FC); diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index 52d3c6f5..38968523 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -4,7 +4,7 @@ extern struct VRAM_banks gUnk021D33C4; -void GX_InitGXState(){ +ARM_FUNC void GX_InitGXState(){ gUnk021D33C4.var00 = 0x0; gUnk021D33C4.var02 = 0x0; gUnk021D33C4.var04 = 0x0; diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index d0ac5f7a..24862470 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -5,7 +5,7 @@ extern u16 gUnk021D33BC; extern struct VRAM_banks gUnk021D33C4; -void GX_VRAMCNT_SetLCDC_(u32 mask){ +ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) SETREG8(HW_REG_VRAMCNT_A, 0x80); if (mask & (0x1 << 1)) @@ -26,7 +26,7 @@ void GX_VRAMCNT_SetLCDC_(u32 mask){ SETREG8(HW_REG_VRAMCNT_I, 0x80); } -void GX_SetBankForBG(s32 bg){ +ARM_FUNC void GX_SetBankForBG(s32 bg){ gUnk021D33C4.var00 = (u16)(~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02)); gUnk021D33C4.var02 = bg; switch (bg) @@ -99,7 +99,7 @@ void GX_SetBankForBG(s32 bg){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJ(s32 obj){ +ARM_FUNC void GX_SetBankForOBJ(s32 obj){ gUnk021D33C4.var00 = (u16)(~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04)); gUnk021D33C4.var04 = obj; switch (obj) @@ -138,7 +138,7 @@ void GX_SetBankForOBJ(s32 obj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForBGExtPltt(s32 bgextpltt){ +ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ gUnk021D33C4.var00 = (u16)(~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E)); gUnk021D33C4.var0E = bgextpltt; switch (bgextpltt) @@ -164,7 +164,7 @@ void GX_SetBankForBGExtPltt(s32 bgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJExtPltt(s32 objextpltt){ +ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ gUnk021D33C4.var00 = (u16)(~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10)); gUnk021D33C4.var10 = objextpltt; switch (objextpltt) @@ -184,7 +184,7 @@ void GX_SetBankForOBJExtPltt(s32 objextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTex(s32 tex){ +ARM_FUNC void GX_SetBankForTex(s32 tex){ gUnk021D33C4.var00 = (u16)(~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08)); gUnk021D33C4.var08 = tex; if (tex == 0) @@ -247,7 +247,7 @@ void GX_SetBankForTex(s32 tex){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTexPltt(s32 texpltt){ +ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ gUnk021D33C4.var00 = (u16)(~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A)); gUnk021D33C4.var0A = texpltt; switch (texpltt) @@ -273,7 +273,7 @@ void GX_SetBankForTexPltt(s32 texpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForClearImage(s32 clearimage){ +ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ gUnk021D33C4.var00 = (u16)(~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C)); gUnk021D33C4.var0C = clearimage; switch (clearimage) @@ -304,7 +304,7 @@ void GX_SetBankForClearImage(s32 clearimage){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForARM7(s32 arm7){ +ARM_FUNC void GX_SetBankForARM7(s32 arm7){ gUnk021D33C4.var00 = (u16)(~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06)); gUnk021D33C4.var06 = arm7; switch (arm7) @@ -324,12 +324,12 @@ void GX_SetBankForARM7(s32 arm7){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForLCDC(s32 lcdc){ +ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ gUnk021D33C4.var00 |= lcdc; GX_VRAMCNT_SetLCDC_(lcdc); } -void GX_SetBankForSubBG(s32 subbg){ +ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ gUnk021D33C4.var00 = (u16)(~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12)); gUnk021D33C4.var12 = subbg; switch (subbg) @@ -348,7 +348,7 @@ void GX_SetBankForSubBG(s32 subbg){ } -void GX_SetBankForSubOBJ(s32 subobj){ +ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ gUnk021D33C4.var00 = (u16)(~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14)); gUnk021D33C4.var14 = subobj; switch (subobj) @@ -365,7 +365,7 @@ void GX_SetBankForSubOBJ(s32 subobj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ +ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ gUnk021D33C4.var00 = (u16)(~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16)); gUnk021D33C4.var16 = subbgextpltt; switch (subbgextpltt) @@ -381,7 +381,7 @@ void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ +ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ gUnk021D33C4.var00 = (u16)(~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18)); gUnk021D33C4.var18 = subobjextpltt; switch (subobjextpltt) @@ -397,7 +397,7 @@ void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -u32 FUN_020C6130(u16 *ptr){ +ARM_FUNC u32 FUN_020C6130(u16 *ptr){ u16 temp = *ptr; *ptr = 0; gUnk021D33C4.var00 |= temp; @@ -405,55 +405,55 @@ u32 FUN_020C6130(u16 *ptr){ return temp; } -u32 GX_ResetBankForBG(){ +ARM_FUNC u32 GX_ResetBankForBG(){ return FUN_020C6130(&gUnk021D33C4.var02); } -u32 GX_ResetBankForOBJ(){ +ARM_FUNC u32 GX_ResetBankForOBJ(){ return FUN_020C6130(&gUnk021D33C4.var04); } -u32 GX_ResetBankForBGExtPltt(){ +ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); return FUN_020C6130(&gUnk021D33C4.var0E); } -u32 GX_ResetBankForOBJExtPltt(){ +ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); return FUN_020C6130(&gUnk021D33C4.var10); } -u32 GX_ResetBankForTex(){ +ARM_FUNC u32 GX_ResetBankForTex(){ return FUN_020C6130(&gUnk021D33C4.var08); } -u32 GX_ResetBankForTexPltt(){ +ARM_FUNC u32 GX_ResetBankForTexPltt(){ return FUN_020C6130(&gUnk021D33C4.var0A); } -u32 GX_ResetBankForClearImage(){ +ARM_FUNC u32 GX_ResetBankForClearImage(){ return FUN_020C6130(&gUnk021D33C4.var0C); } -u32 GX_ResetBankForSubBG(){ +ARM_FUNC u32 GX_ResetBankForSubBG(){ return FUN_020C6130(&gUnk021D33C4.var12); } -u32 FUN_020C605C(){ +ARM_FUNC u32 FUN_020C605C(){ return FUN_020C6130(&gUnk021D33C4.var14); } -u32 FUN_020C6034(){ +ARM_FUNC u32 FUN_020C6034(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); return FUN_020C6130(&gUnk021D33C4.var16); } -u32 GX_ResetBankForSubOBJ(){ +ARM_FUNC u32 GX_ResetBankForSubOBJ(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); return FUN_020C6130(&gUnk021D33C4.var18); } -u32 FUN_020C5F28(u16 *ptr){ +ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ u32 temp = *ptr; *ptr = 0; if (temp & (0x1 << 0)) @@ -478,102 +478,102 @@ u32 FUN_020C5F28(u16 *ptr){ return temp; } -u32 disableBankForX_(){ +ARM_FUNC u32 disableBankForX_(){ return FUN_020C5F28(&gUnk021D33C4.var02); } -u32 GX_DisableBankForOBJExtPltt_2(){ +ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ return FUN_020C5F28(&gUnk021D33C4.var04); } -u32 GX_DisableBankForBGExtPltt(){ +ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); return FUN_020C5F28(&gUnk021D33C4.var0E); } -u32 GX_DisableBankForOBJExtPltt(){ +ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); return FUN_020C5F28(&gUnk021D33C4.var10); } -u32 GX_DisableBankForTexPltt_2(){ +ARM_FUNC u32 GX_DisableBankForTexPltt_2(){ return FUN_020C5F28(&gUnk021D33C4.var08); } -u32 GX_DisableBankForTexPltt(){ +ARM_FUNC u32 GX_DisableBankForTexPltt(){ return FUN_020C5F28(&gUnk021D33C4.var0A); } -u32 GX_DisableBankForClearImage(){ +ARM_FUNC u32 GX_DisableBankForClearImage(){ return FUN_020C5F28(&gUnk021D33C4.var0C); } -u32 GX_DisableBankForARM7(){ +ARM_FUNC u32 GX_DisableBankForARM7(){ return FUN_020C5F28(&gUnk021D33C4.var06); } -u32 GX_DisableBankForLCDC(){ +ARM_FUNC u32 GX_DisableBankForLCDC(){ return FUN_020C5F28(&gUnk021D33C4.var00); } -u32 GX_DisableBankForSubBGExtPltt(){ +ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ return FUN_020C5F28(&gUnk021D33C4.var12); } -u32 GX_DisableBankForSubOBJExtPltt_2(){ +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ return FUN_020C5F28(&gUnk021D33C4.var14); } -u32 FUN_020C5E04(){ +ARM_FUNC u32 FUN_020C5E04(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); return FUN_020C5F28(&gUnk021D33C4.var16); } -u32 GX_DisableBankForSubOBJExtPltt(){ +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); return FUN_020C5F28(&gUnk021D33C4.var18); } -u32 GX_GetBankForBGExtPltt_2(){ +ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){ return gUnk021D33C4.var02; } -u32 GX_GetBankForOBJ(){ +ARM_FUNC u32 GX_GetBankForOBJ(){ return gUnk021D33C4.var04; } -u32 GX_GetBankForBGExtPltt(){ +ARM_FUNC u32 GX_GetBankForBGExtPltt(){ return gUnk021D33C4.var0E; } -u32 GX_GetBankForOBJExtPltt(){ +ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ return gUnk021D33C4.var10; } -u32 FUN_020C5D8C(){ +ARM_FUNC u32 FUN_020C5D8C(){ return gUnk021D33C4.var08; } -u32 GX_GetBankForTexPltt(){ +ARM_FUNC u32 GX_GetBankForTexPltt(){ return gUnk021D33C4.var0A; } -u32 GX_GetBankForLCDC(){ +ARM_FUNC u32 GX_GetBankForLCDC(){ return gUnk021D33C4.var00; } -u32 GX_GetBankForSubBGExtPltt_2(){ +ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){ return gUnk021D33C4.var12; } -u32 GX_GetBankForSubOBJ(){ +ARM_FUNC u32 GX_GetBankForSubOBJ(){ return gUnk021D33C4.var14; } -u32 GX_GetBankForSubBGExtPltt(){ +ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ return gUnk021D33C4.var16; } -u32 GX_GetBankForSubOBJExtPltt(){ +ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ return gUnk021D33C4.var18; } -- cgit v1.2.3 From f34db9ec15de8a39989afc722286844ac5fe252b Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 04:54:46 +0200 Subject: Correct global symbol names --- arm9/lib/src/GX.c | 36 +++++------ arm9/lib/src/GX_g3x.c | 8 +-- arm9/lib/src/GX_load2d.c | 138 ++++++++++++++++++++--------------------- arm9/lib/src/GX_load3d.c | 112 +++++++++++++++++----------------- arm9/lib/src/GX_state.c | 28 ++++----- arm9/lib/src/GX_vramcnt.c | 152 +++++++++++++++++++++++----------------------- arm9/undefined_syms.txt | 42 ++++++------- 7 files changed, 258 insertions(+), 258 deletions(-) diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index bae16fca..ca3e4604 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -2,10 +2,10 @@ #include "main.h" #include "gx.h" -extern u16 gUnk021D33BC; -extern u16 gUnk021D33C0; -extern u32 gUnk02106814; -extern u16 gUnk02106810; +extern u16 UNK_021D33BC; +extern u16 UNK_021D33C0; +extern u32 UNK_02106814; +extern u16 UNK_02106810; ARM_FUNC void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); @@ -13,22 +13,22 @@ ARM_FUNC void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); GX_InitGXState(); u32 temp; - while (gUnk021D33BC == 0) + while (UNK_021D33BC == 0) { temp = OS_GetLockID(); if (temp == -3) { OS_Terminate(); } - gUnk021D33BC = temp; + UNK_021D33BC = temp; } SETREG16(HW_REG_DISPSTAT, 0x0); SETREG32(HW_REG_DISPCNT, 0x0); - if (gUnk02106814 != -1) + if (UNK_02106814 != -1) { - MI_DmaFill32(gUnk02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); + MI_DmaFill32(UNK_02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); SETREG16(HW_REG_MASTER_BRIGHT, 0x0); - MI_DmaFill32(gUnk02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); + MI_DmaFill32(UNK_02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); } else { @@ -74,16 +74,16 @@ ARM_FUNC u32 GX_VBlankIntr(u32 enable){ ARM_FUNC void GX_DispOff(){ u32 temp = READREG32(HW_REG_DISPCNT); - gUnk02106810 = 0x0; - gUnk021D33C0 = (temp & 0x30000) >> 0x10; + UNK_02106810 = 0x0; + UNK_021D33C0 = (temp & 0x30000) >> 0x10; SETREG32(HW_REG_DISPCNT, temp & ~0x30000); } ARM_FUNC void GX_DispOn(){ - gUnk02106810 = 0x1; - if (gUnk021D33C0) + UNK_02106810 = 0x1; + if (UNK_021D33C0) { - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (gUnk021D33C0 << 0x10)); + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (UNK_021D33C0 << 0x10)); } else @@ -94,12 +94,12 @@ ARM_FUNC void GX_DispOn(){ ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ u32 temp2 = READREG32(HW_REG_DISPCNT); - gUnk021D33C0 = mode1; - if (!gUnk02106810) + UNK_021D33C0 = mode1; + if (!UNK_02106810) mode1 = 0; SETREG32(HW_REG_DISPCNT, (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3)); - if (!gUnk021D33C0) - gUnk02106810 = 0x0; + if (!UNK_021D33C0) + UNK_02106810 = 0x0; } ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index 7ced9de6..e76adce7 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -2,7 +2,7 @@ #include "main.h" #include "gx.h" -extern u32 gUnk02106814; +extern u32 UNK_02106814; 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 (gUnk02106814 != -1) + if (UNK_02106814 != -1) { - MI_DmaFill32Async(gUnk02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); - MI_DmaFill32(gUnk02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); + MI_DmaFill32Async(UNK_02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(UNK_02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); } else { diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 972babad..c0139c41 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -2,15 +2,15 @@ #include "main.h" #include "gx.h" -extern u32 gUnk02106814; +extern u32 UNK_02106814; -extern s32 gUnk021D33F8; -extern s32 gUnk021D33F4; -extern u32 gUnk021D33F0; -extern u32 gUnk021D33EC; -extern s32 gUnk021D33E8; -extern u32 gUnk021D33E4; -extern s32 gUnk021D33E0; +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; static inline void *_GX_OBJ_PTR(){ @@ -21,207 +21,207 @@ static inline void *_GXS_OBJ_PTR(){ } ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000000 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000000 + offset), size); } ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000400 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000400 + offset), size); } ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000200 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000200 + offset), size); } ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000600 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000600 + offset), size); } ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(gUnk02106814, src, (void *)(0x7000000 + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(0x7000000 + offset), size); } ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(gUnk02106814, src, (void *)(0x7000400 + offset), size); + _GX_Load_32(UNK_02106814, 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(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, 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(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_BeginLoadBGExtPltt(){ - gUnk021D33F4 = GX_ResetBankForBGExtPltt(); - switch (gUnk021D33F4) + UNK_021D33F4 = GX_ResetBankForBGExtPltt(); + switch (UNK_021D33F4) { case 0: //needed to match break; case 0x10: - gUnk021D33F0 = 0x06880000; - gUnk021D33EC = 0x0; + UNK_021D33F0 = 0x06880000; + UNK_021D33EC = 0x0; break; case 0x40: - gUnk021D33F0 = 0x06894000; - gUnk021D33EC = 0x4000; + UNK_021D33F0 = 0x06894000; + UNK_021D33EC = 0x4000; break; case 0x20: case 0x60: - gUnk021D33F0 = 0x06890000; - gUnk021D33EC = 0x0; + UNK_021D33F0 = 0x06890000; + UNK_021D33EC = 0x0; break; } } ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33F0 + offset - UNK_021D33EC), size, NULL, NULL); } ARM_FUNC void GX_EndLoadBGExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForBGExtPltt(gUnk021D33F4); - gUnk021D33F4 = 0x0; - gUnk021D33F0 = 0x0; - gUnk021D33EC = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForBGExtPltt(UNK_021D33F4); + UNK_021D33F4 = 0x0; + UNK_021D33F0 = 0x0; + UNK_021D33EC = 0x0; } ARM_FUNC void GX_BeginLoadOBJExtPltt(){ - gUnk021D33E8 = GX_ResetBankForOBJExtPltt(); - switch (gUnk021D33E8) + UNK_021D33E8 = GX_ResetBankForOBJExtPltt(); + switch (UNK_021D33E8) { case 0: //needed to match break; case 0x40: - gUnk021D33E4 = 0x06894000; + UNK_021D33E4 = 0x06894000; break; case 0x20: - gUnk021D33E4 = 0x06890000; + UNK_021D33E4 = 0x06890000; break; } } ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33E4 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadOBJExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForOBJExtPltt(gUnk021D33E8); - gUnk021D33E8 = 0x0; - gUnk021D33E4 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForOBJExtPltt(UNK_021D33E8); + UNK_021D33E8 = 0x0; + UNK_021D33E4 = 0x0; } ARM_FUNC void GXS_BeginLoadBGExtPltt(){ - gUnk021D33E0 = FUN_020C6034(); + UNK_021D33E0 = FUN_020C6034(); } ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadBGExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForSubBGExtPltt(gUnk021D33E0); - gUnk021D33E0 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForSubBGExtPltt(UNK_021D33E0); + UNK_021D33E0 = 0x0; } ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ - gUnk021D33F8 = GX_ResetBankForSubOBJ(); + UNK_021D33F8 = GX_ResetBankForSubOBJ(); } ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadOBJExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForSubOBJExtPltt(gUnk021D33F8); - gUnk021D33F8 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForSubOBJExtPltt(UNK_021D33F8); + UNK_021D33F8 = 0x0; } diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index ee7502db..3a8a8c1d 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -2,123 +2,123 @@ #include "main.h" #include "gx.h" -extern u32 gUnk02106814; +extern u32 UNK_02106814; -extern u32 gUnk021D3410; -extern u32 gUnk021D3400; -extern u32 gUnk021D3414; -extern u32 gUnk021D3418; +extern u32 UNK_021D3410; +extern u32 UNK_021D3400; +extern u32 UNK_021D3414; +extern u32 UNK_021D3418; //probably structs of length 0x6 -extern u16 gUnk02103B4C[]; -extern u16 gUnk02103B4E[]; -extern u16 gUnk02103B50[]; +extern u16 UNK_02103B4C[]; +extern u16 UNK_02103B4E[]; +extern u16 UNK_02103B50[]; -extern u32 gUnk021D3408; -extern u32 gUnk021D3404; -extern u16 gUnk02103B3C[]; +extern u32 UNK_021D3408; +extern u32 UNK_021D3404; +extern u16 UNK_02103B3C[]; -extern s32 gUnk021D33FC; -extern u32 gUnk021D340C; +extern s32 UNK_021D33FC; +extern u32 UNK_021D340C; ARM_FUNC void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); - gUnk021D3410 = temp; - gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC; - gUnk021D3414 = gUnk02103B4E[temp * 3] << 0xC; - gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC; + UNK_021D3410 = temp; + UNK_021D3400 = UNK_02103B4C[temp * 3] << 0xC; + UNK_021D3414 = UNK_02103B4E[temp * 3] << 0xC; + UNK_021D3418 = UNK_02103B50[temp * 3] << 0xC; } ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp; - if (!gUnk021D3414) + if (!UNK_021D3414) { - temp = (void *)(gUnk021D3400 + offset); + temp = (void *)(UNK_021D3400 + offset); } else { - if ((offset + size) < gUnk021D3418) + if ((offset + size) < UNK_021D3418) { - temp = (void *)(gUnk021D3400 + offset); + temp = (void *)(UNK_021D3400 + offset); } - else if (offset >= gUnk021D3418) + else if (offset >= UNK_021D3418) { - temp = (void *)(gUnk021D3414 + offset - gUnk021D3418); + temp = (void *)(UNK_021D3414 + offset - UNK_021D3418); } else { - void *temp2 = (void *)gUnk021D3414; - u32 temp1 = gUnk021D3418 - offset; - temp = (void *)(gUnk021D3400 + offset); - _GX_Load_32(gUnk02106814, src, temp, temp1); - _GX_Load_32_Async(gUnk02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + 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); return; } } - _GX_Load_32_Async(gUnk02106814, src, temp, size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, temp, size, NULL, NULL); } ARM_FUNC void GX_EndLoadTex(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForTex(gUnk021D3410); - gUnk021D3418 = 0x0; - gUnk021D3414 = 0x0; - gUnk021D3400 = 0x0; - gUnk021D3410 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForTex(UNK_021D3410); + UNK_021D3418 = 0x0; + UNK_021D3414 = 0x0; + UNK_021D3400 = 0x0; + UNK_021D3410 = 0x0; } ARM_FUNC void GX_BeginLoadTexPltt(){ s32 temp = GX_ResetBankForTexPltt(); - gUnk021D3408 = temp; - gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC; + UNK_021D3408 = temp; + UNK_021D3404 = UNK_02103B3C[temp >> 4] << 0xC; } ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D3404 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadTexPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForTexPltt(gUnk021D3408); - gUnk021D3408 = 0x0; - gUnk021D3404 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForTexPltt(UNK_021D3408); + UNK_021D3408 = 0x0; + UNK_021D3404 = 0x0; } ARM_FUNC void GX_BeginLoadClearImage(){ s32 temp = GX_ResetBankForClearImage(); - gUnk021D33FC = temp; + UNK_021D33FC = temp; switch (temp) { case 2: case 3: - gUnk021D340C = 0x6800000; + UNK_021D340C = 0x6800000; return; case 8: case 12: - gUnk021D340C = 0x6840000; + UNK_021D340C = 0x6840000; return; case 1: - gUnk021D340C = 0x67E0000; + UNK_021D340C = 0x67E0000; return; case 4: - gUnk021D340C = 0x6820000; + UNK_021D340C = 0x6820000; } } ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C), size, NULL, NULL); } ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C + 0x20000), size, NULL, NULL); } ARM_FUNC void GX_EndLoadClearImage(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForClearImage(gUnk021D33FC); - gUnk021D33FC = 0x0; - gUnk021D340C = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForClearImage(UNK_021D33FC); + UNK_021D33FC = 0x0; + UNK_021D340C = 0x0; } diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index 38968523..79a53ee7 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -2,22 +2,22 @@ #include "main.h" #include "gx.h" -extern struct VRAM_banks gUnk021D33C4; +extern struct VRAM_banks UNK_021D33C4; ARM_FUNC void GX_InitGXState(){ - gUnk021D33C4.var00 = 0x0; - gUnk021D33C4.var02 = 0x0; - gUnk021D33C4.var04 = 0x0; - gUnk021D33C4.var06 = 0x0; - gUnk021D33C4.var08 = 0x0; - gUnk021D33C4.var0A = 0x0; - gUnk021D33C4.var0C = 0x0; - gUnk021D33C4.var0E = 0x0; - gUnk021D33C4.var10 = 0x0; - gUnk021D33C4.var12 = 0x0; - gUnk021D33C4.var14 = 0x0; - gUnk021D33C4.var16 = 0x0; - gUnk021D33C4.var18 = 0x0; + 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; SETREG32(HW_REG_VRAMCNT_A, 0x0); SETREG8(HW_REG_VRAMCNT_E, 0x0); SETREG8(HW_REG_VRAMCNT_F, 0x0); diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index 24862470..fdedca46 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -2,8 +2,8 @@ #include "main.h" #include "gx.h" -extern u16 gUnk021D33BC; -extern struct VRAM_banks gUnk021D33C4; +extern u16 UNK_021D33BC; +extern struct VRAM_banks UNK_021D33C4; 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){ - gUnk021D33C4.var00 = (u16)(~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02)); - gUnk021D33C4.var02 = bg; + UNK_021D33C4.var00 = (u16)(~bg & (UNK_021D33C4.var00 | UNK_021D33C4.var02)); + UNK_021D33C4.var02 = bg; switch (bg) { case 8: @@ -96,12 +96,12 @@ ARM_FUNC void GX_SetBankForBG(s32 bg){ default: break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForOBJ(s32 obj){ - gUnk021D33C4.var00 = (u16)(~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04)); - gUnk021D33C4.var04 = obj; + UNK_021D33C4.var00 = (u16)(~obj & (UNK_021D33C4.var00 | UNK_021D33C4.var04)); + UNK_021D33C4.var04 = obj; switch (obj) { case 3: @@ -135,12 +135,12 @@ ARM_FUNC void GX_SetBankForOBJ(s32 obj){ default: break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ - gUnk021D33C4.var00 = (u16)(~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E)); - gUnk021D33C4.var0E = bgextpltt; + UNK_021D33C4.var00 = (u16)(~bgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0E)); + UNK_021D33C4.var0E = bgextpltt; switch (bgextpltt) { case 0x10: @@ -161,12 +161,12 @@ ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ - gUnk021D33C4.var00 = (u16)(~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10)); - gUnk021D33C4.var10 = objextpltt; + UNK_021D33C4.var00 = (u16)(~objextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var10)); + UNK_021D33C4.var10 = objextpltt; switch (objextpltt) { case 32: @@ -181,12 +181,12 @@ ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForTex(s32 tex){ - gUnk021D33C4.var00 = (u16)(~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08)); - gUnk021D33C4.var08 = tex; + UNK_021D33C4.var00 = (u16)(~tex & (UNK_021D33C4.var00 | UNK_021D33C4.var08)); + UNK_021D33C4.var08 = tex; if (tex == 0) { SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & 0x0000CFFE); @@ -244,12 +244,12 @@ ARM_FUNC void GX_SetBankForTex(s32 tex){ break; } } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ - gUnk021D33C4.var00 = (u16)(~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A)); - gUnk021D33C4.var0A = texpltt; + UNK_021D33C4.var00 = (u16)(~texpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0A)); + UNK_021D33C4.var0A = texpltt; switch (texpltt) { case 0: //needed to match @@ -270,12 +270,12 @@ ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ SETREG8(HW_REG_VRAMCNT_G, 0x83); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ - gUnk021D33C4.var00 = (u16)(~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C)); - gUnk021D33C4.var0C = clearimage; + UNK_021D33C4.var00 = (u16)(~clearimage & (UNK_021D33C4.var00 | UNK_021D33C4.var0C)); + UNK_021D33C4.var0C = clearimage; switch (clearimage) { case 3: @@ -301,12 +301,12 @@ ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ SETREG8(HW_REG_VRAMCNT_C, 0x9B); SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForARM7(s32 arm7){ - gUnk021D33C4.var00 = (u16)(~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06)); - gUnk021D33C4.var06 = arm7; + UNK_021D33C4.var00 = (u16)(~arm7 & (UNK_021D33C4.var00 | UNK_021D33C4.var06)); + UNK_021D33C4.var06 = arm7; switch (arm7) { case 0: //needed to match @@ -321,17 +321,17 @@ ARM_FUNC void GX_SetBankForARM7(s32 arm7){ case 8: SETREG8(HW_REG_VRAMCNT_D, 0x82); } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ - gUnk021D33C4.var00 |= lcdc; + UNK_021D33C4.var00 |= lcdc; GX_VRAMCNT_SetLCDC_(lcdc); } ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ - gUnk021D33C4.var00 = (u16)(~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12)); - gUnk021D33C4.var12 = subbg; + UNK_021D33C4.var00 = (u16)(~subbg & (UNK_021D33C4.var00 | UNK_021D33C4.var12)); + UNK_021D33C4.var12 = subbg; switch (subbg) { case 0: //needed to match @@ -344,13 +344,13 @@ ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ case 128: SETREG8(HW_REG_VRAMCNT_H, 0x81); } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ - gUnk021D33C4.var00 = (u16)(~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14)); - gUnk021D33C4.var14 = subobj; + UNK_021D33C4.var00 = (u16)(~subobj & (UNK_021D33C4.var00 | UNK_021D33C4.var14)); + UNK_021D33C4.var14 = 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_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ - gUnk021D33C4.var00 = (u16)(~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16)); - gUnk021D33C4.var16 = subbgextpltt; + UNK_021D33C4.var00 = (u16)(~subbgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var16)); + UNK_021D33C4.var16 = subbgextpltt; switch (subbgextpltt) { case 128: @@ -378,12 +378,12 @@ ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ - gUnk021D33C4.var00 = (u16)(~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18)); - gUnk021D33C4.var18 = subobjextpltt; + UNK_021D33C4.var00 = (u16)(~subobjextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var18)); + UNK_021D33C4.var18 = subobjextpltt; switch (subobjextpltt) { case 256: @@ -394,63 +394,63 @@ ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC u32 FUN_020C6130(u16 *ptr){ u16 temp = *ptr; *ptr = 0; - gUnk021D33C4.var00 |= temp; + UNK_021D33C4.var00 |= temp; GX_VRAMCNT_SetLCDC_(temp); return temp; } ARM_FUNC u32 GX_ResetBankForBG(){ - return FUN_020C6130(&gUnk021D33C4.var02); + return FUN_020C6130(&UNK_021D33C4.var02); } ARM_FUNC u32 GX_ResetBankForOBJ(){ - return FUN_020C6130(&gUnk021D33C4.var04); + return FUN_020C6130(&UNK_021D33C4.var04); } ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); - return FUN_020C6130(&gUnk021D33C4.var0E); + return FUN_020C6130(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); - return FUN_020C6130(&gUnk021D33C4.var10); + return FUN_020C6130(&UNK_021D33C4.var10); } ARM_FUNC u32 GX_ResetBankForTex(){ - return FUN_020C6130(&gUnk021D33C4.var08); + return FUN_020C6130(&UNK_021D33C4.var08); } ARM_FUNC u32 GX_ResetBankForTexPltt(){ - return FUN_020C6130(&gUnk021D33C4.var0A); + return FUN_020C6130(&UNK_021D33C4.var0A); } ARM_FUNC u32 GX_ResetBankForClearImage(){ - return FUN_020C6130(&gUnk021D33C4.var0C); + return FUN_020C6130(&UNK_021D33C4.var0C); } ARM_FUNC u32 GX_ResetBankForSubBG(){ - return FUN_020C6130(&gUnk021D33C4.var12); + return FUN_020C6130(&UNK_021D33C4.var12); } ARM_FUNC u32 FUN_020C605C(){ - return FUN_020C6130(&gUnk021D33C4.var14); + return FUN_020C6130(&UNK_021D33C4.var14); } ARM_FUNC u32 FUN_020C6034(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); - return FUN_020C6130(&gUnk021D33C4.var16); + return FUN_020C6130(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_ResetBankForSubOBJ(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); - return FUN_020C6130(&gUnk021D33C4.var18); + return FUN_020C6130(&UNK_021D33C4.var18); } ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ @@ -474,106 +474,106 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ SETREG8(HW_REG_VRAMCNT_H, 0x0); if (temp & (0x1 << 8)) SETREG8(HW_REG_VRAMCNT_I, 0x0); - OSi_UnlockVram((u16)temp, gUnk021D33BC); + OSi_UnlockVram((u16)temp, UNK_021D33BC); return temp; } ARM_FUNC u32 disableBankForX_(){ - return FUN_020C5F28(&gUnk021D33C4.var02); + return FUN_020C5F28(&UNK_021D33C4.var02); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ - return FUN_020C5F28(&gUnk021D33C4.var04); + return FUN_020C5F28(&UNK_021D33C4.var04); } ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); - return FUN_020C5F28(&gUnk021D33C4.var0E); + return FUN_020C5F28(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); - return FUN_020C5F28(&gUnk021D33C4.var10); + return FUN_020C5F28(&UNK_021D33C4.var10); } ARM_FUNC u32 GX_DisableBankForTexPltt_2(){ - return FUN_020C5F28(&gUnk021D33C4.var08); + return FUN_020C5F28(&UNK_021D33C4.var08); } ARM_FUNC u32 GX_DisableBankForTexPltt(){ - return FUN_020C5F28(&gUnk021D33C4.var0A); + return FUN_020C5F28(&UNK_021D33C4.var0A); } ARM_FUNC u32 GX_DisableBankForClearImage(){ - return FUN_020C5F28(&gUnk021D33C4.var0C); + return FUN_020C5F28(&UNK_021D33C4.var0C); } ARM_FUNC u32 GX_DisableBankForARM7(){ - return FUN_020C5F28(&gUnk021D33C4.var06); + return FUN_020C5F28(&UNK_021D33C4.var06); } ARM_FUNC u32 GX_DisableBankForLCDC(){ - return FUN_020C5F28(&gUnk021D33C4.var00); + return FUN_020C5F28(&UNK_021D33C4.var00); } ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ - return FUN_020C5F28(&gUnk021D33C4.var12); + return FUN_020C5F28(&UNK_021D33C4.var12); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ - return FUN_020C5F28(&gUnk021D33C4.var14); + return FUN_020C5F28(&UNK_021D33C4.var14); } ARM_FUNC u32 FUN_020C5E04(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); - return FUN_020C5F28(&gUnk021D33C4.var16); + return FUN_020C5F28(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); - return FUN_020C5F28(&gUnk021D33C4.var18); + return FUN_020C5F28(&UNK_021D33C4.var18); } ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){ - return gUnk021D33C4.var02; + return UNK_021D33C4.var02; } ARM_FUNC u32 GX_GetBankForOBJ(){ - return gUnk021D33C4.var04; + return UNK_021D33C4.var04; } ARM_FUNC u32 GX_GetBankForBGExtPltt(){ - return gUnk021D33C4.var0E; + return UNK_021D33C4.var0E; } ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ - return gUnk021D33C4.var10; + return UNK_021D33C4.var10; } ARM_FUNC u32 FUN_020C5D8C(){ - return gUnk021D33C4.var08; + return UNK_021D33C4.var08; } ARM_FUNC u32 GX_GetBankForTexPltt(){ - return gUnk021D33C4.var0A; + return UNK_021D33C4.var0A; } ARM_FUNC u32 GX_GetBankForLCDC(){ - return gUnk021D33C4.var00; + return UNK_021D33C4.var00; } ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){ - return gUnk021D33C4.var12; + return UNK_021D33C4.var12; } ARM_FUNC u32 GX_GetBankForSubOBJ(){ - return gUnk021D33C4.var14; + return UNK_021D33C4.var14; } ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ - return gUnk021D33C4.var16; + return UNK_021D33C4.var16; } ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ - return gUnk021D33C4.var18; + return UNK_021D33C4.var18; } diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 6735579a..587556dc 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; -gUnk02106814 = 0x02106814; +UNK_02106814 = 0x02106814; OSi_IrqCallbackInfoIndex = 0x02106818; OSi_ConsoleTypeCache = 0x02106828; // DGT @@ -23,29 +23,29 @@ SDK_OVERLAY_DIGEST_END = 0x02106F84; //GX gUnk021D33BC = 0x021D33BC; gUnk021D33C0 = 0x021D33C0; -gUnk021D33C4 = 0x021D33C4; +UNK_021D33C4 = 0x021D33C4; -gUnk021D33E0 = 0x021D33E0; -gUnk021D33E4 = 0x021D33E4; -gUnk021D33E8 = 0x021D33E8; -gUnk021D33EC = 0x021D33EC; -gUnk021D33F0 = 0x021D33F0; -gUnk021D33F4 = 0x021D33F4; -gUnk021D33F8 = 0x021D33F8; -gUnk021D33FC = 0x021D33FC; -gUnk021D3400 = 0x021D3400; -gUnk021D3404 = 0x021D3404; -gUnk021D3408 = 0x021D3408; -gUnk021D340C = 0x021D340C; -gUnk021D3410 = 0x021D3410; -gUnk021D3414 = 0x021D3414; -gUnk021D3418 = 0x021D3418; +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; -gUnk02103B3C = 0x02103B3C; +UNK_02103B3C = 0x02103B3C; -gUnk02103B4C = 0x02103B4C; -gUnk02103B4E = 0x02103B4E; -gUnk02103B50 = 0x02103B50; +UNK_02103B4C = 0x02103B4C; +UNK_02103B4E = 0x02103B4E; +UNK_02103B50 = 0x02103B50; // Overlay FUN_021D76AC = 0x021D76AC; -- cgit v1.2.3 From 929c523340dfecbd0e3313e25d36abe47e1cc63e Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 06:46:25 +0200 Subject: Replace register access macros with variables --- arm9/lib/include/gx.h | 90 ---------------- arm9/lib/src/GX.c | 65 ++++++----- arm9/lib/src/GX_bgcnt.c | 64 +++++------ arm9/lib/src/GX_g3_util.c | 34 +++--- arm9/lib/src/GX_g3imm.c | 12 +-- arm9/lib/src/GX_g3x.c | 140 ++++++++++++------------ arm9/lib/src/GX_state.c | 10 +- arm9/lib/src/GX_vramcnt.c | 268 +++++++++++++++++++++++----------------------- 8 files changed, 296 insertions(+), 387 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 5abc2693..58e4c35f 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -20,98 +20,8 @@ void MIi_CpuCopy32(void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//Todos before PR //TODO: Add defines for GX commands, add structs/unions for HW registers -#define HW_REG_DIV_NUMER 0x04000290 -#define HW_REG_DIV_DENOM 0x04000298 - -#define HW_REG_MTX_MODE 0x04000440 -#define HW_REG_MTX_LOAD_4x4 0x04000458 -#define HW_REG_MTX_LOAD_4x3 0x0400045C -#define HW_REG_MTX_MULT_3x3 0x04000468 - -#define HW_REG_END_VTXS 0x04000504 -#define HW_REG_GXSTAT 0x04000600 -#define HW_REG_DISP3DCNT 0x04000060 -#define HW_REG_BG0HOFS 0x04000010 -#define HW_REG_CLEAR_COLOR 0x04000350 -#define HW_REG_CLEAR_DEPTH 0x04000354 -#define HW_REG_CLRIMAGE_OFFSET 0x04000356 -#define HW_REG_FOG_COLOR 0x04000358 -#define HW_REG_FOG_OFFSET 0x0400035C -#define HW_REG_BG0CNT 0x04000008 -#define HW_REG_POLYGON_ATTR 0x040004A4 -#define HW_REG_TEXIMAGE_PARAM 0x040004A8 -#define HW_REG_PLTT_BASE 0x040004AC - -#define HW_REG_POWCNT1 0x04000304 - -#define HW_REG_GXFIFO 0x04000400 -#define HW_REG_MTX_IDENTITY 0x04000454 -#define HW_REG_MTX_POP 0x04000448 -#define HW_REG_MTX_MODE 0x04000440 - -#define HW_REG_CLIPMTX_RESULT 0x04000640 -#define HW_REG_VECMTX_RESULT 0x04000680 - -#define HW_REG_EDGE_COLOR 0x04000330 -#define HW_REG_FOG_TABLE 0x04000360 - -#define HW_REG_SHININESS 0x040004D0 - -#define HW_REG_MASTER_BRIGHT 0x0400006C - -#define HW_REG_VRAMCNT_A 0x04000240 -#define HW_REG_VRAMCNT_B 0x04000241 -#define HW_REG_VRAMCNT_C 0x04000242 -#define HW_REG_VRAMCNT_D 0x04000243 -#define HW_REG_VRAMCNT_E 0x04000244 -#define HW_REG_VRAMCNT_F 0x04000245 -#define HW_REG_VRAMCNT_G 0x04000246 -#define HW_REG_WRAMCNT 0x04000247 -#define HW_REG_VRAMCNT_H 0x04000248 -#define HW_REG_VRAMCNT_I 0x04000249 - -#define HW_REG_DISPCNT 0x04000000 -#define HW_REG_DISPSTAT 0x04000004 -#define HW_REG_DISPCNT_2D 0x04001000 - -#define HW_REG_DISP3DCNT 0x04000060 - -#define HW_REG_BG2PA_A 0x04000020 -#define HW_REG_BG2PD_A 0x04000026 -#define HW_REG_BG3PA_A 0x04000030 -#define HW_REG_BG3PD_A 0x04000036 -#define HW_REG_BG2PA_B 0x04001020 -#define HW_REG_BG2PD_B 0x04001026 -#define HW_REG_BG3PA_B 0x04001030 -#define HW_REG_BG3PD_B 0x04001036 - -#define HW_REG_BG0CNT_A 0x04000008 -#define HW_REG_BG1CNT_A 0x0400000A -#define HW_REG_BG2CNT_A 0x0400000C -#define HW_REG_BG3CNT_A 0x0400000E - -#define HW_REG_BG0CNT_B 0x04001008 -#define HW_REG_BG1CNT_B 0x0400100A -#define HW_REG_BG2CNT_B 0x0400100C -#define HW_REG_BG3CNT_B 0x0400100E - -#define HW_REG_DISPCNT_A 0x04000000 -#define HW_REG_DISPCNT_B 0x04001000 - -//TODO: wait for register commit and replace these -#define SETREG8(x, y) ((*(vu8 *)x) = y) -#define SETREG16(x, y) ((*(vu16 *)x) = y) -#define SETREG32(x, y) ((*(vu32 *)x) = y) -#define SETREG64(x, y) ((*(vu64 *)x) = y) - -#define READREG8(x) (*(vu8 *)x) -#define READREG16(x) (*(vu16 *)x) -#define READREG32(x) (*(vu32 *)x) -#define READREG64(x) (*(vu64 *)x) - static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ if (var != -1 && size > 0x1C) { diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index ca3e4604..883dfe69 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -8,9 +8,9 @@ extern u32 UNK_02106814; extern u16 UNK_02106810; ARM_FUNC void GX_Init(){ - SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); - SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); - SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); + reg_GX_POWCNT |= 0x8000; + reg_GX_POWCNT = (reg_GX_POWCNT & ~0x20E) | 0x20E; + reg_GX_POWCNT = reg_GX_POWCNT | 0x1; GX_InitGXState(); u32 temp; while (UNK_021D33BC == 0) @@ -22,88 +22,87 @@ ARM_FUNC void GX_Init(){ } UNK_021D33BC = temp; } - SETREG16(HW_REG_DISPSTAT, 0x0); - SETREG32(HW_REG_DISPCNT, 0x0); + reg_GX_DISPSTAT = 0x0; + reg_GX_DISPCNT = 0x0; if (UNK_02106814 != -1) { - MI_DmaFill32(UNK_02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); - SETREG16(HW_REG_MASTER_BRIGHT, 0x0); - MI_DmaFill32(UNK_02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); + MI_DmaFill32(UNK_02106814, (void *)®_G2_BG0CNT, 0x0, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MI_DmaFill32(UNK_02106814, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); } else { - MIi_CpuClear32(0x0, (void *)HW_REG_BG0CNT_A, 0x60); - SETREG16(HW_REG_MASTER_BRIGHT, 0x0); - MIi_CpuClear32(0x0, (void *)HW_REG_DISPCNT_2D, 0x70); + MIi_CpuClear32(0x0, (void *)®_G2_BG0CNT, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MIi_CpuClear32(0x0, (void *)®_GXS_DB_DISPCNT, 0x70); } - SETREG16(HW_REG_BG2PA_A, 0x100); - SETREG16(HW_REG_BG2PD_A, 0x100); - SETREG16(HW_REG_BG3PA_A, 0x100); - SETREG16(HW_REG_BG3PD_A, 0x100); - SETREG16(HW_REG_BG2PA_B, 0x100); - SETREG16(HW_REG_BG2PD_B, 0x100); - SETREG16(HW_REG_BG3PA_B, 0x100); - SETREG16(HW_REG_BG3PD_B, 0x100); + reg_G2_BG2PA = 0x100; + reg_G2_BG2PD = 0x100; + reg_G2_BG3PA = 0x100; + reg_G2_BG3PD = 0x100; + reg_G2S_DB_BG2PA = 0x100; + reg_G2S_DB_BG2PD = 0x100; + reg_G2S_DB_BG3PA = 0x100; + reg_G2S_DB_BG3PD = 0x100; } ARM_FUNC u32 GX_HBlankIntr(u32 enable){ - u32 temp = READREG16(HW_REG_DISPSTAT) & 0x10; + u32 temp = reg_GX_DISPSTAT & 0x10; if (enable) { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x10); + reg_GX_DISPSTAT |= 0x10; } else { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x10); + reg_GX_DISPSTAT &= ~0x10; } return temp; } ARM_FUNC u32 GX_VBlankIntr(u32 enable){ - u32 temp = READREG16(HW_REG_DISPSTAT) & 0x8; + u32 temp = reg_GX_DISPSTAT & 0x8; if (enable) { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x8); + reg_GX_DISPSTAT |= 0x8; } else { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x8); + reg_GX_DISPSTAT &= ~0x8; } return temp; } ARM_FUNC void GX_DispOff(){ - u32 temp = READREG32(HW_REG_DISPCNT); + u32 temp = reg_GX_DISPCNT; UNK_02106810 = 0x0; UNK_021D33C0 = (temp & 0x30000) >> 0x10; - SETREG32(HW_REG_DISPCNT, temp & ~0x30000); + reg_GX_DISPCNT = temp & ~0x30000; } ARM_FUNC void GX_DispOn(){ UNK_02106810 = 0x1; if (UNK_021D33C0) { - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (UNK_021D33C0 << 0x10)); - + reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (UNK_021D33C0 << 0x10); } else { - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x10000); + reg_GX_DISPCNT = reg_GX_DISPCNT | 0x10000; } } ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ - u32 temp2 = READREG32(HW_REG_DISPCNT); + u32 temp2 = reg_GX_DISPCNT; UNK_021D33C0 = mode1; if (!UNK_02106810) mode1 = 0; - SETREG32(HW_REG_DISPCNT, (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3)); + reg_GX_DISPCNT = (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3); if (!UNK_021D33C0) UNK_02106810 = 0x0; } ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x7 | mode); + reg_GXS_DB_DISPCNT = reg_GXS_DB_DISPCNT & ~0x7 | mode; } ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c index 1eeffab6..63fe87b1 100644 --- a/arm9/lib/src/GX_bgcnt.c +++ b/arm9/lib/src/GX_bgcnt.c @@ -3,27 +3,27 @@ #include "gx.h" ARM_FUNC void *G2_GetBG0ScrPtr(){ - u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x1F00) >> 0x8) << 0xB); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); + u32 temp = (((reg_G2_BG0CNT & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG0ScrPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x1F00) >> 0x8) << 0xB)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x1F00) >> 0x8) << 0xB)); } ARM_FUNC void *G2_GetBG1ScrPtr(){ - u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x1F00) >> 0x8) << 0xB); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); + u32 temp = (((reg_G2_BG1CNT & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG1ScrPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x1F00) >> 0x8) << 0xB)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x1F00) >> 0x8) << 0xB)); } ARM_FUNC void *G2_GetBG2ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp3 = READREG16(HW_REG_BG2CNT_A); - u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp12 = (reg_GX_DISPCNT & 0x7); + u32 temp3 = reg_G2_BG2CNT; + u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -46,8 +46,8 @@ ARM_FUNC void *G2_GetBG2ScrPtr(){ } ARM_FUNC void *G2S_GetBG2ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp3 = READREG16(HW_REG_BG2CNT_B); + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG2CNT; u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -70,9 +70,9 @@ ARM_FUNC void *G2S_GetBG2ScrPtr(){ } ARM_FUNC void *G2_GetBG3ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp3 = READREG16(HW_REG_BG3CNT_A); - u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp12 = (reg_GX_DISPCNT & 0x7); + u32 temp3 = reg_G2_BG3CNT; + u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -95,8 +95,8 @@ ARM_FUNC void *G2_GetBG3ScrPtr(){ } ARM_FUNC void *G2S_GetBG3ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp3 = READREG16(HW_REG_BG3CNT_B); + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG3CNT; u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -119,29 +119,29 @@ ARM_FUNC void *G2S_GetBG3ScrPtr(){ } ARM_FUNC void *G2_GetBG0CharPtr(){ - u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x3C) >> 0x2) << 0xE); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); + u32 temp = (((reg_G2_BG0CNT & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG0CharPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x3C) >> 0x2) << 0xE)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x3C) >> 0x2) << 0xE)); } ARM_FUNC void *G2_GetBG1CharPtr(){ - u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x3C) >> 0x2) << 0xE); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); + u32 temp = (((reg_G2_BG1CNT & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG1CharPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x3C) >> 0x2) << 0xE)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x3C) >> 0x2) << 0xE)); } ARM_FUNC void *G2_GetBG2CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp = READREG16(HW_REG_BG2CNT_A); + s32 temp1 = (reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG2CNT; if (temp1 < 5 || !(temp & 0x80)) { - u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); u32 temp2 = (temp & 0x3C) >> 2; return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); } @@ -152,8 +152,8 @@ ARM_FUNC void *G2_GetBG2CharPtr(){ } ARM_FUNC void *G2S_GetBG2CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp = READREG16(HW_REG_BG2CNT_B); + s32 temp1 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp = reg_G2S_DB_BG2CNT; if (temp1 < 5 || !(temp & 0x80)) { u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; @@ -166,11 +166,11 @@ ARM_FUNC void *G2S_GetBG2CharPtr(){ } ARM_FUNC void *G2_GetBG3CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp = READREG16(HW_REG_BG3CNT_A); + s32 temp1 = (reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG3CNT; if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) { - u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); u32 temp2 = (temp & 0x3C) >> 2; return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); } @@ -181,8 +181,8 @@ ARM_FUNC void *G2_GetBG3CharPtr(){ } ARM_FUNC void *G2S_GetBG3CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp = READREG16(HW_REG_BG3CNT_B); + s32 temp1 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp = reg_G2S_DB_BG3CNT; if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) { u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c index 75e18589..f34e23ed 100644 --- a/arm9/lib/src/GX_g3_util.c +++ b/arm9/lib/src/GX_g3_util.c @@ -11,12 +11,12 @@ ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fovcot = FX_Div(fovcos, fovsin); if (scale != 0x1000) //!= 1.0 fovcot = (fovcot * scale) / 0x1000; - SETREG64(HW_REG_DIV_NUMER, (s64)fovcot << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)ratio); + reg_CP_DIV_NUMER = (s64)fovcot << 0x20; + reg_CP_DIV_DENOM = (u32)ratio; if (load) { - SETREG32(HW_REG_MTX_MODE, 0x0); - reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; } if (mtx) { @@ -34,8 +34,8 @@ ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, mtx->_[15] = 0x0; } temp1 = FX_GetDivResult(); - SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(near - far); if (load) { *reg_ptr = temp1; @@ -83,8 +83,8 @@ ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 nea FX_InvAsync(right - left); if (load) { - SETREG32(HW_REG_MTX_MODE, 0x0); - reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; } if (mtx) { @@ -100,8 +100,8 @@ ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 nea mtx->_[15] = scale; } temp1 = FX_GetDivResultFx64c(); - SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)(top - bottom)); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(top - bottom); if (scale != 0x1000) temp1 = (temp1 * scale) / 0x1000; temp0 = (0x2000 * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; @@ -118,8 +118,8 @@ ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 nea mtx->_[0] = temp0; } temp2 = FX_GetDivResultFx64c(); - SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(near - far); if (scale != 0x1000) temp2 = (temp2 * scale) / 0x1000; temp0 = (0x2000 * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; @@ -179,8 +179,8 @@ ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, VEC_CrossProduct(&temp, &temp1, &temp2); if (load) { - SETREG32(HW_REG_MTX_MODE, 0x2); - reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x3; + reg_G3_MTX_MODE = 0x2; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x3; *reg_ptr = temp1.x; *reg_ptr = temp2.x; *reg_ptr = temp.x; @@ -219,7 +219,7 @@ ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; - reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; *reg_ptr = 0x1000; *reg_ptr = 0x0; *reg_ptr = 0x0; @@ -233,7 +233,7 @@ ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; - reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; *reg_ptr = cosphi; *reg_ptr = 0x0; *reg_ptr = -sinphi; @@ -247,7 +247,7 @@ ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; - reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; *reg_ptr = cosphi; *reg_ptr = sinphi; *reg_ptr = 0x0; diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c index f11e2927..a5c62c26 100644 --- a/arm9/lib/src/GX_g3imm.c +++ b/arm9/lib/src/GX_g3imm.c @@ -3,16 +3,16 @@ #include "gx.h" ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ - SETREG32(HW_REG_GXFIFO, 0x17); - GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); + reg_G3X_GXFIFO = 0x17; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); } ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){ - SETREG32(HW_REG_GXFIFO, 0x19); - GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); + reg_G3X_GXFIFO = 0x19; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); } ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){ - SETREG32(HW_REG_GXFIFO, 0x1A); - MI_Copy36B(mtx, (void *)HW_REG_GXFIFO); + reg_G3X_GXFIFO = 0x1A; + MI_Copy36B(mtx, (void *)®_G3X_GXFIFO); } diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index e76adce7..5a03c4ca 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -46,190 +46,190 @@ ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ ARM_FUNC void G3X_Init(){ G3X_ClearFifo(); - SETREG32(HW_REG_END_VTXS, 0x0); - while (READREG32(HW_REG_GXSTAT) & 0x8000000); //wait for geometry engine to not be busy - SETREG16(HW_REG_DISP3DCNT, 0x0); - SETREG32(HW_REG_GXSTAT, 0x0); - SETREG32(HW_REG_BG0HOFS, 0x0); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3002); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3000 | 0x10); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3004); - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) & ~0xC0000000 | 0x80000000); + reg_G3_END_VTXS = 0x0; + while (reg_G3X_GXSTAT & 0x8000000); //wait for geometry engine to not be busy + reg_G3X_DISP3DCNT = 0x0; + reg_G3X_GXSTAT = 0x0; + reg_G2_BG0OFS = 0x0; + reg_G3X_DISP3DCNT |= 0x2000; + reg_G3X_DISP3DCNT |= 0x1000; + reg_G3X_DISP3DCNT &= ~0x3002; + reg_G3X_DISP3DCNT = reg_G3X_DISP3DCNT & ~0x3000 | 0x10; + reg_G3X_DISP3DCNT = reg_G3X_DISP3DCNT & (u16)~0x3004; + reg_G3X_GXSTAT |= 0x8000; + reg_G3X_GXSTAT = reg_G3X_GXSTAT & ~0xC0000000 | 0x80000000; G3X_InitMtxStack(); - SETREG32(HW_REG_CLEAR_COLOR, 0x0); - SETREG16(HW_REG_CLEAR_DEPTH, 0x7FFF); - SETREG16(HW_REG_CLRIMAGE_OFFSET, 0x0); - SETREG32(HW_REG_FOG_COLOR, 0x0); - SETREG16(HW_REG_FOG_OFFSET, 0x0); - SETREG16(HW_REG_BG0CNT, READREG16(HW_REG_BG0CNT) & ~0x3); + reg_G3X_CLEAR_COLOR = 0x0; + reg_G3X_CLEAR_DEPTH = 0x7FFF; + reg_G3X_CLRIMAGE_OFFSET = 0x0; + reg_G3X_FOG_COLOR = 0x0; + reg_G3X_FOG_OFFSET = 0x0; + reg_G2_BG0CNT &= ~0x3; G3X_InitTable(); - SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); - SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); - SETREG32(HW_REG_PLTT_BASE, 0x0); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; } ARM_FUNC void G3X_ResetMtxStack(){ - while (READREG32(HW_REG_GXSTAT) & 0x8000000); - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); + while (reg_G3X_GXSTAT & 0x8000000); + reg_G3X_GXSTAT |= 0x8000; + reg_G3X_DISP3DCNT |= 0x2000; + reg_G3X_DISP3DCNT |= 0x1000; G3X_ResetMtxStack_2(); - SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); - SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); - SETREG32(HW_REG_PLTT_BASE, 0x0); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; } ARM_FUNC void G3X_ClearFifo(){ - GXi_NopClearFifo128_((void *)HW_REG_GXFIFO); - while (READREG32(HW_REG_GXSTAT) & 0x8000000); + GXi_NopClearFifo128_((void *)®_G3X_GXFIFO); + while (reg_G3X_GXSTAT & 0x8000000); } ARM_FUNC void G3X_InitMtxStack(){ u32 PV_level, PJ_level; - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + reg_G3X_GXSTAT |= 0x8000; while (G3X_GetMtxStackLevelPV(&PV_level)); while (G3X_GetMtxStackLevelPJ(&PJ_level)); - SETREG32(HW_REG_MTX_MODE, 0x3); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); - SETREG32(HW_REG_MTX_MODE, 0x0); + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; if (PJ_level) { - SETREG32(HW_REG_MTX_POP, PJ_level); + reg_G3_MTX_POP = PJ_level; } - SETREG32(HW_REG_MTX_IDENTITY, 0x0); - SETREG32(HW_REG_MTX_MODE, 0x2); - SETREG32(HW_REG_MTX_POP, PV_level); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x2; + reg_G3_MTX_POP = PV_level; + reg_G3_MTX_IDENTITY = 0x0; } ARM_FUNC void G3X_ResetMtxStack_2(){ u32 PV_level, PJ_level; - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + reg_G3X_GXSTAT |= 0x8000; while (G3X_GetMtxStackLevelPV(&PV_level)); while (G3X_GetMtxStackLevelPJ(&PJ_level)); - SETREG32(HW_REG_MTX_MODE, 0x3); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); - SETREG32(HW_REG_MTX_MODE, 0x0); + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; if (PJ_level) { - SETREG32(HW_REG_MTX_POP, PJ_level); + reg_G3_MTX_POP = PJ_level; } - SETREG32(HW_REG_MTX_MODE, 0x2); - SETREG32(HW_REG_MTX_POP, PV_level); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); + reg_G3_MTX_MODE = 0x2; + reg_G3_MTX_POP = PV_level; + reg_G3_MTX_IDENTITY = 0x0; } ARM_FUNC void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ if (enable) { - SETREG16(HW_REG_FOG_OFFSET, offset); - SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 ))); + reg_G3X_FOG_OFFSET = offset; + reg_G3X_DISP3DCNT = (reg_G3X_DISP3DCNT &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 )); } else { - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3080); + reg_G3X_DISP3DCNT = reg_G3X_DISP3DCNT & (u16)~0x3080; } } ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){ - if (READREG32(HW_REG_GXSTAT) & 0x8000000) + if (reg_G3X_GXSTAT & 0x8000000) { return -1; } else { - MI_Copy64B((void *)HW_REG_CLIPMTX_RESULT, dst); + MI_Copy64B((void *)®_G3X_CLIPMTX_RESULT_0, dst); return 0; } } ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){ - if (READREG32(HW_REG_GXSTAT) & 0x8000000) + if (reg_G3X_GXSTAT & 0x8000000) { return -1; } else { - MI_Copy36B((void *)HW_REG_VECMTX_RESULT, dst); + MI_Copy36B((void *)®_G3X_VECMTX_RESULT_0, dst); return 0; } } ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ - MIi_CpuCopy16(tbl_ptr, (void *)HW_REG_EDGE_COLOR, 0x10); + MIi_CpuCopy16(tbl_ptr, (void *)®_G3X_EDGE_COLOR_0, 0x10); } ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ - MI_Copy16B(tbl_ptr, (void *)HW_REG_FOG_TABLE); + MI_Copy16B(tbl_ptr, (void *)®_G3X_FOG_TABLE_0); } ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); if (enable_fog) temp |= 0x8000; - SETREG32(HW_REG_CLEAR_COLOR, temp); - SETREG16(HW_REG_CLEAR_DEPTH, depth); + reg_G3X_CLEAR_COLOR = temp; + reg_G3X_CLEAR_DEPTH = depth; } ARM_FUNC void G3X_InitTable(){ if (UNK_02106814 != -1) { - MI_DmaFill32Async(UNK_02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); - MI_DmaFill32(UNK_02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); + MI_DmaFill32Async(UNK_02106814, (void *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(UNK_02106814, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); } else { - MIi_CpuClear32(0x0, (void *)HW_REG_EDGE_COLOR, 0x10); - MIi_CpuClear32(0x0, (void *)HW_REG_FOG_TABLE, 0x60); + MIi_CpuClear32(0x0, (void *)®_G3X_EDGE_COLOR_0, 0x10); + MIi_CpuClear32(0x0, (void *)®_G3X_FOG_TABLE_0, 0x60); } for (int i = 0; i < 0x20; i++) { - SETREG32(HW_REG_SHININESS, 0x0); + reg_G3_SHININESS = 0x0; } } ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){ - if (READREG32(HW_REG_GXSTAT) & 0x4000) + if (reg_G3X_GXSTAT & 0x4000) { return -1; } else { - *level = (READREG32(HW_REG_GXSTAT) & 0x1F00) >> 0x8; + *level = (reg_G3X_GXSTAT & 0x1F00) >> 0x8; return 0; } } ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){ - if (READREG32(HW_REG_GXSTAT) & 0x4000) + if (reg_G3X_GXSTAT & 0x4000) { return -1; } else { - *level = (READREG32(HW_REG_GXSTAT) & 0x2000) >> 0xD; + *level = (reg_G3X_GXSTAT & 0x2000) >> 0xD; return 0; } } ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){ - if (READREG32(HW_REG_GXSTAT) & 0x1) + if (reg_G3X_GXSTAT & 0x1) { return -1; } else { - *result = (READREG32(HW_REG_GXSTAT) & 0x2); + *result = (reg_G3X_GXSTAT & 0x2); return 0; } } ARM_FUNC void G3X_SetHOffset(u32 offset){ - SETREG32(HW_REG_BG0HOFS, offset); + reg_G2_BG0OFS = offset; } diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index 79a53ee7..7da3e1b4 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -18,9 +18,9 @@ ARM_FUNC void GX_InitGXState(){ UNK_021D33C4.var14 = 0x0; UNK_021D33C4.var16 = 0x0; UNK_021D33C4.var18 = 0x0; - SETREG32(HW_REG_VRAMCNT_A, 0x0); - SETREG8(HW_REG_VRAMCNT_E, 0x0); - SETREG8(HW_REG_VRAMCNT_F, 0x0); - SETREG8(HW_REG_VRAMCNT_G, 0x0); - SETREG16(HW_REG_VRAMCNT_H, 0x0); + reg_GX_VRAMCNT = 0x0; + reg_GX_VRAMCNT_E = 0x0; + reg_GX_VRAMCNT_F = 0x0; + reg_GX_VRAMCNT_G = 0x0; + reg_GX_VRAM_HI_CNT = 0x0; } diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index fdedca46..18507fa4 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -7,23 +7,23 @@ extern struct VRAM_banks UNK_021D33C4; ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) - SETREG8(HW_REG_VRAMCNT_A, 0x80); + reg_GX_VRAMCNT_A = 0x80; if (mask & (0x1 << 1)) - SETREG8(HW_REG_VRAMCNT_B, 0x80); + reg_GX_VRAMCNT_B = 0x80; if (mask & (0x1 << 2)) - SETREG8(HW_REG_VRAMCNT_C, 0x80); + reg_GX_VRAMCNT_C = 0x80; if (mask & (0x1 << 3)) - SETREG8(HW_REG_VRAMCNT_D, 0x80); + reg_GX_VRAMCNT_D = 0x80; if (mask & (0x1 << 4)) - SETREG8(HW_REG_VRAMCNT_E, 0x80); + reg_GX_VRAMCNT_E = 0x80; if (mask & (0x1 << 5)) - SETREG8(HW_REG_VRAMCNT_F, 0x80); + reg_GX_VRAMCNT_F = 0x80; if (mask & (0x1 << 6)) - SETREG8(HW_REG_VRAMCNT_G, 0x80); + reg_GX_VRAMCNT_G = 0x80; if (mask & (0x1 << 7)) - SETREG8(HW_REG_VRAMCNT_H, 0x80); + reg_GX_VRAMCNT_H = 0x80; if (mask & (0x1 << 8)) - SETREG8(HW_REG_VRAMCNT_I, 0x80); + reg_GX_VRAMCNT_I = 0x80; } ARM_FUNC void GX_SetBankForBG(s32 bg){ @@ -32,66 +32,66 @@ ARM_FUNC void GX_SetBankForBG(s32 bg){ switch (bg) { case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x81); + reg_GX_VRAMCNT_D = 0x81; break; case 12: - SETREG8(HW_REG_VRAMCNT_D, 0x89); + reg_GX_VRAMCNT_D = 0x89; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x81); + reg_GX_VRAMCNT_C = 0x81; break; case 14: - SETREG8(HW_REG_VRAMCNT_D, 0x91); + reg_GX_VRAMCNT_D = 0x91; case 6: - SETREG8(HW_REG_VRAMCNT_C, 0x89); + reg_GX_VRAMCNT_C = 0x89; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x81); + reg_GX_VRAMCNT_B = 0x81; break; case 15: - SETREG8(HW_REG_VRAMCNT_D, 0x99); + reg_GX_VRAMCNT_D = 0x99; case 7: - SETREG8(HW_REG_VRAMCNT_C, 0x91); + reg_GX_VRAMCNT_C = 0x91; case 3: - SETREG8(HW_REG_VRAMCNT_B, 0x89); + reg_GX_VRAMCNT_B = 0x89; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x81); + reg_GX_VRAMCNT_A = 0x81; break; case 11: - SETREG8(HW_REG_VRAMCNT_A, 0x81); - SETREG8(HW_REG_VRAMCNT_B, 0x89); - SETREG8(HW_REG_VRAMCNT_D, 0x91); + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_B = 0x89; + reg_GX_VRAMCNT_D = 0x91; break; case 13: - SETREG8(HW_REG_VRAMCNT_D, 0x91); + reg_GX_VRAMCNT_D = 0x91; case 5: - SETREG8(HW_REG_VRAMCNT_A, 0x81); - SETREG8(HW_REG_VRAMCNT_C, 0x89); + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_C = 0x89; break; case 9: - SETREG8(HW_REG_VRAMCNT_A, 0x81); - SETREG8(HW_REG_VRAMCNT_D, 0x89); + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_D = 0x89; break; case 10: - SETREG8(HW_REG_VRAMCNT_B, 0x81); - SETREG8(HW_REG_VRAMCNT_D, 0x89); + reg_GX_VRAMCNT_B = 0x81; + reg_GX_VRAMCNT_D = 0x89; break; case 112: - SETREG8(HW_REG_VRAMCNT_G, 0x99); + reg_GX_VRAMCNT_G = 0x99; case 48: - SETREG8(HW_REG_VRAMCNT_F, 0x91); + reg_GX_VRAMCNT_F = 0x91; case 16: - SETREG8(HW_REG_VRAMCNT_E, 0x81); + reg_GX_VRAMCNT_E = 0x81; break; case 80: - SETREG8(HW_REG_VRAMCNT_G, 0x91); - SETREG8(HW_REG_VRAMCNT_E, 0x81); + reg_GX_VRAMCNT_G = 0x91; + reg_GX_VRAMCNT_E = 0x81; break; case 96: - SETREG8(HW_REG_VRAMCNT_G, 0x89); + reg_GX_VRAMCNT_G = 0x89; case 32: - SETREG8(HW_REG_VRAMCNT_F, 0x81); + reg_GX_VRAMCNT_F = 0x81; break; case 64: - SETREG8(HW_REG_VRAMCNT_G, 0x81); + reg_GX_VRAMCNT_G = 0x81; break; default: break; @@ -105,32 +105,32 @@ ARM_FUNC void GX_SetBankForOBJ(s32 obj){ switch (obj) { case 3: - SETREG8(HW_REG_VRAMCNT_B, 0x8A); + reg_GX_VRAMCNT_B = 0x8A; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x82); + reg_GX_VRAMCNT_A = 0x82; case 0: //needed to match break; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x82); + reg_GX_VRAMCNT_B = 0x82; break; case 112: - SETREG8(HW_REG_VRAMCNT_G, 0x9A); + reg_GX_VRAMCNT_G = 0x9A; case 48: - SETREG8(HW_REG_VRAMCNT_F, 0x92); + reg_GX_VRAMCNT_F = 0x92; case 16: - SETREG8(HW_REG_VRAMCNT_E, 0x82); + reg_GX_VRAMCNT_E = 0x82; break; case 80: - SETREG8(HW_REG_VRAMCNT_G, 0x92); - SETREG8(HW_REG_VRAMCNT_E, 0x82); + reg_GX_VRAMCNT_G = 0x92; + reg_GX_VRAMCNT_E = 0x82; break; case 96: - SETREG8(HW_REG_VRAMCNT_G, 0x8A); + reg_GX_VRAMCNT_G = 0x8A; case 32: - SETREG8(HW_REG_VRAMCNT_F, 0x82); + reg_GX_VRAMCNT_F = 0x82; break; case 64: - SETREG8(HW_REG_VRAMCNT_G, 0x82); + reg_GX_VRAMCNT_G = 0x82; break; default: break; @@ -144,21 +144,21 @@ ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ switch (bgextpltt) { case 0x10: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); - SETREG8(HW_REG_VRAMCNT_E, 0x84); + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_E = 0x84; break; case 0x40: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); - SETREG8(HW_REG_VRAMCNT_G, 0x8C); + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_G = 0x8C; break; case 0x60: - SETREG8(HW_REG_VRAMCNT_G, 0x8C); + reg_GX_VRAMCNT_G = 0x8C; case 0x20: - SETREG8(HW_REG_VRAMCNT_F, 0x84); - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + reg_GX_VRAMCNT_F = 0x84; + reg_GX_DISPCNT |= 0x40000000; break; case 0: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + reg_GX_DISPCNT &= ~0x40000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -170,15 +170,15 @@ ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ switch (objextpltt) { case 32: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); - SETREG8(HW_REG_VRAMCNT_F, 0x85); + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_F = 0x85; break; case 64: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); - SETREG8(HW_REG_VRAMCNT_G, 0x85); + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_G = 0x85; break; case 0: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + reg_GX_DISPCNT &= ~0x80000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -189,58 +189,58 @@ ARM_FUNC void GX_SetBankForTex(s32 tex){ UNK_021D33C4.var08 = tex; if (tex == 0) { - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & 0x0000CFFE); + reg_G3X_DISP3DCNT &= 0x0000CFFE; } else { - SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) & ~0x3000) | 0x1); + reg_G3X_DISP3DCNT = (reg_G3X_DISP3DCNT & ~0x3000) | 0x1; switch (tex) { case 5: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_C, 0x8B); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; break; case 9: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_D, 0x8B); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_D = 0x8B; break; case 10: - SETREG8(HW_REG_VRAMCNT_B, 0x83); - SETREG8(HW_REG_VRAMCNT_D, 0x8B); + reg_GX_VRAMCNT_B = 0x83; + reg_GX_VRAMCNT_D = 0x8B; break; case 11: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_B, 0x8B); - SETREG8(HW_REG_VRAMCNT_D, 0x93); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_B = 0x8B; + reg_GX_VRAMCNT_D = 0x93; break; case 13: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_C, 0x8B); - SETREG8(HW_REG_VRAMCNT_D, 0x93); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + reg_GX_VRAMCNT_D = 0x93; break; case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x83); + reg_GX_VRAMCNT_D = 0x83; break; case 12: - SETREG8(HW_REG_VRAMCNT_D, 0x8B); + reg_GX_VRAMCNT_D = 0x8B; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x83); + reg_GX_VRAMCNT_C = 0x83; break; case 14: - SETREG8(HW_REG_VRAMCNT_D, 0x93); + reg_GX_VRAMCNT_D = 0x93; case 6: - SETREG8(HW_REG_VRAMCNT_C, 0x8B); + reg_GX_VRAMCNT_C = 0x8B; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x83); + reg_GX_VRAMCNT_B = 0x83; break; case 15: - SETREG8(HW_REG_VRAMCNT_D, 0x9B); + reg_GX_VRAMCNT_D = 0x9B; case 7: - SETREG8(HW_REG_VRAMCNT_C, 0x93); + reg_GX_VRAMCNT_C = 0x93; case 3: - SETREG8(HW_REG_VRAMCNT_B, 0x8B); + reg_GX_VRAMCNT_B = 0x8B; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x83); + reg_GX_VRAMCNT_A = 0x83; break; } } @@ -255,19 +255,19 @@ ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ case 0: //needed to match break; case 96: - SETREG8(HW_REG_VRAMCNT_G, 0x8B); + reg_GX_VRAMCNT_G = 0x8B; case 32: - SETREG8(HW_REG_VRAMCNT_F, 0x83); + reg_GX_VRAMCNT_F = 0x83; break; case 112: - SETREG8(HW_REG_VRAMCNT_G, 0x9B); + reg_GX_VRAMCNT_G = 0x9B; case 48: - SETREG8(HW_REG_VRAMCNT_F, 0x93); + reg_GX_VRAMCNT_F = 0x93; case 16: - SETREG8(HW_REG_VRAMCNT_E, 0x83); + reg_GX_VRAMCNT_E = 0x83; break; case 64: - SETREG8(HW_REG_VRAMCNT_G, 0x83); + reg_GX_VRAMCNT_G = 0x83; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -279,27 +279,27 @@ ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ switch (clearimage) { case 3: - SETREG8(HW_REG_VRAMCNT_A, 0x93); + reg_GX_VRAMCNT_A = 0x93; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_B = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; break; case 12: - SETREG8(HW_REG_VRAMCNT_C, 0x93); + reg_GX_VRAMCNT_C = 0x93; case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_D = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; break; case 0: - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x4000); + reg_G3X_DISP3DCNT &= ~0x4000; break; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_A = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; break; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_C = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } @@ -312,14 +312,14 @@ ARM_FUNC void GX_SetBankForARM7(s32 arm7){ case 0: //needed to match break; case 12: - SETREG8(HW_REG_VRAMCNT_D, 0x8A); - SETREG8(HW_REG_VRAMCNT_C, 0x82); + reg_GX_VRAMCNT_D = 0x8A; + reg_GX_VRAMCNT_C = 0x82; break; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x82); + reg_GX_VRAMCNT_C = 0x82; break; case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x82); + reg_GX_VRAMCNT_D = 0x82; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } @@ -337,12 +337,12 @@ ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ case 0: //needed to match break; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x84); + reg_GX_VRAMCNT_C = 0x84; break; case 384: - SETREG8(HW_REG_VRAMCNT_I, 0x81); + reg_GX_VRAMCNT_I = 0x81; case 128: - SETREG8(HW_REG_VRAMCNT_H, 0x81); + reg_GX_VRAMCNT_H = 0x81; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } @@ -354,10 +354,10 @@ ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ switch (subobj) { case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x84); + reg_GX_VRAMCNT_D = 0x84; break; case 256: - SETREG8(HW_REG_VRAMCNT_I, 0x82); + reg_GX_VRAMCNT_I = 0x82; break; case 0: //needed to match break; @@ -371,11 +371,11 @@ ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ switch (subbgextpltt) { case 128: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x40000000); - SETREG8(HW_REG_VRAMCNT_H, 0x82); + reg_GXS_DB_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_H = 0x82; break; case 0: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + reg_GXS_DB_DISPCNT &= ~0x40000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -387,11 +387,11 @@ ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ switch (subobjextpltt) { case 256: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x80000000); - SETREG8(HW_REG_VRAMCNT_I, 0x83); + reg_GXS_DB_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_I = 0x83; break; case 0: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + reg_GXS_DB_DISPCNT &= ~0x80000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -414,12 +414,12 @@ ARM_FUNC u32 GX_ResetBankForOBJ(){ } ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + reg_GX_DISPCNT &= ~0x40000000; return FUN_020C6130(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + reg_GX_DISPCNT &= ~0x80000000; return FUN_020C6130(&UNK_021D33C4.var10); } @@ -444,12 +444,12 @@ ARM_FUNC u32 FUN_020C605C(){ } ARM_FUNC u32 FUN_020C6034(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + reg_GXS_DB_DISPCNT &= ~0x40000000; return FUN_020C6130(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_ResetBankForSubOBJ(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + reg_GXS_DB_DISPCNT &= ~0x80000000; return FUN_020C6130(&UNK_021D33C4.var18); } @@ -457,23 +457,23 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ u32 temp = *ptr; *ptr = 0; if (temp & (0x1 << 0)) - SETREG8(HW_REG_VRAMCNT_A, 0x0); + reg_GX_VRAMCNT_A = 0x0; if (temp & (0x1 << 1)) - SETREG8(HW_REG_VRAMCNT_B, 0x0); + reg_GX_VRAMCNT_B = 0x0; if (temp & (0x1 << 2)) - SETREG8(HW_REG_VRAMCNT_C, 0x0); + reg_GX_VRAMCNT_C = 0x0; if (temp & (0x1 << 3)) - SETREG8(HW_REG_VRAMCNT_D, 0x0); + reg_GX_VRAMCNT_D = 0x0; if (temp & (0x1 << 4)) - SETREG8(HW_REG_VRAMCNT_E, 0x0); + reg_GX_VRAMCNT_E = 0x0; if (temp & (0x1 << 5)) - SETREG8(HW_REG_VRAMCNT_F, 0x0); + reg_GX_VRAMCNT_F = 0x0; if (temp & (0x1 << 6)) - SETREG8(HW_REG_VRAMCNT_G, 0x0); + reg_GX_VRAMCNT_G = 0x0; if (temp & (0x1 << 7)) - SETREG8(HW_REG_VRAMCNT_H, 0x0); + reg_GX_VRAMCNT_H = 0x0; if (temp & (0x1 << 8)) - SETREG8(HW_REG_VRAMCNT_I, 0x0); + reg_GX_VRAMCNT_I = 0x0; OSi_UnlockVram((u16)temp, UNK_021D33BC); return temp; } @@ -487,12 +487,12 @@ ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ } ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + reg_GX_DISPCNT &= ~0x40000000; return FUN_020C5F28(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + reg_GX_DISPCNT &= ~0x80000000; return FUN_020C5F28(&UNK_021D33C4.var10); } @@ -525,12 +525,12 @@ ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ } ARM_FUNC u32 FUN_020C5E04(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + reg_GXS_DB_DISPCNT &= ~0x40000000; return FUN_020C5F28(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + reg_GXS_DB_DISPCNT &= ~0x80000000; return FUN_020C5F28(&UNK_021D33C4.var18); } -- cgit v1.2.3 From 2e1c3ccd3ff3035acc98b34c2b29ba5c865e6194 Mon Sep 17 00:00:00 2001 From: Made Date: Sun, 17 May 2020 01:40:01 +0200 Subject: struct defs --- arm9/data/bss_2.s | 4 +- arm9/lib/include/gx.h | 80 ++++++++++++++----------- arm9/lib/src/GX_g3.c | 36 +++++------ arm9/lib/src/GX_g3b.c | 130 ++++++++++++++++++++-------------------- arm9/lib/src/GX_state.c | 28 ++++----- arm9/lib/src/GX_vramcnt.c | 148 +++++++++++++++++++++++----------------------- arm9/undefined_syms.txt | 2 +- 7 files changed, 218 insertions(+), 210 deletions(-) diff --git a/arm9/data/bss_2.s b/arm9/data/bss_2.s index 5c9d538b..3832b009 100644 --- a/arm9/data/bss_2.s +++ b/arm9/data/bss_2.s @@ -940,8 +940,8 @@ UNK_021D33BC: ; 0x021D33BC UNK_021D33C0: ; 0x021D33C0 .space 0x4 - .global UNK_021D33C4 -UNK_021D33C4: ; 0x021D33C4 + .global gGXState +gGXState: ; 0x021D33C4 .space 0x2 .global UNK_021D33C6 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 58e4c35f..82f07a62 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -21,6 +21,12 @@ void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); //TODO: Add defines for GX commands, add structs/unions for HW registers +//TODO: structs +//TODO: useful macros +//TODO: inline functions +//TODO: enums +//TODO: function signatures + static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ if (var != -1 && size > 0x1C) @@ -55,35 +61,37 @@ static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, vo } } -struct DL +struct GXDLInfo { - u8 *var00; //end pointer - u32 *var04; //aligned end pointer, used to write data - u8 *var08; //start pointer - u32 var0C; - u32 var10; //pad end with zero bool + u8 *curr_cmd; + u32 *curr_param; + u32 *bottom; + u32 length; + BOOL param0_cmd_flg; }; -struct VRAM_banks + +struct GX_State { - u16 var00; //lcdc - u16 var02; //bg - u16 var04; //obj - u16 var06; //arm7 - u16 var08; //tex - u16 var0A; //texpltt - u16 var0C; //clearimage - u16 var0E; //bgextpltt - u16 var10; //objextpltt - u16 var12; //subbg - u16 var14; //subobj - u16 var16; //subbgextpltt - u16 var18; //subobjextpltt + u16 lcdc; + u16 bg; + u16 obj; + u16 arm7; + u16 tex; + u16 texPltt; + u16 clrImg; + u16 bgExtPltt; + u16 objExtPltt; + + u16 sub_bg; + u16 sub_obj; + u16 sub_bgExtPltt; + u16 sub_objExtPltt; }; //GX_g3 -void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct DL *displaylist); +void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct GXDLInfo *displaylist); //GX_g3_util void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); @@ -113,20 +121,20 @@ u32 G3X_GetBoxTestResult(u32 *result); void G3X_SetHOffset(u32 offset); //GX_g3b -void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); -void G3B_PushMtx(struct DL *displaylist); -void G3B_PopMtx(struct DL *displaylist, void *mtx); -void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); -void G3B_Color(struct DL * displaylist, u32 vtx_col); -void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z); -void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z); -void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); -void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); -void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); -void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); -void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col); -void G3B_Begin(struct DL * displaylist, u32 type); -void G3B_End(struct DL * displaylist); +void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_PushMtx(struct GXDLInfo *displaylist); +void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); +void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); +void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); +void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); +void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); +void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); +void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); +void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); +void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); +void G3B_Begin(struct GXDLInfo * displaylist, u32 type); +void G3B_End(struct GXDLInfo * displaylist); //GX_asm void GX_SendFifo48B(void *src, void *dst); diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c index eb01453d..379ee52b 100644 --- a/arm9/lib/src/GX_g3.c +++ b/arm9/lib/src/GX_g3.c @@ -3,34 +3,34 @@ #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_g3b.c b/arm9/lib/src/GX_g3b.c index 50281ec0..9a943bce 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -3,36 +3,36 @@ #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_state.c b/arm9/lib/src/GX_state.c index 7da3e1b4..db313c31 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -2,22 +2,22 @@ #include "main.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..da55d806 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -3,7 +3,7 @@ #include "gx.h" extern u16 UNK_021D33BC; -extern struct VRAM_banks UNK_021D33C4; +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){ @@ -479,101 +479,101 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ } 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/undefined_syms.txt b/arm9/undefined_syms.txt index 587556dc..25771881 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -23,7 +23,7 @@ SDK_OVERLAY_DIGEST_END = 0x02106F84; //GX gUnk021D33BC = 0x021D33BC; gUnk021D33C0 = 0x021D33C0; -UNK_021D33C4 = 0x021D33C4; +gGXState = 0x021D33C4; UNK_021D33E0 = 0x021D33E0; UNK_021D33E4 = 0x021D33E4; -- cgit v1.2.3 From 648c9421d8ecbd8642f4ae393ab8add89fb3dc00 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:10:36 +0200 Subject: Add enums and some other stuff and split header --- arm9/lib/include/GX_asm.h | 6 + arm9/lib/include/GX_bgcnt.h | 347 ++++++++++++++++++++++++++++++++++ arm9/lib/include/GX_dma.h | 53 ++++++ arm9/lib/include/GX_g2.h | 14 ++ arm9/lib/include/GX_g3.h | 184 ++++++++++++++++++ arm9/lib/include/GX_g3_util.h | 11 ++ arm9/lib/include/GX_g3b.h | 21 +++ arm9/lib/include/GX_g3imm.h | 10 + arm9/lib/include/GX_g3x.h | 69 +++++++ arm9/lib/include/GX_load2d.h | 41 ++++ arm9/lib/include/GX_load3d.h | 15 ++ arm9/lib/include/GX_state.h | 24 +++ arm9/lib/include/GX_struct_2d.h | 243 ++++++++++++++++++++++++ arm9/lib/include/GX_vramcnt.h | 57 ++++++ arm9/lib/include/GXcommon.h | 29 +++ arm9/lib/include/gx.h | 406 +++++++++++++++------------------------- arm9/lib/src/GX_load2d.c | 68 ++++--- arm9/lib/src/GX_load3d.c | 21 +-- 18 files changed, 1317 insertions(+), 302 deletions(-) create mode 100644 arm9/lib/include/GX_asm.h create mode 100644 arm9/lib/include/GX_bgcnt.h create mode 100644 arm9/lib/include/GX_dma.h create mode 100644 arm9/lib/include/GX_g2.h create mode 100644 arm9/lib/include/GX_g3.h create mode 100644 arm9/lib/include/GX_g3_util.h create mode 100644 arm9/lib/include/GX_g3b.h create mode 100644 arm9/lib/include/GX_g3imm.h create mode 100644 arm9/lib/include/GX_g3x.h create mode 100644 arm9/lib/include/GX_load2d.h create mode 100644 arm9/lib/include/GX_load3d.h create mode 100644 arm9/lib/include/GX_state.h create mode 100644 arm9/lib/include/GX_struct_2d.h create mode 100644 arm9/lib/include/GX_vramcnt.h create mode 100644 arm9/lib/include/GXcommon.h 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/gx.h b/arm9/lib/include/gx.h index 82f07a62..877e5bb2 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -4,286 +4,184 @@ #include "fx.h" //temporary while other files aren't decompiled -void MIi_CpuCopy16(void *, void *, u32); + void GXi_NopClearFifo128_(void *); -void MI_Copy16B(void *, void *); +void MI_Copy16B(const void *, void *); void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); void MI_DmaFill32(u32, void *, u32, u32); void MIi_CpuClear32(u32, void *, u32); void MI_Copy64B(void *src, void *dst); void MI_WaitDma(u32); -void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *); -void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy16(void *src, void *dst, u32 size); -void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy32(void *src, void *dst, u32 size); +void MI_DmaCopy32Async(u32, const void *, void *, u32, void *, void *); +void MI_DmaCopy16(u32 unk, const void *src, void *dst, u32 size); +void MIi_CpuCopy16(const void *src, void *dst, u32 size); +void MI_DmaCopy32(u32 unk, const void *src, void *dst, u32 size); +void MIi_CpuCopy32(const void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//TODO: Add defines for GX commands, add structs/unions for HW registers -//TODO: structs -//TODO: useful macros -//TODO: inline functions -//TODO: enums -//TODO: function signatures +//DONE: Add defines for GX commands, add structs/unions for HW registers +//DONE: structs +//DONE: useful macros +//DONE: inline functions used in sdk +//DONE: enums +//DONE: maybe some function signatures +//TODO: proper global names + +#include "GXcommon.h" +#include "GX_struct_2d.h" +#include "GX_g3.h" +#include "GX_g3_util.h" +#include "GX_g3x.h" +#include "GX_g3b.h" +#include "GX_asm.h" +#include "GX_vramcnt.h" +#include "GX_bgcnt.h" +#include "GX_load2d.h" +#include "GX_load3d.h" +#include "GX_g2.h" +#include "GX_state.h" +#include "GX_g3imm.h" +#include "GX_dma.h" +void GX_Init(); +u32 GX_HBlankIntr(u32 enable); +u32 GX_VBlankIntr(u32 enable); +void GX_DispOff(); +void GX_DispOn(); +void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); +void GXS_SetGraphicsMode(u32 mode); +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); -static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ - if (var != -1 && size > 0x1C) - { - MI_DmaCopy16(var, src, dst, size); - } - else +typedef union +{ + u32 raw; + struct { - MIi_CpuCopy16(src, dst, size); - } + u32 bgMode:3; + u32 bg0_2d3d:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:4; + u32 extObjMapChar:2; + u32 extObjMapBmp:1; + u32 hBlankObjProc:1; + u32 bgCharOffset:3; + u32 bgScrOffset:3; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; } +GXDispCnt; -static inline void _GX_Load_32(u32 var, void *src, void *dst, u32 size){ - if (var != -1 && size > 0x30) - { - MI_DmaCopy32(var, src, dst, size); - } - else +typedef union +{ + u32 raw; + struct { - MIi_CpuCopy32(src, dst, size); - } + u32 bgMode:3; + u32 _reserve1:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:1; + u32 _reserve2:3; + u32 extObjMapChar:2; + u32 _reserve3:1; + u32 hBlankObjProc:1; + u32 _reserve4:6; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; } +GXSDispCnt; -static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, void *func, void *ptr){ - if (var != -1) - { - MI_DmaCopy32Async(var, src, dst, size, func, ptr); - } - else - { - MIi_CpuCopy32(src, dst, size); - } +typedef enum +{ + GX_BGMODE_0 = 0, + GX_BGMODE_1 = 1, + GX_BGMODE_2 = 2, + GX_BGMODE_3 = 3, + GX_BGMODE_4 = 4, + GX_BGMODE_5 = 5, + GX_BGMODE_6 = 6 } +GXBGMode; -struct GXDLInfo +typedef enum { - u8 *curr_cmd; - u32 *curr_param; - u32 *bottom; - u32 length; - BOOL param0_cmd_flg; -}; - + GX_BG0_AS_2D = 0, + GX_BG0_AS_3D = 1 +} +GXBG0As; -struct GX_State +typedef enum { - u16 lcdc; - u16 bg; - u16 obj; - u16 arm7; - u16 tex; - u16 texPltt; - u16 clrImg; - u16 bgExtPltt; - u16 objExtPltt; - - u16 sub_bg; - u16 sub_obj; - u16 sub_bgExtPltt; - u16 sub_objExtPltt; -}; - -//GX_g3 -void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct GXDLInfo *displaylist); - -//GX_g3_util -void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); -void G3_RotX(fx32 sinphi, fx32 cosphi); -void G3_RotY(fx32 sinphi, fx32 cosphi); -void G3_RotZ(fx32 sinphi, fx32 cosphi); - -//GX_g3x -void GXi_NopClearFifo128_(void *reg); -void G3X_Init(); -void G3X_ResetMtxStack(); -void G3X_ClearFifo(); -void G3X_InitMtxStack(); -void G3X_ResetMtxStack_2(); -void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); -u32 G3X_GetClipMtx(struct Mtx44 *dst); -u32 G3X_GetVectorMtx(struct Mtx33 *dst); -void G3X_SetEdgeColorTable(void *tbl_ptr); -void G3X_SetFogTable(void *tbl_ptr); -void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); -void G3X_InitTable(); -u32 G3X_GetMtxStackLevelPV(u32 *level); -u32 G3X_GetMtxStackLevelPJ(u32 *level); -u32 G3X_GetBoxTestResult(u32 *result); -void G3X_SetHOffset(u32 offset); - -//GX_g3b -void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_PushMtx(struct GXDLInfo *displaylist); -void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); -void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); -void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); -void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); -void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); -void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); -void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); -void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); -void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); -void G3B_Begin(struct GXDLInfo * displaylist, u32 type); -void G3B_End(struct GXDLInfo * displaylist); - -//GX_asm -void GX_SendFifo48B(void *src, void *dst); - -//GX_vramcnt -//some of the symbols don't match what the function does -void GX_VRAMCNT_SetLCDC_(u32 mask); -void GX_SetBankForBG(s32 bg); -void GX_SetBankForOBJ(s32 obj); -void GX_SetBankForBGExtPltt(s32 bgextpltt); -void GX_SetBankForOBJExtPltt(s32 objextpltt); -void GX_SetBankForTex(s32 tex); -void GX_SetBankForTexPltt(s32 texpltt); -void GX_SetBankForClearImage(s32 clearimage); -void GX_SetBankForARM7(s32 arm7); -void GX_SetBankForLCDC(s32 lcdc); -void GX_SetBankForSubBG(s32 subbg); -void GX_SetBankForSubOBJ(s32 subobj); -void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); -void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); -u32 FUN_020C6130(u16 *ptr); -u32 GX_ResetBankForBG(); -u32 GX_ResetBankForOBJ(); -u32 GX_ResetBankForBGExtPltt(); -u32 GX_ResetBankForOBJExtPltt(); -u32 GX_ResetBankForTex(); -u32 GX_ResetBankForTexPltt(); -u32 GX_ResetBankForClearImage(); -u32 GX_ResetBankForSubBG(); -u32 FUN_020C605C(); -u32 FUN_020C6034(); -u32 GX_ResetBankForSubOBJ(); -u32 FUN_020C5F28(u16 *ptr); -u32 disableBankForX_(); -u32 GX_DisableBankForOBJExtPltt_2(); -u32 GX_DisableBankForBGExtPltt(); -u32 GX_DisableBankForOBJExtPltt(); -u32 GX_DisableBankForTexPltt_2(); -u32 GX_DisableBankForTexPltt(); -u32 GX_DisableBankForClearImage(); -u32 GX_DisableBankForARM7(); -u32 GX_DisableBankForLCDC(); -u32 GX_DisableBankForSubBGExtPltt(); -u32 GX_DisableBankForSubOBJExtPltt_2(); -u32 FUN_020C5E04(); -u32 GX_DisableBankForSubOBJExtPltt(); -u32 GX_GetBankForBGExtPltt_2(); -u32 GX_GetBankForOBJ(); -u32 GX_GetBankForBGExtPltt(); -u32 GX_GetBankForOBJExtPltt(); -u32 FUN_020C5D8C(); -u32 GX_GetBankForTexPltt(); -u32 GX_GetBankForLCDC(); -u32 GX_GetBankForSubBGExtPltt_2(); -u32 GX_GetBankForSubOBJ(); -u32 GX_GetBankForSubBGExtPltt(); -u32 GX_GetBankForSubOBJExtPltt(); - -//GX_bgcnt -void *G2_GetBG0ScrPtr(); -void *G2S_GetBG0ScrPtr(); -void *G2_GetBG1ScrPtr(); -void *G2S_GetBG1ScrPtr(); -void *G2_GetBG2ScrPtr(); -void *G2S_GetBG2ScrPtr(); -void *G2_GetBG3ScrPtr(); -void *G2S_GetBG3ScrPtr(); -void *G2_GetBG0CharPtr(); -void *G2S_GetBG0CharPtr(); -void *G2_GetBG1CharPtr(); -void *G2S_GetBG1CharPtr(); -void *G2_GetBG2CharPtr(); -void *G2S_GetBG2CharPtr(); -void *G2_GetBG3CharPtr(); -void *G2S_GetBG3CharPtr(); - -//GX_load2d -void GX_LoadBGPltt(void *src, u32 offset, u32 size); -void GXS_LoadBGPltt(void *src, u32 offset, u32 size); -void GX_LoadOBJPltt(void *src, u32 offset, u32 size); -void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); -void GX_LoadOAM(void *src, u32 offset, u32 size); -void GXS_LoadOAM(void *src, u32 offset, u32 size); -void GX_LoadOBJ(void *src, u32 offset, u32 size); -void GXS_LoadOBJ(void *src, u32 offset, u32 size); -void GX_LoadBG0Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); -void GX_LoadBG1Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); -void GX_LoadBG2Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); -void GX_LoadBG3Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); -void GX_LoadBG0Char(void *src, u32 offset, u32 size); -void GXS_LoadBG0Char(void *src, u32 offset, u32 size); -void GX_LoadBG1Char(void *src, u32 offset, u32 size); -void GXS_LoadBG1Char(void *src, u32 offset, u32 size); -void GX_LoadBG2Char(void *src, u32 offset, u32 size); -void GXS_LoadBG2Char(void *src, u32 offset, u32 size); -void GX_LoadBG3Char(void *src, u32 offset, u32 size); -void GXS_LoadBG3Char(void *src, u32 offset, u32 size); -void GX_BeginLoadBGExtPltt(); -void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadBGExtPltt(); -void GX_BeginLoadOBJExtPltt(); -void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadOBJExtPltt(); -void GXS_BeginLoadBGExtPltt(); -void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadBGExtPltt(); -void GXS_BeginLoadOBJExtPltt(); -void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadOBJExtPltt(); + GX_DISPMODE_GRAPHICS = 0x01, + GX_DISPMODE_VRAM_A = 0x02, + GX_DISPMODE_VRAM_B = 0x06, + GX_DISPMODE_VRAM_C = 0x0a, + GX_DISPMODE_VRAM_D = 0x0e, + GX_DISPMODE_MMEM = 0x03 +} +GXDispMode; -//GX_load3d -void GX_BeginLoadTex(); -void GX_LoadTex(void *src, u32 offset, u32 size); -void GX_EndLoadTex(); -void GX_BeginLoadTexPltt(); -void GX_LoadTexPltt(void *src, u32 offset, u32 size); -void GX_EndLoadTexPltt(); -void GX_BeginLoadClearImage(); -void GX_LoadClearImageColor(void *src, u32 size); -void GX_LoadClearImageDepth(void *src, u32 size); -void GX_EndLoadClearImage(); +typedef enum +{ + GX_PLANEMASK_NONE = 0x00, + GX_PLANEMASK_BG0 = 0x01, + GX_PLANEMASK_BG1 = 0x02, + GX_PLANEMASK_BG2 = 0x04, + GX_PLANEMASK_BG3 = 0x08, + GX_PLANEMASK_OBJ = 0x10 +} +GXPlaneMask; -//GX -void GX_Init(); -u32 GX_HBlankIntr(u32 enable); -u32 GX_VBlankIntr(u32 enable); -void GX_DispOff(); -void GX_DispOn(); -void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); -void GXS_SetGraphicsMode(u32 mode); -void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); +typedef enum +{ + GX_WNDMASK_NONE = 0x00, + GX_WNDMASK_W0 = 0x01, + GX_WNDMASK_W1 = 0x02, + GX_WNDMASK_OW = 0x04 +} +GXWndMask; -//GX_g2 -void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); -void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); -void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); +typedef enum +{ + GX_BGCHAROFFSET_0x00000 = 0x00, + GX_BGCHAROFFSET_0x10000 = 0x01, + GX_BGCHAROFFSET_0x20000 = 0x02, + GX_BGCHAROFFSET_0x30000 = 0x03, + GX_BGCHAROFFSET_0x40000 = 0x04, + GX_BGCHAROFFSET_0x50000 = 0x05, + GX_BGCHAROFFSET_0x60000 = 0x06, + GX_BGCHAROFFSET_0x70000 = 0x07 +} +GXBGCharOffset; -//GX_state -void GX_InitGXState(); +typedef enum +{ + GX_BGSCROFFSET_0x00000 = 0x00, + GX_BGSCROFFSET_0x10000 = 0x01, + GX_BGSCROFFSET_0x20000 = 0x02, + GX_BGSCROFFSET_0x30000 = 0x03, + GX_BGSCROFFSET_0x40000 = 0x04, + GX_BGSCROFFSET_0x50000 = 0x05, + GX_BGSCROFFSET_0x60000 = 0x06, + GX_BGSCROFFSET_0x70000 = 0x07 +} +GXBGScrOffset; -//GX_g3imm -void G3_LoadMtx43(struct Mtx43 *mtx); -void G3_MultMtx43(struct Mtx43 *mtx); -void G3_MultMtx33(struct Mtx33 *mtx); +typedef enum +{ + GX_DISP_SELECT_SUB_MAIN = 0, + GX_DISP_SELECT_MAIN_SUB = 1 +} +GXDispSelect; #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index c0139c41..55faa915 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -21,117 +21,117 @@ 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, 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(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_BeginLoadBGExtPltt(){ @@ -157,12 +157,11 @@ ARM_FUNC void GX_BeginLoadBGExtPltt(){ } 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(UNK_02106814, src, (void *)(UNK_021D33F0 + offset - UNK_021D33EC), size, NULL, NULL); } ARM_FUNC void GX_EndLoadBGExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForBGExtPltt(UNK_021D33F4); UNK_021D33F4 = 0x0; UNK_021D33F0 = 0x0; @@ -185,12 +184,11 @@ ARM_FUNC void GX_BeginLoadOBJExtPltt(){ } 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(UNK_02106814, src, (void *)(UNK_021D33E4 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadOBJExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForOBJExtPltt(UNK_021D33E8); UNK_021D33E8 = 0x0; UNK_021D33E4 = 0x0; @@ -201,12 +199,11 @@ ARM_FUNC void GXS_BeginLoadBGExtPltt(){ } 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(UNK_02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadBGExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForSubBGExtPltt(UNK_021D33E0); UNK_021D33E0 = 0x0; } @@ -216,12 +213,11 @@ ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ } 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(UNK_02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadOBJExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForSubOBJExtPltt(UNK_021D33F8); UNK_021D33F8 = 0x0; } diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index 3a8a8c1d..31ddffc3 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -50,17 +50,16 @@ ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ 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); + GXi_DmaCopy32(UNK_02106814, src, temp, temp1); + GXi_DmaCopy32Async(UNK_02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); return; } } - _GX_Load_32_Async(UNK_02106814, src, temp, size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, temp, size, NULL, NULL); } ARM_FUNC void GX_EndLoadTex(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForTex(UNK_021D3410); UNK_021D3418 = 0x0; UNK_021D3414 = 0x0; @@ -75,12 +74,11 @@ ARM_FUNC void GX_BeginLoadTexPltt(){ } 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(UNK_02106814, src, (void *)(UNK_021D3404 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadTexPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForTexPltt(UNK_021D3408); UNK_021D3408 = 0x0; UNK_021D3404 = 0x0; @@ -108,16 +106,15 @@ ARM_FUNC void GX_BeginLoadClearImage(){ } ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D340C), 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(UNK_02106814, src, (void *)(UNK_021D340C + 0x20000), size, NULL, NULL); } ARM_FUNC void GX_EndLoadClearImage(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForClearImage(UNK_021D33FC); UNK_021D33FC = 0x0; UNK_021D340C = 0x0; -- cgit v1.2.3 From 8ac22ef273a2863591f7e382d2d8781cc434e8a5 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:32:07 +0200 Subject: Rename globals --- arm9/data/bss_2.s | 68 ++++++++++++------------ arm9/data/rom2_2.s | 16 +++--- arm9/data/rom2_3.s | 8 +-- arm9/lib/src/GX.c | 36 ++++++------- arm9/lib/src/GX_g3x.c | 8 +-- arm9/lib/src/GX_load2d.c | 130 +++++++++++++++++++++++----------------------- arm9/lib/src/GX_load3d.c | 106 ++++++++++++++++++------------------- arm9/lib/src/GX_vramcnt.c | 4 +- arm9/undefined_syms.txt | 40 +++++++------- 9 files changed, 208 insertions(+), 208 deletions(-) diff --git a/arm9/data/bss_2.s b/arm9/data/bss_2.s index 3832b009..1a39bbf1 100644 --- a/arm9/data/bss_2.s +++ b/arm9/data/bss_2.s @@ -932,12 +932,12 @@ 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 gGXState @@ -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 396d68dc..67a4d325 100644 --- a/arm9/data/rom2_2.s +++ b/arm9/data/rom2_2.s @@ -5075,20 +5075,20 @@ UNK_02103001: ; 0x02103001 FX_AtanTable_: ; 0x02103A38 .incbin "baserom.nds", 0x107a38, 0x104 - .global UNK_02103B3C -UNK_02103B3C: ; 0x02103B3C + .global sTexPlttStartAddrTable +sTexPlttStartAddrTable: ; 0x02103B3C .incbin "baserom.nds", 0x107b3c, 0x10 - .global UNK_02103B4C -UNK_02103B4C: ; 0x02103B4C + .global sTexStartAddrTable +sTexStartAddrTable: ; 0x02103B4C .incbin "baserom.nds", 0x107b4c, 0x2 - .global UNK_02103B4E -UNK_02103B4E: ; 0x02103B4E + .global sTexStartAddrTable +sTexStartAddrTable: ; 0x02103B4E .incbin "baserom.nds", 0x107b4e, 0x2 - .global UNK_02103B50 -UNK_02103B50: ; 0x02103B50 + .global sTexStartAddrTable +sTexStartAddrTable: ; 0x02103B50 .incbin "baserom.nds", 0x107b50, 0x5c .global UNK_02103BAC diff --git a/arm9/data/rom2_3.s b/arm9/data/rom2_3.s index a86431af..5e5d18de 100644 --- a/arm9/data/rom2_3.s +++ b/arm9/data/rom2_3.s @@ -1357,12 +1357,12 @@ UNK_021067D0: ; 0x021067D0 UNK_021067F0: ; 0x021067F0 .incbin "baserom.nds", 0x10a7f0, 0x20 - .global UNK_02106810 -UNK_02106810: ; 0x02106810 + .global sIsDispOn +sIsDispOn: ; 0x02106810 .incbin "baserom.nds", 0x10a810, 0x4 - .global UNK_02106814 -UNK_02106814: ; 0x02106814 + .global GXi_DmaId +GXi_DmaId: ; 0x02106814 .incbin "baserom.nds", 0x10a814, 0x4 .global OSi_IrqCallbackInfoIndex diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 883dfe69..8841d69a 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -2,10 +2,10 @@ #include "main.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 *)®_G2_BG0CNT, 0x0, 0x60); + MI_DmaFill32(GXi_DmaId, (void *)®_G2_BG0CNT, 0x0, 0x60); reg_GX_MASTER_BRIGHT = 0x0; - MI_DmaFill32(UNK_02106814, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); + MI_DmaFill32(GXi_DmaId, (void *)®_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_g3x.c b/arm9/lib/src/GX_g3x.c index 5a03c4ca..6f968e7e 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -2,7 +2,7 @@ #include "main.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 *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); - MI_DmaFill32(UNK_02106814, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); + MI_DmaFill32Async(GXi_DmaId, (void *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(GXi_DmaId, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); } else { diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 55faa915..17ab3694 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -2,15 +2,15 @@ #include "main.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,203 +21,203 @@ static inline void *_GXS_OBJ_PTR(){ } ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(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){ - GXi_DmaCopy16(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){ - GXi_DmaCopy16(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){ - GXi_DmaCopy16(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){ - GXi_DmaCopy32(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){ - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy16(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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(); - GXi_DmaCopy32(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){ - GXi_DmaCopy32Async(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(){ - GXi_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){ - GXi_DmaCopy32Async(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(){ - GXi_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){ - GXi_DmaCopy32Async(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(){ - GXi_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){ - GXi_DmaCopy32Async(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(){ - GXi_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 31ddffc3..db947ec9 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -2,120 +2,120 @@ #include "main.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[]; +extern u16 sTexStartAddrTable[]; +extern u16 sTexStartAddrTable[]; +extern u16 sTexStartAddrTable[]; -extern u32 UNK_021D3408; -extern u32 UNK_021D3404; -extern u16 UNK_02103B3C[]; +extern u32 sTexPltt; +extern u32 sTexPlttLCDCBlk; +extern u16 sTexPlttStartAddrTable[]; -extern s32 UNK_021D33FC; -extern u32 UNK_021D340C; +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 * 3] << 0xC; + sTexLCDCBlk2 = sTexStartAddrTable[temp * 3] << 0xC; + sSzTexBlk1 = sTexStartAddrTable[temp * 3] << 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); - GXi_DmaCopy32(UNK_02106814, src, temp, temp1); - GXi_DmaCopy32Async(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; } } - GXi_DmaCopy32Async(UNK_02106814, src, temp, size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, temp, size, NULL, NULL); } ARM_FUNC void GX_EndLoadTex(){ - GXi_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){ - GXi_DmaCopy32Async(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(){ - GXi_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){ - GXi_DmaCopy32Async(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){ - GXi_DmaCopy32Async(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(){ - GXi_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_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index da55d806..2b785198 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -2,7 +2,7 @@ #include "main.h" #include "gx.h" -extern u16 UNK_021D33BC; +extern u16 GXi_VRamLockId; extern struct GX_State gGXState; ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ @@ -474,7 +474,7 @@ 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; } diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 25771881..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 @@ -25,27 +25,27 @@ gUnk021D33BC = 0x021D33BC; gUnk021D33C0 = 0x021D33C0; 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; -- cgit v1.2.3 From 88e486100e449d8960894c9e30c4f21489ccbc31 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:33:11 +0200 Subject: rename main GX header --- arm9/lib/include/gx.h | 8 -------- arm9/lib/src/GX.c | 2 +- arm9/lib/src/GX_asm.c | 2 +- arm9/lib/src/GX_bgcnt.c | 2 +- arm9/lib/src/GX_g2.c | 2 +- arm9/lib/src/GX_g3.c | 2 +- arm9/lib/src/GX_g3_util.c | 2 +- arm9/lib/src/GX_g3b.c | 2 +- arm9/lib/src/GX_g3imm.c | 2 +- arm9/lib/src/GX_g3x.c | 2 +- arm9/lib/src/GX_load2d.c | 2 +- arm9/lib/src/GX_load3d.c | 2 +- arm9/lib/src/GX_state.c | 2 +- arm9/lib/src/GX_vramcnt.c | 2 +- 14 files changed, 13 insertions(+), 21 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 877e5bb2..8abe4e40 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -20,14 +20,6 @@ void MIi_CpuCopy32(const void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//DONE: Add defines for GX commands, add structs/unions for HW registers -//DONE: structs -//DONE: useful macros -//DONE: inline functions used in sdk -//DONE: enums -//DONE: maybe some function signatures -//TODO: proper global names - #include "GXcommon.h" #include "GX_struct_2d.h" #include "GX_g3.h" diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 8841d69a..28c3cc01 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u16 GXi_VRamLockId; extern u16 sDispMode; 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 379ee52b..2b5f2941 100644 --- a/arm9/lib/src/GX_g3.c +++ b/arm9/lib/src/GX_g3.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2){ 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 9a943bce..21698547 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ 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 6f968e7e..31508e06 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u32 GXi_DmaId; diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 17ab3694..d4def461 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u32 GXi_DmaId; diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index db947ec9..5f13deda 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u32 GXi_DmaId; diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index db313c31..3ca3b266 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern struct GX_State gGXState; diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index 2b785198..67749301 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u16 GXi_VRamLockId; extern struct GX_State gGXState; -- cgit v1.2.3 From 02abe0000a06299e32557591fa9e3396a6135242 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:58:04 +0200 Subject: Add proper struct for static data --- arm9/data/rom2_2.s | 10 +--------- arm9/lib/src/GX_load3d.c | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/arm9/data/rom2_2.s b/arm9/data/rom2_2.s index 67a4d325..cf2f03ea 100644 --- a/arm9/data/rom2_2.s +++ b/arm9/data/rom2_2.s @@ -5081,15 +5081,7 @@ sTexPlttStartAddrTable: ; 0x02103B3C .global sTexStartAddrTable sTexStartAddrTable: ; 0x02103B4C - .incbin "baserom.nds", 0x107b4c, 0x2 - - .global sTexStartAddrTable -sTexStartAddrTable: ; 0x02103B4E - .incbin "baserom.nds", 0x107b4e, 0x2 - - .global sTexStartAddrTable -sTexStartAddrTable: ; 0x02103B50 - .incbin "baserom.nds", 0x107b50, 0x5c + .incbin "baserom.nds", 0x107b4c, 0x60 .global UNK_02103BAC UNK_02103BAC: ; 0x02103BAC diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index 5f13deda..5aa15581 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -9,14 +9,18 @@ extern u32 sTexLCDCBlk1; extern u32 sTexLCDCBlk2; extern u32 sSzTexBlk1; -//probably structs of length 0x6 -extern u16 sTexStartAddrTable[]; -extern u16 sTexStartAddrTable[]; -extern u16 sTexStartAddrTable[]; +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 sTexPltt; extern u32 sTexPlttLCDCBlk; -extern u16 sTexPlttStartAddrTable[]; +extern u16 sTexPlttStartAddrTable[8]; extern s32 sClrImg; extern u32 sClrImgLCDCBlk; @@ -24,9 +28,9 @@ extern u32 sClrImgLCDCBlk; ARM_FUNC void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); sTex = temp; - sTexLCDCBlk1 = sTexStartAddrTable[temp * 3] << 0xC; - sTexLCDCBlk2 = sTexStartAddrTable[temp * 3] << 0xC; - sSzTexBlk1 = sTexStartAddrTable[temp * 3] << 0xC; + 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){ -- cgit v1.2.3 From 8efd6b0d114301c0abf62be0cf29c10c28e6f851 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 03:09:51 +0200 Subject: fix merge --- arm9/data/rom2_2.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arm9/data/rom2_2.s b/arm9/data/rom2_2.s index 4bdd4119..013410bd 100644 --- a/arm9/data/rom2_2.s +++ b/arm9/data/rom2_2.s @@ -10232,12 +10232,12 @@ 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 .byte 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68 -- cgit v1.2.3 From 567c5518602e9977e26cf61218f629fa149c6c35 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 13:49:28 +0200 Subject: remove undefined_syms.txt --- arm9/undefined_syms.txt | 1229 ----------------------------------------------- 1 file changed, 1229 deletions(-) delete mode 100644 arm9/undefined_syms.txt diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt deleted file mode 100644 index adc05ca0..00000000 --- a/arm9/undefined_syms.txt +++ /dev/null @@ -1,1229 +0,0 @@ -SDK_SYS_STACKSIZE = 0x00000000; -CONST_34 = 0x00000034; -CONST_3F = 0x0000003F; -SDK_IRQ_STACKSIZE = 0x00000400; - -// .data -// FX -FX_AtanTable_ = 0x02103A38; -// OS -gUnk02106810 = 0x02106810; -GXi_DmaId = 0x02106814; -OSi_IrqCallbackInfoIndex = 0x02106818; -OSi_ConsoleTypeCache = 0x02106828; -// DGT -Unk_0210683C = 0x0210683C; -Unk_02106840 = 0x02106840; -Unk_02106900 = 0x02106900; -Unk_02106A00 = 0x02106A00; -Unk_02106A04 = 0x02106A04; -// FS -SDK_OVERLAY_DIGEST = 0x02106F84; -SDK_OVERLAY_DIGEST_END = 0x02106F84; -//GX -gUnk021D33BC = 0x021D33BC; -gUnk021D33C0 = 0x021D33C0; -gGXState = 0x021D33C4; - -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; - -sTexPlttStartAddrTable = 0x02103B3C; - -sTexStartAddrTable = 0x02103B4C; -sTexStartAddrTable = 0x02103B4E; -sTexStartAddrTable = 0x02103B50; - -// Overlay -FUN_021D76AC = 0x021D76AC; -gUnk021D76C8 = 0x021D76C8; -FUN_021D77C4 = 0x021D77C4; -FUN_021D7800 = 0x021D7800; -FUN_021D78FC = 0x021D78FC; -FUN_021D79B4 = 0x021D79B4; -FUN_021D7CA4 = 0x021D7CA4; -FUN_021D7F8C = 0x021D7F8C; -FUN_021D8018 = 0x021D8018; -FUN_021D8164 = 0x021D8164; -FUN_021D82BC = 0x021D82BC; -FUN_021D8320 = 0x021D8320; -FUN_021D836C = 0x021D836C; -FUN_021D83A8 = 0x021D83A8; -FUN_021D83C0 = 0x021D83C0; -FUN_021D844C = 0x021D844C; -FUN_021D8494 = 0x021D8494; -FUN_021D85FC = 0x021D85FC; -FUN_021D8624 = 0x021D8624; -FUN_021D865C = 0x021D865C; -FUN_021D8758 = 0x021D8758; -FUN_021D8820 = 0x021D8820; -FUN_021D88E4 = 0x021D88E4; -FUN_021D89CC = 0x021D89CC; -FUN_021D8B64 = 0x021D8B64; -FUN_021D8C24 = 0x021D8C24; -FUN_021D917C = 0x021D917C; -FUN_021D959C = 0x021D959C; -FUN_021D967C = 0x021D967C; -FUN_021D96F4 = 0x021D96F4; -FUN_021D9708 = 0x021D9708; -FUN_021D971C = 0x021D971C; -FUN_021D9820 = 0x021D9820; -FUN_021D99F8 = 0x021D99F8; -FUN_021DA464 = 0x021DA464; -FUN_021DA4EC = 0x021DA4EC; -FUN_021DA54C = 0x021DA54C; -FUN_021DA58C = 0x021DA58C; -FUN_021DA5B8 = 0x021DA5B8; -FUN_021DA5C8 = 0x021DA5C8; -FUN_021DA5D0 = 0x021DA5D0; -FUN_021DA5D8 = 0x021DA5D8; -FUN_021DA7B4 = 0x021DA7B4; -FUN_021DAAA4 = 0x021DAAA4; -FUN_021DAC70 = 0x021DAC70; -FUN_021DAE40 = 0x021DAE40; -FUN_021DAED4 = 0x021DAED4; -FUN_021DAF28 = 0x021DAF28; -FUN_021DAF78 = 0x021DAF78; -FUN_021DAF98 = 0x021DAF98; -FUN_021DB030 = 0x021DB030; -FUN_021DB7E8 = 0x021DB7E8; -FUN_021DB858 = 0x021DB858; -gUnk021DBE18 = 0x021DBE18; -FUN_021DC174 = 0x021DC174; -FUN_021DD6F0 = 0x021DD6F0; -FUN_021DD718 = 0x021DD718; -FUN_021DDB08 = 0x021DDB08; -FUN_021E1374 = 0x021E1374; -FUN_021E1858 = 0x021E1858; -FUN_021E1994 = 0x021E1994; -FUN_021E1BF8 = 0x021E1BF8; -FUN_021E1C4C = 0x021E1C4C; -FUN_021E1C54 = 0x021E1C54; -FUN_021E1ECC = 0x021E1ECC; -FUN_021E1F34 = 0x021E1F34; -FUN_021E1F58 = 0x021E1F58; -FUN_021E1F60 = 0x021E1F60; -FUN_021E2464 = 0x021E2464; -FUN_021E2608 = 0x021E2608; -FUN_021E26CC = 0x021E26CC; -FUN_021E27E8 = 0x021E27E8; -FUN_021E288C = 0x021E288C; -FUN_021E28A0 = 0x021E28A0; -FUN_021E2950 = 0x021E2950; -FUN_021E29B4 = 0x021E29B4; -FUN_021E29C8 = 0x021E29C8; -FUN_021E2A70 = 0x021E2A70; -FUN_021E2AD4 = 0x021E2AD4; -FUN_021E2B80 = 0x021E2B80; -FUN_021E2B9C = 0x021E2B9C; -FUN_021E2BB8 = 0x021E2BB8; -FUN_021E2BD0 = 0x021E2BD0; -FUN_021E2C24 = 0x021E2C24; -FUN_021E2C58 = 0x021E2C58; -FUN_021E2CBC = 0x021E2CBC; -FUN_021E32F0 = 0x021E32F0; -FUN_021E331C = 0x021E331C; -FUN_021E3424 = 0x021E3424; -FUN_021E3444 = 0x021E3444; -FUN_021E495C = 0x021E495C; -FUN_021E4C54 = 0x021E4C54; -FUN_021E4C60 = 0x021E4C60; -FUN_021E4DE4 = 0x021E4DE4; -FUN_021E5614 = 0x021E5614; -FUN_021E57D4 = 0x021E57D4; -FUN_021E5970 = 0x021E5970; -FUN_021E5B30 = 0x021E5B30; -FUN_021E5FD8 = 0x021E5FD8; -FUN_021E5FE0 = 0x021E5FE0; -FUN_021E6410 = 0x021E6410; -FUN_021E643C = 0x021E643C; -FUN_021E6990 = 0x021E6990; -FUN_021E69BC = 0x021E69BC; -FUN_021E6BF4 = 0x021E6BF4; -FUN_021E7030 = 0x021E7030; -FUN_021E70F0 = 0x021E70F0; -FUN_021E7138 = 0x021E7138; -FUN_021E7184 = 0x021E7184; -FUN_021E71E8 = 0x021E71E8; -FUN_021E7750 = 0x021E7750; -FUN_021E799C = 0x021E799C; -FUN_021E7AC0 = 0x021E7AC0; -FUN_021E7EA0 = 0x021E7EA0; -FUN_021E7EB0 = 0x021E7EB0; -FUN_021E7EC4 = 0x021E7EC4; -FUN_021E7EC8 = 0x021E7EC8; -FUN_021E7ED0 = 0x021E7ED0; -FUN_021E7ED8 = 0x021E7ED8; -FUN_021E7FBC = 0x021E7FBC; -FUN_021E8128 = 0x021E8128; -FUN_021E8130 = 0x021E8130; -FUN_021E8140 = 0x021E8140; -FUN_021E8144 = 0x021E8144; -FUN_021E8148 = 0x021E8148; -FUN_021E8158 = 0x021E8158; -FUN_021E81BC = 0x021E81BC; -FUN_021E84F4 = 0x021E84F4; -FUN_021E856C = 0x021E856C; -FUN_021E8588 = 0x021E8588; -FUN_021E85E4 = 0x021E85E4; -FUN_021E85FC = 0x021E85FC; -FUN_021EAE90 = 0x021EAE90; -FUN_021EB044 = 0x021EB044; -FUN_021EC57C = 0x021EC57C; -FUN_021EC71C = 0x021EC71C; -FUN_021EC854 = 0x021EC854; -FUN_021EC864 = 0x021EC864; -FUN_021ECD64 = 0x021ECD64; -FUN_021ECF14 = 0x021ECF14; -FUN_021ED0CC = 0x021ED0CC; -FUN_021ED49C = 0x021ED49C; -FUN_021ED4E0 = 0x021ED4E0; -FUN_021ED52C = 0x021ED52C; -FUN_021ED5C4 = 0x021ED5C4; -FUN_021ED5EC = 0x021ED5EC; -FUN_021ED644 = 0x021ED644; -FUN_021ED940 = 0x021ED940; -FUN_021EDA48 = 0x021EDA48; -FUN_021EDBC8 = 0x021EDBC8; -FUN_021EF5E0 = 0x021EF5E0; -FUN_021EF604 = 0x021EF604; -FUN_021EF620 = 0x021EF620; -FUN_021EF654 = 0x021EF654; -FUN_021EF824 = 0x021EF824; -FUN_021EF844 = 0x021EF844; -FUN_021EF8C8 = 0x021EF8C8; -FUN_021EF8DC = 0x021EF8DC; -FUN_021EFA9C = 0x021EFA9C; -FUN_021D80E4 = 0x021D80E4; -FUN_021D9320 = 0x021D9320; -FUN_021D94B4 = 0x021D94B4; -FUN_021D9510 = 0x021D9510; -FUN_021DA03C = 0x021DA03C; -FUN_021DA080 = 0x021DA080; -FUN_021DA0DC = 0x021DA0DC; -FUN_021DA0E0 = 0x021DA0E0; -FUN_021DA0E8 = 0x021DA0E8; -FUN_021DA118 = 0x021DA118; -FUN_021DA138 = 0x021DA138; -FUN_021DA1A0 = 0x021DA1A0; -FUN_021DA1A4 = 0x021DA1A4; -FUN_021DA1A8 = 0x021DA1A8; -FUN_021DA20C = 0x021DA20C; -FUN_021DA4BC = 0x021DA4BC; -FUN_021DB44C = 0x021DB44C; -FUN_021DB4B0 = 0x021DB4B0; -FUN_021DB52C = 0x021DB52C; -FUN_021DB53C = 0x021DB53C; -FUN_021DBA40 = 0x021DBA40; -FUN_021DBA78 = 0x021DBA78; -FUN_021DBAA0 = 0x021DBAA0; -FUN_021E4BE8 = 0x021E4BE8; -FUN_021E4C00 = 0x021E4C00; -FUN_021E4C08 = 0x021E4C08; -FUN_021E4C20 = 0x021E4C20; -FUN_021E4C24 = 0x021E4C24; -FUN_021E4C6C = 0x021E4C6C; -FUN_021E4DC4 = 0x021E4DC4; -FUN_021E4E90 = 0x021E4E90; -FUN_021E4EE4 = 0x021E4EE4; -FUN_021E4EFC = 0x021E4EFC; -FUN_021E506C = 0x021E506C; -FUN_021E5078 = 0x021E5078; -FUN_021E5094 = 0x021E5094; -FUN_021E50A0 = 0x021E50A0; -FUN_021E50AC = 0x021E50AC; -FUN_021E50C8 = 0x021E50C8; -FUN_021E50D4 = 0x021E50D4; -FUN_021E5114 = 0x021E5114; -FUN_021E5198 = 0x021E5198; -FUN_021E51EC = 0x021E51EC; -FUN_021E5224 = 0x021E5224; -FUN_021E5260 = 0x021E5260; -FUN_021E5294 = 0x021E5294; -FUN_021E7C80 = 0x021E7C80; -FUN_021E7E9C = 0x021E7E9C; -FUN_021E7EC0 = 0x021E7EC0; -FUN_021E7ECC = 0x021E7ECC; -FUN_021E7EEC = 0x021E7EEC; -FUN_021E8698 = 0x021E8698; -FUN_021F0514 = 0x021F0514; -FUN_021F1C1C = 0x021F1C1C; -FUN_021F1C30 = 0x021F1C30; -FUN_021F1E64 = 0x021F1E64; -FUN_021F220C = 0x021F220C; -FUN_021F51D0 = 0x021F51D0; -FUN_021F522C = 0x021F522C; -FUN_021F5268 = 0x021F5268; -FUN_021F52C8 = 0x021F52C8; -FUN_021F531C = 0x021F531C; -FUN_021F5348 = 0x021F5348; -FUN_021F5358 = 0x021F5358; -FUN_021F5384 = 0x021F5384; -FUN_021F53BC = 0x021F53BC; -FUN_021F53F8 = 0x021F53F8; -FUN_021F5400 = 0x021F5400; -FUN_021F5424 = 0x021F5424; -FUN_021F5430 = 0x021F5430; -FUN_021F54CC = 0x021F54CC; -FUN_021F54D0 = 0x021F54D0; -FUN_021F54D8 = 0x021F54D8; -FUN_021F61F4 = 0x021F61F4; -FUN_021F6234 = 0x021F6234; -FUN_021F6240 = 0x021F6240; -FUN_021F6254 = 0x021F6254; -FUN_021F02C4 = 0x021F02C4; -FUN_021F1D8C = 0x021F1D8C; -FUN_021F1DC8 = 0x021F1DC8; -FUN_021F1DFC = 0x021F1DFC; -FUN_021F1EC0 = 0x021F1EC0; -FUN_021F1F78 = 0x021F1F78; -FUN_021F2094 = 0x021F2094; -FUN_021F20D8 = 0x021F20D8; -FUN_021F20F8 = 0x021F20F8; -FUN_021F2AF4 = 0x021F2AF4; -FUN_021F2E0C = 0x021F2E0C; -FUN_021F2E28 = 0x021F2E28; -FUN_021F2F48 = 0x021F2F48; -FUN_021F2F6C = 0x021F2F6C; -FUN_021F3A18 = 0x021F3A18; -FUN_021F3AB4 = 0x021F3AB4; -FUN_021F3B4C = 0x021F3B4C; -FUN_021F3B7C = 0x021F3B7C; -FUN_021F3DA4 = 0x021F3DA4; -FUN_021F44D8 = 0x021F44D8; -FUN_021F4520 = 0x021F4520; -FUN_021F4568 = 0x021F4568; -FUN_021F4594 = 0x021F4594; -FUN_021F45E8 = 0x021F45E8; -FUN_021F4608 = 0x021F4608; -FUN_021F4BD0 = 0x021F4BD0; -FUN_021F4C88 = 0x021F4C88; -FUN_021F4D80 = 0x021F4D80; -FUN_021F4DC8 = 0x021F4DC8; -FUN_021F4E7C = 0x021F4E7C; -FUN_021F57EC = 0x021F57EC; -FUN_021F5C44 = 0x021F5C44; -FUN_021F61DC = 0x021F61DC; -FUN_021F61E8 = 0x021F61E8; -FUN_02211E60 = 0x02211E60; -FUN_0222D5C0 = 0x0222D5C0; -FUN_0222DAEC = 0x0222DAEC; -FUN_0222DD1C = 0x0222DD1C; -FUN_0222DD38 = 0x0222DD38; -FUN_0222E2BC = 0x0222E2BC; -FUN_0222E360 = 0x0222E360; -FUN_0222E3A0 = 0x0222E3A0; -FUN_0222E7E8 = 0x0222E7E8; -FUN_0222E874 = 0x0222E874; -FUN_0222ED34 = 0x0222ED34; -FUN_0222EDBC = 0x0222EDBC; -FUN_0222F440 = 0x0222F440; -FUN_0222F480 = 0x0222F480; -FUN_0222F7E0 = 0x0222F7E0; -FUN_0222F990 = 0x0222F990; -FUN_02230078 = 0x02230078; -FUN_02230080 = 0x02230080; -FUN_022300CC = 0x022300CC; -FUN_022312D0 = 0x022312D0; -FUN_02231504 = 0x02231504; -FUN_02231534 = 0x02231534; -FUN_02231678 = 0x02231678; -FUN_02233560 = 0x02233560; -FUN_022300D4 = 0x022300D4; -FUN_022300DC = 0x022300DC; -FUN_022300E4 = 0x022300E4; -FUN_022300E8 = 0x022300E8; -FUN_022300F4 = 0x022300F4; -FUN_02230100 = 0x02230100; -FUN_0223010C = 0x0223010C; -FUN_02230118 = 0x02230118; -FUN_02230124 = 0x02230124; -FUN_02230F3C = 0x02230F3C; -FUN_02230F70 = 0x02230F70; -FUN_02230F80 = 0x02230F80; -FUN_02231344 = 0x02231344; -FUN_02231350 = 0x02231350; -FUN_0223135C = 0x0223135C; -FUN_02231368 = 0x02231368; -FUN_02231374 = 0x02231374; -FUN_02239944 = 0x02239944; -FUN_02239AAC = 0x02239AAC; -FUN_0223CACC = 0x0223CACC; -FUN_0223CB08 = 0x0223CB08; -FUN_0223CCDC = 0x0223CCDC; -FUN_0223CD7C = 0x0223CD7C; -FUN_0223D3D0 = 0x0223D3D0; -FUN_0223D638 = 0x0223D638; -FUN_0223D648 = 0x0223D648; -FUN_0223DFB4 = 0x0223DFB4; -FUN_0223E060 = 0x0223E060; -FUN_0223E118 = 0x0223E118; -FUN_0223E154 = 0x0223E154; -FUN_0223E1A4 = 0x0223E1A4; -FUN_0223E1E0 = 0x0223E1E0; -FUN_0223E2AC = 0x0223E2AC; -FUN_0223E4A8 = 0x0223E4A8; -FUN_0223E4D4 = 0x0223E4D4; -FUN_0223E554 = 0x0223E554; -FUN_0223E6B8 = 0x0223E6B8; -FUN_0223E734 = 0x0223E734; -FUN_0223E7FC = 0x0223E7FC; -FUN_0223EB8C = 0x0223EB8C; -FUN_0223EF7C = 0x0223EF7C; -FUN_0223F4D8 = 0x0223F4D8; -FUN_0223F4F4 = 0x0223F4F4; -FUN_0223F8D8 = 0x0223F8D8; -FUN_0223FCE8 = 0x0223FCE8; -FUN_02240790 = 0x02240790; -FUN_022407CC = 0x022407CC; -FUN_022407DC = 0x022407DC; -FUN_022407F8 = 0x022407F8; -FUN_02240834 = 0x02240834; -FUN_02240844 = 0x02240844; -FUN_0224089C = 0x0224089C; -FUN_022408FC = 0x022408FC; -FUN_022411F4 = 0x022411F4; -FUN_02241230 = 0x02241230; -FUN_02241914 = 0x02241914; -FUN_02242A38 = 0x02242A38; -FUN_02242BE0 = 0x02242BE0; -FUN_0224312C = 0x0224312C; -FUN_022432E4 = 0x022432E4; -FUN_0224339C = 0x0224339C; -FUN_022433A8 = 0x022433A8; -FUN_022433B0 = 0x022433B0; -FUN_022433B8 = 0x022433B8; -FUN_022433F8 = 0x022433F8; -FUN_02243408 = 0x02243408; -FUN_02243428 = 0x02243428; -FUN_02243448 = 0x02243448; -FUN_0224345C = 0x0224345C; -FUN_022434AC = 0x022434AC; -FUN_022434BC = 0x022434BC; -FUN_022434D0 = 0x022434D0; -FUN_02243694 = 0x02243694; -FUN_022436C8 = 0x022436C8; -FUN_022436E8 = 0x022436E8; -FUN_02243780 = 0x02243780; -FUN_02243838 = 0x02243838; -FUN_022438DC = 0x022438DC; -FUN_022438E0 = 0x022438E0; -FUN_022438FC = 0x022438FC; -FUN_02243920 = 0x02243920; -FUN_022439F8 = 0x022439F8; -FUN_02243AD8 = 0x02243AD8; -FUN_02243BA8 = 0x02243BA8; -FUN_02243C5C = 0x02243C5C; -FUN_02243D3C = 0x02243D3C; -FUN_02243DA0 = 0x02243DA0; -FUN_02243DB8 = 0x02243DB8; -FUN_02243DC0 = 0x02243DC0; -FUN_02243DC4 = 0x02243DC4; -FUN_02243DD8 = 0x02243DD8; -FUN_02243DE0 = 0x02243DE0; -FUN_02243E34 = 0x02243E34; -FUN_02243E74 = 0x02243E74; -FUN_02243F18 = 0x02243F18; -FUN_02243F50 = 0x02243F50; -FUN_02243F9C = 0x02243F9C; -FUN_02244210 = 0x02244210; -FUN_02244558 = 0x02244558; -FUN_02244660 = 0x02244660; -FUN_022446BC = 0x022446BC; -FUN_022446E0 = 0x022446E0; -FUN_022446FC = 0x022446FC; -FUN_02244758 = 0x02244758; -FUN_02244770 = 0x02244770; -FUN_02244824 = 0x02244824; -FUN_0224484C = 0x0224484C; -FUN_02244D1C = 0x02244D1C; -FUN_02244D20 = 0x02244D20; -FUN_02244D3C = 0x02244D3C; -FUN_02244D40 = 0x02244D40; -FUN_02244D58 = 0x02244D58; -FUN_02244D98 = 0x02244D98; -FUN_02244DA0 = 0x02244DA0; -FUN_02244DB0 = 0x02244DB0; -FUN_02244DBC = 0x02244DBC; -FUN_02244DC4 = 0x02244DC4; -FUN_02244EF8 = 0x02244EF8; -FUN_02244F18 = 0x02244F18; -FUN_02244F24 = 0x02244F24; -FUN_02244F2C = 0x02244F2C; -FUN_02245088 = 0x02245088; -FUN_02245114 = 0x02245114; -FUN_02245190 = 0x02245190; -FUN_02245198 = 0x02245198; -FUN_022451F0 = 0x022451F0; -FUN_0224525C = 0x0224525C; -FUN_022452A4 = 0x022452A4; -FUN_02245324 = 0x02245324; -FUN_02245340 = 0x02245340; -FUN_02245358 = 0x02245358; -FUN_0224566C = 0x0224566C; -FUN_022456E8 = 0x022456E8; -FUN_02245844 = 0x02245844; -FUN_02245910 = 0x02245910; -FUN_02245F1C = 0x02245F1C; -FUN_02245F4C = 0x02245F4C; -FUN_02245FA0 = 0x02245FA0; -FUN_022461A4 = 0x022461A4; -FUN_022461B8 = 0x022461B8; -FUN_0224666C = 0x0224666C; -FUN_022466A0 = 0x022466A0; -FUN_022466AC = 0x022466AC; -FUN_02246F1C = 0x02246F1C; -FUN_02247294 = 0x02247294; -FUN_022472AC = 0x022472AC; -FUN_02247544 = 0x02247544; -FUN_02247614 = 0x02247614; -FUN_02247728 = 0x02247728; -FUN_02247808 = 0x02247808; -FUN_02247970 = 0x02247970; -FUN_02247A34 = 0x02247A34; -FUN_022483BC = 0x022483BC; -FUN_022483E0 = 0x022483E0; -FUN_022483EC = 0x022483EC; -FUN_02248724 = 0x02248724; -FUN_0224884C = 0x0224884C; -FUN_022488CC = 0x022488CC; -FUN_022488EC = 0x022488EC; -FUN_022488F4 = 0x022488F4; -FUN_022488FC = 0x022488FC; -FUN_0224891C = 0x0224891C; -FUN_02248B54 = 0x02248B54; -FUN_02248B58 = 0x02248B58; -FUN_02248B5C = 0x02248B5C; -FUN_02248B60 = 0x02248B60; -FUN_02248B6C = 0x02248B6C; -FUN_02248CC0 = 0x02248CC0; -FUN_02248CD0 = 0x02248CD0; -FUN_02248DF8 = 0x02248DF8; -FUN_02248F70 = 0x02248F70; -FUN_02248FE0 = 0x02248FE0; -FUN_02249038 = 0x02249038; -FUN_022490A0 = 0x022490A0; -FUN_022491FC = 0x022491FC; -FUN_022494C8 = 0x022494C8; -FUN_02249508 = 0x02249508; -FUN_02249668 = 0x02249668; -FUN_022497E8 = 0x022497E8; -FUN_02249E6C = 0x02249E6C; -FUN_02249E78 = 0x02249E78; -FUN_02249E84 = 0x02249E84; -FUN_02249E90 = 0x02249E90; -FUN_0224A310 = 0x0224A310; -FUN_0224A528 = 0x0224A528; -FUN_0224A7C8 = 0x0224A7C8; -FUN_0224ABAC = 0x0224ABAC; -FUN_0224B124 = 0x0224B124; -FUN_0224B2C4 = 0x0224B2C4; -FUN_0224B568 = 0x0224B568; -FUN_0224B818 = 0x0224B818; -FUN_0224B86C = 0x0224B86C; -FUN_0224B9E0 = 0x0224B9E0; -FUN_0224BBEC = 0x0224BBEC; -FUN_0224BD90 = 0x0224BD90; -FUN_0224C038 = 0x0224C038; -FUN_0224C27C = 0x0224C27C; -FUN_0224C520 = 0x0224C520; -FUN_0224C678 = 0x0224C678; -FUN_0224C6E8 = 0x0224C6E8; -FUN_0224C6F4 = 0x0224C6F4; -FUN_0224C700 = 0x0224C700; -FUN_0224C8C8 = 0x0224C8C8; -FUN_0224CA2C = 0x0224CA2C; -FUN_0224CA54 = 0x0224CA54; -FUN_0224CA58 = 0x0224CA58; -FUN_0224CA88 = 0x0224CA88; -FUN_0224CA94 = 0x0224CA94; -FUN_0224CAA0 = 0x0224CAA0; -FUN_0224CAB4 = 0x0224CAB4; -FUN_0224CB30 = 0x0224CB30; -FUN_0224CBB0 = 0x0224CBB0; -FUN_0224CC24 = 0x0224CC24; -FUN_0224CECC = 0x0224CECC; -FUN_0224D14C = 0x0224D14C; -FUN_0224D2E0 = 0x0224D2E0; -FUN_0224D3E8 = 0x0224D3E8; -FUN_0224D70C = 0x0224D70C; -FUN_0224D76C = 0x0224D76C; -FUN_0224D79C = 0x0224D79C; -FUN_0224DCB8 = 0x0224DCB8; -FUN_0224DD94 = 0x0224DD94; -FUN_0224DDB8 = 0x0224DDB8; -FUN_0224E554 = 0x0224E554; -FUN_0224E764 = 0x0224E764; -FUN_0224E7C4 = 0x0224E7C4; -FUN_0224F12C = 0x0224F12C; -FUN_02252534 = 0x02252534; -FUN_02252538 = 0x02252538; -FUN_022567E0 = 0x022567E0; -FUN_02213B08 = 0x02213B08; -FUN_02213D80 = 0x02213D80; -FUN_02213DBC = 0x02213DBC; -FUN_02213E24 = 0x02213E24; -FUN_021D7A20 = 0x021D7A20; -FUN_021D7A28 = 0x021D7A28; -FUN_021E8648 = 0x021E8648; -FUN_0223BA04 = 0x0223BA04; -FUN_0223BE70 = 0x0223BE70; -FUN_0223C08C = 0x0223C08C; -FUN_0223CDB8 = 0x0223CDB8; -FUN_0223D8F4 = 0x0223D8F4; -FUN_0223DC98 = 0x0223DC98; -FUN_0223DCB4 = 0x0223DCB4; -FUN_0223DCD0 = 0x0223DCD0; -FUN_0223E2C4 = 0x0223E2C4; -FUN_0223E2DC = 0x0223E2DC; -FUN_02242404 = 0x02242404; -FUN_022426AC = 0x022426AC; -FUN_02249B7C = 0x02249B7C; -FUN_0224A130 = 0x0224A130; -FUN_0224A6B8 = 0x0224A6B8; -FUN_0224A6FC = 0x0224A6FC; -FUN_0224A8D4 = 0x0224A8D4; -FUN_0224AA40 = 0x0224AA40; -FUN_0224ADF8 = 0x0224ADF8; -FUN_0224AEE8 = 0x0224AEE8; -FUN_0224AF68 = 0x0224AF68; -FUN_0224ED94 = 0x0224ED94; -FUN_0224EDA8 = 0x0224EDA8; -FUN_0224F0BC = 0x0224F0BC; -FUN_0224F0D0 = 0x0224F0D0; -FUN_02252440 = 0x02252440; -FUN_02252448 = 0x02252448; -FUN_022524BC = 0x022524BC; -FUN_022524D0 = 0x022524D0; -FUN_022524DC = 0x022524DC; -FUN_022524F4 = 0x022524F4; -FUN_02252504 = 0x02252504; -FUN_02254A68 = 0x02254A68; -FUN_02254AB8 = 0x02254AB8; -FUN_0223BD14 = 0x0223BD14; -FUN_0222FF68 = 0x0222FF68; -FUN_0222FF74 = 0x0222FF74; -FUN_0222FF78 = 0x0222FF78; -FUN_0222FF88 = 0x0222FF88; -FUN_02230014 = 0x02230014; -FUN_02230188 = 0x02230188; -FUN_02230214 = 0x02230214; -FUN_02230218 = 0x02230218; -FUN_02230260 = 0x02230260; -FUN_02230290 = 0x02230290; -FUN_022302BC = 0x022302BC; -FUN_02230370 = 0x02230370; -FUN_02230E44 = 0x02230E44; -FUN_02230E54 = 0x02230E54; -FUN_02231238 = 0x02231238; -FUN_0224C474 = 0x0224C474; -FUN_0225D3EC = 0x0225D3EC; -FUN_0225D45C = 0x0225D45C; -FUN_0225D484 = 0x0225D484; -FUN_0225D508 = 0x0225D508; -FUN_0225D5DC = 0x0225D5DC; -FUN_0225D648 = 0x0225D648; -FUN_0225D6A4 = 0x0225D6A4; -FUN_0225D714 = 0x0225D714; -FUN_0225D73C = 0x0225D73C; -FUN_0225D7B8 = 0x0225D7B8; -FUN_0225D800 = 0x0225D800; -FUN_0225D80C = 0x0225D80C; -FUN_0225D820 = 0x0225D820; -FUN_0225D824 = 0x0225D824; -FUN_021EEF0C = 0x021EEF0C; -FUN_021EEF68 = 0x021EEF68; -FUN_021EEF84 = 0x021EEF84; -FUN_021EEF98 = 0x021EEF98; -FUN_021EEF9C = 0x021EEF9C; -FUN_021EFBF4 = 0x021EFBF4; -FUN_021EFD8C = 0x021EFD8C; -FUN_021F45A4 = 0x021F45A4; -FUN_021F4698 = 0x021F4698; -FUN_021F4A30 = 0x021F4A30; -FUN_02211E7C = 0x02211E7C; -FUN_02211F5C = 0x02211F5C; -FUN_02212024 = 0x02212024; -FUN_02212048 = 0x02212048; -FUN_02212384 = 0x02212384; -FUN_022123A0 = 0x022123A0; -FUN_022123B0 = 0x022123B0; -FUN_022156C0 = 0x022156C0; -FUN_0221590C = 0x0221590C; -FUN_02215918 = 0x02215918; -FUN_0221594C = 0x0221594C; -FUN_02215988 = 0x02215988; -FUN_02215A44 = 0x02215A44; -FUN_022186F0 = 0x022186F0; -FUN_021DD4F4 = 0x021DD4F4; -FUN_021DD518 = 0x021DD518; -FUN_021DD540 = 0x021DD540; -FUN_021DD58C = 0x021DD58C; -FUN_021DD594 = 0x021DD594; -FUN_021DD59C = 0x021DD59C; -FUN_021DD604 = 0x021DD604; -FUN_021DD60C = 0x021DD60C; -FUN_021DD620 = 0x021DD620; -FUN_021DD678 = 0x021DD678; -FUN_021DD6B8 = 0x021DD6B8; -FUN_021DD6CC = 0x021DD6CC; -FUN_02211FF0 = 0x02211FF0; - -// ??? -SDK_MAIN_ARENA_LO = 0x0225FFA0; - -// EWRAM -SDK_SECTION_ARENA_EX_START = 0x023E0000; - -// DTCM -gUnk027FFC20 = 0x027FFC20; - -SDK_AUTOLOAD_LIST = 0x02107700; -SDK_AUTOLOAD_ITCM_START = 0x01FF8000; -SDK_AUTOLOAD_ITCM_SIZE = 0x00000700; -SDK_AUTOLOAD_ITCM_BSS_SIZE = 0x00000000; -SDK_AUTOLOAD_DTCM_START = 0x027E0000; -SDK_AUTOLOAD_DTCM_SIZE = 0x00000060; -SDK_AUTOLOAD_DTCM_BSS_SIZE = 0x00000020; -SDK_AUTOLOAD_EXT_START = 0x02400000; -SDK_AUTOLOAD_EXT_SIZE = 0x00000000; -SDK_AUTOLOAD_EXT_BSS_SIZE = 0x00000000; -SDK_AUTOLOAD_LIST_END = 0x02107724; - -// Overlay - -SDK_OVERLAY_MODULE_00_ID = 0; -SDK_OVERLAY_MODULE_00_START = 0x021D74E0; -SDK_OVERLAY_MODULE_00_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_00_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_00_STATIC_INIT_START = 0x021D74E0; -SDK_OVERLAY_MODULE_00_STATIC_INIT_END = 0x021D74E4; -SDK_OVERLAY_MODULE_01_ID = 1; -SDK_OVERLAY_MODULE_01_START = 0x021D74E0; -SDK_OVERLAY_MODULE_01_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_01_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_01_STATIC_INIT_START = 0x021D74F0; -SDK_OVERLAY_MODULE_01_STATIC_INIT_END = 0x021D74F8; -SDK_OVERLAY_MODULE_02_ID = 2; -SDK_OVERLAY_MODULE_02_START = 0x021D7520; -SDK_OVERLAY_MODULE_02_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_02_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_02_STATIC_INIT_START = 0x021D7520; -SDK_OVERLAY_MODULE_02_STATIC_INIT_END = 0x021D7524; -SDK_OVERLAY_MODULE_03_ID = 3; -SDK_OVERLAY_MODULE_03_START = 0x01FF8700; -SDK_OVERLAY_MODULE_03_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_03_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_03_STATIC_INIT_START = 0x01FF8700; -SDK_OVERLAY_MODULE_03_STATIC_INIT_END = 0x01FF8704; -SDK_OVERLAY_MODULE_04_ID = 4; -SDK_OVERLAY_MODULE_04_START = 0x021D74E0; -SDK_OVERLAY_MODULE_04_SIZE = 0x000386E0; -SDK_OVERLAY_MODULE_04_BSSSIZE = 0x000022A0; -SDK_OVERLAY_MODULE_04_STATIC_INIT_START = 0x0220BE94; -SDK_OVERLAY_MODULE_04_STATIC_INIT_END = 0x0220BE98; -SDK_OVERLAY_MODULE_05_ID = 5; -SDK_OVERLAY_MODULE_05_START = 0x021D74E0; -SDK_OVERLAY_MODULE_05_SIZE = 0x000261A0; -SDK_OVERLAY_MODULE_05_BSSSIZE = 0x0003C020; -SDK_OVERLAY_MODULE_05_STATIC_INIT_START = 0x021FD1C8; -SDK_OVERLAY_MODULE_05_STATIC_INIT_END = 0x021FD1CC; -SDK_OVERLAY_MODULE_06_ID = 6; -SDK_OVERLAY_MODULE_06_START = 0x022396A0; -SDK_OVERLAY_MODULE_06_SIZE = 0x00018D80; -SDK_OVERLAY_MODULE_06_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_06_STATIC_INIT_START = 0x02252228; -SDK_OVERLAY_MODULE_06_STATIC_INIT_END = 0x0225222C; -SDK_OVERLAY_MODULE_07_ID = 7; -SDK_OVERLAY_MODULE_07_START = 0x02211E60; -SDK_OVERLAY_MODULE_07_SIZE = 0x000032E0; -SDK_OVERLAY_MODULE_07_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_07_STATIC_INIT_START = 0x02215134; -SDK_OVERLAY_MODULE_07_STATIC_INIT_END = 0x02215138; -SDK_OVERLAY_MODULE_08_ID = 8; -SDK_OVERLAY_MODULE_08_START = 0x02211E60; -SDK_OVERLAY_MODULE_08_SIZE = 0x0001B760; -SDK_OVERLAY_MODULE_08_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_08_STATIC_INIT_START = 0x0222D598; -SDK_OVERLAY_MODULE_08_STATIC_INIT_END = 0x0222D59C; -SDK_OVERLAY_MODULE_09_ID = 9; -SDK_OVERLAY_MODULE_09_START = 0x02211E60; -SDK_OVERLAY_MODULE_09_SIZE = 0x0000A1A0; -SDK_OVERLAY_MODULE_09_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_09_STATIC_INIT_START = 0x0221BFE8; -SDK_OVERLAY_MODULE_09_STATIC_INIT_END = 0x0221BFEC; -SDK_OVERLAY_MODULE_10_ID = 10; -SDK_OVERLAY_MODULE_10_START = 0x021D74E0; -SDK_OVERLAY_MODULE_10_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_10_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_10_STATIC_INIT_START = 0x021D74E0; -SDK_OVERLAY_MODULE_10_STATIC_INIT_END = 0x021D74E4; -SDK_OVERLAY_MODULE_11_ID = 11; -SDK_OVERLAY_MODULE_11_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_11_SIZE = 0x000329E0; -SDK_OVERLAY_MODULE_11_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_11_STATIC_INIT_START = 0x0225FF18; -SDK_OVERLAY_MODULE_11_STATIC_INIT_END = 0x0225FF20; -SDK_OVERLAY_MODULE_12_ID = 12; -SDK_OVERLAY_MODULE_12_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_12_SIZE = 0x00019260; -SDK_OVERLAY_MODULE_12_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_12_STATIC_INIT_START = 0x02246810; -SDK_OVERLAY_MODULE_12_STATIC_INIT_END = 0x02246818; -SDK_OVERLAY_MODULE_13_ID = 13; -SDK_OVERLAY_MODULE_13_START = 0x02211E60; -SDK_OVERLAY_MODULE_13_SIZE = 0x0002EBE0; -SDK_OVERLAY_MODULE_13_BSSSIZE = 0x000027E0; -SDK_OVERLAY_MODULE_13_STATIC_INIT_START = 0x0223F768; -SDK_OVERLAY_MODULE_13_STATIC_INIT_END = 0x0223F76C; -SDK_OVERLAY_MODULE_14_ID = 14; -SDK_OVERLAY_MODULE_14_START = 0x021D74E0; -SDK_OVERLAY_MODULE_14_SIZE = 0x0000F520; -SDK_OVERLAY_MODULE_14_BSSSIZE = 0x000001A0; -SDK_OVERLAY_MODULE_14_STATIC_INIT_START = 0x021E69C8; -SDK_OVERLAY_MODULE_14_STATIC_INIT_END = 0x021E69CC; -SDK_OVERLAY_MODULE_15_ID = 15; -SDK_OVERLAY_MODULE_15_START = 0x021D74E0; -SDK_OVERLAY_MODULE_15_SIZE = 0x00004680; -SDK_OVERLAY_MODULE_15_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_15_STATIC_INIT_START = 0x021DBB5C; -SDK_OVERLAY_MODULE_15_STATIC_INIT_END = 0x021DBB60; -SDK_OVERLAY_MODULE_16_ID = 16; -SDK_OVERLAY_MODULE_16_START = 0x021D74E0; -SDK_OVERLAY_MODULE_16_SIZE = 0x00028500; -SDK_OVERLAY_MODULE_16_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_16_STATIC_INIT_START = 0x021FF9C4; -SDK_OVERLAY_MODULE_16_STATIC_INIT_END = 0x021FF9C8; -SDK_OVERLAY_MODULE_17_ID = 17; -SDK_OVERLAY_MODULE_17_START = 0x021D74E0; -SDK_OVERLAY_MODULE_17_SIZE = 0x00006E80; -SDK_OVERLAY_MODULE_17_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_17_STATIC_INIT_START = 0x021DE354; -SDK_OVERLAY_MODULE_17_STATIC_INIT_END = 0x021DE358; -SDK_OVERLAY_MODULE_18_ID = 18; -SDK_OVERLAY_MODULE_18_START = 0x022396A0; -SDK_OVERLAY_MODULE_18_SIZE = 0x00017CE0; -SDK_OVERLAY_MODULE_18_BSSSIZE = 0x00000080; -SDK_OVERLAY_MODULE_18_STATIC_INIT_START = 0x02250858; -SDK_OVERLAY_MODULE_18_STATIC_INIT_END = 0x0225085C; -SDK_OVERLAY_MODULE_19_ID = 19; -SDK_OVERLAY_MODULE_19_START = 0x02252440; -SDK_OVERLAY_MODULE_19_SIZE = 0x00000100; -SDK_OVERLAY_MODULE_19_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_19_STATIC_INIT_START = 0x02252524; -SDK_OVERLAY_MODULE_19_STATIC_INIT_END = 0x02252528; -SDK_OVERLAY_MODULE_20_ID = 20; -SDK_OVERLAY_MODULE_20_START = 0x02252440; -SDK_OVERLAY_MODULE_20_SIZE = 0x00002400; -SDK_OVERLAY_MODULE_20_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_20_STATIC_INIT_START = 0x02254838; -SDK_OVERLAY_MODULE_20_STATIC_INIT_END = 0x0225483C; -SDK_OVERLAY_MODULE_21_ID = 21; -SDK_OVERLAY_MODULE_21_START = 0x02254840; -SDK_OVERLAY_MODULE_21_SIZE = 0x000005C0; -SDK_OVERLAY_MODULE_21_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_21_STATIC_INIT_START = 0x02254DE8; -SDK_OVERLAY_MODULE_21_STATIC_INIT_END = 0x02254DF0; -SDK_OVERLAY_MODULE_22_ID = 22; -SDK_OVERLAY_MODULE_22_START = 0x02254840; -SDK_OVERLAY_MODULE_22_SIZE = 0x00000F00; -SDK_OVERLAY_MODULE_22_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_22_STATIC_INIT_START = 0x02255730; -SDK_OVERLAY_MODULE_22_STATIC_INIT_END = 0x02255738; -SDK_OVERLAY_MODULE_23_ID = 23; -SDK_OVERLAY_MODULE_23_START = 0x02254840; -SDK_OVERLAY_MODULE_23_SIZE = 0x00001900; -SDK_OVERLAY_MODULE_23_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_23_STATIC_INIT_START = 0x02256128; -SDK_OVERLAY_MODULE_23_STATIC_INIT_END = 0x02256130; -SDK_OVERLAY_MODULE_24_ID = 24; -SDK_OVERLAY_MODULE_24_START = 0x02254840; -SDK_OVERLAY_MODULE_24_SIZE = 0x000009A0; -SDK_OVERLAY_MODULE_24_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_24_STATIC_INIT_START = 0x022551C0; -SDK_OVERLAY_MODULE_24_STATIC_INIT_END = 0x022551C8; -SDK_OVERLAY_MODULE_25_ID = 25; -SDK_OVERLAY_MODULE_25_START = 0x02254840; -SDK_OVERLAY_MODULE_25_SIZE = 0x00000560; -SDK_OVERLAY_MODULE_25_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_25_STATIC_INIT_START = 0x02254D80; -SDK_OVERLAY_MODULE_25_STATIC_INIT_END = 0x02254D88; -SDK_OVERLAY_MODULE_26_ID = 26; -SDK_OVERLAY_MODULE_26_START = 0x02254840; -SDK_OVERLAY_MODULE_26_SIZE = 0x00000800; -SDK_OVERLAY_MODULE_26_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_26_STATIC_INIT_START = 0x02255020; -SDK_OVERLAY_MODULE_26_STATIC_INIT_END = 0x02255028; -SDK_OVERLAY_MODULE_27_ID = 27; -SDK_OVERLAY_MODULE_27_START = 0x02254840; -SDK_OVERLAY_MODULE_27_SIZE = 0x00000BA0; -SDK_OVERLAY_MODULE_27_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_27_STATIC_INIT_START = 0x022553C4; -SDK_OVERLAY_MODULE_27_STATIC_INIT_END = 0x022553CC; -SDK_OVERLAY_MODULE_28_ID = 28; -SDK_OVERLAY_MODULE_28_START = 0x02254840; -SDK_OVERLAY_MODULE_28_SIZE = 0x00001780; -SDK_OVERLAY_MODULE_28_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_28_STATIC_INIT_START = 0x02255F18; -SDK_OVERLAY_MODULE_28_STATIC_INIT_END = 0x02255F20; -SDK_OVERLAY_MODULE_29_ID = 29; -SDK_OVERLAY_MODULE_29_START = 0x02254840; -SDK_OVERLAY_MODULE_29_SIZE = 0x00000900; -SDK_OVERLAY_MODULE_29_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_29_STATIC_INIT_START = 0x0225512C; -SDK_OVERLAY_MODULE_29_STATIC_INIT_END = 0x02255134; -SDK_OVERLAY_MODULE_30_ID = 30; -SDK_OVERLAY_MODULE_30_START = 0x02254840; -SDK_OVERLAY_MODULE_30_SIZE = 0x00000600; -SDK_OVERLAY_MODULE_30_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_30_STATIC_INIT_START = 0x02254E28; -SDK_OVERLAY_MODULE_30_STATIC_INIT_END = 0x02254E30; -SDK_OVERLAY_MODULE_31_ID = 31; -SDK_OVERLAY_MODULE_31_START = 0x02254840; -SDK_OVERLAY_MODULE_31_SIZE = 0x00000600; -SDK_OVERLAY_MODULE_31_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_31_STATIC_INIT_START = 0x02254E20; -SDK_OVERLAY_MODULE_31_STATIC_INIT_END = 0x02254E28; -SDK_OVERLAY_MODULE_32_ID = 32; -SDK_OVERLAY_MODULE_32_START = 0x02254840; -SDK_OVERLAY_MODULE_32_SIZE = 0x000004A0; -SDK_OVERLAY_MODULE_32_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_32_STATIC_INIT_START = 0x02254CC4; -SDK_OVERLAY_MODULE_32_STATIC_INIT_END = 0x02254CCC; -SDK_OVERLAY_MODULE_33_ID = 33; -SDK_OVERLAY_MODULE_33_START = 0x02254840; -SDK_OVERLAY_MODULE_33_SIZE = 0x00000320; -SDK_OVERLAY_MODULE_33_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_33_STATIC_INIT_START = 0x02254B40; -SDK_OVERLAY_MODULE_33_STATIC_INIT_END = 0x02254B48; -SDK_OVERLAY_MODULE_34_ID = 34; -SDK_OVERLAY_MODULE_34_START = 0x02254840; -SDK_OVERLAY_MODULE_34_SIZE = 0x000004C0; -SDK_OVERLAY_MODULE_34_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_34_STATIC_INIT_START = 0x02254CF8; -SDK_OVERLAY_MODULE_34_STATIC_INIT_END = 0x02254D00; -SDK_OVERLAY_MODULE_35_ID = 35; -SDK_OVERLAY_MODULE_35_START = 0x02254840; -SDK_OVERLAY_MODULE_35_SIZE = 0x000009A0; -SDK_OVERLAY_MODULE_35_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_35_STATIC_INIT_START = 0x022551C0; -SDK_OVERLAY_MODULE_35_STATIC_INIT_END = 0x022551C8; -SDK_OVERLAY_MODULE_36_ID = 36; -SDK_OVERLAY_MODULE_36_START = 0x02254840; -SDK_OVERLAY_MODULE_36_SIZE = 0x00000CC0; -SDK_OVERLAY_MODULE_36_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_36_STATIC_INIT_START = 0x022554F8; -SDK_OVERLAY_MODULE_36_STATIC_INIT_END = 0x02255500; -SDK_OVERLAY_MODULE_37_ID = 37; -SDK_OVERLAY_MODULE_37_START = 0x02254840; -SDK_OVERLAY_MODULE_37_SIZE = 0x00000560; -SDK_OVERLAY_MODULE_37_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_37_STATIC_INIT_START = 0x02254D90; -SDK_OVERLAY_MODULE_37_STATIC_INIT_END = 0x02254D98; -SDK_OVERLAY_MODULE_38_ID = 38; -SDK_OVERLAY_MODULE_38_START = 0x02254840; -SDK_OVERLAY_MODULE_38_SIZE = 0x00000B40; -SDK_OVERLAY_MODULE_38_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_38_STATIC_INIT_START = 0x02255360; -SDK_OVERLAY_MODULE_38_STATIC_INIT_END = 0x02255368; -SDK_OVERLAY_MODULE_39_ID = 39; -SDK_OVERLAY_MODULE_39_START = 0x02254840; -SDK_OVERLAY_MODULE_39_SIZE = 0x00000CC0; -SDK_OVERLAY_MODULE_39_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_39_STATIC_INIT_START = 0x022554E4; -SDK_OVERLAY_MODULE_39_STATIC_INIT_END = 0x022554EC; -SDK_OVERLAY_MODULE_40_ID = 40; -SDK_OVERLAY_MODULE_40_START = 0x02254840; -SDK_OVERLAY_MODULE_40_SIZE = 0x00000C60; -SDK_OVERLAY_MODULE_40_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_40_STATIC_INIT_START = 0x02255480; -SDK_OVERLAY_MODULE_40_STATIC_INIT_END = 0x02255488; -SDK_OVERLAY_MODULE_41_ID = 41; -SDK_OVERLAY_MODULE_41_START = 0x02254840; -SDK_OVERLAY_MODULE_41_SIZE = 0x00001140; -SDK_OVERLAY_MODULE_41_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_41_STATIC_INIT_START = 0x02255974; -SDK_OVERLAY_MODULE_41_STATIC_INIT_END = 0x0225597C; -SDK_OVERLAY_MODULE_42_ID = 42; -SDK_OVERLAY_MODULE_42_START = 0x02254840; -SDK_OVERLAY_MODULE_42_SIZE = 0x00000900; -SDK_OVERLAY_MODULE_42_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_42_STATIC_INIT_START = 0x0225511C; -SDK_OVERLAY_MODULE_42_STATIC_INIT_END = 0x02255124; -SDK_OVERLAY_MODULE_43_ID = 43; -SDK_OVERLAY_MODULE_43_START = 0x02254840; -SDK_OVERLAY_MODULE_43_SIZE = 0x000009C0; -SDK_OVERLAY_MODULE_43_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_43_STATIC_INIT_START = 0x022551EC; -SDK_OVERLAY_MODULE_43_STATIC_INIT_END = 0x022551F4; -SDK_OVERLAY_MODULE_44_ID = 44; -SDK_OVERLAY_MODULE_44_START = 0x02254840; -SDK_OVERLAY_MODULE_44_SIZE = 0x000004A0; -SDK_OVERLAY_MODULE_44_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_44_STATIC_INIT_START = 0x02254CBC; -SDK_OVERLAY_MODULE_44_STATIC_INIT_END = 0x02254CC4; -SDK_OVERLAY_MODULE_45_ID = 45; -SDK_OVERLAY_MODULE_45_START = 0x02254840; -SDK_OVERLAY_MODULE_45_SIZE = 0x00000940; -SDK_OVERLAY_MODULE_45_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_45_STATIC_INIT_START = 0x02255170; -SDK_OVERLAY_MODULE_45_STATIC_INIT_END = 0x02255178; -SDK_OVERLAY_MODULE_46_ID = 46; -SDK_OVERLAY_MODULE_46_START = 0x02254840; -SDK_OVERLAY_MODULE_46_SIZE = 0x00000320; -SDK_OVERLAY_MODULE_46_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_46_STATIC_INIT_START = 0x02254B40; -SDK_OVERLAY_MODULE_46_STATIC_INIT_END = 0x02254B48; -SDK_OVERLAY_MODULE_47_ID = 47; -SDK_OVERLAY_MODULE_47_START = 0x02254840; -SDK_OVERLAY_MODULE_47_SIZE = 0x00000CA0; -SDK_OVERLAY_MODULE_47_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_47_STATIC_INIT_START = 0x022554BC; -SDK_OVERLAY_MODULE_47_STATIC_INIT_END = 0x022554C4; -SDK_OVERLAY_MODULE_48_ID = 48; -SDK_OVERLAY_MODULE_48_START = 0x02254840; -SDK_OVERLAY_MODULE_48_SIZE = 0x000008A0; -SDK_OVERLAY_MODULE_48_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_48_STATIC_INIT_START = 0x022550D0; -SDK_OVERLAY_MODULE_48_STATIC_INIT_END = 0x022550D8; -SDK_OVERLAY_MODULE_49_ID = 49; -SDK_OVERLAY_MODULE_49_START = 0x02254840; -SDK_OVERLAY_MODULE_49_SIZE = 0x00000600; -SDK_OVERLAY_MODULE_49_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_49_STATIC_INIT_START = 0x02254E20; -SDK_OVERLAY_MODULE_49_STATIC_INIT_END = 0x02254E28; -SDK_OVERLAY_MODULE_50_ID = 50; -SDK_OVERLAY_MODULE_50_START = 0x02254840; -SDK_OVERLAY_MODULE_50_SIZE = 0x00000320; -SDK_OVERLAY_MODULE_50_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_50_STATIC_INIT_START = 0x02254B50; -SDK_OVERLAY_MODULE_50_STATIC_INIT_END = 0x02254B58; -SDK_OVERLAY_MODULE_51_ID = 51; -SDK_OVERLAY_MODULE_51_START = 0x02254840; -SDK_OVERLAY_MODULE_51_SIZE = 0x00000FC0; -SDK_OVERLAY_MODULE_51_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_51_STATIC_INIT_START = 0x022557E0; -SDK_OVERLAY_MODULE_51_STATIC_INIT_END = 0x022557E4; -SDK_OVERLAY_MODULE_52_ID = 52; -SDK_OVERLAY_MODULE_52_START = 0x021D74E0; -SDK_OVERLAY_MODULE_52_SIZE = 0x00000400; -SDK_OVERLAY_MODULE_52_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_52_STATIC_INIT_START = 0x021D78D0; -SDK_OVERLAY_MODULE_52_STATIC_INIT_END = 0x021D78D4; -SDK_OVERLAY_MODULE_53_ID = 53; -SDK_OVERLAY_MODULE_53_START = 0x021D74E0; -SDK_OVERLAY_MODULE_53_SIZE = 0x00002480; -SDK_OVERLAY_MODULE_53_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_53_STATIC_INIT_START = 0x021D9888; -SDK_OVERLAY_MODULE_53_STATIC_INIT_END = 0x021D988C; -SDK_OVERLAY_MODULE_54_ID = 54; -SDK_OVERLAY_MODULE_54_START = 0x021D74E0; -SDK_OVERLAY_MODULE_54_SIZE = 0x00002380; -SDK_OVERLAY_MODULE_54_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_54_STATIC_INIT_START = 0x021D97D4; -SDK_OVERLAY_MODULE_54_STATIC_INIT_END = 0x021D97D8; -SDK_OVERLAY_MODULE_55_ID = 55; -SDK_OVERLAY_MODULE_55_START = 0x021D74E0; -SDK_OVERLAY_MODULE_55_SIZE = 0x00003040; -SDK_OVERLAY_MODULE_55_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_55_STATIC_INIT_START = 0x021DA480; -SDK_OVERLAY_MODULE_55_STATIC_INIT_END = 0x021DA484; -SDK_OVERLAY_MODULE_56_ID = 56; -SDK_OVERLAY_MODULE_56_START = 0x02211E60; -SDK_OVERLAY_MODULE_56_SIZE = 0x000047A0; -SDK_OVERLAY_MODULE_56_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_56_STATIC_INIT_START = 0x0221647C; -SDK_OVERLAY_MODULE_56_STATIC_INIT_END = 0x02216480; -SDK_OVERLAY_MODULE_57_ID = 57; -SDK_OVERLAY_MODULE_57_START = 0x021D74E0; -SDK_OVERLAY_MODULE_57_SIZE = 0x00002540; -SDK_OVERLAY_MODULE_57_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_57_STATIC_INIT_START = 0x021D9A10; -SDK_OVERLAY_MODULE_57_STATIC_INIT_END = 0x021D9A14; -SDK_OVERLAY_MODULE_58_ID = 58; -SDK_OVERLAY_MODULE_58_START = 0x021D9A20; -SDK_OVERLAY_MODULE_58_SIZE = 0x000015A0; -SDK_OVERLAY_MODULE_58_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_58_STATIC_INIT_START = 0x021DAF94; -SDK_OVERLAY_MODULE_58_STATIC_INIT_END = 0x021DAF98; -SDK_OVERLAY_MODULE_59_ID = 59; -SDK_OVERLAY_MODULE_59_START = 0x021D74E0; -SDK_OVERLAY_MODULE_59_SIZE = 0x00002C20; -SDK_OVERLAY_MODULE_59_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_59_STATIC_INIT_START = 0x021DA0FC; -SDK_OVERLAY_MODULE_59_STATIC_INIT_END = 0x021DA100; -SDK_OVERLAY_MODULE_60_ID = 60; -SDK_OVERLAY_MODULE_60_START = 0x021D74E0; -SDK_OVERLAY_MODULE_60_SIZE = 0x00000D00; -SDK_OVERLAY_MODULE_60_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_60_STATIC_INIT_START = 0x021D81D8; -SDK_OVERLAY_MODULE_60_STATIC_INIT_END = 0x021D81DC; -SDK_OVERLAY_MODULE_61_ID = 61; -SDK_OVERLAY_MODULE_61_START = 0x021D74E0; -SDK_OVERLAY_MODULE_61_SIZE = 0x00001080; -SDK_OVERLAY_MODULE_61_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_61_STATIC_INIT_START = 0x021D8554; -SDK_OVERLAY_MODULE_61_STATIC_INIT_END = 0x021D8558; -SDK_OVERLAY_MODULE_62_ID = 62; -SDK_OVERLAY_MODULE_62_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_62_SIZE = 0x00003DE0; -SDK_OVERLAY_MODULE_62_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_62_STATIC_INIT_START = 0x02231380; -SDK_OVERLAY_MODULE_62_STATIC_INIT_END = 0x02231388; -SDK_OVERLAY_MODULE_63_ID = 63; -SDK_OVERLAY_MODULE_63_START = 0x021D74E0; -SDK_OVERLAY_MODULE_63_SIZE = 0x00004AC0; -SDK_OVERLAY_MODULE_63_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_63_STATIC_INIT_START = 0x021DBF20; -SDK_OVERLAY_MODULE_63_STATIC_INIT_END = 0x021DBF24; -SDK_OVERLAY_MODULE_64_ID = 64; -SDK_OVERLAY_MODULE_64_START = 0x021D74E0; -SDK_OVERLAY_MODULE_64_SIZE = 0x00001C40; -SDK_OVERLAY_MODULE_64_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_64_STATIC_INIT_START = 0x021D9110; -SDK_OVERLAY_MODULE_64_STATIC_INIT_END = 0x021D9114; -SDK_OVERLAY_MODULE_65_ID = 65; -SDK_OVERLAY_MODULE_65_START = 0x021D74E0; -SDK_OVERLAY_MODULE_65_SIZE = 0x00003000; -SDK_OVERLAY_MODULE_65_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_65_STATIC_INIT_START = 0x021DA428; -SDK_OVERLAY_MODULE_65_STATIC_INIT_END = 0x021DA42C; -SDK_OVERLAY_MODULE_66_ID = 66; -SDK_OVERLAY_MODULE_66_START = 0x021D74E0; -SDK_OVERLAY_MODULE_66_SIZE = 0x00002660; -SDK_OVERLAY_MODULE_66_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_66_STATIC_INIT_START = 0x021D9A9C; -SDK_OVERLAY_MODULE_66_STATIC_INIT_END = 0x021D9AA0; -SDK_OVERLAY_MODULE_67_ID = 67; -SDK_OVERLAY_MODULE_67_START = 0x021D74E0; -SDK_OVERLAY_MODULE_67_SIZE = 0x00002440; -SDK_OVERLAY_MODULE_67_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_67_STATIC_INIT_START = 0x021D9918; -SDK_OVERLAY_MODULE_67_STATIC_INIT_END = 0x021D991C; -SDK_OVERLAY_MODULE_68_ID = 68; -SDK_OVERLAY_MODULE_68_START = 0x021D74E0; -SDK_OVERLAY_MODULE_68_SIZE = 0x00001600; -SDK_OVERLAY_MODULE_68_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_68_STATIC_INIT_START = 0x021D8AD4; -SDK_OVERLAY_MODULE_68_STATIC_INIT_END = 0x021D8AD8; -SDK_OVERLAY_MODULE_69_ID = 69; -SDK_OVERLAY_MODULE_69_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_69_SIZE = 0x000023A0; -SDK_OVERLAY_MODULE_69_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_69_STATIC_INIT_START = 0x0222F93C; -SDK_OVERLAY_MODULE_69_STATIC_INIT_END = 0x0222F940; -SDK_OVERLAY_MODULE_70_ID = 70; -SDK_OVERLAY_MODULE_70_START = 0x021D74E0; -SDK_OVERLAY_MODULE_70_SIZE = 0x00000E20; -SDK_OVERLAY_MODULE_70_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_70_STATIC_INIT_START = 0x021D82DC; -SDK_OVERLAY_MODULE_70_STATIC_INIT_END = 0x021D82E0; -SDK_OVERLAY_MODULE_71_ID = 71; -SDK_OVERLAY_MODULE_71_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_71_SIZE = 0x00003EC0; -SDK_OVERLAY_MODULE_71_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_71_STATIC_INIT_START = 0x0223147C; -SDK_OVERLAY_MODULE_71_STATIC_INIT_END = 0x02231480; -SDK_OVERLAY_MODULE_72_ID = 72; -SDK_OVERLAY_MODULE_72_START = 0x021D74E0; -SDK_OVERLAY_MODULE_72_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_72_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_72_STATIC_INIT_START = 0x021D74E0; -SDK_OVERLAY_MODULE_72_STATIC_INIT_END = 0x021D74E4; -SDK_OVERLAY_MODULE_73_ID = 73; -SDK_OVERLAY_MODULE_73_START = 0x021D74E0; -SDK_OVERLAY_MODULE_73_SIZE = 0x00004AE0; -SDK_OVERLAY_MODULE_73_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_73_STATIC_INIT_START = 0x021DBF70; -SDK_OVERLAY_MODULE_73_STATIC_INIT_END = 0x021DBF74; -SDK_OVERLAY_MODULE_74_ID = 74; -SDK_OVERLAY_MODULE_74_START = 0x021D74E0; -SDK_OVERLAY_MODULE_74_SIZE = 0x00001220; -SDK_OVERLAY_MODULE_74_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_74_STATIC_INIT_START = 0x021D8664; -SDK_OVERLAY_MODULE_74_STATIC_INIT_END = 0x021D8668; -SDK_OVERLAY_MODULE_75_ID = 75; -SDK_OVERLAY_MODULE_75_START = 0x021E6BA0; -SDK_OVERLAY_MODULE_75_SIZE = 0x00005DE0; -SDK_OVERLAY_MODULE_75_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_75_STATIC_INIT_START = 0x021EC97C; -SDK_OVERLAY_MODULE_75_STATIC_INIT_END = 0x021EC980; -SDK_OVERLAY_MODULE_76_ID = 76; -SDK_OVERLAY_MODULE_76_START = 0x021D74E0; -SDK_OVERLAY_MODULE_76_SIZE = 0x00001E20; -SDK_OVERLAY_MODULE_76_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_76_STATIC_INIT_START = 0x021D92E0; -SDK_OVERLAY_MODULE_76_STATIC_INIT_END = 0x021D92E4; -SDK_OVERLAY_MODULE_77_ID = 77; -SDK_OVERLAY_MODULE_77_START = 0x021D74E0; -SDK_OVERLAY_MODULE_77_SIZE = 0x00001BE0; -SDK_OVERLAY_MODULE_77_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_77_STATIC_INIT_START = 0x021D90AC; -SDK_OVERLAY_MODULE_77_STATIC_INIT_END = 0x021D90B0; -SDK_OVERLAY_MODULE_78_ID = 78; -SDK_OVERLAY_MODULE_78_START = 0x021D74E0; -SDK_OVERLAY_MODULE_78_SIZE = 0x00000460; -SDK_OVERLAY_MODULE_78_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_78_STATIC_INIT_START = 0x021D78F8; -SDK_OVERLAY_MODULE_78_STATIC_INIT_END = 0x021D78FC; -SDK_OVERLAY_MODULE_79_ID = 79; -SDK_OVERLAY_MODULE_79_START = 0x02211E60; -SDK_OVERLAY_MODULE_79_SIZE = 0x000052C0; -SDK_OVERLAY_MODULE_79_BSSSIZE = 0x00000040; -SDK_OVERLAY_MODULE_79_STATIC_INIT_START = 0x02216748; -SDK_OVERLAY_MODULE_79_STATIC_INIT_END = 0x0221674C; -SDK_OVERLAY_MODULE_80_ID = 80; -SDK_OVERLAY_MODULE_80_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_80_SIZE = 0x0000A720; -SDK_OVERLAY_MODULE_80_BSSSIZE = 0x00000160; -SDK_OVERLAY_MODULE_80_STATIC_INIT_START = 0x02237670; -SDK_OVERLAY_MODULE_80_STATIC_INIT_END = 0x02237674; -SDK_OVERLAY_MODULE_81_ID = 81; -SDK_OVERLAY_MODULE_81_START = 0x02237E40; -SDK_OVERLAY_MODULE_81_SIZE = 0x00005580; -SDK_OVERLAY_MODULE_81_BSSSIZE = 0x000000A0; -SDK_OVERLAY_MODULE_81_STATIC_INIT_START = 0x0223D39C; -SDK_OVERLAY_MODULE_81_STATIC_INIT_END = 0x0223D3A0; -SDK_OVERLAY_MODULE_82_ID = 82; -SDK_OVERLAY_MODULE_82_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_82_SIZE = 0x00002540; -SDK_OVERLAY_MODULE_82_BSSSIZE = 0x00000120; -SDK_OVERLAY_MODULE_82_STATIC_INIT_START = 0x0222F8CC; -SDK_OVERLAY_MODULE_82_STATIC_INIT_END = 0x0222F8D0; -SDK_OVERLAY_MODULE_83_ID = 83; -SDK_OVERLAY_MODULE_83_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_83_SIZE = 0x0000E2A0; -SDK_OVERLAY_MODULE_83_BSSSIZE = 0x00001980; -SDK_OVERLAY_MODULE_83_STATIC_INIT_START = 0x0223A77C; -SDK_OVERLAY_MODULE_83_STATIC_INIT_END = 0x0223A780; -SDK_OVERLAY_MODULE_84_ID = 84; -SDK_OVERLAY_MODULE_84_START = 0x021D74E0; -SDK_OVERLAY_MODULE_84_SIZE = 0x00003920; -SDK_OVERLAY_MODULE_84_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_84_STATIC_INIT_START = 0x021DADE4; -SDK_OVERLAY_MODULE_84_STATIC_INIT_END = 0x021DADE8; -SDK_OVERLAY_MODULE_85_ID = 85; -SDK_OVERLAY_MODULE_85_START = 0x021D74E0; -SDK_OVERLAY_MODULE_85_SIZE = 0x00009100; -SDK_OVERLAY_MODULE_85_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_85_STATIC_INIT_START = 0x021E05A0; -SDK_OVERLAY_MODULE_85_STATIC_INIT_END = 0x021E05A4; -SDK_OVERLAY_MODULE_86_ID = 86; -SDK_OVERLAY_MODULE_86_START = 0x021D74E0; -SDK_OVERLAY_MODULE_86_SIZE = 0x00000820; -SDK_OVERLAY_MODULE_86_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_86_STATIC_INIT_START = 0x021D7CE4; -SDK_OVERLAY_MODULE_86_STATIC_INIT_END = 0x021D7CE8; -- cgit v1.2.3