uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 5d9dc11ec51c434412111988419d2348b696caee
parent 91386f4832c89f2e433567d128744d097ab5bda8
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date:   Sun, 26 Feb 2023 20:16:41 -0800

(piano.tal) Rewrite

Diffstat:
Mprojects/software/piano.tal | 418++++++++++++++++++++++++++++++++++++++-----------------------------------------
1 file changed, 200 insertions(+), 218 deletions(-)

diff --git a/projects/software/piano.tal b/projects/software/piano.tal @@ -1,42 +1,32 @@ ( Piano: Play notes with the keyboard or the controller ) -|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 +|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 |0000 -@last-note $1 -@octave $1 -@pointer - &x $2 &y $2 -@center - &x $2 &y $2 -@adsr-view - &x1 $2 &y1 $2 &x2 $2 &y2 $2 -@wave-view - &x1 $2 &y1 $2 &x2 $2 &y2 $2 -@octave-view - &x1 $2 &y1 $2 &x2 $2 &y2 $2 + @last-note $1 + @octave $1 + @pointer &x $2 &y $2 + @center &x $2 &y $2 + @adsr-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 + @wave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 + @octave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 |0100 ( -> ) - + ( theme ) #0fe5 .System/r DEO2 #0fc5 .System/g DEO2 #0f25 .System/b DEO2 - ( 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 #01 SFT2 .center/x STZ2 - .Screen/height DEI2 #01 SFT2 .center/y STZ2 + .Screen/height DEI2 #01 SFT2 #0018 ADD2 .center/y STZ2 ( place octave ) .center/x LDZ2 #0080 SUB2 .octave-view/x1 STZ2 .center/y LDZ2 #0008 ADD2 .octave-view/y1 STZ2 @@ -49,33 +39,37 @@ .adsr-view/y1 LDZ2 #0018 ADD2 .adsr-view/y2 STZ2 ( place waveform ) .center/x LDZ2 #0080 SUB2 .wave-view/x1 STZ2 - .center/y LDZ2 #0020 SUB2 .wave-view/y1 STZ2 + .center/y LDZ2 #0040 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 + .wave-view/y1 LDZ2 #0040 ADD2 .wave-view/y2 STZ2 #041c .Audio0/adsr DEO2 #dd .Audio0/volume DEO ;sin-pcm .Audio0/addr DEO2 #0100 .Audio0/length DEO2 ( inital drawing ) - ;draw-octave JSR2 - ;draw-adsr JSR2 - ;draw-wave JSR2 + draw-octave + draw-adsr + draw-wave + ( unlock ) + ;on-frame .Screen/vector DEO2 + ;on-control .Controller/vector DEO2 + ;on-mouse .Mouse/vector DEO2 + ;on-message .Console/vector DEO2 BRK @on-frame ( -> ) - + + #00 .Screen/auto DEO .adsr-view/y2 LDZ2 #0020 SUB2 .Screen/y DEO2 - #10 #00 + #1000 &loop .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 + INC GTHk ?&loop POP2 BRK @@ -88,92 +82,95 @@ BRK #40 .Screen/sprite DEO .Controller/key DEI - [ 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 + [ LIT "a ] NEQk NIP ?&no-c #30 .octave LDZ #0c MUL ADD play &no-c + [ LIT "s ] NEQk NIP ?&no-d #32 .octave LDZ #0c MUL ADD play &no-d + [ LIT "d ] NEQk NIP ?&no-e #34 .octave LDZ #0c MUL ADD play &no-e + [ LIT "f ] NEQk NIP ?&no-f #35 .octave LDZ #0c MUL ADD play &no-f + [ LIT "g ] NEQk NIP ?&no-g #37 .octave LDZ #0c MUL ADD play &no-g + [ LIT "h ] NEQk NIP ?&no-a #39 .octave LDZ #0c MUL ADD play &no-a + [ LIT "j ] NEQk NIP ?&no-b #3b .octave LDZ #0c MUL ADD play &no-b + [ LIT "k ] NEQk NIP ?&no-c2 #3c .octave LDZ #0c MUL ADD play &no-c2 + [ #1b ] NEQk NIP ?&no-esc #010f DEO &no-esc POP ( release ) #00 .Controller/key DEO .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 + [ #11 ] NEQk NIP ?&cu #3c play &cu + [ #21 ] NEQk NIP ?&cd #3d play &cd + [ #41 ] NEQk NIP ?&cl #3e play &cl + [ #81 ] NEQk NIP ?&cr #3f play &cr + [ #12 ] NEQk NIP ?&au #40 play &au + [ #22 ] NEQk NIP ?&ad #41 play &ad + [ #42 ] NEQk NIP ?&al #42 play &al + [ #82 ] NEQk NIP ?&ar #43 play &ar + [ #14 ] NEQk NIP ?&su #44 play &su + [ #24 ] NEQk NIP ?&sd #45 play &sd + [ #44 ] NEQk NIP ?&sl #46 play &sl + [ #84 ] NEQk NIP ?&sr #47 play &sr + [ #40 ] NEQk NIP ?&l .Audio0/addr DEI2 #0010 SUB2 .Audio0/addr DEO2 &l + [ #80 ] NEQk NIP ?&r .Audio0/addr DEI2 #0010 ADD2 .Audio0/addr DEO2 &r POP - ;draw-octave JSR2 - ;draw-wave JSR2 + draw-octave + draw-wave BRK @on-message ( -> ) - - .Console/read DEI ;play JSR2 - ;draw-octave JSR2 + + .Console/read DEI play + draw-octave BRK @on-mouse ( -> ) - ;draw-cursor JSR2 - - .Mouse/state DEI #00 NEQ JMP [ BRK ] + #00 .Mouse/state DEI NEQ #41 ADD ;cursor-icn update-cursor - .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 - ;on-touch-adsr-view JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .octave-view ;within-rect JSR2 - ;on-touch-octave-view JCN2 + .Mouse/state DEI ?on-mouse-touch + +BRK + +@on-mouse-touch ( -> ) + + .Mouse/x DEI2 .Mouse/y DEI2 .wave-view within-rect + ?on-touch-wave-view + .Mouse/x DEI2 .Mouse/y DEI2 .adsr-view within-rect + ?on-touch-adsr-view + .Mouse/x DEI2 .Mouse/y DEI2 .octave-view within-rect + ?on-touch-octave-view BRK @on-touch-wave-view ( -> ) .Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 .Audio0/length DEO2 - ;draw-wave JSR2 - ;draw-cursor JSR2 + draw-wave BRK @on-touch-octave-view ( -> ) - .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ,&no-mod JCN + .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ?&no-mod .Mouse/y DEI2 .octave-view/y1 LDZ2 SUB2 #03 SFT2 NIP - [ #00 ] NEQk NIP ,&no-incr JCN - .octave LDZ #03 EQU ,&no-incr JCN + [ #00 ] NEQk NIP ?&no-incr + .octave LDZ #03 EQU ?&no-incr .octave LDZ INC .octave STZ &no-incr - [ #02 ] NEQk NIP ,&no-decr JCN - .octave LDZ #ff EQU ,&no-decr JCN + [ #02 ] NEQk NIP ?&no-decr + .octave LDZ #ff EQU ?&no-decr .octave LDZ #01 SUB .octave STZ &no-decr POP ( release ) #00 .Mouse/state DEO - ;draw-octave JSR2 + draw-octave BRK &no-mod - .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 + .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #06 GTH ?&no-key + .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 ;notes-lut ADD2 LDA .octave LDZ #0c MUL ADD play ( release ) #00 .Mouse/state DEO - ;draw-octave JSR2 + draw-octave &no-key BRK @@ -181,83 +178,84 @@ BRK @on-touch-adsr-view ( -> ) .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 + [ #00 ] NEQk NIP ?&no-a + .Audio0/adsr DEI touch2 .Audio0/adsr DEO &no-a + [ #01 ] NEQk NIP ?&no-d + .Audio0/adsr DEI touch .Audio0/adsr DEO &no-d + [ #02 ] NEQk NIP ?&no-s + .Audio0/adsr INC DEI touch2 .Audio0/adsr INC DEO &no-s + [ #03 ] NEQk NIP ?&no-r + .Audio0/adsr INC DEI touch .Audio0/adsr INC DEO &no-r + [ #05 ] NEQk NIP ?&no-left + .Audio0/volume DEI touch2 .Audio0/volume DEO &no-left + [ #06 ] NEQk NIP ?&no-right + .Audio0/volume DEI touch .Audio0/volume DEO &no-right POP ( release ) #00 .Mouse/state DEO - ;draw-adsr JSR2 - ;draw-cursor JSR2 + draw-adsr 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 +@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 + +( +@|core ) @play ( pitch -- ) - - DUP #0c ( mod ) [ DIVk MUL SUB ] .last-note STZ + + DUP #0c DIVk MUL SUB ;draw-octave/last STA .Audio0/pitch DEO JMP2r -@draw-cursor ( -- ) - - ( clear last cursor ) - ;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 - ( colorize on state ) - #41 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO +@update-cursor ( color addr* -- ) + + [ LIT2 00 -Screen/auto ] DEO + #40 draw-cursor + .Mouse/x DEI2 ,draw-cursor/x STR2 + .Mouse/y DEI2 ,draw-cursor/y STR2 + .Screen/addr DEO2 + +@draw-cursor ( color -- ) + + [ LIT2 &x $2 ] .Screen/x DEO2 + [ LIT2 &y $2 ] .Screen/y DEO2 + .Screen/sprite DEO JMP2r @draw-octave ( -- ) - - .octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2 - ;arrow-icns .Screen/addr DEO2 + ( arrows ) + [ LIT2 02 -Screen/auto ] DEO + .octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2 .octave-view/y1 LDZ2 .Screen/y DEO2 - #01 .Screen/sprite DEO - - ;arrow-icns/down .Screen/addr DEO2 - .octave-view/y1 LDZ2 #0010 ADD2 .Screen/y DEO2 - #01 .Screen/sprite DEO - + ;arrow-icns .Screen/addr DEO2 + [ LIT2 01 -Screen/sprite ] DEO ;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 - + [ LIT2 03 -Screen/sprite ] DEO + ;arrow-icns/down .Screen/addr DEO2 + [ LIT2 01 -Screen/sprite ] DEO + ( octave ) .octave-view/x1 LDZ2 .Screen/x DEO2 .octave-view/y1 LDZ2 .Screen/y DEO2 - #06 .Screen/auto DEO - .last-note LDZ STH - ;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 - -JMP2r + [ LIT2 06 -Screen/auto ] DEO + [ LITr &last ff ] + ;keys-left-icns STHkr #00 EQU INC draw-key + ;keys-middle-icns STHkr #02 EQU INC draw-key + ;keys-right-icns STHkr #04 EQU INC draw-key + ;keys-left-icns STHkr #05 EQU INC draw-key + ;keys-middle-icns STHkr #07 EQU INC draw-key + ;keys-middle-icns STHkr #09 EQU INC draw-key + ;keys-right-icns STHr #0b EQU INC + +( >> ) @draw-key ( addr* color -- ) - + STH .Screen/addr DEO2 .Screen/y DEI2 @@ -268,61 +266,47 @@ JMP2r JMP2r @draw-adsr ( -- ) - + ( adsr ) .adsr-view/x1 LDZ2 .adsr-view/y1 LDZ2 - .Audio0/adsr DEI #04 SFT - ;draw-knob JSR2 + .Audio0/adsr DEI #04 SFT draw-knob .adsr-view/x1 LDZ2 #0018 ADD2 .adsr-view/y1 LDZ2 - .Audio0/adsr DEI #0f AND - ;draw-knob JSR2 + .Audio0/adsr DEI #0f AND draw-knob .adsr-view/x1 LDZ2 #0030 ADD2 .adsr-view/y1 LDZ2 - .Audio0/adsr INC DEI #04 SFT - ;draw-knob JSR2 + .Audio0/adsr INC DEI #04 SFT draw-knob .adsr-view/x1 LDZ2 #0048 ADD2 .adsr-view/y1 LDZ2 - .Audio0/adsr INC DEI #0f AND - ;draw-knob JSR2 + .Audio0/adsr INC DEI #0f AND draw-knob ( volume ) .adsr-view/x2 LDZ2 #0028 SUB2 .adsr-view/y1 LDZ2 - .Audio0/volume DEI #04 SFT - ;draw-knob JSR2 + .Audio0/volume DEI #04 SFT draw-knob .adsr-view/x2 LDZ2 #0010 SUB2 .adsr-view/y1 LDZ2 .Audio0/volume DEI #0f AND - ;draw-knob JSR2 -JMP2r +!draw-knob @draw-wave ( -- ) - - #01 ;draw-wave-length JSR2 + + ( #01 draw-wave-length ) + ( dotted zero ) .wave-view/x1 LDZ2 .Screen/x DEO2 ( waveform ) - #ff #00 + [ LIT2 01 -Screen/auto ] DEO + ;sin-pcm/end ;sin-pcm &loop - ( dotted line ) - 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 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 GTH - .Audio0/length DEI2 #0100 NEQ2 AND DUP ADD INC .Screen/pixel DEO - INC GTHk ,&loop JCN - POP2 + LDAk #00 SWP #02 SFT2 .wave-view/y1 LDZ2 ADD2 .Screen/y DEO2 + ( draw ) DUP2 ;sin-pcm SUB2 NIP .Audio0/length DEI2 NIP GTH INC INC .Screen/pixel DEO + INC2 GTH2k ?&loop + POP2 POP2 ( range ) #01 .Screen/auto DEO .wave-view/x1 LDZ2 .Screen/x DEO2 .wave-view/y1 LDZ2 #0010 SUB2 .Screen/y DEO2 - .Audio0/addr DEI2 ;draw-short JSR2 + .Audio0/addr DEI2 draw-short .wave-view/x2 LDZ2 #0020 SUB2 .Screen/x DEO2 - .Audio0/length DEI2 ;draw-short JSR2 + .Audio0/length DEI2 draw-short #00 .Screen/auto DEO JMP2r @@ -345,7 +329,7 @@ JMP2r &loop DUP2 .Screen/y DEO2 ( draw ) STHkr .Screen/pixel DEO - INC2 GTH2k ,&loop JCN + INC2 GTH2k ?&loop POP2 POP2 POPr @@ -358,45 +342,45 @@ JMP2r 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 + [ LIT2 16 -Screen/auto ] DEO + [ LIT2 01 -Screen/sprite ] DEOk 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 + [ LIT2 00 -Screen/auto ] DEO + [ LIT2 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 + .Screen/x DEI2 #0004 SUB2 #0000 STHkr ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2 + .Screen/y DEI2 #0010 SUB2 #0000 STHr ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2 ;knob-icns #0020 ADD2 .Screen/addr DEO2 - #05 .Screen/sprite DEO + [ LIT2 05 -Screen/sprite ] DEO JMP2r @draw-short ( short* -- ) - SWP ,draw-byte JSR + SWP draw-byte @draw-byte ( byte -- ) - DUP #04 SFT ,draw-hex JSR #0f AND + DUP #04 SFT draw-hex #0f AND @draw-hex ( char -- ) #00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 - #02 .Screen/sprite DEO + [ LIT2 02 -Screen/sprite ] DEO JMP2r @within-rect ( x* y* rect -- flag ) - + STH - ( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ,&skip JCN - ( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ,&skip JCN + ( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ?&skip + ( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ?&skip SWP2 - ( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN - ( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ,&skip JCN + ( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ?&skip + ( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ?&skip POP2 POP2 POPr #01 JMP2r @@ -406,49 +390,47 @@ JMP2r JMP2r -@cursor - 80c0 e0f0 f8e0 1000 +@phex ( short* -- ) SWP phex/b &b DUP #04 SFT phex/c &c #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r -@arrow-icns - 0010 387c fe10 1000 - &down - 0010 1010 fe7c 3810 +( -@notes - 30 32 34 35 - 37 39 3b 3c +@|assets ) -@keys-left-icns +@cursor-icn [ + 80c0 e0f0 f8e0 1000 ] +@arrow-icns [ + 0010 387c fe10 1000 +&down + 0010 1010 fe7c 3810 ] +@notes-lut [ + 30 32 34 35 + 37 39 3b 3c ] +@keys-left-icns [ 7c7c 7c7c 7c7c 7c7c 7c7c 7c7c 7c7c 7e7f - 7f7f 7f7f 7f7f 3e00 - -@keys-middle-icns + 7f7f 7f7f 7f7f 3e00 ] +@keys-middle-icns [ 1c1c 1c1c 1c1c 1c1c 1c1c 1c1c 1c1c 3e7f - 7f7f 7f7f 7f7f 3e00 - -@keys-right-icns + 7f7f 7f7f 7f7f 3e00 ] +@keys-right-icns [ 1f1f 1f1f 1f1f 1f1f 1f1f 1f1f 1f1f 3f7f - 7f7f 7f7f 7f7f 3e00 - -@knob-icns + 7f7f 7f7f 7f7f 3e00 ] +@knob-icns [ 0003 0c10 2020 4040 00c0 3008 0404 0202 4040 2020 100c 0300 0202 0404 0830 c000 - 0000 183c 3c18 0000 - -@knob-offsetx + &index + 0000 183c 3c18 0000 ] +@knob-offsetx [ 01 00 00 00 00 01 02 03 - 05 06 07 08 08 08 08 07 - -@knob-offsety + 05 06 07 08 08 08 08 07 ] +@knob-offsety [ 07 06 05 03 02 01 00 00 - 00 00 01 02 03 05 06 07 - -@font-hex ( 0-F ) + 00 00 01 02 03 05 06 07 ] +@font-hex [ 007c 8282 8282 827c 0030 1010 1010 1010 007c 8202 7c80 80fe 007c 8202 1c02 827c 000c 1424 4484 fe04 00fe 8080 7c02 827c @@ -456,9 +438,8 @@ JMP2r 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 - -@sin-pcm + 007c 8280 f080 827c 007c 8280 f080 8080 ] +@sin-pcm [ 8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7 d9db dee0 e2e4 e6e7 e9eb ecee f0f1 f2f4 @@ -474,4 +455,5 @@ JMP2r 0102 0202 0202 0303 0405 0506 0708 090a 0b0c 0e0f 1012 1415 1719 1a1c 1e20 2225 2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d - 5053 5659 5c5f 6265 686b 6e71 7477 7a7d + 5053 5659 5c5f 6265 686b 6e71 7477 7a7d ] + &end