aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxgpu/drawprim.s
diff options
context:
space:
mode:
Diffstat (limited to 'libpsn00b/psxgpu/drawprim.s')
-rw-r--r--libpsn00b/psxgpu/drawprim.s40
1 files changed, 40 insertions, 0 deletions
diff --git a/libpsn00b/psxgpu/drawprim.s b/libpsn00b/psxgpu/drawprim.s
new file mode 100644
index 0000000..a216720
--- /dev/null
+++ b/libpsn00b/psxgpu/drawprim.s
@@ -0,0 +1,40 @@
+.set noreorder
+
+.include "hwregs_a.h"
+
+.text
+
+.global DrawPrim
+.type DrawPrim, @function
+DrawPrim:
+
+ addiu $sp, -8
+ sw $ra, 0($sp)
+ sw $s0, 4($sp)
+
+ move $s0, $a0 # Wait for GPU to complete
+ jal DrawSync
+ move $a0, $0
+
+ lui $a3, IOBASE
+ lui $v0, 0x0400 # Set transfer direction to off
+ sw $v0, GP1($a3)
+
+ move $a0, $s0
+ lbu $a1, 3($a0) # Get length of primitive packet
+ addiu $a0, 4
+
+.Ltransfer_loop:
+ lw $v0, 0($a0)
+ addiu $a0, 4
+ sw $v0, GP0($a3)
+ bgtz $a1, .Ltransfer_loop
+ addiu $a1, -1
+
+ jal DrawSync
+ move $a0, $0
+
+ lw $ra, 0($sp)
+ lw $s0, 4($sp)
+ jr $ra
+ addiu $sp, 8 \ No newline at end of file