Browse code

(polycat) Rewrote

neauoire authored on 03/01/2022 18:19:08
Showing 1 changed files
... ...
@@ -1,22 +1,23 @@
1 1
 ( polycat )
2 2
 
3
-%RTN { JMP2r }
4 3
 %2// { #01 SFT2 }
5
-%4// { #02 SFT2 }
6
-%!~ { NEQk NIP }
4
+%!~  { NEQk NIP }
5
+%AUTO-XADDR  { #05 .Screen/auto DEO }
7 6
 
8 7
 ( devices )
9 8
 
10
-|00 @System     [ &vector $2 &wst      $1 &rst    $1 &pad   $4 &r      $2 &g     $2 &b      $2 ]
11
-|20 @Screen     [ &vector $2 &width    $2 &height $2 &pad   $2 &x      $2 &y      $2 &addr  $2 &pixel $1 &sprite $1 ]
12
-|90 @Mouse      [ &vector $2 &x        $2 &y      $2 &state $1 &wheel $1 ]
9
+|00 @System     &vector $2 &wst      $1 &rst    $1 &pad    $4 &r      $2 &g       $2 &b       $2 &debug  $1 &halt $1
10
+|20 @Screen     &vector $2 &width    $2 &height $2 &auto   $1 &pad    $1 &x       $2 &y       $2 &addr   $2 &pixel  $1 &sprite $1
11
+|90 @Mouse      &vector $2 &x        $2 &y      $2 &state  $1 &pad    $3 &scrollx $2 &scrolly $2
13 12
 
14 13
 ( variables )
15 14
 
16 15
 |0000
17 16
 
18
-@cat     [ &x $2 &y $2 &timer $1 ]
19
-@pointer [ &x $2 &y $2 ]
17
+@cat     
18
+	&x $2 &y $2 &timer $1
19
+@pointer 
20
+	&x $2 &y $2
20 21
 
21 22
 ( program )
22 23
 
... ...
@@ -26,124 +27,121 @@
26 27
 	#0a3f .System/r DEO2 
27 28
 	#05df .System/g DEO2 
28 29
 	#0caf .System/b DEO2
29
-
30
-	( find center )
31
-	.Screen/width DEI2 2// #0008 SUB2 .cat/x STZ2
32
-	.Screen/height DEI2 4// DUP2k ADD2 ADD2 #0018 SUB2 .cat/y STZ2
33
-
30
+	( DOS resolution )
31
+	#0140 .Screen/width DEO2
32
+	#00c8 .Screen/height DEO2
34 33
 	( vectors )
35 34
 	;on-mouse .Mouse/vector DEO2
36
-	;on-frame .Screen/vector DEO2
37
-
38
-	;draw-polycat JSR2
39
-	;draw-ground JSR2
40
-
41
-BRK
42
-
43
-@on-mouse ( -> )
44
-	
45
-	;draw-cursor JSR2
46
-
47
-	.Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT
48
-	.Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT
49
-		ADD #00 SWP ;draw-eye JSR2
35
+	( find center )
36
+	.Screen/width DEI2 2// .cat/x STZ2
37
+	.Screen/height DEI2 2// .cat/y STZ2
38
+	( set screen mode )
39
+	AUTO-XADDR
40
+	( init )
41
+	#ff ;draw-eye/last STA
42
+	#ff ;draw-tail/last STA
43
+	,draw-polycat JSR
44
+	,draw-ground JSR
50 45
 
51 46
 BRK
52 47
 
53
-@on-frame ( -> )
48
+@draw-ground ( -- )
54 49
 
55
-	.cat/timer LDZ INC [ DUP ] .cat/timer STZ
56
-		DUP ,&skip0 JCN #0000 ;draw-tail JSR2 &skip0
57
-		[ #10 ] !~ ,&skip1 JCN #0001 ;draw-tail JSR2 &skip1
58
-		[ #20 ] !~ ,&skip2 JCN #0002 ;draw-tail JSR2 &skip2
59
-		[ #30 ] !~ ,&skip3 JCN #0003 ;draw-tail JSR2 &skip3
60
-		[ #40 ] !~ ,&skip4 JCN #0002 ;draw-tail JSR2 &skip4
61
-		[ #50 ] !~ ,&skip5 JCN #0001 ;draw-tail JSR2 &skip5
62
-	POP
50
+	.cat/y LDZ2 #0018 ADD2 .Screen/y DEO2
51
+	.cat/x LDZ2 #0010 SUB2 .Screen/x DEO2
52
+	;ground .Screen/addr DEO2
53
+	#1000 
54
+	&loop
55
+		#01 .Screen/sprite DEO
56
+		INC GTHk ,&loop JCN
57
+	POP2
63 58
 
64
-BRK
59
+JMP2r
65 60
 
66 61
 @draw-polycat ( -- )
67 62
 
68 63
 	( ears )
69 64
 	.cat/y LDZ2 .Screen/y DEO2
70
-	.cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2
65
+	.cat/x LDZ2 #0008 SUB2 .Screen/x DEO2
71 66
 	;ears .Screen/addr DEO2
67
+	#81 .Screen/sprite DEOk DEO
68
+	( body )
69
+	.cat/y LDZ2 #0010 ADD2 .Screen/y DEO2
70
+	.cat/x LDZ2 #0008 SUB2 .Screen/x DEO2
71
+	;body .Screen/addr DEO2
72 72
 	#81 .Screen/sprite DEO
73
-	STH2r .Screen/x DEO2
74
-	;ears #0010 ADD2 .Screen/addr DEO2
75
-	#81 .Screen/sprite DEO
76
-
77
-	#0000 ,draw-eye JSR
78
-	#0000 ,draw-tail JSR
73
+	( eye/tail )
74
+	#00 ,draw-eye JSR
75
+	#00 ,draw-tail JSR
79 76
 
80
-RTN
77
+JMP2r
81 78
 
82
-@draw-eye ( quad* -- )
79
+@on-mouse ( -> )
83 80
 	
84
-	.cat/y LDZ2 #0008 ADD2 .Screen/y DEO2
85
-	.cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2
86
-	DUP2 ;eye ADD2 .Screen/addr DEO2
87
-	( draw ) #81 .Screen/sprite DEO
88
-	STH2r .Screen/x DEO2
89
-	;eye #0010 ADD2 ADD2 .Screen/addr DEO2
90
-	( draw ) #81 .Screen/sprite DEO
91
-
92
-RTN
81
+	.Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT
82
+	.Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT
83
+		ADD ,draw-eye JSR
84
+	.cat/timer LDZ INC [ DUP ] .cat/timer STZ
85
+		#04 SFT ,draw-tail JSR
86
+	,draw-cursor JSR
93 87
 
94
-@draw-tail ( frame* -- )
88
+BRK
95 89
 
90
+@draw-eye ( quad -- )
91
+	
92
+	DUP ,&last LDR NEQ ,&changed JCN
93
+		POP JMP2r &changed
94
+	( only redraw on change )
95
+	DUP 
96
+	#00 SWP ;eye ADD2 .Screen/addr DEO2
97
+	.cat/y LDZ2 #0008 ADD2 .Screen/y DEO2
98
+	.cat/x LDZ2 #0008 SUB2 .Screen/x DEO2
99
+	#81 .Screen/sprite DEOk DEO
100
+	,&last STR
101
+
102
+JMP2r
103
+	&last $1
104
+
105
+@draw-tail ( frame -- )
106
+
107
+	DUP ,&last LDR NEQ ,&changed JCN
108
+		POP JMP2r &changed
109
+	( only redraw on change )
110
+	DUP 
111
+	;frames ROT #00 SWP ADD2 LDA 
112
+	#00 SWP #40 SFT2 ;body/tail ADD2 
113
+		.Screen/addr DEO2
114
+	.cat/x LDZ2 .Screen/x DEO2
96 115
 	.cat/y LDZ2 #0010 ADD2 .Screen/y DEO2
97
-	.cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2
98
-	;body .Screen/addr DEO2
99
-	( draw ) #81 .Screen/sprite DEO
100
-	STH2r .Screen/x DEO2
101
-	#40 SFT2 ;body #0010 ADD2 ADD2 .Screen/addr DEO2
102
-	( draw ) #81 .Screen/sprite DEO
116
+	#81 .Screen/sprite DEO
117
+	,&last STR
103 118
 
104
-RTN
119
+JMP2r
120
+	&last $1
105 121
 
106 122
 @draw-cursor ( -- )
107 123
 	
108
-	( clear last cursor )
109
-	;cursor .Screen/addr DEO2 
124
+	( last cursor )
125
+	;cursor STH2k .Screen/addr DEO2 
110 126
 	.pointer/x LDZ2 .Screen/x DEO2 
111 127
 	.pointer/y LDZ2 .Screen/y DEO2 
112 128
 	#40 .Screen/sprite DEO
113
-
114
-	( record pointer positions )
129
+	( new cursor )
130
+	STH2r .Screen/addr DEO2 
115 131
 	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
116 132
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2 
133
+	#41 .Mouse/state DEI #00 NEQ ADD .Screen/sprite DEO
117 134
 
118
-	( colorize on state )
119
-	#41 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO
120
-
121
-RTN
122
-
123
-@draw-ground ( -- )
124
-
125
-	.cat/y LDZ2 #0018 ADD2 .Screen/y DEO2
126
-	.cat/x LDZ2 #0010 SUB2 .Screen/x DEO2
127
-	;ground .Screen/addr DEO2
128
-
129
-	#10 #00 
130
-	&loop
131
-		( draw ) #01 .Screen/sprite DEO
132
-		( sety ) .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2
133
-		( setx ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
134
-		( incr ) INC
135
-		GTHk ,&loop JCN
136
-	POP2
137
-
138
-RTN
135
+JMP2r
139 136
 
140 137
 @cursor 
141 138
 	80c0 e0f0 f8e0 1000 
142
-
139
+@frames
140
+	00 01 02 03 02 01 00 00
141
+	00 00 00 00 00 00 00 00
143 142
 @ears 
144 143
 	081c 3e3e 7f7f ffff 081c 3e3e 7f7f fffc
145 144
 	081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f 
146
-
147 145
 @eye 
148 146
 	ffff ffff ff7f 3f0f f7ef cfe7 f07c 3f0f
149 147
 	ffff ffff fffe fcf0 87c3 c183 071e fcf0
... ...
@@ -153,16 +151,15 @@ RTN
153 151
 	ffff ffff fffe fcf0 0783 c1c3 871e fcf0
154 152
 	ffff ffff ff7f 3f0f f0e0 c1e1 f07c 3f0f
155 153
 	ffff ffff fffe fcf0 07f3 f9fb f71e fcf0
156
-
157 154
 @body 
158 155
 	0707 0707 0302 0200 0107 0707 0300 0000
156
+	&tail
159 157
 	e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000
160 158
 	e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000
161 159
 	e0f0 f0e0 e080 8000 c0f2 faf9 fef8 b000
162 160
 	e0f0 f0e0 e080 8000 c0f1 faf9 fef8 b000
163 161
 	0707 0707 0f08 1000 0307 0707 0f00 0000
164 162
 	e0e0 e0e0 e080 8000 f2f9 f9fe b884 8400 
165
-
166 163
 @ground 
167 164
 	bf00 5c02 0202 020c ef10 6f90 8080 8074
168 165
 	ff00 fe01 0100 0116 fd00 3c40 4040 4028