... | ... |
@@ -4,6 +4,7 @@ |
4 | 4 |
%8+ { #0008 ADD2 } %8- { #0008 SUB2 } |
5 | 5 |
%++ { #0001 ADD2 } |
6 | 6 |
%MOD { DUP2 DIV MUL SUB } |
7 |
+%TRACK { ,track.ch1 #00 ~track.active #0020 MUL2 ADD2 } |
|
7 | 8 |
|
8 | 9 |
( variables ) |
9 | 10 |
|
... | ... |
@@ -17,7 +18,6 @@ |
17 | 18 |
;knob { x 2 y 2 value 1 } |
18 | 19 |
;head { pos 1 } |
19 | 20 |
;track { active 1 ch1 20 ch2 20 ch3 20 ch4 20 } |
20 |
-;pt { x 1 y 1 } |
|
21 | 21 |
|
22 | 22 |
( devices ) |
23 | 23 |
|
... | ... |
@@ -41,10 +41,10 @@ |
41 | 41 |
|
42 | 42 |
( theme ) #e0fa =System.r #30fa =System.g #30fa =System.b |
43 | 43 |
|
44 |
- ~Screen.width #0002 DIV2 #0080 SUB2 =trkframe.x1 |
|
45 |
- ~Screen.height #0002 DIV2 #0038 SUB2 #0010 SUB2 =trkframe.y1 |
|
46 |
- ~Screen.width #0002 DIV2 #0080 ADD2 =trkframe.x2 |
|
47 |
- ~Screen.height #0002 DIV2 #0038 ADD2 #0010 SUB2 =trkframe.y2 |
|
44 |
+ ~Screen.width #0002 DIV2 DUP2 #0080 SUB2 =trkframe.x1 |
|
45 |
+ #0080 ADD2 =trkframe.x2 |
|
46 |
+ ~Screen.height #0002 DIV2 DUP2 #0038 SUB2 #0010 SUB2 =trkframe.y1 |
|
47 |
+ #0038 ADD2 #0010 SUB2 =trkframe.y2 |
|
48 | 48 |
|
49 | 49 |
~trkframe.x1 =chnframe.x1 ~trkframe.y2 =chnframe.y1 |
50 | 50 |
~chnframe.x1 #0030 ADD2 =chnframe.x2 ~chnframe.y1 #0030 ADD2 =chnframe.y2 |
... | ... |
@@ -52,6 +52,7 @@ |
52 | 52 |
~chnframe.x2 =ctlframe.x1 ~chnframe.y1 =ctlframe.y1 |
53 | 53 |
~trkframe.x2 =ctlframe.x2 ~chnframe.y2 =ctlframe.y2 |
54 | 54 |
|
55 |
+ ( default envs ) |
|
55 | 56 |
#048c =Audio.ch1adsr |
56 | 57 |
#159d =Audio.ch2adsr |
57 | 58 |
#26ae =Audio.ch3adsr |
... | ... |
@@ -94,12 +95,9 @@ BRK |
94 | 95 |
,clear-notes JSR2 |
95 | 96 |
( get note ) |
96 | 97 |
#0e ~Mouse.y ~trkframe.y1 SUB2 SWP POP #08 DIV SUB |
97 |
- ~Mouse.state #10 NEQ ^$no-erase JNZ |
|
98 |
- POP #00 |
|
99 |
- $no-erase |
|
100 |
- ( get track ) |
|
101 |
- ,get-track JSR2 #00 ~Mouse.x ~trkframe.x1 SUB2 SWP POP #08 DIV ADD2 |
|
102 |
- POK2 |
|
98 |
+ ~Mouse.state #10 NEQ ^$no-erase JNZ POP #00 $no-erase |
|
99 |
+ ( edit note ) |
|
100 |
+ TRACK #00 ~Mouse.x ~trkframe.x1 SUB2 SWP POP #08 DIV ADD2 POK2 |
|
103 | 101 |
( release ) #00 =Mouse.state |
104 | 102 |
,draw-notes JSR2 |
105 | 103 |
|
... | ... |
@@ -108,7 +106,7 @@ BRK |
108 | 106 |
@touch-chn ( -- ) |
109 | 107 |
|
110 | 108 |
,clear-notes JSR2 |
111 |
- ~Mouse.y ~chnframe.y1 SUB2 SWP POP #08 DIV #01 SUB =track.active |
|
109 |
+ ( save ) ~Mouse.y ~chnframe.y1 SUB2 SWP POP #08 DIV #01 SUB =track.active |
|
112 | 110 |
( release ) #00 =Mouse.state |
113 | 111 |
,draw-channels JSR2 |
114 | 112 |
,draw-notes JSR2 |
... | ... |
@@ -118,43 +116,30 @@ BRK |
118 | 116 |
|
119 | 117 |
@touch-ctl ( -- ) |
120 | 118 |
|
121 |
- ~Mouse.x ~ctlframe.x1 SUB2 #0008 SUB2 #0008 DIV2 SWP POP #02 DIV =pt.x |
|
122 |
- ~Mouse.y ~ctlframe.y1 SUB2 #0008 SUB2 #0008 DIV2 SWP POP #02 DIV =pt.y |
|
123 |
- |
|
124 |
- ~pt.x #00 NEQ ^$no-a JNZ |
|
119 |
+ ~Mouse.x ~ctlframe.x1 SUB2 #0008 SUB2 #0008 DIV2 SWP POP #02 DIV |
|
120 |
+ DUP #00 NEQ ^$no-a JNZ |
|
125 | 121 |
,Audio #00 ~track.active #02 MUL ADD2 PEK2 |
126 |
- #10 ADD ,Audio #00 ~track.active #02 MUL ADD2 POK2 |
|
127 |
- $no-a |
|
122 |
+ #10 ADD ,Audio #00 ~track.active #02 MUL ADD2 POK2 $no-a |
|
128 | 123 |
|
129 |
- ~pt.x #01 NEQ ^$no-d JNZ |
|
124 |
+ DUP #01 NEQ ^$no-d JNZ |
|
130 | 125 |
,Audio #00 ~track.active #02 MUL ADD2 PEK2 |
131 | 126 |
DUP #f0 AND STH #01 ADD #0f AND STHr ADD |
132 |
- ,Audio #00 ~track.active #02 MUL ADD2 POK2 |
|
133 |
- $no-d |
|
127 |
+ ,Audio #00 ~track.active #02 MUL ADD2 POK2 $no-d |
|
134 | 128 |
|
135 |
- ~pt.x #02 NEQ ^$no-s JNZ |
|
129 |
+ DUP #02 NEQ ^$no-s JNZ |
|
136 | 130 |
,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 PEK2 |
137 |
- #10 ADD ,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 POK2 |
|
138 |
- $no-s |
|
131 |
+ #10 ADD ,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 POK2 $no-s |
|
139 | 132 |
|
140 |
- ~pt.x #03 NEQ ^$no-r JNZ |
|
133 |
+ DUP #03 NEQ ^$no-r JNZ |
|
141 | 134 |
,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 PEK2 |
142 | 135 |
DUP #f0 AND STH #01 ADD #0f AND STHr ADD |
143 |
- ,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 POK2 |
|
144 |
- $no-r |
|
145 |
- |
|
136 |
+ ,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 POK2 $no-r |
|
137 |
+ POP |
|
146 | 138 |
( release ) #00 =Mouse.state |
147 |
- |
|
148 | 139 |
,draw-controls JSR2 |
149 | 140 |
|
150 | 141 |
BRK |
151 | 142 |
|
152 |
-@get-track ( -- track-addr ) |
|
153 |
- |
|
154 |
- ,track.ch1 #00 ~track.active #0020 MUL2 ADD2 |
|
155 |
- |
|
156 |
-RTN |
|
157 |
- |
|
158 | 143 |
@bang ( -- ) |
159 | 144 |
|
160 | 145 |
,track.ch1 #00 ~head.pos #08 DIV ADD2 PEK2 |
... | ... |
@@ -198,13 +183,9 @@ RTN |
198 | 183 |
,head_icn =Sprite.addr |
199 | 184 |
#00 =Sprite.color |
200 | 185 |
( incr ) ~head.pos #01 ADD =head.pos |
201 |
- ( draw ) |
|
202 | 186 |
~trkframe.x1 #00 ~head.pos ADD2 =Sprite.x |
203 |
- ,head_icn =Sprite.addr |
|
204 |
- |
|
205 |
- #01 |
|
206 |
- ( if note ) ,get-track JSR2 #00 ~head.pos #08 DIV ADD2 PEK2 #00 NEQ ADD |
|
207 |
- =Sprite.color |
|
187 |
+ ,head_icn =Sprite.addr |
|
188 |
+ #01 ( if note ) TRACK #00 ~head.pos #08 DIV ADD2 PEK2 #00 NEQ ADD =Sprite.color |
|
208 | 189 |
|
209 | 190 |
RTN |
210 | 191 |
|
... | ... |
@@ -212,7 +193,7 @@ RTN |
212 | 193 |
|
213 | 194 |
#00 #20 |
214 | 195 |
$loop |
215 |
- ( load ) OVR #00 SWP ,get-track JSR2 ADD2 PEK2 |
|
196 |
+ ( load ) OVR #00 SWP TRACK ADD2 PEK2 |
|
216 | 197 |
DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~trkframe.y1 ADD2 =Sprite.y |
217 | 198 |
OVR #00 SWP #0008 MUL2 ~trkframe.x1 ADD2 =Sprite.x |
218 | 199 |
STHr #00 EQU ^$skip JNZ |
... | ... |
@@ -228,7 +209,7 @@ RTN |
228 | 209 |
|
229 | 210 |
#00 #20 |
230 | 211 |
$notes-loop |
231 |
- ( load ) OVR #00 SWP ,get-track JSR2 ADD2 PEK2 |
|
212 |
+ ( load ) OVR #00 SWP TRACK ADD2 PEK2 |
|
232 | 213 |
DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~trkframe.y1 ADD2 =Sprite.y |
233 | 214 |
OVR #00 SWP #0008 MUL2 ~trkframe.x1 ADD2 =Sprite.x |
234 | 215 |
,note_icn =Sprite.addr |
... | ... |
@@ -272,7 +253,6 @@ RTN |
272 | 253 |
=Sprite.y |
273 | 254 |
=Sprite.x |
274 | 255 |
,octave_icn =Sprite.addr |
275 |
- |
|
276 | 256 |
~Sprite.y ~Sprite.y #0038 ADD2 |
277 | 257 |
$loop |
278 | 258 |
OVR2 =Sprite.y |
... | ... |
@@ -291,8 +271,8 @@ RTN |
291 | 271 |
|
292 | 272 |
@draw-octaves ( -- ) |
293 | 273 |
|
294 |
- ~trkframe.x1 #0018 SUB2 ~trkframe.y1 ,draw-octave JSR2 |
|
295 |
- ~trkframe.x1 #0018 SUB2 ~trkframe.y1 #0038 ADD2 ,draw-octave JSR2 |
|
274 |
+ ~trkframe.x1 #0018 SUB2 DUP2 ~trkframe.y1 ,draw-octave JSR2 |
|
275 |
+ ~trkframe.y1 #0038 ADD2 ,draw-octave JSR2 |
|
296 | 276 |
~trkframe.x1 #0028 SUB2 =Sprite.x |
297 | 277 |
~trkframe.y1 =Sprite.y |
298 | 278 |
,font_hex #0060 ADD2 =Sprite.addr |
... | ... |
@@ -319,21 +299,16 @@ RTN |
319 | 299 |
|
320 | 300 |
@draw-knob ( x* y* value -- ) |
321 | 301 |
|
322 |
- =knob.value |
|
323 |
- =knob.y |
|
324 |
- =knob.x |
|
325 |
- |
|
302 |
+ ( load ) =knob.value =knob.y =knob.x |
|
326 | 303 |
~knob.x =Sprite.x |
327 | 304 |
~knob.y =Sprite.y ,knob_icns =Sprite.addr #01 =Sprite.color |
328 | 305 |
~knob.x 8+ =Sprite.x ,knob_icns 8+ =Sprite.addr #01 =Sprite.color |
329 | 306 |
~knob.y 8+ =Sprite.y ,knob_icns #0018 ADD2 =Sprite.addr #01 =Sprite.color |
330 | 307 |
~knob.x =Sprite.x ,knob_icns #0010 ADD2 =Sprite.addr #01 =Sprite.color |
331 |
- |
|
332 | 308 |
~knob.x #00 #00 ~knob.value ,knob_offsetx ADD2 PEK2 ADD2 =Sprite.x |
333 | 309 |
~knob.y #00 #00 ~knob.value ,knob_offsety ADD2 PEK2 ADD2 =Sprite.y |
334 | 310 |
,knob_icns #0020 ADD2 =Sprite.addr |
335 | 311 |
#05 =Sprite.color |
336 |
- |
|
337 | 312 |
~knob.x #0004 ADD2 =Sprite.x |
338 | 313 |
~knob.y #0010 ADD2 =Sprite.y |
339 | 314 |
,font_hex #00 ~knob.value #08 MUL ADD2 =Sprite.addr |
... | ... |
@@ -344,26 +319,20 @@ RTN |
344 | 319 |
@draw-controls ( -- ) |
345 | 320 |
|
346 | 321 |
~ctlframe.x1 ~ctlframe.y1 ~ctlframe.x2 ~ctlframe.y2 #01 ,line-rect JSR2 |
347 |
- |
|
348 | 322 |
~ctlframe.x1 #0008 ADD2 ~ctlframe.y1 #0008 ADD2 #02 ,env_txt ,draw-label JSR2 |
349 |
- |
|
350 | 323 |
~ctlframe.x1 #0008 ADD2 ~ctlframe.y1 #0010 ADD2 |
351 | 324 |
,Audio #00 ~track.active #02 MUL ADD2 PEK2 #04 SFT |
352 |
- ,draw-knob JSR2 |
|
353 |
- |
|
325 |
+ ,draw-knob JSR2 |
|
354 | 326 |
~ctlframe.x1 #0018 ADD2 ~ctlframe.y1 #0010 ADD2 |
355 | 327 |
,Audio #00 ~track.active #02 MUL ADD2 PEK2 #0f AND |
356 |
- ,draw-knob JSR2 |
|
357 |
- |
|
328 |
+ ,draw-knob JSR2 |
|
358 | 329 |
~ctlframe.x1 #0028 ADD2 ~ctlframe.y1 #0010 ADD2 |
359 | 330 |
,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 PEK2 #04 SFT |
360 |
- ,draw-knob JSR2 |
|
331 |
+ ,draw-knob JSR2 |
|
361 | 332 |
~ctlframe.x1 #0038 ADD2 ~ctlframe.y1 #0010 ADD2 |
362 | 333 |
,Audio #00 ~track.active #02 MUL ADD2 #0001 ADD2 PEK2 #0f AND |
363 |
- ,draw-knob JSR2 |
|
364 |
- |
|
334 |
+ ,draw-knob JSR2 |
|
365 | 335 |
~ctlframe.x1 #0050 ADD2 ~ctlframe.y1 #0008 ADD2 #02 ,vol_txt ,draw-label JSR2 |
366 |
- |
|
367 | 336 |
~ctlframe.x1 #0050 ADD2 ~ctlframe.y1 #0010 ADD2 #00 ,draw-knob JSR2 |
368 | 337 |
~ctlframe.x1 #0060 ADD2 ~ctlframe.y1 #0010 ADD2 #0f ,draw-knob JSR2 |
369 | 338 |
|
... | ... |
@@ -386,10 +355,8 @@ RTN |
386 | 355 |
~pointer.x =Sprite.x |
387 | 356 |
~pointer.y =Sprite.y |
388 | 357 |
#10 =Sprite.color |
389 |
- |
|
390 | 358 |
( record pointer positions ) |
391 | 359 |
~Mouse.x =pointer.x ~Mouse.y =pointer.y |
392 |
- |
|
393 | 360 |
( draw new cursor ) |
394 | 361 |
,cursor_icn =Sprite.addr |
395 | 362 |
~pointer.x =Sprite.x |
... | ... |
@@ -452,12 +419,6 @@ RTN |
452 | 419 |
|
453 | 420 |
RTN |
454 | 421 |
|
455 |
-@clear_icn [ 0000 0000 0000 0000 ] |
|
456 |
-@cursor_icn [ 80c0 e0f0 f8e0 1000 ] |
|
457 |
- |
|
458 |
-@note_icn [ 0000 1c3e 3e3e 1c00 ] |
|
459 |
-@head_icn [ 0018 1818 7e3c 1800 ] |
|
460 |
- |
|
461 | 422 |
@ch1_txt [ CHN0 00 ] |
462 | 423 |
@ch2_txt [ CHN1 00 ] |
463 | 424 |
@ch3_txt [ CHN2 00 ] |
... | ... |
@@ -465,6 +426,11 @@ RTN |
465 | 426 |
@env_txt [ Envelope 00 ] |
466 | 427 |
@vol_txt [ Volume 00 ] |
467 | 428 |
|
429 |
+@clear_icn [ 0000 0000 0000 0000 ] |
|
430 |
+@cursor_icn [ 80c0 e0f0 f8e0 1000 ] |
|
431 |
+@note_icn [ 0000 1c3e 3e3e 1c00 ] |
|
432 |
+@head_icn [ 0018 1818 7e3c 1800 ] |
|
433 |
+ |
|
468 | 434 |
@notes [ |
469 | 435 |
60 62 64 65 67 69 71 |
470 | 436 |
72 74 76 77 79 81 83 |
... | ... |
@@ -478,16 +444,6 @@ RTN |
478 | 444 |
0000 183c 3c18 0000 |
479 | 445 |
] |
480 | 446 |
|
481 |
-@piano-white [ |
|
482 |
- ffc0 8080 80c0 ff00 |
|
483 |
- fc02 0202 0202 fc00 |
|
484 |
-] |
|
485 |
- |
|
486 |
-@piano-black [ |
|
487 |
- ffff fefe feff ff00 |
|
488 |
- f008 0808 0808 f000 |
|
489 |
-] |
|
490 |
- |
|
491 | 447 |
@octave_icn [ |
492 | 448 |
ff00 0000 fefe fffe |
493 | 449 |
ff01 0101 0102 fc00 |
... | ... |
@@ -505,14 +461,14 @@ RTN |
505 | 461 |
ff01 0101 0102 fc00 |
506 | 462 |
] |
507 | 463 |
|
508 |
-@knob_offsetx |
|
509 |
-[ |
|
510 |
- 04 05 06 07 08 07 06 05 04 04 03 02 01 00 01 02 03 |
|
464 |
+@knob_offsetx [ |
|
465 |
+ 04 05 06 07 08 07 06 05 |
|
466 |
+ 04 04 03 02 01 00 01 02 |
|
511 | 467 |
] |
512 | 468 |
|
513 |
-@knob_offsety |
|
514 |
-[ |
|
515 |
- 00 01 02 03 04 05 06 07 08 07 06 05 04 04 03 02 01 |
|
469 |
+@knob_offsety [ |
|
470 |
+ 00 01 02 03 04 05 06 07 |
|
471 |
+ 08 07 06 05 04 04 03 02 |
|
516 | 472 |
] |
517 | 473 |
|
518 | 474 |
@font_hex ( 0-F ) |