blob: 074605a1d34f743d4e68c6ecf7d67e38da5a54f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
|