Browse code

Replaced trivial multiplications with shifts and additions

Andrew Alderwick authored on 17/08/2021 19:16:39
Showing 18 changed files
... ...
@@ -1,8 +1,8 @@
1 1
 ( a blank file )
2 2
 
3
-%+  { ADD } %-   { SUB }  %*  { MUL } %/   { DIV }  
3
+%+  { ADD } %-   { SUB }              %/   { DIV }  
4 4
 %<  { LTH } %>   { GTH }  %=  { EQU } %!   { NEQ } 
5
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } 
5
+%++ { ADD2 } %-- { SUB2 }              %// { DIV2 } 
6 6
 %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }  
7 7
 
8 8
 %DEBUG  { ;print-hex JSR2 #0a .Console/write DEO }
... ...
@@ -65,7 +65,7 @@ BRK
65 65
 
66 66
 	.Mouse/state DEI #00 EQU ,&no-touch JCN
67 67
 		( incr ) .style LDZ #01 ADD #03 MOD .style STZ
68
-		( bg ) ;tiles .style LDZ #10 MUL TOS ADD2 ;cover-pattern JSR2
68
+		( bg ) ;tiles .style LDZ #40 SFT TOS ADD2 ;cover-pattern JSR2
69 69
 		( fg ) ;redraw JSR2
70 70
 		( release ) #00 .Mouse/state DEO
71 71
 	&no-touch
... ...
@@ -108,10 +108,10 @@ RTN
108 108
 	&loop
109 109
 		( save-x ) OVR #03 MOD TOS 8** .anchor/x LDZ2 ADD2 .Screen/x DEO2
110 110
 		( save-y ) OVR #03 DIV TOS 8** .anchor/y LDZ2 ADD2 .Screen/y DEO2
111
-		( get digit* ) OVR STHkr #02 MUL TOS ;digits ADD2 LDA2 
111
+		( get digit* ) OVR STHkr DUP ADD TOS ;digits ADD2 LDA2 
112 112
 		( get bit ) ROT #0e SWP SUB SFT2 #0001 AND2 
113 113
 		( set tile ) 8** ;tiles ADD2 
114
-		( set style ) .style LDZ #10 MUL TOS ADD2
114
+		( set style ) .style LDZ #40 SFT TOS ADD2
115 115
 		.Screen/addr DEO2
116 116
 		( draw ) #01 .Screen/sprite DEO
117 117
 		( incr ) SWP #01 ADD SWP 
... ...
@@ -436,7 +436,7 @@ JMP2r
436 436
 JMP2r
437 437
 
438 438
 @draw_c ( draw character  )
439
-	#00 ;c_state LDA get_nibble_h #08 MUL
439
+	#00 ;c_state LDA get_nibble_h #30 SFT
440 440
 	;c_sprite LDA2 ADD2 .Screen/addr DEO2
441 441
 	;c_pos/x out_screen_x
442 442
 	;c_pos/y out_screen_y
... ...
@@ -8,6 +8,7 @@
8 8
 %2** { #10 SFT2 } %2// { #01 SFT2 }
9 9
 %4** { #20 SFT2 } %4// { #02 SFT2 }
10 10
 %8** { #30 SFT2 } %8// { #03 SFT2 }
11
+%10** { #40 SFT2 }
11 12
 
12 13
 %TOB { NIP } %TOS { #00 SWP }
13 14
 %RTN { JMP2r }
... ...
@@ -135,7 +136,7 @@
135 136
 	&draw-pads
136 137
 		( load sample )
137 138
 		OVR TOS #0019 ** ;pad-path ++ .File/name DEO2
138
-		OVR #04 / #10 * .Audio0/length + DEI2 .File/length DEO2
139
+		OVR #04 / #40 SFT .Audio0/length + DEI2 .File/length DEO2
139 140
 		OVR TOS 2** ;pad-addr ++ LDA2 .File/load DEO2
140 141
 		( draw pad )
141 142
 		OVR #01 ;draw-pad JSR2
... ...
@@ -163,7 +164,7 @@ BRK
163 164
 		OVR STH
164 165
 		( x ) .mix-view/x1 LDZ2 #0074 ++
165 166
 		( y ) .mix-view/y1 LDZ2 PAD-HEIGHT STHkr TOS ** ++ #0002 ++
166
-		( output ) .Audio0/output STHr #10 * + DEI 
167
+		( output ) .Audio0/output STHr #40 SFT + DEI 
167 168
 		;draw-monitor JSR2
168 169
 		( incr ) SWP #01 + SWP
169 170
 		LTHk ,&loop JCN
... ...
@@ -219,7 +220,7 @@ BRK
219 220
 @on-touch-pad ( -> )
220 221
 	
221 222
 	( x ) .Mouse/x DEI2 .pad-view/x1 LDZ2 -- PAD-WIDTH // TOB
222
-	( y ) .Mouse/y DEI2 .pad-view/y1 LDZ2 -- PAD-HEIGHT // TOB #04 * +
223
+	( y ) .Mouse/y DEI2 .pad-view/y1 LDZ2 -- PAD-HEIGHT // TOB #20 SFT +
223 224
 	
224 225
 	DUP SWP ;play-pad JSR2
225 226
 
... ...
@@ -235,21 +236,21 @@ BRK
235 236
 	( knob ) .Mouse/x DEI2 .mix-view/x1 LDZ2 -- #0010 // TOB
236 237
 	( adsr )
237 238
 	DUP #00 ! ,&no-a JCN
238
-		.Audio0/adsr [ STHkr #10 * + ] DEI
239
+		.Audio0/adsr [ STHkr #40 SFT + ] DEI
239 240
 		#10 .Mouse/state DEI #10 = #e0 * + +
240
-		.Audio0/adsr [ STHkr #10 * + ] DEO &no-a
241
+		.Audio0/adsr [ STHkr #40 SFT + ] DEO &no-a
241 242
 	DUP #01 ! ,&no-d JCN
242
-		.Audio0/adsr [ STHkr #10 * + ] DEI
243
+		.Audio0/adsr [ STHkr #40 SFT + ] DEI
243 244
 		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
244
-		.Audio0/adsr [ STHkr #10 * + ] DEO &no-d
245
+		.Audio0/adsr [ STHkr #40 SFT + ] DEO &no-d
245 246
 	DUP #02 ! ,&no-s JCN
246
-		.Audio0/adsr [ STHkr #10 * + ] #01 + DEI
247
+		.Audio0/adsr [ STHkr #40 SFT + ] #01 + DEI
247 248
 		#10 .Mouse/state DEI #10 = #e0 * + +
248
-		.Audio0/adsr [ STHkr #10 * + ] #01 + DEO &no-s
249
+		.Audio0/adsr [ STHkr #40 SFT + ] #01 + DEO &no-s
249 250
 	DUP #03 ! ,&no-r JCN
250
-		.Audio0/adsr [ STHkr #10 * + ] #01 + DEI
251
+		.Audio0/adsr [ STHkr #40 SFT + ] #01 + DEI
251 252
 		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
252
-		.Audio0/adsr [ STHkr #10 * + ] #01 + DEO &no-r
253
+		.Audio0/adsr [ STHkr #40 SFT + ] #01 + DEO &no-r
253 254
 	( modes )
254 255
 	DUP #04 ! ,&no-repeat JCN
255 256
 		.modes [ STHkr + ] LDZ 
... ...
@@ -257,13 +258,13 @@ BRK
257 258
 		.modes [ STHkr + ] STZ &no-repeat
258 259
 	( volume )
259 260
 	DUP #05 ! ,&no-left JCN
260
-		.Audio0/volume [ STHkr #10 * + ] DEI 
261
+		.Audio0/volume [ STHkr #40 SFT + ] DEI 
261 262
 		#10 .Mouse/state DEI #10 = #e0 * + +
262
-		.Audio0/volume [ STHkr #10 * + ] DEO &no-left
263
+		.Audio0/volume [ STHkr #40 SFT + ] DEO &no-left
263 264
 	DUP #06 ! ,&no-right JCN
264
-		.Audio0/volume [ STHkr #10 * + ] DEI
265
+		.Audio0/volume [ STHkr #40 SFT + ] DEI
265 266
 		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
266
-		.Audio0/volume [ STHkr #10 * + ] DEO &no-right
267
+		.Audio0/volume [ STHkr #40 SFT + ] DEO &no-right
267 268
 	POP
268 269
 
269 270
 	( release ) #00 .Mouse/state DEO
... ...
@@ -311,11 +312,11 @@ BRK
311 312
 	DUP #02 ;draw-pad JSR2
312 313
 	( addr )
313 314
 	DUP TOS 2** ;pad-addr ++ LDA2 STH2
314
-	DUP #04 / #10 * .Audio0/addr + STH2r ROT DEO2
315
+	DUP #04 / #40 SFT .Audio0/addr + STH2r ROT DEO2
315 316
 	( pitch )
316 317
 	DUP TOS ;pad-pitch ++ LDA STH 
317
-	DUP #04 / .modes + LDZ #00 = #80 * STH ADDr
318
-	DUP #04 / #10 * .Audio0/pitch + STHr SWP DEO
318
+	DUP #04 / .modes + LDZ #00 = #70 SFT STH ADDr
319
+	DUP #04 / #40 SFT .Audio0/pitch + STHr SWP DEO
319 320
 	#04 / ;draw-mixer JSR2
320 321
 
321 322
 RTN
... ...
@@ -323,7 +324,7 @@ RTN
323 324
 @draw-waveform ( pad -- )
324 325
 	
325 326
 	( stash address )
326
-	#02 * #00 SWP ;pad-addr ++ LDA2 STH2
327
+	DUP ADD #00 SWP ;pad-addr ++ LDA2 STH2
327 328
 
328 329
 	( clear )
329 330
 	.wav-view/x1 LDZ2 #0002 ++
... ...
@@ -342,7 +343,7 @@ RTN
342 343
 			.wav-view/y1 LDZ2 #0010 ++ .Screen/y DEO2
343 344
 			#01 .Screen/pixel DEO
344 345
 		&no-dot
345
-		OVR TOS #0010 ** [ DUP2r STH2r ] ++ LDA 
346
+		OVR TOS 10** [ DUP2r STH2r ] ++ LDA 
346 347
 		#02 /
347 348
 		TOS 4// .wav-view/y1 LDZ2 ++ .Screen/y DEO2
348 349
 		.Screen/x DEI2 #0001 ++ .Screen/x DEO2
... ...
@@ -360,21 +361,21 @@ RTN
360 361
 
361 362
 	( adsr )
362 363
 	DUP2 .mix-view/x1 LDZ2 SWP2
363
-		.Audio0/adsr [ STHkr #10 * + ] DEI #04 SFT ;draw-knob JSR2
364
+		.Audio0/adsr [ STHkr #40 SFT + ] DEI #04 SFT ;draw-knob JSR2
364 365
 	DUP2 .mix-view/x1 LDZ2 #0010 ++ SWP2
365
-		.Audio0/adsr [ STHkr #10 * + ] DEI #0f AND ;draw-knob JSR2
366
+		.Audio0/adsr [ STHkr #40 SFT + ] DEI #0f AND ;draw-knob JSR2
366 367
 	DUP2 .mix-view/x1 LDZ2 #0020 ++ SWP2
367
-		.Audio0/adsr [ STHkr #10 * + ] #01 + DEI #04 SFT ;draw-knob JSR2
368
+		.Audio0/adsr [ STHkr #40 SFT + ] #01 + DEI #04 SFT ;draw-knob JSR2
368 369
 	DUP2 .mix-view/x1 LDZ2 #0030 ++ SWP2
369
-		.Audio0/adsr [ STHkr #10 * + ] #01 + DEI #0f AND ;draw-knob JSR2
370
+		.Audio0/adsr [ STHkr #40 SFT + ] #01 + DEI #0f AND ;draw-knob JSR2
370 371
 	( once/repeat )
371 372
 	DUP2 .mix-view/x1 LDZ2 #0040 ++ SWP2
372 373
 		.modes [ STHkr + ] LDZ ;draw-switch JSR2
373 374
 	( volume )
374 375
 	DUP2 .mix-view/x1 LDZ2 #0050 ++ SWP2
375
-		.Audio0/volume [ STHkr #10 * + ] DEI #04 SFT ;draw-knob JSR2
376
+		.Audio0/volume [ STHkr #40 SFT + ] DEI #04 SFT ;draw-knob JSR2
376 377
 	DUP2 .mix-view/x1 LDZ2 #0060 ++ SWP2
377
-		.Audio0/volume [ STHkr #10 * + ] DEI #0f AND ;draw-knob JSR2
378
+		.Audio0/volume [ STHkr #40 SFT + ] DEI #0f AND ;draw-knob JSR2
378 379
 	POP2
379 380
 	POPr
380 381
 
... ...
@@ -520,7 +521,7 @@ RTN
520 521
 	( draw ) #01 .Screen/sprite DEO
521 522
 	.Screen/x DEI2 #0004 ++ .Screen/x DEO2
522 523
 	.Screen/y DEI2 #0008 ++ .Screen/y DEO2
523
-	;font-hex #00 STHkr #08 * ++ .Screen/addr DEO2
524
+	;font-hex #00 STHkr #30 SFT ++ .Screen/addr DEO2
524 525
 	( draw ) #01 .Screen/sprite DEO
525 526
 	.Screen/x DEI2 #0004 -- #00 #00 STHkr ;knob-offsetx ++ LDA ++ .Screen/x DEO2
526 527
 	.Screen/y DEI2 #0010 -- #00 #00 STHr ;knob-offsety ++ LDA ++ .Screen/y DEO2
... ...
@@ -532,7 +533,7 @@ RTN
532 533
 @draw-switch ( x* y* value -- )
533 534
 	
534 535
 	STH .Screen/y DEO2 .Screen/x DEO2
535
-	STHkr #20 * #00 SWP ;switch-icns ++
536
+	STHkr #50 SFT #00 SWP ;switch-icns ++
536 537
 	DUP2 .Screen/addr DEO2
537 538
 	( draw ) #01 STHkr + .Screen/sprite DEO
538 539
 	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
... ...
@@ -62,7 +62,7 @@ BRK
62 62
 			( move down ) STH OVR2 .Screen/x DEO2 STHr
63 63
 			( incr y ) .Screen/y DEI2 #0010 ++ .Screen/y DEO2 
64 64
 			POP ,&continue JMP &no-linebreak
65
-		( get addr ) STHk TOS #0008 ** ;font-data #0100 ++ ++ .Screen/addr DEO2
65
+		( get addr ) STHk TOS #30 SFT2 ;font-data #0100 ++ ++ .Screen/addr DEO2
66 66
 		( get width ) STHr TOS ;font-data ++ LDA TOS
67 67
 		( draw ) STHkr .Screen/sprite DEO
68 68
 		( use width ) .Screen/x DEI2 ++ .Screen/x DEO2
... ...
@@ -93,7 +93,7 @@ RTN
93 93
 
94 94
 	&sprite ( char color -- )
95 95
 		STH
96
-		( get addr ) STHk TOS #0020 ** ;font-data #0100 ++ ++ .Screen/addr DEO2
96
+		( get addr ) STHk TOS #50 SFT2 ;font-data #0100 ++ ++ .Screen/addr DEO2
97 97
 		( get width ) STHkr TOS ;font-data ++ LDA TOS
98 98
 		SWPr
99 99
 			( left-top ) STHkr .Screen/sprite DEO
... ...
@@ -160,8 +160,8 @@ RTN
160 160
 
161 161
 	.Mouse/state DEI #00 ! #01 JCN [ BRK ]
162 162
 
163
-	.Mouse/x DEI2 DUP2 .anchor/x LDZ2 >> ROT ROT .anchor/x LDZ2 WIDTH #02 * TOS ++ #0001 ++ << #0101 ==
164
-	.Mouse/y DEI2 DUP2 .anchor/y LDZ2 >> ROT ROT .anchor/y LDZ2 HEIGHT #02 * TOS ++ << #0101 ==
163
+	.Mouse/x DEI2 DUP2 .anchor/x LDZ2 >> ROT ROT .anchor/x LDZ2 WIDTH DUP ADD TOS ++ #0001 ++ << #0101 ==
164
+	.Mouse/y DEI2 DUP2 .anchor/y LDZ2 >> ROT ROT .anchor/y LDZ2 HEIGHT DUP ADD TOS ++ << #0101 ==
165 165
 	#0101 == #01 JCN [ BRK ]
166 166
 
167 167
 	.Mouse/x DEI2 .anchor/x LDZ2 SUB2 #02 / TOB
... ...
@@ -190,7 +190,7 @@ BRK
190 190
 	
191 191
 	( draw cell count )
192 192
 	.anchor/x LDZ2 .Screen/x DEO2
193
-	.anchor/y LDZ2 HEIGHT #02 * TOS ++ .Screen/y DEO2
193
+	.anchor/y LDZ2 HEIGHT DUP ADD TOS ++ .Screen/y DEO2
194 194
 	.world/count LDZ2 #03 ;draw-short JSR2
195 195
 
196 196
 	HEIGHT #00
... ...
@@ -159,29 +159,29 @@ BRK
159 159
 	
160 160
 	.Mouse/x DEI2 .ctlframe/x1 LDZ2 SUB2 8-- 8// NIP #02 DIV
161 161
 	DUP ,&no-a JCN
162
-		.Audio0/adsr .track/active LDZ #10 MUL ADD DEI
162
+		.Audio0/adsr .track/active LDZ #40 SFT ADD DEI
163 163
 		#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD
164
-		.Audio0/adsr .track/active LDZ #10 MUL ADD DEO &no-a
164
+		.Audio0/adsr .track/active LDZ #40 SFT ADD DEO &no-a
165 165
 	DUP #01 NEQ ,&no-d JCN
166
-		.Audio0/adsr .track/active LDZ #10 MUL ADD DEI
166
+		.Audio0/adsr .track/active LDZ #40 SFT ADD DEI
167 167
 		DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD
168
-		.Audio0/adsr .track/active LDZ #10 MUL ADD DEO &no-d
168
+		.Audio0/adsr .track/active LDZ #40 SFT ADD DEO &no-d
169 169
 	DUP #02 NEQ ,&no-s JCN
170
-		.Audio0/adsr .track/active LDZ #10 MUL ADD #01 ADD DEI
170
+		.Audio0/adsr .track/active LDZ #40 SFT ADD #01 ADD DEI
171 171
 		#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD
172
-		.Audio0/adsr .track/active LDZ #10 MUL ADD #01 ADD DEO &no-s
172
+		.Audio0/adsr .track/active LDZ #40 SFT ADD #01 ADD DEO &no-s
173 173
 	DUP #03 NEQ ,&no-r JCN
174
-		.Audio0/adsr .track/active LDZ #10 MUL ADD #01 ADD DEI
174
+		.Audio0/adsr .track/active LDZ #40 SFT ADD #01 ADD DEI
175 175
 		DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD
176
-		.Audio0/adsr .track/active LDZ #10 MUL ADD #01 ADD DEO &no-r
176
+		.Audio0/adsr .track/active LDZ #40 SFT ADD #01 ADD DEO &no-r
177 177
 	DUP #05 NEQ ,&no-left JCN
178
-		.Audio0/volume .track/active LDZ #10 MUL ADD DEI
178
+		.Audio0/volume .track/active LDZ #40 SFT ADD DEI
179 179
 		#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD
180
-		.Audio0/volume .track/active LDZ #10 MUL ADD DEO &no-left
180
+		.Audio0/volume .track/active LDZ #40 SFT ADD DEO &no-left
181 181
 	DUP #06 NEQ ,&no-right JCN
182
-		.Audio0/volume .track/active LDZ #10 MUL ADD DEI
182
+		.Audio0/volume .track/active LDZ #40 SFT ADD DEI
183 183
 		DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD
184
-		.Audio0/volume .track/active LDZ #10 MUL ADD DEO &no-right
184
+		.Audio0/volume .track/active LDZ #40 SFT ADD DEO &no-right
185 185
 	POP
186 186
 	( release ) #00 .Mouse/state DEO
187 187
 	;draw-controls JSR2
... ...
@@ -361,7 +361,7 @@ RTN
361 361
 	#05 .Screen/sprite DEO
362 362
 	.knob/x LDZ2 #0004 ADD2 .Screen/x DEO2
363 363
 	.knob/y LDZ2 #0010 ADD2 .Screen/y DEO2
364
-	;font_hex #00 .knob/value LDZ #08 MUL ADD2 .Screen/addr DEO2
364
+	;font_hex #00 .knob/value LDZ #30 SFT ADD2 .Screen/addr DEO2
365 365
 	#01 .Screen/sprite DEO
366 366
 
367 367
 RTN
... ...
@@ -386,31 +386,31 @@ RTN
386 386
 	( env )
387 387
 	.ctlframe/x1 LDZ2 8++ .ctlframe/y1 LDZ2 8++ #02 ;env_txt ;draw-label JSR2
388 388
 	.ctlframe/x1 LDZ2 8++ .ctlframe/y1 LDZ2 #0010 ADD2
389
-		.Audio0/adsr .track/active LDZ #10 MUL ADD DEI #04 SFT
389
+		.Audio0/adsr .track/active LDZ #40 SFT ADD DEI #04 SFT
390 390
 		;draw-knob JSR2
391 391
 	.ctlframe/x1 LDZ2 #0018 ADD2 .ctlframe/y1 LDZ2 #0010 ADD2
392
-		.Audio0/adsr .track/active LDZ #10 MUL ADD DEI #0f AND
392
+		.Audio0/adsr .track/active LDZ #40 SFT ADD DEI #0f AND
393 393
 		;draw-knob JSR2
394 394
 	.ctlframe/x1 LDZ2 #0028 ADD2 .ctlframe/y1 LDZ2 #0010 ADD2
395
-		.Audio0/adsr .track/active LDZ #10 MUL ADD #01 ADD DEI #04 SFT
395
+		.Audio0/adsr .track/active LDZ #40 SFT ADD #01 ADD DEI #04 SFT
396 396
 		;draw-knob JSR2
397 397
 	.ctlframe/x1 LDZ2 #0038 ADD2 .ctlframe/y1 LDZ2 #0010 ADD2
398
-		.Audio0/adsr .track/active LDZ #10 MUL ADD #01 ADD DEI #0f AND
398
+		.Audio0/adsr .track/active LDZ #40 SFT ADD #01 ADD DEI #0f AND
399 399
 		;draw-knob JSR2
400 400
 	( vol )
401 401
 	.ctlframe/x1 LDZ2 #0058 ADD2 .ctlframe/y1 LDZ2 8++ #02 ;vol_txt ;draw-label JSR2
402 402
 	.ctlframe/x1 LDZ2 #0058 ADD2 .ctlframe/y1 LDZ2 #0010 ADD2
403
-		.Audio0/volume .track/active LDZ #10 MUL ADD DEI #04 SFT
403
+		.Audio0/volume .track/active LDZ #40 SFT ADD DEI #04 SFT
404 404
 	;draw-knob/force JSR2
405 405
 	.ctlframe/x1 LDZ2 #0068 ADD2 .ctlframe/y1 LDZ2 #0010 ADD2
406
-		.Audio0/volume .track/active LDZ #10 MUL ADD DEI #0f AND
406
+		.Audio0/volume .track/active LDZ #40 SFT ADD DEI #0f AND
407 407
 	;draw-knob/force JSR2
408 408
 
409 409
 RTN
410 410
 
411 411
 @draw-vu ( -- )
412 412
 	.ctlframe/x1 LDZ2 #0088 ADD2 .ctlframe/y1 LDZ2 #0010 ADD2
413
-		.Audio0/output .track/active LDZ #10 MUL ADD DEI DUP STH #04 SFT
413
+		.Audio0/output .track/active LDZ #40 SFT ADD DEI DUP STH #04 SFT
414 414
 	;draw-knob/force JSR2
415 415
 	.ctlframe/x1 LDZ2 #0098 ADD2 .ctlframe/y1 LDZ2 #0010 ADD2
416 416
 		STHr #0f AND
... ...
@@ -359,7 +359,7 @@ RTN
359 359
 		.Screen/x DEI2 #0001 ++ .Screen/x DEO2
360 360
 		( draw ) DUP 
361 361
 			.Audio0/length DEI2 NIP > 
362
-			.Audio0/length DEI2 #0100 !! #0101 == #02 * #01 + .Screen/pixel DEO
362
+			.Audio0/length DEI2 #0100 !! #0101 == DUP ADD #01 + .Screen/pixel DEO
363 363
 		#01 + GTHk ,&loop JCN
364 364
 	POP2
365 365
 
... ...
@@ -402,7 +402,7 @@ RTN
402 402
 		( draw ) #01 .Screen/sprite DEO
403 403
 	.Screen/x DEI2 #0004 ++ .Screen/x DEO2
404 404
 	.Screen/y DEI2 #0008 ++ .Screen/y DEO2
405
-	;font-hex #00 STHkr #08 * ++ .Screen/addr DEO2
405
+	;font-hex #00 STHkr #30 SFT ++ .Screen/addr DEO2
406 406
 		( draw ) #01 .Screen/sprite DEO
407 407
 	.Screen/x DEI2 #0004 -- #00 #00 STHkr ;knob-offsetx ++ LDA ++ .Screen/x DEO2
408 408
 	.Screen/y DEI2 #0010 -- #00 #00 STHr ;knob-offsety ++ LDA ++ .Screen/y DEO2
... ...
@@ -29,7 +29,7 @@
29 29
 
30 30
 	( find center )
31 31
 	.Screen/width DEI2 2// #0008 SUB2 .cat/x STZ2
32
-	.Screen/height DEI2 4// #0003 MUL2 #0018 SUB2 .cat/y STZ2
32
+	.Screen/height DEI2 4// DUP2k ADD2 ADD2 #0018 SUB2 .cat/y STZ2
33 33
 
34 34
 	( vectors )
35 35
 	;on-mouse .Mouse/vector DEO2
... ...
@@ -44,8 +44,8 @@ BRK
44 44
 	
45 45
 	;draw-cursor JSR2
46 46
 
47
-	.Mouse/x DEI2 .cat/x LDZ2 GTH2 #20 MUL
48
-	.Mouse/y DEI2 .cat/y LDZ2 GTH2 #40 MUL
47
+	.Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT
48
+	.Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT
49 49
 		ADD #00 SWP ;draw-eye JSR2
50 50
 
51 51
 BRK
... ...
@@ -98,7 +98,7 @@ RTN
98 98
 	;body .Screen/addr DEO2
99 99
 	( draw ) #81 .Screen/sprite DEO
100 100
 	STH2r .Screen/x DEO2
101
-	#0010 MUL2 ;body #0010 ADD2 ADD2 .Screen/addr DEO2
101
+	#40 SFT2 ;body #0010 ADD2 ADD2 .Screen/addr DEO2
102 102
 	( draw ) #81 .Screen/sprite DEO
103 103
 
104 104
 RTN
... ...
@@ -147,7 +147,7 @@ RTN
147 147
 	#0010 .Screen/y DEO2
148 148
 	#00 #08
149 149
 	&draw-pixel1
150
-		( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2
150
+		( move ) OVR #30 SFT #00 SWP #0010 ADD2 .Screen/x DEO2
151 151
 		( draw ) OVR .Screen/pixel DEO
152 152
 		( incr ) SWP #01 ADD SWP
153 153
 		LTHk ,&draw-pixel1 JCN
... ...
@@ -155,7 +155,7 @@ RTN
155 155
 	#0018 .Screen/y DEO2
156 156
 	#00 #08
157 157
 	&draw-pixel2
158
-		( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2
158
+		( move ) OVR #30 SFT #00 SWP #0010 ADD2 .Screen/x DEO2
159 159
 		( draw ) OVR #08 ADD .Screen/pixel DEO
160 160
 		( incr ) SWP #01 ADD SWP
161 161
 		LTHk ,&draw-pixel2 JCN
... ...
@@ -163,7 +163,7 @@ RTN
163 163
 	#0020 .Screen/y DEO2
164 164
 	#00 #08
165 165
 	&draw-icn1
166
-		( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2
166
+		( move ) OVR #30 SFT #00 SWP #0010 ADD2 .Screen/x DEO2
167 167
 		( draw ) OVR #00 ADD .Screen/sprite DEO
168 168
 		( incr ) SWP #01 ADD SWP
169 169
 		LTHk ,&draw-icn1 JCN
... ...
@@ -171,7 +171,7 @@ RTN
171 171
 	#0028 .Screen/y DEO2
172 172
 	#00 #08
173 173
 	&draw-icn2
174
-		( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2
174
+		( move ) OVR #30 SFT #00 SWP #0010 ADD2 .Screen/x DEO2
175 175
 		( draw ) OVR #08 ADD .Screen/sprite DEO
176 176
 		( incr ) SWP #01 ADD SWP
177 177
 		LTHk ,&draw-icn2 JCN
... ...
@@ -179,7 +179,7 @@ RTN
179 179
 	#0030 .Screen/y DEO2
180 180
 	#00 #08
181 181
 	&draw-chr1
182
-		( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2
182
+		( move ) OVR #30 SFT #00 SWP #0010 ADD2 .Screen/x DEO2
183 183
 		( draw ) OVR #80 ADD .Screen/sprite DEO
184 184
 		( incr ) SWP #01 ADD SWP
185 185
 		LTHk ,&draw-chr1 JCN
... ...
@@ -187,7 +187,7 @@ RTN
187 187
 	#0038 .Screen/y DEO2
188 188
 	#00 #08
189 189
 	&draw-chr2
190
-		( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2
190
+		( move ) OVR #30 SFT #00 SWP #0010 ADD2 .Screen/x DEO2
191 191
 		( draw ) OVR #88 ADD .Screen/sprite DEO
192 192
 		( incr ) SWP #01 ADD SWP
193 193
 		LTHk ,&draw-chr2 JCN
... ...
@@ -253,7 +253,7 @@ RTN
253 253
 	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 
254 254
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
255 255
 
256
-	#43 .Mouse/state DEI #00 NEQ #02 MUL SUB .Screen/sprite DEO
256
+	#43 .Mouse/state DEI #00 NEQ DUP ADD SUB .Screen/sprite DEO
257 257
 
258 258
 RTN
259 259
 
... ...
@@ -60,7 +60,7 @@ BRK
60 60
 
61 61
 	( get note )
62 62
 	.counter LDZ #18 MOD #30 ADD 
63
-		.Audio0/pitch .counter LDZ #04 MOD #10 MUL ADD DEO
63
+		.Audio0/pitch .counter LDZ #04 MOD #40 SFT ADD DEO
64 64
 
65 65
 	.counter LDZ #01 ADD .counter STZ
66 66
 	#00 .timer STZ
... ...
@@ -1,8 +1,8 @@
1 1
 ( dev/controller/keys )
2 2
 
3
-%+  { ADD } %-   { SUB }  %*  { MUL }  %/  { DIV }
3
+%+  { ADD } %-   { SUB }               %/  { DIV }
4 4
 %<  { LTH } %>   { GTH }  %=  { EQU }  %!  { NEQ }
5
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
5
+%++ { ADD2 } %-- { SUB2 }              %// { DIV2 }
6 6
 %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
7 7
 
8 8
 %RTN { JMP2r }
... ...
@@ -77,17 +77,17 @@ BRK
77 77
 	.frame/x0 LDZ2 #0010 ++ .Screen/x DEO2
78 78
 	.frame/y0 LDZ2 #0010 ++ .Screen/y DEO2
79 79
 	;controller-icn/dpad-up .Screen/addr DEO2
80
-	#03 [ STHkr #04 SFT #01 AND #02 * - ] .Screen/sprite DEO
80
+	#03 [ STHkr #04 SFT #01 AND DUP + - ] .Screen/sprite DEO
81 81
 	.Screen/y DEI2 #0010 ++ .Screen/y DEO2
82 82
 	;controller-icn/dpad-down .Screen/addr DEO2
83
-	#03 [ STHkr #05 SFT #01 AND #02 * - ] .Screen/sprite DEO
83
+	#03 [ STHkr #05 SFT #01 AND DUP + - ] .Screen/sprite DEO
84 84
 	.Screen/y DEI2 #0008 -- .Screen/y DEO2
85 85
 	.Screen/x DEI2 #0008 -- .Screen/x DEO2
86 86
 	;controller-icn/dpad-left .Screen/addr DEO2
87
-	#03 [ STHkr #06 SFT #01 AND #02 * - ] .Screen/sprite DEO
87
+	#03 [ STHkr #06 SFT #01 AND DUP + - ] .Screen/sprite DEO
88 88
 	.Screen/x DEI2 #0010 ++ .Screen/x DEO2
89 89
 	;controller-icn/dpad-right .Screen/addr DEO2
90
-	#03 [ STHkr #07 SFT #01 AND #02 * - ] .Screen/sprite DEO
90
+	#03 [ STHkr #07 SFT #01 AND DUP + - ] .Screen/sprite DEO
91 91
 	.Screen/x DEI2 #0008 -- .Screen/x DEO2
92 92
 	;controller-icn/dpad .Screen/addr DEO2
93 93
 	#03 .Screen/sprite DEO
... ...
@@ -96,10 +96,10 @@ BRK
96 96
 	.center/y LDZ2 #0009 ++ .Screen/y DEO2
97 97
 	.center/x LDZ2 #0009 -- .Screen/x DEO2
98 98
 	;controller-icn/option .Screen/addr DEO2
99
-	#03 [ STHkr #02 SFT #01 AND  #02 * - ] .Screen/sprite DEO
99
+	#03 [ STHkr #02 SFT #01 AND DUP + - ] .Screen/sprite DEO
100 100
 	.center/x LDZ2 #0004 ++ .Screen/x DEO2
101 101
 	;controller-icn/option .Screen/addr DEO2
102
-	#03 [ STHkr #03 SFT #01 AND  #02 * - ] .Screen/sprite DEO
102
+	#03 [ STHkr #03 SFT #01 AND DUP + - ] .Screen/sprite DEO
103 103
 
104 104
 	( buttons )
105 105
 	.center/y LDZ2 #0000 ++ .Screen/y DEO2
... ...
@@ -107,7 +107,7 @@ BRK
107 107
 	;controller-icn/button .Screen/addr DEO2
108 108
 	#03 [ STHkr #01 SFT #01 AND - ] .Screen/sprite DEO
109 109
 		.Screen/y DEI2 #000a ++ .Screen/y DEO2
110
-		;font-hex #000b #0008 ** ++ .Screen/addr DEO2
110
+		;font-hex #000b #30 SFT2 ++ .Screen/addr DEO2
111 111
 		#03 .Screen/sprite DEO
112 112
 
113 113
 	.center/y LDZ2 #0000 ++ .Screen/y DEO2
... ...
@@ -115,7 +115,7 @@ BRK
115 115
 	;controller-icn/button .Screen/addr DEO2
116 116
 	#03 [ STHr #01 AND - ] .Screen/sprite DEO
117 117
 		.Screen/y DEI2 #000a ++ .Screen/y DEO2
118
-		;font-hex #000a #0008 ** ++ .Screen/addr DEO2
118
+		;font-hex #000a #30 SFT2 ++ .Screen/addr DEO2
119 119
 		#03 .Screen/sprite DEO
120 120
 
121 121
 	.center/x LDZ2 #0010 -- .Screen/x DEO2
... ...
@@ -129,15 +129,15 @@ RTN
129 129
 @draw-short ( short* color -- )
130 130
 
131 131
 	STH SWP 
132
-	DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
132
+	DUP #04 SFT TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
133 133
 	( draw ) STHkr .Screen/sprite DEO
134
-	#0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
134
+	#0f AND TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
135 135
 	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
136 136
 	( draw ) STHkr .Screen/sprite DEO
137
-	DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
137
+	DUP #04 SFT TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
138 138
 	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
139 139
 	( draw ) STHkr .Screen/sprite DEO
140
-	#0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
140
+	#0f AND TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
141 141
 	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
142 142
 	( draw ) STHr .Screen/sprite DEO
143 143
 
... ...
@@ -6,7 +6,7 @@
6 6
 
7 7
 %RTN     { JMP2r }
8 8
 %MOD     { DUP2 DIV MUL SUB }
9
-%ABS2    { DUP2 #0f SFT2 EQU #04 JCN #ffff MUL2 }
9
+%ABS2    { DUP2 #0f SFT2 EQU #05 JCN #0000 SWP2 SUB2 }
10 10
 %SCALEX  { 2// .Screen/width DEI2 2// ADD2 #0040 SUB2 }
11 11
 %SCALEY  { 2// .Screen/height DEI2 2// ADD2 #0040 SUB2 }
12 12
 %12HOURS { DUP #0c GTH #0c MUL SUB }
... ...
@@ -59,8 +59,8 @@ BRK
59 59
 		#00 SWP SCALEY .needles/sy STZ2
60 60
 		#00 SWP SCALEX .needles/sx STZ2
61 61
 	#00 .DateTime/minute DEI 2** ;table ADD2 LDA2
62
-		#00 SWP 4// #0003 MUL2 #0020 ADD2 SCALEY .needles/my STZ2
63
-		#00 SWP 4// #0003 MUL2 #0020 ADD2 SCALEX .needles/mx STZ2
62
+		#00 SWP 4// DUP2k ADD2 ADD2 #0020 ADD2 SCALEY .needles/my STZ2
63
+		#00 SWP 4// DUP2k ADD2 ADD2 #0020 ADD2 SCALEX .needles/mx STZ2
64 64
 	#00 .DateTime/hour DEI 12HOURS #05 MUL 2** ;table ADD2 LDA2
65 65
 		#00 SWP 2// #0040 ADD2 SCALEY .needles/hy STZ2
66 66
 		#00 SWP 2// #0040 ADD2 SCALEX .needles/hx STZ2
... ...
@@ -90,22 +90,22 @@ BRK
90 90
 	.Screen/height DEI2 2// #0048 ADD2 .Screen/y DEO2
91 91
 	.Screen/width DEI2 2//
92 92
 	DUP2 #0020 SUB2 .Screen/x DEO2
93
-		;font-hex #00 .DateTime/hour DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2
93
+		;font-hex #00 .DateTime/hour DEI #0a DIV #30 SFT ADD2 .Screen/addr DEO2
94 94
 		#02 .Screen/sprite DEO
95 95
 	DUP2 #0018 SUB2 .Screen/x DEO2
96
-		;font-hex #00 .DateTime/hour DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2
96
+		;font-hex #00 .DateTime/hour DEI #0a MOD #30 SFT ADD2 .Screen/addr DEO2
97 97
 		#02 .Screen/sprite DEO
98 98
 	DUP2 #0008 SUB2 .Screen/x DEO2
99
-		;font-hex #00 .DateTime/minute DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2
99
+		;font-hex #00 .DateTime/minute DEI #0a DIV #30 SFT ADD2 .Screen/addr DEO2
100 100
 		#02 .Screen/sprite DEO
101 101
 	DUP2 .Screen/x DEO2
102
-		;font-hex #00 .DateTime/minute DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2
102
+		;font-hex #00 .DateTime/minute DEI #0a MOD #30 SFT ADD2 .Screen/addr DEO2
103 103
 		#02 .Screen/sprite DEO
104 104
 	DUP2 #0010 ADD2 .Screen/x DEO2
105
-		;font-hex #00 .DateTime/second DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2
105
+		;font-hex #00 .DateTime/second DEI #0a DIV #30 SFT ADD2 .Screen/addr DEO2
106 106
 		#02 .Screen/sprite DEO
107 107
 	DUP2 #0018 ADD2 .Screen/x DEO2
108
-		;font-hex #00 .DateTime/second DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2
108
+		;font-hex #00 .DateTime/second DEI #0a MOD #30 SFT ADD2 .Screen/addr DEO2
109 109
 		#02 .Screen/sprite DEO
110 110
 	POP2
111 111
 
... ...
@@ -1,7 +1,7 @@
1 1
 ( dev/mouse )
2 2
 
3 3
 %RTN   { JMP2r }
4
-%ABS2  { DUP2 #0f SFT2 EQU #04 JCN #ffff MUL2 }
4
+%ABS2  { DUP2 #0f SFT2 EQU #05 JCN #0000 SWP2 SUB2 }
5 5
 %LTS2  { #8000 ADD2 SWP2 #8000 ADD2 GTH2 }
6 6
 %GTS2  { #8000 ADD2 SWP2 #8000 ADD2 LTH2 }
7 7
 %2** { #10 SFT2 }
... ...
@@ -61,7 +61,7 @@ BRK
61 61
 	.pointer/lasty LDZ2 
62 62
 	.pointer/x LDZ2 
63 63
 	.pointer/y LDZ2 
64
-	#01 [ .Mouse/state DEI #10 EQU #02 MUL ADD ] 
64
+	#01 [ .Mouse/state DEI #10 EQU DUP ADD ADD ] 
65 65
 	;draw-line JSR2
66 66
 
67 67
 	( record last position )
... ...
@@ -86,7 +86,7 @@ BRK
86 86
 	( draw new cursor )
87 87
 	.pointer/x LDZ2 .Screen/x DEO2
88 88
 	.pointer/y LDZ2 .Screen/y DEO2
89
-	#43 .Mouse/state DEI #00 NEQ #02 MUL SUB .Screen/sprite DEO
89
+	#43 .Mouse/state DEI #00 NEQ DUP ADD SUB .Screen/sprite DEO
90 90
 
91 91
 RTN
92 92
 
... ...
@@ -68,14 +68,14 @@ BRK
68 68
 	
69 69
 	#10 #00
70 70
 	&loop
71
-		DUP #08 MUL #00 SWP ;font-hex ADD2 .Screen/addr DEO2
71
+		DUP #30 SFT #00 SWP ;font-hex ADD2 .Screen/addr DEO2
72 72
 		( x-axis ) 
73
-		DUP #08 MUL #00 SWP 
73
+		DUP #30 SFT #00 SWP 
74 74
 		.center/x LDZ2 #0040 SUB2 ADD2 .Screen/x DEO2
75 75
 		.center/y LDZ2 #0050 SUB2 .Screen/y DEO2
76 76
 		( draw ) #01 .Screen/sprite DEO
77 77
 		( y-axis )
78
-		DUP #08 MUL #00 SWP 
78
+		DUP #30 SFT #00 SWP 
79 79
 		.center/y LDZ2 #0040 SUB2 ADD2 .Screen/y DEO2
80 80
 		.center/x LDZ2 #0050 SUB2 .Screen/x DEO2
81 81
 		( draw ) #01 .Screen/sprite DEO
... ...
@@ -104,9 +104,9 @@ RTN
104 104
 	#10 #00
105 105
 	&loop
106 106
 		( color ) STHk
107
-		( y ) DUP #04 DIV [ #00 SWP ] #0010 MUL2 
107
+		( y ) DUP #04 DIV [ #00 SWP ] #40 SFT2
108 108
 			[ .center/y LDZ2 #0040 SUB2 ADD2 ] STH2
109
-		( x ) DUP #03 AND [ #00 SWP ] #0010 MUL2 #0040 ADD2 
109
+		( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2 
110 110
 			[ .center/x LDZ2 #0008 ADD2 ADD2 ]
111 111
 		STH2r STHr #00 ;draw-circle JSR2
112 112
 		#01 ADD GTHk ,&loop JCN
... ...
@@ -119,9 +119,9 @@ RTN
119 119
 	#10 #00
120 120
 	&loop
121 121
 		( color ) STHk
122
-		( y ) DUP #04 DIV [ #00 SWP ] #0010 MUL2 
122
+		( y ) DUP #04 DIV [ #00 SWP ] #40 SFT2
123 123
 			[ .center/y LDZ2 ADD2 ] STH2
124
-		( x ) DUP #03 AND [ #00 SWP ] #0010 MUL2 #0040 ADD2 
124
+		( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2 
125 125
 			[ .center/x LDZ2 #0008 ADD2 ADD2 ]
126 126
 		STH2r STHr #80 ;draw-circle JSR2
127 127
 		#01 ADD GTHk ,&loop JCN
... ...
@@ -42,8 +42,8 @@ BRK
42 42
 	( case: hit-top ) .dvd/y LDZ2 #0000 EQU2 
43 43
 	#0000 EQU2 ,&no-flipy JCN 
44 44
 		.dvd/dy LDZ #00 EQU .dvd/dy STZ &no-flipy
45
-	( incr ) .dvd/x LDZ2 #0001 #00 .dvd/dx LDZ #00 EQU #fffe MUL2 ADD2 ADD2 .dvd/x STZ2
46
-	( incr ) .dvd/y LDZ2 #0001 #00 .dvd/dy LDZ #00 EQU #fffe MUL2 ADD2 ADD2 .dvd/y STZ2
45
+	( incr ) .dvd/x LDZ2 #0001 #00 .dvd/dx LDZ #00 EQU DUP2 ADD2 SUB2 ADD2 .dvd/x STZ2
46
+	( incr ) .dvd/y LDZ2 #0001 #00 .dvd/dy LDZ #00 EQU DUP2 ADD2 SUB2 ADD2 .dvd/y STZ2
47 47
 	( draw ) #01 ;draw-dvd JSR2
48 48
 
49 49
 BRK
... ...
@@ -6,7 +6,7 @@
6 6
 %8++  { #0008 ADD2 }
7 7
 %2** { #10 SFT2 }
8 8
 %4** { #20 SFT2 }
9
-%ABS2 { DUP2 #0f SFT2 EQU #04 JCN #ffff MUL2 }
9
+%ABS2 { DUP2 #0f SFT2 EQU #05 JCN #0000 SWP2 SUB2 }
10 10
 %LTS2  { #8000 ADD2 SWP2 #8000 ADD2 GTH2 }
11 11
 %GTS2  { #8000 ADD2 SWP2 #8000 ADD2 LTH2 }
12 12
 
... ...
@@ -412,7 +412,7 @@
412 412
 	LDAk
413 413
 	DUP ,&not-end JCN
414 414
 	POP POP2
415
-	STH2r ROT #01 ADD #03 MUL
415
+	STH2r ROT #01 ADD DUPk ADD ADD
416 416
 	JMP2r
417 417
 
418 418
 	&not-end