diff --git a/projects/examples/demos/piano.tal b/projects/examples/demos/piano.tal index 44dd42b..abd8c3d 100644 --- a/projects/examples/demos/piano.tal +++ b/projects/examples/demos/piano.tal @@ -1,99 +1,63 @@ ( piano ) -%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } -%< { LTH } %> { GTH } %= { EQU } %! { NEQ } -%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } -%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } -%!~ { NEQk NIP } - -%HALT { #010f DEO } - -%RTN { JMP2r } -%TOS { #00 SWP } -%MOD { DUP2 / * - } -%GTS2 { #8000 ++ SWP2 #8000 ++ << } -%2/ { #01 SFT } -%2// { #01 SFT2 } -%4// { #02 SFT2 } -%8// { #03 SFT2 } -%8** { #30 SFT2 } - -%AUTO-NONE { #00 .Screen/auto DEO } -%AUTO-X { #01 .Screen/auto DEO } -%AUTO-YADDR { #06 .Screen/auto DEO } - -( devices ) - |00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 |10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |30 @Audio0 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 |80 @Controller &vector $2 &button $1 &key $1 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &modx $2 &mody $2 -|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 - -( variables ) |0000 -@last-note $1 -@octave $1 -@pointer +@last-note $1 +@octave $1 +@pointer &x $2 &y $2 -@center +@center &x $2 &y $2 -@adsr-view +@adsr-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 -@wave-view +@wave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 -@octave-view +@octave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 -( program ) - |0100 ( -> ) - ( theme ) - #0fe5 .System/r DEO2 - #0fc5 .System/g DEO2 + ( theme ) + #0fe5 .System/r DEO2 + #0fc5 .System/g DEO2 #0f25 .System/b DEO2 - - ( vectors ) + ( vectors ) ;on-frame .Screen/vector DEO2 ;on-control .Controller/vector DEO2 ;on-mouse .Mouse/vector DEO2 ;on-message .Console/vector DEO2 - ( find center ) - .Screen/width DEI2 2// .center/x STZ2 - .Screen/height DEI2 2// .center/y STZ2 - + .Screen/width DEI2 #01 SFT2 .center/x STZ2 + .Screen/height DEI2 #01 SFT2 .center/y STZ2 ( place octave ) - .center/x LDZ2 #0080 -- .octave-view/x1 STZ2 - .center/y LDZ2 #0008 ++ .octave-view/y1 STZ2 - .octave-view/x1 LDZ2 #0050 ++ .octave-view/x2 STZ2 - .octave-view/y1 LDZ2 #0018 ++ .octave-view/y2 STZ2 - + .center/x LDZ2 #0080 SUB2 .octave-view/x1 STZ2 + .center/y LDZ2 #0008 ADD2 .octave-view/y1 STZ2 + .octave-view/x1 LDZ2 #0050 ADD2 .octave-view/x2 STZ2 + .octave-view/y1 LDZ2 #0018 ADD2 .octave-view/y2 STZ2 ( place adsr ) - .center/x LDZ2 #0020 -- .adsr-view/x1 STZ2 - .center/y LDZ2 #0008 ++ .adsr-view/y1 STZ2 - .adsr-view/x1 LDZ2 #00a0 ++ .adsr-view/x2 STZ2 - .adsr-view/y1 LDZ2 #0018 ++ .adsr-view/y2 STZ2 - + .center/x LDZ2 #0020 SUB2 .adsr-view/x1 STZ2 + .center/y LDZ2 #0008 ADD2 .adsr-view/y1 STZ2 + .adsr-view/x1 LDZ2 #00a0 ADD2 .adsr-view/x2 STZ2 + .adsr-view/y1 LDZ2 #0018 ADD2 .adsr-view/y2 STZ2 ( place waveform ) - .center/x LDZ2 #0080 -- .wave-view/x1 STZ2 - .center/y LDZ2 #0020 -- .wave-view/y1 STZ2 - .wave-view/x1 LDZ2 #0100 ++ .wave-view/x2 STZ2 - .wave-view/y1 LDZ2 #0020 ++ .wave-view/y2 STZ2 - + .center/x LDZ2 #0080 SUB2 .wave-view/x1 STZ2 + .center/y LDZ2 #0020 SUB2 .wave-view/y1 STZ2 + .wave-view/x1 LDZ2 #0100 ADD2 .wave-view/x2 STZ2 + .wave-view/y1 LDZ2 #0020 ADD2 .wave-view/y2 STZ2 ( default settings ) #ff .last-note STZ #041c .Audio0/adsr DEO2 #dd .Audio0/volume DEO ;sin-pcm .Audio0/addr DEO2 #0100 .Audio0/length DEO2 - - ( inital drawing ) + ( inital drawing ) ;draw-octave JSR2 ;draw-adsr JSR2 ;draw-wave JSR2 @@ -102,15 +66,14 @@ BRK @on-frame ( -> ) - .adsr-view/y2 LDZ2 #0020 -- .Screen/y DEO2 - - #10 #00 + .adsr-view/y2 LDZ2 #0020 SUB2 .Screen/y DEO2 + #10 #00 &loop - .adsr-view/x2 LDZ2 #003a -- .Screen/x DEO2 - #10 OVR - .Audio0/output DEI #0f AND < .Screen/pixel DEO - .adsr-view/x2 LDZ2 #003a -- INC2 INC2 .Screen/x DEO2 - #10 OVR - .Audio0/output DEI #04 SFT < .Screen/pixel DEO - .Screen/y DEI2 INC2 INC2 .Screen/y DEO2 + .adsr-view/x2 LDZ2 #003a SUB2 .Screen/x DEO2 + #10 OVR SUB .Audio0/output DEI #0f AND LTH .Screen/pixel DEO + .adsr-view/x2 LDZ2 #003a SUB2 INC2 INC2 .Screen/x DEO2 + #10 OVR SUB .Audio0/output DEI #04 SFT LTH .Screen/pixel DEO + .Screen/y DEI2k INC2 INC2 ROT DEO2 INC GTHk ,&loop JCN POP2 @@ -119,48 +82,40 @@ BRK @on-control ( -> ) ( clear last cursor ) - .pointer/x LDZ2 .Screen/x DEO2 - .pointer/y LDZ2 .Screen/y DEO2 + .pointer/x LDZ2 .Screen/x DEO2 + .pointer/y LDZ2 .Screen/y DEO2 #40 .Screen/sprite DEO .Controller/key DEI - [ LIT 'a ] !~ ,&no-c JCN - #30 .octave LDZ #0c * + ;play JSR2 &no-c - [ LIT 's ] !~ ,&no-d JCN - #32 .octave LDZ #0c * + ;play JSR2 &no-d - [ LIT 'd ] !~ ,&no-e JCN - #34 .octave LDZ #0c * + ;play JSR2 &no-e - [ LIT 'f ] !~ ,&no-f JCN - #35 .octave LDZ #0c * + ;play JSR2 &no-f - [ LIT 'g ] !~ ,&no-g JCN - #37 .octave LDZ #0c * + ;play JSR2 &no-g - [ LIT 'h ] !~ ,&no-a JCN - #39 .octave LDZ #0c * + ;play JSR2 &no-a - [ LIT 'j ] !~ ,&no-b JCN - #3b .octave LDZ #0c * + ;play JSR2 &no-b - [ LIT 'k ] !~ ,&no-c2 JCN - #3c .octave LDZ #0c * + ;play JSR2 &no-c2 - [ #1b ] !~ ,&no-esc JCN HALT &no-esc + [ LIT 'a ] NEQk NIP ,&no-c JCN #30 .octave LDZ #0c MUL ADD ;play JSR2 &no-c + [ LIT 's ] NEQk NIP ,&no-d JCN #32 .octave LDZ #0c MUL ADD ;play JSR2 &no-d + [ LIT 'd ] NEQk NIP ,&no-e JCN #34 .octave LDZ #0c MUL ADD ;play JSR2 &no-e + [ LIT 'f ] NEQk NIP ,&no-f JCN #35 .octave LDZ #0c MUL ADD ;play JSR2 &no-f + [ LIT 'g ] NEQk NIP ,&no-g JCN #37 .octave LDZ #0c MUL ADD ;play JSR2 &no-g + [ LIT 'h ] NEQk NIP ,&no-a JCN #39 .octave LDZ #0c MUL ADD ;play JSR2 &no-a + [ LIT 'j ] NEQk NIP ,&no-b JCN #3b .octave LDZ #0c MUL ADD ;play JSR2 &no-b + [ LIT 'k ] NEQk NIP ,&no-c2 JCN #3c .octave LDZ #0c MUL ADD ;play JSR2 &no-c2 + [ #1b ] NEQk NIP ,&no-esc JCN #010f DEO &no-esc POP ( release ) #00 .Controller/key DEO - .Controller/button DEI - DUP #11 ! ,&cu JCN #3c ;play JSR2 &cu - DUP #21 ! ,&cd JCN #3d ;play JSR2 &cd - DUP #41 ! ,&cl JCN #3e ;play JSR2 &cl - DUP #81 ! ,&cr JCN #3f ;play JSR2 &cr - DUP #12 ! ,&au JCN #40 ;play JSR2 &au - DUP #22 ! ,&ad JCN #41 ;play JSR2 &ad - DUP #42 ! ,&al JCN #42 ;play JSR2 &al - DUP #82 ! ,&ar JCN #43 ;play JSR2 &ar - DUP #14 ! ,&su JCN #44 ;play JSR2 &su - DUP #24 ! ,&sd JCN #45 ;play JSR2 &sd - DUP #44 ! ,&sl JCN #46 ;play JSR2 &sl - DUP #84 ! ,&sr JCN #47 ;play JSR2 &sr - DUP #40 ! ,&l JCN .Audio0/addr DEI2 #0010 -- .Audio0/addr DEO2 &l - DUP #80 ! ,&r JCN .Audio0/addr DEI2 #0010 ++ .Audio0/addr DEO2 &r + .Controller/button DEI + [ #11 ] NEQk NIP ,&cu JCN #3c ;play JSR2 &cu + [ #21 ] NEQk NIP ,&cd JCN #3d ;play JSR2 &cd + [ #41 ] NEQk NIP ,&cl JCN #3e ;play JSR2 &cl + [ #81 ] NEQk NIP ,&cr JCN #3f ;play JSR2 &cr + [ #12 ] NEQk NIP ,&au JCN #40 ;play JSR2 &au + [ #22 ] NEQk NIP ,&ad JCN #41 ;play JSR2 &ad + [ #42 ] NEQk NIP ,&al JCN #42 ;play JSR2 &al + [ #82 ] NEQk NIP ,&ar JCN #43 ;play JSR2 &ar + [ #14 ] NEQk NIP ,&su JCN #44 ;play JSR2 &su + [ #24 ] NEQk NIP ,&sd JCN #45 ;play JSR2 &sd + [ #44 ] NEQk NIP ,&sl JCN #46 ;play JSR2 &sl + [ #84 ] NEQk NIP ,&sr JCN #47 ;play JSR2 &sr + [ #40 ] NEQk NIP ,&l JCN .Audio0/addr DEI2 #0010 SUB2 .Audio0/addr DEO2 &l + [ #80 ] NEQk NIP ,&r JCN .Audio0/addr DEI2 #0010 ADD2 .Audio0/addr DEO2 &r POP ;draw-octave JSR2 @@ -177,138 +132,128 @@ BRK @on-mouse ( -> ) - ;draw-cursor JSR2 + ;draw-cursor JSR2 - .Mouse/state DEI #00 ! #01 JCN [ BRK ] + .Mouse/state DEI #00 NEQ JMP [ BRK ] - .Mouse/x DEI2 .Mouse/y DEI2 .wave-view ;within-rect JSR2 + .Mouse/x DEI2 .Mouse/y DEI2 .wave-view ;within-rect JSR2 ;on-touch-wave-view JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .adsr-view ;within-rect JSR2 + .Mouse/x DEI2 .Mouse/y DEI2 .adsr-view ;within-rect JSR2 ;on-touch-adsr-view JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .octave-view ;within-rect JSR2 + .Mouse/x DEI2 .Mouse/y DEI2 .octave-view ;within-rect JSR2 ;on-touch-octave-view JCN2 BRK @on-touch-wave-view ( -> ) - .Mouse/x DEI2 .wave-view/x1 LDZ2 -- .Audio0/length DEO2 + .Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 .Audio0/length DEO2 ;draw-wave JSR2 - ;draw-cursor JSR2 + ;draw-cursor JSR2 BRK @on-touch-octave-view ( -> ) - .Mouse/x DEI2 .octave-view/x1 LDZ2 -- 8// NIP #09 ! ,&no-mod JCN - .Mouse/y DEI2 .octave-view/y1 LDZ2 -- 8// NIP - [ #00 ] !~ ,&no-incr JCN - .octave LDZ #03 = ,&no-incr JCN + .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ,&no-mod JCN + .Mouse/y DEI2 .octave-view/y1 LDZ2 SUB2 #03 SFT2 NIP + [ #00 ] NEQk NIP ,&no-incr JCN + .octave LDZ #03 EQU ,&no-incr JCN .octave LDZ INC .octave STZ &no-incr - [ #02 ] !~ ,&no-decr JCN - .octave LDZ #ff = ,&no-decr JCN - .octave LDZ #01 - .octave STZ &no-decr + [ #02 ] NEQk NIP ,&no-decr JCN + .octave LDZ #ff EQU ,&no-decr JCN + .octave LDZ #01 SUB .octave STZ &no-decr POP ( release ) #00 .Mouse/state DEO ;draw-octave JSR2 BRK &no-mod - .Mouse/x DEI2 .octave-view/x1 LDZ2 -- 8// NIP #06 > ,&no-key JCN - .Mouse/x DEI2 .octave-view/x1 LDZ2 -- 8// ;notes ++ LDA .octave LDZ #0c * + ;play JSR2 + .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #06 GTH ,&no-key JCN + .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 ;notes ADD2 LDA .octave LDZ #0c MUL ADD ;play JSR2 ( release ) #00 .Mouse/state DEO ;draw-octave JSR2 &no-key -BRK +BRK @on-touch-adsr-view ( -> ) - .Mouse/x DEI2 .adsr-view/x1 LDZ2 -- 8// NIP #03 / - [ #00 ] !~ ,&no-a JCN - .Audio0/adsr DEI - #10 .Mouse/state DEI #10 = #e0 * + + - .Audio0/adsr DEO &no-a - [ #01 ] !~ ,&no-d JCN - .Audio0/adsr DEI - DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr + - .Audio0/adsr DEO &no-d - [ #02 ] !~ ,&no-s JCN - .Audio0/adsr INC DEI - #10 .Mouse/state DEI #10 = #e0 * + + - .Audio0/adsr INC DEO &no-s - [ #03 ] !~ ,&no-r JCN - .Audio0/adsr INC DEI - DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr + - .Audio0/adsr INC DEO &no-r - [ #05 ] !~ ,&no-left JCN - .Audio0/volume DEI - #10 .Mouse/state DEI #10 = #e0 * + + - .Audio0/volume DEO &no-left - [ #06 ] !~ ,&no-right JCN - .Audio0/volume DEI - DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr + - .Audio0/volume DEO &no-right + .Mouse/x DEI2 .adsr-view/x1 LDZ2 SUB2 #03 SFT2 NIP #03 DIV + [ #00 ] NEQk NIP ,&no-a JCN + .Audio0/adsr DEI ,&touch2 JSR .Audio0/adsr DEO &no-a + [ #01 ] NEQk NIP ,&no-d JCN + .Audio0/adsr DEI ,&touch JSR .Audio0/adsr DEO &no-d + [ #02 ] NEQk NIP ,&no-s JCN + .Audio0/adsr INC DEI ,&touch2 JSR .Audio0/adsr INC DEO &no-s + [ #03 ] NEQk NIP ,&no-r JCN + .Audio0/adsr INC DEI ,&touch JSR .Audio0/adsr INC DEO &no-r + [ #05 ] NEQk NIP ,&no-left JCN + .Audio0/volume DEI ,&touch2 JSR .Audio0/volume DEO &no-left + [ #06 ] NEQk NIP ,&no-right JCN + .Audio0/volume DEI ,&touch JSR .Audio0/volume DEO &no-right POP ( release ) #00 .Mouse/state DEO ;draw-adsr JSR2 - ;draw-cursor JSR2 + ;draw-cursor JSR2 BRK + &touch DUP #f0 AND STH #01 .Mouse/state DEI #01 GTH #0e MUL ADD ADD #0f AND STHr ADD JMP2r + &touch2 #10 .Mouse/state DEI #01 GTH #e0 MUL ADD ADD JMP2r @play ( pitch -- ) - DUP #0c MOD .last-note STZ + DUP #0c ( mod ) [ DIVk MUL SUB ] .last-note STZ .Audio0/pitch DEO -RTN +JMP2r @draw-cursor ( -- ) ( clear last cursor ) - ;cursor .Screen/addr DEO2 - .pointer/x LDZ2 .Screen/x DEO2 - .pointer/y LDZ2 .Screen/y DEO2 + ;cursor .Screen/addr DEO2 + .pointer/x LDZ2 .Screen/x DEO2 + .pointer/y LDZ2 .Screen/y DEO2 #40 .Screen/sprite DEO ( record pointer positions ) - .Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 - .Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2 + .Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 + .Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2 ( colorize on state ) - #41 [ .Mouse/state DEI #00 ! ] + .Screen/sprite DEO + #41 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO -RTN +JMP2r @draw-octave ( -- ) - .octave-view/x1 LDZ2 #0048 ++ .Screen/x DEO2 + .octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2 ;arrow-icns .Screen/addr DEO2 .octave-view/y1 LDZ2 .Screen/y DEO2 #01 .Screen/sprite DEO - ;arrow-icns #0008 ++ .Screen/addr DEO2 - .octave-view/y1 LDZ2 #0010 ++ .Screen/y DEO2 + ;arrow-icns/down .Screen/addr DEO2 + .octave-view/y1 LDZ2 #0010 ADD2 .Screen/y DEO2 #01 .Screen/sprite DEO - ;font-hex .octave LDZ #03 + #00 SWP 8** ++ .Screen/addr DEO2 - .octave-view/y1 LDZ2 #0008 ++ .Screen/y DEO2 + ;font-hex .octave LDZ #03 ADD #00 SWP #30 SFT2 ADD2 .Screen/addr DEO2 + .octave-view/y1 LDZ2 #0008 ADD2 .Screen/y DEO2 #03 .Screen/sprite DEO .octave-view/x1 LDZ2 .Screen/x DEO2 .octave-view/y1 LDZ2 .Screen/y DEO2 - AUTO-YADDR + #06 .Screen/auto DEO .last-note LDZ STH - ;keys-left-icns STHkr #00 = INC ,draw-key JSR - ;keys-middle-icns STHkr #02 = INC ,draw-key JSR - ;keys-right-icns STHkr #04 = INC ,draw-key JSR - ;keys-left-icns STHkr #05 = INC ,draw-key JSR - ;keys-middle-icns STHkr #07 = INC ,draw-key JSR - ;keys-middle-icns STHkr #09 = INC ,draw-key JSR - ;keys-right-icns STHr #0b = INC ,draw-key JSR - AUTO-NONE + ;keys-left-icns STHkr #00 EQU INC ,draw-key JSR + ;keys-middle-icns STHkr #02 EQU INC ,draw-key JSR + ;keys-right-icns STHkr #04 EQU INC ,draw-key JSR + ;keys-left-icns STHkr #05 EQU INC ,draw-key JSR + ;keys-middle-icns STHkr #07 EQU INC ,draw-key JSR + ;keys-middle-icns STHkr #09 EQU INC ,draw-key JSR + ;keys-right-icns STHr #0b EQU INC ,draw-key JSR + #00 .Screen/auto DEO -RTN +JMP2r @draw-key ( addr* color -- ) @@ -316,10 +261,10 @@ RTN .Screen/addr DEO2 .Screen/y DEI2 STHr .Screen/sprite DEOk DEOk DEO - .Screen/x DEI2k #0008 ++ ROT DEO2 + .Screen/x DEI2k #0008 ADD2 ROT DEO2 .Screen/y DEO2 -RTN +JMP2r @draw-adsr ( -- ) @@ -327,72 +272,75 @@ RTN .adsr-view/x1 LDZ2 .adsr-view/y1 LDZ2 .Audio0/adsr DEI #04 SFT ;draw-knob JSR2 - .adsr-view/x1 LDZ2 #0018 ++ .adsr-view/y1 LDZ2 + .adsr-view/x1 LDZ2 #0018 ADD2 .adsr-view/y1 LDZ2 .Audio0/adsr DEI #0f AND ;draw-knob JSR2 - .adsr-view/x1 LDZ2 #0030 ++ .adsr-view/y1 LDZ2 + .adsr-view/x1 LDZ2 #0030 ADD2 .adsr-view/y1 LDZ2 .Audio0/adsr INC DEI #04 SFT ;draw-knob JSR2 - .adsr-view/x1 LDZ2 #0048 ++ .adsr-view/y1 LDZ2 + .adsr-view/x1 LDZ2 #0048 ADD2 .adsr-view/y1 LDZ2 .Audio0/adsr INC DEI #0f AND ;draw-knob JSR2 ( volume ) - .adsr-view/x2 LDZ2 #0028 -- .adsr-view/y1 LDZ2 + .adsr-view/x2 LDZ2 #0028 SUB2 .adsr-view/y1 LDZ2 .Audio0/volume DEI #04 SFT ;draw-knob JSR2 - .adsr-view/x2 LDZ2 #0010 -- .adsr-view/y1 LDZ2 + .adsr-view/x2 LDZ2 #0010 SUB2 .adsr-view/y1 LDZ2 .Audio0/volume DEI #0f AND ;draw-knob JSR2 -RTN +JMP2r @draw-wave ( -- ) - ( clear ) - .wave-view/x1 LDZ2 - .wave-view/y1 LDZ2 - .wave-view/x2 LDZ2 INC2 - .wave-view/y2 LDZ2 - #00 ;fill-rect JSR2 - #01 ;draw-wave-length JSR2 .wave-view/x1 LDZ2 .Screen/x DEO2 ( waveform ) - #ff #00 + #ff #00 &loop ( dotted line ) - DUP #01 AND ,&no-dot JCN - .wave-view/y1 LDZ2 #0010 ++ .Screen/y DEO2 + DUP #01 AND ,&no-dot JCN + .wave-view/y1 LDZ2 #0010 ADD2 .Screen/y DEO2 #03 .Screen/pixel DEO &no-dot - #00 OVR .Audio0/addr DEI2 ++ LDA - 2/ - TOS 4// .wave-view/y1 LDZ2 ++ .Screen/y DEO2 + #00 OVR .Audio0/addr DEI2 ADD2 LDA + #01 SFT + #00 SWP #02 SFT2 .wave-view/y1 LDZ2 ADD2 .Screen/y DEO2 .Screen/x DEI2 INC2 .Screen/x DEO2 - ( draw ) DUP - .Audio0/length DEI2 NIP > - .Audio0/length DEI2 #0100 !! #0101 == DUP ADD INC .Screen/pixel DEO + ( draw ) DUP + .Audio0/length DEI2 NIP GTH + .Audio0/length DEI2 #0100 NEQ2 AND DUP ADD INC .Screen/pixel DEO INC GTHk ,&loop JCN POP2 ( range ) - AUTO-X + #01 .Screen/auto DEO .wave-view/x1 LDZ2 .Screen/x DEO2 - .wave-view/y1 LDZ2 #0010 -- .Screen/y DEO2 - .Audio0/addr DEI2 #02 ;draw-short JSR2 - .wave-view/x2 LDZ2 #0020 -- .Screen/x DEO2 - .Audio0/length DEI2 #02 ;draw-short JSR2 - AUTO-NONE + .wave-view/y1 LDZ2 #0010 SUB2 .Screen/y DEO2 + .Audio0/addr DEI2 ;draw-short JSR2 + .wave-view/x2 LDZ2 #0020 SUB2 .Screen/x DEO2 + .Audio0/length DEI2 ;draw-short JSR2 + #00 .Screen/auto DEO -RTN +JMP2r @draw-wave-length ( color -- ) - + + ( clear background ) + #f2 .Screen/auto DEO + .wave-view/x1 LDZ2 DUP2 .Screen/x DEO2 + .wave-view/y1 LDZ2 DUP2 .Screen/y DEO2 + ,&wipe JSR + .Screen/y DEO2 + #0080 ADD2 .Screen/x DEO2 + ,&wipe JSR + #00 .Screen/auto DEO + STH - .wave-view/x1 LDZ2 .Audio0/length DEI2 ++ .Screen/x DEO2 - .wave-view/y1 LDZ2 DUP2 #0020 ++ SWP2 + .wave-view/x1 LDZ2 .Audio0/length DEI2 ADD2 .Screen/x DEO2 + .wave-view/y1 LDZ2 DUP2 #0020 ADD2 SWP2 &loop DUP2 .Screen/y DEO2 ( draw ) STHkr .Screen/pixel DEO @@ -400,71 +348,45 @@ RTN POP2 POP2 POPr -RTN +JMP2r + &wipe #00 .Screen/sprite DEOk DEOk DEOk DEO JMP2r @draw-knob ( x* y* value -- ) - ( load ) STH .Screen/y DEO2 .Screen/x DEO2 - ;knob-icns .Screen/addr DEO2 - ( draw ) #01 .Screen/sprite DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;knob-icns #0008 ++ .Screen/addr DEO2 - ( draw ) #01 .Screen/sprite DEO - .Screen/y DEI2 #0008 ++ .Screen/y DEO2 - ;knob-icns #0018 ++ .Screen/addr DEO2 - ( draw ) #01 .Screen/sprite DEO - .Screen/x DEI2 #0008 -- .Screen/x DEO2 - ;knob-icns #0010 ++ .Screen/addr DEO2 - ( draw ) #01 .Screen/sprite DEO - .Screen/x DEI2 #0004 ++ .Screen/x DEO2 - .Screen/y DEI2 #0008 ++ .Screen/y DEO2 - ;font-hex #00 STHkr #30 SFT ++ .Screen/addr DEO2 - ( draw ) #01 .Screen/sprite DEO - .Screen/x DEI2 #0004 -- #00 #00 STHkr ;knob-offsetx ++ LDA ++ .Screen/x DEO2 - .Screen/y DEI2 #0010 -- #00 #00 STHr ;knob-offsety ++ LDA ++ .Screen/y DEO2 - ;knob-icns #0020 ++ .Screen/addr DEO2 - ( draw ) #05 .Screen/sprite DEO + STH + OVR2 OVR2 .Screen/y DEO2 .Screen/x DEO2 + ( circle ) + ;knob-icns .Screen/addr DEO2 + #16 .Screen/auto DEO + #01 .Screen/sprite DEOk DEO + #00 .Screen/auto DEO + ( value ) + #0010 ADD2 .Screen/y DEO2 + #0004 ADD2 .Screen/x DEO2 + ;font-hex #00 STHkr #30 SFT ADD2 .Screen/addr DEO2 + #01 .Screen/sprite DEO + ( marker ) + .Screen/x DEI2 #0004 SUB2 #00 #00 STHkr ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2 + .Screen/y DEI2 #0010 SUB2 #00 #00 STHr ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2 + ;knob-icns #0020 ADD2 .Screen/addr DEO2 + #05 .Screen/sprite DEO -RTN +JMP2r -@draw-short ( short* color -- ) +@draw-short ( short* -- ) - STH - SWP STHkr ,draw-byte JSR - STHr + SWP ,draw-byte JSR -@draw-byte ( byte color -- ) +@draw-byte ( byte -- ) - STH - DUP #04 SFT STHkr ,draw-hex JSR #0f AND - STHr + DUP #04 SFT ,draw-hex JSR #0f AND -@draw-hex ( char color -- ) +@draw-hex ( char -- ) - SWP TOS 8** ;font-hex ++ .Screen/addr DEO2 - .Screen/sprite DEO + #00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 + #02 .Screen/sprite DEO -RTN - -@fill-rect ( x1* y1* x2* y2* color -- ) - - ,&color STR - ( x1 x2 y1 y2 ) ROT2 - &ver - ( save ) DUP2 .Screen/y DEO2 - STH2 STH2 OVR2 OVR2 SWP2 - &hor - ( save ) DUP2 .Screen/x DEO2 - ( draw ) ,&color LDR .Screen/pixel DEO - ( incr ) INC2 - OVR2 OVR2 GTS2 ,&hor JCN - POP2 POP2 STH2r STH2r - ( incr ) INC2 - OVR2 OVR2 GTS2 ,&ver JCN - POP2 POP2 POP2 POP2 - -RTN - &color $1 +JMP2r @within-rect ( x* y* rect -- flag ) @@ -475,54 +397,55 @@ RTN ( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN ( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ,&skip JCN POP2 POP2 POPr - #01 -RTN + #01 +JMP2r &skip POP2 POP2 POPr #00 -RTN +JMP2r -@cursor - 80c0 e0f0 f8e0 1000 +@cursor + 80c0 e0f0 f8e0 1000 -@arrow-icns +@arrow-icns 0010 387c fe10 1000 - 0010 1010 fe7c 3810 + &down + 0010 1010 fe7c 3810 -@notes +@notes 30 32 34 35 37 39 3b 3c -@keys-left-icns +@keys-left-icns 7c7c 7c7c 7c7c 7c7c 7c7c 7c7c 7c7c 7e7f - 7f7f 7f7f 7f7f 3e00 + 7f7f 7f7f 7f7f 3e00 -@keys-middle-icns +@keys-middle-icns 1c1c 1c1c 1c1c 1c1c 1c1c 1c1c 1c1c 3e7f - 7f7f 7f7f 7f7f 3e00 + 7f7f 7f7f 7f7f 3e00 -@keys-right-icns +@keys-right-icns 1f1f 1f1f 1f1f 1f1f 1f1f 1f1f 1f1f 3f7f - 7f7f 7f7f 7f7f 3e00 + 7f7f 7f7f 7f7f 3e00 -@knob-icns +@knob-icns 0003 0c10 2020 4040 00c0 3008 0404 0202 4040 2020 100c 0300 0202 0404 0830 c000 - 0000 183c 3c18 0000 + 0000 183c 3c18 0000 -@knob-offsetx +@knob-offsetx 01 00 00 00 00 01 02 03 - 05 06 07 08 08 08 08 07 + 05 06 07 08 08 08 08 07 -@knob-offsety +@knob-offsety 07 06 05 03 02 01 00 00 - 00 00 01 02 03 05 06 07 + 00 00 01 02 03 05 06 07 @font-hex ( 0-F ) 007c 8282 8282 827c 0030 1010 1010 1010 @@ -532,7 +455,7 @@ RTN 007c 8282 7c82 827c 007c 8282 7e02 827c 007c 8202 7e82 827e 00fc 8282 fc82 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc - 007c 8280 f080 827c 007c 8280 f080 8080 + 007c 8280 f080 827c 007c 8280 f080 8080 @sin-pcm 8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad