diff options
Diffstat (limited to 'misc/dreamcast/DrawColouredQuads.S')
-rw-r--r-- | misc/dreamcast/DrawColouredQuads.S | 65 |
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 |