#! /usr/local/bin/xbigforth \ code generated by theseus, call 'theseus ' to edit \ do not edit manually if you don't know what you are doing also editor also minos also forth component class audio-gui public: vabox ptr experts vabox ptr basics togglebutton ptr expert-mode button ptr bridgeoff habox ptr irqs ( [varstart] ) cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" DDFA GUI" ; class; component class basic-gui public: infotextfield ptr filename infotextfield ptr sr01 infotextfield ptr sr23 infotextfield ptr sr45 infotextfield ptr sr67 canvas ptr stampirqs hatbox ptr dacbox hatbox ptr bons vabox ptr reconnect ( [varstart] ) cell var file-path cell var ramps 4 cells var irqs 4 cells var states 8 var ctls 4 var dacs method auto-update ( [varend] ) how: : params DF[ 0 ]DF X" DDFA GUI" ; class; component class expert-gui public: topindex ptr file-index topindex ptr eqdsps topindex ptr stamps topindex ptr global topindex ptr abouti infotextfield ptr filename textfield ptr data infotextfield ptr addr textfield ptr status vabox ptr reconnect topindex ptr eq-config topindex ptr inputs topindex ptr delays topindex ptr tones topindex ptr mixers topindex ptr graphic-eq topindex ptr filter topindex ptr mx0 topindex ptr mx1 topindex ptr mx2 topindex ptr mx3 topindex ptr mx4 topindex ptr mx5 topindex ptr mx6 topindex ptr mx7 topindex ptr gcha topindex ptr gch0 topindex ptr gch1 topindex ptr gch2 topindex ptr gch3 topindex ptr gch4 topindex ptr gch5 topindex ptr gch6 topindex ptr gch7 topindex ptr filter0 topindex ptr filter1 topindex ptr filter2 topindex ptr filter3 topindex ptr filter4 topindex ptr filter5 topindex ptr filter6 topindex ptr filter7 topindex ptr vindex topindex ptr config topindex ptr novaload topindex ptr clipping topindex ptr limitp topindex ptr pte topindex ptr short topindex ptr stamp-status topindex ptr interrupts topindex ptr gpios topindex ptr clocks gpl-about ptr about-comp ( [varstart] ) cell var file-path cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" DDFA GUI" ; class; include audio-gui.fs component class config-comp public: hscaler ptr h-syn hscaler ptr h-prefl hscaler ptr h-prefr vabox ptr lbox vabox ptr rbox vabox ptr lbox2 vabox ptr rbox2 canvas ptr sample-rate habox ptr sbox flipbutton ptr lsilence flipbutton ptr rsilence habox ptr sstates flipbutton ptr lsilencet flipbutton ptr rsilencet hscaler ptr tsilence ( [varstart] ) cell var addr 2 cells var data 2 cells var state 2 cells var silence cell var updated method reload-config ( [varend] ) how: : params DF[ 0 ]DF X" Config Component" ; class; component class tone-comp public: hscaler ptr lbassfreq vscaler ptr lbassvol hscaler ptr ltreblefreq vscaler ptr ltreblevol hscaler ptr rbassfreq vscaler ptr rbassvol hscaler ptr rtreblefreq vscaler ptr rtreblevol ( [varstart] ) cell Var addr cell var data cell Var updated method reload-tone ( [varend] ) how: : params DF[ 0 ]DF X" Tone Control" ; class; component class nova-comp public: vscaler ptr ldels vscaler ptr latrs vscaler ptr lrelrs vscaler ptr lcoefs vscaler ptr rdels vscaler ptr ratrs vscaler ptr rrelrs vscaler ptr rcoefs ( [varstart] ) cell Var addr 2 cells var mask 2 cells var rate cell Var lcoef cell Var rcoef cell Var oldcoeff cell Var updated 8 Var maskpad 16 Var ratepad 8 Var coeffpad method reload-nova ( [varend] ) how: : params DF[ 0 ]DF X" Novaload Control" ; class; component class clip-comp public: vabox ptr lbox vscaler ptr ltps vscaler ptr lcps vabox ptr rbox vscaler ptr rtps vscaler ptr rcps ( [varstart] ) cell var addr cell var data cell var updated method reload-clip ( [varend] ) how: : params DF[ 0 ]DF X" Clipping Control" ; class; component class vol-comp public: vscaler ptr l0 canvas ptr llevel vscaler ptr r0 canvas ptr rlevel ( [varstart] ) cell Var addr cell Var updated 2 Var volume 2 Var cur-volume ( [varend] ) how: : params DF[ 0 ]DF X" Volume Control" ; class; component class mvol-comp public: vscaler ptr master canvas ptr level ( [varstart] ) cell Var addr cell Var updated 2 Var volume 2 Var cur-volume ( [varend] ) how: : params DF[ 0 ]DF X" Master Volume" ; class; component class fft-comp public: button ptr left0-fft button ptr right0-fft button ptr left1-fft button ptr right1-fft button ptr left2-fft button ptr right2-fft button ptr left3-fft button ptr right3-fft canvas ptr fft-canvas ( [varstart] ) cell var l0fft cell var r0fft cell var l1fft cell var r1fft cell var l2fft cell var r2fft cell var l3fft cell var r3fft ( [varend] ) how: : params DF[ 0 ]DF X" FFT Window" ; class; component class mix-comp public: vscaler ptr mix0 vscaler ptr mix1 vscaler ptr mix2 vscaler ptr mix3 vscaler ptr mix4 vscaler ptr mix5 vscaler ptr mix6 vscaler ptr mix7 vscaler ptr gain0 vscaler ptr gain1 vscaler ptr gain2 vscaler ptr gain3 ( [varstart] ) cell Var addr cell Var updated 8 cells Var data 4 cells var gain method reload-mix ( [varend] ) how: : params DF[ 0 ]DF X" Mixer" ; class; component class delay-comp public: vscaler ptr ldelay vscaler ptr rdelay hscaler ptr finedelay flipbutton ptr testtone ( [varstart] ) cell var addr cell var data cell var olddata cell var updated method reload-delay ( [varend] ) how: : params DF[ 0 ]DF X" Delay" ; class; component class stampc-comp public: hscaler ptr pri_mode hscaler ptr pulse_t ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" STAMP config" ; class; component class powerc-comp public: hscaler ptr lpri-sens hscaler ptr lpnsop-scalar hscaler ptr rpri-sens hscaler ptr rpnsop-scalar ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" Power Control" ; class; component class dac-comp public: tbutton ptr ldac hscaler ptr ldctime tbutton ptr rdac hscaler ptr rdctime ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" DAC Control" ; class; component class max-comp public: vscaler ptr lo_tc vscaler ptr hi_tc vscaler ptr max_i vscaler ptr max_pow ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" Max Power/Current" ; class; component class stampg-comp public: vscaler ptr mi hscaler ptr ssr hscaler ptr ssac hscaler ptr sns0 hscaler ptr sns1 hscaler ptr sns2 ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" Global STAMP" ; class; component class time-comp public: hscaler ptr ldeadthi hscaler ptr ldeadtlo hscaler ptr lpwm0del hscaler ptr rdeadthi hscaler ptr rdeadtlo hscaler ptr rpwm0del ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" Timing Control" ; class; component class pte-comp public: hscaler ptr red hscaler ptr rec hscaler ptr ep vscaler ptr pow ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" Power Time Envelope" ; class; component class short-comp public: vscaler ptr f_hi vscaler ptr f_lo vscaler ptr hi vscaler ptr lo ( [varstart] ) cell var addr cell var data cell var updated ( [varend] ) how: : params DF[ 0 ]DF X" Short" ; class; component class input-comp public: vscaler ptr tdm hscaler ptr first ( [varstart] ) cell var addr cell var data cell var updated method update ( [varend] ) how: : params DF[ 0 ]DF X" I²S Input" ; class; component class status-comp public: infotextfield ptr sample canvas ptr lcond# canvas ptr rcond# canvas ptr lpow# canvas ptr rpow# ( [varstart] ) cell var addr cell var srate cell var lcond cell var rcond cell var lpower cell var rpower 63 4 * cells var backlog cell var visible ( [varend] ) how: : params DF[ 0 ]DF X" Stamp Status" ; class; component class irqmask-comp public: ( [varstart] ) cell var addr ( [varend] ) how: : params DF[ 0 ]DF X" IRQ Mask" ; class; component class byte-comp public: ( [varstart] ) cell var addr cell var data method reload ( [varend] ) how: : params DF[ 0 ]DF X" Byte component" ; class; component class gpio-comp public: hatbox ptr data-bytes flipbutton ptr data0 flipbutton ptr data1 flipbutton ptr data2 flipbutton ptr data3 flipbutton ptr data4 flipbutton ptr data5 flipbutton ptr data6 flipbutton ptr data7 ( [varstart] ) cell var addr cell var data cell var dir ( [varend] ) how: : params DF[ 0 ]DF X" GPIO" ; class; component class clock-comp public: hscaler ptr delay ( [varstart] ) cell var addr cell var data ( [varend] ) how: : params DF[ 0 ]DF X" Clock" ; class; component class stirqmask-comp public: canvas ptr stampirqs ( [varstart] ) cell var addr cell var data 4 cells var irqs 4 cells var states cell var updated cell var visible ( [varend] ) how: : params DF[ 0 ]DF X" STAMP IRQ Mask" ; class; component class eqirqmask-comp public: canvas ptr eqirqs canvas ptr sdirqs canvas ptr gpioirqs ( [varstart] ) cell var addr cell var data cell var updated cell var irqs cell var visible ( [varend] ) how: : params DF[ 0 ]DF X" EQ DSP IRQ Mask" ; class; component class gpiotime-comp public: hscaler ptr scale0 hscaler ptr time0 hscaler ptr scale1 hscaler ptr time1 hscaler ptr scale2 hscaler ptr time2 hscaler ptr scale3 hscaler ptr time3 hscaler ptr scale4 hscaler ptr time4 hscaler ptr scale5 hscaler ptr time5 hscaler ptr scale6 hscaler ptr time6 hscaler ptr scale7 hscaler ptr time7 ( [varstart] ) cell var addr 2 cells var data ( [varend] ) how: : params DF[ 0 ]DF X" Scale Time" ; class; component class gpioconf-comp public: hscaler ptr grpsel hscaler ptr chansel ( [varstart] ) cell var addr cell var data method update ( [varend] ) how: : params DF[ 0 ]DF X" GPIO config" ; class; component class mode-comp public: ( [varstart] ) gpioconf-comp ptr outer cell var data cell var addr cell var n ( [varend] ) how: : params DF[ 0 ]DF X" Mode config" ; class; component class eq-comp public: vscaler ptr sc0 vscaler ptr sc1 vscaler ptr sc2 vscaler ptr sc3 vscaler ptr sc4 vscaler ptr sc5 vscaler ptr sc6 vscaler ptr sc7 vscaler ptr sc8 vscaler ptr sc9 vscaler ptr sc10 vscaler ptr sc11 canvas ptr fftplot ( [varstart] ) cell var addr cell var saddr cell var do-update cell var timestamp ( [varend] ) how: : params DF[ 0 ]DF X" Graphic Equalizer" ; class; component class eq2-comp public: vscaler ptr sc0 vscaler ptr sc1 vscaler ptr sc2 vscaler ptr sc3 vscaler ptr sc4 vscaler ptr sc5 vscaler ptr sc6 vscaler ptr sc7 vscaler ptr sc8 vscaler ptr sc9 vscaler ptr sc10 vscaler ptr sc11 canvas ptr fftplot ( [varstart] ) cell var addr cell var saddr cell var do-update cell var timestamp ( [varend] ) how: : params DF[ 0 ]DF X" Graphic Equalizer" ; class; component class irq-comp public: habox ptr state-box togglebutton ptr ok-button ( [varstart] ) cell var port cell var status ( [varend] ) how: : params DF[ 0 ]DF X" Interrupt" ; class; component class confx-comp public: config-comp ptr conf0x config-comp ptr conf1x config-comp ptr conf2x config-comp ptr conf3x ( [varstart] ) ( [varend] ) how: : params DF[ 0 ]DF X" Config" ; class; component class vols-comp public: flipbutton ptr ramp flipbutton ptr smute hscaler ptr ramp-timing habox ptr rampsx habox ptr smutes hatbox ptr shards hatbox ptr bons hatbox ptr bfbs ( [varstart] ) 8 var ctls cell var ramps cell var rampt ( [varend] ) how: : params DF[ 0 ]DF X" Volumes" ; class; component class filter-comp public: canvas ptr status-bar vabox ptr filterbox infotextfield ptr srate infotextfield ptr filename info-menu ptr save-ch-type info-menu ptr filter-type habox ptr gainbox hscaler ptr ffreq% hscaler ptr fq% hscaler ptr fgain% topindex ptr float-ti topindex ptr hex-ti tableinfotextfield ptr b0# tableinfotextfield ptr b1# tableinfotextfield ptr b2# tableinfotextfield ptr a1# tableinfotextfield ptr a2# vabox ptr hexbox infotextfield ptr b0## infotextfield ptr b1## infotextfield ptr b2## infotextfield ptr a1## infotextfield ptr a2## habox ptr g23box vabox ptr g2box vscaler ptr fgain2% vabox ptr g3box vscaler ptr fgain3% canvas ptr fftplot ( [varstart] ) cell var addr cell var fitem cell var fgain# cell var ffreq# cell var fq# cell var ftype# cell var fgain2# cell var fgain3# cell var q/bw cell var timestamp cell var dbscale cell var file-path cell var updated cell var links cell var conf method update method ch-type! method >ftype! ( [varend] ) how: : params DF[ 0 ]DF X" Filter Designer" ; class; component class filter-menu public: ( [varstart] ) ( [varend] ) how: : params DF[ 0 ]DF X" Filter Menu" ; class; component class save-channel-menu public: ( [varstart] ) ( [varend] ) how: : params DF[ 0 ]DF X" Save channel menu" ; class; component class reconnect-comp public: ( [varstart] ) ( [varend] ) how: : params DF[ 0 ]DF X" Reconnect" ; class; reconnect-comp implements ( [methodstart] ) : assign drop ; ( [methodend] ) : widget ( [dumpstart] ) $10 $1 *hfil $10 $1 *vfil rule new icon" icons/WARNING" icon new $10 $1 *hfil $10 $1 *vfil rule new #3 vabox new X" Can't open FTDI" text-label new X" Possible reasons:" text-label new X" • No admin rights" text-label new X" • FTDI not plugged in" text-label new X" • FTDI dll not installed" text-label new #3 vabox new #3 vabox new vfixbox #1 vskips #2 habox new vfixbox #1 hskips $10 $1 *hfill $10 $1 *vfil rule new ^^ S[ true to do-spi dpy show ]S ( MINOS ) X" Connect" button new $10 $1 *hfill $10 $1 *vfil rule new #3 habox new #2 vabox new panel #-2 borderbox ( [dumpend] ) ; class; save-channel-menu implements ( [methodstart] ) ( [methodend] ) : widget ( [dumpstart] ) ^^ S[ 8 0 save-channels 2! filter-comp ch-type! ]S ( MINOS ) X" All" menu-entry new ^^ S[ channel @ dup 1+ swap save-channels 2! filter-comp ch-type! ]S ( MINOS ) X" Channel" menu-entry new ^^ S[ channel @ -2 and dup 2+ swap save-channels 2! filter-comp ch-type! ]S ( MINOS ) X" Stereo" menu-entry new #3 vabox new #2 borderbox ( [dumpend] ) ; class; filter-menu implements ( [methodstart] ) ( [methodend] ) : widget ( [dumpstart] ) ^^ S[ 0 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Peaking" menu-entry new ^^ S[ 8 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Notch" menu-entry new ^^ S[ 1 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Low Shelf" menu-entry new ^^ S[ 2 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" High Shelf" menu-entry new ^^ S[ 3 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Tilt" menu-entry new ^^ S[ 4 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Lowpass" menu-entry new ^^ S[ 9 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Lowpass 2" menu-entry new ^^ S[ 5 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Hipass" menu-entry new ^^ S[ 6 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Bandpass" menu-entry new ^^ S[ 7 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Allpass" menu-entry new ^^ S[ 10 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Lowpass 1stO" menu-entry new ^^ S[ 11 filter-comp ftype# !? filter-comp >ftype! filter-comp update ]S ( MINOS ) X" Hipass 1stO" menu-entry new #12 vabox new #2 borderbox ( [dumpend] ) ; class; filter-comp implements ( [methodstart] ) : file@ ( -- addr u ) file-path @ IF file-path $@ filename get path+file ELSE filename get THEN ; also float also complex : assign ( o -- ) 2 dbscale ! addr ! $50 fitem ! volafter after timestamp ! drop $2000 points #points 0 ?DO 1e 0e I values z! LOOP ; toss toss : addr' ( -- addr ) addr @ fitem @ + $14 - ; : addr? ( -- n m ) addr' addr>n,m ; : >ffreq ( -- ) ffreq# @ addr? swap ffreq swap cells + ! ?shift IF ffreq# @ addr? swap 1 xor ffreq swap cells + ! THEN ; : >fq ( -- ) fq# @ addr? swap fq swap cells + ! ?shift IF fq# @ addr? swap 1 xor fq swap cells + ! THEN ; : >fgain ( -- ) fgain# @ addr? swap fgain swap cells + ! ?shift IF fgain# @ addr? swap 1 xor fgain swap cells + ! THEN ; : >fgain2 ( -- ) fgain2# @ addr? swap fgain2 swap cells + ! ?shift IF fgain2# @ addr? swap 1 xor fgain2 swap cells + ! THEN ; : >fgain3 ( -- ) fgain3# @ addr? swap fgain3 swap cells + ! ?shift IF fgain3# @ addr? swap 1 xor fgain3 swap cells + ! THEN ; : >ftype ( -- ) ftype# @ addr? swap ftype swap cells + ! ?shift IF ftype# @ addr? swap 1 xor ftype swap cells + ! THEN ; l" Hipass 1stO" l" Lowpass 1stO" l" Lowpass 2" l" Notch" l" Allpass" l" Bandpass" l" Hipass" l" Lowpass" l" Tilt" l" High Shelf" l" Low Shelf" l" Peaking" Create f-type" , , , , , , , , , , , , : >ftype! ( -- ) ftype# @ cells f-type" + @ locale@ filter-type assign ( ftype# @ 8 >= IF gainbox -flip ELSE gainbox +flip THEN ) ; : coeff># ( -- ) [FP a0 f@ 1/f fdup gain2 f@ f* gain3@ f>r fdup b2 f@ f* fr@ f* b2# assign fdup b1 f@ f* b1# assign fdup b0 f@ f* fr> f* b0# assign fdrop fnegate fdup a2 f@ f* a2# assign a1 f@ f* a1# assign FP] ; : coeff>## ( -- ) [FP a0 f@ 1/f fdup gain2 f@ f* gain3@ f>r fdup b2 f@ f* fr@ f* cf>s s>d b2## assign fdup b1 f@ f* cf>s s>d b1## assign fdup b0 f@ f* fr> f* cf>s s>d b0## assign fdrop fnegate fdup a2 f@ f* cf>s s>d a2## assign a1 f@ f* cf>s s>d a1## assign FP] ; : >filter ( n m -- ) over fgain over cells + @ fgain# ! over fq over cells + @ fq# ! over ffreq over cells + @ ffreq# ! over ftype over cells + @ ftype# ! over fgain2 over cells + @ fgain2# ! over fgain3 over cells + @ fgain3# ! 2drop fq# @ 0< q/bw ! ; : coeff>hex ( -- ) coeff> 5 0 DO cf>s s>d LOOP b2## assign b1## assign b0## assign a2## assign a1## assign ; : coeff>float ( -- ) coeff> f>r f>r f>r f>r f>r fr> b2# assign fr> b1# assign fr> b0# assign fr> a2# assign fr> a1# assign ; : >sliders ( -- ) fitem @ 0< ?EXIT addr? swap #ch #c coeff>hex coeff>float addr? >filter ffreq# @ ffreq% assign fq# @ abs fq% assign fgain# @ fgain% assign fgain2# @ fgain2% assign fgain3# @ fgain3% assign >ftype >ftype! filterbox draw ; : do-plot addr? swap #ch #c $2000 points #points impulse-responses fft fftplot draw status-bar draw ; : plot timestamp @ timeout? IF do-plot volafter after timestamp ! ELSE ['] do-plot ^ volafter after dpy schedule THEN ; : transfer-coeffs ( n -- ) 8 0 DO dup 1 xor I = ?shift and over I = or links I bit@ or IF I addr? swap #ch dup #c n,m>addr' coeff swap coeff! THEN LOOP drop ; : coeff-rest ( -- ) addr? drop transfer-coeffs ; : coeff-set ( b2 b1 b0 a2 a1 -- ) addr? swap #ch #c f>coeff coeff-rest ; : #>coeff ( -- ) [FP b2# get b1# get b0# get a2# get a1# get coeff-set plot FP] ; : ##>coeff ( -- ) [FP a1## get a2## get b0## get b1## get b2## get 5 0 DO drop s>cf LOOP coeff-set plot FP] ; : lock-copy addr? drop 8 0 DO dup 1 xor I = ?shift and links I bit@ or IF dup fgain I fgain eqs cells move dup fq I fq eqs cells move dup ffreq I ffreq eqs cells move dup ftype I ftype eqs cells move dup fgain2 I fgain2 eqs cells move dup fgain3 I fgain3 eqs cells move eqs 0 DO J I filt>coeff LOOP THEN LOOP drop ; : srate-scale ( -- ) addr @ >srate sample-rate f@ f2/ f>s 10 - ffreq% callback with tooltip feed with scale-do max ! endwith endwith ffreq% !resized ffreq% resized ; : update ( -- ) >ffreq >fq >fgain >fgain2 >fgain3 >ftype save-channels 2@ DO eqs 0 DO J I filt>coeff LOOP LOOP lock-copy addr? filt>coeff coeff-rest coeff># coeff>## srate-scale plot ; : ch-type! ( -- ) save-channels 2@ - case 1 of x" Channel" endof 2 of x" Stereo" endof 8 of x" All" endof endcase save-ch-type assign ; : ?lr ( n -- n' ) addr @ $80 and 0= IF $10 + THEN ; : >save ( -- ) conf 4 ?lr bit@ save-xo ! conf 5 ?lr bit@ save-eq ! conf 6 ?lr bit@ save-ic ! ; : >conf ( -- ) addr @ $1800 and CONF0 + eq@ $00780078 xor conf ! ; : conf! ( -- ) conf @ $00780078 xor addr @ $1800 and CONF0 + spi! ; : hide ^ dpy cleanup super hide ; : show >sliders >conf srate-scale super show updated @ update# @ <> IF '$ 0 a1## keyed '$ 0 a2## keyed '$ 0 b0## keyed '$ 0 b1## keyed '$ 0 b2## keyed addr @ >srate sample-rate f@ srate assign volafter 2/ after timestamp ! plot ELSE srate get sample-rate f! THEN ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TN[ $14 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" XO 0" rbutton new ^^ TN[ $19 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" XO 1" rbutton new ^^ TN[ $1E fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" XO 2" rbutton new ^^ TN[ $23 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" XO 3" rbutton new ^^ TN[ $28 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 0" rbutton new ^^ TN[ $2D fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 1" rbutton new ^^ TN[ $32 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 2" rbutton new ^^ TN[ $37 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 3" rbutton new ^^ TN[ $3C fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 4" rbutton new ^^ TN[ $41 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 5" rbutton new ^^ TN[ $46 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 6" rbutton new ^^ TN[ $4B fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" EQ 7" rbutton new ^^ TN[ $50 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" IC 0" rbutton new ^^ TN[ $55 fitem ]T[ ( MINOS ) >sliders ]TN ( MINOS ) X" IC 1" rbutton new #14 varbox new hfixbox vfixbox #-2 borderbox CV[ outer with addr? endwith drop 3 backcolor 2 eqs 2* steps clear eqs 0 DO 0 I 2* home! dup ftype Ith dup 1 and $FF * swap dup 2 and $FF * swap dup 4 and $FF * swap 4 >= >r rgb> fillcolor r> over fgain Ith 0<> or IF square fill THEN LOOP drop ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $8 $0 *hfil $0 $1 *vfil canvas new ^^bind status-bar X" Filter Designer" text-label new X" Link to CH" text-label new ^^ TB[ links 0 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 0" flipbutton new ^^ TB[ links 1 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 1" flipbutton new ^^ TB[ links 2 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 2" flipbutton new ^^ TB[ links 3 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 3" flipbutton new ^^ TB[ links 4 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 4" flipbutton new ^^ TB[ links 5 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 5" flipbutton new ^^ TB[ links 6 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 6" flipbutton new ^^ TB[ links 7 ]T[ ( MINOS ) lock-copy ]TB ( MINOS ) X" 7" flipbutton new #9 habox new hfixbox 0.00000e0 ]F ( MINOS ) ^^ SF[ srate get 108e6 fover 1e fmax f/ f>s 512 4096 within IF sample-rate f@ fover sample-rate f! 1e f~ 0= IF update THEN update# @ updated ! ELSE fdrop THEN ]SF ( MINOS ) X" Srate" infotextfield new ^^bind srate ^^ S[ addr @ >srate sample-rate f@ srate assign update fitem push eqs 0 DO I 5 * $14 + fitem ! addr? drop transfer-coeffs LOOP ]S ( MINOS ) X" Reload" button new #2 habox new hfixbox #3 habox new #1 hskips T" " ^^ ST[ ]ST ( MINOS ) X" File:" infotextfield new ^^bind filename ^^ S[ wini/o s" Load Coeff file" s" " file-path @ IF file-path $@ ELSE s" *.coeff" THEN ^ S[ 2swap file-path $! filename assign ]S fsel-action ]S ( MINOS ) TT" Open file selector" icon" icons/diropen" icon-but new #1 habox new hfixbox #2 habox new $0 $1 *hfilll $0 $1 *vfilll rule new ^^ S[ $1000 dup NewTask activate fhandle off wini/o base push decimal fclearstack file@ included status-bar draw >sliders plot ]S ( MINOS ) TT" Load file above" X" Load" button new ^^ S[ $1000 dup NewTask activate fhandle off wini/o file@ check-file IF 2drop file@ r/w [ also fileop ] output-file [ previous ] +buffer base push decimal .version >save dump-slider dump-filter $2400 $400 DO I spi-dump-cmem $800 +LOOP eot THEN ]S ( MINOS ) TT" Save coefficients into file above" X" Save" button new ^^ S[ $1000 dup NewTask activate fhandle off wini/o file@ check-file IF 2drop file@ r/w [ also fileop ] output-file [ previous ] +buffer base push decimal .version dump-slider dump-filter $2400 $400 DO I spi-dump-cmemh $800 +LOOP eot THEN ]S ( MINOS ) TT" Save hex coefficients into file above" X" Save hex" button new M: save-channel-menu menu X" Channels:" info-menu new ^^bind save-ch-type ^^ TB[ conf 4 ?lr ]T[ ( MINOS ) ?shift IF conf 4 ?lr bit@ conf 4 ?lr $10 xor bit! THEN conf! ]TB ( MINOS ) X" XO" tbutton new ^^ TB[ conf 5 ?lr ]T[ ( MINOS ) ?shift IF conf 5 ?lr bit@ conf 5 ?lr $10 xor bit! THEN conf! ]TB ( MINOS ) X" EQ" tbutton new ^^ TB[ conf 6 ?lr ]T[ ( MINOS ) ?shift IF conf 6 ?lr bit@ conf 6 ?lr $10 xor bit! THEN conf! ]TB ( MINOS ) X" IC" tbutton new #3 habox new hfixbox $0 $1 *hfilll $0 $1 *vfill rule new #7 habox new #1 hskips M: filter-menu menu X" Type" info-menu new ^^bind filter-type ^^ S[ f-init addr? nip cells >r [[ 111 111 111 111 111 111 111 111 111 111 111 111 100 100 ]] r@ + @ [[ 31 31 62 125 250 500 1000 2000 4000 8000 16000 16000 440 440 ]] r@ + @ [[ 1 0 0 0 0 0 0 0 0 0 0 2 0 0 ]] r@ + @ rdrop >r >r >r [[ 0 r> r> r> ]] addr' filter! F[[ !0 !0 !1 !0 !0 ]]F addr' coeff! >sliders plot ]S ( MINOS ) X" Reset" button new #2 habox new #1 hskips X" F" text-label new ^^ TV[ q/bw ]T[ ( MINOS ) fq# @ 0.01e fm* fdup f0< IF bw>q? ELSE q>bw? THEN 100 fm* f>s &1000 min -&1000 max dup fq# ! update abs fq% assign fq% draw ]TV ( MINOS ) X" Q" T" BW" togglebutton new X" G" text-label new #3 vatbox new hfixbox ^^ #440 #99990 SC[ ( pos -- ) ffreq# !? update ]SC ( MINOS ) TT" Frequency" hscaler new ^^bind ffreq% #10 SC# ^^ #100 #999 SC[ ( pos -- ) q/bw @ IF negate THEN fq# !? update ]SC ( MINOS ) TT" Q" hscaler new ^^bind fq% #1 SC# #1 #100 SC*/ ^^ #0 #600 SC[ ( pos -- ) fgain# !? update ]SC ( MINOS ) TT" Gain" hscaler new ^^bind fgain% #-400 SC# #1 #10 SC*/ #3 vabox new #2 habox new ^^bind gainbox #1 hskips #-2 borderbox 0 -1 flipper X" Float" topindex new ^^bind float-ti 0 0 flipper X" Hex" topindex new ^^bind hex-ti topglue new #3 harbox new vfixbox 1.00000e0 ]F ( MINOS ) ^^ SF[ ( #>coeff ) b0# get cf>s s>d b0## assign ]SF ( MINOS ) X" b0" tableinfotextfield new ^^bind b0# 0.00000e0 ]F ( MINOS ) ^^ SF[ ( #>coeff ) b1# get cf>s s>d b1## assign ]SF ( MINOS ) X" b1" tableinfotextfield new ^^bind b1# 0.00000e0 ]F ( MINOS ) ^^ SF[ ( #>coeff ) b2# get cf>s s>d b2## assign ]SF ( MINOS ) X" b2" tableinfotextfield new ^^bind b2# #3 hatbox new ^^ S[ #>coeff ]S ( MINOS ) X" Recalc" button new 0.00000e0 ]F ( MINOS ) ^^ SF[ ( #>coeff ) a1# get cf>s s>d a1## assign ]SF ( MINOS ) X" -a1" tableinfotextfield new ^^bind a1# 0.00000e0 ]F ( MINOS ) ^^ SF[ ( #>coeff ) a2# get cf>s s>d a2## assign ]SF ( MINOS ) X" -a2" tableinfotextfield new ^^bind a2# #3 hatbox new #2 vabox new #1 habox new dup ^^ with C[ float-ti ]C ( MINOS ) endwith #268435456. ]N ( MINOS ) ^^ SN[ b0## get drop s>cf b0# assign ]SN ( MINOS ) X" b0" infotextfield new ^^bind b0## #0. ]N ( MINOS ) ^^ SN[ b1## get drop s>cf b1# assign ]SN ( MINOS ) X" b1" infotextfield new ^^bind b1## #0. ]N ( MINOS ) ^^ SN[ b2## get drop s>cf b2# assign ]SN ( MINOS ) X" b2" infotextfield new ^^bind b2## #3 hatbox new ^^ S[ ##>coeff coeff>float ]S ( MINOS ) X" Recalc" button new #0. ]N ( MINOS ) ^^ SN[ a1## get drop s>cf a1# assign ]SN ( MINOS ) X" -a1" infotextfield new ^^bind a1## #0. ]N ( MINOS ) ^^ SN[ a2## get drop s>cf a2# assign ]SN ( MINOS ) X" -a2" infotextfield new ^^bind a2## #3 hatbox new #2 vabox new ^^bind hexbox #1 habox new flipbox dup ^^ with C[ hex-ti ]C ( MINOS ) endwith #2 habox new $10 noborderbox #2 borderbox #2 vabox new #1 habox new #3 vabox new #1 vskips #1 vabox new X" Gain" text-label new #1 habox new vfixbox ^^ #0 #400 SC[ ( pos -- ) fgain2# !? update ]SC ( MINOS ) vscaler new ^^bind fgain2% #-200 SC# #1 #10 SC*/ #2 vabox new ^^bind g2box X" GainDC" text-label new #1 habox new vfixbox ^^ #0 #400 SC[ ( pos -- ) fgain3# !? update ]SC ( MINOS ) vscaler new ^^bind fgain3% #-200 SC# #1 #10 SC*/ #2 vabox new ^^bind g3box #2 habox new ^^bind g23box #-2 borderbox #2 habox new #1 hskips #4 vabox new ^^bind filterbox panel #3 habox new clipper new D[ CV[ overflow @ IF $FF $0 $0 rgb> ELSE $D THEN backcolor clear 200e outer with dbscale @ endwith fm/ fft-plot ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $10 $1 *hfilll $10 $1 *vfilll canvas new ^^bind fftplot #1 habox new ]D ( MINOS ) ^^ #2 #11 SC[ ( pos -- ) dbscale ! plot ]SC ( MINOS ) TT" dB per scale" vscaler new #1 SC# #2 habox new #2 vabox new ( [dumpend] ) ; class; vols-comp implements ( [methodstart] ) : assign ( o -- ) drop ; : reload-ctl STCTL0 ctls 8 bounds DO dup stamp@ 16 rshift $0101 xor I w! $800 + 2 +LOOP drop ; : update-ctl STCTL0 ctls 8 bounds DO I w@ $0101 xor over spiw! $800 + 2 +LOOP drop ; : ramp-update ramps @ $01FF0000 xor VRD spi! ; : rampt-update rampt @ VRT spiw! ; : show reload-ctl VRD vol@ $01FF0000 xor ramps ! VRT vol@ 16 rshift $0F00 and dup rampt ! 8 rshift ramp-timing assign super show ; ( [methodend] ) : widget ( [dumpstart] ) X" All" text-label new #1 habox new vfixbox ^^ CP[ MVOLT ]CP ( MINOS ) mvol-comp new #1 habox new ^^ TB[ ramps &24 ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^bind ramp ^^ 0 T[ ramps @ $FF00 or ramps ! smutes draw ramp-update ][ ( MINOS ) ramps @ $FFFF00FF and ramps ! smutes draw ramp-update ]T ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^bind smute ^^ 0 T[ ramps @ $FF or ramps ! shards draw ramp-update ][ ( MINOS ) ramps @ $FFFFFF00 and ramps ! shards draw ramp-update ]T ( MINOS ) TT" Force volume changes independent of zero crossing point" X" hard" flipbutton new ^^ 0 T[ ctls 8 bounds DO I c@ $02 or I c! LOOP update-ctl bons draw ][ ( MINOS ) ctls 8 bounds DO I c@ $FD and I c! LOOP update-ctl bons draw ]T ( MINOS ) TT" Bridge" X" On" flipbutton new ^^ -1 T[ ctls 8 bounds DO I c@ $01 or I c! LOOP update-ctl bfbs draw ][ ( MINOS ) ctls 8 bounds DO I c@ $FE and I c! LOOP update-ctl bfbs draw ]T ( MINOS ) TT" Feedback" X" FB" flipbutton new ^^ #0 #15 SC[ ( pos -- ) 8 lshift rampt !? rampt-update ]SC ( MINOS ) TT" Ramp Timing" hscaler new ^^bind ramp-timing #6 vabox new vfixbox #3 vabox new X" CH0" text-label new X" CH1" text-label new X" CH2" text-label new X" CH3" text-label new X" CH4" text-label new X" CH5" text-label new X" CH6" text-label new X" CH7" text-label new #8 hatbox new vfixbox ^^ CP[ VOLT0 ]CP ( MINOS ) vol-comp new ^^ CP[ VOLT1 ]CP ( MINOS ) vol-comp new ^^ CP[ VOLT2 ]CP ( MINOS ) vol-comp new ^^ CP[ VOLT3 ]CP ( MINOS ) vol-comp new #4 habox new ^^ TB[ ramps old-version? IF &23 ELSE &16 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^ TB[ ramps old-version? IF &22 ELSE &17 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^ TB[ ramps old-version? IF &21 ELSE &18 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^ TB[ ramps old-version? IF &20 ELSE &19 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^ TB[ ramps old-version? IF &19 ELSE &20 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^ TB[ ramps old-version? IF &18 ELSE &21 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^ TB[ ramps old-version? IF &17 ELSE &22 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new ^^ TB[ ramps old-version? IF &16 ELSE &23 THEN ]T[ ( MINOS ) ramp-update ]TB ( MINOS ) TT" Ramp Disable" X" Ramp" flipbutton new #8 habox new ^^bind rampsx vfixbox ^^ TB[ ramps &8 ]T[ ( MINOS ) ?shift IF ramps &8 bit@ ramps &9 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^ TB[ ramps &9 ]T[ ( MINOS ) ?shift IF ramps &9 bit@ ramps &8 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^ TB[ ramps &10 ]T[ ( MINOS ) ?shift IF ramps &10 bit@ ramps &11 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^ TB[ ramps &11 ]T[ ( MINOS ) ?shift IF ramps &11 bit@ ramps &10 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^ TB[ ramps &12 ]T[ ( MINOS ) ?shift IF ramps &12 bit@ ramps &13 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^ TB[ ramps &13 ]T[ ( MINOS ) ?shift IF ramps &13 bit@ ramps &12 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^ TB[ ramps &14 ]T[ ( MINOS ) ?shift IF ramps &14 bit@ ramps &15 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new ^^ TB[ ramps &15 ]T[ ( MINOS ) ?shift IF ramps &15 bit@ ramps &14 bit! smutes draw THEN ramp-update ]TB ( MINOS ) TT" Soft mute" X" Mute" flipbutton new #8 habox new ^^bind smutes vfixbox ^^ TB[ ramps &0 ]T[ ( MINOS ) ?shift IF ramps &0 bit@ ramps &1 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new ^^ TB[ ramps &1 ]T[ ( MINOS ) ?shift IF ramps &1 bit@ ramps &0 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new ^^ TB[ ramps &2 ]T[ ( MINOS ) ?shift IF ramps &2 bit@ ramps &3 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new ^^ TB[ ramps &3 ]T[ ( MINOS ) ?shift IF ramps &3 bit@ ramps &2 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new ^^ TB[ ramps &4 ]T[ ( MINOS ) ?shift IF ramps &4 bit@ ramps &5 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new ^^ TB[ ramps &5 ]T[ ( MINOS ) ?shift IF ramps &5 bit@ ramps &4 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new ^^ TB[ ramps &6 ]T[ ( MINOS ) ?shift IF ramps &6 bit@ ramps &7 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new ^^ TB[ ramps &7 ]T[ ( MINOS ) ?shift IF ramps &7 bit@ ramps &6 bit! shards draw THEN ramp-update ]TB ( MINOS ) X" hard" flipbutton new #8 hatbox new ^^bind shards vfixbox ^^ TB[ ctls &9 ]T[ ( MINOS ) ?shift IF ctls &9 bit@ ctls &1 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls &1 ]T[ ( MINOS ) ?shift IF ctls &1 bit@ ctls &9 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 25 ]T[ ( MINOS ) ?shift IF ctls &25 bit@ ctls &17 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 17 ]T[ ( MINOS ) ?shift IF ctls &17 bit@ ctls &25 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 41 ]T[ ( MINOS ) ?shift IF ctls &41 bit@ ctls &33 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 33 ]T[ ( MINOS ) ?shift IF ctls &33 bit@ ctls &41 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 57 ]T[ ( MINOS ) ?shift IF ctls &57 bit@ ctls &49 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 49 ]T[ ( MINOS ) ?shift IF ctls &49 bit@ ctls &57 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new #8 hatbox new ^^bind bons vfixbox ^^ TB[ ctls &8 ]T[ ( MINOS ) ?shift IF ctls &8 bit@ ctls &0 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new ^^ TB[ ctls &0 ]T[ ( MINOS ) ?shift IF ctls &0 bit@ ctls &8 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new ^^ TB[ ctls &24 ]T[ ( MINOS ) ?shift IF ctls &24 bit@ ctls &16 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new ^^ TB[ ctls &16 ]T[ ( MINOS ) ?shift IF ctls &16 bit@ ctls &24 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new ^^ TB[ ctls &40 ]T[ ( MINOS ) ?shift IF ctls &40 bit@ ctls &32 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new ^^ TB[ ctls &32 ]T[ ( MINOS ) ?shift IF ctls &32 bit@ ctls &40 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new ^^ TB[ ctls &56 ]T[ ( MINOS ) ?shift IF ctls &56 bit@ ctls &48 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new ^^ TB[ ctls &48 ]T[ ( MINOS ) ?shift IF ctls &48 bit@ ctls &56 bit! bfbs draw THEN update-ctl ]TB ( MINOS ) X" FB" flipbutton new #8 hatbox new ^^bind bfbs vfixbox X" Ramp Timing" text-label new $0 $1 *hfil $0 $1 *vfil rule new ^^ #0 #10 SC[ ( pos -- ) drop ]SC ( MINOS ) hscaler new #1 habox new flipbox #3 habox new #8 vabox new #2 habox new #1 hskips #1 vabox new ( [dumpend] ) ; class; confx-comp implements ( [methodstart] ) : assign ( o -- ) drop ; ( [methodend] ) : widget ( [dumpstart] ) X" CH0" text-label new X" CH1" text-label new X" CH2" text-label new X" CH3" text-label new X" CH4" text-label new X" CH5" text-label new X" CH6" text-label new X" CH7" text-label new #8 hatbox new vfixbox ^^ CP[ ENABLE0 ]CP ( MINOS ) config-comp new ^^bind conf0x ^^ CP[ ENABLE1 ]CP ( MINOS ) config-comp new ^^bind conf1x ^^ CP[ ENABLE2 ]CP ( MINOS ) config-comp new ^^bind conf2x ^^ CP[ ENABLE3 ]CP ( MINOS ) config-comp new ^^bind conf3x #4 habox new $0 $1 *hfil $0 $1 *vfilll rule new #3 vabox new ( [dumpend] ) ; class; irq-comp implements ( [methodstart] ) : assign drop ; : reload pins@ port ! status@ status ! ; : recolor recursive ALLCHILDS & boxchar @ class? IF boxchar color @ $FFFFFF00 and $80 $FF $80 rgb> or boxchar color ! THEN ; : autoshow recursive reload childs with recolor endwith state-box with recolor endwith check-ok 0= IF ok-button color @ $FFFFFF00 and $FF $80 $80 rgb> or ok-button color ! THEN draw ['] autoshow ^ &500 after dpy schedule ; : clicked 2drop 2drop ; : show autoshow super show ; : hide ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ port 7 ]T[ ( MINOS ) ]TB ( MINOS ) TT" Interrupt pin state" X" IRQ" flipbutton new ^^ TB[ status 5 ]T[ ( MINOS ) ]TB ( MINOS ) TT" EQ interrupt state" X" EQ" flipbutton new ^^ TB[ status 4 ]T[ ( MINOS ) ]TB ( MINOS ) TT" S0 interrupt state" X" S0" flipbutton new ^^ TB[ status 3 ]T[ ( MINOS ) ]TB ( MINOS ) TT" S1 interrupt state" X" S1" flipbutton new ^^ TB[ status 2 ]T[ ( MINOS ) ]TB ( MINOS ) TT" S2 interrupt state" X" S2" flipbutton new ^^ TB[ status 1 ]T[ ( MINOS ) ]TB ( MINOS ) TT" S3 interrupt state" X" S3" flipbutton new ^^ TB[ status 0 ]T[ ( MINOS ) ]TB ( MINOS ) TT" CRC error state" X" CRC" flipbutton new #6 habox new ^^bind state-box ^^ TV[ & check-ok ]T[ ( MINOS ) ]TV ( MINOS ) TT" Read CRC ok" X" KO" T" OK" togglebutton new ^^bind ok-button #3 habox new #1 hskips ( [dumpend] ) ; class; eq2-comp implements ( [methodstart] ) also float also complex : coeffs saddr @ ; : assign addr ! saddr ! drop volafter after timestamp ! $2000 points #points 0 ?DO 1e 0e I values z! LOOP ; : update-addr ( addr -- ) do-update @ 0= IF drop EXIT THEN coeffs dup 14 cells + 14 cells move addr @ $4000 and IF coeffs dup 28 cells + 28 cells move coeffs dup 56 cells + 56 cells move THEN coeff over coeff2! coeff swap $80 + coeff2! ; : do-plot fclearstack $2000 points #points impulse-responses fft fftplot draw ; : plot timestamp @ timeout? IF do-plot volafter after timestamp ! ELSE ['] do-plot ^ volafter after dpy schedule THEN ; : calc-coeffs ( -- ) coeffs slider>gain gain>coeff ; : show do-update off coeffs 0 cells + @ sc0 assign coeffs 1 cells + @ sc1 assign coeffs 2 cells + @ sc2 assign coeffs 3 cells + @ sc3 assign coeffs 4 cells + @ sc4 assign coeffs 5 cells + @ sc5 assign coeffs 6 cells + @ sc6 assign coeffs 7 cells + @ sc7 assign coeffs 8 cells + @ sc8 assign coeffs 9 cells + @ sc9 assign coeffs 10 cells + @ sc10 assign coeffs 11 cells + @ sc11 assign do-update on addr @ >srate calc-coeffs do-plot super show ; : update-coeffs ( coeff n -- ) cells coeffs + !? calc-coeffs 12 0 DO I #c addr @ $5C - I 5 * + update-addr 2 +LOOP plot ; toss toss ( [methodend] ) : widget ( [dumpstart] ) X" low" text-label new X" 31Hz" text-label new X" 62Hz" text-label new X" 125Hz" text-label new X" 250Hz" text-label new X" 500Hz" text-label new X" 1kHz" text-label new X" 2kHz" text-label new X" 4kHz" text-label new X" 8kHz" text-label new X" 16kHz" text-label new X" high" text-label new #12 hatbox new vfixbox ^^ #0 #200 SC[ ( pos -- ) 0 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc0 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 1 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc1 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 2 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc2 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 3 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc3 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 4 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc4 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 5 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc5 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 6 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc6 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 7 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc7 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 8 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc8 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 9 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc9 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 10 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc10 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 11 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc11 #-100 SC# #1 #10 SC*/ $0 $0 *hpix $80 $0 *vpix rule new #13 habox new clipper new D[ CV[ 200e fft-plot ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $10 $1 *hfil $10 $1 *vfil canvas new ^^bind fftplot #1 habox new ]D ( MINOS ) #1 habox new #1 habox new #3 vabox new $0 $1 *hfill $0 $1 *vfill rule new #2 habox new ( [dumpend] ) ; class; eq-comp implements ( [methodstart] ) also float also complex : coeffs saddr @ ; : assign addr ! saddr ! drop volafter after timestamp ! $2000 points #points 0 ?DO 1e 0e I values z! LOOP ; : update-addr ( addr -- ) do-update @ 0= IF drop EXIT THEN ?shift IF coeffs over $80 and IF dup 14 cells - ELSE dup 14 cells + THEN 14 cells move THEN coeff over coeff2! ?shift IF coeff over $80 xor coeff2! THEN drop ; : do-plot fclearstack $2000 points #points impulse-responses fft fftplot draw ; : plot timestamp @ timeout? IF do-plot volafter after timestamp ! ELSE ['] do-plot ^ volafter after dpy schedule THEN ; : calc-coeffs ( -- ) coeffs slider>gain gain>coeff ; : show do-update off coeffs 0 cells + @ sc0 assign coeffs 1 cells + @ sc1 assign coeffs 2 cells + @ sc2 assign coeffs 3 cells + @ sc3 assign coeffs 4 cells + @ sc4 assign coeffs 5 cells + @ sc5 assign coeffs 6 cells + @ sc6 assign coeffs 7 cells + @ sc7 assign coeffs 8 cells + @ sc8 assign coeffs 9 cells + @ sc9 assign coeffs 10 cells + @ sc10 assign coeffs 11 cells + @ sc11 assign do-update on addr @ >srate calc-coeffs do-plot super show ; : update-coeffs ( coeff n -- ) cells coeffs + !? calc-coeffs 12 0 DO I #c addr @ $5C - I 5 * + update-addr 2 +LOOP plot ; toss toss ( [methodend] ) : widget ( [dumpstart] ) X" low" text-label new X" 31Hz" text-label new X" 62Hz" text-label new X" 125Hz" text-label new X" 250Hz" text-label new X" 500Hz" text-label new X" 1kHz" text-label new X" 2kHz" text-label new X" 4kHz" text-label new X" 8kHz" text-label new X" 16kHz" text-label new X" high" text-label new #12 hatbox new vfixbox ^^ #0 #200 SC[ ( pos -- ) 0 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc0 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 1 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc1 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 2 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc2 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 3 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc3 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 4 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc4 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 5 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc5 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 6 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc6 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 7 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc7 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 8 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc8 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 9 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc9 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 10 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc10 #-100 SC# #1 #10 SC*/ ^^ #0 #200 SC[ ( pos -- ) 11 update-coeffs ]SC ( MINOS ) vscaler new ^^bind sc11 #-100 SC# #1 #10 SC*/ $0 $0 *hpix $80 $0 *vpix rule new #13 habox new clipper new D[ CV[ 200e fft-plot ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $10 $1 *hfil $10 $1 *vfil canvas new ^^bind fftplot #1 habox new ]D ( MINOS ) #1 habox new #1 habox new #3 vabox new $0 $1 *hfill $0 $1 *vfill rule new #2 habox new ( [dumpend] ) ; class; mode-comp implements ( [methodstart] ) : assign n ! addr ! bind outer ; : show addr @ @ n @ rshift 3 and data ! super show ; : update data @ 0< ?EXIT data @ n @ lshift addr @ @ 3 n @ lshift invert and or addr @ !? outer update ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TN[ 0 data ]T[ ( MINOS ) update ]TN ( MINOS ) TT" Direct control" X" GPIO_DATA" rbutton new ^^ TN[ 1 data ]T[ ( MINOS ) update ]TN ( MINOS ) TT" Central outputs" X" CENT" rbutton new ^^ TN[ 2 data ]T[ ( MINOS ) update ]TN ( MINOS ) TT" One of each channel: CHANSEL selects bit n" X" OOEC" rbutton new ^^ TN[ 3 data ]T[ ( MINOS ) update ]TN ( MINOS ) TT" One Channel: CHANSEL selects channel n" X" 1CHAN" rbutton new #4 varbox new #-2 borderbox ( [dumpend] ) ; class; gpioconf-comp implements ( [methodstart] ) : assign addr ! drop ; : update addr @ 0= ?EXIT data @ addr @ spi! ; : reload addr @ 0= ?EXIT addr @ spi@ data ! data @ 16 rshift 7 and chansel assign data @ 19 rshift 3 and grpsel assign ; : show reload super show ; ( [methodend] ) : widget ( [dumpstart] ) X" GPIO0" text-label new X" GPIO1" text-label new X" GPIO2" text-label new X" GPIO3" text-label new X" GPIO4" text-label new X" GPIO5" text-label new X" GPIO6" text-label new X" GPIO7" text-label new #8 hatbox new vfixbox ^^ CP[ data 0 ]CP ( MINOS ) mode-comp new ^^ CP[ data 2 ]CP ( MINOS ) mode-comp new ^^ CP[ data 4 ]CP ( MINOS ) mode-comp new ^^ CP[ data 6 ]CP ( MINOS ) mode-comp new ^^ CP[ data 8 ]CP ( MINOS ) mode-comp new ^^ CP[ data 10 ]CP ( MINOS ) mode-comp new ^^ CP[ data 12 ]CP ( MINOS ) mode-comp new ^^ CP[ data 14 ]CP ( MINOS ) mode-comp new #8 hatbox new ^^ TB[ data &21 ]T[ ( MINOS ) update ]TB ( MINOS ) X" allstamp" tbutton new #1 habox new hfixbox ^^ #0 #3 SC[ ( pos -- ) &19 lshift data @ $FFE7FFFF and or data !? update ]SC ( MINOS ) TT" Groupsel" hscaler new ^^bind grpsel ^^ #0 #7 SC[ ( pos -- ) &16 lshift data @ $FFF8FFFF and or data !? update ]SC ( MINOS ) TT" Chansel" hscaler new ^^bind chansel $0 $2 *hfil $0 $1 *vfil rule new #4 habox new panel #3 vabox new ( [dumpend] ) ; class; gpiotime-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ spi@ data ! addr @ 1+ spi@ data cell+ ! data cell+ @ dup 7 and time0 assign 4 rshift dup 7 and scale0 assign 4 rshift dup 7 and time1 assign 4 rshift dup 7 and scale1 assign 4 rshift dup 7 and time2 assign 4 rshift dup 7 and scale2 assign 4 rshift dup 7 and time3 assign 4 rshift dup 7 and scale3 assign drop data @ dup 7 and time4 assign 4 rshift dup 7 and scale4 assign 4 rshift dup 7 and time5 assign 4 rshift dup 7 and scale5 assign 4 rshift dup 7 and time6 assign 4 rshift dup 7 and scale6 assign 4 rshift dup 7 and time7 assign 4 rshift dup 7 and scale7 assign drop ; : show reload super show ; : update addr @ 0= ?EXIT data @ addr @ spi! data cell+ @ addr @ 1+ spi! ; ( [methodend] ) : widget ( [dumpstart] ) X" Debounce scale" text-label new X" Debounce time" text-label new #2 hatbox new vfixbox ^^ #0 #7 SC[ ( pos -- ) 4 lshift data cell+ @ $FFFFFF0F and or data cell+ !? update ]SC ( MINOS ) TT" GPIO0 scale" hscaler new ^^bind scale0 ^^ #0 #7 SC[ ( pos -- ) 0 lshift data cell+ @ $FFFFFFF0 and or data cell+ !? update ]SC ( MINOS ) TT" GPIO0 time" hscaler new ^^bind time0 #2 habox new ^^ #0 #7 SC[ ( pos -- ) 12 lshift data cell+ @ $FFFF0FFF and or data cell+ !? update ]SC ( MINOS ) TT" GPIO1 scale" hscaler new ^^bind scale1 ^^ #0 #7 SC[ ( pos -- ) 8 lshift data cell+ @ $FFFFF0FF and or data cell+ !? update ]SC ( MINOS ) TT" GPIO1 time" hscaler new ^^bind time1 #2 habox new ^^ #0 #7 SC[ ( pos -- ) 20 lshift data cell+ @ $FF0FFFFF and or data cell+ !? update ]SC ( MINOS ) TT" GPIO2 scale" hscaler new ^^bind scale2 ^^ #0 #7 SC[ ( pos -- ) 16 lshift data cell+ @ $FFF0FFFF and or data cell+ !? update ]SC ( MINOS ) TT" GPIO2 time" hscaler new ^^bind time2 #2 habox new ^^ #0 #7 SC[ ( pos -- ) 28 lshift data cell+ @ $0FFFFFFF and or data cell+ !? update ]SC ( MINOS ) TT" GPIO3 scale" hscaler new ^^bind scale3 ^^ #0 #7 SC[ ( pos -- ) 24 lshift data cell+ @ $F0FFFFFF and or data cell+ !? update ]SC ( MINOS ) TT" GPIO3 time" hscaler new ^^bind time3 #2 habox new ^^ #0 #7 SC[ ( pos -- ) 4 lshift data @ $FFFFFF0F and or data !? update ]SC ( MINOS ) TT" GPIO4 scale" hscaler new ^^bind scale4 ^^ #0 #7 SC[ ( pos -- ) 0 lshift data @ $FFFFFFF0 and or data !? update ]SC ( MINOS ) TT" GPIO4 time" hscaler new ^^bind time4 #2 habox new ^^ #0 #7 SC[ ( pos -- ) 12 lshift data @ $FFFF0FFF and or data !? update ]SC ( MINOS ) TT" GPIO5 scale" hscaler new ^^bind scale5 ^^ #0 #7 SC[ ( pos -- ) 8 lshift data @ $FFFFF0FF and or data !? update ]SC ( MINOS ) TT" GPIO5 time" hscaler new ^^bind time5 #2 habox new ^^ #0 #7 SC[ ( pos -- ) 20 lshift data @ $FF0FFFFF and or data !? update ]SC ( MINOS ) TT" GPIO6 scale" hscaler new ^^bind scale6 ^^ #0 #7 SC[ ( pos -- ) 16 lshift data @ $FFF0FFFF and or data !? update ]SC ( MINOS ) TT" GPIO6 time" hscaler new ^^bind time6 #2 habox new ^^ #0 #7 SC[ ( pos -- ) 28 lshift data @ $0FFFFFFF and or data !? update ]SC ( MINOS ) TT" GPIO7 scale" hscaler new ^^bind scale7 ^^ #0 #7 SC[ ( pos -- ) 24 lshift data @ $F0FFFFFF and or data !? update ]SC ( MINOS ) TT" GPIO7 time" hscaler new ^^bind time7 #2 habox new #9 vabox new ( [dumpend] ) ; class; eqirqmask-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ old-version? IF $2000 xor THEN spiw@ data ! addr @ 7 - spi@ irqs ! ; \ : show reload super show ; : update addr @ 0= ?EXIT data @ addr @ spiw! ; : autoshow recursive reload eqirqs draw sdirqs draw gpioirqs draw ['] autoshow ^ volafter after dpy schedule ; : show visible on autoshow super show ; : hide visible off ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &15 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Overflow occured" tbutton new ^^ TB[ data &14 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Sample rate changed" tbutton new ^^ TB[ data &13 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Mixing error left channel" tbutton new ^^ TB[ data &12 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Mixing error right channel" tbutton new #4 vabox new vfixbox doublebuffer new D[ CV[ decimal outer with irqs endwith 8 8 steps clear $ff $FF $00 rgb> drawcolor $ff $7F $00 rgb> fillcolor 16 0 DO I 3 xor 4 /mod 2* swap 2* home! square dup I $10 + bit@ IF fill THEN stroke LOOP drop 1 1 textpos 0 0 0 rgb> drawcolor 8 0 DO I 1+ 1 home! I 0 over 1+ 0 <# # 2drop # 'H hold 'C hold #> text 2 +LOOP dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop irqs @ invert $FFFF0000 and addr @ 7 - spi! reload eqirqs draw ]CK ( MINOS ) $E0 $1 *hfilll $10 $1 *vfil canvas new ^^bind eqirqs #1 habox new ]D ( MINOS ) #2 habox new #1 hskips X" Serial data valid" text-label new ^^ TB[ data 8 ]T[ ( MINOS ) update ]TB ( MINOS ) X" ch01" flipbutton new ^^ TB[ data 9 ]T[ ( MINOS ) update ]TB ( MINOS ) X" ch23" flipbutton new ^^ TB[ data 10 ]T[ ( MINOS ) update ]TB ( MINOS ) X" ch45" flipbutton new ^^ TB[ data 11 ]T[ ( MINOS ) update ]TB ( MINOS ) X" ch67" flipbutton new #4 hatbox new vfixbox doublebuffer new D[ CV[ decimal outer with irqs endwith 16 2 steps clear $ff $FF $00 rgb> drawcolor $ff $7F $00 rgb> fillcolor 8 0 DO I 1 /mod 2* swap 2* home! square dup I 8 + bit@ IF fill THEN stroke LOOP drop 1 1 textpos 0 0 0 rgb> drawcolor 8 0 DO I 2* 1+ 1 home! I 3 and 0 <# # I 4 >= IF 'I ELSE 'V THEN hold #> text LOOP dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop irqs @ invert $0000FF00 and addr @ 7 - spi! reload sdirqs draw ]CK ( MINOS ) $10 $1 *hfil $10 $1 *vfil canvas new ^^bind sdirqs #1 habox new ]D ( MINOS ) X" GPIO" text-label new ^^ TB[ data 0 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 0" flipbutton new ^^ TB[ data 1 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 1" flipbutton new ^^ TB[ data 2 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 2" flipbutton new ^^ TB[ data 3 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 3" flipbutton new ^^ TB[ data 4 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 4" flipbutton new ^^ TB[ data 5 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 5" flipbutton new ^^ TB[ data 6 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 6" flipbutton new ^^ TB[ data 7 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 7" flipbutton new #8 hatbox new vfixbox doublebuffer new D[ CV[ decimal outer with irqs endwith 16 2 steps clear $ff $FF $00 rgb> drawcolor $ff $7F $00 rgb> fillcolor 8 0 DO I 1 /mod 2* swap 2* home! square dup I bit@ IF fill THEN stroke LOOP drop 1 1 textpos 0 0 0 rgb> drawcolor 8 0 DO I 2* 1+ 1 home! I 0 <# # 'O hold 'I hold #> text LOOP dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop irqs @ invert $000000FF and addr @ 7 - spi! reload gpioirqs draw ]CK ( MINOS ) $10 $1 *hfil $10 $1 *vfil canvas new ^^bind gpioirqs #1 habox new ]D ( MINOS ) $0 $1 *hfil $0 $1 *vfilll rule new #8 vabox new ( [dumpend] ) ; class; stirqmask-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ old-version? IF $2000 xor THEN spiw@ data ! irqs addr @ 7 - state@4 states addr @ $F - state@4 ; \ : show reload super show ; : update addr @ 0= ?EXIT data @ addr @ spiw! ; : autoshow recursive reload stampirqs draw ['] autoshow ^ volafter after dpy schedule ; : show visible on autoshow super show ; : hide visible off ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &15 ]T[ ( MINOS ) update ]TB ( MINOS ) X" primary protection shutdown" tbutton new ^^ TB[ data &14 ]T[ ( MINOS ) update ]TB ( MINOS ) X" primary protection trigger" tbutton new ^^ TB[ data &13 ]T[ ( MINOS ) update ]TB ( MINOS ) X" short filtered high active" tbutton new ^^ TB[ data &12 ]T[ ( MINOS ) update ]TB ( MINOS ) X" short filtered low active" tbutton new ^^ TB[ data &11 ]T[ ( MINOS ) update ]TB ( MINOS ) X" short high signal active" tbutton new ^^ TB[ data &10 ]T[ ( MINOS ) update ]TB ( MINOS ) X" short low signal active" tbutton new ^^ TB[ data &9 ]T[ ( MINOS ) update ]TB ( MINOS ) X" max power limiter active" tbutton new ^^ TB[ data &8 ]T[ ( MINOS ) update ]TB ( MINOS ) X" max current limiter active" tbutton new ^^ TB[ data 7 ]T[ ( MINOS ) update ]TB ( MINOS ) X" PTE active" tbutton new ^^ TB[ data 6 ]T[ ( MINOS ) update ]TB ( MINOS ) X" dead time high being used" tbutton new ^^ TB[ data 5 ]T[ ( MINOS ) update ]TB ( MINOS ) X" feedback OK" tbutton new ^^ TB[ data 4 ]T[ ( MINOS ) update ]TB ( MINOS ) X" novaload triggered reduction" tbutton new ^^ TB[ data 3 ]T[ ( MINOS ) update ]TB ( MINOS ) X" in 3e mode" tbutton new ^^ TB[ data 2 ]T[ ( MINOS ) update ]TB ( MINOS ) X" modulation index active" tbutton new ^^ TB[ data 1 ]T[ ( MINOS ) update ]TB ( MINOS ) X" soft clip" tbutton new ^^ TB[ data 0 ]T[ ( MINOS ) update ]TB ( MINOS ) X" hard clip from ZTA" tbutton new #16 vabox new vfixbox doublebuffer new D[ CV[ decimal outer with irqs endwith 32 64 steps clear $ff $FF $00 rgb> drawcolor $ff $7F $00 rgb> fillcolor 128 0 DO I $1F xor 16 /mod 4* swap 4* home! path 0 -4 to 4 0 to 0 4 to -4 0 to dup I bit@ IF fill THEN stroke LOOP drop old-version? 0= IF outer with states endwith $7f $fF $7f rgb> fillcolor 128 0 DO dup I bit@ IF I $1F xor 16 /mod 4* 1+ swap 4* 1+ home! square fill THEN LOOP drop THEN 1 1 textpos 0 0 0 rgb> drawcolor 8 0 DO I 4* 2+ 2 home! I 0 <# # 'H hold 'C hold #> text LOOP dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop 4 0 DO irqs Ith invert addr @ 7 - I + spi! LOOP reload stampirqs draw ]CK ( MINOS ) $E0 $1 *hfilll $10 $1 *vfil canvas new ^^bind stampirqs #1 habox new ]D ( MINOS ) #1 vabox new #2 habox new #1 hskips ( [dumpend] ) ; class; clock-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ spiw@ data ! data @ 8 rshift $F and delay assign ; : update addr @ 0= ?EXIT data @ addr @ spiw! ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &13 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Rext" tbutton new ^^ TB[ data &12 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Flip" tbutton new ^^ TB[ data &8 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Deglitch" tbutton new ^^ #0 #7 SC[ ( pos -- ) 9 lshift data @ $F1FF and or data !? update ]SC ( MINOS ) TT" Delay" hscaler new ^^bind delay #4 hatbox new #1 hskips $0 $1 *hfil $0 $1 *vfil rule new #2 vabox new panel ( [dumpend] ) ; class; gpio-comp implements ( [methodstart] ) : assign addr ! drop ; : recolor boxchar with color @ $FFFFFF00 and swap IF $80 $FF $80 rgb> ELSE defocuscol @ @ $FF and THEN or color ! endwith ; : autoshow recursive data GPIO_DATA spi@2 dir 24 bit@ data0 self recolor dir 25 bit@ data1 self recolor dir 26 bit@ data2 self recolor dir 27 bit@ data3 self recolor dir 28 bit@ data4 self recolor dir 29 bit@ data5 self recolor dir 30 bit@ data6 self recolor dir 31 bit@ data7 self recolor data-bytes draw ['] autoshow ^ volafter after dpy schedule ; : show autoshow super show ; : hide ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) X" GPIO Data" text-label new ^^ TB[ data 24 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 0" flipbutton new ^^bind data0 ^^ TB[ data 25 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 1" flipbutton new ^^bind data1 ^^ TB[ data 26 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 2" flipbutton new ^^bind data2 ^^ TB[ data 27 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 3" flipbutton new ^^bind data3 ^^ TB[ data 28 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 4" flipbutton new ^^bind data4 ^^ TB[ data 29 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 5" flipbutton new ^^bind data5 ^^ TB[ data 30 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 6" flipbutton new ^^bind data6 ^^ TB[ data 31 ]T[ ( MINOS ) data @ GPIO_DATA spi! ]TB ( MINOS ) X" 7" flipbutton new ^^bind data7 #8 hatbox new ^^bind data-bytes $0 $1 *hfilll $0 $1 *vfil rule new #3 hatab new #1 hskips X" GPIO Dir" text-label new ^^ CP[ GPIO_DIR ]CP ( MINOS ) byte-comp new $0 $1 *hfilll $0 $1 *vfil rule new #3 hatab new #1 hskips ^^ CP[ GPIO_DEBOUNCE0 ]CP ( MINOS ) gpiotime-comp new ^^ CP[ GPIO_CONFIG ]CP ( MINOS ) gpioconf-comp new $0 $1 *hfil $0 $1 *vfilll rule new #5 vabox new panel ( [dumpend] ) ; class; byte-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ spiw@ data ! ; : show reload super show ; : update addr @ 0= ?EXIT data @ addr @ spiw! ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data 8 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 0" flipbutton new ^^ TB[ data 9 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 1" flipbutton new ^^ TB[ data 10 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 2" flipbutton new ^^ TB[ data 11 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 3" flipbutton new ^^ TB[ data 12 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 4" flipbutton new ^^ TB[ data 13 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 5" flipbutton new ^^ TB[ data 14 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 6" flipbutton new ^^ TB[ data 15 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 7" flipbutton new #8 hatbox new vfixbox ( [dumpend] ) ; class; irqmask-comp implements ( [methodstart] ) : assign addr ! drop ; ( [methodend] ) : widget ( [dumpstart] ) ^^ CP[ STIRQM ]CP ( MINOS ) stirqmask-comp new #1 habox new ^^ CP[ EQIRQM ]CP ( MINOS ) eqirqmask-comp new #1 habox new #2 vabox new #1 vskips #-2 borderbox ( [dumpend] ) ; class; status-comp implements ( [methodstart] ) : assign addr ! drop ; : update addr @ 0= ?EXIT base push decimal lcond backlog &63 4* cells F move lcond addr @ stamp@4 addr @ 9 - stamp@ srate ! srate @ 16 rshift $FFFF and dup $1F00 <= IF drop s" illegal" ELSE [ also float ] 5 set-precision 108e6 16e f* fm/ ff$ [ previous ] THEN sample assign ; : autoshow recursive visible @ 0= ?EXIT update lcond# draw rcond# draw lpow# draw rpow# draw sample draw ['] autoshow ^ volafter after dpy schedule ; : show visible on autoshow super show ; : hide visible off ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) T" illegal" ^^ ST[ ]ST ( MINOS ) X" Sample Rate" infotextfield new ^^bind sample X" Conductance" text-label new doublebuffer new D[ CV[ decimal 64 4096 steps clear $00 $7F $00 rgb> drawcolor 1 0 textpos outer with lcond endwith 2+ s" LoP " state-plot $FF $00 $00 rgb> drawcolor 1 2 textpos outer with lcond endwith s" HiP " state-plot dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $41 $1 *hfil $80 $1 *vfilll canvas new ^^bind lcond# #1 habox new ]D ( MINOS ) doublebuffer new D[ CV[ decimal 64 4096 steps clear $00 $7F $00 rgb> drawcolor 1 0 textpos outer with rcond endwith 2+ s" LoP " state-plot $FF $00 $00 rgb> drawcolor 1 2 textpos outer with rcond endwith s" HiP " state-plot dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $41 $1 *hfil $80 $1 *vfilll canvas new ^^bind rcond# #1 habox new ]D ( MINOS ) #2 habox new #1 hskips #2 vabox new X" Power" text-label new doublebuffer new D[ CV[ decimal 64 4096 steps clear $00 $7F $00 rgb> drawcolor 1 0 textpos outer with lpower endwith s" Avg " state-plot $FF $00 $00 rgb> drawcolor 1 2 textpos outer with lpower endwith 2+ s" Peak " state-plot dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $41 $1 *hfil $80 $1 *vfilll canvas new ^^bind lpow# #1 habox new ]D ( MINOS ) doublebuffer new D[ CV[ decimal 64 4096 steps clear $00 $7F $00 rgb> drawcolor 1 0 textpos outer with rpower endwith s" Avg " state-plot $FF $00 $00 rgb> drawcolor 1 2 textpos outer with rpower endwith 2+ s" Peag " state-plot dpy draw ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $41 $1 *hfil $80 $1 *vfilll canvas new ^^bind rpow# #1 habox new ]D ( MINOS ) #2 habox new #1 hskips #2 vabox new #3 vabox new #1 vskips #-2 borderbox ( [dumpend] ) ; class; input-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ spi@ dup data ! dup &30 rshift $3 and 1+ tdm assign dup 8 rshift 7 and first assign drop ; : update addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : show updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ #1 #3 SC[ ( pos -- ) 1- &30 lshift data @ $3FFFFFFF and or data !? update ]SC ( MINOS ) TT" TDM channels" vscaler new ^^bind tdm #1 SC# #2 #1 SC*/ ^^ TB[ data &29 ]T[ ( MINOS ) update ]TB ( MINOS ) X" WS Level" T" WS Edge" togglebutton new ^^ TB[ data &28 ]T[ ( MINOS ) update ]TB ( MINOS ) X" WS Pol" flipbutton new ^^ TB[ data &27 ]T[ ( MINOS ) update ]TB ( MINOS ) X" SCK Pol" flipbutton new #3 vabox new #2 habox new vfixbox #1 hskips ^^ TB[ data &16 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 0" flipbutton new ^^ TB[ data &17 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 1" flipbutton new ^^ TB[ data &18 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 2" flipbutton new ^^ TB[ data &19 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 3" flipbutton new ^^ TB[ data &20 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 4" flipbutton new ^^ TB[ data &21 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 5" flipbutton new ^^ TB[ data &22 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 6" flipbutton new ^^ TB[ data &23 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 7" flipbutton new #8 hatbox new ^^ #0 #7 SC[ ( pos -- ) 8 lshift data @ $FFFFF8FF and or data !? update ]SC ( MINOS ) TT" first" hscaler new ^^bind first ^^ -1 T[ $00000000 data @ $F8FFFFFF and or data !? update ][ ( MINOS ) ]T ( MINOS ) X" I²S" rbutton new ^^ 0 T[ $01000000 data @ $F8FFFFFF and or data !? update ][ ( MINOS ) ]T ( MINOS ) X" Left Justified" rbutton new ^^ 0 T[ $02000000 data @ $F8FFFFFF and or data !? update ][ ( MINOS ) ]T ( MINOS ) X" Right Just 16" rbutton new ^^ 0 T[ $03000000 data @ $F8FFFFFF and or data !? update ][ ( MINOS ) ]T ( MINOS ) X" Right Just 20" rbutton new ^^ 0 T[ $04000000 data @ $F8FFFFFF and or data !? update ][ ( MINOS ) ]T ( MINOS ) X" Right Just 24" rbutton new ^^ 0 T[ $05000000 data @ $F8FFFFFF and or data !? update ][ ( MINOS ) ]T ( MINOS ) X" Right Just 32" rbutton new #6 varbox new $0 $1 *hfilll $0 $1 *vfilll rule new #5 vabox new #1 vskips #-2 borderbox ( [dumpend] ) ; class; short-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ stamp@ dup data ! dup $7F and lo assign 8 rshift dup $7F and hi assign 8 rshift dup $7F and f_lo assign 8 rshift dup $7F and f_hi assign 8 rshift drop ; : update addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : show updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &31 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" f_hi" X" on" flipbutton new #1 habox new vfixbox ^^ #0 #127 SC[ ( pos -- ) &24 lshift data @ $80FFFFFF and or data !? update ]SC ( MINOS ) TT" f_hi" vscaler new ^^bind f_hi ^^ TB[ data &23 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" f_lo" X" on" flipbutton new #1 habox new vfixbox ^^ #0 #127 SC[ ( pos -- ) &16 lshift data @ $FF80FFFF and or data !? update ]SC ( MINOS ) TT" f_lo" vscaler new ^^bind f_lo ^^ TB[ data &15 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" lo" X" on" flipbutton new #1 habox new vfixbox ^^ #0 #127 SC[ ( pos -- ) &8 lshift data @ $FFFF80FF and or data !? update ]SC ( MINOS ) TT" lo" vscaler new ^^bind hi ^^ TB[ data &7 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" hi" X" on" flipbutton new #1 habox new vfixbox ^^ #0 #127 SC[ ( pos -- ) &0 lshift data @ $FFFFFF80 and or data !? update ]SC ( MINOS ) TT" hi" vscaler new ^^bind lo #8 vabox new #-1 borderbox ( [dumpend] ) ; class; pte-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ stamp@ dup $00800000 xor data ! dup $FFF and pow assign dup 12 rshift $1F and ep assign dup 17 rshift $7 and rec assign dup 20 rshift $7 and red assign drop ; : update addr @ 0= ?EXIT data @ $00800000 xor addr @ spi! update# @ updated ! ; : show ( -- ) updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &23 ]T[ ( MINOS ) update ]TB ( MINOS ) X" on" flipbutton new #1 habox new vfixbox ^^ #0 #7 SC[ ( pos -- ) 20 lshift data @ $FF8FFFFF and or data !? update ]SC ( MINOS ) TT" red" hscaler new ^^bind red ^^ #0 #7 SC[ ( pos -- ) 17 lshift data @ $FFF1FFFF and or data !? update ]SC ( MINOS ) TT" rec" hscaler new ^^bind rec ^^ #0 #15 SC[ ( pos -- ) 12 lshift data @ $FFFE0FFF and or data !? update ]SC ( MINOS ) TT" ep" hscaler new ^^bind ep $0 $1 *hfil $64 $1 *vfil rule new ^^ #0 #2047 SC[ ( pos -- ) data @ $FFFFF000 and or data !? update ]SC ( MINOS ) TT" power" vscaler new ^^bind pow #2 habox new #5 vabox new #-1 borderbox ( [dumpend] ) ; class; time-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ stamp@ dup data ! dup 7 and rpwm0del assign 8 rshift dup 7 and rdeadtlo assign 4 rshift dup 7 and rdeadthi assign 4 rshift dup 7 and lpwm0del assign 8 rshift dup 7 and ldeadtlo assign 4 rshift dup 7 and ldeadthi assign 4 rshift drop ; : update addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : show updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ #0 #7 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rdeadthi with assign draw endwith THEN &28 lshift data @ $8FFFFFFF and or data !? update ]SC ( MINOS ) TT" Left Dead Time High" hscaler new ^^bind ldeadthi ^^ #0 #7 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rdeadtlo with assign draw endwith THEN &24 lshift data @ $F8FFFFFF and or data !? update ]SC ( MINOS ) TT" Left Dead Time Low" hscaler new ^^bind ldeadtlo ^^ #0 #7 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rpwm0del with assign draw endwith THEN &16 lshift data @ $FFF8FFFF and or data !? update ]SC ( MINOS ) TT" Left PWM0 delay" hscaler new ^^bind lpwm0del #3 vabox new #-1 borderbox ^^ #0 #7 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup ldeadthi with assign draw endwith THEN &12 lshift data @ $FFFF8FFF and or data !? update ]SC ( MINOS ) TT" Right Dead Time High" hscaler new ^^bind rdeadthi ^^ #0 #7 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup ldeadtlo with assign draw endwith THEN &08 lshift data @ $FFFFF8FF and or data !? update ]SC ( MINOS ) TT" Right Dead Time Low" hscaler new ^^bind rdeadtlo ^^ #0 #7 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup lpwm0del with assign draw endwith THEN &00 lshift data @ $FFFFFFF8 and or data !? update ]SC ( MINOS ) TT" Right PWM0 delay" hscaler new ^^bind rpwm0del #3 vabox new #-1 borderbox #2 habox new #-1 borderbox ( [dumpend] ) ; class; stampg-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ spi@ dup data ! dup &19 rshift $7 and mi assign dup &15 rshift $3 and ssr assign dup &12 rshift $7 and ssac assign dup 8 rshift $F and sns0 assign dup 4 rshift $F and sns1 assign dup 0 rshift $F and sns2 assign drop ; : update addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : show updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &27 ]T[ ( MINOS ) update ]TB ( MINOS ) X" iclk" tbutton new ^^ TB[ data &26 ]T[ ( MINOS ) update ]TB ( MINOS ) X" nodummy" tbutton new ^^ TB[ data &25 ]T[ ( MINOS ) update ]TB ( MINOS ) X" fast mute" tbutton new ^^ TB[ data &24 ]T[ ( MINOS ) update ]TB ( MINOS ) X" swapref" tbutton new #4 hatbox new ^^ TB[ data &23 ]T[ ( MINOS ) update ]TB ( MINOS ) X" inv_fb0" tbutton new ^^ TB[ data &22 ]T[ ( MINOS ) update ]TB ( MINOS ) X" inv_fb1" tbutton new ^^ TB[ data &18 ]T[ ( MINOS ) update ]TB ( MINOS ) X" 3e tristate" tbutton new ^^ TB[ data &17 ]T[ ( MINOS ) update ]TB ( MINOS ) X" f_order" tbutton new #4 hatbox new ^^ #0 #7 SC[ ( pos -- ) &19 lshift data @ $FFC7FFFF and or data !? update ]SC ( MINOS ) TT" Modulation Index" vscaler new ^^bind mi ^^ #0 #3 SC[ ( pos -- ) &15 lshift data @ $FFFE7FFF and or data !? update ]SC ( MINOS ) TT" Spread spectrum time addition" hscaler new ^^bind ssr ^^ #0 #7 SC[ ( pos -- ) &12 lshift data @ $FFFF8FFF and or data !? update ]SC ( MINOS ) TT" Spread spectrum shift or edge count" hscaler new ^^bind ssac #2 habox new #1 vskips ^^ #0 #15 SC[ ( pos -- ) &8 lshift data @ $FFFFF0FF and or data !? update ]SC ( MINOS ) TT" sns_mode0" hscaler new ^^bind sns0 ^^ #0 #15 SC[ ( pos -- ) &4 lshift data @ $FFFFFF0F and or data !? update ]SC ( MINOS ) TT" sns_mode1" hscaler new ^^bind sns1 ^^ #0 #15 SC[ ( pos -- ) data @ $FFFFFFF0 and or data !? update ]SC ( MINOS ) TT" sns_mode2" hscaler new ^^bind sns2 #3 habox new #1 vskips #3 habox new #1 hskips #3 vabox new #-1 borderbox ( [dumpend] ) ; class; max-comp implements ( [methodstart] ) : reload addr @ 0= ?EXIT addr @ stamp@ dup data ! old-version? IF dup &10 rshift $FF8 and over &26 rshift 7 and or max_i assign dup &23 rshift 7 and hi_tc assign ELSE dup &16 rshift $FFF and max_i assign dup &13 rshift 7 and hi_tc assign THEN dup &29 rshift 7 and lo_tc assign dup $FFF and max_pow assign drop ; : update addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : assign addr ! drop ; : show updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) $0 $1 *hfil $32 $1 *vfil rule new ^^ #0 #7 SC[ ( pos -- ) &29 lshift data @ $1FFFFFFF and or data !? update ]SC ( MINOS ) TT" lo_tc" vscaler new ^^bind lo_tc ^^ #6 #1 SC[ ( pos -- ) old-version? IF &23 lshift data @ $FC7FFFFF ELSE &13 lshift data @ $FFFF1FFF THEN and or data !? update ]SC ( MINOS ) TT" hi_tc" vscaler new ^^bind hi_tc #6 SC# #3 habox new vfixbox ^^ TB[ data old-version? IF &22 ELSE &28 THEN ]T[ ( MINOS ) update ]TB ( MINOS ) X" Current" flipbutton new #1 habox new vfixbox $0 $1 *hfil $10 $1 *vfil rule new ^^ #0 #4095 SC[ ( pos -- ) old-version? IF dup $FF8 and &10 lshift swap $7 and &26 lshift or data @ $E3C01FFF ELSE $FFF and &16 lshift data @ $F000FFFF THEN and or data !? update ]SC ( MINOS ) vscaler new ^^bind max_i #2 habox new #2 vabox new ^^ TB[ data &12 ]T[ ( MINOS ) update ]TB ( MINOS ) X" Power" flipbutton new #1 habox new vfixbox $0 $1 *hfil $10 $1 *vfil rule new ^^ #0 #4095 SC[ ( pos -- ) data @ $FFFFF000 and or data !? update ]SC ( MINOS ) vscaler new ^^bind max_pow #2 habox new #2 vabox new #2 vabox new #2 vabox new #-1 borderbox ( [dumpend] ) ; class; dac-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ stamp@ data ! data @ &28 rshift 7 and 5 min rdctime assign data @ &24 rshift 7 and 5 min ldctime assign ; : update addr @ 0= ?EXIT data @ 16 rshift addr @ spiw! update# @ updated ! ; : show updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &27 ]T[ ( MINOS ) ?shift IF data &27 bit@ data &31 bit! rdac draw THEN update ]TB ( MINOS ) X" Ldac" tbutton new ^^bind ldac ^^ #0 #4 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rdctime with assign draw endwith THEN dup 4 = IF drop 7 THEN &24 lshift data @ $F8FFFFFF and or data !? update ]SC ( MINOS ) TT" ldctime" hscaler new ^^bind ldctime #2 vabox new #-1 borderbox ^^ TB[ data &31 ]T[ ( MINOS ) ?shift IF data &31 bit@ data &27 bit! ldac draw THEN update ]TB ( MINOS ) X" Rdac" tbutton new ^^bind rdac ^^ #0 #4 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup ldctime with assign draw endwith THEN dup 4 = IF drop 7 THEN &28 lshift data @ $8FFFFFFF and or data !? update ]SC ( MINOS ) TT" rdctime" hscaler new ^^bind rdctime #2 vabox new #-1 borderbox #2 hatbox new #-1 borderbox ( [dumpend] ) ; class; powerc-comp implements ( [methodstart] ) : assign addr ! drop ; : reload addr @ 0= ?EXIT addr @ stamp@ data ! data @ &28 rshift 3 and lpri-sens assign data @ &24 rshift $F and lpnsop-scalar assign data @ &20 rshift 3 and rpri-sens assign data @ &16 rshift $F and rpnsop-scalar assign ; : update addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : show updated @ update# @ <> IF reload update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ #0 #3 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rpri-sens assign rpri-sens draw THEN &28 lshift data @ $CFFFFFFF and or data !? update ]SC ( MINOS ) TT" lpri_sense" hscaler new ^^bind lpri-sens ^^ #0 #15 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rpnsop-scalar assign rpnsop-scalar draw THEN &24 lshift data @ $F0FFFFFF and or data !? update ]SC ( MINOS ) TT" lpnsop_scalar" hscaler new ^^bind lpnsop-scalar #2 vabox new #-1 borderbox ^^ #0 #3 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup lpri-sens assign lpri-sens draw THEN &20 lshift data @ $FFCFFFFF and or data !? update ]SC ( MINOS ) TT" rpri_sense" hscaler new ^^bind rpri-sens ^^ #0 #15 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup lpnsop-scalar assign lpnsop-scalar draw THEN &16 lshift data @ $FFF0FFFF and or data !? update ]SC ( MINOS ) TT" rpnsop_scalar" hscaler new ^^bind rpnsop-scalar #2 vabox new #-1 borderbox #2 hatbox new #-1 borderbox ( [dumpend] ) ; class; stampc-comp implements ( [methodstart] ) : reload-stampc addr @ 0= ?EXIT addr @ stamp@ data ! data @ &20 rshift $3 and pri_mode assign data @ &16 rshift $F and pulse_t assign ; : update-stampc addr @ 0= ?EXIT data @ 16 rshift addr @ spiw! update# @ updated ! ; : assign addr ! drop ; : show updated @ update# @ <> IF reload-stampc update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &31 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" Sampler A res" tbutton new ^^ TB[ data &30 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" Sampler B res" tbutton new ^^ TB[ data &29 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" quick start" tbutton new ^^ TB[ data &28 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" clk off" tbutton new ^^ TB[ data &27 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" i2s out" tbutton new ^^ TB[ data &26 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" BTL" tbutton new ^^ TB[ data &25 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" Left invert" tbutton new ^^ TB[ data &24 ]T[ ( MINOS ) update-stampc ]TB ( MINOS ) X" Right invert" tbutton new ^^ #0 #3 SC[ ( pos -- ) &20 lshift data @ $FFCFFFFF and or data !? update-stampc ]SC ( MINOS ) TT" Pri Mode" hscaler new ^^bind pri_mode ^^ #0 #15 SC[ ( pos -- ) &16 lshift data @ $FFF0FFFF and or data !? update-stampc ]SC ( MINOS ) TT" Pulse Timing" hscaler new ^^bind pulse_t #2 hatbox new #9 vabox new #-2 borderbox ( [dumpend] ) ; class; delay-comp implements ( [methodstart] ) : reload-delay addr @ 0= ?EXIT addr @ eq@ addr @ 1+ eq@ $10 rshift or dup data ! olddata ! data 3 + c@ ldelay assign data 2 + c@ rdelay assign data 1 + c@ $7F and finedelay assign data 1 + c@ $80 and IF testtone set ELSE testtone reset THEN ; : assign addr ! drop ; : update-delay addr @ 0= ?EXIT data 2+ w@ olddata 2+ w@ <> IF data 2+ w@ addr @ spiw! THEN data w@ olddata w@ <> IF data w@ addr @ 1+ spiw! THEN data @ olddata ! update# @ updated ! ; : show updated @ update# @ <> IF reload-delay update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ #0 #255 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rdelay assign rdelay draw THEN data 3 + c!? update-delay ]SC ( MINOS ) TT" Left Delay" vscaler new ^^bind ldelay ^^ #0 #255 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup ldelay assign ldelay draw THEN data 2 + c!? update-delay ]SC ( MINOS ) TT" Right Delay" vscaler new ^^bind rdelay #2 habox new #1 vskips ^^ #0 #127 SC[ ( pos -- ) data 1+ c@ $80 and or data 1+ c! update-delay ]SC ( MINOS ) TT" Fine Delay" hscaler new ^^bind finedelay ^^ TB[ data 15 ]T[ ( MINOS ) update-delay ]TB ( MINOS ) X" test tone" flipbutton new ^^bind testtone #2 vabox new vfixbox #1 vskips #2 vabox new #-2 borderbox ( [dumpend] ) ; class; mix-comp implements ( [methodstart] ) : assign-mix data 0 cells + @ &1000 $10000000 r*/ mix0 assign data 1 cells + @ &1000 $10000000 r*/ mix1 assign data 2 cells + @ &1000 $10000000 r*/ mix2 assign data 3 cells + @ &1000 $10000000 r*/ mix3 assign data 4 cells + @ &1000 $10000000 r*/ mix4 assign data 5 cells + @ &1000 $10000000 r*/ mix5 assign data 6 cells + @ &1000 $10000000 r*/ mix6 assign data 7 cells + @ &1000 $10000000 r*/ mix7 assign ; : assign-gain gain 0 cells + @ &1000 $10000000 r*/ gain0 assign gain 1 cells + @ &1000 $10000000 r*/ gain1 assign gain 2 cells + @ &1000 $10000000 r*/ gain2 assign gain 3 cells + @ &1000 $10000000 r*/ gain3 assign ; : reload-mix addr @ 0= ?EXIT data addr @ spi@8 gain addr @ $69 + spi@4 assign-mix assign-gain ; : assign addr ! drop data 8 cells -1 fill ; : update-mix addr @ 0= ?EXIT data addr @ spi!8 gain addr @ $69 + spi!4 ?shift IF data addr @ $80 xor spi!8 gain addr @ $80 xor $69 + spi!4 THEN update# @ updated ! ; : !-update assign-mix draw ; : !-? ( u addr -- u addr ) ?ctrl 0= ?EXIT 2dup @ - dup 0<= IF drop EXIT THEN negate data 8 cells bounds ?DO over I <> IF dup I @ + 0 max I @ 0> IF I ! ELSE drop THEN THEN cell +LOOP drop ['] !-update ^ &10 after dpy schedule ; : auto-update ( -- ) recursive assign-mix draw ['] auto-update ^ &100 after dpy schedule ; : show ( -- ) updated @ update# @ <> IF reload-mix update# @ updated ! THEN ( auto-update ) super show ; : hide ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) X" LgCH0" text-label new X" LgCH1" text-label new X" LgCH2" text-label new X" LgCH3" text-label new X" LgCH4" text-label new X" LgCH5" text-label new X" LgCH6" text-label new X" LgCH7" text-label new $10 $1 *hfil $10 $1 *vfil rule new X" Gain" text-label new X" XO" text-label new X" EQ" text-label new X" IC" text-label new $0 $1 *hfilll $0 $1 *vfil rule new #14 hatab new vfixbox ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 0 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH0" vscaler new ^^bind mix0 #-1000 SC# #1 #10 SC*/ ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 1 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH1" vscaler new ^^bind mix1 #-1000 SC# #1 #10 SC*/ ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 2 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH2" vscaler new ^^bind mix2 #-1000 SC# #1 #10 SC*/ ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 3 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH3" vscaler new ^^bind mix3 #-1000 SC# #1 #10 SC*/ ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 4 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH4" vscaler new ^^bind mix4 #-1000 SC# #1 #10 SC*/ ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 5 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH5" vscaler new ^^bind mix5 #-1000 SC# #1 #10 SC*/ ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 6 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH6" vscaler new ^^bind mix6 #-1000 SC# #1 #10 SC*/ ^^ #0 #2000 SC[ ( pos -- ) $10000000 &1000 r*/ data 7 cells + !-? !? update-mix ]SC ( MINOS ) TT" LgCH7" vscaler new ^^bind mix7 #-1000 SC# #1 #10 SC*/ $10 $0 *hfil $10 $1 *vfil rule new ^^ #0 #15999 SC[ ( pos -- ) $10000000 &1000 */ gain 0 cells + !? update-mix ]SC ( MINOS ) TT" Output mixer" vscaler new ^^bind gain0 #-8000 SC# #1 #10 SC*/ ^^ #0 #15999 SC[ ( pos -- ) $10000000 &1000 */ gain 1 cells + !? update-mix ]SC ( MINOS ) vscaler new ^^bind gain1 #-8000 SC# #1 #10 SC*/ ^^ #0 #15999 SC[ ( pos -- ) $10000000 &1000 */ gain 2 cells + !? update-mix ]SC ( MINOS ) vscaler new ^^bind gain2 #-8000 SC# #1 #10 SC*/ ^^ #0 #15999 SC[ ( pos -- ) $10000000 &1000 */ gain 3 cells + !? update-mix ]SC ( MINOS ) vscaler new ^^bind gain3 #-8000 SC# #1 #10 SC*/ $0 $1 *hfilll $0 $1 *vfill rule new #14 hatab new #2 vabox new #1 habox new ( [dumpend] ) ; class; fft-comp implements ( [methodstart] ) : assign super assign $100 cells allocate throw l0fft ! $100 cells allocate throw r0fft ! $100 cells allocate throw l1fft ! $100 cells allocate throw r1fft ! $100 cells allocate throw l2fft ! $100 cells allocate throw r2fft ! $100 cells allocate throw l3fft ! $100 cells allocate throw r3fft ! ; : dispose l0fft @ free throw r0fft @ free throw l1fft @ free throw r1fft @ free throw l2fft @ free throw r2fft @ free throw l3fft @ free throw r3fft @ free throw super dispose ; ( [methodend] ) : widget ( [dumpstart] ) ^^ S[ $80 spi-fft l0fft @ fft> fft-canvas draw [: bl 0 left0-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" L0" button new ^^bind left0-fft ^^ S[ $280 spi-fft r0fft @ fft> fft-canvas draw [: bl 0 right0-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" R0" button new ^^bind right0-fft ^^ S[ $880 spi-fft l1fft @ fft> fft-canvas draw [: bl 0 left1-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" L1" button new ^^bind left1-fft ^^ S[ $A80 spi-fft r1fft @ fft> fft-canvas draw [: bl 0 right1-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" R1" button new ^^bind right1-fft ^^ S[ $1080 spi-fft l2fft @ fft> fft-canvas draw [: bl 0 left2-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" L2" button new ^^bind left2-fft ^^ S[ $1280 spi-fft r2fft @ fft> fft-canvas draw [: bl 0 right2-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" R2" button new ^^bind right2-fft ^^ S[ $1880 spi-fft l3fft @ fft> fft-canvas draw [: bl 0 left3-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" L3" button new ^^bind left3-fft ^^ S[ $1A80 spi-fft r3fft @ fft> fft-canvas draw [: bl 0 right3-fft keyed ;] ^ &100 after dpy schedule ]S ( MINOS ) X" R3" button new ^^bind right3-fft ^^ S[ ^ dpy cleanup ]S ( MINOS ) X" Stop" button new #9 hatbox new #1 hskips clipper new D[ CV[ decimal $100 2/ 1+ $2 >ln drop 3 2 >ln drop - dup $280 steps clear $C0 dup dup rgb> drawcolor 0 1 textpos $280 $00 DO 0 I home! I $180 - $40 / 10 * extend dnegate tuck dabs <# s" dB" holds #S rot sign #> text path dup 0 to stroke $40 +LOOP drop 0 $80 0 rgb> drawcolor outer with l0fft endwith @ fft-plot2 $80 $80 0 rgb> drawcolor outer with r0fft endwith @ fft-plot2 $FF 0 0 rgb> drawcolor outer with l1fft endwith @ fft-plot2 $FF $80 $00 rgb> drawcolor outer with r1fft endwith @ fft-plot2 $FF $80 $FF rgb> drawcolor outer with l2fft endwith @ fft-plot2 $80 $80 $80 rgb> drawcolor outer with r2fft endwith @ fft-plot2 $FF 0 $80 rgb> drawcolor outer with l3fft endwith @ fft-plot2 $80 $80 $FF rgb> drawcolor outer with r3fft endwith @ fft-plot2 ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $100 $1 *hfill $100 $1 *vfill canvas new ^^bind fft-canvas #1 habox new ]D ( MINOS ) #2 vabox new panel ( [dumpend] ) ; class; mvol-comp implements ( [methodstart] ) : assign addr ! drop ; : reload-current addr @ 0= ?EXIT addr @ 1+ vol@ 24 rshift cur-volume 1+ c! ; : reload-volume addr @ 0= ?EXIT addr @ vol@ 16 rshift volume w! ; : re-master volume 1+ c@ $B7 - master assign master draw ; : reload reload-volume reload-current re-master level draw ; : auto-reload recursive cur-volume w@ reload-current cur-volume w@ <> IF level draw THEN volume w@ reload-volume volume w@ <> IF re-master THEN ['] auto-reload ^ volafter 2* after dpy schedule ; : update addr @ 0= ?EXIT volume w@ addr @ spiw! update# @ updated ! ; : show ( -- ) updated @ update# @ <> IF reload update# @ updated ! THEN -1 cur-volume w! auto-reload super show ; : hide ( -- ) ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) ^^ #-80 #255 SC[ ( pos -- ) ?ctrl 0= IF dup 0> IF drop 0 dup master assign master draw THEN THEN $B7 + volume 1+ c!? update ]SC ( MINOS ) TT" Master Volume" vscaler new ^^bind master #-183 SC# #5 #10 SC*/ CV[ 1 256 steps clear outer with reload-current cur-volume 1+ c@ endwith 2* dup $FF min $200 over2 - $FF min 0 rgb>fill fillcolor 2/ 0 256 home! path 0 over to 1 0 to 0 over negate to -1 0 to fill drop ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $4 $1 *hfil $10 $1 *vfil canvas new ^^bind level #2 habox new #-2 borderbox ( [dumpend] ) ; class; vol-comp implements ( [methodstart] ) : assign addr ! drop ; : reload-current addr @ 0= ?EXIT addr @ 1+ vol@ dup 24 rshift cur-volume 1+ c! 16 rshift cur-volume c! ; : reload addr @ 0= ?EXIT addr @ vol@ 16 rshift volume w! volume c@ $B7 - r0 assign volume 1+ c@ $B7 - l0 assign ; : update addr @ 0= ?EXIT volume w@ addr @ spiw! update# @ updated ! ; : auto-reload recursive cur-volume w@ reload-current cur-volume w@ <> IF llevel draw rlevel draw THEN ['] auto-reload ^ volafter 2* after dpy schedule ; : show ( -- ) updated @ update# @ <> IF reload update# @ updated ! THEN -1 cur-volume w! auto-reload super show ; : hide ( -- ) ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) ^^ #0 #255 SC[ ( pos -- ) ?ctrl 0= IF dup 0> IF drop 0 dup l0 assign l0 draw THEN THEN ?shift IF kbshift push kbshift @ -2 and kbshift ! dup r0 assign r0 draw THEN $B7 + volume 1+ c!? update ]SC ( MINOS ) TT" Left volume" vscaler new ^^bind l0 #-183 SC# #5 #10 SC*/ CV[ 1 256 steps clear outer with reload-current cur-volume 1+ c@ endwith 2* dup $FF min $200 over2 - $FF min 0 rgb>fill fillcolor 2/ 0 256 home! path 0 over to 1 0 to 0 over negate to -1 0 to fill drop ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $4 $1 *hfil $10 $1 *vfil canvas new ^^bind llevel ^^ #0 #255 SC[ ( pos -- ) ?ctrl 0= IF dup 0> IF drop 0 dup r0 assign r0 draw THEN THEN ?shift IF kbshift push kbshift @ -2 and kbshift ! dup l0 assign l0 draw THEN $B7 + volume c!? update ]SC ( MINOS ) TT" Right volume" vscaler new ^^bind r0 #-183 SC# #5 #10 SC*/ CV[ 1 256 steps clear outer with reload-current cur-volume c@ endwith 2* dup $FF min $200 over2 - $FF min 0 rgb>fill fillcolor 2/ 0 256 home! path 0 over to 1 0 to 0 over negate to -1 0 to fill drop ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $4 $1 *hfil $10 $1 *vfil canvas new ^^bind rlevel #4 habox new #-2 borderbox ( [dumpend] ) ; class; clip-comp implements ( [methodstart] ) : assign addr ! drop ; \ Lsc1Ltp2Lcp5,Rsc1Rtp2Rcp5,Lgl1Rgl106,00 : reload-clip ( -- ) addr @ 0= ?EXIT addr @ stamp@ dup data ! 16 rshift dup $1F and rcps assign 5 rshift dup 3 and rtps assign 3 rshift dup $1F and lcps assign 5 rshift dup 3 and ltps assign 3 rshift drop update# @ updated ! ; : update addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : show ( -- ) updated @ update# @ <> IF reload-clip update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ data &31 ]T[ ( MINOS ) ?shift IF data &31 bit@ data &23 bit! rbox draw THEN update ]TB ( MINOS ) TT" Progressive Clip" X" PC" flipbutton new ^^ TB[ data &15 ]T[ ( MINOS ) ?shift IF data &15 bit@ data &14 bit! rbox draw THEN update ]TB ( MINOS ) TT" Clip Compensation" X" CC" flipbutton new #2 vabox new ^^bind lbox vfixbox $0 $1 *hfil $32 $0 *vpix rule new ^^ #3 #3 SC[ ( pos -- ) &29 lshift data @ $9FFFFFFF and or ?shift IF dup 8 rshift $600000 and swap $FF9FFFFF and or THEN data !? update data @ &21 rshift 3 and rtps assign rtps draw ]SC ( MINOS ) TT" TP" vscaler new ^^bind ltps #2 habox new #2 vabox new #1 vabox new ^^ #6 #31 SC[ ( pos -- ) ?ctrl 0= IF dup 6 < IF drop 6 dup lcps assign lcps draw THEN THEN &24 lshift data @ $E0FFFFFF and or ?shift IF dup 8 rshift $1F0000 and swap $FFE0FFFF and or THEN data !? update data @ &16 rshift $1F and rcps assign rcps draw ]SC ( MINOS ) TT" CP" vscaler new ^^bind lcps #2 vabox new #-1 borderbox ^^ TB[ data &23 ]T[ ( MINOS ) ?shift IF data &23 bit@ data &31 bit! lbox draw THEN update ]TB ( MINOS ) TT" Progressive Clip" X" PC" flipbutton new ^^ TB[ data &14 ]T[ ( MINOS ) ?shift IF data &14 bit@ data &15 bit! lbox draw THEN update ]TB ( MINOS ) TT" Clip Compensation" X" CC" flipbutton new #2 vabox new ^^bind rbox vfixbox $0 $1 *hfil $32 $0 *vpix rule new ^^ #3 #3 SC[ ( pos -- ) &21 lshift data @ $FF9FFFFF and or ?shift IF dup 8 lshift $60000000 and swap $9FFFFFFF and or THEN data !? update data @ &29 rshift 3 and ltps assign ltps draw ]SC ( MINOS ) TT" TP" vscaler new ^^bind rtps #2 habox new #2 vabox new #1 vabox new ^^ #6 #31 SC[ ( pos -- ) ?ctrl 0= IF dup 6 < IF drop 6 dup rcps assign rcps draw THEN THEN &16 lshift data @ $FFE0FFFF and or ?shift IF dup 8 lshift $1F000000 and swap $E0FFFFFF and or THEN data !? update data @ &24 rshift $1F and lcps assign lcps draw ]SC ( MINOS ) TT" CP" vscaler new ^^bind rcps #2 vabox new #-1 borderbox #2 habox new #-1 borderbox ( [dumpend] ) ; class; nova-comp implements ( [methodstart] ) : assign ( o addr -- ) addr ! drop ; : reload-nova ( -- ) addr @ vol@ 16 rshift dup mask 2! addr @ 1+ vol@ dup dup rate 2! dup $F and rrelrs assign 4 rshift dup $F and ratrs assign 4 rshift dup $F and rdels assign 8 rshift dup $F and lrelrs assign 4 rshift dup $F and latrs assign 4 rshift dup $F and ldels assign drop addr @ $100 + stamp@ 16 rshift dup oldcoeff ! dup $7F and dup rcoef ! $38 - rcoefs assign 8 rshift dup $7F and dup lcoef ! $38 - lcoefs assign drop ( dpy draw ) ; : lown ( -- n ) $100 addr @ 10 rshift 6 and lshift ; : rown ( -- n ) $2 addr @ 10 rshift 6 and lshift ; : ff1 ( u -- n ) 0 >r BEGIN dup 1 and 0= WHILE 2/ r> 1+ >r REPEAT drop r> ; : addrI ( n -- addr ) 11 lshift addr @ $E7FF and or ; : >maskpad ( -- ) 4 0 DO I addrI vol@ 16 rshift >w< maskpad I 2* + w! LOOP ; : >coeffpad ( -- ) 4 0 DO I addrI $100 + stamp@ 16 rshift >w< coeffpad I 2* + w! LOOP ; : >ratepad ( -- ) 4 0 DO I addrI 1+ vol@ >l< ratepad I cells + ! LOOP ; : normalize ( flag mask -- ) 8 0 DO dup 1 and IF over maskpad I + c@ or maskpad I + c! THEN 2/ LOOP 2drop ; : denormalize ( flag mask -- ) swap invert $FF and swap over and 8 0 DO dup 1 and IF over maskpad I + c@ and maskpad I + c! THEN 2/ LOOP 2drop ; : mask! ( value addr -- ) &10 rshift 6 and swap >w< swap maskpad + w! ?shift 0= IF mask 2@ swap invert and >r r@ $00FF and IF mask @ $FF and dup normalize THEN r> $FF00 and IF mask @ 8 rshift dup normalize THEN mask 2@ invert and >r r@ $00FF and IF mask @ r@ invert and $FF and r@ $FF and denormalize r@ $FF and mask @ $FF and denormalize THEN r@ $FF00 and IF mask @ r@ invert and 8 rshift r@ 8 rshift denormalize r@ 8 rshift mask @ 8 rshift denormalize THEN rdrop THEN 4 0 DO maskpad I 2* + w@ >w< I addrI spiw! LOOP 0 after 1- volbuffer ! ; : coeffs! ( rate mask -- ) 8 0 DO dup 1 and IF over coeffpad I + c! THEN 2/ LOOP 2drop ; : maskcoeff! ( value addr -- ) over swap &10 rshift 6 and swap >w< swap coeffpad + w! ?shift 0= IF dup oldcoeff @ xor >r r@ $00FF and mask 2@ xor $00FF and or IF dup $FF and mask @ $FF and coeffs! THEN r> $FF00 and mask 2@ xor $FF00 and or IF dup 8 rshift mask @ 8 rshift coeffs! THEN THEN drop 4 0 DO coeffpad I 2* + w@ >w< I addrI $100 + spiw! LOOP 0 after 1- stampbuffer ! ; : rates! ( rate mask -- ) 8 0 DO dup 1 and IF over ratepad I 2* + w! THEN 2/ LOOP 2drop ; : maskrate! ( value addr -- ) &9 rshift $C and swap >l< swap ratepad + ! ?shift 0= IF rate 2@ xor >r r@ $0000FFFF and mask 2@ xor $00FF and or IF rate @ $FFFF and mask @ $FF and rates! THEN r> $FFFF0000 and mask 2@ xor $FF00 and or IF rate @ $10 rshift mask @ 8 rshift rates! THEN THEN 4 0 DO ratepad Ith >l< I addrI 1+ spi! LOOP 0 after 1- volbuffer ! ; : update ( -- ) addr @ 0= ?EXIT \ release complete mask if owner is deselected >maskpad >ratepad >coeffpad mask 2@ lown tuck and 0= >r and 0<> r> and IF mask @ $FF and lown invert 8 rshift and mask ! lown 8 rshift $FF denormalize THEN mask 2@ rown tuck and 0= >r and 0<> r> and IF mask @ rown invert 8 lshift and mask ! rown $FF denormalize THEN mask @ $FF00 and IF lown mask @ 2dup or mask ! and 0= IF draw THEN THEN mask @ $00FF and IF rown mask @ 2dup or mask ! and 0= IF draw THEN THEN mask 2@ <> IF mask @ addr @ mask! THEN rate 2@ <> mask 2@ <> or IF rate @ dup addr @ 1+ maskrate! rate cell+ ! THEN lcoef @ old-version? IF mask @ lown and 0<> $80 and or THEN 8 lshift rcoef @ old-version? IF mask @ rown and 0<> $80 and or THEN or dup oldcoeff @ <> mask 2@ <> or IF dup addr @ $100 + maskcoeff! THEN oldcoeff ! mask @ mask cell+ ! dpy draw update# @ updated ! ; : auto-reload recursive updated @ update# @ <> IF draw THEN ['] auto-reload ^ &100 after dpy schedule ; : hide ^ dpy cleanup super hide ; : draw ( -- ) updated @ update# @ <> IF reload-nova update# @ updated ! THEN :: draw ; : show ( -- ) updated @ update# @ <> IF reload-nova update# @ updated ! THEN super show auto-reload ; ( [methodend] ) : widget ( [dumpstart] ) ^^ TB[ mask &8 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch0" X" 0" flipbutton new ^^ TB[ mask &9 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch1" X" 1" flipbutton new ^^ TB[ mask &10 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch2" X" 2" flipbutton new ^^ TB[ mask &11 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch3" X" 3" flipbutton new ^^ TB[ mask &12 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch4" X" 4" flipbutton new ^^ TB[ mask &13 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch5" X" 5" flipbutton new ^^ TB[ mask &14 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch6" X" 6" flipbutton new ^^ TB[ mask &15 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch7" X" 7" flipbutton new #8 vabox new ^^ #0 #15 SC[ ( pos -- ) 24 lshift rate @ $F0FFFFFF and or rate !? update ]SC ( MINOS ) TT" delay" vscaler new ^^bind ldels ^^ #0 #11 SC[ ( pos -- ) 20 lshift rate @ $FF0FFFFF and or rate !? update ]SC ( MINOS ) TT" attack rate" vscaler new ^^bind latrs ^^ #0 #15 SC[ ( pos -- ) 16 lshift rate @ $FFF0FFFF and or rate !? update ]SC ( MINOS ) TT" release rate" vscaler new ^^bind lrelrs #3 vabox new #2 habox new vfixbox #-1 borderbox ^^ #8 #64 SC[ ( pos -- ) $38 + lcoef !? update ]SC ( MINOS ) TT" coefficient" vscaler new ^^bind lcoefs #-56 SC# #75 #100 SC*/ #2 vabox new #-1 borderbox ^^ TB[ mask &0 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch0" X" 0" flipbutton new ^^ TB[ mask &1 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch1" X" 1" flipbutton new ^^ TB[ mask &2 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch2" X" 2" flipbutton new ^^ TB[ mask &3 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch3" X" 3" flipbutton new ^^ TB[ mask &4 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch4" X" 4" flipbutton new ^^ TB[ mask &5 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch5" X" 5" flipbutton new ^^ TB[ mask &6 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch6" X" 6" flipbutton new ^^ TB[ mask &7 ]T[ ( MINOS ) update ]TB ( MINOS ) TT" enable ch7" X" 7" flipbutton new #8 vabox new ^^ #0 #15 SC[ ( pos -- ) 8 lshift rate @ $FFFFF0FF and or rate !? update ]SC ( MINOS ) TT" delay" vscaler new ^^bind rdels ^^ #0 #11 SC[ ( pos -- ) 4 lshift rate @ $FFFFFF0F and or rate !? update ]SC ( MINOS ) TT" attack rate" vscaler new ^^bind ratrs ^^ #0 #15 SC[ ( pos -- ) 0 lshift rate @ $FFFFFFF0 and or rate !? update ]SC ( MINOS ) TT" release rate" vscaler new ^^bind rrelrs #3 vabox new #2 habox new vfixbox #-1 borderbox ^^ #8 #64 SC[ ( pos -- ) $38 + rcoef !? update ]SC ( MINOS ) TT" coefficient" vscaler new ^^bind rcoefs #-56 SC# #75 #100 SC*/ #2 vabox new #-1 borderbox #2 habox new #-2 borderbox ( [dumpend] ) ; class; tone-comp implements ( [methodstart] ) : assign ( o addr -- ) addr ! drop ; : reload-tone ( -- ) addr @ 0= ?EXIT addr @ eq@ dup data ! dup $3F and dup $20 and negate or rtreblevol assign 6 rshift dup 3 and rtreblefreq assign 2 rshift dup $3F and dup $20 and negate or rbassvol assign 6 rshift dup 3 and rbassfreq assign 2 rshift dup $3F and dup $20 and negate or ltreblevol assign 6 rshift dup 3 and ltreblefreq assign 2 rshift dup $3F and dup $20 and negate or lbassvol assign 6 rshift dup 3 and lbassfreq assign 2 rshift drop ; : update ( -- ) addr @ 0= ?EXIT data @ addr @ spi! update# @ updated ! ; : show updated @ update# @ <> IF reload-tone update# @ updated ! THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) X" Bass" text-label new #1 habox new vfixbox #1 borderbox ^^ #0 #3 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rbassfreq with assign draw endwith THEN &30 lshift data @ $3FFFFFFF and or data !? update ]SC ( MINOS ) TT" Lbassfreq" hscaler new ^^bind lbassfreq ^^ #0 #63 SC[ ( pos -- ) ?shift IF kbshift @ >r -1 kbshift +! dup rbassvol with assign draw endwith r> kbshift ! THEN ?ctrl IF kbshift @ >r kbshift off dup negate $1F min ltreblevol with assign draw endwith r> kbshift ! THEN $3F and &24 lshift data @ $C0FFFFFF and or data !? update ]SC ( MINOS ) TT" Lbassvol" vscaler new ^^bind lbassvol #-32 SC# #5 #10 SC*/ #3 vabox new #1 vskips #-1 borderbox X" Treble" text-label new #1 habox new vfixbox #1 borderbox ^^ #0 #3 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup rtreblefreq with assign draw endwith THEN &22 lshift data @ $FF3FFFFF and or data !? update ]SC ( MINOS ) TT" Ltreblefreq" hscaler new ^^bind ltreblefreq ^^ #0 #63 SC[ ( pos -- ) ?shift IF kbshift @ >r -1 kbshift +! dup rtreblevol with assign draw endwith r> kbshift ! THEN ?ctrl IF kbshift @ >r kbshift off dup negate $1F min lbassvol with assign draw endwith r> kbshift ! THEN $3F and &16 lshift data @ $FFC0FFFF and or data !? update ]SC ( MINOS ) TT" Ltreblevol" vscaler new ^^bind ltreblevol #-32 SC# #5 #10 SC*/ #3 vabox new #1 vskips #-1 borderbox #2 habox new #-1 borderbox X" Bass" text-label new #1 habox new vfixbox #1 borderbox ^^ #0 #3 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup lbassfreq with assign draw endwith THEN &14 lshift data @ $FFFF3FFF and or data !? update ]SC ( MINOS ) TT" Rbassfreq" hscaler new ^^bind rbassfreq ^^ #0 #63 SC[ ( pos -- ) ?shift IF kbshift @ >r -1 kbshift +! dup lbassvol with assign draw endwith r> kbshift ! THEN ?ctrl IF kbshift @ >r kbshift off dup negate $1F min rtreblevol with assign draw endwith r> kbshift ! THEN $3F and &8 lshift data @ $FFFFC0FF and or data !? update ]SC ( MINOS ) TT" Rbassvol" vscaler new ^^bind rbassvol #-32 SC# #5 #10 SC*/ #3 vabox new #1 vskips #-1 borderbox X" Treble" text-label new #1 habox new vfixbox #1 borderbox ^^ #0 #3 SC[ ( pos -- ) ?shift IF kbshift push kbshift off dup ltreblefreq with assign draw endwith THEN &6 lshift data @ $FFFFFF3F and or data !? update ]SC ( MINOS ) TT" Rtreblefreq" hscaler new ^^bind rtreblefreq ^^ #0 #63 SC[ ( pos -- ) ?shift IF kbshift @ >r -1 kbshift +! dup ltreblevol with assign draw endwith r> kbshift ! THEN ?ctrl IF kbshift @ >r kbshift off dup negate $1F min rbassvol with assign draw endwith r> kbshift ! THEN $3F and &0 lshift data @ $FFFFFFC0 and or data !? update ]SC ( MINOS ) TT" Rtreblevol" vscaler new ^^bind rtreblevol #-32 SC# #5 #10 SC*/ #3 vabox new #1 vskips #-1 borderbox #2 habox new #-1 borderbox #2 habox new #-1 borderbox ( [dumpend] ) ; class; config-comp implements ( [methodstart] ) : assign ( o addr -- ) addr ! drop ; : recolor recursive ALLCHILDS & boxchar @ class? IF boxchar color @ $FFFFFF00 and $80 $FF $80 rgb> or boxchar color ! THEN ; : reload-conf ( -- flag ) state @ addr @ 1- eq@ $00780078 xor dup dup state 2! <> ; : auto-update recursive sstates with recolor endwith reload-conf addr @ 4 + eq@ 16 rshift silence @ over dup silence 2! <> or IF draw THEN ['] auto-update ^ &1000 after dpy schedule ; : update addr @ 0= ?EXIT data 2@ <> IF data @ dup data cell+ ! addr @ spi! THEN state 2@ <> IF state @ dup state cell+ ! $00780078 xor addr @ 1- spi! THEN silence 2@ <> IF silence @ dup silence cell+ ! addr @ 4 + spiw! THEN update# @ updated ! ; : sample-rate@ state @ 7 and CASE 0 OF s" 32kHz" ENDOF 1 OF s" 44.1kHz" ENDOF 2 OF s" 48kHz" ENDOF 3 OF s" 88.2kHz" ENDOF 4 OF s" 96kHz" ENDOF 5 OF s" 176kHz" ENDOF 6 OF s" 192kHz" ENDOF 7 OF s" illegal" ENDOF ENDCASE ; : reload-config ( -- ) reload-conf addr @ 4 + eq@ 16 rshift silence @ over dup silence 2! addr @ eq@ data @ over dup data 2! over <> IF 24 rshift dup 3 and h-syn assign 2 rshift dup 7 and h-prefr assign 3 rshift 7 and h-prefl assign ELSE drop THEN over <> IF 8 rshift 7 and tsilence assign sstates draw ELSE drop THEN IF draw THEN ; : show updated @ update# @ <> IF reload-config update# @ updated ! THEN auto-update super show ; : hide ^ dpy cleanup super hide ; ( [methodend] ) : widget ( [dumpstart] ) ^^ #0 #3 SC[ ( pos -- ) &24 lshift data @ $FCFFFFFF and or data !? update ]SC ( MINOS ) TT" Sync Channel" hscaler new ^^bind h-syn #2 #1 SC*/ ^^ #0 #7 SC[ ( pos -- ) dup data @ &29 rshift 7 and - >r &29 lshift data @ $1FFFFFFF and or ?shift IF dup &26 rshift r@ + &26 lshift $1C000000 and swap $E3FFFFFF and or THEN rdrop data !? update ?shift IF data @ &26 rshift 7 and h-prefr assign h-prefr draw THEN ]SC ( MINOS ) TT" Preferred left channel" hscaler new ^^bind h-prefl ^^ #1 #7 SC[ ( pos -- ) dup data @ &26 rshift 7 and - >r &26 lshift data @ $E3FFFFFF and or ?shift IF dup &29 rshift r@ + &29 lshift $E0000000 and swap $1FFFFFFF and or THEN rdrop data !? update ?shift IF data @ &29 rshift 7 and h-prefl assign h-prefl draw THEN ]SC ( MINOS ) TT" preferred right channel" hscaler new ^^bind h-prefr #2 habox new #2 vabox new ^^ TB[ data &16 ]T[ ( MINOS ) ?shift IF data &16 bit@ data &8 bit! rbox draw THEN update ]TB ( MINOS ) TT" Left mask" X" 0" flipbutton new ^^ TB[ data &17 ]T[ ( MINOS ) ?shift IF data &17 bit@ data &9 bit! rbox draw THEN update ]TB ( MINOS ) X" 1" flipbutton new ^^ TB[ data &18 ]T[ ( MINOS ) ?shift IF data &18 bit@ data &10 bit! rbox draw THEN update ]TB ( MINOS ) X" 2" flipbutton new ^^ TB[ data &19 ]T[ ( MINOS ) ?shift IF data &19 bit@ data &11 bit! rbox draw THEN update ]TB ( MINOS ) X" 3" flipbutton new ^^ TB[ data &20 ]T[ ( MINOS ) ?shift IF data &20 bit@ data &12 bit! rbox draw THEN update ]TB ( MINOS ) X" 4" flipbutton new ^^ TB[ data &21 ]T[ ( MINOS ) ?shift IF data &21 bit@ data &13 bit! rbox draw THEN update ]TB ( MINOS ) X" 5" flipbutton new ^^ TB[ data &22 ]T[ ( MINOS ) ?shift IF data &22 bit@ data &14 bit! rbox draw THEN update ]TB ( MINOS ) X" 6" flipbutton new ^^ TB[ data &23 ]T[ ( MINOS ) ?shift IF data &23 bit@ data &15 bit! rbox draw THEN update ]TB ( MINOS ) X" 7" flipbutton new #8 vabox new ^^bind lbox vfixbox ^^ TB[ data &8 ]T[ ( MINOS ) ?shift IF data &8 bit@ data &16 bit! lbox draw THEN update ]TB ( MINOS ) TT" Right mask" X" 0" flipbutton new ^^ TB[ data &9 ]T[ ( MINOS ) ?shift IF data &9 bit@ data &17 bit! lbox draw THEN update ]TB ( MINOS ) X" 1" flipbutton new ^^ TB[ data &10 ]T[ ( MINOS ) ?shift IF data &10 bit@ data &18 bit! lbox draw THEN update ]TB ( MINOS ) X" 2" flipbutton new ^^ TB[ data &11 ]T[ ( MINOS ) ?shift IF data &11 bit@ data &19 bit! lbox draw THEN update ]TB ( MINOS ) X" 3" flipbutton new ^^ TB[ data &12 ]T[ ( MINOS ) ?shift IF data &12 bit@ data &20 bit! lbox draw THEN update ]TB ( MINOS ) X" 4" flipbutton new ^^ TB[ data &13 ]T[ ( MINOS ) ?shift IF data &13 bit@ data &21 bit! lbox draw THEN update ]TB ( MINOS ) X" 5" flipbutton new ^^ TB[ data &14 ]T[ ( MINOS ) ?shift IF data &14 bit@ data &22 bit! lbox draw THEN update ]TB ( MINOS ) X" 6" flipbutton new ^^ TB[ data &15 ]T[ ( MINOS ) ?shift IF data &15 bit@ data &23 bit! lbox draw THEN update ]TB ( MINOS ) X" 7" flipbutton new #8 vabox new ^^bind rbox vfixbox #2 habox new ^^ TB[ state &19 ]T[ ( MINOS ) ?shift IF state &19 bit@ state &3 bit! rbox2 draw THEN update ]TB ( MINOS ) TT" Deemphasis left" X" DE" tbutton new ^^ TB[ state &20 ]T[ ( MINOS ) ?shift IF state &20 bit@ state &4 bit! rbox2 draw THEN update ]TB ( MINOS ) TT" Crossover left" X" XO" tbutton new ^^ TB[ state &21 ]T[ ( MINOS ) ?shift IF state &21 bit@ state &5 bit! rbox2 draw THEN update ]TB ( MINOS ) TT" Parametric Equalizer left" X" EQ" tbutton new ^^ TB[ state &22 ]T[ ( MINOS ) ?shift IF state &22 bit@ state &6 bit! rbox2 draw THEN update ]TB ( MINOS ) TT" Impedance Compensation left" X" IC" tbutton new #4 vabox new ^^bind lbox2 vfixbox ^^ TB[ state &3 ]T[ ( MINOS ) ?shift IF state &3 bit@ state &19 bit! lbox2 draw THEN update ]TB ( MINOS ) TT" Deemphasis right" X" DE" tbutton new ^^ TB[ state &4 ]T[ ( MINOS ) ?shift IF state &4 bit@ state &20 bit! lbox2 draw THEN update ]TB ( MINOS ) TT" Crossover right" X" XO" tbutton new ^^ TB[ state &5 ]T[ ( MINOS ) ?shift IF state &5 bit@ state &21 bit! lbox2 draw THEN update ]TB ( MINOS ) TT" Parametric Equalizer right" X" EQ" tbutton new ^^ TB[ state &6 ]T[ ( MINOS ) ?shift IF state &6 bit@ state &22 bit! lbox2 draw THEN update ]TB ( MINOS ) TT" Impedance Compensation right" X" IC" tbutton new #4 vabox new ^^bind rbox2 vfixbox #2 habox new $0 $1 *hfil $0 $1 *vfil rule new $10 $1 *hfil $10 $1 *vfil rule new CV[ 2 2 steps clear 0 1 home! 0 1 textpos outer with sample-rate@ endwith text ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop ]CK ( MINOS ) $10 $1 *hfil $10 $1 *vfil canvas new ^^bind sample-rate ^^ TB[ silence &11 ]T[ ( MINOS ) ?shift IF silence &11 bit@ silence &12 bit! sbox draw THEN update ]TB ( MINOS ) X" silence" flipbutton new ^^bind lsilence ^^ TB[ silence &12 ]T[ ( MINOS ) ?shift IF silence &12 bit@ silence &11 bit! sbox draw THEN update ]TB ( MINOS ) X" silence" flipbutton new ^^bind rsilence #2 habox new ^^bind sbox ^^ TB[ silence &13 ]T[ ( MINOS ) update ]TB ( MINOS ) X" sstate" flipbutton new ^^bind lsilencet ^^ TB[ silence &14 ]T[ ( MINOS ) update ]TB ( MINOS ) X" sstate" flipbutton new ^^bind rsilencet #2 habox new ^^bind sstates ^^ #0 #7 SC[ ( pos -- ) 8 lshift silence @ $F8FF and or silence !? update ]SC ( MINOS ) TT" silence time" hscaler new ^^bind tsilence #9 vabox new #-2 borderbox ( [dumpend] ) ; class; expert-gui implements ( [methodstart] ) : assign drop ; : dispose -1 audio-guis +! super dispose ; : file@ ( -- addr u ) file-path @ IF file-path $@ filename get path+file ELSE filename get THEN ; : ?verbose verbose-spi IF wini/o page term dpy dpy show ELSE term dpy dpy hide THEN ; : show ( -- ) do-spi IF reconnect -flip THEN super show ; ( [methodend] ) : widget ( [dumpstart] ) 0 0 flipper X" Direct input" topindex new ^^bind file-index 0 0 flipper X" EQ DSPs" topindex new ^^bind eqdsps 0 -1 flipper X" STAMPs" topindex new ^^bind stamps 0 0 flipper X" Global" topindex new ^^bind global 0 0 flipper X" About" topindex new ^^bind abouti topglue new #6 harbox new vfixbox T" " ^^ ST[ ]ST ( MINOS ) X" File:" infotextfield new ^^bind filename ^^ S[ wini/o s" Select SPI file" s" " file-path @ IF file-path $@ ELSE s" *.spi" THEN ^ S[ 2swap file-path $! filename assign ]S fsel-action ]S ( MINOS ) TT" Open file selector" icon" icons/diropen" icon-but new #1 habox new hfixbox #1 hskips #2 habox new $10 $1 *hfill $0 $1 *vfil rule new ^^ S[ $1000 dup NewTask activate wini/o base push decimal file@ included ]S ( MINOS ) TT" Load file above" X" Load" button new ^^ S[ $1000 dup NewTask activate wini/o file@ check-file IF 2drop file@ r/w [ also fileop ] output-file [ previous ] +buffer .version .spi eot THEN ]S ( MINOS ) TT" Save state into file above" X" Save" button new ^^ S[ $1000 dup NewTask activate wini/o file@ check-file IF r/w [ also fileop ] output-file [ previous ] +buffer base push decimal .version dump-slider dump-filter $2400 $400 DO I spi-dump-cmem $800 +LOOP eot THEN ]S ( MINOS ) TT" Save coefficients into file above" X" Coeff" button new ^^ S[ $1000 dup NewTask activate fhandle off wini/o file@ check-file IF 2drop file@ r/w [ also fileop ] output-file [ previous ] +buffer base push decimal .version .spi dump-slider dump-filter $2400 $400 DO I spi-dump-cmem $800 +LOOP eot THEN ]S ( MINOS ) X" Save all" button new ^^ S[ spi-empty ]S ( MINOS ) TT" Clear current status" X" Clear" button new ^^ S[ file@ r/w [ also fileop ] output-file [ previous ] +buffer ]S ( MINOS ) X" Logging" button new $10 $1 *hfill $0 $1 *vfil rule new #8 habox new #1 hskips ^^ S[ wini/o page hex $000 spi-dump128 $080 spi-dump256 ]S ( MINOS ) X" amem0" button new ^^ S[ wini/o page hex $200 spi-dump128 $280 spi-dump256 ]S ( MINOS ) X" bmem0" button new ^^ S[ wini/o page hex $400 spi-dump256 ]S ( MINOS ) X" cmem0" button new ^^ S[ wini/o page hex $400 spi-dump-cmem ]S ( MINOS ) X" coeff0" button new #4 hatbox new #1 hskips ^^ S[ wini/o page hex $800 spi-dump128 $880 spi-dump256 ]S ( MINOS ) X" amem1" button new ^^ S[ wini/o page hex $A00 spi-dump128 $A80 spi-dump256 ]S ( MINOS ) X" bmem1" button new ^^ S[ wini/o page hex $C00 spi-dump256 ]S ( MINOS ) X" cmem1" button new ^^ S[ wini/o page hex $C00 spi-dump-cmem ]S ( MINOS ) X" coeff1" button new #4 hatbox new #1 hskips ^^ S[ wini/o page hex $1000 spi-dump128 $1080 spi-dump256 ]S ( MINOS ) X" amem2" button new ^^ S[ wini/o page hex $1200 spi-dump128 $1280 spi-dump256 ]S ( MINOS ) X" bmem2" button new ^^ S[ wini/o page hex $1400 spi-dump256 ]S ( MINOS ) X" cmem2" button new ^^ S[ wini/o page hex $1400 spi-dump-cmem ]S ( MINOS ) X" coeff2" button new #4 hatbox new #1 hskips ^^ S[ wini/o page hex $1800 spi-dump128 $1880 spi-dump256 ]S ( MINOS ) X" amem3" button new ^^ S[ wini/o page hex $1800 spi-dump128 $1880 spi-dump256 ]S ( MINOS ) X" bmem3" button new ^^ S[ wini/o page hex $1C00 spi-dump256 ]S ( MINOS ) X" cmem3" button new ^^ S[ wini/o page hex $1C00 spi-dump-cmem ]S ( MINOS ) X" coeff3" button new #4 hatbox new #1 hskips #4 vabox new #1 vskips #0. ]N ( MINOS ) ^^ SN[ ]SN ( MINOS ) textfield new ^^bind data #0. ]N ( MINOS ) ^^ SN[ ]SN ( MINOS ) X" Addr" infotextfield new ^^bind addr #2 vabox new #1 vskips ^^ S[ addr get drop spi@ 0 data assign ]S ( MINOS ) TT" Read SPI" X" spi@" button new ^^ S[ data get drop addr get drop spi! ]S ( MINOS ) TT" Write SPI" X" spi!" button new #2 habox new #1 hskips ^^ S[ addr get drop spiw@ 0 data assign ]S ( MINOS ) TT" Read SPI word" X" spiw@" button new ^^ S[ data get drop addr get drop spiw! ]S ( MINOS ) TT" Write SPI word" X" spiw!" button new #2 habox new #1 hskips #2 vabox new #1 vskips #2 habox new #1 hskips X" Options:" text-label new ^^ TV[ & do-check ]T[ ( MINOS ) ]TV ( MINOS ) TT" Perform CRC check" X" do-check" flipbutton new ^^ TV[ & do-16bit ]T[ ( MINOS ) ]TV ( MINOS ) TT" Use 16 bit read/write when appropriate" X" do-16bit" flipbutton new ^^ TV[ & do-single ]T[ ( MINOS ) ]TV ( MINOS ) TT" decompose multiple writes into single writes" X" do-single" flipbutton new ^^ TV[ & verbose-spi ]T[ ( MINOS ) ?verbose ]TV ( MINOS ) X" Debug" flipbutton new #5 hatbox new #1 hskips ^^ S[ status@ 0 status assign ]S ( MINOS ) TT" Read SPI status" X" Status@" button new #0. ]N ( MINOS ) ^^ SN[ ]SN ( MINOS ) textfield new ^^bind status #2 hatbox new #1 hskips ^^ S[ fft-comp open ]S ( MINOS ) X" FFT Window" button new ^^ S[ audio-gui open dpy with window app @ endwith screen childs with window app ! endwith 1 apprefcnt +! ]S ( MINOS ) X" Another GUI" button new #2 hatbox new #1 hskips ^^ CP[ ]CP ( MINOS ) reconnect-comp new #1 vabox new ^^bind reconnect $10 $1 *hfill $10 $1 *vfill rule new #9 vabox new panel #1 habox new flipbox dup ^^ with C[ file-index ]C ( MINOS ) endwith 0 -1 flipper X" Config" topindex new ^^bind eq-config 0 0 flipper X" Input" topindex new ^^bind inputs 0 0 flipper X" Delay" topindex new ^^bind delays 0 0 flipper X" Tones" topindex new ^^bind tones 0 0 flipper X" Mixer" topindex new ^^bind mixers 0 0 flipper X" Graphic EQ" topindex new ^^bind graphic-eq 0 0 flipper X" Filter" topindex new ^^bind filter topglue new #8 harbox new vfixbox ^^ CP[ ]CP ( MINOS ) confx-comp new $10 $1 *hfilll $0 $1 *vfill rule new #2 habox new #1 habox new #1 hskips dup ^^ with C[ eq-config ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new #2 habox new vfixbox ^^ CP[ TONEC0 ]CP ( MINOS ) tone-comp new #2 vabox new X" CH2" text-label new X" CH3" text-label new #2 habox new vfixbox ^^ CP[ TONEC1 ]CP ( MINOS ) tone-comp new #2 vabox new X" CH4" text-label new X" CH5" text-label new #2 habox new vfixbox ^^ CP[ TONEC2 ]CP ( MINOS ) tone-comp new #2 vabox new X" CH6" text-label new X" CH7" text-label new #2 habox new vfixbox ^^ CP[ TONEC3 ]CP ( MINOS ) tone-comp new #2 vabox new $0 $1 *hfill $0 $1 *vfill rule new #5 habox new flipbox dup ^^ with C[ tones ]C ( MINOS ) endwith 0 -1 flipper X" Ch0" topindex new ^^bind mx0 0 0 flipper X" Ch1" topindex new ^^bind mx1 0 0 flipper X" Ch2" topindex new ^^bind mx2 0 0 flipper X" Ch3" topindex new ^^bind mx3 0 0 flipper X" Ch4" topindex new ^^bind mx4 0 0 flipper X" Ch5" topindex new ^^bind mx5 0 0 flipper X" Ch6" topindex new ^^bind mx6 0 0 flipper X" Ch7" topindex new ^^bind mx7 topglue new #9 harbox new vfixbox ^^ CP[ $0400 ]CP ( MINOS ) mix-comp new #1 habox new dup ^^ with C[ mx0 ]C ( MINOS ) endwith ^^ CP[ $0480 ]CP ( MINOS ) mix-comp new #1 habox new flipbox dup ^^ with C[ mx1 ]C ( MINOS ) endwith ^^ CP[ $0C00 ]CP ( MINOS ) mix-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ mx2 ]C ( MINOS ) endwith ^^ CP[ $0C80 ]CP ( MINOS ) mix-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ mx3 ]C ( MINOS ) endwith ^^ CP[ $1400 ]CP ( MINOS ) mix-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ mx4 ]C ( MINOS ) endwith ^^ CP[ $1480 ]CP ( MINOS ) mix-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ mx5 ]C ( MINOS ) endwith ^^ CP[ $1C00 ]CP ( MINOS ) mix-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ mx6 ]C ( MINOS ) endwith ^^ CP[ $1C80 ]CP ( MINOS ) mix-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ mx7 ]C ( MINOS ) endwith #8 habox new $10 noborderbox #2 borderbox #2 vabox new #1 habox new flipbox #1 hskips dup ^^ with C[ mixers ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new X" CH2" text-label new X" CH3" text-label new X" CH4" text-label new X" CH5" text-label new X" CH6" text-label new X" CH7" text-label new #8 hatbox new vfixbox ^^ CP[ COARSED0 ]CP ( MINOS ) delay-comp new ^^ CP[ COARSED1 ]CP ( MINOS ) delay-comp new ^^ CP[ COARSED2 ]CP ( MINOS ) delay-comp new ^^ CP[ COARSED3 ]CP ( MINOS ) delay-comp new #4 habox new #2 vabox new $0 $1 *hfilll $0 $1 *vfil rule new #2 habox new #1 habox new flipbox dup ^^ with C[ delays ]C ( MINOS ) endwith X" CH01" text-label new #1 habox new vfixbox ^^ CP[ AUDIOFMT0 ]CP ( MINOS ) input-comp new #1 habox new #2 vabox new X" CH23" text-label new #1 habox new vfixbox ^^ CP[ AUDIOFMT1 ]CP ( MINOS ) input-comp new #1 habox new #2 vabox new X" CH45" text-label new #1 habox new vfixbox ^^ CP[ AUDIOFMT2 ]CP ( MINOS ) input-comp new #1 habox new #2 vabox new X" CH67" text-label new #1 habox new vfixbox ^^ CP[ AUDIOFMT3 ]CP ( MINOS ) input-comp new #1 habox new #2 vabox new $0 $1 *hfilll $0 $1 *vfil rule new #5 habox new flipbox dup ^^ with C[ inputs ]C ( MINOS ) endwith 0 -1 flipper X" All" topindex new ^^bind gcha 0 0 flipper X" CH0" topindex new ^^bind gch0 0 0 flipper X" CH1" topindex new ^^bind gch1 0 0 flipper X" CH2" topindex new ^^bind gch2 0 0 flipper X" CH3" topindex new ^^bind gch3 0 0 flipper X" CH4" topindex new ^^bind gch4 0 0 flipper X" CH5" topindex new ^^bind gch5 0 0 flipper X" CH6" topindex new ^^bind gch6 0 0 flipper X" CH7" topindex new ^^bind gch7 topglue new #10 harbox new vfixbox ^^ CP[ 0 fslider COEFFS0 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch0 ]C ( MINOS ) endwith ^^ CP[ 1 fslider COEFFS1 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch1 ]C ( MINOS ) endwith ^^ CP[ 2 fslider COEFFS2 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch2 ]C ( MINOS ) endwith ^^ CP[ 3 fslider COEFFS3 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch3 ]C ( MINOS ) endwith ^^ CP[ 4 fslider COEFFS4 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch4 ]C ( MINOS ) endwith ^^ CP[ 5 fslider COEFFS5 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch5 ]C ( MINOS ) endwith ^^ CP[ 6 fslider COEFFS6 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch6 ]C ( MINOS ) endwith ^^ CP[ 7 fslider COEFFS7 ]CP ( MINOS ) eq-comp new #1 habox new flipbox #1 hskips dup ^^ with C[ gch7 ]C ( MINOS ) endwith ^^ CP[ 0 fslider COEFFSA ]CP ( MINOS ) eq2-comp new #1 habox new #1 hskips dup ^^ with C[ gcha ]C ( MINOS ) endwith #9 habox new $10 noborderbox #2 borderbox #2 vabox new #1 habox new flipbox dup ^^ with C[ graphic-eq ]C ( MINOS ) endwith 0 -1 flipper X" CH0" topindex new ^^bind filter0 0 0 flipper X" CH1" topindex new ^^bind filter1 0 0 flipper X" CH2" topindex new ^^bind filter2 0 0 flipper X" CH3" topindex new ^^bind filter3 0 0 flipper X" CH4" topindex new ^^bind filter4 0 0 flipper X" CH5" topindex new ^^bind filter5 0 0 flipper X" CH6" topindex new ^^bind filter6 0 0 flipper X" CH7" topindex new ^^bind filter7 topglue new #9 harbox new vfixbox ^^ CP[ XOVER00 ]CP ( MINOS ) filter-comp new #1 habox new dup ^^ with C[ filter0 ]C ( MINOS ) endwith ^^ CP[ XOVER01 ]CP ( MINOS ) filter-comp new #1 habox new flipbox dup ^^ with C[ filter1 ]C ( MINOS ) endwith ^^ CP[ XOVER02 ]CP ( MINOS ) filter-comp new #1 habox new flipbox dup ^^ with C[ filter2 ]C ( MINOS ) endwith ^^ CP[ XOVER03 ]CP ( MINOS ) filter-comp new #1 habox new flipbox dup ^^ with C[ filter3 ]C ( MINOS ) endwith ^^ CP[ XOVER04 ]CP ( MINOS ) filter-comp new #1 habox new flipbox dup ^^ with C[ filter4 ]C ( MINOS ) endwith ^^ CP[ XOVER05 ]CP ( MINOS ) filter-comp new #1 habox new flipbox dup ^^ with C[ filter5 ]C ( MINOS ) endwith ^^ CP[ XOVER06 ]CP ( MINOS ) filter-comp new #1 habox new flipbox dup ^^ with C[ filter6 ]C ( MINOS ) endwith ^^ CP[ XOVER07 ]CP ( MINOS ) filter-comp new #1 habox new flipbox dup ^^ with C[ filter7 ]C ( MINOS ) endwith #8 habox new $10 noborderbox #2 borderbox #2 vabox new #1 habox new flipbox dup ^^ with C[ filter ]C ( MINOS ) endwith #7 habox new $10 noborderbox #2 borderbox #2 vabox new #1 habox new flipbox #1 hskips dup ^^ with C[ eqdsps ]C ( MINOS ) endwith 0 -1 flipper X" Volume" topindex new ^^bind vindex 0 0 flipper X" Config" topindex new ^^bind config 0 0 flipper X" Novaload" topindex new ^^bind novaload 0 0 flipper X" Clipping" topindex new ^^bind clipping 0 0 flipper X" Limits" topindex new ^^bind limitp 0 0 flipper X" PTE" topindex new ^^bind pte 0 0 flipper X" Short" topindex new ^^bind short 0 0 flipper X" Status" topindex new ^^bind stamp-status topglue new #9 harbox new vfixbox ^^ CP[ ]CP ( MINOS ) vols-comp new $0 $1 *hfilll $0 $1 *vfil rule new #2 habox new dup ^^ with C[ vindex ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new X" CH2" text-label new X" CH3" text-label new X" CH4" text-label new X" CH5" text-label new X" CH6" text-label new X" CH7" text-label new #8 hatbox new vfixbox ^^ CP[ STCLIP0 ]CP ( MINOS ) clip-comp new ^^ CP[ STCLIP1 ]CP ( MINOS ) clip-comp new ^^ CP[ STCLIP2 ]CP ( MINOS ) clip-comp new ^^ CP[ STCLIP3 ]CP ( MINOS ) clip-comp new #4 habox new #2 vabox new $0 $1 *hfilll $10 $1 *vfil rule new #2 habox new #1 habox new flipbox dup ^^ with C[ clipping ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new #2 hatbox new vfixbox ^^ CP[ NOVAMASK0 ]CP ( MINOS ) nova-comp new #2 vabox new X" CH2" text-label new X" CH3" text-label new #2 hatbox new vfixbox ^^ CP[ NOVAMASK1 ]CP ( MINOS ) nova-comp new #2 vabox new X" CH4" text-label new X" CH5" text-label new #2 hatbox new vfixbox ^^ CP[ NOVAMASK2 ]CP ( MINOS ) nova-comp new #2 vabox new X" CH6" text-label new X" CH7" text-label new #2 hatbox new vfixbox ^^ CP[ NOVAMASK3 ]CP ( MINOS ) nova-comp new #2 vabox new $0 $1 *hfilll $0 $1 *vfilll rule new #5 habox new #1 habox new flipbox dup ^^ with C[ novaload ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new #2 hatbox new vfixbox ^^ CP[ STCONF0 ]CP ( MINOS ) stampc-comp new ^^ CP[ STPOWER0 ]CP ( MINOS ) powerc-comp new ^^ CP[ STSETUP0 ]CP ( MINOS ) dac-comp new ^^ CP[ STTIME0 ]CP ( MINOS ) time-comp new #5 vabox new X" CH2" text-label new X" CH3" text-label new #2 hatbox new vfixbox ^^ CP[ STCONF1 ]CP ( MINOS ) stampc-comp new ^^ CP[ STPOWER1 ]CP ( MINOS ) powerc-comp new ^^ CP[ STSETUP1 ]CP ( MINOS ) dac-comp new ^^ CP[ STTIME1 ]CP ( MINOS ) time-comp new #5 vabox new X" CH4" text-label new X" CH5" text-label new #2 hatbox new vfixbox ^^ CP[ STCONF2 ]CP ( MINOS ) stampc-comp new ^^ CP[ STPOWER2 ]CP ( MINOS ) powerc-comp new ^^ CP[ STSETUP2 ]CP ( MINOS ) dac-comp new ^^ CP[ STTIME2 ]CP ( MINOS ) time-comp new #5 vabox new X" CH6" text-label new X" CH7" text-label new #2 hatbox new vfixbox ^^ CP[ STCONF3 ]CP ( MINOS ) stampc-comp new ^^ CP[ STPOWER3 ]CP ( MINOS ) powerc-comp new ^^ CP[ STSETUP3 ]CP ( MINOS ) dac-comp new ^^ CP[ STTIME3 ]CP ( MINOS ) time-comp new #5 vabox new #4 habox new ^^ CP[ STSNSSETUP ]CP ( MINOS ) stampg-comp new $0 $1 *hfil $0 $1 *vfilll rule new #2 vabox new #2 vabox new $0 $1 *hfilll $0 $1 *vfil rule new #2 habox new flipbox dup ^^ with C[ config ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new #2 hatbox new vfixbox ^^ CP[ STLMAX0 ]CP ( MINOS ) max-comp new ^^ CP[ STRMAX0 ]CP ( MINOS ) max-comp new #2 habox new #-1 borderbox #2 vabox new #-1 borderbox X" CH2" text-label new X" CH3" text-label new #2 hatbox new vfixbox ^^ CP[ STLMAX1 ]CP ( MINOS ) max-comp new ^^ CP[ STRMAX1 ]CP ( MINOS ) max-comp new #2 habox new #-1 borderbox #2 vabox new #-1 borderbox X" CH4" text-label new X" CH5" text-label new #2 hatbox new vfixbox ^^ CP[ STLMAX2 ]CP ( MINOS ) max-comp new ^^ CP[ STRMAX2 ]CP ( MINOS ) max-comp new #2 habox new #-1 borderbox #2 vabox new #-1 borderbox X" CH6" text-label new X" CH7" text-label new #2 hatbox new vfixbox ^^ CP[ STLMAX3 ]CP ( MINOS ) max-comp new ^^ CP[ STRMAX3 ]CP ( MINOS ) max-comp new #2 habox new #-1 borderbox #2 vabox new #-1 borderbox $0 $1 *hfilll $0 $1 *vfil rule new #5 habox new #1 vabox new #1 habox new flipbox dup ^^ with C[ limitp ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new #2 habox new vfixbox ^^ CP[ STLPTE0 ]CP ( MINOS ) pte-comp new ^^ CP[ STRPTE0 ]CP ( MINOS ) pte-comp new #2 habox new #2 vabox new #-1 borderbox X" CH2" text-label new X" CH3" text-label new #2 habox new vfixbox ^^ CP[ STLPTE1 ]CP ( MINOS ) pte-comp new ^^ CP[ STRPTE1 ]CP ( MINOS ) pte-comp new #2 habox new #2 vabox new #-1 borderbox X" CH4" text-label new X" CH5" text-label new #2 habox new vfixbox ^^ CP[ STLPTE2 ]CP ( MINOS ) pte-comp new ^^ CP[ STRPTE2 ]CP ( MINOS ) pte-comp new #2 habox new #2 vabox new #-1 borderbox X" CH6" text-label new X" CH7" text-label new #2 habox new vfixbox ^^ CP[ STLPTE3 ]CP ( MINOS ) pte-comp new ^^ CP[ STRPTE3 ]CP ( MINOS ) pte-comp new #2 habox new #2 vabox new #-1 borderbox $0 $1 *hfilll $0 $1 *vfil rule new #5 habox new flipbox dup ^^ with C[ pte ]C ( MINOS ) endwith X" " text-label new #1 habox new vfixbox X" f_hi" text-label new X" f_lo" text-label new X" lo" text-label new X" hi" text-label new #5 vabox new X" CH0" text-label new X" CH1" text-label new #2 hatbox new vfixbox ^^ CP[ STLSHORT0 ]CP ( MINOS ) short-comp new ^^ CP[ STRSHORT0 ]CP ( MINOS ) short-comp new #2 habox new #2 vabox new #-1 borderbox X" CH2" text-label new X" CH3" text-label new #2 hatbox new vfixbox ^^ CP[ STLSHORT1 ]CP ( MINOS ) short-comp new ^^ CP[ STRSHORT1 ]CP ( MINOS ) short-comp new #2 habox new #2 vabox new #-1 borderbox X" CH4" text-label new X" CH5" text-label new #2 hatbox new vfixbox ^^ CP[ STLSHORT2 ]CP ( MINOS ) short-comp new ^^ CP[ STRSHORT2 ]CP ( MINOS ) short-comp new #2 habox new #2 vabox new #-1 borderbox X" CH6" text-label new X" CH7" text-label new #2 hatbox new vfixbox ^^ CP[ STLSHORT3 ]CP ( MINOS ) short-comp new ^^ CP[ STRSHORT3 ]CP ( MINOS ) short-comp new #2 habox new #2 vabox new #-1 borderbox $0 $1 *hfilll $0 $1 *vfil rule new #6 habox new flipbox dup ^^ with C[ short ]C ( MINOS ) endwith X" CH0" text-label new X" CH1" text-label new X" CH2" text-label new X" CH3" text-label new X" CH4" text-label new X" CH5" text-label new X" CH6" text-label new X" CH7" text-label new #8 hatbox new vfixbox ^^ CP[ STLDATACOND0 ]CP ( MINOS ) status-comp new ^^ CP[ STLDATACOND1 ]CP ( MINOS ) status-comp new ^^ CP[ STLDATACOND2 ]CP ( MINOS ) status-comp new ^^ CP[ STLDATACOND3 ]CP ( MINOS ) status-comp new #4 habox new #2 vabox new #1 habox new flipbox dup ^^ with C[ stamp-status ]C ( MINOS ) endwith #8 habox new $10 noborderbox #2 borderbox #2 vabox new #1 habox new dup ^^ with C[ stamps ]C ( MINOS ) endwith 0 -1 flipper X" Interrupts" topindex new ^^bind interrupts 0 0 flipper X" GPIO" topindex new ^^bind gpios 0 0 flipper X" Clock" topindex new ^^bind clocks topglue new #4 harbox new vfixbox ^^ CP[ STIRQM ]CP ( MINOS ) irqmask-comp new #1 habox new panel dup ^^ with C[ interrupts ]C ( MINOS ) endwith ^^ CP[ GPIO_DATA ]CP ( MINOS ) gpio-comp new #1 habox new flipbox panel dup ^^ with C[ gpios ]C ( MINOS ) endwith ^^ CP[ CLK_CTL ]CP ( MINOS ) clock-comp new #1 habox new flipbox panel dup ^^ with C[ clocks ]C ( MINOS ) endwith #3 habox new $10 noborderbox #2 borderbox #2 vabox new #1 habox new flipbox dup ^^ with C[ global ]C ( MINOS ) endwith X" DDFA GUI rev. 4.3, 05dec2012" text-label new X" Copyright © 1998-2012 by Bernd Paysan, © 2007-2012 by CSR plc" text-label new #2 vabox new vfixbox #1 hskips ^^ CP[ ]CP ( MINOS ) gpl-about new ^^bind about-comp $0 $1 *hfil $0 $1 *vfil rule new #2 habox new #2 vabox new #1 vskips #1 habox new flipbox dup ^^ with C[ abouti ]C ( MINOS ) endwith #5 habox new $10 noborderbox #2 borderbox #2 vabox new #1 vabox new #1 vskips ( [dumpend] ) ; class; basic-gui implements ( [methodstart] ) : assign drop ; : file@ ( -- addr u ) file-path @ IF file-path $@ filename get path+file ELSE filename get THEN ; : ramp-update ramps @ $01FF0000 xor VRD spi! ; : reload-ctl STCTL0 ctls 8 bounds DO dup easy@ 16 rshift $0101 xor I w! $800 + 2 +LOOP drop ; : reload-dac STSETUP0 dacs 4 bounds DO dup easy@ 24 rshift I c! $800 + LOOP drop ; : update-ctl STCTL0 ctls 8 bounds DO I w@ $0101 xor over spiw! $800 + 2 +LOOP drop ; : update-dac STSETUP0 dacs 4 bounds DO I c@ 8 lshift over spiw! $800 + LOOP drop ; : sr@ ( addr -- d ) easy@ 16 rshift $FFFF and dup $1F00 <= IF drop 0. ELSE 108e6 16e f* fm/ f>d THEN ; : sr-updates ( -- ) STSRCNT0 sr@ 2dup sr01 get d= 0= IF sr01 assign ELSE 2drop THEN STSRCNT1 sr@ 2dup sr23 get d= 0= IF sr23 assign ELSE 2drop THEN STSRCNT2 sr@ 2dup sr45 get d= 0= IF sr45 assign ELSE 2drop THEN STSRCNT3 sr@ 2dup sr67 get d= 0= IF sr67 assign ELSE 2drop THEN ; : reload irqs STEVENT0 easy@4 states STSTATE0 easy@4 ; : auto-update sr-updates reload reload-ctl reload-dac stampirqs draw dacbox draw bons draw ['] auto-update ^ &200 after dpy schedule ; : hide ^ dpy cleanup super hide ; : show ( -- ) VRD vol@ $01FF0000 xor ramps ! do-spi IF reconnect -flip ELSE reconnect +flip THEN super show auto-update ; Create irqmasks $C000 w, $3C00 w, $0003 w, $0020 w, ( [methodend] ) : widget ( [dumpstart] ) T" " ^^ ST[ ]ST ( MINOS ) X" File:" infotextfield new ^^bind filename ^^ S[ wini/o s" Load SPI file" s" " file-path @ IF file-path $@ ELSE s" *.spi" THEN ^ S[ 2swap file-path $! filename assign $1000 dup NewTask activate fhandle off wini/o base push decimal file@ included ]S fsel-action ]S ( MINOS ) icon" icons/diropen" icon-but new #1 habox new hfixbox #2 habox new vfixbox X" All" text-label new #1 habox new vfixbox ^^ CP[ MVOLT ]CP ( MINOS ) mvol-comp new ^^ 0 T[ ramps @ $FF00 or ramps ! ramp-update ][ ( MINOS ) ramps @ $FFFF00FF and ramps ! ramp-update ]T ( MINOS ) X" Mute" flipbutton new #1 habox new vfixbox #3 vabox new hfixbox #-2 borderbox X" CH0" text-label new X" CH1" text-label new X" CH2" text-label new X" CH3" text-label new X" CH4" text-label new X" CH5" text-label new X" CH6" text-label new X" CH7" text-label new #8 habox new vfixbox #0. ]N ( MINOS ) ^^ SN[ ]SN ( MINOS ) X" SR" infotextfield new ^^bind sr01 #0. ]N ( MINOS ) ^^ SN[ ]SN ( MINOS ) X" SR" infotextfield new ^^bind sr23 #0. ]N ( MINOS ) ^^ SN[ ]SN ( MINOS ) X" SR" infotextfield new ^^bind sr45 #0. ]N ( MINOS ) ^^ SN[ ]SN ( MINOS ) X" SR" infotextfield new ^^bind sr67 #4 habox new vfixbox CV[ decimal outer with irqs endwith 32 16 steps clear $ff $FF $00 rgb> drawcolor $ff $7F $00 rgb> fillcolor 4 0 DO 8 0 DO I 4* J 4* home! path 0 -4 to 4 0 to 0 4 to -4 0 to dup I 1 xor 2* + w@ irqmasks J 2* + w@ and IF fill THEN stroke LOOP LOOP drop old-version? 0= IF outer with states endwith $7f $fF $7f rgb> fillcolor 4 0 DO 8 0 DO I 4* 1+ J 4* 1+ home! dup I 1 xor 2* + w@ irqmasks J 2* + w@ and IF square fill THEN LOOP LOOP drop THEN 1 1 textpos $00 $00 $ff rgb> drawcolor 16 2 home! x" Primary Protection" text 16 6 home! x" Short Circuit" text 16 10 home! x" Clipping" text 16 14 home! x" Feedback OK" text ]CV ( MINOS ) ^^ CK[ ( x y b n -- ) 2drop 2drop 4 0 DO irqs Ith invert STEVENT0 I + spi! LOOP reload stampirqs draw ]CK ( MINOS ) $10 $1 *hfilll $80 $1 *vfil canvas new ^^bind stampirqs #1 habox new $10 $1 *hfilll $6 $0 *vpix glue new ^^ TB[ dacs 3 ]T[ ( MINOS ) ?shift IF dacs 3 bit@ dacs 7 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new ^^ TB[ dacs 7 ]T[ ( MINOS ) ?shift IF dacs 7 bit@ dacs 3 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new ^^ TB[ dacs 11 ]T[ ( MINOS ) ?shift IF dacs 11 bit@ dacs 15 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new ^^ TB[ dacs 15 ]T[ ( MINOS ) ?shift IF dacs 15 bit@ dacs 11 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new ^^ TB[ dacs 19 ]T[ ( MINOS ) ?shift IF dacs 19 bit@ dacs 23 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new ^^ TB[ dacs 23 ]T[ ( MINOS ) ?shift IF dacs 23 bit@ dacs 19 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new ^^ TB[ dacs 27 ]T[ ( MINOS ) ?shift IF dacs 27 bit@ dacs 31 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new ^^ TB[ dacs 31 ]T[ ( MINOS ) ?shift IF dacs 31 bit@ dacs 27 bit! dacbox draw THEN update-dac ]TB ( MINOS ) X" DAC" flipbutton new #8 hatbox new ^^bind dacbox vfixbox ^^ TB[ ctls 9 ]T[ ( MINOS ) ?shift IF ctls 9 bit@ ctls 1 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 1 ]T[ ( MINOS ) ?shift IF ctls 1 bit@ ctls 9 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 25 ]T[ ( MINOS ) ?shift IF ctls 25 bit@ ctls 17 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 17 ]T[ ( MINOS ) ?shift IF ctls 17 bit@ ctls 25 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 41 ]T[ ( MINOS ) ?shift IF ctls 41 bit@ ctls 33 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 33 ]T[ ( MINOS ) ?shift IF ctls 33 bit@ ctls 41 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 57 ]T[ ( MINOS ) ?shift IF ctls 57 bit@ ctls 49 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new ^^ TB[ ctls 49 ]T[ ( MINOS ) ?shift IF ctls 49 bit@ ctls 57 bit! bons draw THEN update-ctl ]TB ( MINOS ) X" On" flipbutton new #8 hatbox new ^^bind bons vfixbox #6 vabox new #-2 borderbox $0 $0 *hpix $12C $1 *vfil glue new #1 habox new #3 habox new ^^ CP[ ]CP ( MINOS ) reconnect-comp new #1 vabox new ^^bind reconnect flipbox #2 vabox new #2 vabox new #1 vskips ( [dumpend] ) ; class; audio-gui implements ( [methodstart] ) Variable first-time first-time on : assign super assign first-time @ IF localize THEN 1 audio-guis +! ; : reshow kbshift push kbshift off super show draw ; : ?verbose verbose-spi IF wini/o page term dpy dpy show ELSE term dpy dpy hide THEN ; : auto-update bridgeoff color @ $FFFFFF00 and $FF $80 $80 rgb> or bridgeoff color ! recursive updated @ update# @ <> audio-guis @ 1 > and IF ['] reshow ^ &100 after dpy schedule update# @ updated ! THEN term self IF BEGIN term key? WHILE term key #cr = term key? and IF term key 'b' = term key? and IF term key 'y' = term key? and IF term key 'e' = IF & verbose-spi off ?verbose dpy draw THEN THEN THEN THEN REPEAT THEN ['] auto-update ^ &200 after dpy schedule ; : do-title ( -- ) spi-dev# 0 <# do-spi 0= IF s" disconnected" holds THEN #S s" DDFA GUI dev# " holds #> dpy self window with title! endwith ; : show ( -- ) ?open do-title first-time @ IF s" init.spi" [ also dos ] file-status [ previous ] nip 0= IF s" init.spi" included THEN argc @ arg# @ 1+ > IF argc @ arg# @ 1+ ?DO I arg included LOOP THEN first-time off THEN update# @ 1- updated ! auto-update super show audio-guis @ 1 > IF bl 0 expert-mode keyed THEN ; ( [methodend] ) : widget ( [dumpstart] ) ^^ CP[ ]CP ( MINOS ) expert-gui new #1 vabox new ^^bind experts flipbox ^^ CP[ ]CP ( MINOS ) basic-gui new #1 vabox new ^^bind basics #2 borderbox #2 vabox new ^^ 0 T[ basics with attribs c@ :flip or attribs c! hide endwith experts +flip irqs +flip ][ ( MINOS ) experts with attribs c@ :flip or attribs c! hide endwith basics +flip irqs -flip ]T ( MINOS ) X" Expert mode" T" Basic mode" togglebutton new ^^bind expert-mode $10 $0 *hfil $0 $1 *vfil glue new ^^ S[ $101 STCTLA spiw! ]S ( MINOS ) TT" Emergency turnoff of all bridges" X" All bridges off!" button new ^^bind bridgeoff $10 $0 *hfil $0 $1 *vfil glue new ^^ CP[ ]CP ( MINOS ) irq-comp new #2 habox new ^^bind irqs hfixbox flipbox #4 habox new vfixbox #2 vabox new #1 vskips ( [dumpend] ) ; class; : main audio-gui open-app event-loop bye ; script? [IF] main [THEN] previous previous previous