blob: 5ce16bd811f11fbc9c9b5c73cef84da405b9fdea (
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
|
#include "ViewportTransform.S"
.global _DrawTexturedQuads
.align 4
.type _DrawTexturedQuads,%function
_DrawTexturedQuads:
! Setup
mov r4,r3 ! r3 = src
add #-32, r5 ! r5 -= sizeof(VERTEX)
ViewportTransformSetup _VP_TEX_HWIDTH
.TRANSFORM_QUAD:
mov.l CMD_TEX_VERT, r1 ! r1 = GPU VERT command
LoadTexturedVertex
ProcessVertex1
LoadTexturedVertex
ProcessVertex2
LoadTexturedVertex
ProcessVertex3
LoadTexturedVertex
ProcessVertex4 CMD_TEX_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 prior quad, so that this invisible quad gets overwritten in next iteration
.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_TEX_VERT: .long 0xe0000000
CMD_TEX_EOS: .long 0xf0000000
.global _VP_TEX_HWIDTH
_VP_TEX_HWIDTH: .long 0
.global _VP_TEX_HHEIGHT
_VP_TEX_HHEIGHT: .long 0
.global _VP_TEX_X_PLUS_HWIDTH
_VP_TEX_X_PLUS_HWIDTH: .long 0
.global _VP_TEX_Y_PLUS_HHEIGHT
_VP_TEX_Y_PLUS_HHEIGHT: .long 0
|