-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgfx.urcl
116 lines (104 loc) · 2.34 KB
/
gfx.urcl
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
MINREG 16
@DEFINE ax r16
@DEFINE ay r15
@DEFINE bx r14
@DEFINE by r13
@DEFINE dx r12
@DEFINE dy r11
@DEFINE sx r10
@DEFINE sy r9
@DEFINE cx r8
@DEFINE cy r7
@DEFINE x r6
@DEFINE y r5
@DEFINE i r4
.draw_line // in ax, ay, bx, by; var dx, dy, sx, sy, cx, cy, x, y, i
MOV x ax
MOV y ay
OUT %X x
OUT %Y y
OUT %COLOR 255
SUB dx bx ax
IMM sx 1
BGE .bx_ge_ax bx ax
IMM sx -1
SUB dx ax bx
.bx_ge_ax
BRE .draw_line_eq_y ay by
SUB dy by ay
IMM sy 1
BGE .by_ge_ay by ay
IMM sy -1
SUB dy ay by
.by_ge_ay
BRE .draw_line_eq_x ax bx
RSH cx dx // cx = dx >>> 2
RSH cy dy // cy = dy >>> 2
BRG .else dx dy // if dx < dy
BGE .end dx dy
INC cx cx // cx++
JMP .end // else if dx > dy
.else //
INC cy cy // cy++
.end
ADD i dx dy
.loop // for (i = dx+dy; i != 0; i--)
BGE .cxg cy cx // if cy < cx
SUB cx cx cy// cx -= cy
IMM cy dy // cy = dy
ADD x x sx // x += sx
JMP .cxg_end
.cxg // else
SUB cy cy cx// cy -= cx
IMM cx dx // cx = dx
ADD y y sy // y += sy
.cxg_end
OUT %X x
OUT %Y y
OUT %COLOR 255
DEC i i
BNZ .loop i
RET
.draw_line_eq_y
BRE .eq_y_ret ax bx
.eq_y_loop
ADD x x sx
OUT %X x
OUT %COLOR 255
BNE .eq_y_loop x bx
.eq_y_ret
RET
.draw_line_eq_x
BRE .eq_x_ret ay by
.eq_x_loop
ADD y y sy
OUT %Y y
OUT %COLOR 255
BNE .eq_x_loop y by
.eq_x_ret
RET
// image: R1 const Bin[ 64 ]*, x: R2 const int, y: R3 const int,
// src_x: var R4, src_y: var R5, src_i/color: var R6
// screen_width: const R8
.draw_sprite8x8
IMM R5 0
.loop_y
ADD R5 R5 R3
OUT %Y R5
SUB R5 R5 R3
IMM R4 0
.loop_x
ADD R4 R4 R2
OUT %X R4
SUB R4 R4 R2
MLT R6 R5 8
ADD R6 R6 R4
ADD R6 R6 R1
LOD R6 R6
// OUT %NUMB R6
OUT %COLOR R6
INC R4 R4
BLE .loop_x R4 7
INC R5 R5
BLE .loop_y R5 7
RET