summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/GX_asm.s16
-rw-r--r--arm9/asm/GX_g3.s72
-rw-r--r--arm9/lib/include/gx.h24
-rw-r--r--arm9/lib/src/GX_asm.c16
-rw-r--r--arm9/lib/src/GX_g3.c36
5 files changed, 76 insertions, 88 deletions
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;
+}