Browse code

(piano.tal) Implemented new auto byte

neauoire authored on 14/03/2022 18:04:49
Showing 1 changed files
... ...
@@ -1,99 +1,63 @@
1 1
 ( piano )
2 2
 
3
-%+  { ADD } %-   { SUB }  %*  { MUL } %/   { DIV }
4
-%<  { LTH } %>   { GTH }  %=  { EQU } %!   { NEQ }
5
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
6
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
7
-%!~ { NEQk NIP }
8
-
9
-%HALT { #010f DEO }
10
-
11
-%RTN  { JMP2r }
12
-%TOS  { #00 SWP }
13
-%MOD  { DUP2 / * - }
14
-%GTS2 { #8000 ++ SWP2 #8000 ++ << }
15
-%2/   { #01 SFT }
16
-%2//  { #01 SFT2 }
17
-%4//  { #02 SFT2 }
18
-%8//  { #03 SFT2 }
19
-%8**  { #30 SFT2 }
20
-
21
-%AUTO-NONE   { #00 .Screen/auto DEO }
22
-%AUTO-X      { #01 .Screen/auto DEO }
23
-%AUTO-YADDR  { #06 .Screen/auto DEO }
24
-
25
-( devices )
26
-
27 3
 |00 @System     &vector $2 &wst      $1 &rst    $1 &pad    $4 &r      $2 &g      $2 &b      $2 &debug  $1 &halt $1
28 4
 |10 @Console    &vector $2 &read     $1 &pad    $5 &write  $1 &error  $1
29 5
 |20 @Screen     &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
30 6
 |30 @Audio0     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length $2 &addr   $2 &volume $1 &pitch $1
31 7
 |80 @Controller &vector $2 &button   $1 &key    $1
32 8
 |90 @Mouse      &vector $2 &x        $2 &y      $2 &state  $1 &pad    $3 &modx   $2 &mody   $2
33
-|a0 @File       &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name   $2 &length $2 &read   $2 &write $2
34
-
35
-( variables )
36 9
 
37 10
 |0000
38 11
 
39
-@last-note   $1
40
-@octave      $1
41
-@pointer     
12
+@last-note $1
13
+@octave $1
14
+@pointer
42 15
 	&x $2 &y $2
43
-@center      
16
+@center
44 17
 	&x $2 &y $2
45
-@adsr-view   
18
+@adsr-view
46 19
 	&x1 $2 &y1 $2 &x2 $2 &y2 $2
47
-@wave-view   
20
+@wave-view
48 21
 	&x1 $2 &y1 $2 &x2 $2 &y2 $2
49
-@octave-view 
22
+@octave-view
50 23
 	&x1 $2 &y1 $2 &x2 $2 &y2 $2
51 24
 
52
-( program )
53
-
54 25
 |0100 ( -> )
55 26
 	
56
-	( theme ) 
57
-	#0fe5 .System/r DEO2 
58
-	#0fc5 .System/g DEO2 
27
+	( theme )
28
+	#0fe5 .System/r DEO2
29
+	#0fc5 .System/g DEO2
59 30
 	#0f25 .System/b DEO2
60
-
61
-	( vectors ) 
31
+	( vectors )
62 32
 	;on-frame   .Screen/vector DEO2
63 33
 	;on-control .Controller/vector DEO2
64 34
 	;on-mouse   .Mouse/vector DEO2
65 35
 	;on-message .Console/vector DEO2
66
-
67 36
 	( find center )
68
-	.Screen/width DEI2 2// .center/x STZ2
69
-	.Screen/height DEI2 2// .center/y STZ2
70
-
37
+	.Screen/width DEI2 #01 SFT2 .center/x STZ2
38
+	.Screen/height DEI2 #01 SFT2 .center/y STZ2
71 39
 	( place octave )
72
-	.center/x LDZ2 #0080 -- .octave-view/x1 STZ2
73
-	.center/y LDZ2 #0008 ++ .octave-view/y1 STZ2
74
-	.octave-view/x1 LDZ2 #0050 ++ .octave-view/x2 STZ2
75
-	.octave-view/y1 LDZ2 #0018 ++ .octave-view/y2 STZ2
76
-
40
+	.center/x LDZ2 #0080 SUB2 .octave-view/x1 STZ2
41
+	.center/y LDZ2 #0008 ADD2 .octave-view/y1 STZ2
42
+	.octave-view/x1 LDZ2 #0050 ADD2 .octave-view/x2 STZ2
43
+	.octave-view/y1 LDZ2 #0018 ADD2 .octave-view/y2 STZ2
77 44
 	( place adsr )
78
-	.center/x LDZ2 #0020 -- .adsr-view/x1 STZ2
79
-	.center/y LDZ2 #0008 ++ .adsr-view/y1 STZ2
80
-	.adsr-view/x1 LDZ2 #00a0 ++ .adsr-view/x2 STZ2
81
-	.adsr-view/y1 LDZ2 #0018 ++ .adsr-view/y2 STZ2
82
-
45
+	.center/x LDZ2 #0020 SUB2 .adsr-view/x1 STZ2
46
+	.center/y LDZ2 #0008 ADD2 .adsr-view/y1 STZ2
47
+	.adsr-view/x1 LDZ2 #00a0 ADD2 .adsr-view/x2 STZ2
48
+	.adsr-view/y1 LDZ2 #0018 ADD2 .adsr-view/y2 STZ2
83 49
 	( place waveform )
84
-	.center/x LDZ2 #0080 -- .wave-view/x1 STZ2
85
-	.center/y LDZ2 #0020 -- .wave-view/y1 STZ2
86
-	.wave-view/x1 LDZ2 #0100 ++ .wave-view/x2 STZ2
87
-	.wave-view/y1 LDZ2 #0020 ++ .wave-view/y2 STZ2
88
-
50
+	.center/x LDZ2 #0080 SUB2 .wave-view/x1 STZ2
51
+	.center/y LDZ2 #0020 SUB2 .wave-view/y1 STZ2
52
+	.wave-view/x1 LDZ2 #0100 ADD2 .wave-view/x2 STZ2
53
+	.wave-view/y1 LDZ2 #0020 ADD2 .wave-view/y2 STZ2
89 54
 	( default settings )
90 55
 	#ff .last-note STZ
91 56
 	#041c .Audio0/adsr DEO2
92 57
 	#dd .Audio0/volume DEO
93 58
 	;sin-pcm .Audio0/addr DEO2
94 59
 	#0100 .Audio0/length DEO2
95
-
96
-	( inital drawing ) 
60
+	( inital drawing )
97 61
 	;draw-octave JSR2
98 62
 	;draw-adsr JSR2
99 63
 	;draw-wave JSR2
... ...
@@ -102,15 +66,14 @@ BRK
102 66
 
103 67
 @on-frame ( -> )
104 68
 	
105
-	.adsr-view/y2 LDZ2 #0020 -- .Screen/y DEO2
106
-
107
-	#10 #00 
69
+	.adsr-view/y2 LDZ2 #0020 SUB2 .Screen/y DEO2
70
+	#10 #00
108 71
 	&loop
109
-		.adsr-view/x2 LDZ2 #003a -- .Screen/x DEO2
110
-		#10 OVR - .Audio0/output DEI #0f AND < .Screen/pixel DEO
111
-		.adsr-view/x2 LDZ2 #003a -- INC2 INC2 .Screen/x DEO2
112
-		#10 OVR - .Audio0/output DEI #04 SFT < .Screen/pixel DEO
113
-		.Screen/y DEI2 INC2 INC2 .Screen/y DEO2
72
+		.adsr-view/x2 LDZ2 #003a SUB2 .Screen/x DEO2
73
+		#10 OVR SUB .Audio0/output DEI #0f AND LTH .Screen/pixel DEO
74
+		.adsr-view/x2 LDZ2 #003a SUB2 INC2 INC2 .Screen/x DEO2
75
+		#10 OVR SUB .Audio0/output DEI #04 SFT LTH .Screen/pixel DEO
76
+		.Screen/y DEI2k INC2 INC2 ROT DEO2
114 77
 		INC GTHk ,&loop JCN
115 78
 	POP2
116 79
 
... ...
@@ -119,48 +82,40 @@ BRK
119 82
 @on-control ( -> )
120 83
 
121 84
 	( clear last cursor )
122
-	.pointer/x LDZ2 .Screen/x DEO2 
123
-	.pointer/y LDZ2 .Screen/y DEO2 
85
+	.pointer/x LDZ2 .Screen/x DEO2
86
+	.pointer/y LDZ2 .Screen/y DEO2
124 87
 	#40 .Screen/sprite DEO
125 88
 
126 89
 	.Controller/key DEI
127
-	[ LIT 'a ] !~ ,&no-c JCN
128
-		#30 .octave LDZ #0c * + ;play JSR2 &no-c
129
-	[ LIT 's ] !~ ,&no-d JCN
130
-		#32 .octave LDZ #0c * + ;play JSR2 &no-d
131
-	[ LIT 'd ] !~ ,&no-e JCN
132
-		#34 .octave LDZ #0c * + ;play JSR2 &no-e
133
-	[ LIT 'f ] !~ ,&no-f JCN
134
-		#35 .octave LDZ #0c * + ;play JSR2 &no-f
135
-	[ LIT 'g ] !~ ,&no-g JCN
136
-		#37 .octave LDZ #0c * + ;play JSR2 &no-g
137
-	[ LIT 'h ] !~ ,&no-a JCN
138
-		#39 .octave LDZ #0c * + ;play JSR2 &no-a
139
-	[ LIT 'j ] !~ ,&no-b JCN
140
-		#3b .octave LDZ #0c * + ;play JSR2 &no-b
141
-	[ LIT 'k ] !~ ,&no-c2 JCN
142
-		#3c .octave LDZ #0c * + ;play JSR2 &no-c2
143
-	[ #1b ] !~ ,&no-esc JCN HALT &no-esc
90
+	[ LIT 'a ] NEQk NIP ,&no-c JCN #30 .octave LDZ #0c MUL ADD ;play JSR2 &no-c
91
+	[ LIT 's ] NEQk NIP ,&no-d JCN #32 .octave LDZ #0c MUL ADD ;play JSR2 &no-d
92
+	[ LIT 'd ] NEQk NIP ,&no-e JCN #34 .octave LDZ #0c MUL ADD ;play JSR2 &no-e
93
+	[ LIT 'f ] NEQk NIP ,&no-f JCN #35 .octave LDZ #0c MUL ADD ;play JSR2 &no-f
94
+	[ LIT 'g ] NEQk NIP ,&no-g JCN #37 .octave LDZ #0c MUL ADD ;play JSR2 &no-g
95
+	[ LIT 'h ] NEQk NIP ,&no-a JCN #39 .octave LDZ #0c MUL ADD ;play JSR2 &no-a
96
+	[ LIT 'j ] NEQk NIP ,&no-b JCN #3b .octave LDZ #0c MUL ADD ;play JSR2 &no-b
97
+	[ LIT 'k ] NEQk NIP ,&no-c2 JCN #3c .octave LDZ #0c MUL ADD ;play JSR2 &no-c2
98
+	[ #1b ] NEQk NIP ,&no-esc JCN #010f DEO &no-esc
144 99
 	POP
145 100
 
146 101
 	( release )
147 102
 	#00 .Controller/key DEO
148 103
 
149
-	.Controller/button DEI 
150
-	DUP #11 ! ,&cu JCN #3c ;play JSR2 &cu
151
-	DUP #21 ! ,&cd JCN #3d ;play JSR2 &cd
152
-	DUP #41 ! ,&cl JCN #3e ;play JSR2 &cl
153
-	DUP #81 ! ,&cr JCN #3f ;play JSR2 &cr
154
-	DUP #12 ! ,&au JCN #40 ;play JSR2 &au
155
-	DUP #22 ! ,&ad JCN #41 ;play JSR2 &ad
156
-	DUP #42 ! ,&al JCN #42 ;play JSR2 &al
157
-	DUP #82 ! ,&ar JCN #43 ;play JSR2 &ar
158
-	DUP #14 ! ,&su JCN #44 ;play JSR2 &su
159
-	DUP #24 ! ,&sd JCN #45 ;play JSR2 &sd
160
-	DUP #44 ! ,&sl JCN #46 ;play JSR2 &sl
161
-	DUP #84 ! ,&sr JCN #47 ;play JSR2 &sr
162
-	DUP #40 ! ,&l JCN .Audio0/addr DEI2 #0010 -- .Audio0/addr DEO2 &l
163
-	DUP #80 ! ,&r JCN .Audio0/addr DEI2 #0010 ++ .Audio0/addr DEO2 &r
104
+	.Controller/button DEI
105
+	[ #11 ] NEQk NIP ,&cu JCN #3c ;play JSR2 &cu
106
+	[ #21 ] NEQk NIP ,&cd JCN #3d ;play JSR2 &cd
107
+	[ #41 ] NEQk NIP ,&cl JCN #3e ;play JSR2 &cl
108
+	[ #81 ] NEQk NIP ,&cr JCN #3f ;play JSR2 &cr
109
+	[ #12 ] NEQk NIP ,&au JCN #40 ;play JSR2 &au
110
+	[ #22 ] NEQk NIP ,&ad JCN #41 ;play JSR2 &ad
111
+	[ #42 ] NEQk NIP ,&al JCN #42 ;play JSR2 &al
112
+	[ #82 ] NEQk NIP ,&ar JCN #43 ;play JSR2 &ar
113
+	[ #14 ] NEQk NIP ,&su JCN #44 ;play JSR2 &su
114
+	[ #24 ] NEQk NIP ,&sd JCN #45 ;play JSR2 &sd
115
+	[ #44 ] NEQk NIP ,&sl JCN #46 ;play JSR2 &sl
116
+	[ #84 ] NEQk NIP ,&sr JCN #47 ;play JSR2 &sr
117
+	[ #40 ] NEQk NIP ,&l JCN .Audio0/addr DEI2 #0010 SUB2 .Audio0/addr DEO2 &l
118
+	[ #80 ] NEQk NIP ,&r JCN .Audio0/addr DEI2 #0010 ADD2 .Audio0/addr DEO2 &r
164 119
 	POP
165 120
 
166 121
 	;draw-octave JSR2
... ...
@@ -177,138 +132,128 @@ BRK
177 132
 
178 133
 @on-mouse ( -> )
179 134
 
180
-	;draw-cursor JSR2 
135
+	;draw-cursor JSR2
181 136
 	
182
-	.Mouse/state DEI #00 ! #01 JCN [ BRK ]
137
+	.Mouse/state DEI #00 NEQ JMP [ BRK ]
183 138
 
184
-	.Mouse/x DEI2 .Mouse/y DEI2 .wave-view ;within-rect JSR2 
139
+	.Mouse/x DEI2 .Mouse/y DEI2 .wave-view ;within-rect JSR2
185 140
 		;on-touch-wave-view JCN2
186
-	.Mouse/x DEI2 .Mouse/y DEI2 .adsr-view ;within-rect JSR2 
141
+	.Mouse/x DEI2 .Mouse/y DEI2 .adsr-view ;within-rect JSR2
187 142
 		;on-touch-adsr-view JCN2
188
-	.Mouse/x DEI2 .Mouse/y DEI2 .octave-view ;within-rect JSR2 
143
+	.Mouse/x DEI2 .Mouse/y DEI2 .octave-view ;within-rect JSR2
189 144
 		;on-touch-octave-view JCN2
190 145
 
191 146
 BRK
192 147
 
193 148
 @on-touch-wave-view ( -> )
194 149
 
195
-	.Mouse/x DEI2 .wave-view/x1 LDZ2 -- .Audio0/length DEO2
150
+	.Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 .Audio0/length DEO2
196 151
 	;draw-wave JSR2
197
-	;draw-cursor JSR2 
152
+	;draw-cursor JSR2
198 153
 
199 154
 BRK
200 155
 
201 156
 @on-touch-octave-view ( -> )
202 157
 
203
-	.Mouse/x DEI2 .octave-view/x1 LDZ2 -- 8// NIP #09 ! ,&no-mod JCN
204
-		.Mouse/y DEI2 .octave-view/y1 LDZ2 -- 8// NIP 
205
-		[ #00 ] !~ ,&no-incr JCN
206
-			.octave LDZ #03 = ,&no-incr JCN
158
+	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ,&no-mod JCN
159
+		.Mouse/y DEI2 .octave-view/y1 LDZ2 SUB2 #03 SFT2 NIP
160
+		[ #00 ] NEQk NIP ,&no-incr JCN
161
+			.octave LDZ #03 EQU ,&no-incr JCN
207 162
 			.octave LDZ INC .octave STZ &no-incr
208
-		[ #02 ] !~ ,&no-decr JCN
209
-			.octave LDZ #ff = ,&no-decr JCN
210
-			.octave LDZ #01 - .octave STZ &no-decr
163
+		[ #02 ] NEQk NIP ,&no-decr JCN
164
+			.octave LDZ #ff EQU ,&no-decr JCN
165
+			.octave LDZ #01 SUB .octave STZ &no-decr
211 166
 		POP
212 167
 		( release ) #00 .Mouse/state DEO
213 168
 		;draw-octave JSR2
214 169
 		BRK
215 170
 	&no-mod
216 171
 
217
-	.Mouse/x DEI2 .octave-view/x1 LDZ2 -- 8// NIP #06 > ,&no-key JCN
218
-		.Mouse/x DEI2 .octave-view/x1 LDZ2 -- 8// ;notes ++ LDA .octave LDZ #0c * + ;play JSR2
172
+	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #06 GTH ,&no-key JCN
173
+		.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 ;notes ADD2 LDA .octave LDZ #0c MUL ADD ;play JSR2
219 174
 		( release ) #00 .Mouse/state DEO
220 175
 		;draw-octave JSR2
221 176
 	&no-key
222 177
 
223
-BRK 
178
+BRK
224 179
 
225 180
 @on-touch-adsr-view ( -> )
226 181
 
227
-	.Mouse/x DEI2 .adsr-view/x1 LDZ2 -- 8// NIP #03 /
228
-	[ #00 ] !~ ,&no-a JCN
229
-		.Audio0/adsr DEI
230
-		#10 .Mouse/state DEI #10 = #e0 * + +
231
-		.Audio0/adsr DEO &no-a
232
-	[ #01 ] !~ ,&no-d JCN
233
-		.Audio0/adsr DEI
234
-		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
235
-		.Audio0/adsr DEO &no-d
236
-	[ #02 ] !~ ,&no-s JCN
237
-		.Audio0/adsr INC DEI
238
-		#10 .Mouse/state DEI #10 = #e0 * + +
239
-		.Audio0/adsr INC DEO &no-s
240
-	[ #03 ] !~ ,&no-r JCN
241
-		.Audio0/adsr INC DEI
242
-		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
243
-		.Audio0/adsr INC DEO &no-r
244
-	[ #05 ] !~ ,&no-left JCN
245
-		.Audio0/volume DEI 
246
-		#10 .Mouse/state DEI #10 = #e0 * + +
247
-		.Audio0/volume DEO &no-left
248
-	[ #06 ] !~ ,&no-right JCN
249
-		.Audio0/volume DEI
250
-		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
251
-		.Audio0/volume DEO &no-right
182
+	.Mouse/x DEI2 .adsr-view/x1 LDZ2 SUB2 #03 SFT2 NIP #03 DIV
183
+	[ #00 ] NEQk NIP ,&no-a JCN
184
+		.Audio0/adsr DEI ,&touch2 JSR .Audio0/adsr DEO &no-a
185
+	[ #01 ] NEQk NIP ,&no-d JCN
186
+		.Audio0/adsr DEI ,&touch JSR .Audio0/adsr DEO &no-d
187
+	[ #02 ] NEQk NIP ,&no-s JCN
188
+		.Audio0/adsr INC DEI ,&touch2 JSR .Audio0/adsr INC DEO &no-s
189
+	[ #03 ] NEQk NIP ,&no-r JCN
190
+		.Audio0/adsr INC DEI ,&touch JSR .Audio0/adsr INC DEO &no-r
191
+	[ #05 ] NEQk NIP ,&no-left JCN
192
+		.Audio0/volume DEI ,&touch2 JSR .Audio0/volume DEO &no-left
193
+	[ #06 ] NEQk NIP ,&no-right JCN
194
+		.Audio0/volume DEI ,&touch JSR .Audio0/volume DEO &no-right
252 195
 	POP
253 196
 
254 197
 	( release ) #00 .Mouse/state DEO
255 198
 	;draw-adsr JSR2
256
-	;draw-cursor JSR2 
199
+	;draw-cursor JSR2
257 200
 
258 201
 BRK
202
+	&touch DUP #f0 AND STH #01 .Mouse/state DEI #01 GTH #0e MUL ADD ADD #0f AND STHr ADD JMP2r
203
+	&touch2 #10 .Mouse/state DEI #01 GTH #e0 MUL ADD ADD JMP2r
259 204
 
260 205
 @play ( pitch -- )
261 206
 	
262
-	DUP #0c MOD .last-note STZ 
207
+	DUP #0c ( mod ) [ DIVk MUL SUB ] .last-note STZ
263 208
 	.Audio0/pitch DEO
264 209
 
265
-RTN
210
+JMP2r
266 211
 
267 212
 @draw-cursor ( -- )
268 213
 	
269 214
 	( clear last cursor )
270
-	;cursor .Screen/addr DEO2 
271
-	.pointer/x LDZ2 .Screen/x DEO2 
272
-	.pointer/y LDZ2 .Screen/y DEO2 
215
+	;cursor .Screen/addr DEO2
216
+	.pointer/x LDZ2 .Screen/x DEO2
217
+	.pointer/y LDZ2 .Screen/y DEO2
273 218
 	#40 .Screen/sprite DEO
274 219
 	( record pointer positions )
275
-	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 
276
-	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2  
220
+	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
221
+	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
277 222
 	( colorize on state )
278
-	#41 [ .Mouse/state DEI #00 ! ] + .Screen/sprite DEO
223
+	#41 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO
279 224
 
280
-RTN
225
+JMP2r
281 226
 
282 227
 @draw-octave ( -- )
283 228
 	
284
-	.octave-view/x1 LDZ2 #0048 ++ .Screen/x DEO2
229
+	.octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2
285 230
 
286 231
 	;arrow-icns .Screen/addr DEO2
287 232
 	.octave-view/y1 LDZ2 .Screen/y DEO2
288 233
 	#01 .Screen/sprite DEO
289 234
 
290
-	;arrow-icns #0008 ++ .Screen/addr DEO2
291
-	.octave-view/y1 LDZ2 #0010 ++ .Screen/y DEO2
235
+	;arrow-icns/down .Screen/addr DEO2
236
+	.octave-view/y1 LDZ2 #0010 ADD2 .Screen/y DEO2
292 237
 	#01 .Screen/sprite DEO
293 238
 
294
-	;font-hex .octave LDZ #03 + #00 SWP 8** ++ .Screen/addr DEO2
295
-	.octave-view/y1 LDZ2 #0008 ++ .Screen/y DEO2
239
+	;font-hex .octave LDZ #03 ADD #00 SWP #30 SFT2 ADD2 .Screen/addr DEO2
240
+	.octave-view/y1 LDZ2 #0008 ADD2 .Screen/y DEO2
296 241
 	#03 .Screen/sprite DEO
297 242
 
298 243
 	.octave-view/x1 LDZ2 .Screen/x DEO2
299 244
 	.octave-view/y1 LDZ2 .Screen/y DEO2
300
-	AUTO-YADDR
245
+	#06 .Screen/auto DEO
301 246
 	.last-note LDZ STH
302
-	;keys-left-icns STHkr #00 = INC ,draw-key JSR
303
-	;keys-middle-icns STHkr #02 = INC ,draw-key JSR
304
-	;keys-right-icns STHkr #04 = INC ,draw-key JSR
305
-	;keys-left-icns STHkr #05 = INC ,draw-key JSR
306
-	;keys-middle-icns STHkr #07 = INC ,draw-key JSR
307
-	;keys-middle-icns STHkr #09 = INC ,draw-key JSR
308
-	;keys-right-icns STHr #0b = INC ,draw-key JSR
309
-	AUTO-NONE
247
+	;keys-left-icns STHkr #00 EQU INC ,draw-key JSR
248
+	;keys-middle-icns STHkr #02 EQU INC ,draw-key JSR
249
+	;keys-right-icns STHkr #04 EQU INC ,draw-key JSR
250
+	;keys-left-icns STHkr #05 EQU INC ,draw-key JSR
251
+	;keys-middle-icns STHkr #07 EQU INC ,draw-key JSR
252
+	;keys-middle-icns STHkr #09 EQU INC ,draw-key JSR
253
+	;keys-right-icns STHr #0b EQU INC ,draw-key JSR
254
+	#00 .Screen/auto DEO
310 255
 
311
-RTN
256
+JMP2r
312 257
 
313 258
 @draw-key ( addr* color -- )
314 259
 		
... ...
@@ -316,10 +261,10 @@ RTN
316 261
 	.Screen/addr DEO2
317 262
 	.Screen/y DEI2
318 263
 	STHr .Screen/sprite DEOk DEOk DEO
319
-	.Screen/x DEI2k #0008 ++ ROT DEO2
264
+	.Screen/x DEI2k #0008 ADD2 ROT DEO2
320 265
 	.Screen/y DEO2
321 266
 
322
-RTN
267
+JMP2r
323 268
 
324 269
 @draw-adsr ( -- )
325 270
 	
... ...
@@ -327,72 +272,75 @@ RTN
327 272
 	.adsr-view/x1 LDZ2 .adsr-view/y1 LDZ2
328 273
 		.Audio0/adsr DEI #04 SFT
329 274
 		;draw-knob JSR2
330
-	.adsr-view/x1 LDZ2 #0018 ++ .adsr-view/y1 LDZ2
275
+	.adsr-view/x1 LDZ2 #0018 ADD2 .adsr-view/y1 LDZ2
331 276
 		.Audio0/adsr DEI #0f AND
332 277
 		;draw-knob JSR2
333
-	.adsr-view/x1 LDZ2 #0030 ++ .adsr-view/y1 LDZ2
278
+	.adsr-view/x1 LDZ2 #0030 ADD2 .adsr-view/y1 LDZ2
334 279
 		.Audio0/adsr INC DEI #04 SFT
335 280
 		;draw-knob JSR2
336
-	.adsr-view/x1 LDZ2 #0048 ++ .adsr-view/y1 LDZ2
281
+	.adsr-view/x1 LDZ2 #0048 ADD2 .adsr-view/y1 LDZ2
337 282
 		.Audio0/adsr INC DEI #0f AND
338 283
 		;draw-knob JSR2
339 284
 	( volume )
340
-	.adsr-view/x2 LDZ2 #0028 -- .adsr-view/y1 LDZ2
285
+	.adsr-view/x2 LDZ2 #0028 SUB2 .adsr-view/y1 LDZ2
341 286
 		.Audio0/volume DEI #04 SFT
342 287
 		;draw-knob JSR2
343
-	.adsr-view/x2 LDZ2 #0010 -- .adsr-view/y1 LDZ2
288
+	.adsr-view/x2 LDZ2 #0010 SUB2 .adsr-view/y1 LDZ2
344 289
 		.Audio0/volume DEI #0f AND
345 290
 		;draw-knob JSR2
346 291
 
347
-RTN
292
+JMP2r
348 293
 
349 294
 @draw-wave ( -- )
350 295
 	
351
-	( clear )
352
-	.wave-view/x1 LDZ2
353
-	.wave-view/y1 LDZ2
354
-	.wave-view/x2 LDZ2 INC2
355
-	.wave-view/y2 LDZ2
356
-	#00 ;fill-rect JSR2
357
-
358 296
 	#01 ;draw-wave-length JSR2
359 297
 
360 298
 	.wave-view/x1 LDZ2 .Screen/x DEO2
361 299
 
362 300
 	( waveform )
363
-	#ff #00 
301
+	#ff #00
364 302
 	&loop
365 303
 		( dotted line )
366
-		DUP #01 AND ,&no-dot JCN 
367
-			.wave-view/y1 LDZ2 #0010 ++ .Screen/y DEO2
304
+		DUP #01 AND ,&no-dot JCN
305
+			.wave-view/y1 LDZ2 #0010 ADD2 .Screen/y DEO2
368 306
 			#03 .Screen/pixel DEO
369 307
 		&no-dot
370
-		#00 OVR .Audio0/addr DEI2 ++ LDA 
371
-		2/
372
-		TOS 4// .wave-view/y1 LDZ2 ++ .Screen/y DEO2
308
+		#00 OVR .Audio0/addr DEI2 ADD2 LDA
309
+		#01 SFT
310
+		#00 SWP #02 SFT2 .wave-view/y1 LDZ2 ADD2 .Screen/y DEO2
373 311
 		.Screen/x DEI2 INC2 .Screen/x DEO2
374
-		( draw ) DUP 
375
-			.Audio0/length DEI2 NIP > 
376
-			.Audio0/length DEI2 #0100 !! #0101 == DUP ADD INC .Screen/pixel DEO
312
+		( draw ) DUP
313
+			.Audio0/length DEI2 NIP GTH
314
+			.Audio0/length DEI2 #0100 NEQ2 AND DUP ADD INC .Screen/pixel DEO
377 315
 		INC GTHk ,&loop JCN
378 316
 	POP2
379 317
 
380 318
 	( range )
381
-	AUTO-X
319
+	#01 .Screen/auto DEO
382 320
 	.wave-view/x1 LDZ2 .Screen/x DEO2
383
-	.wave-view/y1 LDZ2 #0010 -- .Screen/y DEO2
384
-	.Audio0/addr DEI2 #02 ;draw-short JSR2
385
-	.wave-view/x2 LDZ2 #0020 -- .Screen/x DEO2
386
-	.Audio0/length DEI2 #02 ;draw-short JSR2
387
-	AUTO-NONE
321
+	.wave-view/y1 LDZ2 #0010 SUB2 .Screen/y DEO2
322
+	.Audio0/addr DEI2 ;draw-short JSR2
323
+	.wave-view/x2 LDZ2 #0020 SUB2 .Screen/x DEO2
324
+	.Audio0/length DEI2 ;draw-short JSR2
325
+	#00 .Screen/auto DEO
388 326
 
389
-RTN
327
+JMP2r
390 328
 
391 329
 @draw-wave-length ( color -- )
392
-	
330
+
331
+	( clear background )
332
+	#f2 .Screen/auto DEO
333
+	.wave-view/x1 LDZ2 DUP2 .Screen/x DEO2
334
+	.wave-view/y1 LDZ2 DUP2 .Screen/y DEO2
335
+	,&wipe JSR
336
+	.Screen/y DEO2
337
+	#0080 ADD2 .Screen/x DEO2
338
+	,&wipe JSR
339
+	#00 .Screen/auto DEO
340
+
393 341
 	STH
394
-	.wave-view/x1 LDZ2 .Audio0/length DEI2 ++ .Screen/x DEO2
395
-	.wave-view/y1 LDZ2 DUP2 #0020 ++ SWP2
342
+	.wave-view/x1 LDZ2 .Audio0/length DEI2 ADD2 .Screen/x DEO2
343
+	.wave-view/y1 LDZ2 DUP2 #0020 ADD2 SWP2
396 344
 	&loop
397 345
 		DUP2 .Screen/y DEO2
398 346
 		( draw ) STHkr .Screen/pixel DEO
... ...
@@ -400,71 +348,45 @@ RTN
400 348
 	POP2 POP2
401 349
 	POPr
402 350
 
403
-RTN
351
+JMP2r
352
+	&wipe #00 .Screen/sprite DEOk DEOk DEOk DEO JMP2r
404 353
 
405 354
 @draw-knob ( x* y* value -- )
406 355
 
407
-	( load ) STH .Screen/y DEO2  .Screen/x DEO2
408
-	;knob-icns .Screen/addr DEO2 
409
-		( draw ) #01 .Screen/sprite DEO
410
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2 
411
-	;knob-icns #0008 ++ .Screen/addr DEO2 
412
-		( draw ) #01 .Screen/sprite DEO
413
-	.Screen/y DEI2 #0008 ++ .Screen/y DEO2 
414
-	;knob-icns #0018 ++ .Screen/addr DEO2 
415
-		( draw ) #01 .Screen/sprite DEO
416
-	.Screen/x DEI2 #0008 -- .Screen/x DEO2 
417
-	;knob-icns #0010 ++ .Screen/addr DEO2 
418
-		( draw ) #01 .Screen/sprite DEO
419
-	.Screen/x DEI2 #0004 ++ .Screen/x DEO2
420
-	.Screen/y DEI2 #0008 ++ .Screen/y DEO2
421
-	;font-hex #00 STHkr #30 SFT ++ .Screen/addr DEO2
422
-		( draw ) #01 .Screen/sprite DEO
423
-	.Screen/x DEI2 #0004 -- #00 #00 STHkr ;knob-offsetx ++ LDA ++ .Screen/x DEO2
424
-	.Screen/y DEI2 #0010 -- #00 #00 STHr ;knob-offsety ++ LDA ++ .Screen/y DEO2
425
-	;knob-icns #0020 ++ .Screen/addr DEO2
426
-		( draw ) #05 .Screen/sprite DEO
427
-
428
-RTN
429
-
430
-@draw-short ( short* color -- )
431
-
432
-	STH 
433
-	SWP STHkr ,draw-byte JSR 
434
-	STHr 
435
-
436
-@draw-byte ( byte color -- )
437
-
438
-	STH 
439
-	DUP #04 SFT STHkr ,draw-hex JSR #0f AND 
440
-	STHr 
441
-
442
-@draw-hex ( char color -- )
443
-
444
-	SWP TOS 8** ;font-hex ++ .Screen/addr DEO2
445
-	.Screen/sprite DEO
446
-
447
-RTN
448
-
449
-@fill-rect ( x1* y1* x2* y2* color -- )
450
-	
451
-	,&color STR
452
-	( x1 x2 y1 y2 ) ROT2
453
-	&ver
454
-		( save ) DUP2 .Screen/y DEO2
455
-		STH2 STH2 OVR2 OVR2 SWP2
456
-		&hor
457
-			( save ) DUP2 .Screen/x DEO2
458
-			( draw ) ,&color LDR .Screen/pixel DEO
459
-			( incr ) INC2
460
-			OVR2 OVR2 GTS2 ,&hor JCN
461
-		POP2 POP2 STH2r STH2r
462
-		( incr ) INC2
463
-		OVR2 OVR2 GTS2 ,&ver JCN
464
-	POP2 POP2 POP2 POP2
465
-
466
-RTN
467
-	&color $1
356
+	STH
357
+	OVR2 OVR2 .Screen/y DEO2 .Screen/x DEO2
358
+	( circle )
359
+	;knob-icns .Screen/addr DEO2
360
+	#16 .Screen/auto DEO
361
+	#01 .Screen/sprite DEOk DEO
362
+	#00 .Screen/auto DEO
363
+	( value )
364
+	#0010 ADD2 .Screen/y DEO2
365
+	#0004 ADD2 .Screen/x DEO2
366
+	;font-hex #00 STHkr #30 SFT ADD2 .Screen/addr DEO2
367
+	#01 .Screen/sprite DEO
368
+	( marker )
369
+	.Screen/x DEI2 #0004 SUB2 #00 #00 STHkr ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2
370
+	.Screen/y DEI2 #0010 SUB2 #00 #00 STHr ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2
371
+	;knob-icns #0020 ADD2 .Screen/addr DEO2
372
+	#05 .Screen/sprite DEO
373
+
374
+JMP2r
375
+
376
+@draw-short ( short* -- )
377
+
378
+	SWP ,draw-byte JSR
379
+
380
+@draw-byte ( byte -- )
381
+
382
+	DUP #04 SFT ,draw-hex JSR #0f AND
383
+
384
+@draw-hex ( char -- )
385
+
386
+	#00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
387
+	#02 .Screen/sprite DEO
388
+
389
+JMP2r
468 390
 
469 391
 @within-rect ( x* y* rect -- flag )
470 392
 	
... ...
@@ -475,54 +397,55 @@ RTN
475 397
 	( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN
476 398
 	( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ,&skip JCN
477 399
 	POP2 POP2 POPr
478
-	#01 
479
-RTN
400
+	#01
401
+JMP2r
480 402
 	&skip
481 403
 	POP2 POP2 POPr
482 404
 	#00
483 405
 
484
-RTN
406
+JMP2r
485 407
 
486
-@cursor 
487
-	80c0 e0f0 f8e0 1000 
408
+@cursor
409
+	80c0 e0f0 f8e0 1000
488 410
 
489
-@arrow-icns 
411
+@arrow-icns
490 412
 	0010 387c fe10 1000
491
-	0010 1010 fe7c 3810 
413
+	&down
414
+	0010 1010 fe7c 3810
492 415
 
493
-@notes 
416
+@notes
494 417
 	30 32 34 35
495 418
 	37 39 3b 3c
496 419
 
497
-@keys-left-icns 
420
+@keys-left-icns
498 421
 	7c7c 7c7c 7c7c 7c7c
499 422
 	7c7c 7c7c 7c7c 7e7f
500
-	7f7f 7f7f 7f7f 3e00 
423
+	7f7f 7f7f 7f7f 3e00
501 424
 
502
-@keys-middle-icns 
425
+@keys-middle-icns
503 426
 	1c1c 1c1c 1c1c 1c1c
504 427
 	1c1c 1c1c 1c1c 3e7f
505
-	7f7f 7f7f 7f7f 3e00 
428
+	7f7f 7f7f 7f7f 3e00
506 429
 
507
-@keys-right-icns 
430
+@keys-right-icns
508 431
 	1f1f 1f1f 1f1f 1f1f
509 432
 	1f1f 1f1f 1f1f 3f7f
510
-	7f7f 7f7f 7f7f 3e00 
433
+	7f7f 7f7f 7f7f 3e00
511 434
 
512
-@knob-icns 
435
+@knob-icns
513 436
 	0003 0c10 2020 4040
514 437
 	00c0 3008 0404 0202
515 438
 	4040 2020 100c 0300
516 439
 	0202 0404 0830 c000
517
-	0000 183c 3c18 0000 
440
+	0000 183c 3c18 0000
518 441
 
519
-@knob-offsetx 
442
+@knob-offsetx
520 443
 	01 00 00 00 00 01 02 03
521
-	05 06 07 08 08 08 08 07 
444
+	05 06 07 08 08 08 08 07
522 445
 
523
-@knob-offsety 
446
+@knob-offsety
524 447
 	07 06 05 03 02 01 00 00
525
-	00 00 01 02 03 05 06 07 
448
+	00 00 01 02 03 05 06 07
526 449
 
527 450
 @font-hex ( 0-F )
528 451
 	007c 8282 8282 827c 0030 1010 1010 1010
... ...
@@ -532,7 +455,7 @@ RTN
532 455
 	007c 8282 7c82 827c 007c 8282 7e02 827c
533 456
 	007c 8202 7e82 827e 00fc 8282 fc82 82fc
534 457
 	007c 8280 8080 827c 00fc 8282 8282 82fc
535
-	007c 8280 f080 827c 007c 8280 f080 8080 
458
+	007c 8280 f080 827c 007c 8280 f080 8080
536 459
 
537 460
 @sin-pcm
538 461
 	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad