Here you have, a version with chorus:
;disco mixer program
;pot_reverb = infinite reverb
;pot_pitch = pitch to zero
;pot_filter = 4 pole low pass filter
equ pot_reverb pot2
equ pot_chorus pot1
equ pot_mix pot0
equ krt reg0
equ kin reg1
equ kmix reg2
;equ lpal reg4
;equ lpbl reg5
;equ lpar reg6
;equ lpbr reg7
;equ stop reg8
;equ pbyp reg9
;equ pol reg10
;equ por reg11
;equ kfl reg12
equ temp reg13
equ rmixl reg14
equ rmixr reg15
;equ lbyp reg16
equ choout reg17
mem ap1 502
mem ap2 821
mem dap1a 2204
mem dap1b 2701
mem del1 4456
mem dap2a 2532
mem dap2b 2201
mem del2 6325
mem chodel 5000
;mem pdelr 4096
;mem pdell 4096
;mem dtemp 1
equ kap 0.6
;equ kql -0.2
skp run,endclr
wlds sin1,0,800
endclr:
;prepare pots to affect control variables:
;pot_reverb controls reverb time, but also affects input drive level;
;reveb time is moderate up to about mid position, then increases
;to infinity (or nearly) at full position.
;input drive is constant, but decreases at the full pot_reverb position.
;output mix is varied over the first half of pot_reverb, then remains
;high to the end of pot_reverb's range.
rdax pot_reverb,1.999 ;get pot_reverb, clip the upper half of pot_reverb's range.
wrax kmix,0 ;write the output mix value
rdax pot_reverb,-1 ;get pot_reverb again, 0 to -1
sof 1,0.999 ;now +1 to 0
sof 1.999,0 ;now +1 until midpint, then decreases to 0
wrax kin,0 ;write the input attenuator value
rdax pot_reverb,1 ;get pot_reverb again
wrax krt,1 ;save in krt, keep in ACC
sof 1,-0.5 ;subtract 1/2
skp gez,2 ;skp if pot is in upper half of range
sof 0,0.5 ;load accumulator with +0.5
wrax krt,0 ;overwrite if pot is in lower half of range
;now do reverb, simple, twin loop, mono drive:
rdax adcl,0.5
;rdax adcr,0.25 ;get inputs, leave headroom
mulx kin ;scale by input attenuator
rda ap1#,kap ;4 all passes:
wrap ap1,-kap
rda ap2#,kap
wrap ap2,-kap
wrax temp,0 ;write ap output to temp reg
rda del2#,1
mulx krt
rdax temp,1
rda dap1a#,kap
wrap dap1a,-kap
rda dap1b#,kap
wrap dap1b,-kap
wra del1,0
rda del1#,1
mulx krt
rdax temp,1
rda dap2a#,kap
wrap dap2a,-kap
rda dap2b#,kap
wrap dap2b,-kap
wra del2,0
;now mix the inputs with the reverb:
;rdax adcl,-1
rda del1,1.9
mulx pot_reverb ;kmix?
;rdax adcl,1
wrax rmixl,0
;rdax adcr,-1
rda del2,1.9
mulx pot_reverb
;rdax adcr,1
wrax rmixr,0
;chorus
rdax rmixr,0.5
rdax rmixl,0.5
;rdax adcl,1
wra chodel,0
;rdax pot_chorus,1
;mulx pot_chorus
sof 0,0.8
sof 0.02,0.01 ;approx. 1Hz to 3 Hz
wrax sin1_rate,0 ;load sin1 rate register
cho rda,sin1,sin|reg|compc,chodel+1400
cho rda,sin1,sin,chodel+1401
cho rda,sin1,cos|reg|compc,chodel+1200
cho rda,sin1,cos,chodel+1201
cho rda,sin1,sin|reg|compa,chodel+1600
cho rda,sin1,sin|compc|compa,chodel+1601
cho rda,sin1,cos|reg|compa,chodel+900
cho rda,sin1,cos|compc|compa,chodel+901
mulx pot_chorus
sof 0.5,0
rda chodel,0.5
wrax choout,0
;Reverb outputs are at rmixl and rmixr.
rdax adcl,-1 ;dry mix crossfade
rdax choout,0.8
mulx pot_mix
rdax adcl,1
wrax dacl,0
A version with octaves:
;disco mixer program
;pot_reverb = infinite reverb
;pot_pitch = pitch to zero
;pot_filter = 4 pole low pass filter
equ pot_reverb pot2
equ pot_chorus pot1
equ pot_mix pot0
equ krt reg0
equ kin reg1
equ kmix reg2
;equ lpal reg4
;equ lpbl reg5
;equ lpar reg6
;equ lpbr reg7
;equ stop reg8
;equ pbyp reg9
;equ pol reg10
;equ por reg11
;equ kfl reg12
equ temp reg13
equ rmixl reg14
equ rmixr reg15
;equ lbyp reg16
equ choout reg17
mem ap1 502
mem ap2 821
mem dap1a 2204
mem dap1b 2701
mem del1 4456
mem dap2a 2532
mem dap2b 2201
mem del2 6325
mem chodel 5000
delayd mem 4096 ; Down delay
temp2 mem 1 ; Temp location for partial calculations
equ pot_down pot1
equ pot_up pot1
equ oct_up reg20
equ oct_down reg21
;mem pdelr 4096
;mem pdell 4096
;mem dtemp 1
equ kap 0.6
;equ kql -0.2
skp run,endclr
wlds sin1,0,800
endclr:
skp run,START
wldr RMP0,16384,4096
wldr RMP1,-8192,4096
sof 0, 0.5
;wrax pot_up,1
;wrax pot_down,0
;wrax pot_mix,1
;wrax pot_chorus,0 ;0.5 chorus
START:
;prepare pots to affect control variables:
;pot_reverb controls reverb time, but also affects input drive level;
;reveb time is moderate up to about mid position, then increases
;to infinity (or nearly) at full position.
;input drive is constant, but decreases at the full pot_reverb position.
;output mix is varied over the first half of pot_reverb, then remains
;high to the end of pot_reverb's range.
rdax pot_reverb,1.999 ;get pot_reverb, clip the upper half of pot_reverb's range.
wrax kmix,0 ;write the output mix value
rdax pot_reverb,-1 ;get pot_reverb again, 0 to -1
sof 1,0.999 ;now +1 to 0
sof 1.999,0 ;now +1 until midpint, then decreases to 0
wrax kin,0 ;write the input attenuator value
rdax pot_reverb,1 ;get pot_reverb again
wrax krt,1 ;save in krt, keep in ACC
sof 1,-0.5 ;subtract 1/2
skp gez,2 ;skp if pot is in upper half of range
sof 0,0.5 ;load accumulator with +0.5
wrax krt,0 ;overwrite if pot is in lower half of range
;now do reverb, simple, twin loop, mono drive:
rdax adcl,0.5
;rdax adcr,0.25 ;get inputs, leave headroom
mulx kin ;scale by input attenuator
rda ap1#,kap ;4 all passes:
wrap ap1,-kap
rda ap2#,kap
wrap ap2,-kap
wrax temp,0 ;write ap output to temp reg
rda del2#,1
mulx krt
rdax temp,1
rda dap1a#,kap
wrap dap1a,-kap
rda dap1b#,kap
wrap dap1b,-kap
wra del1,0
rda del1#,1
mulx krt
rdax temp,1
rda dap2a#,kap
wrap dap2a,-kap
rda dap2b#,kap
wrap dap2b,-kap
wra del2,0
;now mix the inputs with the reverb:
;rdax adcl,-1
rda del1,1.9
mulx pot_reverb ;kmix?
;rdax adcl,1
wrax rmixl,0
;rdax adcr,-1
rda del2,1.9
mulx pot_reverb
;rdax adcr,1
wrax rmixr,0
;chorus
rdax rmixr,0.5
rdax rmixl,0.5
;rdax adcl,1
wra chodel,0
;rdax pot_chorus,1
;mulx pot_chorus
sof 0,0.8
sof 0.02,0.01 ;approx. 1Hz to 3 Hz
wrax sin1_rate,0 ;load sin1 rate register
cho rda,sin1,sin|reg|compc,chodel+1400
cho rda,sin1,sin,chodel+1401
cho rda,sin1,cos|reg|compc,chodel+1200
cho rda,sin1,cos,chodel+1201
cho rda,sin1,sin|reg|compa,chodel+1600
cho rda,sin1,sin|compc|compa,chodel+1601
cho rda,sin1,cos|reg|compa,chodel+900
cho rda,sin1,cos|compc|compa,chodel+901
mulx pot_chorus
sof 0.25,0
rda chodel,0.5
wrax choout,0
;Pot0 = Octave up level
;Pot1 = Guitar level
;Pot2 = Octave down level
ldax choout
;ldax oct_in
; Write it to left delay and clear ACC
wra delayd,0
cho rda,RMP0,REG|COMPC,delayd
cho rda,RMP0,,delayd+1
wra temp2,0
cho rda,RMP0,RPTR2|COMPC,delayd
cho rda,RMP0,RPTR2,delayd+1
cho sof,RMP0,NA|COMPC,0
cho rda,RMP0,NA,temp2
mulx pot_up
wrax oct_up,0
cho rda,RMP1,REG|COMPC,delayd
cho rda,RMP1,,delayd+1
wra temp2,0
cho rda,RMP1,RPTR2|COMPC,delayd
cho rda,RMP1,RPTR2,delayd+1
cho sof,RMP1,NA|COMPC,0
cho rda,RMP1,NA,temp2
MULX pot_down
wrax oct_down,1
rdax oct_up,0.25
rdax choout,0.75
wrax choout,0
;Reverb outputs are at rmixl and rmixr.
rdax adcl,-1 ;dry mix crossfade
rdax choout,0.8
mulx pot_mix
rdax adcl,1
wrax dacl,0
I didn't do any heavy optimization, so probably they could be shrunk a little bit more.