Browse code

Progress on drumrack

neauoire authored on 02/05/2021 17:40:24
Showing 2 changed files
... ...
@@ -40,9 +40,13 @@
40 40
 @color $1
41 41
 @center      [ &x $2 &y $2 ]
42 42
 @pointer     [ &x $2 &y $2 ]
43
-@rect [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
44
-@frame [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
45
-@label [ &x $2 &y $2 &color $1 &addr $2 ]
43
+@knob        [ &x $2 &y $2 &value $1 ]
44
+@rect        [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
45
+@frame       [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
46
+@label       [ &x $2 &y $2 &color $1 &addr $2 ]
47
+@pos         [ &x $2 &y $2 ] 
48
+@padview     [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
49
+@mixview     [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
46 50
 
47 51
 @state [ ( addr length )
48 52
 	$4 $4 $4 $4
... ...
@@ -79,12 +83,46 @@
79 83
 	.Screen/height DEI2 2/ .center/y POK2
80 84
 
81 85
 	( place views )
82
-	.center/x PEK2 PAD-WIDTH 2* SUB2 .frame/x1 POK2
83
-	.center/y PEK2 PAD-HEIGHT 2/ SUB2 .frame/y1 POK2
84
-	.center/x PEK2 PAD-WIDTH 2* ADD2 .frame/x2 POK2
86
+	.center/x PEK2 PAD-WIDTH #0003 MUL2 SUB2 #0010 SUB2 .frame/x1 POK2
87
+	.center/y PEK2 PAD-HEIGHT 2* SUB2 .frame/y1 POK2
88
+	.center/x PEK2 PAD-WIDTH #0003 MUL2 ADD2 #0010 ADD2 .frame/x2 POK2
85 89
 	.center/y PEK2 PAD-HEIGHT 2* ADD2 .frame/y2 POK2
86 90
 
91
+	( place padview )
92
+	.frame/x1 PEK2 .padview/x1 POK2
93
+	.frame/y1 PEK2 .padview/y1 POK2
94
+	.padview/x1 PEK2 #0004 PAD-WIDTH MUL2 ADD2 .padview/x2 POK2
95
+	.padview/y1 PEK2 #0004 PAD-HEIGHT MUL2 ADD2 .padview/y2 POK2
96
+
97
+	( place mixview )
98
+	.padview/x2 PEK2 .mixview/x1 POK2
99
+	.padview/y1 PEK2 .mixview/y1 POK2
100
+	.mixview/x1 PEK2 #0080 ADD2 .mixview/x2 POK2
101
+	.padview/y2 PEK2 .mixview/y2 POK2
102
+
87 103
 	;draw-pads JSR2
104
+	;draw-mixers JSR2
105
+
106
+	.frame/x1 PEK2 #0004 SUB2 
107
+	.frame/y1 PEK2 #0004 SUB2 
108
+	.frame/x2 PEK2 #0002 ADD2
109
+	.frame/y2 PEK2 #0002 ADD2
110
+	#03
111
+	;line-rect JSR2
112
+
113
+	.padview/x1 PEK2 #0002 SUB2
114
+	.padview/y1 PEK2 #0002 SUB2
115
+	.padview/x2 PEK2
116
+	.padview/y2 PEK2
117
+	#02
118
+	;line-rect JSR2
119
+
120
+	.mixview/x1 PEK2 #0002 ADD2
121
+	.mixview/y1 PEK2 #0002 SUB2
122
+	.mixview/x2 PEK2
123
+	.mixview/y2 PEK2
124
+	#02
125
+	;line-rect JSR2
88 126
 
89 127
 BRK
90 128
 
... ...
@@ -119,14 +157,9 @@ BRK
119 157
 
120 158
 	.Mouse/state DEI #00 NEQ ,&on-touch JNZ BRK &on-touch
121 159
 
122
-	( x ) .Mouse/x DEI2 .center/x PEK2 PAD-WIDTH 2* SUB2 SUB2 PAD-WIDTH DIV2 SWP POP
123
-	( y ) .Mouse/y DEI2 .center/y PEK2 PAD-HEIGHT 2* SUB2 SUB2 PAD-HEIGHT DIV2 SWP POP #04 MUL ADD
124
-	DUP #b0 SWP
125
-	;play-pad JSR2
126
-
127
-	( select ) DUP .selection POK ;draw-editor JSR2
128
-
129
-	( release ) #00 .Mouse/state DEO
160
+	.Mouse/x DEI2 DUP2 .padview/x1 PEK2 GTH2 ROT ROT .padview/x2 PEK2 #0001 ADD2 LTH2 #0101 EQU2
161
+	.Mouse/y DEI2 DUP2 .padview/y1 PEK2 GTH2 ROT ROT .padview/y2 PEK2 LTH2 #0101 EQU2
162
+	#0101 EQU2 ;on-touch-pad JNZ2
130 163
 
131 164
 BRK
132 165
 
... ...
@@ -170,6 +203,20 @@ BRK
170 203
 
171 204
 BRK
172 205
 
206
+@on-touch-pad ( -> )
207
+	
208
+
209
+	( x ) .Mouse/x DEI2 .padview/x1 PEK2 SUB2 PAD-WIDTH DIV2 SWP POP
210
+	( y ) .Mouse/y DEI2 .padview/y1 PEK2 SUB2 PAD-HEIGHT DIV2 SWP POP #04 MUL ADD
211
+	DUP #b0 SWP
212
+	;play-pad JSR2
213
+
214
+	( select ) DUP .selection POK ;draw-editor JSR2
215
+
216
+	( release ) #00 .Mouse/state DEO
217
+
218
+BRK
219
+
173 220
 @load-samples ( -- )
174 221
 
175 222
 	#00 #10
... ...
@@ -232,18 +279,54 @@ RTN
232 279
 
233 280
 	;cursor .Screen/addr DEO2
234 281
 
235
-	( y ) DUP TOS #0002 SUB2 PAD-HEIGHT MUL2 .center/y PEK2 ADD2 
236
-	( x ) .center/x PEK2 PAD-WIDTH 2* ADD2 
237
-	SWP2 
238
-	.Screen/y DEO2
239
-	.Screen/x DEO2
240
-
241
-	#23 .Screen/color DEO
282
+	DUP #00 SWP PAD-HEIGHT MUL2 .mixview/y1 PEK2 ADD2 STH2
283
+
284
+	( adsr )
285
+	.mixview/x1 PEK2 #0008 ADD2 DUP2r STH2r
286
+		.Audio0/adsr DEI #04 SFT
287
+		;draw-knob JSR2
288
+	.mixview/x1 PEK2 #0018 ADD2 DUP2r STH2r
289
+		.Audio0/adsr DEI #0f AND
290
+		;draw-knob JSR2
291
+	.mixview/x1 PEK2 #0028 ADD2 DUP2r STH2r
292
+		.Audio0/adsr #01 ADD DEI #04 SFT
293
+		;draw-knob JSR2
294
+	.mixview/x1 PEK2 #0038 ADD2 DUP2r STH2r
295
+		.Audio0/adsr #01 ADD DEI #0f AND
296
+		;draw-knob JSR2
297
+
298
+	( volume )
299
+	.mixview/x1 PEK2 #0058 ADD2 DUP2r STH2r
300
+		.Audio0/volume DEI #04 SFT
301
+		;draw-knob JSR2
302
+	.mixview/x1 PEK2 #0068 ADD2 DUP2r STH2r
303
+		.Audio0/volume DEI #0f AND
304
+		;draw-knob JSR2
242 305
 
243 306
 	POP
307
+	POP2r
244 308
 
245 309
 	( once/repeat interface )
246
-	( draw ADSR knobs )
310
+
311
+RTN
312
+
313
+@draw-knob ( x* y* value -- )
314
+
315
+	( load ) .knob/value POK .knob/y POK2 .knob/x POK2
316
+
317
+	.knob/x PEK2 .Screen/x DEO2
318
+	.knob/y PEK2 .Screen/y DEO2 ;knob_icns .Screen/addr DEO2 #21 .Screen/color DEO
319
+	.knob/x PEK2 8+ .Screen/x DEO2 ;knob_icns 8+ .Screen/addr DEO2 #21 .Screen/color DEO
320
+	.knob/y PEK2 8+ .Screen/y DEO2 ;knob_icns #0018 ADD2 .Screen/addr DEO2 #21 .Screen/color DEO
321
+	.knob/x PEK2 .Screen/x DEO2 ;knob_icns #0010 ADD2 .Screen/addr DEO2 #21 .Screen/color DEO
322
+	.knob/x PEK2 #00 #00 .knob/value PEK ;knob-offsetx ADD2 GET ADD2 .Screen/x DEO2
323
+	.knob/y PEK2 #00 #00 .knob/value PEK ;knob-offsety ADD2 GET ADD2 .Screen/y DEO2
324
+	;knob_icns #0020 ADD2 .Screen/addr DEO2
325
+	#25 .Screen/color DEO
326
+	.knob/x PEK2 #0004 ADD2 .Screen/x DEO2
327
+	.knob/y PEK2 #0010 ADD2 .Screen/y DEO2
328
+	;font-hex #00 .knob/value PEK #08 MUL ADD2 .Screen/addr DEO2
329
+	#21 .Screen/color DEO
247 330
 
248 331
 RTN
249 332
 
... ...
@@ -258,14 +341,25 @@ RTN
258 341
 
259 342
 RTN
260 343
 
344
+@draw-mixers ( -- )
345
+	
346
+	#00 #04
347
+	&loop
348
+		OVR ;draw-mixer JSR2
349
+		SWP #01 ADD SWP
350
+		DUP2 LTH ,&loop JNZ
351
+	POP2
352
+
353
+RTN
354
+
261 355
 @draw-pad ( pad color -- )
262 356
 	
263 357
 	STH STH
264 358
 
265 359
 	DUPr STHr 
266 360
 
267
-	DUP #04 DIV SWP #04 MOD TOS PAD-WIDTH MUL2 ( center ) .center/x PEK2 ADD2 PAD-WIDTH #0002 MUL2 SUB2
268
-	ROT TOS PAD-HEIGHT MUL2 ( center ) .center/y PEK2 ADD2 PAD-HEIGHT #0002 MUL2 SUB2
361
+	DUP #04 DIV SWP #04 MOD TOS PAD-WIDTH MUL2 ( center ) .padview/x1 PEK2 ADD2 
362
+	ROT TOS PAD-HEIGHT MUL2 ( center ) .padview/y1 PEK2 ADD2 
269 363
 
270 364
 	( draw outline )
271 365
 	OVR2 OVR2 
... ...
@@ -385,6 +479,21 @@ RTN
385 479
 	"projects/sounds/bdr1.ss8 $1 "projects/sounds/kck1.ss8 $1
386 480
 	"projects/sounds/kck2.ss8 $1 "projects/sounds/bdr2.ss8 $1 ]
387 481
 
482
+@knob_icns [
483
+	0003 0c10 2020 4040
484
+	00c0 3008 0404 0202
485
+	4040 2020 100c 0300
486
+	0202 0404 0830 c000
487
+	0000 183c 3c18 0000 ]
488
+
489
+@knob-offsetx [
490
+	01 00 00 00 00 01 02 03
491
+	05 06 07 08 08 08 08 07 ]
492
+
493
+@knob-offsety [
494
+	07 06 05 03 02 01 00 00
495
+	00 00 01 02 03 05 06 07 ]
496
+
388 497
 @clear  [ 
389 498
 	0000 0000 0000 0000 ]
390 499
 
391 500
deleted file mode 100644
... ...
@@ -1,455 +0,0 @@
1
-( enfer )
2
-
3
-%RTN { JMP2r }
4
-%8+ { #0008 ADD2 }
5
-%8/ { #0008 DIV2 }
6
-%2/ { #0002 DIV2 }
7
-%2* { #0002 MUL2 }
8
-%++ { #0001 ADD2 }
9
-%TOS { #00 SWP }
10
-%MOD { DUP2 DIV MUL SUB }
11
-%LTS2  { #8000 ADD2 SWP2 #8000 ADD2 GTH2 }
12
-%GTS2  { #8000 ADD2 SWP2 #8000 ADD2 LTH2 }
13
-
14
-%VIEW-WIDTH { #0110 }
15
-%VIEW-HEIGHT { #0038 }
16
-%PRINT-BYTE { .Console/byte DEO #0d .Console/char DEO }
17
-%PRINT-SHORT { .Console/short DEO2 #0d .Console/char DEO }
18
-
19
-( devices )
20
-
21
-|00 @System     [ &vector $2 &pad      $6 &r      $2 &g     $2 &b      $2 ]
22
-|10 @Console    [ &pad    $8 &char     $1 &byte   $1 &short $2 &string $2 ]
23
-|20 @Screen     [ &vector $2 &width    $2 &height $2 &pad   $2 &x      $2 &y      $2 &addr  $2 &color  $1 ]
24
-|30 @Audio0     [ &vector $2 &position $2 &output $1 &pad   $3 &adsr   $2 &length $2 &addr  $2 &volume $1 &pitch $1 ]
25
-|40 @Audio1     [ &vector $2 &position $2 &output $1 &pad   $3 &adsr   $2 &length $2 &addr  $2 &volume $1 &pitch $1 ]
26
-|50 @Audio2     [ &vector $2 &position $2 &output $1 &pad   $3 &adsr   $2 &length $2 &addr  $2 &volume $1 &pitch $1 ]
27
-|60 @Audio3     [ &vector $2 &position $2 &output $1 &pad   $3 &adsr   $2 &length $2 &addr  $2 &volume $1 &pitch $1 ]
28
-|70 @Midi       [ &vector $2 &channel  $1 &note   $1 &velocity $1 ]
29
-|80 @Controller [ &vector $2 &button   $1 &key    $1 ]
30
-|90 @Mouse      [ &vector $2 &x        $2 &y      $2 &state $1 &chord $1 ]
31
-|a0 @File       [ &vector $2 &success  $2 &offset $2 &pad   $2 &name  $2 &length $2 &load $2 &save $2 ]
32
-|b0 @DateTime   [ &year   $2 &month    $1 &day    $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ]
33
-
34
-( variables )
35
-
36
-|0000
37
-
38
-@addr $2
39
-@color $1
40
-@center      [ &x $2 &y $2 ]
41
-@pointer     [ &x $2 &y $2 ]
42
-@rect        [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
43
-@knob        [ &x $2 &y $2 &value $1 ]
44
-
45
-@ch0-view    [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &device $1 ]
46
-@ch1-view    [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &device $1 ]
47
-@ch2-view    [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &device $1 ]
48
-@ch3-view    [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &device $1 ]
49
-
50
-( program )
51
-
52
-|0100 ( -> )
53
-
54
-	( theme ) 
55
-	#20fe .System/r DEO2 
56
-	#c0f3 .System/g DEO2 
57
-	#a0f2 .System/b DEO2
58
-
59
-	( vectors )
60
-	;on-mouse .Mouse/vector DEO2
61
-	;on-frame .Screen/vector DEO2
62
-	;on-midi .Midi/vector DEO2
63
-
64
-	( find center )
65
-	.Screen/width DEI2 2/ .center/x POK2
66
-	.Screen/height DEI2 2/ .center/y POK2
67
-
68
-	( place views )
69
-	.center/x PEK2 VIEW-WIDTH 2/ SUB2 .ch0-view/x1 POK2
70
-	.center/y PEK2 VIEW-HEIGHT 2* SUB2 .ch0-view/y1 POK2
71
-	.ch0-view/x1 PEK2 VIEW-WIDTH ADD2 .ch0-view/x2 POK2
72
-	.ch0-view/y1 PEK2 VIEW-HEIGHT ADD2 .ch0-view/y2 POK2
73
-
74
-	.ch0-view/x1 PEK2 .ch1-view/x1 POK2
75
-	.ch0-view/y1 PEK2 VIEW-HEIGHT ADD2 .ch1-view/y1 POK2
76
-	.ch0-view/x2 PEK2 .ch1-view/x2 POK2
77
-	.ch0-view/y2 PEK2 VIEW-HEIGHT ADD2 .ch1-view/y2 POK2
78
-
79
-	.ch1-view/x1 PEK2 .ch2-view/x1 POK2
80
-	.ch1-view/y1 PEK2 VIEW-HEIGHT ADD2 .ch2-view/y1 POK2
81
-	.ch1-view/x2 PEK2 .ch2-view/x2 POK2
82
-	.ch1-view/y2 PEK2 VIEW-HEIGHT ADD2 .ch2-view/y2 POK2
83
-
84
-	.ch2-view/x1 PEK2 .ch3-view/x1 POK2
85
-	.ch2-view/y1 PEK2 VIEW-HEIGHT ADD2 .ch3-view/y1 POK2
86
-	.ch2-view/x2 PEK2 .ch3-view/x2 POK2
87
-	.ch2-view/y2 PEK2 VIEW-HEIGHT ADD2 .ch3-view/y2 POK2
88
-
89
-	.Audio0 .ch0-view/device POK
90
-	.Audio1 .ch1-view/device POK
91
-	.Audio2 .ch2-view/device POK
92
-	.Audio3 .ch3-view/device POK
93
-
94
-	#88 .Audio0/volume DEO
95
-	#88 .Audio1/volume DEO
96
-	#88 .Audio2/volume DEO
97
-	#88 .Audio3/volume DEO
98
-
99
-	( defaults )
100
-	;wave0 .Audio0/addr DEO2
101
-	;wave1 .Audio1/addr DEO2
102
-	;wave2 .Audio2/addr DEO2
103
-	;wave3 .Audio3/addr DEO2
104
-
105
-	#00a8 .Audio0/length DEO2
106
-	#00a8 .Audio1/length DEO2
107
-	#00a8 .Audio2/length DEO2
108
-	#00a8 .Audio3/length DEO2
109
-
110
-	#012c .Audio0/adsr DEO2
111
-	#012c .Audio1/adsr DEO2
112
-	#0113 .Audio2/adsr DEO2
113
-	#112c .Audio3/adsr DEO2
114
-
115
-	;redraw JSR2
116
-
117
-BRK
118
-
119
-@on-frame ( -> )
120
-	
121
-	.ch0-view ;draw-meter JSR2
122
-	.ch1-view ;draw-meter JSR2
123
-	.ch2-view ;draw-meter JSR2
124
-	.ch3-view ;draw-meter JSR2
125
-
126
-BRK
127
-
128
-@on-midi ( -> )
129
-		
130
-	.Midi/note DEI #00 NEQ ,&note-on JNZ BRK &note-on
131
-	.Midi/note DEI .Audio0/pitch .Midi/channel DEI #04 MOD #10 MUL ADD DEO
132
-
133
-BRK
134
-
135
-@on-mouse ( -> )
136
-
137
-	;draw-cursor JSR2 
138
-
139
-	.Mouse/state DEI #00 NEQ ,&on-touch JNZ BRK &on-touch
140
-
141
-	( get channel id )
142
-	.Mouse/y DEI2 .ch0-view/y1 PEK2 SUB2 VIEW-HEIGHT DIV2 SWP POP
143
-	#10 MUL 
144
-	.Audio0/pitch ADD
145
-	#3c SWP DEO
146
-
147
-	( release ) #00 .Mouse/state DEO
148
-
149
-BRK
150
-
151
-@redraw ( -- )
152
-	
153
-	.ch0-view ;draw-view JSR2
154
-	.ch1-view ;draw-view JSR2
155
-	.ch2-view ;draw-view JSR2
156
-	.ch3-view ;draw-view JSR2
157
-
158
-RTN
159
-
160
-@draw-meter ( view* -- )
161
-		
162
-	STH
163
-	( y1 ) DUPr STHr #02 ADD PEK2 .Screen/y DEO2
164
-
165
-	( x1 ) DUPr STHr PEK2
166
-		 #0010 ADD2 .Screen/x DEO2
167
-	( device ) DUPr STHr #08 ADD PEK ( get addr ) #02 ADD DEI #04 SFT TOS #0008 MUL2 ;meter ADD2 .Screen/addr DEO2
168
-		#21 .Screen/color DEO
169
-	( x1 ) DUPr STHr PEK2
170
-		 #0018 ADD2 .Screen/x DEO2
171
-	( device ) DUPr STHr #08 ADD PEK ( get addr ) #02 ADD DEI #04 AND TOS #0008 MUL2 ;meter ADD2 .Screen/addr DEO2
172
-		#21 .Screen/color DEO
173
-
174
-	POPr
175
-
176
-RTN
177
-
178
-@draw-view ( view* -- )
179
-
180
-	STH
181
-
182
-	( device id )
183
-	( x1 ) DUPr STHr PEK2 .Screen/x DEO2
184
-	( y1 ) DUPr STHr #02 ADD PEK2 .Screen/y DEO2
185
-	( device ) DUPr STHr #08 ADD PEK #23 ;draw-byte JSR2
186
-
187
-	( x1 ) DUPr STHr PEK2 #0028 ADD2 .Screen/x DEO2
188
-	;repeat .Screen/addr DEO2
189
-	#23 .Screen/color DEO
190
-
191
-	( addr )
192
-	( addr controls )
193
-	( x1 ) DUPr STHr PEK2 #0060 ADD2 .Screen/x DEO2
194
-	( device ) DUPr STHr #08 ADD PEK ( get addr ) #0c ADD DEI #21 ;draw-byte JSR2
195
-	( x1 ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
196
-	( device ) DUPr STHr #08 ADD PEK ( get addr ) #0d ADD DEI #21 ;draw-byte JSR2
197
-
198
-	( waveform )
199
-	( volume knob )
200
-	( x1 ) DUPr STHr PEK2
201
-	( y1 ) DUPr STHr #02 ADD PEK2 #0010 ADD2
202
-	( device ) DUPr STHr #08 ADD PEK ( get length ) #0e ADD DEI #04 SFT
203
-	;draw-knob JSR2
204
-
205
-	( adsr knobs )
206
-	( x1 ) DUPr STHr PEK2 #0018 ADD2 
207
-	( y1 ) DUPr STHr #02 ADD PEK2 #0010 ADD2
208
-	( device ) DUPr STHr #08 ADD PEK ( get length ) #08 ADD DEI #04 SFT
209
-	;draw-knob JSR2
210
-	( x1 ) DUPr STHr PEK2 #0028 ADD2 
211
-	( y1 ) DUPr STHr #02 ADD PEK2 #0010 ADD2
212
-	( device ) DUPr STHr #08 ADD PEK ( get length ) #08 ADD DEI #0f AND
213
-	;draw-knob JSR2
214
-	( x1 ) DUPr STHr PEK2 #0038 ADD2 
215
-	( y1 ) DUPr STHr #02 ADD PEK2 #0010 ADD2
216
-	( device ) DUPr STHr #08 ADD PEK ( get length ) #09 ADD DEI #04 SFT
217
-	;draw-knob JSR2
218
-	( x1 ) DUPr STHr PEK2 #0048 ADD2 
219
-	( y1 ) DUPr STHr #02 ADD PEK2 #0010 ADD2
220
-	( device ) DUPr STHr #08 ADD PEK ( get length ) #09 ADD DEI #0f AND
221
-	;draw-knob JSR2
222
-
223
-	( meter )
224
-	( test button )
225
-
226
-	( outline )
227
-	( x1 ) DUPr STHr PEK2 #0006 SUB2
228
-	( y1 ) DUPr STHr #02 ADD PEK2 #0006 SUB2
229
-	( x2 ) DUPr STHr #04 ADD PEK2
230
-	( y2 ) DUPr STHr #06 ADD PEK2 #000a SUB2
231
-	#02 ;line-rect JSR2
232
-
233
-	( x1 ) DUPr STHr PEK2 #0060 ADD2 .Screen/x DEO2
234
-
235
-	( waveform )
236
-	#00 #a8
237
-	&loop
238
-		( dotted line )
239
-		OVR #01 AND ,&no-dot JNZ 
240
-			( y1 ) DUPr STHr #02 ADD PEK2 [ ] #0018 ADD2 .Screen/y DEO2
241
-			#03 .Screen/color DEO
242
-		&no-dot
243
-		OVR TOS ( device ) DUPr STHr #08 ADD PEK ( get addr ) #0c ADD DEI2 ADD2 GET 
244
-		#02 DIV #40 ADD DUP #07 SFT #80 MUL SUB 
245
-		TOS #0004 DIV2 ( y1 ) DUPr STHr #02 ADD PEK2 [ ] ADD2 #0008 ADD2 .Screen/y DEO2
246
-		.Screen/x DEI2 ++ .Screen/x DEO2
247
-		( draw ) #01 .Screen/color DEO
248
-		( incr ) SWP #01 ADD SWP
249
-		DUP2 LTH ,&loop JNZ
250
-	POP2
251
-	( loop button )
252
-	POPr
253
-
254
-RTN
255
-
256
-@draw-knob ( x* y* value -- )
257
-
258
-	( load ) .knob/value POK .knob/y POK2 .knob/x POK2
259
-
260
-	.knob/x PEK2 .Screen/x DEO2
261
-	.knob/y PEK2 .Screen/y DEO2 ;knob_icns .Screen/addr DEO2 #21 .Screen/color DEO
262
-	.knob/x PEK2 8+ .Screen/x DEO2 ;knob_icns 8+ .Screen/addr DEO2 #21 .Screen/color DEO
263
-	.knob/y PEK2 8+ .Screen/y DEO2 ;knob_icns #0018 ADD2 .Screen/addr DEO2 #21 .Screen/color DEO
264
-	.knob/x PEK2 .Screen/x DEO2 ;knob_icns #0010 ADD2 .Screen/addr DEO2 #21 .Screen/color DEO
265
-	.knob/x PEK2 #00 #00 .knob/value PEK ;knob-offsetx ADD2 GET ADD2 .Screen/x DEO2
266
-	.knob/y PEK2 #00 #00 .knob/value PEK ;knob-offsety ADD2 GET ADD2 .Screen/y DEO2
267
-	;knob_icns #0020 ADD2 .Screen/addr DEO2
268
-	#25 .Screen/color DEO
269
-	.knob/x PEK2 #0004 ADD2 .Screen/x DEO2
270
-	.knob/y PEK2 #0010 ADD2 .Screen/y DEO2
271
-	;font-hex #00 .knob/value PEK #08 MUL ADD2 .Screen/addr DEO2
272
-	#21 .Screen/color DEO
273
-
274
-RTN
275
-
276
-@draw-cursor ( -- )
277
-	
278
-	( clear last cursor )
279
-	;clear .Screen/addr DEO2 
280
-	.pointer/x PEK2 .Screen/x DEO2 
281
-	.pointer/y PEK2 .Screen/y DEO2 
282
-	#30 .Screen/color DEO
283
-	( record pointer positions )
284
-	.Mouse/x DEI2 .pointer/x POK2 
285
-	.Mouse/y DEI2 .pointer/y POK2
286
-	( draw new cursor )
287
-	;cursor .Screen/addr DEO2 
288
-	.pointer/x PEK2 .Screen/x DEO2 
289
-	.pointer/y PEK2 .Screen/y DEO2 
290
-	( colorize on state )
291
-	#31 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/color DEO
292
-
293
-RTN
294
-
295
-@draw-short ( short color -- )
296
-
297
-	.color POK
298
-	.addr POK2
299
-	;font-hex #00 ;addr GET #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2
300
-	( draw ) DUPr STHr .Screen/color DEO
301
-	.Screen/x DEI2 8+ .Screen/x DEO2
302
-	;font-hex #00 ;addr GET #0f AND #08 MUL ADD2 .Screen/addr DEO2
303
-	( draw ) DUPr STHr .Screen/color DEO
304
-	.Screen/x DEI2 8+ .Screen/x DEO2
305
-	;font-hex #00 ;addr ++ GET #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2
306
-	( draw ) DUPr STHr .Screen/color DEO
307
-	.Screen/x DEI2 8+ .Screen/x DEO2
308
-	;font-hex STHr ;addr ++ GET #0f AND #08 MUL ADD2 .Screen/addr DEO2
309
-	( draw ) #22 .Screen/color DEO
310
-
311
-RTN
312
-
313
-@draw-byte ( byte color -- )
314
-	
315
-	.color POK STH
316
-	;font-hex #00 DUPr STHr #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2
317
-	( draw ) .color PEK .Screen/color DEO
318
-	.Screen/x DEI2 8+ .Screen/x DEO2
319
-	;font-hex #00 STHr #0f AND #08 MUL ADD2 .Screen/addr DEO2
320
-	( draw ) .color PEK .Screen/color DEO
321
-
322
-RTN
323
-
324
-@line-rect ( x1 y1 x2 y2 color -- )
325
-
326
-	( load ) .color POK DUP2 STH2 .rect/y2 POK2 .rect/x2 POK2 DUP2 STH2 .rect/y1 POK2 .rect/x1 POK2
327
-	STH2r STH2r
328
-	&ver
329
-		( save ) OVR2 .Screen/y DEO2
330
-		( draw ) .rect/x1 PEK2 .Screen/x DEO2 .color PEK DUP .Screen/color DEO
331
-		( draw ) .rect/x2 PEK2 .Screen/x DEO2 .Screen/color DEO
332
-		( incr ) SWP2 ++ SWP2
333
-		OVR2 OVR2 LTS2 ,&ver JNZ
334
-	POP2 POP2
335
-	.rect/x1 PEK2 .rect/x2 PEK2
336
-	&hor
337
-		( save ) OVR2 .Screen/x DEO2
338
-		( draw ) .rect/y1 PEK2 .Screen/y DEO2 .color PEK DUP .Screen/color DEO
339
-		( draw ) .rect/y2 PEK2 .Screen/y DEO2 .Screen/color DEO
340
-		( incr ) SWP2 ++ SWP2
341
-		OVR2 OVR2 ++ LTS2 ,&hor JNZ
342
-	POP2 POP2
343
-
344
-RTN
345
-
346
-@repeat [
347
-	0038 4482 9282 4438 ]
348
-
349
-@clear  [ 
350
-	0000 0000 0000 0000 ]
351
-
352
-@cursor [ 
353
-	80c0 e0f0 f8e0 1000 ]
354
-
355
-@knob_icns [
356
-	0003 0c10 2020 4040
357
-	00c0 3008 0404 0202
358
-	4040 2020 100c 0300
359
-	0202 0404 0830 c000
360
-	0000 183c 3c18 0000 ]
361
-
362
-@knob-offsetx [
363
-	01 00 00 00 00 01 02 03
364
-	05 06 07 08 08 08 08 07 ]
365
-
366
-@knob-offsety [
367
-	07 06 05 03 02 01 00 00
368
-	00 00 01 02 03 05 06 07 ]
369
-
370
-@meter [
371
-	0000 0000 0000 0000
372
-	0000 0000 0000 0070 
373
-	0000 0000 0000 007e
374
-	0000 0000 0000 707e
375
-	0000 0000 0070 7e7e
376
-	0000 0000 007e 7e7e
377
-	0000 0000 707e 7e7e
378
-	0000 0000 7e7e 7e7e
379
-	0000 0070 7e7e 7e7e
380
-	0000 007e 7e7e 7e7e
381
-	0000 707e 7e7e 7e7e
382
-	0000 7e7e 7e7e 7e7e
383
-	0070 7e7e 7e7e 7e7e
384
-	007e 7e7e 7e7e 7e7e
385
-	707e 7e7e 7e7e 7e7e
386
-	7e7e 7e7e 7e7e 7e7e ]
387
-
388
-@font-hex ( 0-F )
389
-[
390
-	007c 8282 8282 827c 0030 1010 1010 1010
391
-	007c 8202 7c80 80fe 007c 8202 1c02 827c
392
-	000c 1424 4484 fe04 00fe 8080 7c02 827c
393
-	007c 8280 fc82 827c 007c 8202 1e02 0202
394
-	007c 8282 7c82 827c 007c 8282 7e02 827c
395
-	007c 8202 7e82 827e 00fc 8282 fc82 82fc
396
-	007c 8280 8080 827c 00fc 8282 8282 82fc
397
-	007c 8280 f080 827c 007c 8280 f080 8080 ]
398
-
399
-@wave0 ( 0-F )
400
-[
401
-	0004 090e 1217 1c20 2529 2e32 363b 3f43 
402
-	474b 4e52 5659 5c60 6365 686b 6d70 7274 
403
-	7677 797a 7b7c 7d7e 7e7e 7e7e 7e7e 7d7c
404
-	7b7a 7978 7674 7270 6e6b 6966 6360 5d5a 
405
-	5753 4f4c 4844 403c 3833 2f2a 2621 1d18 
406
-	140f 0a05 01fc f7f2 eee9 e4e0 dbd7 d2ce
407
-	cac5 c1bd b9b5 b1ae aaa7 a3a0 9d9a 9795 
408
-	9290 8e8c 8a88 8785 8483 8282 8181 8181 
409
-	8181 8282 8384 8687 898a 8c8e 9193 9598
410
-	9b9e a1a4 a8ab afb2 b6ba bec2 c6cb cfd3 
411
-	d8dc e1e6 eaef f4f8 ]
412
-
413
-@wave1 ( 0-F )
414
-[
415
-	0002 0406 080a 0c0e 1012 1416 181a 1c1e 
416
-	2022 2426 282a 2c2e 3032 3436 383a 3c3e 
417
-	4041 4345 4749 4b4d 4f51 5355 5759 5b5d
418
-	5f61 6365 6769 6b6d 6f71 7375 7779 7b7d 
419
-	7f7d 7b79 7775 7371 6f6d 6b69 6765 6361 
420
-	5f5d 5b59 5755 5351 4f4d 4b49 4745 4341
421
-	403e 3c3a 3836 3432 302e 2c2a 2826 2422 
422
-	201e 1c1a 1816 1412 100e 0c0a 0806 0402 
423
-	00fe fcfa f8f6 f4f2 f0ee ecea e8e6 e4e2
424
-	e0de dcda d8d6 d4d2 d0ce ccca c8c6 c4c2 
425
-	c1bf bdbb b9b7 b5b3 ]
426
-
427
-@wave2 ( 0-F )
428
-[
429
-	4f4d 4b49 4745 4341 c1bf bdbb b9b7 b5b3
430
-	403e 3c3a 3836 3432 302e 2c2a 2826 2422 
431
-	201e 1c1a 1816 1412 100e 0c0a 0806 0402 
432
-	00fe fcfa f8f6 f4f2 f0ee ecea e8e6 e4e2
433
-	e0de dcda d8d6 d4d2 d0ce ccca c8c6 c4c2 
434
-	7b7a 7978 7674 7270 6e6b 6966 6360 5d5a 
435
-	5753 4f4c 4844 403c 3833 2f2a 2621 1d18 
436
-	140f 0a05 01fc f7f2 eee9 e4e0 dbd7 d2ce
437
-	cac5 c1bd b9b5 b1ae aaa7 a3a0 9d9a 9795 
438
-	9290 8e8c 8a88 8785 8483 8282 8181 8181 
439
-	8181 8282 8384 8687 898a 8c8e 9193 9598
440
-	9b9e a1a4 a8ab afb2 
441
-	 ]
442
-
443
-@wave3 ( 0-F )
444
-[
445
-	0004 090e 1217 1c20 2529 2e32 363b 3f43 
446
-	5753 4f4c 4844 403c 3833 2f2a 2621 1d18 
447
-	140f 0a05 01fc f7f2 eee9 e4e0 dbd7 d2ce
448
-	cac5 c1bd b9b5 b1ae aaa7 a3a0 9d9a 9795 
449
-	5753 4f4c 4844 403c 3833 2f2a 2621 1d18 
450
-	140f 0a05 01fc f7f2 eee9 e4e0 dbd7 d2ce
451
-	cac5 c1bd b9b5 b1ae aaa7 a3a0 9d9a 9795 
452
-	9290 8e8c 8a88 8785 8483 8282 8181 8181 
453
-	8181 8282 8384 8687 898a 8c8e 9193 9598
454
-	9b9e a1a4 a8ab afb2 b6ba bec2 c6cb cfd3 
455
-	d8dc e1e6 eaef f4f8 ]
456 0
\ No newline at end of file