Home » Personal collection » Commodore disks » disk66a2_software_1.d64 » sm15
sm15
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 » disk66a2_software_1.d64 |
| Filename: | sm15 |
| Read OK: | ✔ |
| File size: | 1DE1B bytes |
| Load address: | 0801 |
| Exec address: | 0000 |
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
13356 90:SYS51072:GOTO480
35589 K$="<cursor down>" AND X<>1 THEN GOSUB490:X=X-2:GOSUB490
8250 ARE YOU":M2$┬"SURE? (Y/N)":<lf>160
?ILLEGAL NEXT LINE ADDRESS
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 �<