0 CLR 5 IFPEEK(49152)<>169THENPOKE53265,0:LOAD"SYNTH ML",8,1 10 SYS49152:KB$(0)="[208]OLY":KB$(1)="[211]OLO":KB$(2)="[194]I-VOICE":KB$(3)="[212]RI-VOICE" 13 WV$(1)="[212]RIA":WV$(2)="[211]AWT":WV$(3)="[212]R[211]A":WV$(4)="[208]ULS":WV$(5)="[208]U[212]R" 14 WV$(6)="[208]U[211]A":WV$(7)="[208]U[212][211]":WV$(8)="[206]OIZ":XP=14:YP=7 15 DIMK(76),M(31):FORT=1TO24:READA,B:K(B)=A:NEXT:POKE53248,125:POKE53249,90 20 S=54272:M(5)=15:M(4)=17:M(25)=4:KB=197:M(3)=5:M(24)=31:M(23)=240:M(22)=200 25 M(28)=25:M(29)=25:M(30)=25:B=24:B$=" =[147][133]":FORT=STOS+24:POKET,0:NEXTT 27 FORT=0TO2:POKE49248+T*3,M(28)+T:NEXT 30 POKES+22,M(22):POKES+24,M(24):POKE53264,0:GOSUB320:POKE53265,27 35 DATA 8583,62,9094,31,9634,68,10207,32,10814,50,11457,63,12139,34,12860,65 40 DATA 13625,35,14435,70,15294,36,16203,66,17167,54,18188,38,19269,60 45 DATA 20415,29,21629,61,22915,45,24278,26,25721,23,27251,73,28871,75,30588,0 50 DATA 32407,1 55 REM ** WHICH KEYBOARD MODE? ** 60 IFM(31)=1THEN125 70 IFM(31)=2THEN230 75 IFM(31)=3THEN175 80 IFPEEK(56320)<>127THEN430 85 GETA$:IFA$=""THEN80 90 IFASC(A$)>95ORASC(A$)<19THEN280 95 F=K(ASC(A$)-19)/M(25+V/7):IFF=0THEN280 100 H=INT(F/256):L=F-(256*H) 105 POKES+4+V,M(V+4)AND254:POKES+V,L:POKES+1+V,H 110 POKES+4+V,M(V+4)OR1:V=V+7:IFV=21THENV=0 115 GOTO80 120 REM ** SOLO ** 125 GETA$:IFPEEK(56320)<>127THEN430 130 IFA$=""THEN155 135 IFASC(A$)>95ORASC(A$)<19THEN280 140 F=K(ASC(A$)-19)/M(25):IFF=0THEN280 145 H=INT(F/256):L=F-(256*H) 150 POKES,L:POKES+1,H:POKES+4,M(4) 155 IFPEEK(KB)<>64THEN125 160 IFPEEK(KB)=64THENPOKES+4,M(4)AND254 165 GOTO125 170 REM ** TRI-VOICE ** 175 GETA$:IFPEEK(56320)<>127THEN430 180 IFA$=""THEN210 185 IFASC(A$)>95ORASC(A$)<19THEN280 190 FORV=0TO14STEP7:F=K(ASC(A$)-19)/M(25+V/7):IFF=0THEN280 195 H=INT(F/256):L=F-(256*H):IFL-14<0THENL=L+14 200 POKES+1+V,H:POKES+V,L-V:NEXT:V=0 205 FORV=0TO14STEP7:POKES+4+V,M(V+4)OR1:NEXT:V=0 210 IFPEEK(KB)<>64THEN175 215 IFPEEK(KB)=64THENFORV=0TO14STEP7:POKES+4+V,M(V+4)AND254:NEXT:V=0 220 GOTO175 225 REM ** BI-VOICE ** 230 GETA$:IFPEEK(56320)<>127THEN430 235 IFA$=""THEN260 240 IFASC(A$)>95ORASC(A$)<19THEN280 245 FORV=0TO7STEP7:F=K(ASC(A$)-19)/M(25+V/7):IFF=0THEN280 250 H=INT(F/256):L=F-(256*H):IFL<7THENL=L+7 255 POKES+V,L-V:POKES+1+V,H:NEXT:V=0:POKES+4,M(4)OR1:POKES+11,M(11)OR1 260 IFPEEK(KB)<>64THENGOTO230 265 IFPEEK(KB)=64THENFORV=0TO14STEP7:POKES+4+V,M(V+4)AND254:NEXT:V=0 270 GOTO230 275 REM ** KB MODE, EQUALIZE, RUN ** 280 FORT=1TO4:IFA$<>MID$(B$,T,1)THENNEXT:GOTO60 281 ONTGOTO295,288,287,282 282 PRINT"" 283 SYS50078,128,M(24),24:M(24)=PEEK(780) 284 IFM(24)AND128THENPRINTTAB(29)"[154][207]FF":GOTO60 285 PRINTTAB(29)" ":GOTO60 287 RUN 288 GOSUB320:GOTO60 290 REM ** KEYBOARD MODE ** 295 FORV=0TO14STEP7:POKES+4+V,M(V+4)AND254:NEXT:V=0:M(31)=M(31)+1 300 POKES+14,M(14):POKES+15,M(15):IFM(31)=4THENM(31)=0 305 PRINT""TAB(20)KB$(M(31))" ":GOTO60 315 REM ** EQUALIZE VOICES ** 320 FORV=0TO14STEP7:M(V+2)=M(E+2):M(V+3)=M(E+3):M(V+4)=M(E+4):M(V+5)=M(E+5) 323 M(V+6)=M(E+6):M(25+V/7)=M(25+E/7) 325 POKES+2+V,M(E+2):POKES+3+V,M(E+3):POKES+5+V,M(E+5):POKES+6+V,M(E+6) 326 POKES+4+V,M(E+4):NEXT 327 REM ** PRINT VALUES ** 330 PRINT""TAB(20)KB$(M(31)) 335 FORV=0TO14STEP7:T=7+V/7*13:PRINT"" 337 PRINTTAB(T+1)WV$((M(E+4)AND240)/16) 340 PRINTTAB(T)" [157][157][157][157][157]"M(E+2)+M(E+3)*256"[156]" 345 IF(M(E+4)AND4)=0THENPRINTTAB(T)" [207]FF":GOTO350 347 PRINTTAB(T)" [207]N " 350 IF(M(E+4)AND2)=0THENPRINTTAB(T)" [207]FF":GOTO360 355 PRINTTAB(T)" [207]N " 360 PRINT"[150]"TAB(T)(M(E+5)AND240)/16"[157] " 365 PRINTTAB(T)M(E+5)AND15"[157] " 370 PRINTTAB(T)(M(E+6)AND240)/16"[157] " 375 PRINTTAB(T)M(E+6)AND15"[157] " 380 PRINT""TAB(T)6-(LOG(M(E/7+25))/LOG(2)):NEXT:V=0 385 PRINT"[159]"TAB(14)M(21)+M(22)*8"[158]"TAB(31)M(14)+M(15)*256 390 IFM(23)AND1THENPRINTTAB(15)"[159]1[145]" 392 IFM(23)AND2THENPRINTTAB(17)"[159]2[145]" 394 IFM(23)AND4THENPRINTTAB(19)"[159]3[145]" 395 PRINT"[158]"TAB(31)M(28) 400 IFM(24)AND16THENPRINTTAB(15)"[159][204]P[145]" 401 IFM(24)AND64THENPRINTTAB(18)"[159][200]P[145]" 402 IFM(24)AND32THENPRINTTAB(21)"[159][194]P[145]" 405 PRINT"[158]"TAB(31)M(29) 410 PRINT"[159]"TAB(14)(M(23)AND240)/16"[158]"TAB(31)M(30) 415 PRINT"[159]"TAB(14)M(24)AND15 420 RETURN 425 REM ** MOVE, VOICES 15+15*8 34+7*8 430 IFYP>16THEN570 435 POKE53248,13+XP*8:POKE53249,34+YP*8 440 J=PEEK(56320):IFJ=127THEN60 443 IF(JAND16)=0THEN634 445 IF(JAND1)=0ANDYP<>7THENYP=YP-1 500 IF(JAND2)=0THENYP=YP+1:IFYP=16THENYP=19:GOTO570 550 IF(JAND4)=0ANDE<>0THENE=E-7:XP=XP-13 555 IF(JAND8)=0ANDE<>14THENE=E+7:XP=XP+13 560 IFXP<>40ANDXP<>8THENPOKE53264,0:XP=14+E/7*13 561 IFXP=40THENPOKE53264,1:XP=8 562 GOTO435 563 REM ** FILTER AND MOD ** 570 IFXP<>8THEN600 571 REM ** MODULATION ** 572 IFYP=23THENYP=22 573 POKE53248,13+XP*8:POKE53249,34+YP*8 574 J=PEEK(56320):IFJ=127THEN60 575 IF(JAND16)=0THEN634 576 IF(JAND1)=0THENYP=YP-1:IFYP=18THENXP=14+E/7*13:YP=15:GOTO560 580 IF(JAND2)=0ANDYP<>22THENYP=YP+1 585 IF(JAND4)=0THEN600 595 GOTO573 597 REM ** FILTER ** 600 XP=26:POKE53264,0 605 POKE53248,13+XP*8:POKE53249,34+YP*8 607 J=PEEK(56320):IFJ=127THEN60 608 IF(JAND16)=0THEN634 610 IF(JAND1)=0THENYP=YP-1:IFYP=18THENXP=14+13*E/7:YP=15:GOTO560 615 IF(JAND2)=0ANDYP<>23THENYP=YP+1 620 IF(JAND8)=0THENPOKE53264,1:XP=8:GOTO572 630 GOTO605 633 REM ** COMPUTE ** 634 POKE214,YP-2:IFYP>16THEN655 640 REM ** COMPUTE, VOICES ** 645 ONYP-6GOTO685,720,745,747,770,805,773,810,850 650 REM ** COMPUTE, FILTER OR MOD ** 655 IFXP=8THEN675 660 REM ** COMPUTE, FILTER ** 665 ONYP-18GOTO880,915,960,995,997 670 REM ** COMPUTE, MODULATION ** 675 ONYP-18GOTO1035,1080,1081,1082 680 REM ** WAVEFORM ** 685 PRINT"" 690 J=PEEK(56320):IF(JAND1)=0AND(M(E+4)AND128)=0THENM(E+4)=M(E+4)+16 695 IF(JAND2)=0AND(M(E+4)AND240)>16THENM(E+4)=M(E+4)-16 700 PRINTTAB(8+13*E/7)WV$(INT(M(E+4)/16))"[145]":POKES+E+4,M(E+4)AND254 705 IFJ=127THEN60 710 GOTO690 715 REM ** PULSE ** 720 P=M(E+2)+M(E+3)*256:PRINT"" 724 J=PEEK(56320):IF(JAND1)=0ANDP<4076THENP=P+20 725 IF(JAND2)=0ANDP>19THENP=P-20 727 IF(JAND8)=0ANDP<4095THENP=P+1 730 PRINTTAB(7+13*E/7)P"[157] [145]":POKES+E+2,PAND255:POKES+E+3,INT(P/256) 735 IFJ=127THENM(E+2)=PAND255:M(E+3)=INT(P/256):GOTO60 740 GOTO724 743 REM ** RING OR SYNC ** 745 PRINT"[156]":EO=4:GOTO750 747 PRINT"[156]":EO=2 750 SYS50078,EO,M(E+4),E+4:M(E+4)=PEEK(780):POKES+E+4,M(E+4)AND254 755 IF(M(E+4)ANDEO)=0THENPRINTTAB(8+13*E/7)"[207]FF[145]":GOTO760 757 PRINTTAB(8+13*E/7)"[207]N [145]" 760 GOTO60 765 REM ** A,S ** 770 PRINT"[150]":EO=5:GOTO774 773 PRINT"[150]":EO=6 774 P=(M(E+EO)AND240)/16 775 J=PEEK(56320):IF(JAND1)=0ANDP<>15THENP=P+1 780 IF(JAND2)=0ANDP<>0THENP=P-1 785 PRINTTAB(7+13*E/7)P"[157] [145]":POKES+E+EO,(M(E+EO)AND15)+P*16 790 IFJ=127THENM(E+EO)=(M(E+EO)AND15)+P*16:GOTO60 795 GOTO775 800 REM ** D,R ** 805 PRINT"[150]":EO=5:GOTO815 810 PRINT"[150]":EO=6 815 P=M(E+EO)AND15 820 J=PEEK(56320):IF(JAND1)=0ANDP<>15THENP=P+1 825 IF(JAND2)=0ANDP<>0THENP=P-1 830 PRINTTAB(7+13*E/7)P"[157] [145]":POKES+E+EO,(M(E+EO)AND240)+P 835 IFJ=127THENM(E+EO)=(M(E+EO)AND240)+P:GOTO60 840 GOTO820 845 REM ** OCTAVE ** 850 PRINT"":P=6-(LOG(M(E/7+25))/LOG(2)) 855 J=PEEK(56320):IF(JAND1)=0ANDP<>7THENP=P+1 856 IF(JAND2)=0ANDP<>-5THENP=P-1 860 PRINTTAB(7+13*E/7)P"[145]" 865 IFJ=127THENM(E/7+25)=2^(6-P):GOTO60 870 GOTO855 875 REM ** CUTOFF FREQ ** 880 PRINT"[159]":P=M(21)+M(22)*8 885 J=PEEK(56320):IF(JAND1)=0ANDP<2028THENP=P+20 890 IF(JAND2)=0ANDP>19THENP=P-20 893 IF(JAND8)=0ANDP<2047THENP=P+1 895 PRINTTAB(14)P"[157] [145]" 897 M(21)=PAND7:M(22)=INT(P/8):POKES+21,M(21):POKES+22,M(22) 900 IFJ=127THEN60 905 GOTO885 910 REM ** VOICES ** 915 PRINTTAB(15)"[159] [145]":P=M(23)AND7 920 P=P+1:POKES+23,(M(23)AND248)+P:IFP=8THENP=0 930 IFPAND1THENPRINTTAB(15)"[159]1[145]" 935 IFPAND2THENPRINTTAB(17)"[159]2[145]" 940 IFPAND4THENPRINTTAB(19)"[159]3[145]" 950 M(23)=(M(23)AND248)+P:GOTO60 955 REM ** MODE ** 960 PRINTTAB(15)"[159] [145]":P=M(24)AND112 965 P=P+16:IFP=128THENP=0 967 POKES+24,(M(24)AND143)+P 970 IFPAND16THENPRINTTAB(15)"[159][204]P[145]" 975 IFPAND32THENPRINTTAB(18)"[159][194]P[145]" 980 IFPAND64THENPRINTTAB(21)"[159][200]P[145]" 985 M(24)=(M(24)AND143)+P:GOTO60 990 REM ** RESONANCE, VOLUME ** 995 EO=23:A=15:SI=16:P=(M(EO)AND240)/16:GOTO998 997 EO=24:A=240:SI=1:P=M(EO)AND15 998 PRINT"[159]" 1000 J=PEEK(56320):IF(JAND1)=0ANDP<>15THENP=P+1 1005 IF(JAND2)=0ANDP<>0THENP=P-1 1010 PRINTTAB(14)P"[157] [145]":POKES+EO,(M(EO)ANDA)+P*SI 1020 IFJ=127THENM(EO)=(M(EO)ANDA)+P*SI:GOTO60 1025 GOTO1000 1030 REM ** MODULATION FREQ ** 1035 PRINT"[158]":P=M(14)+M(15)*256 1040 J=PEEK(56320):IF(JAND1)=0ANDP<65436THENP=P+100 1045 IF(JAND2)=0ANDP>99THENP=P-100 1047 IF(JAND4)=0ANDP>0THENP=P-1 1050 IF(JAND8)=0ANDP<65535THENP=P+1 1055 PRINTTAB(31)P"[157] [145]" 1060 M(15)=INT(P/256):M(14)=P-INT(P/256)*256:POKES+14,M(14):POKES+15,M(15) 1065 IFJ=127THEN60 1070 GOTO1040 1075 REM ** ADD1,2,3 ** 1080 EO=0:GOTO1085 1081 EO=1:GOTO1085 1082 EO=2 1085 PRINT"[158]":P=M(28+EO) 1090 J=PEEK(56320):IF(JAND1)=0ANDP<25THENP=P+1 1095 IF(JAND2)=0ANDP>0THENP=P-1 1100 PRINTTAB(31)P"[157] [145]" 1115 IFJ=127THENM(28+EO)=P:POKE49248+EO*3,P:GOTO60 1120 GOTO1090