Browse code

(calc.tal) Optimized to use screen/auto

neauoire authored on 15/03/2022 18:03:09
Showing 1 changed files
... ...
@@ -1,71 +1,22 @@
1 1
 ( simple graphical calculator )
2 2
 
3
-%+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
4
-%<  { LTH }  %>  { GTH }  %=  { EQU }  %!  { NEQ }
5
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
6
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
7
-
8
-%2*  { #10 SFT } %2/  { #01 SFT } %2**  { #10 SFT2 } %2//  { #01 SFT2 }
9
-%4*  { #20 SFT } %4/  { #02 SFT } %4**  { #20 SFT2 } %4//  { #02 SFT2 }
10
-%8*  { #30 SFT } %8/  { #03 SFT } %8**  { #30 SFT2 } %8//  { #03 SFT2 }
11
-%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 }
12
-%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 }
13
-
14
-%2MOD  { #01 AND } %2MOD2  { #0001 AND2 }
15
-%4MOD  { #03 AND } %4MOD2  { #0003 AND2 }
16
-%8MOD  { #07 AND } %8MOD2  { #0007 AND2 }
17
-%10MOD { #0f AND } %10MOD2 { #000f AND2 }
18
-
19
-%!~ { NEQk NIP }
20
-
21
-%DEBUG  { ;print-hex/byte JSR2 #0a .Console/write DEO }
22
-%DEBUG2 { ;print-hex/short JSR2 #0a .Console/write DEO }
23
-
24
-%AUTO-NONE   { #00 .Screen/auto DEO }
25
-%AUTO-X      { #01 .Screen/auto DEO }
26
-%AUTO-XADDR  { #05 .Screen/auto DEO }
27
-%AUTO-YADDR  { #06 .Screen/auto DEO }
28
-
29
-%RELEASE-MOUSE { #0096 DEO }
30
-
31
-%RTN { JMP2r }
32
-%RTN? { JMP RTN }
33
-%TOS { #00 SWP }
34
-
35
-( devices )
36
-
37
-|00 @System     [ &vector $2 &wst      $1 &rst    $1 &pad   $4 &r      $2 &g      $2 &b    $2 &debug  $1 &halt $1 ]
38
-|10 @Console    [ &vector $2 &read     $1 &pad    $5 &write $1 &error  $1 ]
39
-|20 @Screen     [ &vector $2 &width    $2 &height $2 &auto  $1 &pad    $1 &x      $2 &y      $2 &addr $2 &pixel  $1 &sprite $1 ]
40
-|30 @Audio0     [ &vector $2 &position $2 &output $1 &pad   $3 &adsr   $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
41
-|80 @Controller [ &vector $2 &button   $1 &key    $1 ]
42
-|90 @Mouse      [ &vector $2 &x        $2 &y      $2 &state $1 &wheel  $1 ]
43
-|a0 @File       [ &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 ]
44
-
45
-( variables )
3
+|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
4
+|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
5
+|30 @Audio0 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1
6
+|80 @Controller &vector $2 &button $1 &key $1
7
+|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &wheel $1
8
+|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
46 9
 
47 10
 |0000
48 11
 
49
-@input
50
-	&value $2
51
-	&mode $1
52
-@stack
53
-	&length $1
54
-	&items $10
55
-@center
56
-	&x $2 &y $2
57
-@pointer
58
-	&x $2 &y $2 &last $1
59
-@keypad-frame
60
-	&x $2 &y $2 &x2 $2 &y2 $2
61
-@modpad-frame
62
-	&x $2 &y $2 &x2 $2 &y2 $2
63
-@bitpad-frame
64
-	&x $2 &y $2 &x2 $2 &y2 $2
65
-@input-frame
66
-	&x $2 &y $2 &x2 $2 &y2 $2
67
-
68
-( program )
12
+@input &value $2 &mode $1
13
+@stack &length $1 &items $10
14
+@center &x $2 &y $2
15
+@pointer &x $2 &y $2 &last $1
16
+@keypad-frame &x $2 &y $2 &x2 $2 &y2 $2
17
+@modpad-frame &x $2 &y $2 &x2 $2 &y2 $2
18
+@bitpad-frame &x $2 &y $2 &x2 $2 &y2 $2
19
+@input-frame &x $2 &y $2 &x2 $2 &y2 $2
69 20
 
70 21
 |0100 ( -> )
71 22
 
... ...
@@ -73,45 +24,36 @@
73 24
 	#0e7d .System/r DEO2
74 25
 	#0ec6 .System/g DEO2
75 26
 	#0e95 .System/b DEO2
76
-
77 27
 	( size )
78 28
 	#0090 .Screen/width DEO2
79 29
 	#0100 .Screen/height DEO2
80
-
81 30
 	( vectors )
82 31
 	;on-mouse .Mouse/vector DEO2
83 32
 	;on-button .Controller/vector DEO2
84
-
85 33
 	( setup synth )
86 34
 	#0112 .Audio0/adsr DEO2
87 35
 	;sin-pcm .Audio0/addr DEO2
88 36
 	#0100 .Audio0/length DEO2
89 37
 	#88 .Audio0/volume DEO
90
-
91 38
 	( center )
92
-	.Screen/width DEI2 2// .center/x STZ2
93
-	.Screen/height DEI2 2// .center/y STZ2
94
-
95
-	.center/x LDZ2 #0020 --
96
-		DUP2 .keypad-frame/x STZ2 #0040 ++ .keypad-frame/x2 STZ2
97
-	.center/y LDZ2 #0018 --
98
-		DUP2 .keypad-frame/y STZ2 #003f ++ .keypad-frame/y2 STZ2
99
-
39
+	.Screen/width DEI2 #01 SFT2 .center/x STZ2
40
+	.Screen/height DEI2 #01 SFT2 .center/y STZ2
41
+	.center/x LDZ2 #0020 SUB2
42
+		DUP2 .keypad-frame/x STZ2 #0040 ADD2 .keypad-frame/x2 STZ2
43
+	.center/y LDZ2 #0018 SUB2
44
+		DUP2 .keypad-frame/y STZ2 #003f ADD2 .keypad-frame/y2 STZ2
100 45
 	.keypad-frame/x LDZ2
101
-		DUP2 .modpad-frame/x STZ2 #0040 ++ .modpad-frame/x2 STZ2
102
-	.keypad-frame/y LDZ2 #0040 ++
103
-		DUP2 .modpad-frame/y STZ2 #001f ++ .modpad-frame/y2 STZ2
104
-
46
+		DUP2 .modpad-frame/x STZ2 #0040 ADD2 .modpad-frame/x2 STZ2
47
+	.keypad-frame/y LDZ2 #0040 ADD2
48
+		DUP2 .modpad-frame/y STZ2 #001f ADD2 .modpad-frame/y2 STZ2
105 49
 	.keypad-frame/x LDZ2
106
-		DUP2 .bitpad-frame/x STZ2 #0040 ++ .bitpad-frame/x2 STZ2
107
-	.modpad-frame/y2 LDZ2 #0008 ++
108
-		DUP2 .bitpad-frame/y STZ2 #000f ++ .bitpad-frame/y2 STZ2
109
-
110
-	.center/x LDZ2 #0020 --
111
-		DUP2 .input-frame/x STZ2 #0040 ++ .input-frame/x2 STZ2
112
-	.center/y LDZ2 #002a --
113
-		DUP2 .input-frame/y STZ2 #0010 ++ .input-frame/y2 STZ2
114
-
50
+		DUP2 .bitpad-frame/x STZ2 #0040 ADD2 .bitpad-frame/x2 STZ2
51
+	.modpad-frame/y2 LDZ2 #0008 ADD2
52
+		DUP2 .bitpad-frame/y STZ2 #000f ADD2 .bitpad-frame/y2 STZ2
53
+	.center/x LDZ2 #0020 SUB2
54
+		DUP2 .input-frame/x STZ2 #0040 ADD2 .input-frame/x2 STZ2
55
+	.center/y LDZ2 #002a SUB2
56
+		DUP2 .input-frame/y STZ2 #0010 ADD2 .input-frame/y2 STZ2
115 57
 	( theme support )
116 58
 	;load-theme JSR2
117 59
 
... ...
@@ -121,21 +63,21 @@ BRK
121 63
 
122 64
 	.Controller/key DEI
123 65
 	( generics )
124
-	#00 !~ ,&no-empty JCN ;redraw JSR2 POP BRK &no-empty
125
-	#09 !~ ,&no-tab JCN ;toggle-mode JSR2 POP BRK &no-tab
126
-	#0d !~ ,&no-enter JCN ;do-push JSR2 POP BRK &no-enter
127
-	#1b !~ ,&no-esc JCN ;do-pop JSR2 POP BRK &no-esc
128
-	#08 !~ ,&no-backspace JCN ;do-erase JSR2 POP BRK &no-backspace
66
+	[ #00 ] NEQk NIP ,&no-empty JCN ;redraw JSR2 POP BRK &no-empty
67
+	[ #09 ] NEQk NIP ,&no-tab JCN ;toggle-mode JSR2 POP BRK &no-tab
68
+	[ #0d ] NEQk NIP ,&no-enter JCN ;do-push JSR2 POP BRK &no-enter
69
+	[ #1b ] NEQk NIP ,&no-esc JCN ;do-pop JSR2 POP BRK &no-esc
70
+	[ #08 ] NEQk NIP ,&no-backspace JCN ;do-erase JSR2 POP BRK &no-backspace
129 71
 	( arithmetic )
130
-	LIT '+ !~ ,&no-add JCN ;do-add JSR2 POP BRK &no-add
131
-	LIT '- !~ ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
132
-	LIT '* !~ ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
133
-	LIT '/ !~ ,&no-div JCN ;do-div JSR2 POP BRK &no-div
72
+	[ LIT '+ ] NEQk NIP ,&no-add JCN ;do-add JSR2 POP BRK &no-add
73
+	[ LIT '- ] NEQk NIP ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
74
+	[ LIT '* ] NEQk NIP ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
75
+	[ LIT '/ ] NEQk NIP ,&no-div JCN ;do-div JSR2 POP BRK &no-div
134 76
 	( bitwise )
135
-	LIT '& !~ ,&no-and JCN ;do-and JSR2 POP BRK &no-and
136
-	LIT '| !~ ,&no-ora JCN ;do-ora JSR2 POP BRK &no-ora
137
-	LIT '^ !~ ,&no-eor JCN ;do-eor JSR2 POP BRK &no-eor
138
-	LIT '~ !~ ,&no-not JCN ;do-not JSR2 POP BRK &no-not
77
+	[ LIT '& ] NEQk NIP ,&no-and JCN ;do-and JSR2 POP BRK &no-and
78
+	[ LIT '| ] NEQk NIP ,&no-ora JCN ;do-ora JSR2 POP BRK &no-ora
79
+	[ LIT '^ ] NEQk NIP ,&no-eor JCN ;do-eor JSR2 POP BRK &no-eor
80
+	[ LIT '~ ] NEQk NIP ,&no-not JCN ;do-not JSR2 POP BRK &no-not
139 81
 	( value )
140 82
 	;key-value JSR2 ;push-input JSR2
141 83
 
... ...
@@ -153,11 +95,11 @@ BRK
153 95
 	( draw new cursor )
154 96
 	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
155 97
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
156
-	#41 .Mouse/state DEI #01 = + .Screen/sprite DEO
98
+	#41 .Mouse/state DEI #01 EQU ADD .Screen/sprite DEO
157 99
 
158 100
 	.Mouse/state DEI .pointer/last LDZ
159 101
 	( down )
160
-	DUP2 #0100 !! ,&no-down JCN
102
+	DUP2 #0100 NEQ2 ,&no-down JCN
161 103
 		.Mouse/x DEI2 .Mouse/y DEI2
162 104
 		OVR2 OVR2 .keypad-frame ;within-rect JSR2 ;click-keypad JCN2
163 105
 		OVR2 OVR2 .input-frame ;within-rect JSR2 ;click-input JCN2
... ...
@@ -167,7 +109,7 @@ BRK
167 109
 		POP2 POP2
168 110
 		&no-down
169 111
 	( up )
170
-	DUP2 #0001 !! ,&no-up JCN
112
+	DUP2 #0001 NEQ2 ,&no-up JCN
171 113
 		;redraw JSR2
172 114
 		&no-up
173 115
 	POP2
... ...
@@ -178,109 +120,109 @@ BRK
178 120
 
179 121
 @click-keypad ( state* x* y* -> )
180 122
 
181
-	( y ) .keypad-frame/y LDZ2 -- #24 SFT2
182
-	( x ) SWP2 .keypad-frame/x LDZ2 -- 10// 4MOD2
183
-	( value ) ++ ;keypad/layout ++ LDA ;push-input JSR2
184
-	RELEASE-MOUSE POP2
123
+	( y ) .keypad-frame/y LDZ2 SUB2 #24 SFT2
124
+	( x ) SWP2 .keypad-frame/x LDZ2 SUB2 #04 SFT2 #0003 AND2
125
+	( value ) ADD2 ;keypad/layout ADD2 LDA ;push-input JSR2
126
+	#00 .Mouse/state DEO POP2
185 127
 
186 128
 BRK
187 129
 
188 130
 @click-modpad ( state* x* y* -> )
189 131
 
190
-	( y ) .modpad-frame/y LDZ2 -- #24 SFT2 NIP STH
191
-	( x ) .modpad-frame/x LDZ2 -- 10//
192
-	( lookup ) STHr + 2** ;keypad/ops ++ LDA2 JSR2
132
+	( y ) .modpad-frame/y LDZ2 SUB2 #24 SFT2 NIP STH
133
+	( x ) .modpad-frame/x LDZ2 SUB2 #04 SFT2
134
+	( lookup ) STHr ADD #10 SFT2 ;keypad/ops ADD2 LDA2 JSR2
193 135
 	;draw-bitpad JSR2
194
-	RELEASE-MOUSE POP2
136
+	#00 .Mouse/state DEO POP2
195 137
 
196 138
 BRK
197 139
 
198 140
 @click-input ( state* x* y* -> )
199 141
 
200 142
 	POP2
201
-	.input-frame/x LDZ2 -- 8// NIP
202
-	DUP #00 ! ,&no-push JCN
143
+	.input-frame/x LDZ2 SUB2 #03 SFT2 NIP
144
+	DUP #00 NEQ ,&no-push JCN
203 145
 		;do-push JSR2 &no-push
204
-	DUP #01 ! ,&no-pop JCN
146
+	DUP #01 NEQ ,&no-pop JCN
205 147
 		;do-pop JSR2 &no-pop
206 148
 	POP
207
-	RELEASE-MOUSE POP2
149
+	#00 .Mouse/state DEO POP2
208 150
 
209 151
 BRK
210 152
 
211 153
 @click-bitpad ( state* x* y* -> )
212 154
 
213
-	( y ) .bitpad-frame/y LDZ2 -- 8// NIP 8* STH
214
-	( x ) .bitpad-frame/x LDZ2 -- 8// NIP
215
-	( value ) STHr + STHk
155
+	( y ) .bitpad-frame/y LDZ2 SUB2 #03 SFT2 NIP #30 SFT STH
156
+	( x ) .bitpad-frame/x LDZ2 SUB2 #03 SFT2 NIP
157
+	( value ) STHr ADD STHk
216 158
 
217
-	#30 + .Audio0/pitch DEO
159
+	#30 ADD .Audio0/pitch DEO
218 160
 
219 161
 	( toggle bit )
220 162
 	.input/value LDZ2 #0001
221
-		[ STHr #0f SWP - ] #40 SFT SFT2 EOR2
163
+		[ STHr #0f SWP SUB ] #40 SFT SFT2 EOR2
222 164
 		.input/value STZ2
223 165
 
224 166
 	;draw-bitpad JSR2
225 167
 	#ff ;draw-input JSR2
226
-	RELEASE-MOUSE POP2
168
+	#00 .Mouse/state DEO POP2
227 169
 
228 170
 BRK
229 171
 
230 172
 @push-input ( key -- )
231 173
 
232
-	DUP #50 + .Audio0/pitch DEO
233
-	#00 OVR ;keypad/series ++ LDA ;draw-keypad JSR2
174
+	DUP #50 ADD .Audio0/pitch DEO
175
+	#00 OVR ;keypad/series ADD2 LDA ;draw-keypad JSR2
234 176
 	( hex/dec )
235
-	TOS .input/value LDZ2 #00 [ #0a #10 .input/mode LDZ JMP SWP POP ] **
236
-		++ .input/value STZ2
177
+	#00 SWP .input/value LDZ2 #00 [ #0a #10 .input/mode LDZ JMP SWP POP ] MUL2
178
+		ADD2 .input/value STZ2
237 179
 	#ff ;draw-input JSR2
238 180
 	;draw-bitpad JSR2
239 181
 
240
-RTN
182
+JMP2r
241 183
 
242 184
 @push ( value* -- )
243 185
 
244
-	( store ) .stack/length LDZ 2* .stack/items + STZ2
186
+	( store ) .stack/length LDZ #10 SFT .stack/items ADD STZ2
245 187
 	( INCZ ) .stack/length LDZk INC SWP STZ
246 188
 	( reset ) #0000 .input/value STZ2
247 189
 	#00 ;draw-input JSR2
248 190
 	;draw-stack JSR2
249 191
 
250
-RTN
192
+JMP2r
251 193
 
252 194
 @pop ( -- value* )
253 195
 
254
-	.stack/length LDZ #01 - 2* .stack/items + LDZ2
255
-	( clear ) #0000 [ .stack/length LDZ #01 - 2* .stack/items + ] STZ2
256
-	( DECZ ) .stack/length LDZk #01 - SWP STZ
196
+	.stack/length LDZ #01 SUB #10 SFT .stack/items ADD LDZ2
197
+	( clear ) #0000 [ .stack/length LDZ #01 SUB #10 SFT .stack/items ADD ] STZ2
198
+	( DECZ ) .stack/length LDZk #01 SUB SWP STZ
257 199
 	#01 ;draw-input JSR2
258 200
 	;draw-stack JSR2
259 201
 
260
-RTN
202
+JMP2r
261 203
 
262 204
 @toggle-mode ( -- )
263 205
 
264
-	.input/mode LDZk #00 = SWP STZ
206
+	.input/mode LDZk #00 EQU SWP STZ
265 207
 	#30 .Audio0/pitch DEO
266 208
 	;redraw JSR2
267 209
 
268
-RTN
210
+JMP2r
269 211
 
270 212
 @do-push ( -- )
271 213
 
272
-	.input/value LDZ2 ADD #00 > JMP RTN
273
-	.stack/length LDZ #07 < JMP RTN
214
+	.input/value LDZ2 ADD #00 GTH JMP JMP2r
215
+	.stack/length LDZ #07 LTH JMP JMP2r
274 216
 	#40 .Audio0/pitch DEO
275 217
 	.input/value LDZ2 ;push JSR2
276 218
 	;draw-bitpad JSR2
277 219
 
278
-RTN
220
+JMP2r
279 221
 
280 222
 @do-pop ( -- )
281 223
 
282 224
 	#0000 .input/value STZ2
283
-	.stack/length LDZ #00 = ,&continue JCN
225
+	.stack/length LDZ #00 EQU ,&continue JCN
284 226
 		#41 .Audio0/pitch DEO
285 227
 		;pop JSR2 POP2
286 228
 		;draw-stack JSR2
... ...
@@ -288,119 +230,119 @@ RTN
288 230
 	#01 ;draw-input JSR2
289 231
 	;draw-bitpad JSR2
290 232
 
291
-RTN
233
+JMP2r
292 234
 
293 235
 @do-add ( -- )
294 236
 
295
-	.input/value LDZ2 #0000 == ,&no-push JCN
237
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
296 238
 		;do-push JSR2
297 239
 		&no-push
298 240
 
299
-	( stack empty ) .stack/length LDZ #01 > RTN?
241
+	( stack empty ) .stack/length LDZ #01 GTH JMP JMP2r
300 242
 
301 243
 	#42 .Audio0/pitch DEO
302 244
 	#00 ;draw-modpad JSR2
303 245
 	;pop JSR2 ;pop JSR2 SWP2 ADD2 ;push JSR2
304 246
 
305
-RTN
247
+JMP2r
306 248
 
307 249
 @do-sub ( -- )
308 250
 
309
-	.input/value LDZ2 #0000 == ,&no-push JCN
251
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
310 252
 		;do-push JSR2
311 253
 		&no-push
312 254
 
313
-	( stack empty ) .stack/length LDZ #01 > RTN?
255
+	( stack empty ) .stack/length LDZ #01 GTH JMP JMP2r
314 256
 
315 257
 	#43 .Audio0/pitch DEO
316 258
 	#01 ;draw-modpad JSR2
317 259
 	;pop JSR2 ;pop JSR2 SWP2 SUB2 ;push JSR2
318 260
 
319
-RTN
261
+JMP2r
320 262
 
321 263
 @do-mul ( -- )
322 264
 
323
-	.input/value LDZ2 #0000 == ,&no-push JCN
265
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
324 266
 		;do-push JSR2
325 267
 		&no-push
326 268
 
327
-	( stack empty ) .stack/length LDZ #01 > RTN?
269
+	( stack empty ) .stack/length LDZ #01 GTH JMP JMP2r
328 270
 
329 271
 	#44 .Audio0/pitch DEO
330 272
 	#02 ;draw-modpad JSR2
331 273
 	;pop JSR2 ;pop JSR2 SWP2 MUL2 ;push JSR2
332 274
 
333
-RTN
275
+JMP2r
334 276
 
335 277
 @do-div ( -- )
336 278
 
337
-	.input/value LDZ2 #0000 == ,&no-push JCN
279
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
338 280
 		;do-push JSR2
339 281
 		&no-push
340 282
 
341
-	( stack empty ) .stack/length LDZ #01 > RTN?
283
+	( stack empty ) .stack/length LDZ #01 GTH JMP JMP2r
342 284
 
343 285
 	#45 .Audio0/pitch DEO
344 286
 	#03 ;draw-modpad JSR2
345 287
 	;pop JSR2 ;pop JSR2 SWP2 DIV2 ;push JSR2
346 288
 
347
-RTN
289
+JMP2r
348 290
 
349 291
 @do-and ( -- )
350 292
 
351
-	.input/value LDZ2 #0000 == ,&no-push JCN
293
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
352 294
 		;do-push JSR2
353 295
 		&no-push
354 296
 
355
-	( stack empty ) .stack/length LDZ #01 > RTN?
297
+	( stack empty ) .stack/length LDZ #01 GTH JMP JMP2r
356 298
 
357 299
 	#46 .Audio0/pitch DEO
358 300
 	#04 ;draw-modpad JSR2
359 301
 	;pop JSR2 ;pop JSR2 SWP2 AND2 ;push JSR2
360 302
 
361
-RTN
303
+JMP2r
362 304
 
363 305
 @do-ora ( -- )
364 306
 
365
-	.input/value LDZ2 #0000 == ,&no-push JCN
307
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
366 308
 		;do-push JSR2
367 309
 		&no-push
368 310
 
369
-	( stack empty ) .stack/length LDZ #01 > RTN?
311
+	( stack empty ) .stack/length LDZ #01 GTH JMP JMP2r
370 312
 
371 313
 	#47 .Audio0/pitch DEO
372 314
 	#05 ;draw-modpad JSR2
373 315
 	;pop JSR2 ;pop JSR2 SWP2 ORA2 ;push JSR2
374 316
 
375
-RTN
317
+JMP2r
376 318
 
377 319
 @do-eor ( -- )
378 320
 
379
-	.input/value LDZ2 #0000 == ,&no-push JCN
321
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
380 322
 		;do-push JSR2
381 323
 		&no-push
382 324
 
383
-	( stack empty ) .stack/length LDZ #01 > RTN?
325
+	( stack empty ) .stack/length LDZ #01 GTH JMP JMP2r
384 326
 
385 327
 	#48 .Audio0/pitch DEO
386 328
 	#06 ;draw-modpad JSR2
387 329
 	;pop JSR2 ;pop JSR2 SWP2 EOR2 ;push JSR2
388 330
 
389
-RTN
331
+JMP2r
390 332
 
391 333
 @do-not ( -- )
392 334
 
393
-	.input/value LDZ2 #0000 == ,&no-push JCN
335
+	.input/value LDZ2 #0000 EQU2 ,&no-push JCN
394 336
 		;do-push JSR2
395 337
 		&no-push
396 338
 
397
-	( stack empty ) .stack/length LDZ #00 > RTN?
339
+	( stack empty ) .stack/length LDZ #00 GTH JMP JMP2r
398 340
 
399 341
 	#49 .Audio0/pitch DEO
400 342
 	#07 ;draw-modpad JSR2
401
-	;pop JSR2 #ffff EOR2  ;push JSR2
343
+	;pop JSR2 #ffff EOR2 ;push JSR2
402 344
 
403
-RTN
345
+JMP2r
404 346
 
405 347
 @do-erase ( -- )
406 348
 
... ...
@@ -408,19 +350,19 @@ RTN
408 350
 	#ff ;draw-input JSR2
409 351
 	;draw-bitpad JSR2
410 352
 
411
-RTN
353
+JMP2r
412 354
 
413 355
 @key-value ( key -- value )
414 356
 
415
-	DUP #2f > OVR #3a < #0101 !! ,&no-num JCN
416
-		#30 - RTN &no-num
417
-	DUP #60 > OVR #67 < #0101 !! ,&no-lc JCN
418
-		#57 - RTN ( #61 - #0a + ) &no-lc
419
-	DUP #40 > OVR #47 < #0101 !! ,&no-uc JCN
420
-		#37 - RTN ( #41 - #0a + ) &no-uc
357
+	DUP #2f GTH OVR #3a LTH #0101 NEQ2 ,&no-num JCN
358
+		#30 SUB JMP2r &no-num
359
+	DUP #60 GTH OVR #67 LTH #0101 NEQ2 ,&no-lc JCN
360
+		#57 SUB JMP2r ( #61 - #0a ADD ) &no-lc
361
+	DUP #40 GTH OVR #47 LTH #0101 NEQ2 ,&no-uc JCN
362
+		#37 SUB JMP2r ( #41 - #0a ADD ) &no-uc
421 363
 	POP #00
422 364
 
423
-RTN
365
+JMP2r
424 366
 
425 367
 @redraw ( -- )
426 368
 
... ...
@@ -434,144 +376,141 @@ RTN
434 376
 	#0010 .Screen/x DEO2
435 377
 	#0010 .Screen/y DEO2
436 378
 
437
-RTN
379
+JMP2r
438 380
 
439 381
 @draw-mode ( -- )
440 382
 
441
-	AUTO-XADDR
383
+	#26 .Screen/auto DEO
442 384
 	.input-frame/x LDZ2 .Screen/x DEO2
443
-	.input-frame/y LDZ2 #0014 -- .Screen/y DEO2
444
-	;modes #00 .input/mode LDZ #0018 MUL2 ++ .Screen/addr DEO2
445
-	#02 .input/mode LDZ + .Screen/sprite DEOk DEOk DEO
446
-	AUTO-NONE
385
+	.input-frame/y LDZ2 #0014 SUB2 .Screen/y DEO2
386
+	;modes #00 .input/mode LDZ #0018 MUL2 ADD2 .Screen/addr DEO2
387
+	#02 .input/mode LDZ ADD .Screen/sprite DEO
388
+	#00 .Screen/auto DEO
447 389
 
448
-RTN
390
+JMP2r
449 391
 
450 392
 @draw-stack ( -- )
451 393
 
452 394
 	#08 #00
453 395
 	&loop
454
-		.input-frame/x LDZ2 #0018 ++ .Screen/x DEO2
455
-		#00 OVR 8** .input-frame/y LDZ2 ++ #004c -- .Screen/y DEO2
456
-		( color ) DUP #08 .stack/length LDZ - #01 - > STH
457
-		( value ) DUP 2* .stack/items + [ #10 .stack/length LDZ 2* - - ] LDZ2
396
+		.input-frame/x LDZ2 #0018 ADD2 .Screen/x DEO2
397
+		#00 OVR #30 SFT2 .input-frame/y LDZ2 ADD2 #004c SUB2 .Screen/y DEO2
398
+		( color ) DUP #08 .stack/length LDZ SUB #01 SUB GTH STH
399
+		( value ) DUP #10 SFT .stack/items ADD [ #10 .stack/length LDZ #10 SFT SUB SUB ] LDZ2
458 400
 			STHr ;draw-number JSR2
459 401
 		INC GTHk ,&loop JCN
460 402
 	POP2
461 403
 
462
-RTN
404
+JMP2r
463 405
 
464 406
 @draw-input ( key -- )
465 407
 
466 408
 	STH
467 409
 	( draw value )
468
-	.input-frame/x LDZ2 #0018 ++ .Screen/x DEO2
469
-	.input-frame/y LDZ2 #0003 ++ .Screen/y DEO2
410
+	.input-frame/x LDZ2 #0018 ADD2 .Screen/x DEO2
411
+	.input-frame/y LDZ2 #0003 ADD2 .Screen/y DEO2
470 412
 	.input/value LDZ2 #02 ;draw-number JSR2
471 413
 	( controls )
472 414
 	.input-frame/x LDZ2
473 415
 	.input-frame/y LDZ2
474
-	;stack-icns/push [ STHkr #00 = ] #02
416
+	;stack-icns/push [ STHkr #00 EQU ] #02
475 417
 		;draw-key-thin JSR2
476
-	.input-frame/x LDZ2 #0008 ++
418
+	.input-frame/x LDZ2 #0008 ADD2
477 419
 	.input-frame/y LDZ2
478
-	;stack-icns/pop [ STHkr #01 = ] #03
420
+	;stack-icns/pop [ STHkr #01 EQU ] #03
479 421
 		;draw-key-thin JSR2
480 422
 	( line )
481 423
 	.input-frame/x LDZ2
482 424
 	.input-frame/x2 LDZ2
483
-	.input-frame/y LDZ2 #0004 -- #02
425
+	.input-frame/y LDZ2 #0004 SUB2 #02
484 426
 		;line-hor-dotted JSR2
485 427
 	POPr
486 428
 
487
-RTN
429
+JMP2r
488 430
 
489 431
 @draw-keypad ( key -- )
490 432
 
491 433
 	STH
492 434
 	#10 #00
493 435
 	&loop
494
-		( color ) #00 OVR ;keypad/color ++ LDA STH
495
-		( state ) DUP OVRr STHr = STH
496
-		( layout ) #00 OVR ;keypad/layout ++ LDA
497
-			( layout addr ) TOS 8** ;font-hex ++ STH2
498
-		( x ) DUP 4MOD TOS 10** STH2
499
-		( y ) DUP 4/ TOS 10**
500
-		( origin-x ) STH2r .keypad-frame/x LDZ2 ++ SWP2
501
-		( origin-y ) .keypad-frame/y LDZ2 ++
436
+		( color ) #00 OVR ;keypad/color ADD2 LDA STH
437
+		( state ) DUP OVRr STHr EQU STH
438
+		( layout ) #00 OVR ;keypad/layout ADD2 LDA
439
+			( layout addr ) #00 SWP #30 SFT2 ;font-hex ADD2 STH2
440
+		( x ) #00 OVR #03 AND #40 SFT2 STH2
441
+		( y ) #00 OVR #02 SFT #40 SFT2
442
+		( origin-x ) STH2r .keypad-frame/x LDZ2 ADD2 SWP2
443
+		( origin-y ) .keypad-frame/y LDZ2 ADD2
502 444
 			STH2r STHr STHr ;draw-key JSR2
503 445
 		INC GTHk ,&loop JCN
504 446
 	POP2
505 447
 	POPr
506 448
 
507
-RTN
449
+JMP2r
508 450
 
509 451
 @draw-modpad ( key -- )
510 452
 
511 453
 	STH
512 454
 	#08 #00
513 455
 	&loop
514
-		( state ) DUP STHkr = STH
515
-		( glyph ) #00 OVR 8** ;mod-icns ++ STH2
516
-		( y ) DUP 4/ TOS 10** .modpad-frame/y LDZ2 ++ STH2
517
-		( x ) DUP 4MOD TOS 10** .modpad-frame/x LDZ2 ++ STH2
456
+		( state ) DUP STHkr EQU STH
457
+		( glyph ) #00 OVR #30 SFT2 ;mod-icns ADD2 STH2
458
+		( y ) #00 OVR #02 SFT #40 SFT2 .modpad-frame/y LDZ2 ADD2 STH2
459
+		( x ) #00 OVR #03 AND #40 SFT2 .modpad-frame/x LDZ2 ADD2 STH2
518 460
 		STH2r STH2r STH2r STHr #03 ;draw-key JSR2
519 461
 		INC GTHk ,&loop JCN
520 462
 	POP2
521 463
 	POPr
522 464
 
523
-RTN
465
+JMP2r
524 466
 
525 467
 @draw-bitpad ( -- )
526 468
 
527 469
 	#1000
528 470
 	&loop
529
-		( y ) DUP 8/ TOS 8** .bitpad-frame/y LDZ2 ++ .Screen/y DEO2
530
-		( x ) DUP 8MOD TOS 8** .bitpad-frame/x LDZ2 ++ .Screen/x DEO2
531
-		( state ) DUP #0f SWP - .input/value LDZ2 ROT SFT2 2MOD2
532
-		( addr ) 8** ;bit-icns ++ .Screen/addr DEO2
471
+		( y ) #00 OVR #03 SFT #30 SFT2 .bitpad-frame/y LDZ2 ADD2 .Screen/y DEO2
472
+		( x ) #00 OVR #07 AND #30 SFT2 .bitpad-frame/x LDZ2 ADD2 .Screen/x DEO2
473
+		( state ) DUP #0f SWP SUB .input/value LDZ2 ROT SFT2 #0001 AND2
474
+		( addr ) #30 SFT2 ;bit-icns ADD2 .Screen/addr DEO2
533 475
 		#01 .Screen/sprite DEO
534 476
 		INC GTHk ,&loop JCN
535 477
 	POP2
536 478
 
537
-RTN
479
+JMP2r
538 480
 
539 481
 @draw-key ( x* y* glyph* state color -- )
540 482
 
541 483
 	STH2
542
-	AUTO-XADDR
484
+	#16 .Screen/auto DEO
543 485
 	SWP2 .Screen/y DEO2
544 486
 	SWP2 .Screen/x DEO2
545 487
 	( bg )
546
-	;button-icns [ #00 OVRr STHr 20** ++ ] .Screen/addr DEO2
547
-	STHkr .Screen/sprite DEOk DEO
548
-	.Screen/x DEI2k #0010 -- ROT DEO2
549
-	.Screen/y DEI2k #0008 ++ ROT DEO2
488
+	;button-icns [ #00 OVRr STHr #50 SFT2 ADD2 ] .Screen/addr DEO2
550 489
 	STHkr .Screen/sprite DEOk DEO
551 490
 	( fg )
552 491
 	.Screen/addr DEO2
553
-	.Screen/x DEI2k #000c -- ROT DEO2
554
-	.Screen/y DEI2k #0005 -- ROT DEO2
555
-	STHr [ STHr #09 MUL + ] .Screen/sprite DEO
556
-	AUTO-NONE
492
+	#00 .Screen/auto DEO
493
+	.Screen/y DEI2k #000d SUB2 ROT DEO2
494
+	.Screen/x DEI2k #0004 ADD2 ROT DEO2
495
+	STHr [ STHr #09 MUL ADD ] .Screen/sprite DEO
557 496
 
558
-RTN
497
+JMP2r
559 498
 
560 499
 @draw-key-thin ( x* y* glyph* state color -- )
561 500
 
562
-	AUTO-YADDR
501
+	#06 .Screen/auto DEO
563 502
 	,&color STR ,&state STR ,&glyph STR2
564 503
 	( frame )
565
-	;button-thin-icns #00 [ LIT &state $1 ] 10** ++ .Screen/addr DEO2
504
+	;button-thin-icns #00 [ LIT &state $1 ] #40 SFT2 ADD2 .Screen/addr DEO2
566 505
 	.Screen/y DEO2 .Screen/x DEO2
567 506
 	[ LIT &color $1 ] .Screen/sprite DEOk DEO
568 507
 	( glyph )
569 508
 	[ LIT2 &glyph $2 ] .Screen/addr DEO2
570
-	.Screen/y DEI2 #000c -- .Screen/y DEO2
509
+	.Screen/y DEI2 #000c SUB2 .Screen/y DEO2
571 510
 	#05 .Screen/sprite DEO
572
-	AUTO-NONE
511
+	#00 .Screen/auto DEO
573 512
 
574
-RTN
513
+JMP2r
575 514
 
576 515
 @draw-number ( number* color -- )
577 516
 
... ...
@@ -580,38 +519,38 @@ RTN
580 519
 	#00 ;&zero STA
581 520
 	( hexadecimal )
582 521
 	.input/mode LDZ ,&decimal JCN
583
-		AUTO-X
522
+		#01 .Screen/auto DEO
584 523
 		#00 ,&digit JSR
585 524
 		SWP
586 525
 		STHk #04 SFT ,&digit JSR
587 526
 		STHr #0f AND ,&digit JSR
588 527
 		STHk #04 SFT ,&digit JSR
589 528
 		STHr #0f AND ,&digit JSR
590
-		AUTO-NONE
591
-	RTN
529
+		#00 .Screen/auto DEO
530
+	JMP2r
592 531
 	&digit ( num -- )
593 532
 		,&addr JSR .Screen/addr DEO2
594 533
 		[ LIT &color $1 ] .Screen/sprite DEO
595
-	RTN
534
+	JMP2r
596 535
 	&decimal ( num* -- )
597
-		AUTO-X
536
+		#01 .Screen/auto DEO
598 537
 		#2710 DIV2k DUP2 NIP ,&digit JSR MUL2 SUB2
599 538
 		#03e8 DIV2k DUP2 NIP ,&digit JSR MUL2 SUB2
600 539
 		#0064 DIV2k DUP2 NIP ,&digit JSR MUL2 SUB2 NIP
601 540
 		#0a DIVk DUP ,&digit JSR MUL SUB
602 541
 		,&digit JSR
603
-		AUTO-NONE
604
-	RTN
542
+		#00 .Screen/auto DEO
543
+	JMP2r
605 544
 	&addr ( num -- addr* )
606 545
 		,&zero LDR ,&padded JCN
607 546
 		DUP ,&no-blank JCN
608
-			POP ;blank-icn RTN
547
+			POP ;blank-icn JMP2r
609 548
 			&no-blank
610 549
 		DUP ,&zero STR
611
-		&padded 8* TOS ;font-hex ++
612
-	RTN
550
+		&padded #30 SFT #00 SWP ;font-hex ADD2
551
+	JMP2r
613 552
 
614
-RTN
553
+JMP2r
615 554
 	&zero $1
616 555
 
617 556
 ( theme )
... ...
@@ -624,14 +563,14 @@ RTN
624 563
 	#0006 .File/length DEO2
625 564
 	#fffa .File/read DEO2
626 565
 
627
-	.File/success DEI2 #0006 !! ,&ignore JCN
566
+	.File/success DEI2 #0006 NEQ2 ,&ignore JCN
628 567
 		#fffa LDA2 .System/r DEO2
629 568
 		#fffc LDA2 .System/g DEO2
630 569
 		#fffe LDA2 .System/b DEO2
631 570
 		&ignore
632 571
 	;redraw JSR2
633 572
 
634
-RTN
573
+JMP2r
635 574
 
636 575
 @within-rect ( x* y* rect -- flag )
637 576
 	
... ...
@@ -643,8 +582,8 @@ RTN
643 582
 	( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ,&skip JCN
644 583
 	POP2 POP2 POPr
645 584
 	#01
646
-RTN
647
-	&skip POP2 POP2 POPr #00 RTN
585
+JMP2r
586
+	&skip POP2 POP2 POPr #00 JMP2r
648 587
 
649 588
 @line-hor-dotted ( x0* x1* y* color -- )
650 589
 	
... ...
@@ -656,7 +595,7 @@ RTN
656 595
 		INC2 INC2 GTH2k ,&loop JCN
657 596
 	POP2 POP2 POPr
658 597
 
659
-RTN
598
+JMP2r
660 599
 
661 600
 ( assets )
662 601
 
... ...
@@ -668,8 +607,8 @@ RTN
668 607
 	&color
669 608
 	0101 0102 0101 0102 0101 0102 0102 0202
670 609
 	&ops
671
-		:do-add :do-sub :do-mul :do-div
672
-		:do-and :do-ora :do-eor :do-not
610
+	:do-add :do-sub :do-mul :do-div
611
+	:do-and :do-ora :do-eor :do-not
673 612
 
674 613
 @sin-pcm
675 614
 	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad