summary refs log tree commit diff
path: root/misc/dreamcast/DrawColouredQuads.S
diff options
context:
space:
mode:
Diffstat (limited to 'misc/dreamcast/DrawColouredQuads.S')
-rw-r--r--misc/dreamcast/DrawColouredQuads.S65
1 files changed, 65 insertions, 0 deletions
diff --git a/misc/dreamcast/DrawColouredQuads.S b/misc/dreamcast/DrawColouredQuads.S
new file mode 100644
index 0000000..074605a
--- /dev/null
+++ b/misc/dreamcast/DrawColouredQuads.S
@@ -0,0 +1,65 @@
+#include "ViewportTransform.S"
+.global _DrawColouredQuads
+.align 4
+.type  _DrawColouredQuads,%function
+
+_DrawColouredQuads:
+! Setup
+    fldi0 fr1     ! U = 0
+    fldi0 fr2     ! V = 0
+    mov r4,r3     ! r3  = src
+    add #-32, r5  ! r5 -= sizeof(VERTEX)
+    ViewportTransformSetup _VP_COL_HWIDTH
+
+.TRANSFORM_QUAD:
+    mov.l CMD_COL_VERT, r1 ! r1  = GPU VERT command
+
+    LoadColouredVertex
+    ProcessVertex1
+
+    LoadColouredVertex
+    ProcessVertex2
+
+    LoadColouredVertex
+    ProcessVertex3
+
+    LoadColouredVertex
+    ProcessVertex4 CMD_COL_EOS
+
+! CLIPFLAGS TESTING
+    cmp/eq   #0,r0 ! T = r0 == 0 (all points invisible)
+    bt/s    .NO_POINTS_VISIBLE  ! if T goto NO_POINTS_VISIBLE
+    nop
+    bra .SOME_POINTS_VISIBLE
+    nop
+
+.NO_POINTS_VISIBLE:
+    bra .LOOP_END ! jump to loop end after executing instruction in delay slot
+    add #-128, r5 ! r5 -= 4 * sizeof(VERTEX), move back to 1 vertex before start of quad
+
+.SOME_POINTS_VISIBLE:
+
+.LOOP_END:
+    dt r6 ! r6--; T = r6 == 0
+    bf .TRANSFORM_QUAD ! if !T then goto TRANSFORM_QUAD
+    nop
+    
+    add #32, r5     ! r5 += sizeof(VERTEX)
+    rts             ! return after executing instruction in delay slot
+    mov r5,r0       ! r0 = r5
+
+.align 2
+CMD_COL_VERT: .long 0xe0000000
+CMD_COL_EOS:  .long 0xf0000000
+
+.global _VP_COL_HWIDTH
+_VP_COL_HWIDTH:  .long 0
+
+.global _VP_COL_HHEIGHT
+_VP_COL_HHEIGHT: .long 0
+
+.global _VP_COL_X_PLUS_HWIDTH
+_VP_COL_X_PLUS_HWIDTH:  .long 0
+
+.global _VP_COL_Y_PLUS_HHEIGHT
+_VP_COL_Y_PLUS_HHEIGHT: .long 0