Home » Personal collection » Commodore disks » disk54a_sound_master_64.d64 » sm28
sm28
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Personal collection » Commodore disks » disk54a_sound_master_64.d64 |
Filename: | sm28 |
Read OK: | ✔ |
File size: | 21DD bytes |
Load address: | 0801 |
Exec address: | 0000 |
File contents
10 IF PEEK(49170)<>18 OR PEEK(49200)<>125 THEN LOAD"SOUND-32",8,1 12 SYS51456 15 AD=16384:X=2:Y=4:XS=2:YS=4:SYS 49152 20 P=PEEK(2):XZ=P 30 GETK$:IFK$<>""THEN30 35 IFP=1THEN210 40 IFP=2THEN2500 50 IFP=3THEN2550 60 IFP=4THENPRINT"<clr><orange>";:END 70 IFP=5THEN720 80 IFP=6THEN2600 90 IFP=7THEN1400 100 IFP=8THEN1470 110 IFP=9THEN1570 130 IFP=11THEN1900 140 POKE2,XZ:SYS49280:P=PEEK(2):XZ=P 150 GOTO30 160 POKE214,17:POKE211,25:SYS58732:PRINT" " 170 POKE214,18:POKE211,25:SYS58732:PRINT" " 180 POKE214,17:POKE211,25:SYS58732:PRINT"<cyan>";SPC(INT(7-0.5*LEN(M1$)));M1$ 190 POKE214,18:POKE211,25:SYS58732:PRINTSPC(INT(7-0.5*LEN(M2$)));M2$ 200 PRINT"<orange>":RETURN 210 M1$="EDIT":M2$="MODE":GOSUB160:X=XS:Y=YS 220 POKE251,AD-INT(AD/256)*256:POKE252,INT(AD/256):SYS51520:GOSUB490 230 GETK$:IFK$=""THEN230 240 FL=1:K=ASC(K$):IFK=17 OR K=29 OR K=59 OR K=47 THEN330 245 IFK>32 AND K<95 AND X=2THENFL=0 250 IF(K>47 AND K<56)AND(X=9 OR X=14 OR X=19)THEN FL=0 260 IF(K>64 AND K<72)AND(X=10 OR X=15 OR X=20)THENFL=0 270 IF K=35 AND(X=11 OR X=16 OR X=21)THENFL=0 280 IF(K=80 OR K=70 OR K=60 OR K=62)AND(X=5 OR X=6)THENFL=0 285 IF (K=60 OR K=62) AND X=6 THEN FL=1 290 IF K=77 AND X=5 THENFL=0 295 IF FL=0THEN320 300 IFK=68 OR K=83 OR K=81 OR K=67 OR K=77 OR K=66THENFL=2 310 IFFL=2 AND(X=12 OR X=17 OR X=22)THENFL=0 315 IFK=32THENFL=0 320 IFFL=0THENGOSUB510:K=29 330 IFK=17THEN540 340 IFK=29THEN600 350 IFK=59 AND Y<>4THENGOSUB490:GOSUB670:Y=Y-1:AD=AD-5:GOSUB490:GOTO230 360 IFK=47 AND Y<>18THENGOSUB490:GOSUB670:Y=Y+1:GOSUB490:AD=AD+5:GOTO230 370 IFK=59 AND AD>16384THENGOSUB490:GOSUB670:AD=AD-5:GOSUB450:GOTO230 380 IFK=47 AND AD<40959THENGOSUB670:AD=AD+5:GOSUB450:GOTO230 390 IFK=13THEN470 400 IFK=133 AND AD>16459THENGOSUB670:AD=AD+75:GOSUB450:GOTO230 410 IFK=139 AND AD<40879THENGOSUB670:AD=AD-75:GOSUB450:GOTO230 415 GOSUB420:GOTO230 420 SC=54272:POKESC+24,12:POKESC+5,9:POKESC+4,17 430 POKESC+1,16:POKESC,195:FORP=0TO250:NEXT:POKESC+4,0:POKESC,0:POKESC+1,0 440 RETURN 450 POKE251,AD-INT(AD/256)*256:POKE252,INT(AD/256) 460 SYS51520:GOTO490 470 K=0:GOSUB670:XS=X:YS=Y 480 M1$="SOUND MASTER":M2$="64":GOSUB160:GOTO140 490 POKEY*40+X+1064,(PEEK(Y*40+X+1064)+128) AND 255 500 RETURN 510 IFK<64THENPZ=K+128 520 IFK>64THENPZ=K+64 530 POKEY*40+X+1064,PZ:RETURN 540 IFX<3THEN230 550 GOSUB490 560 RESTORE:X=X-1 570 READD:IFD=XTHENGOSUB670:GOTO560 580 IFD<>0THEN570 590 GOSUB490:GOTO230 600 IFX>21THEN230 610 GOSUB490 620 RESTORE:X=X+1 630 READD:IFD=XTHENGOSUB670:GOTO620 640 IFD<>0THEN630 650 GOSUB490:GOTO230 660 DATA3,4,8,13,18,0 670 IF(X=4 AND K=29)OR(X=3 AND K=17)THENRETURN 680 IFK=29THENXB=X-1:YB=Y+1 690 IFK=17THENXB=X+1:YB=Y+1 700 IFK<>29 AND K<>17THENXB=X:YB=Y+1 710 GOTO 2650 720 M1$="ENTER TITLE":M2$="OF MUSIC":GOSUB160 730 X=25:Y=19:GOSUB490:PRINT"<green>"; 740 GETK$:IFK$=""THEN740 750 IFK$=CHR$(13)THENGOSUB490:GOTO480 760 IFK$="<f1>" AND Y=20THENGOSUB490:Y=19:GOSUB490:GOTO740 770 IFK$="<f7>" AND Y=19THENGOSUB490:Y=20:GOSUB490:GOTO740 780 IFK$="<cursor down>" AND X<>25THENGOSUB490:X=X-1:GOSUB490:GOTO740 790 IFK$="<cursor right>" AND X<>38THENGOSUB490:X=X+1:GOSUB490:GOTO740 800 IFK$=CHR$(20) AND X<>25 THEN 840 810 POKE214,Y+1:POKE211,X:SYS58732 815 IFK$="<cursor down>"ORK$="<cursor right>"ORK$="<f1>"ORK$="<f7>"ORK$="<del>"THEN740 820 PRINTK$:IFX<>38THENX=X+1:GOSUB490 825 IFX=38THENGOSUB490 830 GOTO740 840 GOSUB490:POKE211,X:POKE214,Y+1:SYS58732:PRINT"<cursor left> <cursor left>" 850 X=X-1:GOSUB490:GOTO740 860 M1$="LOAD: ARE YOU":M2$="SURE? (Y/N)":GOSUB160 870 GETK$:IFK$=""THEN870 880 IF K$="Y"THEN910 890 IF K$<>"N"THENGOSUB420:GOTO870 900 GOTO480 910 M1$="(T)APE OR":M2$="(D)ISC?":GOSUB160:DV=0 920 GETK$:IFK$=""THEN920 930 IFK$="T"THENDV=1 940 IFK$="D"THENDV=8 950 IFDV=0THENGOSUB420:GOTO920 960 M1$="FILENAME?":M2$="":GOSUB160:GOSUB1110:IFDV=8THENGOSUB1180 970 IFDV=1THENGOSUB1080 980 PRINT"<clr><orange>";:SYS51456 990 L$="M."+F$:LOADL$,DV,1 1000 L$="T."+F$:OPEN1,DV,0,L$ 1010 FORD=53018TO53031:INPUT#1,V 1020 POKED,V:NEXT 1030 FORD=53060TO53073:INPUT#1,V 1040 POKED,V:NEXT:INPUT#1,AD 1050 CLOSE1:L$="V."+F$:LOADL$,DV,1:SYS51072 1060 XS=2:YS=5:SYS49152:P=PEEK(2) 1070 GOTO30 1080 M1$="POSITION TAPE":M2$="<SPACE>":GOSUB160 1090 GETK$:IFK$<>" "THEN1090 1100 RETURN 1110 X=25:Y=17:POKE211,X-1:POKE214,Y+1:SYS58732:GOSUB490:F$="" 1120 GETK$:IFK$=""THEN1120 1130 IFK$=CHR$(13)THENRETURN 1140 IFK$=CHR$(20)ANDX>25THENGOSUB490:X=X-1:F$=LEFT$(F$,LEN(F$)-1):GOTO5000 1145 IF ASC(K$)<32 OR ASC(K$)>98 THEN GOSUB420:GOTO1120 1150 IFX=38THENGOSUB420:GOTO1120 1160 X=X+1:F$=F$+K$:POKE211,X-1:POKE214,Y+1:SYS58732 1170 PRINTK$;:GOSUB490:GOTO1120 1180 M1$="INSERT DISC":M2$="<SPACE>":GOSUB160 1190 GOTO 1090 1210 M1$="SAVE: ARE YOU":M2$="SURE? (Y/N)":GOSUB160 1220 GETK$:IFK$=""THEN1220 1230 IFK$="Y"THEN1260 1240 IFK$<>"N"THENGOSUB420:GOTO1220 1250 GOTO480 1260 M1$="(T)APE OR":M2$="(D)ISC?":GOSUB160:DV=0 1270 GETK$:IFK$=""THEN1270 1280 IFK$="T"THENDV=1 1290 IFK$="D"THENDV=8 1300 IFDV=0THENGOSUB420:GOTO1270 1310 M1$="FILENAME?":M2$="":GOSUB160:GOSUB1110:IFDV=8THENGOSUB1180 1320 IFDV=1THENGOSUB1080 1330 GOSUB2630 1350 L$="M."+F$:FORR=0TOLEN(L$):POKER+51440,ASC(MID$(L$,R+1,1)):NEXT 1360 POKE51439,DV:SYS51200:L$="T."+F$:OPEN1,DV,1,L$ 1370 FORR=53018TO53031:PRINT#1,PEEK(R):NEXT 1380 FORR=53060TO53073:PRINT#1,PEEK(R):NEXT:PRINT#1,AD:CLOSE1 1390 POKE51440,86:SYS51328:SYS49152:P=PEEK(2):GOTO30 1400 M1$="TEMPO (0-255)":GOSUB2190:GOSUB160 1410 GETK$:IFK$=""THEN1410 1420 IFK$=CHR$(13)THEN1450 1430 IFASC(K$)>57ORASC(K$)<48THENGOSUB420:GOTO1410 1440 M2$=MID$(M2$,2,2)+K$:GOSUB160:GOTO1410 1450 T=VAL(M2$):IFT=0ORT>255THENGOSUB420:GOTO1410 1460 POKE49344,T:GOTO480 1470 M1$="ENTER BAR":M2$="ORDER":GOSUB160 1480 X=1:Y=22:GOSUB490 1490 GETK$:IFK$=""THEN1490 1500 IFK$=CHR$(13)THENGOSUB490:SYS51072:GOTO480 1510 IFK$="<cursor down>" AND X<>1 THEN GOSUB490:X=X-1:GOSUB490:GOTO1490 1520 IFK$="<cursor right>" AND X<>38 THEN GOSUB490:GOTO1550 1530 IFNOTASC(K$)>31 AND ASC(K$)<96THENGOSUB420:GOTO1490 1540 POKE211,X:POKE214,Y+1:SYS58732:PRINTK$;:POKE49298+X,ASC(K$) 1550 IF X<>38 THENX=X+1:GOSUB490 1560 GOTO1490 1570 M1$="LOAD: ARE YOU":M2$="SURE? (Y/N)":GOSUB160 1580 GETK$:IFK$=""THEN1580 1590 IFK$="Y"THEN1620 1600 IFK$<>"N"THENGOSUB420:GOTO1580 1610 GOTO480 1620 M1$="(T)APE OR":M2$="(D)ISC?":GOSUB160:DV=0 1630 GETK$:IFK$=""THEN1630 1640 IFK$="T"THENDV=1 1650 IFK$="D"THENDV=8 1660 IFDV=0THENGOSUB420:GOTO1630 1670 M1$="FILENAME?":M2$="":GOSUB160:GOSUB1110 1680 IFDV=8THEN1180 1690 IFDV=1THEN1080 1700 GOSUB2630 1720 F$="I."+F$:LOADF$,DV,1:SYS50560 1730 GOTO480 1740 M1$="SAVE: ARE YOU":M2$="SURE? (Y/N)":GOSUB160 1750 GETK$:IFK$=""THEN1750 1760 IFK$="Y"THEN1790 1770 IFK$<>"N"THENGOSUB420:GOTO1750 1780 GOTO480 1790 M1$="(T)APE OR":M2$="(D)ISC?":GOSUB160:DV=0 1800 GETK$=IFK$=""THEN1800 1810 IFK$="T"THENDV=1 1820 IFK$="D"THENDV=8 1830 IFDV=0THENGOSUB420:GOTO1800 1840 M1$="FILENAME?":M2$="":GOSUB160:GOSUB1110:IFDV=8THENGOSUB1180 1850 IFDV=1THENGOSUB1080 1860 GOSUB2630 1880 F$="I."+F$:FORR=0TOLEN(F$):POKER+51440,ASC(MID$(F$,R+1,1)):NEXT 1890 POKE51439,DV:SYS49152:P=PEEK(2):GOTO30 1900 M1$="SELECT":M2$="INSTRUMENT":GOSUB160:SYS50688 1910 I=51712+PEEK(2)*25:M1$="EDIT ":M2$="(Y/N)" 1915 GETK$:IFK$<>""THEN1915 1920 FORR=ITOI+5:M1$=M1$+CHR$(PEEK(R)):NEXT:GOSUB160 1930 GETK$:IFK$=""THEN1930 1940 IFK$="Y"THEN1970 1950 IFK$<>"N"THENGOSUB420:GOTO1930 1960 GOTO480 1970 M1$="TITLE? (6 MAX)":M2$="":GOSUB160:PRINT"<cyan>":GOSUB1110 1980 IFLEN(F$)>6THENGOSUB420:GOTO1970 1990 IFLEN(F$)<>6THENF$=F$+" ":GOTO1990 2000 M1$="WAVEFORM?":W=PEEK(I+6) 2010 IFW=16THENM2$=" (<purple>T<cyan>/S/P/N)" 2020 IFW=32THENM2$=" (T/<purple>S<cyan>/P/N)" 2030 IFW=64THENM2$=" (T/S/<purple>P<cyan>/N)" 2040 IFW=128THENM2$=" (T/S/P/<purple>N<cyan>)" 2050 GOSUB160 2060 GETN$:IFN$=""THEN2060 2070 IFN$<>"N" AND N$<>"P" AND N$<>"S" AND N$<>"T"THENGOSUB420:GOTO2060 2080 IFN$="P"THEN2430 2090 WA=0:WB=0 2100 M1$="ATTACK LEVEL":IP=9:GOSUB2220:GOSUB160:GOSUB2260:AT=NO 2110 M1$="DECAY LEVEL":IP=10:GOSUB2220:GOSUB160:GOSUB2260:DE=NO 2120 M1$="SUSTAIN LEVEL":IP=11:GOSUB2220:GOSUB160:GOSUB2260:SU=NO 2130 M1$="RELEASE LEVEL":IP=12:GOSUB2220:GOSUB160:GOSUB2260:RE=NO 2140 M1$="CHANGE: ARE":M2$="YOU SURE(Y/N)":GOSUB160 2150 GETK$:IFK$=""THEN2150 2160 IFK$="Y"THEN2330 2170 IFK$="N"THEN480 2180 GOSUB420:GOTO2150 2190 M2$=RIGHT$(STR$(PEEK(49344)),LEN(STR$(PEEK(49344)))-1) 2200 IF LEN(M2$)<>3 THENM2$="0"+M2$:GOTO2200 2210 RETURN 2220 K$=STR$(PEEK(I+IP)) 2230 IFLEN(K$)=1THENK$="0"+K$ 2240 M$="OLD"+K$+"& NEW":M2$=M$+K$ 2250 RETURN 2260 GETG$:IFG$=""THEN2260 2270 IFG$=CHR$(13)THEN2310 2280 IFLEN(STR$(VAL(G$)))=0THENGOSUB420:GOTO2260 2290 K$=RIGHT$(K$,1)+G$:M2$=M$+K$ 2300 GOSUB160:GOTO2260 2310 NO=VAL(K$):IFNO>15THENGOSUB420:GOTO2260 2320 RETURN 2330 POKEI+7,WA:POKEI+8,WB:POKEI+9,AT 2340 POKEI+10,DE:POKEI+11,SU:POKEI+12,RE 2350 FORL=1TO6:K=ASC(MID$(F$,L,1)) 2360 POKEI+L-1,K:POKE52459+L+PEEK(2)*40,K:NEXT:POKE211,33 2370 POKE214,PEEK(2)+5:SYS58732:PRINT"<orange>";F$ 2380 IFN$="P"THENPOKEI+6,64 2390 IFN$="T"THENPOKEI+6,16 2400 IFN$="S"THENPOKEI+6,32 2410 IFN$="N"THENPOKEI+6,128 2420 GOTO480 2430 M1$="PULSE WIDTH?":M2$="0000":GOSUB160 2440 GETK$:IFK$=""THEN2440 2450 IFK$=CHR$(13)THEN2480 2460 IFASC(K$)>57ORASC(K$)<48 THEN GOSUB420:GOSUB160:GOTO2440 2470 M2$=RIGHT$(M2$,3)+K$:GOSUB160:GOTO2440 2480 IFVAL(M2$)>4095THENGOSUB420:GOTO2440 2490 WB=INT(VAL(M2$)/256):WA=VAL(M2$)-WB*256:GOTO2100 2500 M1$="STORE:":M2$="(L)OAD (S)AVE":GOSUB160 2510 GETK$:IFK$=""THEN2510 2520 IFK$="L"THEN860 2530 IFK$="S"THEN1210 2540 GOSUB420:GOTO2510 2550 M1$=STR$(INT((40960-(PEEK(49297)+PEEK(49298)*256))/5)) 2560 IFLEN(M1$)<4THEN2560 2570 M1$=M1$+" LINES":M2$="FREE <SPACE>":GOSUB160 2580 GETK$:IFK$<>" "THEN2580 2590 GOTO480 2600 M1$="PLAY MODE":M2$="SPACE TO STOP":GOSUB160 2610 SYS49744:M1$="THE END":M2$="<SPACE>":IFPEEK(53247)=1THEN2645 2620 GOSUB160:GOTO2580 2630 FORR=1929TO1942:POKER+51089,PEEK(PEEK(R)+51968):NEXT 2640 FORR=1969TO1982:POKER+51091,PEEK(PEEK(R)+51968):NEXT:PRINT"<clr><orange>";:RETURN 2645 M1$="ERROR":POKE53247,0:GOTO2620 2650 IFXB=2THEN2700 2660 IFXB=5ORXB=6ORXB=7THEN2770 2670 IFXB>8ANDXB<13THEN2840 2680 IFXB>13ANDXB<18THEN2960 2690 GOTO2980 2700 M=PEEK(PEEK(XB+YB*40+1024)+51968)-32:IFM<>0THEN2750 2710 POKEAD+3,(PEEK(AD+3)AND192)+M 2720 IFM>0ANDAD>PEEK(49345)+PEEK(49346)*256THENPOKE49346,INT(AD/256):GOTO2740 2730 RETURN 2740 POKE49345,AD-INT(AD/256)*256:RETURN 2750 POKE49536+M*2,AD-INT(AD/256)*256 2760 POKE49537+M*2,INT(AD/256):GOTO2710 2770 FORM=50672TO50687STEP2:K$=CHR$(PEEK(M))+CHR$(PEEK(M+1)) 2780 G$=CHR$(PEEK(PEEK(5+YB*40+1024)+51968))+CHR$(PEEK(PEEK(6+YB*40+1024)+51968)) 2790 IFK$=G$THENTY=(M-50672)/2 2800 NEXT 2810 POKEAD,(PEEK(AD)AND254)+(TYAND4)/4 2820 POKEAD+1,(PEEK(AD+1)AND254)+(TYAND2)/2 2830 POKEAD+2,(PEEK(AD+2)AND254)+TY AND 1:RETURN 2840 O=PEEK(PEEK(9+YB*40+1024)+51968)-48:S=9:V=0 2845 IF O=51 OR O=-16 THEN O=0 2850 POKEAD+4,(PEEK(AD+4)AND248)+O 2860 M=PEEK(PEEK(S+YB*40+1025)+51968)-65 2865 IF M=34 OR M=-33 THEN M=0 2870 POKEAD+V,(PEEK(AD+V)AND241)+M*2 2880 M=PEEK(PEEK(S+YB*40+1026)+51968)=35 2890 POKEAD+V,PEEK(AD+V)AND127 2900 IFMTHENPOKEAD+V,PEEK(AD+V)+128 2910 TY=99:FORM=50656TO50661 2920 IFPEEK(M)=PEEK(PEEK(S+YB*40+1027)+51968)THENTY=M-50656 2930 NEXT:IFTY=99THENTY=0 2940 POKEAD+V,(PEEK(AD+V)AND143)+TY*16:IFO<>0THENM=1:GOTO2720 2950 M=PEEK(AD+V)AND254:GOTO2720 2960 O=PEEK(PEEK(14+YB*40+1024)+51968)-48:S=14:V=1 2965 IF O=51 OR O=-16 THEN O=0 2970 POKEAD+4,(PEEK(AD+4)AND199)+O*8:GOTO2860 2980 O=PEEK(PEEK(19+YB*40+1024)+51968)-48:S=19:V=2 2985 IF O=51 OR O=-16 THEN O=0 2990 POKEAD+4,(PEEK(AD+4)AND63)+(OAND3*64) 3000 POKEAD+3,(PEEK(AD+3)AND63)+(OAND4*64):GOTO2860 5000 POKE211,X-1:POKE214,Y+1:SYS58732:GOSUB490:PRINT"<cursor right> <cursor right>";:GOSUB490:GOTO1120
6 � �(49170)��18 � �(49200)��125 � �"SOUND-32",8,1 A �51456 h AD�16384:X�2:Y�4:XS�2:YS�4:� 49152 x P��(2):XZ�P � �K$:�K$��""�30 �# �P�1�210 �( �P�2�2500 �2 �P�3�2550 �<