(piano.tal) Implemented new auto byte

This commit is contained in:
neauoire 2022-03-14 11:04:49 -07:00
parent 21f3a2d870
commit 3293a1b639
1 changed files with 203 additions and 280 deletions

View File

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