Home » Personal collection » Commodore disks » disk54a_sound_master_64.d64 » sm30
sm30
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: | sm30 |
| Read OK: | ✔ |
| File size: | 227B bytes |
| Load address: | 0801 |
| Exec address: | 0000 |
File contents
10 DEFFNXR(BT)=(PEEK(I+6)ORBT)AND(NOT(PEEK(I+6)ANDBT))
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 CZ=7
165 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(CZ-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
235 IFAD>MX THENMX=AD+5
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=135 AND AD>16459THENGOSUB670:AD=AD-75:GOSUB450:GOTO230
410 IFK=136 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<3THENGOSUB420:GOTO230
550 GOSUB490
560 RESTORE:X=X-1
570 READD:IFD=XTHENGOSUB670:GOTO560
580 IFD<>0THEN570
590 GOSUB490:GOTO230
600 IFX>21THENGOSUB420:GOTO230
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:POKE753,INT(MX/256)
1880 F$="I."+F$:FORR=0TOLEN(F$):POKER+51440,ASC(MID$(F$,R+1,1)):NEXT
1890 POKE51439,DV:POKE752,MX-INT(MX/256)*256:SYS51200: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 T$="(T/":IF(W AND16)=16THENT$="(<purple>T<cyan>/"
2020 S$="S/":IF(W AND32)=32THENS$="<purple>S<cyan>/"
2030 P$="P/":IF(W AND64)=64THENP$="<purple>P<cyan>/"
2040 N$="N)":IF(W AND128)=128THENN$="<purple>N<cyan>)"
2050 M2$=T$+S$+P$+N$:CZ=7+(LEN(M2$)-9)/2:GOSUB165
2060 GETN$:IFN$=""THEN2060
2070 IFN$<>"N"ANDN$<>"P"ANDN$<>"S"ANDN$<>"T"ANDN$<>CHR$(13)THENGOSUB420:GOTO2060
2080 GOSUB2380:IFN$<>CHR$(13)THEN2000
2085 IF(PEEK(I+6)AND64)=64THEN2430
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$=RIGHT$(STR$(PEEK(I+IP)),2)
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$:GOTO480
2380 IFN$="P"THENPOKEI+6,FNXR(64)
2390 IFN$="T"THENPOKEI+6,FNXR(16)
2400 IFN$="S"THENPOKEI+6,FNXR(32)
2410 IFN$="N"THENPOKEI+6,FNXR(128)
2420 RETURN
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-AD)/5))
2570 M1$=M1$+" LINES":M2$="BELOW <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
) ��XR(BT)�(�(I�6)�BT)�(�(�(I�6)�BT)) 4 �51456 [ AD�16384:X�2:Y�4:XS�2:YS�4:� 49152 k P��(2):XZ�P ~ �K$:�K$��""�30 �# �P�1�210 �( �P�2�2500 �2 �P�3�2550 �<