summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMade <made111@gmx.de>2020-05-15 00:22:52 +0200
committerMade <made111@gmx.de>2020-05-15 00:22:52 +0200
commit0b3c15a399b456bffcd65aa5d100371ce69fa8eb (patch)
treec5558cdc367f00c1b60781e340b66268d6179b1e
parent5223256ef928245620bb1a223084df6931999795 (diff)
Decompile GX_load3d.s
-rw-r--r--arm9/asm/GX_load3d.s420
-rw-r--r--arm9/lib/include/gx.h12
-rw-r--r--arm9/lib/src/GX_load3d.c157
-rw-r--r--arm9/undefined_syms.txt14
4 files changed, 183 insertions, 420 deletions
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;