Home » Personal collection » Commodore disks » disk66a_software_1.d64 » sm14
sm14
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 » disk66a_software_1.d64 |
| Filename: | sm14 |
| Read OK: | ✔ |
| File size: | 1C6E bytes |
| Load address: | 0801 |
| Exec address: | 0000 |
Duplicates
There is 1 duplicate copy of this file in the archive:
- Personal collection » Commodore disks » disk66a2_software_1.d64 » sm14
- Personal collection » Commodore disks » disk66a_software_1.d64 » sm14
File contents
10 IF PEEK(49170)<>18 OR PEEK(49200)<>125 THEN LOAD"SOUNDDATA",8,1
15 AD=16384:XS=2:YS=6:SYS 49152
20 P=PEEK(2)
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,P:SYS49280:P=PEEK(2)
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 GOSUB 450
230 GETK$:IFK$=""THEN230
240 FL=1:K=ASC(K$):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
290 IF (X=2 AND K>47 AND K<58) OR (K=77 AND X=5)THENFL=0
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=17
330 IFK=29THEN540
340 IFK=17THEN600
350 IFK=59 AND Y<>6THENGOSUB670:GOSUB490:Y=Y-1:GOSUB490:GOTO230
360 IFK=47 AND Y<>19THENGOSUB670:GOSUB490:Y=Y+1:GOSUB490:GOTO230
370 IFK=59 AND AD>16384THENAD=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+1024,PZ:RETURN
540 IFX=2THEN230
550 GOSUB490
560 RESTORE:X=X-1
570 READD:IFD=XTHENGOSUB670:GOTO560
580 IFD<>0THEN570
590 GOSUB490:GOTO230
600 IFX=22THEN230
610 GOSUB490
620 RESTORE:X=X+1
630 READD:IFD=XTHENGOSUB670:GOTO560
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
690 IFK=17THENXB=X-1:YB=Y
700 IFK<>29 AND K<>17THENXB=X:YB=Y
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)THEN840
810 POKE214,Y+1:POKE211,X:SYS58732
815 IFK$="<cursor down>"ORK$="<cursor right>"ORK$="<f1>"ORK$="<f7>"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 POKE49312,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-2:GOSUB490
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(49296)),LEN(STR$(PEEK(49296)))-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$)<4THENM1$=" "+M1$:GOTO2560
2570 M1$=M1$+" ROWS":M2$="FREE <SPACE>":GOSUB160
2580 GETK$:IFK$<>" "THEN2580
2590 GOTO480
2600 M1$="PLAY MODE":M2$="SPACE TO STOP":GOSUB160
2610 SYS49664:M1$="THE END":M2$="<SPACE>":IFPEEK(53247)=1THEN2650
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
2650 M1$="ERROR":POKE53247,0:GOTO2620
5000 POKE211,X-1:POKE214,Y+1:SYS58732:GOSUB490:PRINT"<cursor right> <cursor right>";:GOSUB490:GOTO1120
7 � �(49170)��18 � �(49200)��125 � �"SOUNDDATA",8,1 V AD�16384:XS�2:YS�6:� 49152 a P��(2) t �K$:�K$��""�30 �# �P�1�210 �( �P�2�2500 �2 �P�3�2550 �<