start tok64 d64-yXKIGi 100 REM ============================== 110 REM = music editor 64 = 120 REM = (c) mattias h[ggstr{pound}m = 130 REM = and fredrik huss 1987 = 140 REM ============================== 150 buffer$="":POKE808,251 160 mi=PEEK(45)+PEEK(46)*256 170 GOSUB1370:GOSUB50000:GOSUB1180 180 : 190 PRINT"{clear}":POKE53280,0:POKE53281,11 200 PRINT"{right*6}{yellow}{reverse on}{ct h}{ct n}{space*11}{right*3}{space*13}" 210 PRINT"{right*6}{light green}{reverse on}{ct h}{ct n} M U S I C {right*3} E D I T O R " 220 PRINT"{right*6}{cyan}{reverse on}{ct h}{ct n}{space*11}{right*3}{space*13}" 230 PRINT"{right*6}{light green}By Fredrik and Mattias 1987 240 PRINT"{home}{down*17}{right}{light gray}Octave {yellow}4{space*2}{light gray}Tempo {yellow}10{space*2}{light gray}Tone {yellow}1 - 38 250 PRINT"{down}{right}{light gray}Voice{space*5}Att/Dec{space*3}Sus/Rel{space*3}Waveform{down}{yellow} 260 FORi=1TO3:PRINTi,PEEK(20461+i),PEEK(20465+i),PEEK(20469+i):NEXT 270 PRINT"{home}{down*5}":FORi=1TO3:PRINT"{yellow} Voice"i"{down*2}{light gray}":NEXT 280 INPUT"{right}{light green}Zap memory (y/n)";sv$:IFsv$<>"y"ANDsv$<>"n"THEN270 290 IFsv$="y"THENGOSUB1140 300 PRINT"{up}{space*27}" 310 GOSUB1070:GOTO380 320 FORi=0TO2 330 FORj=1TO38:PRINT"{home}{light gray}{down*6}"TAB(j);:FORn=0TOi*3:PRINT"{down}";:NEXT 340 IFPEEK(20500+i*600+j)=255THENPRINT"-{down}{left}.":GOTO370 350 IFPEEK(20500+i*600+j)=0THENPRINT"/{down}{left}.":GOTO370 360 lb=PEEK(20500+i*600+j):hb=PEEK(20800+i*600+j):GOSUB830 370 NEXTj,i 380 lg=1:sm=1:oc=4:te=10:lx=0:POKE20453,1 390 sc=1184+lg-lx+sm*120:IFsc<1024ORsc>2023THENPRINT"illegal":STOP 400 POKEsc,PEEK(sc)OR128 410 GETa$:a=PEEK(653):IFa$=""ANDa<>4THEN410 420 POKEsc,PEEK(sc)AND127 430 : 440 IFa=4THENGOSUB1230 450 IFa$="{arrow left}"THENGOSUB1630 460 IFa$="{clear}"THENGOSUB1140:GOSUB1070:GOTO700 470 IFa$="{f1}"ANDoc>2THENoc=oc-1:GOTO700 480 IFa$="{f3}"ANDoc<6THENoc=oc+1:GOTO700 490 IFa$="{f5}"THENGOSUB50200:GOTO700 500 IFa$="{f7}"THENGOSUB50300:GOTO700 510 IFa$="{f2}"ANDte>1THENte=te-1:GOTO700 520 IFa$="{f4}"ANDte<25THENte=te+1:GOTO700 530 IFa$="{f6}"ANDlx>0THENlx=lx-30:lg=lx+38:GOSUB1070 540 IFa$="{f8}"ANDlx<180THENlx=lx+30:lg=lx+1:GOSUB1070 550 IFa$="{right}"THENlg=lg+1:GOTO700 560 IFa$="{left}"THENlg=lg-1:GOTO700 570 IFa$="{down}"ANDsm<3THENsm=sm+1:GOTO700 580 IFa$="{up}"ANDsm>1THENsm=sm-1:GOTO700 590 IFa$="/"THENGOSUB860:lg=lg+1:GOTO700 600 IFa$=" "THENGOSUB910:lg=lg+1:GOTO700 610 IFa$="^"THENGOSUB960:lg=lg+1:GOTO700 620 FORi=1TOan:IFa$<>LEFT$(n$(i),1)THEN680 630 IFoc<>VAL(RIGHT$(n$(i),1))THEN680 640 POKE19900+lg+sm*600,l(i):POKE20200+lg+sm*600,h(i):PRINT"{home}{down*3}"TAB(lg-lx); 650 POKE24400+lg+sm*600,ASC(a$) 660 POKE24700+lg+sm*600,ASC(MID$(n$(i),2,1)) 670 FORn=0TOsm*3:PRINT"{down}";:NEXT:PRINTa$"{down}{left}"RIGHT$(n$(i),1):lg=lg+1:GOTO720 680 NEXT 690 : 700 PRINT"{home}{down*17}{right}{light gray}Octave{yellow}"oc" {light gray}Tempo{yellow}"te"{left}{space*2}{light gray}Tone{yellow}"lx+1; 710 PRINT"{left} -"lx+38"{left} {light gray} 720 IFlg-lx<1THENlg=lx+38 730 IFlg-lx>38THENlg=lx+1 740 GOTO390 750 IFlg>76ANDlx<38THENlx=38:GOSUB1070 760 IFlg>38ANDlx=0THENlx=38:GOSUB1070 770 IFlg>190THENlg=190 780 IFlg<40ANDlx<>0THENlx=0:GOSUB1070 790 GOTO390 800 IFlg<1THENlg=1:IFlcx<>0THENlx=0:GOSUB1070 810 IFlg>152ANDlx<>190THENlx=190:GOSUB1070 820 IFlg>115ANDlg<153ANDlx<> 830 a$="?.":FORw=1TOan:IFlb=l(w)ANDhb=h(w)THENa$=n$(w):GOTO850 840 NEXT 850 PRINTLEFT$(a$,1)"{down}{left}"RIGHT$(a$,1):RETURN 860 : 870 POKE19900+jg+sm*600,0:POKE20200+lg+sm*600,0:PRINT"{home}{down*3}"TAB(lg-lx); 880 POKE24400+lg+sm*600,ASC("/") 890 POKE24700+lg+sm*600,ASC(".") 900 FORn=0TOsm*3:PRINT"{down}";:NEXT:PRINT"/{down}{left}.":RETURN 910 : 920 POKE19900+lg+sm*600,255:POKE20200+lg+sm*600,255:PRINT"{home}{down*3}"TAB(lg-lx); 930 POKE24400+lg+sm*600,ASC("-") 940 POKE24700+lg+sm*600,ASC(".") 950 FORn=0TOsm*3:PRINT"{down}";:NEXT:PRINT"-{down}{left}.":RETURN 960 : 970 POKE19900+lg+sm*600,254:POKE20200+lg+sm*600,254:PRINT"{home}{down*3}"TAB(lg-lx); 980 POKE24400+lg+sm*600,ASC("^") 990 POKE24700+lg+sm*600,ASC(".") 1000 FORn=0TOsm*3:PRINT"{down}";:NEXT:PRINT"^{down}{left}.":RETURN 1010 FORi=1TO3:FORj=lx+1TO38+lx 1020 PRINT"{home}{down*3}";TAB(j-lx);:FORn=0TOi*3:PRINT"{down}";:NEXT 1030 PRINTCHR$(PEEK(24400+i*600+j))"{down}{left}"; 1040 IFPEEK(24700+600+j)=0THENPRINT".":GOTO1060 1050 PRINTMID$(STR$(PEEK(24700+i*600+j)),2) 1060 NEXT:NEXT:RETURN 1070 FORi=1TO3:m2=24401+i*600+lx 1080 POKEmi+2,38:POKEmi+3,m2AND255:POKEmi+4,m2/256 1090 PRINT"{home}{down*3}{light gray} ";:FORn=0TOi*3:PRINT"{down}";:NEXT 1100 PRINTbu$ 1110 m2=m2+300:POKEmi+2,38:POKEmi+3,m2AND255:POKEmi+4,m2/256 1120 PRINT"{light gray} "bu$"{light gray} 1130 NEXT:RETURN 1140 FORi=20500TO22256:POKEi,255:NEXT 1150 FORx=1TO3:FORi=24400+x*600TO24656+x*600:POKEi,ASC("-"):NEXT 1160 FORi=24700+x*600TO24956+x*600:POKEi,ASC("."):NEXT:NEXT 1170 RETURN 1180 IFPEEK(20460)=ASC("l")THENRETURN 1190 POKE20462,15:POKE20463,15:POKE20464,15 1200 POKE20466,0:POKE20467,0:POKE20468,0 1210 POKE20470,33:POKE20471,17:POKE20472,17 1220 POKE20460,ASC("l"):RETURN 1230 FORi=0TO2:FORj=0TO1 1240 PRINT"{home}{down*20}"TAB(j*10+9);:FORn=0TOi:PRINT"{down}";:NEXT 1250 INPUTa1$:a1=VAL(LEFT$(a1$,4)):IFa1<0ORa1>255THEN1240 1260 POKE20462+i+j*4,a1:NEXT 1270 PRINT"{home}{down*20}"TAB(29);:FORn=0TOi:PRINT"{down}";:NEXT 1280 INPUTa1$:a1=VAL(LEFT$(a1$,4))OR1 1290 IFa1<>17ANDa1<>33ANDa1<>129THEN1270 1300 POKE20470+i,a1:NEXT 1310 PRINT"{home}{down*19}{right}{light gray}Voice{space*5}Att/Dec{space*3}Sus/Rel{space*3}Waveform{down}{yellow} 1320 PRINT"{space*37}" 1330 PRINT"{space*37}" 1340 PRINT"{space*36}{up*3} 1350 FORi=1TO3:PRINTi,PEEK(20461+i),PEEK(20465+i),PEEK(20469+i):NEXT 1360 RETURN 1370 DIMl(100),h(100),n$(100) 1380 an=an+1:READn$(an),h(an),l(an) 1390 IFn$(an)<>"q"THEN1380 1400 RETURN 1410 : 1420 DATA"c3",8,97,"C3",8,225,"d3",9,104,"D3",9,247 1430 DATA"e3",10,143,"f3",11,48,"F3",11,218 1440 DATA"g3",12,143,"G3",13,78,"a3",14,24,"A3",14,239,"b3",15,210 1450 : 1460 DATA"c4",16,195,"C4",17,195,"d4",18,209,"D4",19,239 1470 DATA"e4",21,31,"f4",22,96,"F4",23,181 1480 DATA"g4",25,30,"G4",26,156,"a4",28,49,"A4",29,233,"b4",31,165 1490 : 1500 DATA"c5",33,135,"C5",35,134,"d5",37,162,"D5",39,223,"e5",42,62 1510 DATA"f5",44,193,"F5",47,107,"g5",50,60,"G5",53,57,"a5",56,99 1520 DATA"A5",59,190,"b5",63,75 1530 : 1540 DATA"c6",67,15,"C6",71,12,"d6",75,69,"D6",79,191,"e6",84,125 1550 DATA"f6",89,131,"F6",94,214,"g6",100,121,"G6",106,115,"a6",112,199 1560 DATA"A6",119,124,"b6",126,151 1570 : 1580 DATA"c2",4,48,"C2",4,112,"d2",4,180,"D2",4,251 1590 DATA"e2",5,71,"f2",5,152,"F2",5,237,"g2",6,71,"G2",6,167 1600 DATA"a2",7,12,"A2",7,119,"b2",7,233 1610 : 1620 DATA".",,,q,, 1630 INPUT"{home}{down*15}{right}{light green}Do you want to stop (y/n)";ab$ 1640 IFab$<>"y"ANDab$<>"n"THEN1630 1650 PRINT"{up} 1660 IFab$="n"THENRETURN 1670 GOSUB50200:POKE808,237 1680 FORi=1TO255:IFPEEK(20500+i)=254THENPOKE20480,i-1:GOTO1700 1690 NEXT:POKE20480,255 1700 POKE20481,0:POKE20482,0 1710 PRINT"{clear}{down*2}51{0*3}pO20453,"MID$(STR$(i-1),2) 1720 PRINT"51010fori=1to"MID$(STR$((i+1)AND254),2)":readl1,h1,l2,h2,l3,h3 1730 PRINT"51020pO20500+i,l1:pO20800+i,h1 1740 PRINT"51030pO21100+i,l2:pO21400+i,h2 1750 PRINT"51040pO21700+i,l3:pO22{0*3}+i,h3:nE:reT 1760 PRINT"50207pO20044,"PEEK(20470)":poke20070,"PEEK(20471) 1770 PRINT"50208pO20096,"PEEK(20472)":pO54277,"PEEK(20462) 1780 PRINT"50209pO54277+7,"PEEK(20463)":pO54277+14,"PEEK(20464) 1790 PRINT"50210pO54278,"PEEK(20466)":pO54278+7,"PEEK(20467) 1800 PRINT"50211pO54278+14,"PEEK(20468)":pO20452,0:pO20454,"te 1810 PRINT"gO1840 1820 PRINT"{home}";:FORi=631TO641:POKEi,13:NEXT 1830 POKE198,11:END 1840 PRINT"{clear}{down*2}"51050+PEEK(20481)*10"data";:POKE641,0 1850 FORi=.TO1:FORj=.TO5 1860 PRINTMID$(STR$(PEEK(20501+PEEK(20481)*2+i+j*300)),2)",";:NEXT:NEXT 1870 POKE20481,PEEK(20481)+1:IFPEEK(20481)-1>PEEK(20480)/2THEN1900 1880 PRINT"{left} "CHR$(13)"gO1840{home}";:FORi=631TO640:POKEi,13:NEXT:POKE198,2:END 1890 : 1900 PRINT"{clear}{down}":FORi=.TO8:PRINT100+PEEK(20482)*90+i*10:NEXT:PRINT"gO1920{home}"; 1910 FORi=631TO640:POKEi,13:NEXT:POKE198,10:END 1920 POKE20482,PEEK(20482)+1:GOTO1900 50000 i=20000 50010 READa:IFa>-1THENPOKEi,a:i=i+1:c=c+a:GOTO50010 50020 IFc<>16052THENPRINT"{down}?data error";:END 50030 RETURN 50050 DATA238,226,79,172,226,79,204,227,79,208 50060 DATA105,169,,141,226,79,238,228,79,172 50070 DATA228,79,185,20,80,201,255,240,19,162 50080 DATA,142,4,212,141,,212,185,64,81 50090 DATA141,1,212,169,17,141,4,212,185,108 50100 DATA82,201,255,240,19,162,,142,11,212 50110 DATA141,7,212,185,152,83,141,8,212,169 50120 DATA17,141,11,212,185,196,84,201,255,240 50130 DATA19,162,,142,18,212,141,14,212,185 50140 DATA240,85,141,15,212,169,33,141,18,212 50150 DATA173,230,79,141,227,79,204,229,79,208,5,169,,141,228,79,76,49,234,-1 50200 FORi=1TO255:IFPEEK(20500+i)=254THENPOKE20453,i-1:GOTO50205 50202 NEXT:POKE20453,255 50205 FORi=54272TO54296:POKEi,0:NEXT:POKE54296,15 50207 POKE20044,PEEK(20470):POKE20070,PEEK(20471):POKE20096,PEEK(20472) 50208 POKE54277,PEEK(20462):POKE54277+7,PEEK(20463):POKE54277+14,PEEK(20464) 50209 POKE54278,PEEK(20466):POKE54278+7,PEEK(20467):POKE54278+14,PEEK(20468) 50210 POKE20452,0:POKE20454,te 50220 POKE56334,PEEK(56334)AND254:POKE788,32:POKE789,78:POKE56334,PEEK(56334)OR1 50230 RETURN 50300 POKE56334,PEEK(56334)AND254:POKE788,49:POKE789,234 50310 POKE56334,PEEK(56334)OR1 50320 FORi=54272TO54296:POKEi,0:NEXT 50330 RETURN stop tok64 (bastext 1.0)