Browse code

Drawing basic line

neauoire authored on 13/02/2021 01:56:17
Showing 2 changed files
... ...
@@ -63,7 +63,6 @@ pushbyte(Uint8 b, int lit)
63 63
 void
64 64
 pushshort(Uint16 s, int lit)
65 65
 {
66
-	printf("%04x[%d]\n", s, lit);
67 66
 	if(lit) {
68 67
 		pushbyte(0x03, 0);
69 68
 		pushbyte(0x02, 0);
... ...
@@ -4,20 +4,24 @@
4 4
 :dev/w fff9 ( std write port )
5 5
 
6 6
 ;x_ 2 ;y_ 2 ;x0 2 ;y0 2 ;x1 2 ;y1 2 ;color 1
7
-
8 7
 ;dx 2 ;dy 2 ;err 2 ;err2 2
9 8
 
10 9
 |0100 @RESET
11 10
 
12 11
 	( set dev/write to screen ) 
13 12
 	,01 ,dev/w STR 
13
+
14 14
 	,01 ,color STR
15
+	+0030 ,x0 STR^ +0040 ,y0 STR^
16
+	+0050 ,x1 STR^ +0060 ,y1 STR^
17
+
18
+	,line JSR
15 19
 
16
-	( init positions )
17
-	,0020 ,x0 STR^ ,0018 ,y0 STR^
18
-	,0060 ,x1 STR^ ,0048 ,y1 STR^
19
-	,x0 LDR^ ,x_ STR^ ,y0 LDR^ ,y_ STR^
20
+	,02 ,color STR
21
+	+0020 ,x0 STR^ +0010 ,y0 STR^
22
+	+0060 ,x1 STR^ +0070 ,y1 STR^
20 23
 
24
+	,line JSR
21 25
 
22 26
 	( draw control points )
23 27
 	,02 ,color STR
... ...
@@ -28,6 +32,25 @@
28 32
 
29 33
 BRK
30 34
 
35
+@line
36
+	,x0 LDR^ ,x_ STR^ ,y0 LDR^ ,y_ STR^                   ( start at x0,y0 )
37
+	,x1 LDR^ ,x0 LDR^ ,diff16sub JSR ,dx STR^             ( int dx = abs[x1 - x0] )
38
+	,y1 LDR^ ,y0 LDR^ ,diff16sub JSR -0001 MUL!^ ,dy STR^ ( int dy = -abs[y1 - y0] )
39
+	,dx LDR^ ,dy LDR^ ADD!^ ,err STR^                     ( int err = dx + dy, e2; )
40
+	@loop
41
+	,x_ LDR^ ,y_ LDR^ ,putpixel JSR                       ( draw )
42
+	,err LDR^ +0002 MUL!^ ,err2 STR^                      ( e2 = 2 * err; )
43
+	,err2 LDR^ ,dy LDR^ LTH!^ ,continue1 ROT JMP? POP^ 	  ( e2 >= dy )
44
+		,err LDR^ ,dy LDR^ ADD!^ ,err STR^ 				  ( err += dy; )
45
+		,x_ LDR^ +0001 ADD!^ ,x_ STR^                     ( y0 += y0 < y1 ? 1 : -1; )
46
+	@continue1
47
+	,err2 LDR^ ,dx LDR^ GTH!^ ,continue2 ROT JMP? POP^    ( e2 <= dx )
48
+		,err LDR^ ,dx LDR^ ADD!^ ,err STR^                ( err += dx; )
49
+		,y_ LDR^ +0001 ADD!^ ,y_ STR^                     ( y0 += y0 < y1 ? 1 : -1; )
50
+	@continue2
51
+	,x_ LDR^ ,x1 LDR^ LTH!^ ,loop ROT JMP? POP^           ( loop )
52
+	RTS
53
+
31 54
 @redraw
32 55
 	,0000 IOW^
33 56
 	,0000 IOW^