Home » Personal collection » Commodore disks » disk54a_sound_master_64.d64 » sm32
sm32
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: | sm32 | 
| Read OK: | ✔ | 
| File size: | 227F bytes | 
| Load address: | 0801 | 
| Exec address: | 0000 | 
Duplicates
There is 1 duplicate copy of this file in the archive:
- Personal collection » Commodore disks » disk54a_sound_master_64.d64 » sm31
 - Personal collection » Commodore disks » disk54a_sound_master_64.d64 » sm32
 
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>16433THENGOSUB670: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 �<