Browse code

Optimized piano example

neauoire authored on 04/05/2021 17:57:57
Showing 4 changed files
... ...
@@ -34,7 +34,7 @@ else
34 34
 fi
35 35
 
36 36
 echo "Assembling.."
37
-./bin/assembler projects/demos/drum-rack.usm bin/boot.rom
37
+./bin/assembler projects/demos/piano.usm bin/boot.rom
38 38
 
39 39
 echo "Running.."
40 40
 if [ "${2}" = '--cli' ]; 
... ...
@@ -30,7 +30,6 @@
30 30
 |80 @Controller [ &vector $2 &button   $1 &key    $1 ]
31 31
 |90 @Mouse      [ &vector $2 &x        $2 &y      $2 &state $1 &chord $1 ]
32 32
 |a0 @File       [ &vector $2 &success  $2 &offset $2 &pad   $2 &name  $2 &length $2 &load $2 &save $2 ]
33
-|b0 @DateTime   [ &year   $2 &month    $1 &day    $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ]
34 33
 
35 34
 ( variables )
36 35
 
... ...
@@ -40,13 +39,12 @@
40 39
 @pointer  [ &x $2 &y $2 ]
41 40
 @piano    [ &last $1 &octave $1 ]
42 41
 @pads     [ &last $1 ]
42
+@frame    [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
43 43
 @pad-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
44 44
 @mix-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
45 45
 @oct-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
46 46
 @wav-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
47 47
 
48
-@frame       [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
49
-
50 48
 ( TODO: remove )
51 49
 @color $1
52 50
 @rect        [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
... ...
@@ -132,32 +130,21 @@
132 130
 	.wav-view/y2 PEK2 #0002 ++
133 131
 	#01 ;line-rect JSR2
134 132
 
135
-	( load samples )
136
-	#00 #10
137
-	&load-samples
138
-		( name ) OVR TOS #0019 ** ;pad-path ++ .File/name DEO2
139
-		( length ) OVR #04 / #10 * .Audio0/length + DEI2 .File/length DEO2
140
-		( load ) OVR TOS #0002 ** ;pad-addr ++ LDA2 .File/load DEO2
141
-		( incr ) SWP #01 + SWP
142
-		DUP2 < ,&load-samples JNZ
143
-	POP2
144
-
145 133
 	( initial draw )
146
-
147 134
 	#00 #10
148 135
 	&draw-pads
136
+		( load sample )
137
+		OVR TOS #0019 ** ;pad-path ++ .File/name DEO2
138
+		OVR #04 / #10 * .Audio0/length + DEI2 .File/length DEO2
139
+		OVR TOS #0002 ** ;pad-addr ++ LDA2 .File/load DEO2
140
+		( draw pad )
149 141
 		OVR #01 ;draw-pad JSR2
150
-		SWP #01 + SWP
142
+		( draw mixer )
143
+		OVR #04 / ;draw-mixer JSR2
144
+		( incr ) SWP #01 + SWP
151 145
 		DUP2 < ,&draw-pads JNZ
152 146
 	POP2
153 147
 
154
-	#00 #04
155
-	&draw-mixers
156
-		OVR ;draw-mixer JSR2
157
-		SWP #01 + SWP
158
-		DUP2 < ,&draw-mixers JNZ
159
-	POP2
160
-
161 148
 	;draw-octave JSR2
162 149
 
163 150
 BRK
... ...
@@ -576,23 +563,6 @@ RTN
576 563
 
577 564
 RTN
578 565
 
579
-@draw-short ( addr* color -- )
580
-
581
-	STH SWP 
582
-	DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
583
-	( draw ) DUPr STHr .Screen/color DEO
584
-	#0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
585
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
586
-	( draw ) DUPr STHr .Screen/color DEO
587
-	DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
588
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
589
-	( draw ) DUPr STHr .Screen/color DEO
590
-	#0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
591
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
592
-	( draw ) STHr .Screen/color DEO
593
-
594
-RTN
595
-
596 566
 @line-rect ( x1* y1* x2* y2* color -- )
597 567
 
598 568
 	( load ) .color POK DUP2 STH2 .rect/y2 POK2 .rect/x2 POK2 DUP2 STH2 .rect/y1 POK2 .rect/x1 POK2
... ...
@@ -1,14 +1,15 @@
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
+
3 8
 %RTN { JMP2r }
4
-%8+ { #0008 ADD2 }
5
-%8/ { #0008 DIV2 }
6
-%2/ { #0002 DIV2 }
7
-%++ { #0001 ADD2 }
8 9
 %TOS { #00 SWP }
9
-%MOD { DUP2 DIV MUL SUB }
10
-%LTS2  { #8000 ADD2 SWP2 #8000 ADD2 GTH2 }
11
-%GTS2  { #8000 ADD2 SWP2 #8000 ADD2 LTH2 }
10
+%MOD { DUP2 / * - }
11
+%LTS2  { #8000 ++ SWP2 #8000 ++ >> }
12
+%GTS2  { #8000 ++ SWP2 #8000 ++ << }
12 13
 
13 14
 %WAVEFORM { #1000 }
14 15
 
... ...
@@ -32,7 +33,6 @@
32 33
 @color       $1
33 34
 @pointer     [ &x $2 &y $2 ]
34 35
 @center      [ &x $2 &y $2 ]
35
-@knob        [ &x $2 &y $2 &value $1 ]
36 36
 @adsr-view   [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
37 37
 @wave-view   [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
38 38
 @octave-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
... ...
@@ -48,36 +48,36 @@
48 48
 
49 49
 	( vectors ) 
50 50
 	;on-control .Controller/vector DEO2
51
-	;on-mouse .Mouse/vector DEO2
52
-	;on-midi .Midi/vector DEO2
53
-	;on-frame .Screen/vector DEO2
51
+	;on-mouse   .Mouse/vector DEO2
52
+	;on-midi    .Midi/vector DEO2
53
+	;on-frame   .Screen/vector DEO2
54 54
 
55 55
 	( load waveform )
56 56
 	;sin-path .File/name DEO2 #0100 .File/length DEO2 WAVEFORM .File/load DEO2
57
-	;tri-path .File/name DEO2 #0100 .File/length DEO2 WAVEFORM #0100 ADD2 .File/load DEO2
58
-	;sqr-path .File/name DEO2 #0100 .File/length DEO2 WAVEFORM #0200 ADD2 .File/load DEO2
57
+	;tri-path .File/name DEO2 #0100 .File/length DEO2 WAVEFORM #0100 ++ .File/load DEO2
58
+	;sqr-path .File/name DEO2 #0100 .File/length DEO2 WAVEFORM #0200 ++ .File/load DEO2
59 59
 
60 60
 	( find center )
61
-	.Screen/width DEI2 2/ .center/x POK2
62
-	.Screen/height DEI2 2/ .center/y POK2
61
+	.Screen/width DEI2 #0002 // .center/x POK2
62
+	.Screen/height DEI2 #0002 // .center/y POK2
63 63
 
64 64
 	( place octave )
65
-	.center/x PEK2 #0080 SUB2 .octave-view/x1 POK2
66
-	.center/y PEK2 8+ .octave-view/y1 POK2
67
-	.octave-view/x1 PEK2 #0050 ADD2 .octave-view/x2 POK2
68
-	.octave-view/y1 PEK2 #0018 ADD2 .octave-view/y2 POK2
65
+	.center/x PEK2 #0080 -- .octave-view/x1 POK2
66
+	.center/y PEK2 #0008 ++ .octave-view/y1 POK2
67
+	.octave-view/x1 PEK2 #0050 ++ .octave-view/x2 POK2
68
+	.octave-view/y1 PEK2 #0018 ++ .octave-view/y2 POK2
69 69
 
70 70
 	( place adsr )
71
-	.center/x PEK2 #0020 SUB2 .adsr-view/x1 POK2
72
-	.center/y PEK2 8+ .adsr-view/y1 POK2
73
-	.adsr-view/x1 PEK2 #00a0 ADD2 .adsr-view/x2 POK2
74
-	.adsr-view/y1 PEK2 #0018 ADD2 .adsr-view/y2 POK2
71
+	.center/x PEK2 #0020 -- .adsr-view/x1 POK2
72
+	.center/y PEK2 #0008 ++ .adsr-view/y1 POK2
73
+	.adsr-view/x1 PEK2 #00a0 ++ .adsr-view/x2 POK2
74
+	.adsr-view/y1 PEK2 #0018 ++ .adsr-view/y2 POK2
75 75
 
76 76
 	( place waveform )
77
-	.center/x PEK2 #0080 SUB2 .wave-view/x1 POK2
78
-	.center/y PEK2 #0020 SUB2 .wave-view/y1 POK2
79
-	.wave-view/x1 PEK2 #0100 ADD2 .wave-view/x2 POK2
80
-	.wave-view/y1 PEK2 #0020 ADD2 .wave-view/y2 POK2
77
+	.center/x PEK2 #0080 -- .wave-view/x1 POK2
78
+	.center/y PEK2 #0020 -- .wave-view/y1 POK2
79
+	.wave-view/x1 PEK2 #0100 ++ .wave-view/x2 POK2
80
+	.wave-view/y1 PEK2 #0020 ++ .wave-view/y2 POK2
81 81
 
82 82
 	( default settings )
83 83
 	#ff .last-note POK
... ...
@@ -95,50 +95,50 @@ BRK
95 95
 
96 96
 @on-frame ( -> )
97 97
 	
98
-	.adsr-view/y2 PEK2 #0020 SUB2 .Screen/y DEO2
98
+	.adsr-view/y2 PEK2 #0020 -- .Screen/y DEO2
99 99
 
100 100
 	#00 #10
101 101
 	&loop
102
-		.adsr-view/x2 PEK2 #003a SUB2 .Screen/x DEO2
103
-		OVR #10 SWP SUB .Audio0/output DEI #0f AND LTH .Screen/color DEO
104
-		.adsr-view/x2 PEK2 #003a SUB2 #0002 ADD2 .Screen/x DEO2
105
-		OVR #10 SWP SUB .Audio0/output DEI #04 SFT LTH .Screen/color DEO
106
-		.Screen/y DEI2 #0002 ADD2 .Screen/y DEO2
107
-		( incr ) SWP #01 ADD SWP
108
-		DUP2 LTH ,&loop JNZ
102
+		.adsr-view/x2 PEK2 #003a -- .Screen/x DEO2
103
+		OVR #10 SWP - .Audio0/output DEI #0f AND < .Screen/color DEO
104
+		.adsr-view/x2 PEK2 #003a -- #0002 ++ .Screen/x DEO2
105
+		OVR #10 SWP - .Audio0/output DEI #04 SFT < .Screen/color DEO
106
+		.Screen/y DEI2 #0002 ++ .Screen/y DEO2
107
+		( incr ) SWP #01 + SWP
108
+		DUP2 < ,&loop JNZ
109 109
 	POP2
110 110
 
111 111
 BRK
112 112
 
113 113
 @on-midi ( -> )
114 114
 	
115
-	.Midi/note DEI #00 NEQ ,&note-on JNZ BRK &note-on
116
-	.Midi/note DEI .Audio0/pitch .Midi/channel DEI #04 MOD #10 MUL ADD DEO
115
+	.Midi/note DEI #00 ! #01 JNZ [ BRK ]
116
+	.Midi/note DEI .Audio0/pitch .Midi/channel DEI #04 MOD #10 * + DEO
117 117
 
118 118
 BRK
119 119
 
120 120
 @on-mouse ( -> )
121 121
 
122 122
 	;draw-cursor JSR2 
123
-	.Mouse/state DEI #00 NEQ ,&no-touch JNZ BRK &no-touch
123
+	.Mouse/state DEI #00 ! #01 JNZ [ BRK ]
124 124
 	( wave-view )
125
-	.Mouse/x DEI2 DUP2 .wave-view/x1 PEK2 GTH2 ROT ROT .wave-view/x2 PEK2 #0001 ADD2 LTH2 #0101 EQU2
126
-	.Mouse/y DEI2 DUP2 .wave-view/y1 PEK2 GTH2 ROT ROT .wave-view/y2 PEK2 LTH2 #0101 EQU2
127
-	#0101 EQU2 ;on-touch-wave-view JNZ2
125
+	.Mouse/x DEI2 DUP2 .wave-view/x1 PEK2 >> ROT ROT .wave-view/x2 PEK2 #0001 ++ << #0101 ==
126
+	.Mouse/y DEI2 DUP2 .wave-view/y1 PEK2 >> ROT ROT .wave-view/y2 PEK2 << #0101 ==
127
+	#0101 == ;on-touch-wave-view JNZ2
128 128
 	( adsr-view )
129
-	.Mouse/x DEI2 DUP2 .adsr-view/x1 PEK2 GTH2 ROT ROT .adsr-view/x2 PEK2 LTH2 #0101 EQU2
130
-	.Mouse/y DEI2 DUP2 .adsr-view/y1 PEK2 GTH2 ROT ROT .adsr-view/y2 PEK2 LTH2 #0101 EQU2
131
-	#0101 EQU2 ;on-touch-adsr-view JNZ2
129
+	.Mouse/x DEI2 DUP2 .adsr-view/x1 PEK2 >> ROT ROT .adsr-view/x2 PEK2 << #0101 ==
130
+	.Mouse/y DEI2 DUP2 .adsr-view/y1 PEK2 >> ROT ROT .adsr-view/y2 PEK2 << #0101 ==
131
+	#0101 == ;on-touch-adsr-view JNZ2
132 132
 	( octave-view )
133
-	.Mouse/x DEI2 DUP2 .octave-view/x1 PEK2 GTH2 ROT ROT .octave-view/x2 PEK2 LTH2 #0101 EQU2
134
-	.Mouse/y DEI2 DUP2 .octave-view/y1 PEK2 GTH2 ROT ROT .octave-view/y2 PEK2 LTH2 #0101 EQU2
135
-	#0101 EQU2 ;on-touch-octave-view JNZ2
133
+	.Mouse/x DEI2 DUP2 .octave-view/x1 PEK2 >> ROT ROT .octave-view/x2 PEK2 << #0101 ==
134
+	.Mouse/y DEI2 DUP2 .octave-view/y1 PEK2 >> ROT ROT .octave-view/y2 PEK2 << #0101 ==
135
+	#0101 == ;on-touch-octave-view JNZ2
136 136
 
137 137
 BRK
138 138
 
139 139
 @on-touch-wave-view ( -> )
140 140
 
141
-	.Mouse/x DEI2 .wave-view/x1 PEK2 SUB2 .Audio0/length DEO2
141
+	.Mouse/x DEI2 .wave-view/x1 PEK2 -- .Audio0/length DEO2
142 142
 	;draw-wave JSR2
143 143
 	;draw-cursor JSR2 
144 144
 
... ...
@@ -146,20 +146,20 @@ BRK
146 146
 
147 147
 @on-touch-octave-view ( -> )
148 148
 
149
-	.Mouse/x DEI2 .octave-view/x1 PEK2 SUB2 8/ SWP POP #09 NEQ ,&no-mod JNZ
150
-		.Mouse/y DEI2 .octave-view/y1 PEK2 SUB2 8/ SWP POP 
151
-		DUP #00 NEQ ,&no-incr JNZ
152
-			.octave PEK #01 ADD .octave POK &no-incr
153
-		DUP #02 NEQ ,&no-decr JNZ
154
-			.octave PEK #01 SUB .octave POK &no-decr
149
+	.Mouse/x DEI2 .octave-view/x1 PEK2 -- #0008 // SWP POP #09 ! ,&no-mod JNZ
150
+		.Mouse/y DEI2 .octave-view/y1 PEK2 -- #0008 // SWP POP 
151
+		DUP #00 ! ,&no-incr JNZ
152
+			.octave PEK #01 + .octave POK &no-incr
153
+		DUP #02 ! ,&no-decr JNZ
154
+			.octave PEK #01 - .octave POK &no-decr
155 155
 		POP
156 156
 		( release ) #00 .Mouse/state DEO
157 157
 		;draw-octave JSR2
158 158
 		BRK
159 159
 	&no-mod
160 160
 
161
-	.Mouse/x DEI2 .octave-view/x1 PEK2 SUB2 8/ SWP POP #06 GTH ,&no-key JNZ
162
-		.Mouse/x DEI2 .octave-view/x1 PEK2 SUB2 8/ DUP2 SWP POP .last-note POK ;notes ADD2 LDA ;play JSR2
161
+	.Mouse/x DEI2 .octave-view/x1 PEK2 -- #0008 // SWP POP #06 > ,&no-key JNZ
162
+		.Mouse/x DEI2 .octave-view/x1 PEK2 -- #0008 // DUP2 SWP POP .last-note POK ;notes ++ LDA ;play JSR2
163 163
 		( release ) #00 .Mouse/state DEO
164 164
 		;draw-octave JSR2
165 165
 	&no-key
... ...
@@ -168,30 +168,30 @@ BRK
168 168
 
169 169
 @on-touch-adsr-view ( -> )
170 170
 
171
-	.Mouse/x DEI2 .adsr-view/x1 PEK2 SUB2 8/ SWP POP #03 DIV
172
-	DUP #00 NEQ ,&no-a JNZ
171
+	.Mouse/x DEI2 .adsr-view/x1 PEK2 -- #0008 // SWP POP #03 /
172
+	DUP #00 ! ,&no-a JNZ
173 173
 		.Audio0/adsr DEI
174
-		#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD
174
+		#10 .Mouse/state DEI #10 = #e0 * + +
175 175
 		.Audio0/adsr DEO &no-a
176
-	DUP #01 NEQ ,&no-d JNZ
176
+	DUP #01 ! ,&no-d JNZ
177 177
 		.Audio0/adsr DEI
178
-		DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD
178
+		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
179 179
 		.Audio0/adsr DEO &no-d
180
-	DUP #02 NEQ ,&no-s JNZ
181
-		.Audio0/adsr #01 ADD DEI
182
-		#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD
183
-		.Audio0/adsr #01 ADD DEO &no-s
184
-	DUP #03 NEQ ,&no-r JNZ
185
-		.Audio0/adsr #01 ADD DEI
186
-		DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD
187
-		.Audio0/adsr #01 ADD DEO &no-r
188
-	DUP #05 NEQ ,&no-left JNZ
180
+	DUP #02 ! ,&no-s JNZ
181
+		.Audio0/adsr #01 + DEI
182
+		#10 .Mouse/state DEI #10 = #e0 * + +
183
+		.Audio0/adsr #01 + DEO &no-s
184
+	DUP #03 ! ,&no-r JNZ
185
+		.Audio0/adsr #01 + DEI
186
+		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
187
+		.Audio0/adsr #01 + DEO &no-r
188
+	DUP #05 ! ,&no-left JNZ
189 189
 		.Audio0/volume DEI 
190
-		#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD
190
+		#10 .Mouse/state DEI #10 = #e0 * + +
191 191
 		.Audio0/volume DEO &no-left
192
-	DUP #06 NEQ ,&no-right JNZ
192
+	DUP #06 ! ,&no-right JNZ
193 193
 		.Audio0/volume DEI
194
-		DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD
194
+		DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr +
195 195
 		.Audio0/volume DEO &no-right
196 196
 	POP
197 197
 
... ...
@@ -204,39 +204,39 @@ BRK
204 204
 @on-control ( -> )
205 205
 
206 206
 	( clear last cursor )
207
-	;clear .Screen/addr DEO2 
207
+	#fff8 .Screen/addr DEO2 
208 208
 	.pointer/x PEK2 .Screen/x DEO2 
209 209
 	.pointer/y PEK2 .Screen/y DEO2 
210 210
 	#30 .Screen/color DEO
211 211
 
212 212
 	.Controller/key DEI
213
-	DUP #61 NEQ ,&no-c JNZ
213
+	DUP #61 ! ,&no-c JNZ
214 214
 		#00 .last-note POK ;notes LDA ;play JSR2 &no-c
215
-	DUP #73 NEQ ,&no-d JNZ
216
-		#01 .last-note POK ;notes ++ LDA ;play JSR2 &no-d
217
-	DUP #64 NEQ ,&no-e JNZ
218
-		#02 .last-note POK ;notes #0002 ADD2 LDA ;play JSR2 &no-e
219
-	DUP #66 NEQ ,&no-f JNZ
220
-		#03 .last-note POK ;notes #0003 ADD2 LDA ;play JSR2 &no-f
221
-	DUP #67 NEQ ,&no-g JNZ
222
-		#04 .last-note POK ;notes #0004 ADD2 LDA ;play JSR2 &no-g
223
-	DUP #68 NEQ ,&no-a JNZ
224
-		#05 .last-note POK ;notes #0005 ADD2 LDA ;play JSR2 &no-a
225
-	DUP #6a NEQ ,&no-b JNZ
226
-		#06 .last-note POK ;notes #0006 ADD2 LDA ;play JSR2 &no-b
227
-	DUP #6b NEQ ,&no-c2 JNZ
228
-		#07 .last-note POK ;notes #0007 ADD2 LDA ;play JSR2 &no-c2
215
+	DUP #73 ! ,&no-d JNZ
216
+		#01 .last-note POK ;notes #0001 ++ LDA ;play JSR2 &no-d
217
+	DUP #64 ! ,&no-e JNZ
218
+		#02 .last-note POK ;notes #0002 ++ LDA ;play JSR2 &no-e
219
+	DUP #66 ! ,&no-f JNZ
220
+		#03 .last-note POK ;notes #0003 ++ LDA ;play JSR2 &no-f
221
+	DUP #67 ! ,&no-g JNZ
222
+		#04 .last-note POK ;notes #0004 ++ LDA ;play JSR2 &no-g
223
+	DUP #68 ! ,&no-a JNZ
224
+		#05 .last-note POK ;notes #0005 ++ LDA ;play JSR2 &no-a
225
+	DUP #6a ! ,&no-b JNZ
226
+		#06 .last-note POK ;notes #0006 ++ LDA ;play JSR2 &no-b
227
+	DUP #6b ! ,&no-c2 JNZ
228
+		#07 .last-note POK ;notes #0007 ++ LDA ;play JSR2 &no-c2
229 229
 	POP
230 230
 
231 231
 	.Controller/button DEI #f0 AND
232
-	DUP #04 SFT #01 AND #01 NEQ ,&no-up JNZ
233
-		( move ) .Audio0/addr DEI2 #0001 SUB2 .Audio0/addr DEO2 &no-up
234
-	DUP #05 SFT #01 AND #01 NEQ ,&no-down JNZ
235
-		( move ) .Audio0/addr DEI2 #0001 ADD2 .Audio0/addr DEO2 &no-down
236
-	DUP #06 SFT #01 AND #01 NEQ ,&no-left JNZ
237
-		( move ) .Audio0/addr DEI2 #0010 SUB2 .Audio0/addr DEO2 &no-left
238
-	DUP #07 SFT #01 AND #01 NEQ ,&no-right JNZ
239
-		( move ) .Audio0/addr DEI2 #0010 ADD2 .Audio0/addr DEO2 &no-right
232
+	DUP #04 SFT #01 AND #01 ! ,&no-up JNZ
233
+		( move ) .Audio0/addr DEI2 #0001 -- .Audio0/addr DEO2 &no-up
234
+	DUP #05 SFT #01 AND #01 ! ,&no-down JNZ
235
+		( move ) .Audio0/addr DEI2 #0001 ++ .Audio0/addr DEO2 &no-down
236
+	DUP #06 SFT #01 AND #01 ! ,&no-left JNZ
237
+		( move ) .Audio0/addr DEI2 #0010 -- .Audio0/addr DEO2 &no-left
238
+	DUP #07 SFT #01 AND #01 ! ,&no-right JNZ
239
+		( move ) .Audio0/addr DEI2 #0010 ++ .Audio0/addr DEO2 &no-right
240 240
 	POP
241 241
 
242 242
 	;draw-octave JSR2
... ...
@@ -246,14 +246,14 @@ BRK
246 246
 
247 247
 @play ( pitch -- )
248 248
 	
249
-	DUP .octave PEK #0c MUL ADD .Audio0/pitch DEO
249
+	DUP .octave PEK #0c * + .Audio0/pitch DEO
250 250
 
251 251
 RTN
252 252
 
253 253
 @draw-cursor ( -- )
254 254
 	
255 255
 	( clear last cursor )
256
-	;clear .Screen/addr DEO2 
256
+	#fff8 .Screen/addr DEO2 
257 257
 	.pointer/x PEK2 .Screen/x DEO2 
258 258
 	.pointer/y PEK2 .Screen/y DEO2 
259 259
 	#30 .Screen/color DEO
... ...
@@ -265,7 +265,7 @@ RTN
265 265
 	.pointer/x PEK2 .Screen/x DEO2 
266 266
 	.pointer/y PEK2 .Screen/y DEO2 
267 267
 	( colorize on state )
268
-	#31 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/color DEO
268
+	#31 [ .Mouse/state DEI #00 ! ] + .Screen/color DEO
269 269
 
270 270
 RTN
271 271
 
... ...
@@ -273,26 +273,26 @@ RTN
273 273
 	
274 274
 	.octave-view/x1 PEK2 .octave-view/y1 PEK2
275 275
 
276
-	OVR2 OVR2 ;keys-left-icns #21 .last-note PEK #00 EQU ADD ;draw-key JSR2
277
-	OVR2 8+ OVR2 ;keys-middle-icns #21 .last-note PEK #01 EQU ADD ;draw-key JSR2
278
-	OVR2 #0010 ADD2 OVR2 ;keys-right-icns #21 .last-note PEK #02 EQU ADD ;draw-key JSR2
279
-	OVR2 #0018 ADD2 OVR2 ;keys-left-icns #21 .last-note PEK #03 EQU ADD ;draw-key JSR2
280
-	OVR2 #0020 ADD2 OVR2 ;keys-middle-icns #21 .last-note PEK #04 EQU ADD ;draw-key JSR2
281
-	OVR2 #0028 ADD2 OVR2 ;keys-middle-icns #21 .last-note PEK #05 EQU ADD ;draw-key JSR2
282
-	SWP2 #0030 ADD2 SWP2 ;keys-right-icns #21 .last-note PEK #06 EQU ADD ;draw-key JSR2
276
+	OVR2 OVR2 ;keys-left-icns #21 .last-note PEK #00 = + ;draw-key JSR2
277
+	OVR2 #0008 ++ OVR2 ;keys-middle-icns #21 .last-note PEK #01 = + ;draw-key JSR2
278
+	OVR2 #0010 ++ OVR2 ;keys-right-icns #21 .last-note PEK #02 = + ;draw-key JSR2
279
+	OVR2 #0018 ++ OVR2 ;keys-left-icns #21 .last-note PEK #03 = + ;draw-key JSR2
280
+	OVR2 #0020 ++ OVR2 ;keys-middle-icns #21 .last-note PEK #04 = + ;draw-key JSR2
281
+	OVR2 #0028 ++ OVR2 ;keys-middle-icns #21 .last-note PEK #05 = + ;draw-key JSR2
282
+	SWP2 #0030 ++ SWP2 ;keys-right-icns #21 .last-note PEK #06 = + ;draw-key JSR2
283 283
 
284
-	.octave-view/x1 PEK2 #0048 ADD2 .Screen/x DEO2
284
+	.octave-view/x1 PEK2 #0048 ++ .Screen/x DEO2
285 285
 
286 286
 	;arrow-icns .Screen/addr DEO2
287 287
 	.octave-view/y1 PEK2 .Screen/y DEO2
288 288
 	#21 .Screen/color DEO
289 289
 
290
-	;arrow-icns 8+ .Screen/addr DEO2
291
-	.octave-view/y1 PEK2 #0010 ADD2 .Screen/y DEO2
290
+	;arrow-icns #0008 ++ .Screen/addr DEO2
291
+	.octave-view/y1 PEK2 #0010 ++ .Screen/y DEO2
292 292
 	#21 .Screen/color DEO
293 293
 
294
-	;font-hex .octave PEK #03 ADD #00 SWP #0008 MUL2 ADD2 .Screen/addr DEO2
295
-	.octave-view/y1 PEK2 8+ .Screen/y DEO2
294
+	;font-hex .octave PEK #03 + #00 SWP #0008 ** ++ .Screen/addr DEO2
295
+	.octave-view/y1 PEK2 #0008 ++ .Screen/y DEO2
296 296
 	#23 .Screen/color DEO
297 297
 
298 298
 RTN
... ...
@@ -302,38 +302,38 @@ RTN
302 302
 	STH
303 303
 	.Screen/addr DEO2 
304 304
 	SWP2 .Screen/x DEO2
305
-	DUP2 #0018 ADD2
305
+	DUP2 #0018 ++
306 306
 	&loop
307 307
 		( move ) OVR2 .Screen/y DEO2
308 308
 		( draw ) DUPr STHr .Screen/color DEO
309
-		( incr ) .Screen/addr DEI2 8+ .Screen/addr DEO2  
310
-		( incr ) SWP2 8+ SWP2
311
-		OVR2 OVR2 LTH2 ,&loop JNZ
309
+		( incr ) .Screen/addr DEI2 #0008 ++ .Screen/addr DEO2  
310
+		( incr ) SWP2 #0008 ++ SWP2
311
+		OVR2 OVR2 << ,&loop JNZ
312 312
 	POP2 POP2 
313 313
 	POPr
314 314
 
315 315
 RTN
316 316
 
317 317
 @draw-adsr ( -- )
318
-
318
+	
319
+	( adsr )
319 320
 	.adsr-view/x1 PEK2 .adsr-view/y1 PEK2
320 321
 		.Audio0/adsr DEI #04 SFT
321 322
 		;draw-knob JSR2
322
-	.adsr-view/x1 PEK2 #0018 ADD2 .adsr-view/y1 PEK2
323
+	.adsr-view/x1 PEK2 #0018 ++ .adsr-view/y1 PEK2
323 324
 		.Audio0/adsr DEI #0f AND
324 325
 		;draw-knob JSR2
325
-	.adsr-view/x1 PEK2 #0030 ADD2 .adsr-view/y1 PEK2
326
-		.Audio0/adsr #01 ADD DEI #04 SFT
326
+	.adsr-view/x1 PEK2 #0030 ++ .adsr-view/y1 PEK2
327
+		.Audio0/adsr #01 + DEI #04 SFT
327 328
 		;draw-knob JSR2
328
-	.adsr-view/x1 PEK2 #0048 ADD2 .adsr-view/y1 PEK2
329
-		.Audio0/adsr #01 ADD DEI #0f AND
329
+	.adsr-view/x1 PEK2 #0048 ++ .adsr-view/y1 PEK2
330
+		.Audio0/adsr #01 + DEI #0f AND
330 331
 		;draw-knob JSR2
331
-
332 332
 	( volume )
333
-	.adsr-view/x2 PEK2 #0028 SUB2 .adsr-view/y1 PEK2
333
+	.adsr-view/x2 PEK2 #0028 -- .adsr-view/y1 PEK2
334 334
 		.Audio0/volume DEI #04 SFT
335 335
 		;draw-knob JSR2
336
-	.adsr-view/x2 PEK2 #0010 SUB2 .adsr-view/y1 PEK2
336
+	.adsr-view/x2 PEK2 #0010 -- .adsr-view/y1 PEK2
337 337
 		.Audio0/volume DEI #0f AND
338 338
 		;draw-knob JSR2
339 339
 
... ...
@@ -341,9 +341,10 @@ RTN
341 341
 
342 342
 @draw-wave ( -- )
343 343
 	
344
+	( clear )
344 345
 	.wave-view/x1 PEK2
345 346
 	.wave-view/y1 PEK2
346
-	.wave-view/x2 PEK2 ++
347
+	.wave-view/x2 PEK2 #0001 ++
347 348
 	.wave-view/y2 PEK2
348 349
 	#00 ;fill-rect JSR2
349 350
 
... ...
@@ -356,23 +357,23 @@ RTN
356 357
 	&loop
357 358
 		( dotted line )
358 359
 		OVR #01 AND ,&no-dot JNZ 
359
-			.wave-view/y1 PEK2 #0010 ADD2 .Screen/y DEO2
360
+			.wave-view/y1 PEK2 #0010 ++ .Screen/y DEO2
360 361
 			#03 .Screen/color DEO
361 362
 		&no-dot
362
-		OVR TOS .Audio0/addr DEI2 ADD2 LDA 
363
-		#02 DIV
364
-		TOS #0004 DIV2 .wave-view/y1 PEK2 ADD2 .Screen/y DEO2
365
-		.Screen/x DEI2 ++ .Screen/x DEO2
366
-		( draw ) OVR .Audio0/length DEI2 SWP POP GTH #02 MUL #01 ADD .Screen/color DEO
367
-		( incr ) SWP #01 ADD SWP
368
-		DUP2 LTH ,&loop JNZ
363
+		OVR TOS .Audio0/addr DEI2 ++ LDA 
364
+		#02 /
365
+		TOS #0004 // .wave-view/y1 PEK2 ++ .Screen/y DEO2
366
+		.Screen/x DEI2 #0001 ++ .Screen/x DEO2
367
+		( draw ) OVR .Audio0/length DEI2 SWP POP > #02 * #01 + .Screen/color DEO
368
+		( incr ) SWP #01 + SWP
369
+		DUP2 < ,&loop JNZ
369 370
 	POP2
370 371
 
371 372
 	( range )
372 373
 	.wave-view/x1 PEK2 .Screen/x DEO2
373
-	.wave-view/y1 PEK2 #0010 SUB2 .Screen/y DEO2
374
+	.wave-view/y1 PEK2 #0010 -- .Screen/y DEO2
374 375
 	.Audio0/addr DEI2 #22 ;draw-short JSR2
375
-	.wave-view/x2 PEK2 #0020 SUB2 .Screen/x DEO2
376
+	.wave-view/x2 PEK2 #0020 -- .Screen/x DEO2
376 377
 	.Audio0/length DEI2 #22 ;draw-short JSR2
377 378
 
378 379
 RTN
... ...
@@ -380,13 +381,13 @@ RTN
380 381
 @draw-wave-length ( color -- )
381 382
 	
382 383
 	STH
383
-	.wave-view/x1 PEK2 .Audio0/length DEI2 ADD2 .Screen/x DEO2
384
-	.wave-view/y1 PEK2 DUP2 #0020 ADD2
384
+	.wave-view/x1 PEK2 .Audio0/length DEI2 ++ .Screen/x DEO2
385
+	.wave-view/y1 PEK2 DUP2 #0020 ++
385 386
 	&loop
386 387
 		OVR2 .Screen/y DEO2
387 388
 		( draw ) DUPr STHr .Screen/color DEO
388
-		( incr ) SWP2 ++ SWP2
389
-		OVR2 OVR2 LTH2 ,&loop JNZ
389
+		( incr ) SWP2 #0001 ++ SWP2
390
+		OVR2 OVR2 << ,&loop JNZ
390 391
 	POP2 POP2
391 392
 	POPr
392 393
 
... ...
@@ -394,37 +395,42 @@ RTN
394 395
 
395 396
 @draw-knob ( x* y* value -- )
396 397
 
397
-	( load ) .knob/value POK .knob/y POK2 .knob/x POK2
398
-
399
-	.knob/x PEK2 .Screen/x DEO2
400
-	.knob/y PEK2 .Screen/y DEO2 ;knob_icns .Screen/addr DEO2 #21 .Screen/color DEO
401
-	.knob/x PEK2 8+ .Screen/x DEO2 ;knob_icns 8+ .Screen/addr DEO2 #21 .Screen/color DEO
402
-	.knob/y PEK2 8+ .Screen/y DEO2 ;knob_icns #0018 ADD2 .Screen/addr DEO2 #21 .Screen/color DEO
403
-	.knob/x PEK2 .Screen/x DEO2 ;knob_icns #0010 ADD2 .Screen/addr DEO2 #21 .Screen/color DEO
404
-	.knob/x PEK2 #00 #00 .knob/value PEK ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2
405
-	.knob/y PEK2 #00 #00 .knob/value PEK ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2
406
-	;knob_icns #0020 ADD2 .Screen/addr DEO2
407
-	#25 .Screen/color DEO
408
-	.knob/x PEK2 #0004 ADD2 .Screen/x DEO2
409
-	.knob/y PEK2 #0010 ADD2 .Screen/y DEO2
410
-	;font-hex #00 .knob/value PEK #08 MUL ADD2 .Screen/addr DEO2
411
-	#21 .Screen/color DEO
398
+	( load ) STH .Screen/y DEO2  .Screen/x DEO2
399
+	;knob-icns .Screen/addr DEO2 
400
+	( draw ) #21 .Screen/color DEO
401
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2 
402
+	;knob-icns #0008 ++ .Screen/addr DEO2 
403
+	( draw ) #21 .Screen/color DEO
404
+	.Screen/y DEI2 #0008 ++ .Screen/y DEO2 
405
+	;knob-icns #0018 ++ .Screen/addr DEO2 
406
+	( draw ) #21 .Screen/color DEO
407
+	.Screen/x DEI2 #0008 -- .Screen/x DEO2 
408
+	;knob-icns #0010 ++ .Screen/addr DEO2 
409
+	( draw ) #21 .Screen/color DEO
410
+	.Screen/x DEI2 #0004 ++ .Screen/x DEO2
411
+	.Screen/y DEI2 #0008 ++ .Screen/y DEO2
412
+	;font-hex #00 DUPr STHr #08 * ++ .Screen/addr DEO2
413
+	( draw ) #21 .Screen/color DEO
414
+	.Screen/x DEI2 #0004 -- #00 #00 DUPr STHr ;knob-offsetx ++ LDA ++ .Screen/x DEO2
415
+	.Screen/y DEI2 #0010 -- #00 #00 STHr ;knob-offsety ++ LDA ++ .Screen/y DEO2
416
+	;knob-icns #0020 ++ .Screen/addr DEO2
417
+	( draw ) #25 .Screen/color DEO
412 418
 
413 419
 RTN
414 420
 
415 421
 @draw-short ( short* color -- )
416 422
 
417 423
 	STH SWP 
418
-	DUP #04 SFT TOS #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2
424
+	DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
419 425
 	( draw ) DUPr STHr .Screen/color DEO
420
-	#0f AND TOS #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2
421
-	.Screen/x DEI2 8+ .Screen/x DEO2
426
+	#0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
427
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
422 428
 	( draw ) DUPr STHr .Screen/color DEO
423
-	DUP #04 SFT TOS #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2
424
-	.Screen/x DEI2 8+ .Screen/x DEO2
429
+	DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
430
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
425 431
 	( draw ) DUPr STHr .Screen/color DEO
426
-	#0f AND TOS #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2
427
-	.Screen/x DEI2 8+ .Screen/x DEO2
432
+	#0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
433
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
428 434
 	( draw ) STHr .Screen/color DEO
429 435
 
430 436
 RTN
... ...
@@ -439,18 +445,15 @@ RTN
439 445
 		&hor
440 446
 			( save ) OVR2 .Screen/x DEO2
441 447
 			( draw ) .color PEK .Screen/color DEO
442
-			( incr ) SWP2 ++ SWP2
448
+			( incr ) SWP2 #0001 ++ SWP2
443 449
 			OVR2 OVR2 LTS2 ,&hor JNZ
444 450
 		POP2 POP2 STH2r STH2r
445
-		( incr ) SWP2 ++ SWP2
451
+		( incr ) SWP2 #0001 ++ SWP2
446 452
 		OVR2 OVR2 LTS2 ,&ver JNZ
447 453
 	POP2 POP2 POP2 POP2
448 454
 
449 455
 RTN
450 456
 
451
-@clear  [ 
452
-	0000 0000 0000 0000 ]
453
-
454 457
 @cursor [ 
455 458
 	80c0 e0f0 f8e0 1000 ]
456 459
 
... ...
@@ -477,7 +480,7 @@ RTN
477 480
 	1f1f 1f1f 1f1f 3f7f
478 481
 	7f7f 7f7f 7f7f 3e00 ]
479 482
 
480
-@knob_icns [
483
+@knob-icns [
481 484
 	0003 0c10 2020 4040
482 485
 	00c0 3008 0404 0202
483 486
 	4040 2020 100c 0300
... ...
@@ -356,7 +356,7 @@ cleanup(char *filename)
356 356
 	for(i = 0; i < p.llen; ++i)
357 357
 		if(p.labels[i].name[0] >= 'A' && p.labels[i].name[0] <= 'Z')
358 358
 			continue; /* Ignore capitalized labels(devices) */
359
-		else if(!p.labels[i].refs && scin(p.labels[i].name, '/') > 0)
359
+		else if(!p.labels[i].refs)
360 360
 			printf("--- Unused label: %s\n", p.labels[i].name);
361 361
 	for(i = 0; i < p.mlen; ++i)
362 362
 		if(!p.macros[i].refs)