| ... | ... |
@@ -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 ) |