start tok64 d64-vFbRq9 200 GOTO460 210 : 220 : 230 REM slide rutin 240 IFra<0 THEN ra=r 250 rb=r:t=s+v*z7:POKEvn,v*z7:POKEnl,fl(ra):POKEnh,fh(ra):SYSs2::POKEt+z4,wv+z1 260 FORi=raTOrbSTEPSGN(rb-ra)/2:POKEt,fl(i):POKEt+1,fh(i):NEXT 270 IFPEEK(ik)=jANDPEEK(ik)-64THEN270 280 ra=rb:POKEt+z4,wv+p:v=v+mn*(z1+z3*(v=z2)):RETURN 290 : 300 REM chord subroutine 310 POKEbf,z0:FORi=z0TOz2:a=r+c(c1,c2,i):POKEvn,i*z7:POKEnl,fl(a) 320 POKEnh,fh(a):SYSs2:NEXT:POKEs+z4,wv+z1:POKEs+11,wv+z1:POKEs+18,wv+z1 330 IFPEEK(ik)=jANDPEEK(ik)-64THEN330 340 POKEs+z4,wv+p:POKEs+11,wv+p:POKEs+18,wv+p:RETURN 350 : 360 REM polyphonic subroutine 370 a=PEEK(ik):SYSs1:j=PEEK(et):IFj=z0ORa=zTHEN RETURN 380 FORi=z1TOj:r=k(PEEK(et+i))+oc:IFr=ocTHEN NEXT:RETURN 390 t(i)=v*z7:POKEvn,t(i):POKEnl,fl(r):POKEnh,fh(r):SYSs2 400 IFmnTHENv=v+z1:IFv=z3THENv=z0 410 NEXT:FORi=z1TOj:POKEs+t(i)+z4,wv+z1:NEXT 420 SYSs1:IFj=PEEK(et)ANDa=PEEK(ik)THEN 420 430 FORi=z1TOj:POKEs+t(i)+z4,wv+p:NEXT:GOTO370 440 : 450 : 460 REM initialize variables 470 PRINT"{clear}"CHR$(142);CHR$(8);:POKE53280,0:POKE53281,0:POKE788,52:REM ignore r/s 480 FOR i=1TO39:sp$=sp$+" ":ln$=ln$+"#":NEXT 490 PRINT"{white}octave=5{space*2}voice=1 :c:s:m:{reverse on}v{reverse off}:{reverse on}p{reverse off}: volyme=10{right}"ln$ 500 POKE214,23:PRINT:PRINTTAB(15)"musicmaster{home}{down*2}" 510 a$="please stand by{white}":POKE214,21:PRINT:PRINTTAB(13)"{green}"a$:s=54272:GOSUB1580 520 DIMfl(134),fh(134),k(255),c(8,2,2):oc=48:vl=10:mn=1:ll=1:ra=-1 530 z1=1:z2=2:z3=3:z4=4:z7=7:zs=64:ff=255:hb=256 540 ik=197:bf=198:vn=251:nl=900:nh=901:et=829:s1=49152:s2=49408:FORi=z1TO41 550 k(ASC(MID$("q2w3er5t6y7ui9o0p@-*{pound}^{home}{ct c}zsxdcvgbhnjm,l.:/",i)))=i:NEXT 560 PRINTTAB(13)"{cyan}{up}"a$:r=5.8:a=10787.4138:j=z2^(-z1/12) 570 FORi=94TO0STEP-1:fh(i)=INT(a*r/hb):fl(i)=a*r-hb*fh(i):a=a*j:NEXT 580 PRINTTAB(13)"{up}"a$:GOSUB1310 590 : 600 REM read all data 610 FORi=z0TO8:FORj=z0TOz2:READc(i,j,0),c(i,j,1),c(i,j,2):NEXT:READc$(i):NEXT 620 READnm$(0),nm$(1),nm$(2):FORi=1TO8:READad(i),sr(i),wv(i),pl(i),ph(i):NEXT 630 FORr=1TO2:READi,j:FORa=iTOj:READin:POKEa,in:NEXT:NEXT 640 PRINTTAB(9)"{down}(use control-x to exit)":i=1:GOSUB860 650 : 660 : 670 REM nucleus 680 WAITbf,ff:j=PEEK(ik):GETa$:r=k(ASC(a$))+oc:IFr=ocTHENGOSUB800:GOTO680 690 IFslTHENGOSUB240:GOTO680 700 IFchTHENGOSUB310:GOTO680 710 IFllTHENGOSUB370:GOTO680 720 t=s+v*z7:POKEvn,v*z7:POKEnl,fl(r):POKEnh,fh(r):SYSs2:POKEt+z4,wv+z1 730 IFmnTHENv=v+z1:IFv=z3THENv=z0 740 IFPEEK(ik)=jANDPEEK(ik)-64THEN740 750 POKEt+z4,wv+p:WAITbf,ff:GETa$:j=PEEK(ik):r=k(ASC(a$))+oc:IFr-ocTHEN720 760 GOSUB800:GOTO680 770 : 780 : 790 REM parameter functions 800 IFch=0THEN830 810 FORi=0TO2:IFa$=MID$("[])",i+1,1)THENc2=i:PRINT"{home}{down}"TAB(23)nm$( i):RETURN 820 NEXT:a=ASC(a$):IFa>32ANDa<42THENc1=a-33:PRINT"{home}{down}"TAB(11)c$(c1):RETURN 830 FORi=1TO8:IFa$<>MID$("{black}{white}{red}{cyan}{156}{green}{blue}{yellow}",i,1)THENNEXT:GOTO850 840 oc=12*(i-z1):PRINT"{home}"TAB(7)MID$(STR$(i),2):RETURN 850 FORi=1TO8:IFa$<>MID$("{orange}{brown}{pink}{dark gray}{gray}{light green}{light blue}{light gray}",i,1)THENNEXT:GOTO880 860 POKE902,pl(i):POKE903,ph(i):wv=wv(i):POKE904,wv:POKE905,ad(i):POKE906,sr(i) 870 PRINT"{home}"TAB(16)MID$(STR$(i),2):RETURN 880 IFa$<>"{f1}"ANDa$<>"{f3}"THEN930 890 vl=vl-(vl<15ANDa$="{f1}")+(vl>0ANDa$="{f3}"):POKEs+24,vl 900 PRINT"{home}"TAB(37)RIGHT$("0"+MID$(STR$(vl),2),2):RETURN 910 : 920 REM style funktions 930 IFa$="{f4}"THENp=1-p:POKE1047,13+128*p:GOTO1580 940 IFa$="{f6}"THENmn=1-mn:POKE1049,22+128*mn:GOTO1580 950 IFa$="{f8}"THENll=1-ll:POKE1051,16+128*ll:RETURN 960 IFa$="{f7}"THENsl=1-sl:ra=-1:POKE1045,19+128*sl:ch=1:GOTO990 970 IFa$<>"{f5}"THEN1010 980 POKE1045,19:sl=0 990 ch=1-ch:POKE1043,3+128*ch:IFch=0THENPRINT"{home}{down}"ln$:PRINTsp$:RETURN 1000 PRINT"{home}{down}"sp$"{right}{up}chord type:"c$(c1)TAB(23)nm$(c2)" inversion{right}"ln$:RETURN 1010 IFa$=" "THENGOSUB1580:ra=-1:POKEbf,z0:RETURN 1020 IFa$="{ct x}"THEN GOSUB1580::PRINT"{clear}";:POKE788,49:END 1030 IFa$<>"{f2}"THENRETURN 1040 : 1050 : 1060 REM display waveform parameters 1070 GOSUB1470:POKE214,13:PRINT 1080 PRINT"voice to be defined (1-8)";:j=1:GOSUB1500 1090 IFin<1ORin>8THENGOSUB1470:GOTO1400 1100 i=in:PRINTTAB(31)"att:"MID$(STR$(INT(ad(i)/16)),2) 1110 PRINTTAB(31)"dec:"MID$(STR$(ad(i)AND15),2) 1120 PRINTTAB(31)"sus:"MID$(STR$(INT(sr(i)/16)),2) 1130 PRINTTAB(31)"rel:"MID$(STR$(sr(i)AND15),2) 1140 PRINTTAB(31)"wvf:{cyan}"MID$("sawtripulnse",3*LOG(wv(i))/LOG(2)-11,3)"{white} 1150 IFwv(i)=64THENPRINTTAB(31)"pls:"MID$(STR$(ph(i)*hb+pl(i)),2) 1160 : 1170 REM define a new waveform 1180 POKE214,14:PRINT:PRINT"attack rate (0-15)";:j=2:GOSUB1500:IFerTHEN1070 1190 ad=in:PRINT"decay rate (0-15)";:GOSUB1500:IFerTHEN1070 1200 ad=ad*16ORin:PRINT"sustain level (0-15)";:GOSUB1500:IFerTHEN1070 1210 sr=in:PRINT"release rate (0-15)";:GOSUB1500:IFerTHEN1070 1220 sr=sr*16ORin:PRINT"{cyan}s{white}aw{cyan}t{white}riangle{cyan} p{white}ulse{cyan} n{white}oise";:j=1:GOSUB1500 1230 FORj=1TO4:IFin$<>MID$("stpn",j,1)THENNEXT:GOTO1070 1240 wf=2^(j+3):IFwf<>64THEN1260 1250 PRINT"pulse rate (0-4095)";:j=4:GOSUB1500:pu=in:IFin<0ORin>4095THEN1070 1260 wv(i)=wf:pl(i)=pu-hb*INT(pu/hb):ph(i)=INT(pu/hb):ad(i)=ad:sr(i)=sr 1270 GOSUB1470:GOSUB1410:GOTO860 1280 : 1290 : 1300 REM disply keyboards 1310 POKEs+24,vl 1320 REM 1330 REM 1340 REM 1350 REM pgm senare 1360 REM 1370 REM 1380 REM 1390 : 1400 REM display funktion meny 1410 POKE214,11:PRINT:PRINT" f1 --louder{space*7}f2 --define waveform 1420 PRINT" {down}f3 --softer{space*7}f4{space*2}-- maintain{white} 1430 PRINT" {down}f5 -- chords{space*6}{white}f6 -- multivoice{white} 1440 PRINT" {down}f7 --slides{space*7}f8 --polyphonic":RETURN 1450 : 1460 REM clear display area 1470 POKE214,12:PRINT:FORj=1TO11::PRINTsp$:NEXT:RETURN 1480 : 1490 REM input subroutine 1500 in$="":PRINT"? "; 1510 PRINT"{reverse on} {reverse off}{left}";:WAITbf,ff:GETa$:IFa$="{ct x}"THEN1020 1520 a=ASC(a$):IFa=13THENPRINT" ":in=VAL(in$):er=(in<0ORin>15)ORin$="":RETURN 1530 IFa=20ANDLEN(in$)THENPRINT" {left*2} {left}";:in$=LEFT$(in$,LEN(in$)-1) 1540 IF(aAND127)<35ORLEN(in$)=jTHEN1510 1550 PRINTa$;:in$=in$+a$:GOTO1510 1560 : 1570 REM clear music chip 1580 FORi=4TO18STEP7:POKEs+i,0:NEXT:FORi=0TO23:POKEs+i,0:NEXT:RETURN 1590 : 1600 : 1610 REM chord data 1620 DATA,4,7,,3,8,,5,9,"major{space*4}",,3,7,,4,9,,5,8,"minor{space*4}" 1630 DATA,3,6,,3,9,,6,9,"diminished",,4,8,,4,8,,4,8,"augmented " 1640 DATA,4,11,,4,11,,4,11,"major 7th ",,3,10,,3,10,,3,10,"minor 7th " 1650 DATA,4,10,,4,10,,4,10,"domin 7th",4,7,9,4,7,9,4,7,9,"major 6th " 1660 DATA3,7,9,3,7,9,3,7,9,"minor 6th","{space*2}root"," first","second" 1670 : 1680 REM waveform parameter data 1690 DATA,249,16,,,,249,32,,,,249,64,160,15,,249,128,,,,240,16,,,204,204,16,, 1700 DATA,252,64,200,,192,240,32,, 1710 : 1720 REM multi-input assembly code 1730 DATA49152,49294,120,169,,141,61,3,170,169,254,133,252,165,252,141,,220,173 1740 DATA1,220,157,143,192,232,56,38,252,176,239,162,,160,,189,143,192,42,176 1750 DATA29,72,132,253,138,10,10,10,5,253,168,185,79,192,238,61,3,172,61,3,153 1760 DATA61,3,104,192,3,240,12,164,253,200,192,8,208,219,232,224,8,208,209,88 1770 DATA96,17,135,134,133,136,29,13,20,0,69,83,90,52,65,87,51,88,84,70,67,54 1780 DATA68,82,53,86,85,72,66,56,71,89,55,78,79,75,77,48,74,73,57,44,64,58,46 1790 DATA45,76,80,43,47,94,61,1,19,59,42,92,3,81,2,32,50,4,95,49 1800 : 1810 REM musicloader assembly code 1820 DATA49408,49454,169,212,133,252,169,,160,6,145,251,136,145,251,170,169,8 1830 DATA136,145,251,138,145,251,136,192,1,208,249,188,41,193,185,132,3,145,251 1840 DATA232,224,6,208,243,96,2,3,,1,6,5 stop tok64 (bastext 1.0)