Browse code

(piano.tal) Rewrite

Devine Lu Linvega authored on 27/02/2023 04:16:41
Showing 1 changed files
... ...
@@ -1,42 +1,32 @@
1 1
 ( Piano:
2 2
 	Play notes with the keyboard or the controller )
3 3
 
4
-|00 @System     &vector $2 &wst      $1 &rst    $1 &pad    $4 &r      $2 &g      $2 &b      $2 &debug  $1 &halt $1
5
-|10 @Console    &vector $2 &read     $1 &pad    $5 &write  $1 &error  $1
6
-|20 @Screen     &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
7
-|30 @Audio0     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length $2 &addr   $2 &volume $1 &pitch $1
8
-|80 @Controller &vector $2 &button   $1 &key    $1
9
-|90 @Mouse      &vector $2 &x        $2 &y      $2 &state  $1 &pad    $3 &modx   $2 &mody   $2
4
+|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
5
+|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
6
+|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
7
+|30 @Audio0 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1
8
+|80 @Controller &vector $2 &button $1 &key $1
9
+|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &modx $2 &mody $2
10 10
 
11 11
 |0000
12 12
 
13
-@last-note $1
14
-@octave $1
15
-@pointer
16
-	&x $2 &y $2
17
-@center
18
-	&x $2 &y $2
19
-@adsr-view
20
-	&x1 $2 &y1 $2 &x2 $2 &y2 $2
21
-@wave-view
22
-	&x1 $2 &y1 $2 &x2 $2 &y2 $2
23
-@octave-view
24
-	&x1 $2 &y1 $2 &x2 $2 &y2 $2
13
+	@last-note $1
14
+	@octave $1
15
+	@pointer &x $2 &y $2
16
+	@center &x $2 &y $2
17
+	@adsr-view &x1 $2 &y1 $2 &x2 $2 &y2 $2
18
+	@wave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2
19
+	@octave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2
25 20
 
26 21
 |0100 ( -> )
27
-	
22
+
28 23
 	( theme )
29 24
 	#0fe5 .System/r DEO2
30 25
 	#0fc5 .System/g DEO2
31 26
 	#0f25 .System/b DEO2
32
-	( vectors )
33
-	;on-frame   .Screen/vector DEO2
34
-	;on-control .Controller/vector DEO2
35
-	;on-mouse   .Mouse/vector DEO2
36
-	;on-message .Console/vector DEO2
37 27
 	( find center )
38 28
 	.Screen/width DEI2 #01 SFT2 .center/x STZ2
39
-	.Screen/height DEI2 #01 SFT2 .center/y STZ2
29
+	.Screen/height DEI2 #01 SFT2 #0018 ADD2 .center/y STZ2
40 30
 	( place octave )
41 31
 	.center/x LDZ2 #0080 SUB2 .octave-view/x1 STZ2
42 32
 	.center/y LDZ2 #0008 ADD2 .octave-view/y1 STZ2
... ...
@@ -49,33 +39,37 @@
49 39
 	.adsr-view/y1 LDZ2 #0018 ADD2 .adsr-view/y2 STZ2
50 40
 	( place waveform )
51 41
 	.center/x LDZ2 #0080 SUB2 .wave-view/x1 STZ2
52
-	.center/y LDZ2 #0020 SUB2 .wave-view/y1 STZ2
42
+	.center/y LDZ2 #0040 SUB2 .wave-view/y1 STZ2
53 43
 	.wave-view/x1 LDZ2 #0100 ADD2 .wave-view/x2 STZ2
54
-	.wave-view/y1 LDZ2 #0020 ADD2 .wave-view/y2 STZ2
55
-	( default settings )
56
-	#ff .last-note STZ
44
+	.wave-view/y1 LDZ2 #0040 ADD2 .wave-view/y2 STZ2
57 45
 	#041c .Audio0/adsr DEO2
58 46
 	#dd .Audio0/volume DEO
59 47
 	;sin-pcm .Audio0/addr DEO2
60 48
 	#0100 .Audio0/length DEO2
61 49
 	( inital drawing )
62
-	;draw-octave JSR2
63
-	;draw-adsr JSR2
64
-	;draw-wave JSR2
50
+	draw-octave
51
+	draw-adsr
52
+	draw-wave
53
+	( unlock )
54
+	;on-frame .Screen/vector DEO2
55
+	;on-control .Controller/vector DEO2
56
+	;on-mouse .Mouse/vector DEO2
57
+	;on-message .Console/vector DEO2
65 58
 
66 59
 BRK
67 60
 
68 61
 @on-frame ( -> )
69
-	
62
+
63
+	#00 .Screen/auto DEO
70 64
 	.adsr-view/y2 LDZ2 #0020 SUB2 .Screen/y DEO2
71
-	#10 #00
65
+	#1000
72 66
 	&loop
73 67
 		.adsr-view/x2 LDZ2 #003a SUB2 .Screen/x DEO2
74 68
 		#10 OVR SUB .Audio0/output DEI #0f AND LTH .Screen/pixel DEO
75 69
 		.adsr-view/x2 LDZ2 #003a SUB2 INC2 INC2 .Screen/x DEO2
76 70
 		#10 OVR SUB .Audio0/output DEI #04 SFT LTH .Screen/pixel DEO
77 71
 		.Screen/y DEI2k INC2 INC2 ROT DEO2
78
-		INC GTHk ,&loop JCN
72
+		INC GTHk ?&loop
79 73
 	POP2
80 74
 
81 75
 BRK
... ...
@@ -88,92 +82,95 @@ BRK
88 82
 	#40 .Screen/sprite DEO
89 83
 
90 84
 	.Controller/key DEI
91
-	[ LIT "a ] NEQk NIP ,&no-c JCN #30 .octave LDZ #0c MUL ADD ;play JSR2 &no-c
92
-	[ LIT "s ] NEQk NIP ,&no-d JCN #32 .octave LDZ #0c MUL ADD ;play JSR2 &no-d
93
-	[ LIT "d ] NEQk NIP ,&no-e JCN #34 .octave LDZ #0c MUL ADD ;play JSR2 &no-e
94
-	[ LIT "f ] NEQk NIP ,&no-f JCN #35 .octave LDZ #0c MUL ADD ;play JSR2 &no-f
95
-	[ LIT "g ] NEQk NIP ,&no-g JCN #37 .octave LDZ #0c MUL ADD ;play JSR2 &no-g
96
-	[ LIT "h ] NEQk NIP ,&no-a JCN #39 .octave LDZ #0c MUL ADD ;play JSR2 &no-a
97
-	[ LIT "j ] NEQk NIP ,&no-b JCN #3b .octave LDZ #0c MUL ADD ;play JSR2 &no-b
98
-	[ LIT "k ] NEQk NIP ,&no-c2 JCN #3c .octave LDZ #0c MUL ADD ;play JSR2 &no-c2
99
-	[ #1b ] NEQk NIP ,&no-esc JCN #010f DEO &no-esc
85
+	[ LIT "a ] NEQk NIP ?&no-c #30 .octave LDZ #0c MUL ADD play &no-c
86
+	[ LIT "s ] NEQk NIP ?&no-d #32 .octave LDZ #0c MUL ADD play &no-d
87
+	[ LIT "d ] NEQk NIP ?&no-e #34 .octave LDZ #0c MUL ADD play &no-e
88
+	[ LIT "f ] NEQk NIP ?&no-f #35 .octave LDZ #0c MUL ADD play &no-f
89
+	[ LIT "g ] NEQk NIP ?&no-g #37 .octave LDZ #0c MUL ADD play &no-g
90
+	[ LIT "h ] NEQk NIP ?&no-a #39 .octave LDZ #0c MUL ADD play &no-a
91
+	[ LIT "j ] NEQk NIP ?&no-b #3b .octave LDZ #0c MUL ADD play &no-b
92
+	[ LIT "k ] NEQk NIP ?&no-c2 #3c .octave LDZ #0c MUL ADD play &no-c2
93
+	[ #1b ] NEQk NIP ?&no-esc #010f DEO &no-esc
100 94
 	POP
101 95
 
102 96
 	( release )
103 97
 	#00 .Controller/key DEO
104 98
 
105 99
 	.Controller/button DEI
106
-	[ #11 ] NEQk NIP ,&cu JCN #3c ;play JSR2 &cu
107
-	[ #21 ] NEQk NIP ,&cd JCN #3d ;play JSR2 &cd
108
-	[ #41 ] NEQk NIP ,&cl JCN #3e ;play JSR2 &cl
109
-	[ #81 ] NEQk NIP ,&cr JCN #3f ;play JSR2 &cr
110
-	[ #12 ] NEQk NIP ,&au JCN #40 ;play JSR2 &au
111
-	[ #22 ] NEQk NIP ,&ad JCN #41 ;play JSR2 &ad
112
-	[ #42 ] NEQk NIP ,&al JCN #42 ;play JSR2 &al
113
-	[ #82 ] NEQk NIP ,&ar JCN #43 ;play JSR2 &ar
114
-	[ #14 ] NEQk NIP ,&su JCN #44 ;play JSR2 &su
115
-	[ #24 ] NEQk NIP ,&sd JCN #45 ;play JSR2 &sd
116
-	[ #44 ] NEQk NIP ,&sl JCN #46 ;play JSR2 &sl
117
-	[ #84 ] NEQk NIP ,&sr JCN #47 ;play JSR2 &sr
118
-	[ #40 ] NEQk NIP ,&l JCN .Audio0/addr DEI2 #0010 SUB2 .Audio0/addr DEO2 &l
119
-	[ #80 ] NEQk NIP ,&r JCN .Audio0/addr DEI2 #0010 ADD2 .Audio0/addr DEO2 &r
100
+	[ #11 ] NEQk NIP ?&cu #3c play &cu
101
+	[ #21 ] NEQk NIP ?&cd #3d play &cd
102
+	[ #41 ] NEQk NIP ?&cl #3e play &cl
103
+	[ #81 ] NEQk NIP ?&cr #3f play &cr
104
+	[ #12 ] NEQk NIP ?&au #40 play &au
105
+	[ #22 ] NEQk NIP ?&ad #41 play &ad
106
+	[ #42 ] NEQk NIP ?&al #42 play &al
107
+	[ #82 ] NEQk NIP ?&ar #43 play &ar
108
+	[ #14 ] NEQk NIP ?&su #44 play &su
109
+	[ #24 ] NEQk NIP ?&sd #45 play &sd
110
+	[ #44 ] NEQk NIP ?&sl #46 play &sl
111
+	[ #84 ] NEQk NIP ?&sr #47 play &sr
112
+	[ #40 ] NEQk NIP ?&l .Audio0/addr DEI2 #0010 SUB2 .Audio0/addr DEO2 &l
113
+	[ #80 ] NEQk NIP ?&r .Audio0/addr DEI2 #0010 ADD2 .Audio0/addr DEO2 &r
120 114
 	POP
121 115
 
122
-	;draw-octave JSR2
123
-	;draw-wave JSR2
116
+	draw-octave
117
+	draw-wave
124 118
 
125 119
 BRK
126 120
 
127 121
 @on-message ( -> )
128
-	
129
-	.Console/read DEI ;play JSR2
130
-	;draw-octave JSR2
122
+
123
+	.Console/read DEI play
124
+	draw-octave
131 125
 
132 126
 BRK
133 127
 
134 128
 @on-mouse ( -> )
135 129
 
136
-	;draw-cursor JSR2
137
-	
138
-	.Mouse/state DEI #00 NEQ JMP [ BRK ]
130
+	#00 .Mouse/state DEI NEQ #41 ADD ;cursor-icn update-cursor
139 131
 
140
-	.Mouse/x DEI2 .Mouse/y DEI2 .wave-view ;within-rect JSR2
141
-		;on-touch-wave-view JCN2
142
-	.Mouse/x DEI2 .Mouse/y DEI2 .adsr-view ;within-rect JSR2
143
-		;on-touch-adsr-view JCN2
144
-	.Mouse/x DEI2 .Mouse/y DEI2 .octave-view ;within-rect JSR2
145
-		;on-touch-octave-view JCN2
132
+	.Mouse/state DEI ?on-mouse-touch
133
+
134
+BRK
135
+
136
+@on-mouse-touch ( -> )
137
+
138
+	.Mouse/x DEI2 .Mouse/y DEI2 .wave-view within-rect
139
+		?on-touch-wave-view
140
+	.Mouse/x DEI2 .Mouse/y DEI2 .adsr-view within-rect
141
+		?on-touch-adsr-view
142
+	.Mouse/x DEI2 .Mouse/y DEI2 .octave-view within-rect
143
+		?on-touch-octave-view
146 144
 
147 145
 BRK
148 146
 
149 147
 @on-touch-wave-view ( -> )
150 148
 
151 149
 	.Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 .Audio0/length DEO2
152
-	;draw-wave JSR2
153
-	;draw-cursor JSR2
150
+	draw-wave
154 151
 
155 152
 BRK
156 153
 
157 154
 @on-touch-octave-view ( -> )
158 155
 
159
-	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ,&no-mod JCN
156
+	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ?&no-mod
160 157
 		.Mouse/y DEI2 .octave-view/y1 LDZ2 SUB2 #03 SFT2 NIP
161
-		[ #00 ] NEQk NIP ,&no-incr JCN
162
-			.octave LDZ #03 EQU ,&no-incr JCN
158
+		[ #00 ] NEQk NIP ?&no-incr
159
+			.octave LDZ #03 EQU ?&no-incr
163 160
 			.octave LDZ INC .octave STZ &no-incr
164
-		[ #02 ] NEQk NIP ,&no-decr JCN
165
-			.octave LDZ #ff EQU ,&no-decr JCN
161
+		[ #02 ] NEQk NIP ?&no-decr
162
+			.octave LDZ #ff EQU ?&no-decr
166 163
 			.octave LDZ #01 SUB .octave STZ &no-decr
167 164
 		POP
168 165
 		( release ) #00 .Mouse/state DEO
169
-		;draw-octave JSR2
166
+		draw-octave
170 167
 		BRK
171 168
 	&no-mod
172 169
 
173
-	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #06 GTH ,&no-key JCN
174
-		.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 ;notes ADD2 LDA .octave LDZ #0c MUL ADD ;play JSR2
170
+	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #06 GTH ?&no-key
171
+		.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 ;notes-lut ADD2 LDA .octave LDZ #0c MUL ADD play
175 172
 		( release ) #00 .Mouse/state DEO
176
-		;draw-octave JSR2
173
+		draw-octave
177 174
 	&no-key
178 175
 
179 176
 BRK
... ...
@@ -181,83 +178,84 @@ BRK
181 178
 @on-touch-adsr-view ( -> )
182 179
 
183 180
 	.Mouse/x DEI2 .adsr-view/x1 LDZ2 SUB2 #03 SFT2 NIP #03 DIV
184
-	[ #00 ] NEQk NIP ,&no-a JCN
185
-		.Audio0/adsr DEI ,&touch2 JSR .Audio0/adsr DEO &no-a
186
-	[ #01 ] NEQk NIP ,&no-d JCN
187
-		.Audio0/adsr DEI ,&touch JSR .Audio0/adsr DEO &no-d
188
-	[ #02 ] NEQk NIP ,&no-s JCN
189
-		.Audio0/adsr INC DEI ,&touch2 JSR .Audio0/adsr INC DEO &no-s
190
-	[ #03 ] NEQk NIP ,&no-r JCN
191
-		.Audio0/adsr INC DEI ,&touch JSR .Audio0/adsr INC DEO &no-r
192
-	[ #05 ] NEQk NIP ,&no-left JCN
193
-		.Audio0/volume DEI ,&touch2 JSR .Audio0/volume DEO &no-left
194
-	[ #06 ] NEQk NIP ,&no-right JCN
195
-		.Audio0/volume DEI ,&touch JSR .Audio0/volume DEO &no-right
181
+	[ #00 ] NEQk NIP ?&no-a
182
+		.Audio0/adsr DEI touch2 .Audio0/adsr DEO &no-a
183
+	[ #01 ] NEQk NIP ?&no-d
184
+		.Audio0/adsr DEI touch .Audio0/adsr DEO &no-d
185
+	[ #02 ] NEQk NIP ?&no-s
186
+		.Audio0/adsr INC DEI touch2 .Audio0/adsr INC DEO &no-s
187
+	[ #03 ] NEQk NIP ?&no-r
188
+		.Audio0/adsr INC DEI touch .Audio0/adsr INC DEO &no-r
189
+	[ #05 ] NEQk NIP ?&no-left
190
+		.Audio0/volume DEI touch2 .Audio0/volume DEO &no-left
191
+	[ #06 ] NEQk NIP ?&no-right
192
+		.Audio0/volume DEI touch .Audio0/volume DEO &no-right
196 193
 	POP
197 194
 
198 195
 	( release ) #00 .Mouse/state DEO
199
-	;draw-adsr JSR2
200
-	;draw-cursor JSR2
196
+	draw-adsr
201 197
 
202 198
 BRK
203
-	&touch DUP #f0 AND STH #01 .Mouse/state DEI #01 GTH #0e MUL ADD ADD #0f AND STHr ADD JMP2r
204
-	&touch2 #10 .Mouse/state DEI #01 GTH #e0 MUL ADD ADD JMP2r
199
+@touch
200
+	DUP #f0 AND STH #01 .Mouse/state DEI #01 GTH #0e MUL ADD ADD #0f AND STHr ADD JMP2r
201
+@touch2
202
+	#10 .Mouse/state DEI #01 GTH #e0 MUL ADD ADD JMP2r
203
+
204
+(
205
+@|core )
205 206
 
206 207
 @play ( pitch -- )
207
-	
208
-	DUP #0c ( mod ) [ DIVk MUL SUB ] .last-note STZ
208
+
209
+	DUP #0c DIVk MUL SUB ;draw-octave/last STA
209 210
 	.Audio0/pitch DEO
210 211
 
211 212
 JMP2r
212 213
 
213
-@draw-cursor ( -- )
214
-	
215
-	( clear last cursor )
216
-	;cursor .Screen/addr DEO2
217
-	.pointer/x LDZ2 .Screen/x DEO2
218
-	.pointer/y LDZ2 .Screen/y DEO2
219
-	#40 .Screen/sprite DEO
220
-	( record pointer positions )
221
-	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
222
-	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
223
-	( colorize on state )
224
-	#41 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO
214
+@update-cursor ( color addr* -- )
215
+
216
+	[ LIT2 00 -Screen/auto ] DEO
217
+	#40 draw-cursor
218
+	.Mouse/x DEI2 ,draw-cursor/x STR2
219
+	.Mouse/y DEI2 ,draw-cursor/y STR2
220
+	.Screen/addr DEO2
221
+
222
+@draw-cursor ( color -- )
223
+
224
+	[ LIT2 &x $2 ] .Screen/x DEO2
225
+	[ LIT2 &y $2 ] .Screen/y DEO2
226
+	.Screen/sprite DEO
225 227
 
226 228
 JMP2r
227 229
 
228 230
 @draw-octave ( -- )
229
-	
230
-	.octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2
231 231
 
232
-	;arrow-icns .Screen/addr DEO2
232
+	( arrows )
233
+	[ LIT2 02 -Screen/auto ] DEO
234
+	.octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2
233 235
 	.octave-view/y1 LDZ2 .Screen/y DEO2
234
-	#01 .Screen/sprite DEO
235
-
236
-	;arrow-icns/down .Screen/addr DEO2
237
-	.octave-view/y1 LDZ2 #0010 ADD2 .Screen/y DEO2
238
-	#01 .Screen/sprite DEO
239
-
236
+	;arrow-icns .Screen/addr DEO2
237
+	[ LIT2 01 -Screen/sprite ] DEO
240 238
 	;font-hex .octave LDZ #03 ADD #00 SWP #30 SFT2 ADD2 .Screen/addr DEO2
241
-	.octave-view/y1 LDZ2 #0008 ADD2 .Screen/y DEO2
242
-	#03 .Screen/sprite DEO
243
-
239
+	[ LIT2 03 -Screen/sprite ] DEO
240
+	;arrow-icns/down .Screen/addr DEO2
241
+	[ LIT2 01 -Screen/sprite ] DEO
242
+	( octave )
244 243
 	.octave-view/x1 LDZ2 .Screen/x DEO2
245 244
 	.octave-view/y1 LDZ2 .Screen/y DEO2
246
-	#06 .Screen/auto DEO
247
-	.last-note LDZ STH
248
-	;keys-left-icns STHkr #00 EQU INC ,draw-key JSR
249
-	;keys-middle-icns STHkr #02 EQU INC ,draw-key JSR
250
-	;keys-right-icns STHkr #04 EQU INC ,draw-key JSR
251
-	;keys-left-icns STHkr #05 EQU INC ,draw-key JSR
252
-	;keys-middle-icns STHkr #07 EQU INC ,draw-key JSR
253
-	;keys-middle-icns STHkr #09 EQU INC ,draw-key JSR
254
-	;keys-right-icns STHr #0b EQU INC ,draw-key JSR
255
-	#00 .Screen/auto DEO
256
-
257
-JMP2r
245
+	[ LIT2 06 -Screen/auto ] DEO
246
+	[ LITr &last ff ]
247
+	;keys-left-icns STHkr #00 EQU INC draw-key
248
+	;keys-middle-icns STHkr #02 EQU INC draw-key
249
+	;keys-right-icns STHkr #04 EQU INC draw-key
250
+	;keys-left-icns STHkr #05 EQU INC draw-key
251
+	;keys-middle-icns STHkr #07 EQU INC draw-key
252
+	;keys-middle-icns STHkr #09 EQU INC draw-key
253
+	;keys-right-icns STHr #0b EQU INC
254
+
255
+( >> )
258 256
 
259 257
 @draw-key ( addr* color -- )
260
-		
258
+
261 259
 	STH
262 260
 	.Screen/addr DEO2
263 261
 	.Screen/y DEI2
... ...
@@ -268,61 +266,47 @@ JMP2r
268 266
 JMP2r
269 267
 
270 268
 @draw-adsr ( -- )
271
-	
269
+
272 270
 	( adsr )
273 271
 	.adsr-view/x1 LDZ2 .adsr-view/y1 LDZ2
274
-		.Audio0/adsr DEI #04 SFT
275
-		;draw-knob JSR2
272
+		.Audio0/adsr DEI #04 SFT draw-knob
276 273
 	.adsr-view/x1 LDZ2 #0018 ADD2 .adsr-view/y1 LDZ2
277
-		.Audio0/adsr DEI #0f AND
278
-		;draw-knob JSR2
274
+		.Audio0/adsr DEI #0f AND draw-knob
279 275
 	.adsr-view/x1 LDZ2 #0030 ADD2 .adsr-view/y1 LDZ2
280
-		.Audio0/adsr INC DEI #04 SFT
281
-		;draw-knob JSR2
276
+		.Audio0/adsr INC DEI #04 SFT draw-knob
282 277
 	.adsr-view/x1 LDZ2 #0048 ADD2 .adsr-view/y1 LDZ2
283
-		.Audio0/adsr INC DEI #0f AND
284
-		;draw-knob JSR2
278
+		.Audio0/adsr INC DEI #0f AND draw-knob
285 279
 	( volume )
286 280
 	.adsr-view/x2 LDZ2 #0028 SUB2 .adsr-view/y1 LDZ2
287
-		.Audio0/volume DEI #04 SFT
288
-		;draw-knob JSR2
281
+		.Audio0/volume DEI #04 SFT draw-knob
289 282
 	.adsr-view/x2 LDZ2 #0010 SUB2 .adsr-view/y1 LDZ2
290 283
 		.Audio0/volume DEI #0f AND
291
-		;draw-knob JSR2
292 284
 
293
-JMP2r
285
+!draw-knob
294 286
 
295 287
 @draw-wave ( -- )
296
-	
297
-	#01 ;draw-wave-length JSR2
288
+
289
+	( #01 draw-wave-length )
290
+	( dotted zero )
298 291
 
299 292
 	.wave-view/x1 LDZ2 .Screen/x DEO2
300 293
 
301 294
 	( waveform )
302
-	#ff #00
295
+	[ LIT2 01 -Screen/auto ] DEO
296
+	;sin-pcm/end ;sin-pcm
303 297
 	&loop
304
-		( dotted line )
305
-		DUP #01 AND ,&no-dot JCN
306
-			.wave-view/y1 LDZ2 #0010 ADD2 .Screen/y DEO2
307
-			#03 .Screen/pixel DEO
308
-		&no-dot
309
-		#00 OVR .Audio0/addr DEI2 ADD2 LDA
310
-		#01 SFT
311
-		#00 SWP #02 SFT2 .wave-view/y1 LDZ2 ADD2 .Screen/y DEO2
312
-		.Screen/x DEI2 INC2 .Screen/x DEO2
313
-		( draw ) DUP
314
-			.Audio0/length DEI2 NIP GTH
315
-			.Audio0/length DEI2 #0100 NEQ2 AND DUP ADD INC .Screen/pixel DEO
316
-		INC GTHk ,&loop JCN
317
-	POP2
298
+		LDAk #00 SWP #02 SFT2 .wave-view/y1 LDZ2 ADD2 .Screen/y DEO2
299
+		( draw ) DUP2 ;sin-pcm SUB2 NIP .Audio0/length DEI2 NIP GTH INC INC .Screen/pixel DEO
300
+		INC2 GTH2k ?&loop
301
+	POP2 POP2
318 302
 
319 303
 	( range )
320 304
 	#01 .Screen/auto DEO
321 305
 	.wave-view/x1 LDZ2 .Screen/x DEO2
322 306
 	.wave-view/y1 LDZ2 #0010 SUB2 .Screen/y DEO2
323
-	.Audio0/addr DEI2 ;draw-short JSR2
307
+	.Audio0/addr DEI2 draw-short
324 308
 	.wave-view/x2 LDZ2 #0020 SUB2 .Screen/x DEO2
325
-	.Audio0/length DEI2 ;draw-short JSR2
309
+	.Audio0/length DEI2 draw-short
326 310
 	#00 .Screen/auto DEO
327 311
 
328 312
 JMP2r
... ...
@@ -345,7 +329,7 @@ JMP2r
345 329
 	&loop
346 330
 		DUP2 .Screen/y DEO2
347 331
 		( draw ) STHkr .Screen/pixel DEO
348
-		INC2 GTH2k ,&loop JCN
332
+		INC2 GTH2k ?&loop
349 333
 	POP2 POP2
350 334
 	POPr
351 335
 
... ...
@@ -358,45 +342,45 @@ JMP2r
358 342
 	OVR2 OVR2 .Screen/y DEO2 .Screen/x DEO2
359 343
 	( circle )
360 344
 	;knob-icns .Screen/addr DEO2
361
-	#16 .Screen/auto DEO
362
-	#01 .Screen/sprite DEOk DEO
363
-	#00 .Screen/auto DEO
345
+	[ LIT2 16 -Screen/auto ] DEO
346
+	[ LIT2 01 -Screen/sprite ] DEOk DEO
364 347
 	( value )
365 348
 	#0010 ADD2 .Screen/y DEO2
366 349
 	#0004 ADD2 .Screen/x DEO2
367 350
 	;font-hex #00 STHkr #30 SFT ADD2 .Screen/addr DEO2
368
-	#01 .Screen/sprite DEO
351
+	[ LIT2 00 -Screen/auto ] DEO
352
+	[ LIT2 01 -Screen/sprite ] DEO
369 353
 	( marker )
370
-	.Screen/x DEI2 #0004 SUB2 #00 #00 STHkr ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2
371
-	.Screen/y DEI2 #0010 SUB2 #00 #00 STHr ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2
354
+	.Screen/x DEI2 #0004 SUB2 #0000 STHkr ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2
355
+	.Screen/y DEI2 #0010 SUB2 #0000 STHr ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2
372 356
 	;knob-icns #0020 ADD2 .Screen/addr DEO2
373
-	#05 .Screen/sprite DEO
357
+	[ LIT2 05 -Screen/sprite ] DEO
374 358
 
375 359
 JMP2r
376 360
 
377 361
 @draw-short ( short* -- )
378 362
 
379
-	SWP ,draw-byte JSR
363
+	SWP draw-byte
380 364
 
381 365
 @draw-byte ( byte -- )
382 366
 
383
-	DUP #04 SFT ,draw-hex JSR #0f AND
367
+	DUP #04 SFT draw-hex #0f AND
384 368
 
385 369
 @draw-hex ( char -- )
386 370
 
387 371
 	#00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
388
-	#02 .Screen/sprite DEO
372
+	[ LIT2 02 -Screen/sprite ] DEO
389 373
 
390 374
 JMP2r
391 375
 
392 376
 @within-rect ( x* y* rect -- flag )
393
-	
377
+
394 378
 	STH
395
-	( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ,&skip JCN
396
-	( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ,&skip JCN
379
+	( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ?&skip
380
+	( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ?&skip
397 381
 	SWP2
398
-	( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN
399
-	( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ,&skip JCN
382
+	( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ?&skip
383
+	( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ?&skip
400 384
 	POP2 POP2 POPr
401 385
 	#01
402 386
 JMP2r
... ...
@@ -406,49 +390,47 @@ JMP2r
406 390
 
407 391
 JMP2r
408 392
 
409
-@cursor
410
-	80c0 e0f0 f8e0 1000
393
+@phex ( short* -- ) SWP phex/b &b DUP #04 SFT phex/c &c #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r
411 394
 
412
-@arrow-icns
413
-	0010 387c fe10 1000
414
-	&down
415
-	0010 1010 fe7c 3810
395
+(
416 396
 
417
-@notes
418
-	30 32 34 35
419
-	37 39 3b 3c
397
+@|assets )
420 398
 
421
-@keys-left-icns
399
+@cursor-icn [
400
+	80c0 e0f0 f8e0 1000 ]
401
+@arrow-icns [
402
+	0010 387c fe10 1000
403
+&down
404
+	0010 1010 fe7c 3810 ]
405
+@notes-lut [
406
+	30 32 34 35
407
+	37 39 3b 3c ]
408
+@keys-left-icns [
422 409
 	7c7c 7c7c 7c7c 7c7c
423 410
 	7c7c 7c7c 7c7c 7e7f
424
-	7f7f 7f7f 7f7f 3e00
425
-
426
-@keys-middle-icns
411
+	7f7f 7f7f 7f7f 3e00 ]
412
+@keys-middle-icns [
427 413
 	1c1c 1c1c 1c1c 1c1c
428 414
 	1c1c 1c1c 1c1c 3e7f
429
-	7f7f 7f7f 7f7f 3e00
430
-
431
-@keys-right-icns
415
+	7f7f 7f7f 7f7f 3e00 ]
416
+@keys-right-icns [
432 417
 	1f1f 1f1f 1f1f 1f1f
433 418
 	1f1f 1f1f 1f1f 3f7f
434
-	7f7f 7f7f 7f7f 3e00
435
-
436
-@knob-icns
419
+	7f7f 7f7f 7f7f 3e00 ]
420
+@knob-icns [
437 421
 	0003 0c10 2020 4040
438 422
 	00c0 3008 0404 0202
439 423
 	4040 2020 100c 0300
440 424
 	0202 0404 0830 c000
441
-	0000 183c 3c18 0000
442
-
443
-@knob-offsetx
425
+	&index
426
+	0000 183c 3c18 0000 ]
427
+@knob-offsetx [
444 428
 	01 00 00 00 00 01 02 03
445
-	05 06 07 08 08 08 08 07
446
-
447
-@knob-offsety
429
+	05 06 07 08 08 08 08 07 ]
430
+@knob-offsety [
448 431
 	07 06 05 03 02 01 00 00
449
-	00 00 01 02 03 05 06 07
450
-
451
-@font-hex ( 0-F )
432
+	00 00 01 02 03 05 06 07 ]
433
+@font-hex [
452 434
 	007c 8282 8282 827c 0030 1010 1010 1010
453 435
 	007c 8202 7c80 80fe 007c 8202 1c02 827c
454 436
 	000c 1424 4484 fe04 00fe 8080 7c02 827c
... ...
@@ -456,9 +438,8 @@ JMP2r
456 438
 	007c 8282 7c82 827c 007c 8282 7e02 827c
457 439
 	007c 8202 7e82 827e 00fc 8282 fc82 82fc
458 440
 	007c 8280 8080 827c 00fc 8282 8282 82fc
459
-	007c 8280 f080 827c 007c 8280 f080 8080
460
-
461
-@sin-pcm
441
+	007c 8280 f080 827c 007c 8280 f080 8080 ]
442
+@sin-pcm [
462 443
 	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad
463 444
 	b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7
464 445
 	d9db dee0 e2e4 e6e7 e9eb ecee f0f1 f2f4
... ...
@@ -474,4 +455,5 @@ JMP2r
474 455
 	0102 0202 0202 0303 0405 0506 0708 090a
475 456
 	0b0c 0e0f 1012 1415 1719 1a1c 1e20 2225
476 457
 	2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d
477
-	5053 5659 5c5f 6265 686b 6e71 7477 7a7d
458
+	5053 5659 5c5f 6265 686b 6e71 7477 7a7d ]
459
+	&end