start tok64 d64-PMEXbM 10 REM keyboard 64 club 64 sweden 20 DIMn(64):FORi=0TO64:READa:n(i)=a:NEXTi:DATA,-1,,,,,,,65539,9854,4389,65540 80 DATA2195,4927,11060,,65541,11718,5530,65542,2765,5859,13153,2463,65543,14764 90 DATA6577,,3288,7382,16572,2930,,17557,8286,65536,4143,8779,,3691,,,,,,,,4389 120 DATA,,,,,,,,65537,,,65538,,,8779,, 150 s=54272:v=1:lk=64:ls=0:FORi=0TO2 170 READw(i),a(i),d(i),su(i),r(i),pw(i),w$(i),sy(i),rm(i),fi(i) 180 POKEs+i*7+4,w(i)*16+rm(i)*4+sy(i)*2:POKE s+i*7+5,a(i)*16+d(i) 200 POKEs+i*7+6,su(i)*16+r(i):p1=INT(pw(i)/256):p2=pw(i)-p1*256:POKEs+i*7+2,p2 240 POKEs+i*7+3,p1:NEXTi:DATA4,,9,,,2048,"pulse",,,,1,4,2,10,5,,"triangel",,, 280 DATA2,6,5,2,2,0,"sawtooth",0,0,1 300 READff,fr,fb,fb$:POKEs+23,fr*16+fi(0)+fi(1)*2+fi(2)*4:POKEs+21,ffAND7 320 POKEs+22,INT((ff-(ffAND7))/8):POKEs+24,fb*16+15:DATA1024,12,4,"hi" 350 GOSUB5000:GOTO3010 1000 k=PEEK(197):ps=PEEK(653):IFk=lkANDps=lsTHEN1000 1020 f=n(k):lk=k:ls=ps:IFf=0THEN2000 1040 IFf>65535THEN3000 1045 IFf=-1THEN4000 1050 IFps=1THENf=INT(f*2^(1/12)) 1060 IFps=2THENf=INT(f/2^(1/12)) 1070 f1=INT(f/256):f2=f-f1*256:FORi=0TO2:IFvo(i)=0THEN1125 1100 POKEs+i*7+4,0:POKE s+i*7+4,w(i)*16+rm(i)*4+sy(i)*2+1:POKEs+i*7,f2 1120 POKEs+i*7+1,f1 1125 NEXTi:GOTO1000 2000 FORi=0TO2:POKEs+i*7,0:POKEs+i*7+1,0:POKEs+i*7+4,w(i)*16:NEXTi:GOTO1000 3000 v=f-65536 3010 FORi=0TO2:vo(i)=(vAND2^i)/2^i:NEXTi:GOTO1000 4000 POKE 53280,14:POKE 53281,6:PRINT"{clear}";:FORi=0TO2 4020 PRINT"{home}"TAB(10*i+10);"{reverse on}{white}voice"i+1:PRINT"{reverse on}{orange}waveform{reverse off}"TAB(10*i+10)w$(i) 4040 PRINT"{reverse on}{cyan}attack{space*2}{reverse off}"TAB(10*i+10)a(i):PRINT"{reverse on}{156}decay{space*3}{reverse off}"TAB(10*i+10)d(i) 4060 PRINT"{reverse on}{green}sustain {reverse off}"TAB(10*i+10)su(i):PRINT"{reverse on}{yellow}release {reverse off}"TAB(10*i+10)r(i) 4080 PRINT"{reverse on}{white}p. width{reverse off}"TAB(10*i+10)pw(i):PRINT"{reverse on}{156}sync{space*4}{reverse off}"TAB(10*i+10)sy(i) 4082 PRINT"{reverse on}{green}ring mod{reverse off}"TAB(10*i+10)rm(i):PRINT"{reverse on}{156}filter{space*2}{reverse off}"TAB(10*i+10)fi(i) 4091 NEXTi:PRINT"{reverse on}{down}filter freq. {reverse off}"ff:PRINT"{reverse on}filter res.{space*2}{reverse off}"fr 4093 PRINT"{reverse on}filter band{space*2}{reverse off} "fb$:POKE198,0 4110 PRINT"{down}{yellow} do you wish to change the values ? "; 4120 GETa$:IFa$<>"n"ANDa$<>"y"THEN4120 4130 IFa$="n"THENGOSUB5000:GOTO1000 4150 PRINT"yes":PRINT"{clear}which voice do you wish to change ? "; 4160 GETa$:IFa$=""THEN4160 4170 IFASC(a$)<49ORASC(a$)>51THEN4160 4190 PRINTa$:vv=VAL(a$):PRINT "{orange}waveform{space*6}? "; 4200 GETa$:IFa$<>"s"ANDa$<>"n"ANDa$<>"p"ANDa$<>"t"THEN4200 4210 IFa$="n"THENPRINT"noise":w$(vv-1)="noise":w(vv-1)=8 4220 IFa$="p"THENPRINT"pulse":w$(vv-1)="pulse":w(vv-1)=4 4230 IFa$="s"THENPRINT"sawtooth":w$(vv-1)="sawtooth":w(vv-1)=2 4240 IFa$="t"THENPRINT"triangle":w$(vv-1)="triangle":w(vv-1)=1 4250 INPUT"{cyan}attack{space*13}{left*5}";a(vv-1) 4260 IFa(vv-1)<0ORa(vv-1)>15THENPRINT"{up}";:GOTO4250 4270 INPUT"{156}decay{space*14}{left*5}";d(vv-1) 4280 IFd(vv-1)<0ORd(vv-1)>15THENPRINT"{up}";:GOTO4270 4290 INPUT"{green}sustain{space*12}{left*5}";su(vv-1) 4300 IFsu(vv-1)<0ORsu(vv-1)>15THENPRINT"{up}";:GOTO4290 4310 INPUT"{yellow}release{space*12}{left*5}";r(vv-1) 4320 IFr(vv-1)<0ORr(vv-1)>15THENPRINT"{up}";:GOTO4310 4330 INPUT"{white}pulse width{space*11}{left*8}";pw(vv-1) 4340 IFpw(vv-1)<0ORpw(vv-1)>4095THENPRINT"{up}";:GOTO4330 4341 INPUT"{156}sync{space*15}{left*5}";sy(vv-1) 4342 IFsy(vv-1)<0ORsy(vv-1)>1THENPRINT"{up}";:GOTO4341 4344 INPUT"{green}ring mod{space*11}{left*5}";rm(vv-1) 4345 IFrm(vv-1)<0ORrm(vv-1)>1THENPRINT"{up}";:GOTO4344 4346 INPUT"{156}filter{space*13}{left*5}";fi(vv-1) 4347 IFfi(vv-1)<0ORfi(vv-1)>1THENPRINT"{up}";:GOTO4346 4350 POKEs+(vv-1)*7+4,w(vv-1)*16+rm(vv-1)*4+sy(vv-1)*2 4360 POKEs+(vv-1)*7+5,a(vv-1)*16+d(vv-1):POKEs+(vv-1)*7+6,su(vv-1)*16+r(vv-1) 4380 p1=INT(pw(vv-1)/256):p2=pw(vv-1)-p1*256:POKEs+(vv-1)*7+2,p2 4410 POKE s+(vv-1)*7+3,p1:t=ti 4430 IFti-t<50THEN4430 4450 INPUT"filter frequency{space*16}{left*6}";ff 4460 IFff<0ORff>2047THENPRINT"{up}";:GOTO4450 4470 INPUT"filter res{space*21}{left*5}";fr 4480 IFfr<0ORfr>15THENPRINT"{up}";:GOTO4470 4490 INPUT"filter band(hi,lo,or band){space*8}{left*8}";fb$ 4500 IFfb$="hi"THENfb=4:GOTO4540 4510 IFfb$="lo"THENfb=1:GOTO4540 4520 IFfb$="band"THENfb=2:GOTO4540 4530 PRINT"{up}";:GOTO4490 4540 POKEs+24,fb*16+15:POKEs+23,fr*16+fi(0)+fi(1)*2+fi(2)*4:POKEs+21,ffAND7 4570 POKEs+22,INT((ff-(ffAND7))/8):GOTO4000 5000 POKE53280,4:POKE53281,2:PRINT"{white}{clear}{reverse on}*********{space*6}64 keyboard{space*5}*********{reverse off}" 5010 PRINT" use the keys {reverse on}q w e r t y u i{reverse off}" 5020 PRINT"{down}{space*14}{reverse on}a s d f g h j k{reverse off}" 5030 PRINT"{down}{space*14}{reverse on}z x c v b n m ,{reverse off}" 5040 PRINT"{down*2} for the three available octaves." 5050 PRINT"{down} use the {reverse on}shift{reverse off} key for a sharp," 5060 PRINT"{down}{space*9}{reverse on}cbm{reverse off}{space*3}key for a flat." 5070 PRINT"{down*2}using keys {reverse on}0 1 2 3 4 5 6 7{reverse off} you may" 5080 PRINT"choose any combination of the three" 5090 PRINT"voices. they are set up by using binary" 5100 PRINT"arithmetic. therefore, voice 1 is turned"; 5110 PRINT"on using key 1, voice 1 and 3 are turnedon using key 5,etc" 5130 PRINT"{down}use the {reverse on}return{reverse off} key to change the values":PRINT"in the voices{home}" 5150 RETURN stop tok64 (bastext 1.0)