Browse code

Added channel selection to dev.audio

neauoire authored on 03/04/2021 16:52:56
Showing 2 changed files
... ...
@@ -28,7 +28,7 @@ else
28 28
 fi
29 29
 
30 30
 echo "Assembling.."
31
-./bin/assembler projects/software/noodle.usm bin/boot.rom
31
+./bin/assembler projects/examples/dev.audio.usm bin/boot.rom
32 32
 
33 33
 echo "Running.."
34 34
 if [ "${2}" = '--cli' ]; 
... ...
@@ -10,11 +10,13 @@
10 10
 ;pointer { x 2 y 2 }
11 11
 ;color { byte 1 }
12 12
 ;rect { x1 2 y1 2 x2 2 y2 2 }
13
-;frame { x1 2 y1 2 x2 2 y2 2 }
13
+;trkframe { x1 2 y1 2 x2 2 y2 2 }
14
+;chnframe { x1 2 y1 2 x2 2 y2 2 }
15
+;ctlframe { x1 2 y1 2 x2 2 y2 2 }
14 16
 ;label { x 2 y 2 color 1 addr 2 }
15 17
 ;knob { x 2 y 2 value 1 }
16 18
 ;head { pos 1 }
17
-;track { ch1 20 ch2 20 ch3 20 ch4 20 }
19
+;track { active 1 ch1 20 ch2 20 ch3 20 ch4 20 }
18 20
 
19 21
 ( devices )
20 22
 
... ...
@@ -38,21 +40,25 @@
38 40
 
39 41
 	( theme ) #e0fa =System.r #30fa =System.g #30fa =System.b
40 42
 
41
-	~Screen.width #0002 DIV2 #0080 SUB2 =frame.x1
42
-	~Screen.height #0002 DIV2 #0038 SUB2 =frame.y1
43
-	~Screen.width #0002 DIV2 #0080 ADD2 =frame.x2
44
-	~Screen.height #0002 DIV2 #0038 ADD2 =frame.y2
43
+	~Screen.width #0002 DIV2 #0080 SUB2 =trkframe.x1
44
+	~Screen.height #0002 DIV2 #0038 SUB2 #0010 SUB2 =trkframe.y1
45
+	~Screen.width #0002 DIV2 #0080 ADD2 =trkframe.x2
46
+	~Screen.height #0002 DIV2 #0038 ADD2 #0010 SUB2 =trkframe.y2
45 47
 
46
-	#0438 =Audio.ch1adsr
48
+	~trkframe.x1 =chnframe.x1 ~trkframe.y2 =chnframe.y1
49
+	~chnframe.x1 #0030 ADD2 =chnframe.x2 ~chnframe.y1 #0030 ADD2 =chnframe.y2
47 50
 
48
-	,draw-timeline JSR2
49
-	,draw-controls JSR2
51
+	~chnframe.x2 =ctlframe.x1 ~chnframe.y1 =ctlframe.y1
52
+	~trkframe.x2 =ctlframe.x2 ~chnframe.y2 =ctlframe.y2
50 53
 
54
+	#048c =Audio.ch1adsr
55
+	#159d =Audio.ch2adsr
56
+	#26ae =Audio.ch3adsr
57
+	#37bf =Audio.ch4adsr
51 58
 
52
-	~frame.x1 #0028 SUB2 ~frame.y2 #0010 ADD2 #06 ,ch1_txt ,draw-label JSR2
53
-	~frame.x1 #0028 SUB2 ~frame.y2 #0018 ADD2 #01 ,ch2_txt ,draw-label JSR2
54
-	~frame.x1 #0028 SUB2 ~frame.y2 #0020 ADD2 #01 ,ch3_txt ,draw-label JSR2
55
-	~frame.x1 #0028 SUB2 ~frame.y2 #0028 ADD2 #01 ,ch4_txt ,draw-label JSR2
59
+	,draw-timeline JSR2
60
+	,draw-controls JSR2
61
+	,draw-channels JSR2
56 62
 
57 63
 BRK
58 64
 
... ...
@@ -63,28 +69,36 @@ BRK
63 69
 
64 70
 	~head.pos #08 MOD #00 NEQ ^$skip JNZ
65 71
 		,bang JSR2
66
-		,draw-position JSR2
67 72
 	$skip
68 73
 
69 74
 	~Mouse.state #00 EQU ,$click-end JNZ2
70 75
 
71
-		~Mouse.x ~frame.x1 GTH2 ~Mouse.x ~frame.x2 LTH2 #0101 EQU2
72
-		~Mouse.y ~frame.y1 GTH2 ~Mouse.y ~frame.y2 LTH2 #0101 EQU2
76
+		~Mouse.x ~trkframe.x1 GTH2 ~Mouse.x ~trkframe.x2 LTH2 #0101 EQU2
77
+		~Mouse.y ~trkframe.y1 GTH2 ~Mouse.y ~trkframe.y2 LTH2 #0101 EQU2
73 78
 		#0101 NEQ2 ,$no-track-click JNZ2
74 79
 			,clear-notes JSR2
75 80
 			( get note )
76
-			#0e ~Mouse.y ~frame.y1 SUB2 SWP POP #08 DIV SUB
81
+			#0e ~Mouse.y ~trkframe.y1 SUB2 SWP POP #08 DIV SUB
77 82
 			~Mouse.state #10 NEQ ^$no-erase JNZ
78 83
 				POP #00
79 84
 			$no-erase
80 85
 			( get track )
81
-			,track.ch1 #00 ~Mouse.x ~frame.x1 SUB2 SWP POP #08 DIV ADD2
86
+			,get-track JSR2 #00 ~Mouse.x ~trkframe.x1 SUB2 SWP POP #08 DIV ADD2
82 87
 			POK2
83 88
 			( release ) #00 =Mouse.state
84 89
 			,draw-notes JSR2
85
-			,draw-bars JSR2
86 90
 		$no-track-click
87 91
 
92
+		~Mouse.x ~chnframe.x1 GTH2 ~Mouse.x ~chnframe.x2 LTH2 #0101 EQU2
93
+		~Mouse.y ~chnframe.y1 #0008 ADD2 GTH2 ~Mouse.y ~chnframe.y2 #0008 SUB2 LTH2 #0101 EQU2
94
+		#0101 NEQ2 ,$no-channel-click JNZ2
95
+			,clear-notes JSR2
96
+			~Mouse.y ~chnframe.y1 SUB2 SWP POP #08 DIV #01 SUB =track.active
97
+			( release ) #00 =Mouse.state
98
+			,draw-channels JSR2
99
+			,draw-notes JSR2
100
+		$no-channel-click
101
+
88 102
 	$click-end
89 103
 
90 104
 BRK
... ...
@@ -93,41 +107,62 @@ BRK
93 107
 
94 108
 BRK
95 109
 
110
+@get-track ( -- track-addr )
111
+
112
+	,track.ch1 #00 ~track.active #0020 MUL2 ADD2
113
+
114
+RTN
115
+
96 116
 @bang ( -- )
97 117
 		
98
-	( load )
99 118
 	,track.ch1 #00 ~head.pos #08 DIV ADD2 PEK2 
100 119
 	#01 SUB
101
-	DUP #ff NEQ ^$skip JNZ
102
-		POP RTN
103
-	$skip
120
+	DUP #ff NEQ ^$skip1 JNZ
121
+		POP ^$listen2 JMP
122
+	$skip1
104 123
 	#00 SWP ,notes ADD2 PEK2
105 124
 	#0c #03 MUL SUB =Audio.ch1pitch
106 125
 	#11 =Audio.ch1vol
107 126
 	
127
+	$listen2
128
+	,track.ch2 #00 ~head.pos #08 DIV ADD2 PEK2 
129
+	#01 SUB
130
+	DUP #ff NEQ ^$skip2 JNZ
131
+		POP ^$listen3 JMP
132
+	$skip2
133
+	#00 SWP ,notes ADD2 PEK2
134
+	#0c #03 MUL SUB =Audio.ch2pitch
135
+	#11 =Audio.ch2vol
136
+
137
+	$listen3
138
+	,track.ch3 #00 ~head.pos #08 DIV ADD2 PEK2 
139
+	#01 SUB
140
+	DUP #ff NEQ ^$skip3 JNZ
141
+		POP ^$end JMP
142
+	$skip3
143
+	#00 SWP ,notes ADD2 PEK2
144
+	#0c #03 MUL SUB =Audio.ch3pitch
145
+	#11 =Audio.ch3vol
146
+
147
+	$end
148
+
108 149
 RTN
109 150
 
110 151
 @move-head ( -- )
111 152
 
112 153
 	( clear )
113
-	~frame.y1 #0008 SUB2 =Sprite.y
114
-	~frame.x1 #00 ~head.pos ADD2 =Sprite.x
154
+	~trkframe.y1 #0008 SUB2 =Sprite.y
155
+	~trkframe.x1 #00 ~head.pos ADD2 =Sprite.x
115 156
 	,head_icn =Sprite.addr
116 157
 	#00 =Sprite.color
117 158
 	( incr ) ~head.pos #01 ADD =head.pos
118 159
 	( draw )
119
-	~frame.x1 #00 ~head.pos ADD2 =Sprite.x
160
+	~trkframe.x1 #00 ~head.pos ADD2 =Sprite.x
120 161
 	,head_icn =Sprite.addr
121
-	#01 =Sprite.color
122
-
123
-RTN
124 162
 
125
-@draw-position ( -- )
126
-	
127
-	~frame.x2 #0008 SUB2 =Sprite.x
128
-	~frame.y1 #0010 SUB2 =Sprite.y
129
-	,font_hex #00 ~head.pos #10 DIV #0008 MUL2 ADD2 =Sprite.addr
130
-	#01 =Sprite.color
163
+	#01 
164
+	( if note ) ,get-track JSR2 #00 ~head.pos #08 DIV ADD2 PEK2 #00 NEQ ADD
165
+	=Sprite.color
131 166
 
132 167
 RTN
133 168
 
... ...
@@ -135,10 +170,12 @@ RTN
135 170
 
136 171
 	#00 #20
137 172
 	$loop
138
-		( load ) OVR #00 SWP ,track.ch1 ADD2 PEK2
139
-		#00 SWP #0e SWP SUB #0008 MUL2 ~frame.y1 ADD2 =Sprite.y
140
-		OVR #00 SWP #0008 MUL2 ~frame.x1 ADD2 =Sprite.x
141
-		#00 =Sprite.color
173
+		( load ) OVR #00 SWP ,get-track JSR2 ADD2 PEK2
174
+		DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~trkframe.y1 ADD2 =Sprite.y
175
+		OVR #00 SWP #0008 MUL2 ~trkframe.x1 ADD2 =Sprite.x
176
+		STHr #00 EQU ^$skip JNZ
177
+			#00 =Sprite.color
178
+		$skip
142 179
 		( incr ) SWP #01 ADD SWP
143 180
 		DUP2 LTH ^$loop JNZ
144 181
 	POP2
... ...
@@ -149,41 +186,42 @@ RTN
149 186
 
150 187
 	#00 #20
151 188
 	$notes-loop
152
-		( load ) OVR #00 SWP ,track.ch1 ADD2 PEK2
153
-		DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~frame.y1 ADD2 =Sprite.y
154
-		OVR #00 SWP #0008 MUL2 ~frame.x1 ADD2 =Sprite.x
189
+		( load ) OVR #00 SWP ,get-track JSR2 ADD2 PEK2
190
+		DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~trkframe.y1 ADD2 =Sprite.y
191
+		OVR #00 SWP #0008 MUL2 ~trkframe.x1 ADD2 =Sprite.x
155 192
 		,note2_icn =Sprite.addr
156
-		#02 STHr #00 EQU SUB =Sprite.color
193
+		STHr #00 EQU ^$skip JNZ
194
+			#05 =Sprite.color
195
+		$skip
157 196
 		( incr ) SWP #01 ADD SWP
158 197
 		DUP2 LTH ^$notes-loop JNZ
159 198
 	POP2
199
+	,draw-bars JSR2
160 200
 
161 201
 RTN
162 202
 
163 203
 @draw-bars ( -- )
164
-	
165
-	( draw notes )
166 204
 
167
-	~frame.x1 ~frame.y1 ~frame.x2 ~frame.y2 #01 ,line-rect JSR2
205
+	~trkframe.x1 ~trkframe.y1 ~trkframe.x2 ~trkframe.y2 #01 ,line-rect JSR2
168 206
 
169 207
 	( grid )
170
-	~frame.y1 #0010 SUB2 =Sprite.y
208
+	~trkframe.y1 #0010 SUB2 =Sprite.y
171 209
 	,font_hex =Sprite.addr
172 210
 	#0000 #0100 
173 211
 	$loop 
174 212
 		OVR2 SWP POP #02 DIV #0f AND #00 NEQ ^$skip JNZ
175
-			OVR2 ~frame.x1 ADD2 =Sprite.x
213
+			OVR2 ~trkframe.x1 ADD2 =Sprite.x
176 214
 			#01 =Sprite.color
177 215
 			~Sprite.addr 8+ =Sprite.addr
178
-			OVR2 ~frame.x1 ADD2 ~frame.y1 #0001 ADD2 ~frame.y2 #01 ,line-vertical-dotted JSR2
216
+			OVR2 ~trkframe.x1 ADD2 ~trkframe.y1 #0001 ADD2 ~trkframe.y2 #01 ,line-vertical-dotted JSR2
179 217
 		$skip
180
-		OVR2 ~frame.x1 ADD2 ~frame.y1 ~frame.y2 #01 ,line-vertical-dotted JSR2
218
+		OVR2 ~trkframe.x1 ADD2 ~trkframe.y1 ~trkframe.y2 #01 ,line-vertical-dotted JSR2
181 219
 		SWP2 #0008 ADD2 SWP2
182 220
 		OVR2 OVR2 LTH2 ^$loop JNZ
183 221
 	POP2
184 222
 	POP2
185 223
 
186
-	~frame.x1 ~frame.x2 ~frame.y1 #0008 SUB2 #0040 ADD2 #01 ,line-horizontal-dotted JSR2
224
+	~trkframe.x1 ~trkframe.x2 ~trkframe.y1 #0008 SUB2 #0040 ADD2 #01 ,line-horizontal-dotted JSR2
187 225
 
188 226
 RTN
189 227
 
... ...
@@ -211,20 +249,20 @@ RTN
211 249
 
212 250
 @draw-octaves ( -- )
213 251
 	
214
-	~frame.x1 #0018 SUB2 ~frame.y1 ,draw-octave JSR2
215
-	~frame.x1 #0018 SUB2 ~frame.y1 #0038 ADD2 ,draw-octave JSR2
216
-	~frame.x1 #0028 SUB2 =Sprite.x
217
-	~frame.y1 =Sprite.y
252
+	~trkframe.x1 #0018 SUB2 ~trkframe.y1 ,draw-octave JSR2
253
+	~trkframe.x1 #0018 SUB2 ~trkframe.y1 #0038 ADD2 ,draw-octave JSR2
254
+	~trkframe.x1 #0028 SUB2 =Sprite.x
255
+	~trkframe.y1 =Sprite.y
218 256
 	,font_hex #0060 ADD2 =Sprite.addr
219 257
 	#01 =Sprite.color 
220
-	~frame.x1 #0030 SUB2 =Sprite.x
258
+	~trkframe.x1 #0030 SUB2 =Sprite.x
221 259
 	,font_hex #0020 ADD2 =Sprite.addr
222 260
 	#01 =Sprite.color 
223
-	~frame.x1 #0028 SUB2 =Sprite.x
224
-	~frame.y1 #0038 ADD2 =Sprite.y
261
+	~trkframe.x1 #0028 SUB2 =Sprite.x
262
+	~trkframe.y1 #0038 ADD2 =Sprite.y
225 263
 	,font_hex #0060 ADD2 =Sprite.addr
226 264
 	#01 =Sprite.color 
227
-	~frame.x1 #0030 SUB2 =Sprite.x
265
+	~trkframe.x1 #0030 SUB2 =Sprite.x
228 266
 	,font_hex #0018 ADD2 =Sprite.addr
229 267
 	#01 =Sprite.color 
230 268
 
... ...
@@ -274,17 +312,31 @@ RTN
274 312
 
275 313
 @draw-controls ( -- )
276 314
 	
277
-	~frame.x1 #0000 ADD2 ~frame.y2 #0010 ADD2 #01 ,env_txt ,draw-label JSR2
315
+	~ctlframe.x1 ~ctlframe.y1 ~ctlframe.x2 ~ctlframe.y2 #01 ,line-rect JSR2
316
+
317
+	~ctlframe.x1 #0008 ADD2 ~ctlframe.y1 #0008 ADD2 #01 ,env_txt ,draw-label JSR2
318
+
319
+	~ctlframe.x1 #0008 ADD2 ~ctlframe.y1 #0010 ADD2 #00 ,draw-knob JSR2
320
+	~ctlframe.x1 #0018 ADD2 ~ctlframe.y1 #0010 ADD2 #02 ,draw-knob JSR2
321
+	~ctlframe.x1 #0028 ADD2 ~ctlframe.y1 #0010 ADD2 #0a ,draw-knob JSR2
322
+	~ctlframe.x1 #0038 ADD2 ~ctlframe.y1 #0010 ADD2 #0c ,draw-knob JSR2
278 323
 
279
-	~frame.x1 #0000 ADD2 ~frame.y2 #0020 ADD2 #00 ,draw-knob JSR2
280
-	~frame.x1 #0010 ADD2 ~frame.y2 #0020 ADD2 #02 ,draw-knob JSR2
281
-	~frame.x1 #0020 ADD2 ~frame.y2 #0020 ADD2 #0a ,draw-knob JSR2
282
-	~frame.x1 #0030 ADD2 ~frame.y2 #0020 ADD2 #0c ,draw-knob JSR2
324
+	~ctlframe.x1 #0050 ADD2 ~ctlframe.y1 #0008 ADD2 #01 ,vol_txt ,draw-label JSR2
283 325
 
284
-	~frame.x1 #0050 ADD2 ~frame.y2 #0010 ADD2 #01 ,vol_txt ,draw-label JSR2
326
+	~ctlframe.x1 #0050 ADD2 ~ctlframe.y1 #0010 ADD2 #00 ,draw-knob JSR2
327
+	~ctlframe.x1 #0060 ADD2 ~ctlframe.y1 #0010 ADD2 #0f ,draw-knob JSR2
328
+
329
+RTN
330
+
331
+@draw-channels
332
+	
333
+	~chnframe.x1 ~chnframe.y1 ~chnframe.x2 ~chnframe.y2 #01 ,line-rect JSR2
285 334
 
286
-	~frame.x1 #0050 ADD2 ~frame.y2 #0020 ADD2 #00 ,draw-knob JSR2
287
-	~frame.x1 #0060 ADD2 ~frame.y2 #0020 ADD2 #0f ,draw-knob JSR2
335
+	~track.active =Console.byte
336
+	~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0008 ADD2 #01 ~track.active #00 EQU #07 MUL ADD ,ch1_txt ,draw-label JSR2
337
+	~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0010 ADD2 #01 ~track.active #01 EQU #07 MUL ADD ,ch2_txt ,draw-label JSR2
338
+	~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0018 ADD2 #01 ~track.active #02 EQU #07 MUL ADD ,ch3_txt ,draw-label JSR2
339
+	~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0020 ADD2 #01 ~track.active #03 EQU #07 MUL ADD ,ch4_txt ,draw-label JSR2
288 340
 
289 341
 RTN
290 342
 
... ...
@@ -368,10 +420,10 @@ RTN
368 420
 @note2_icn [ 0000 1c3e 3e3e 1c00 ]
369 421
 @head_icn [ 0018 1818 7e3c 1800 ]
370 422
 
371
-@ch1_txt [ SQR1 00 ]
372
-@ch2_txt [ SQR2 00 ]
373
-@ch3_txt [ TRI3 00 ]
374
-@ch4_txt [ WAV4 00 ]
423
+@ch1_txt [ CHN0 00 ]
424
+@ch2_txt [ CHN1 00 ]
425
+@ch3_txt [ CHN2 00 ]
426
+@ch4_txt [ CHN3 00 ]
375 427
 @env_txt [ Envelope 00 ]
376 428
 @vol_txt [ Volume 00 ]
377 429