00000000: 39 30 30 30 20 50 52 4F 43 20 50 4C 41 59 28 4D |9000 PROC PLAY(M|
00000010: 55 53 49 43 24 2C 54 45 4D 50 4F 29 20 43 4C 4F |USIC$,TEMPO) CLO|
00000020: 53 45 44 0D 39 30 31 30 20 53 49 44 3A 3D 35 34 |SED.9010 SID:=54|
00000030: 32 37 32 3B 20 50 4F 49 4E 54 45 52 3A 3D 30 3B |272; POINTER:=0;|
00000040: 20 45 4E 44 27 4F 46 27 4E 4F 54 45 53 3A 3D 4C | END'OF'NOTES:=L|
00000050: 45 4E 28 4D 55 53 49 43 24 29 0D 39 30 32 30 20 |EN(MUSIC$).9020 |
00000060: 52 45 50 45 41 54 20 0D 39 30 33 30 20 50 4F 49 |REPEAT .9030 POI|
00000070: 4E 54 45 52 3A 2B 31 0D 39 30 34 30 20 43 41 53 |NTER:+1.9040 CAS|
00000080: 45 20 4D 55 53 49 43 24 28 50 4F 49 4E 54 45 52 |E MUSIC$(POINTER|
00000090: 29 20 4F 46 0D 39 30 35 30 20 57 48 45 4E 20 22 |) OF.9050 WHEN "|
000000A0: 43 22 0D 39 30 36 30 20 49 46 20 4D 55 53 49 43 |C".9060 IF MUSIC|
000000B0: 24 28 50 4F 49 4E 54 45 52 2B 31 29 3D 22 23 22 |$(POINTER+1)="#"|
000000C0: 20 54 48 45 4E 0D 39 30 37 30 20 46 52 45 51 3A | THEN.9070 FREQ:|
000000D0: 3D 33 36 33 37 36 3B 20 50 4F 49 4E 54 45 52 3A |=36376; POINTER:|
000000E0: 2B 31 0D 39 30 38 30 20 45 4C 53 45 20 0D 39 30 |+1.9080 ELSE .90|
000000F0: 39 30 20 46 52 45 51 3A 3D 33 34 33 33 34 0D 39 |90 FREQ:=34334.9|
00000100: 31 30 30 20 45 4E 44 49 46 20 0D 39 31 31 30 20 |100 ENDIF .9110 |
00000110: 57 48 45 4E 20 22 44 22 0D 39 31 32 30 20 49 46 |WHEN "D".9120 IF|
00000120: 20 4D 55 53 49 43 24 28 50 4F 49 4E 54 45 52 2B | MUSIC$(POINTER+|
00000130: 31 29 3D 22 23 22 20 54 48 45 4E 0D 39 31 33 30 |1)="#" THEN.9130|
00000140: 20 46 52 45 51 3A 3D 34 30 38 33 30 3B 20 50 4F | FREQ:=40830; PO|
00000150: 49 4E 54 45 52 3A 2B 31 0D 39 31 34 30 20 45 4C |INTER:+1.9140 EL|
00000160: 53 45 20 0D 39 31 35 30 20 46 52 45 51 3A 3D 33 |SE .9150 FREQ:=3|
00000170: 38 35 33 39 0D 39 31 36 30 20 45 4E 44 49 46 20 |8539.9160 ENDIF |
00000180: 0D 39 31 37 30 20 57 48 45 4E 20 22 45 22 0D 39 |.9170 WHEN "E".9|
00000190: 31 38 30 20 46 52 45 51 3A 3D 34 33 32 35 38 0D |180 FREQ:=43258.|
000001A0: 39 31 39 30 20 57 48 45 4E 20 22 46 22 0D 39 32 |9190 WHEN "F".92|
000001B0: 30 30 20 49 46 20 4D 55 53 49 43 24 28 50 4F 49 |00 IF MUSIC$(POI|
000001C0: 4E 54 45 52 2B 31 29 3D 22 23 22 20 54 48 45 4E |NTER+1)="#" THEN|
000001D0: 0D 39 32 31 30 20 46 52 45 51 3A 3D 34 38 35 35 |.9210 FREQ:=4855|
000001E0: 36 3B 20 50 4F 49 4E 54 45 52 3A 2B 31 0D 39 32 |6; POINTER:+1.92|
000001F0: 32 30 20 45 4C 53 45 20 0D 39 32 33 30 20 46 52 |20 ELSE .9230 FR|
00000200: 45 51 3A 3D 34 35 38 33 30 0D 39 32 34 30 20 45 |EQ:=45830.9240 E|
00000210: 4E 44 49 46 20 0D 39 32 35 30 20 57 48 45 4E 20 |NDIF .9250 WHEN |
00000220: 22 47 22 0D 39 32 36 30 20 49 46 20 4D 55 53 49 |"G".9260 IF MUSI|
00000230: 43 24 28 50 4F 49 4E 54 45 52 2B 31 29 3D 22 23 |C$(POINTER+1)="#|
00000240: 22 20 54 48 45 4E 0D 39 32 37 30 20 46 52 45 51 |" THEN.9270 FREQ|
00000250: 3A 3D 35 34 35 30 32 3B 20 50 4F 49 4E 54 45 52 |:=54502; POINTER|
00000260: 3A 2B 31 0D 39 32 38 30 20 45 4C 53 45 20 0D 39 |:+1.9280 ELSE .9|
00000270: 32 39 30 20 46 52 45 51 3A 3D 35 31 34 34 33 0D |290 FREQ:=51443.|
00000280: 39 33 30 30 20 45 4E 44 49 46 20 0D 39 33 31 30 |9300 ENDIF .9310|
00000290: 20 57 48 45 4E 20 22 41 22 0D 39 33 32 30 20 49 | WHEN "A".9320 I|
000002A0: 46 20 4D 55 53 49 43 24 28 50 4F 49 4E 54 45 52 |F MUSIC$(POINTER|
000002B0: 2B 31 29 3D 22 23 22 20 54 48 45 4E 0D 39 33 33 |+1)="#" THEN.933|
000002C0: 30 20 46 52 45 51 3A 3D 36 31 31 37 36 3B 20 50 |0 FREQ:=61176; P|
000002D0: 4F 49 4E 54 45 52 3A 2B 31 0D 39 33 34 30 20 45 |OINTER:+1.9340 E|
000002E0: 4C 53 45 20 0D 39 33 35 30 20 46 52 45 51 3A 3D |LSE .9350 FREQ:=|
000002F0: 35 37 37 34 33 0D 39 33 36 30 20 45 4E 44 49 46 |57743.9360 ENDIF|
00000300: 20 0D 39 33 37 30 20 57 48 45 4E 20 22 42 22 0D | .9370 WHEN "B".|
00000310: 39 33 38 30 20 46 52 45 51 3A 3D 36 34 38 31 34 |9380 FREQ:=64814|
00000320: 0D 39 33 39 30 20 57 48 45 4E 20 22 52 22 0D 39 |.9390 WHEN "R".9|
00000330: 34 30 30 20 46 52 45 51 3A 3D 30 0D 39 34 31 30 |400 FREQ:=0.9410|
00000340: 20 4F 54 48 45 52 57 49 53 45 20 0D 39 34 32 30 | OTHERWISE .9420|
00000350: 20 50 52 49 4E 54 20 22 27 22 2C 4D 55 53 49 43 | PRINT "'",MUSIC|
00000360: 24 28 50 4F 49 4E 54 45 52 29 2C 22 27 20 49 53 |$(POINTER),"' IS|
00000370: 20 4E 4F 54 20 41 20 56 41 4C 49 44 20 4E 4F 54 | NOT A VALID NOT|
00000380: 45 22 0D 39 34 33 30 20 43 4C 4F 53 45 0D 39 34 |E".9430 CLOSE.94|
00000390: 34 30 20 45 4E 44 20 0D 39 34 35 30 20 45 4E 44 |40 END .9450 END|
000003A0: 43 41 53 45 20 0D 39 34 36 30 20 50 4F 49 4E 54 |CASE .9460 POINT|
000003B0: 45 52 3A 2B 31 0D 39 34 37 30 20 49 46 20 4D 55 |ER:+1.9470 IF MU|
000003C0: 53 49 43 24 28 50 4F 49 4E 54 45 52 29 3C 3E 22 |SIC$(POINTER)<>"|
000003D0: 2D 22 20 54 48 45 4E 0D 39 34 38 30 20 50 52 49 |-" THEN.9480 PRI|
000003E0: 4E 54 20 22 27 2D 27 20 49 53 20 4E 45 45 44 45 |NT "'-' IS NEEDE|
000003F0: 44 20 54 4F 20 53 45 50 45 52 41 54 45 20 4E 4F |D TO SEPERATE NO|
00000400: 54 45 20 41 4E 44 20 20 20 20 20 20 4F 43 54 41 |TE AND OCTA|
00000410: 56 45 22 0D 39 34 39 30 20 43 4C 4F 53 45 0D 39 |VE".9490 CLOSE.9|
00000420: 35 30 30 20 45 4E 44 20 0D 39 35 31 30 20 45 4E |500 END .9510 EN|
00000430: 44 49 46 20 0D 39 35 32 30 20 50 4F 49 4E 54 45 |DIF .9520 POINTE|
00000440: 52 3A 2B 31 0D 39 35 33 30 20 4F 43 54 41 56 45 |R:+1.9530 OCTAVE|
00000450: 3A 3D 4F 52 44 28 4D 55 53 49 43 24 28 50 4F 49 |:=ORD(MUSIC$(POI|
00000460: 4E 54 45 52 29 29 2D 4F 52 44 28 22 30 22 29 0D |NTER))-ORD("0").|
00000470: 39 35 34 30 20 49 46 20 4F 43 54 41 56 45 3C 30 |9540 IF OCTAVE<0|
00000480: 20 4F 52 20 4F 43 54 41 56 45 3E 37 20 54 48 45 | OR OCTAVE>7 THE|
00000490: 4E 0D 39 35 35 30 20 50 52 49 4E 54 20 22 4F 43 |N.9550 PRINT "OC|
000004A0: 54 41 56 45 20 52 41 4E 47 45 20 49 53 20 30 2D |TAVE RANGE IS 0-|
000004B0: 37 20 4F 4E 4C 59 22 0D 39 35 36 30 20 43 4C 4F |7 ONLY".9560 CLO|
000004C0: 53 45 0D 39 35 37 30 20 45 4E 44 20 0D 39 35 38 |SE.9570 END .958|
000004D0: 30 20 45 4E 44 49 46 20 0D 39 35 39 30 20 46 52 |0 ENDIF .9590 FR|
000004E0: 45 51 3A 3D 46 52 45 51 20 44 49 56 20 32 5E 4F |EQ:=FREQ DIV 2^O|
000004F0: 43 54 41 56 45 0D 39 36 30 30 20 50 4F 4B 45 20 |CTAVE.9600 POKE |
00000500: 53 49 44 2C 46 52 45 51 20 4D 4F 44 20 32 35 36 |SID,FREQ MOD 256|
00000510: 0D 39 36 31 30 20 50 4F 4B 45 20 53 49 44 2B 31 |.9610 POKE SID+1|
00000520: 2C 46 52 45 51 20 44 49 56 20 32 35 36 0D 39 36 |,FREQ DIV 256.96|
00000530: 32 30 20 54 45 4D 50 3A 3D 28 50 45 45 4B 28 31 |20 TEMP:=(PEEK(1|
00000540: 30 32 33 29 20 44 49 56 20 32 29 2A 32 2B 31 0D |023) DIV 2)*2+1.|
00000550: 39 36 33 30 20 50 4F 4B 45 20 53 49 44 2B 34 2C |9630 POKE SID+4,|
00000560: 54 45 4D 50 0D 39 36 34 30 20 50 4F 4B 45 20 31 |TEMP.9640 POKE 1|
00000570: 30 32 33 2C 54 45 4D 50 0D 39 36 35 30 20 50 4F |023,TEMP.9650 PO|
00000580: 49 4E 54 45 52 3A 2B 31 0D 39 36 36 30 20 49 46 |INTER:+1.9660 IF|
00000590: 20 4D 55 53 49 43 24 28 50 4F 49 4E 54 45 52 29 | MUSIC$(POINTER)|
000005A0: 3C 3E 22 3A 22 20 54 48 45 4E 0D 39 36 37 30 20 |<>":" THEN.9670 |
000005B0: 50 52 49 4E 54 20 22 27 3A 27 20 49 53 20 4E 45 |PRINT "':' IS NE|
000005C0: 45 44 45 44 20 54 4F 20 53 45 50 41 52 41 54 45 |EDED TO SEPARATE|
000005D0: 20 4F 43 41 56 45 20 41 4E 44 20 44 55 52 41 54 | OCAVE AND DURAT|
000005E0: 49 4F 4E 22 0D 39 36 38 30 20 43 4C 4F 53 45 0D |ION".9680 CLOSE.|
000005F0: 39 36 39 30 20 45 4E 44 20 0D 39 37 30 30 20 45 |9690 END .9700 E|
00000600: 4E 44 49 46 20 0D 39 37 31 30 20 50 4F 49 4E 54 |NDIF .9710 POINT|
00000610: 45 52 3A 2B 31 0D 39 37 32 30 20 44 55 52 3A 3D |ER:+1.9720 DUR:=|
00000620: 4F 52 44 28 4D 55 53 49 43 24 28 50 4F 49 4E 54 |ORD(MUSIC$(POINT|
00000630: 45 52 29 29 2D 4F 52 44 28 22 30 22 29 0D 39 37 |ER))-ORD("0").97|
00000640: 33 30 20 50 4F 49 4E 54 45 52 3A 2B 31 0D 39 37 |30 POINTER:+1.97|
00000650: 34 30 20 49 46 20 50 4F 49 4E 54 45 52 3C 3D 45 |40 IF POINTER<=E|
00000660: 4E 44 27 4F 46 27 4E 4F 54 45 53 20 54 48 45 4E |ND'OF'NOTES THEN|
00000670: 0D 39 37 35 30 20 49 46 20 4D 55 53 49 43 24 28 |.9750 IF MUSIC$(|
00000680: 50 4F 49 4E 54 45 52 29 3E 3D 22 30 22 20 41 4E |POINTER)>="0" AN|
00000690: 44 20 4D 55 53 49 43 24 28 50 4F 49 4E 54 45 52 |D MUSIC$(POINTER|
000006A0: 29 3C 3D 22 39 22 20 54 48 45 4E 0D 39 37 36 30 |)<="9" THEN.9760|
000006B0: 20 44 55 52 3A 3D 44 55 52 2A 31 30 2B 4F 52 44 | DUR:=DUR*10+ORD|
000006C0: 28 4D 55 53 49 43 24 28 50 4F 49 4E 54 45 52 29 |(MUSIC$(POINTER)|
000006D0: 29 2D 4F 52 44 28 22 30 22 29 0D 39 37 37 30 20 |)-ORD("0").9770 |
000006E0: 50 4F 49 4E 54 45 52 3A 2B 31 0D 39 37 38 30 20 |POINTER:+1.9780 |
000006F0: 45 4E 44 49 46 20 0D 39 37 39 30 20 45 4E 44 49 |ENDIF .9790 ENDI|
00000700: 46 20 0D 39 38 30 30 20 46 4F 52 20 54 3A 3D 30 |F .9800 FOR T:=0|
00000710: 20 54 4F 20 54 45 4D 50 4F 20 44 49 56 20 44 55 | TO TEMPO DIV DU|
00000720: 52 20 44 4F 20 4E 55 4C 4C 0D 39 38 31 30 20 54 |R DO NULL.9810 T|
00000730: 45 4D 50 3A 3D 28 50 45 45 4B 28 31 30 32 33 29 |EMP:=(PEEK(1023)|
00000740: 20 44 49 56 20 32 29 2A 32 0D 39 38 32 30 20 50 | DIV 2)*2.9820 P|
00000750: 4F 4B 45 20 35 34 32 37 32 2B 34 2C 54 45 4D 50 |OKE 54272+4,TEMP|
00000760: 0D 39 38 33 30 20 50 4F 4B 45 20 31 30 32 33 2C |.9830 POKE 1023,|
00000770: 54 45 4D 50 0D 39 38 34 30 20 55 4E 54 49 4C 20 |TEMP.9840 UNTIL |
00000780: 50 4F 49 4E 54 45 52 3E 45 4E 44 27 4F 46 27 4E |POINTER>END'OF'N|
00000790: 4F 54 45 53 0D 39 38 35 30 20 45 4E 44 50 52 4F |OTES.9850 ENDPRO|
000007A0: 43 20 50 4C 41 59 0D |C PLAY. |
9000 PROC PLAY(MUSIC$,TEMPO) CLOSED.9010
SID:=54272; POINTER:=0; END'OF'NOTES:=L
EN(MUSIC$).9020 REPEAT .9030 POINTER:+1.
9040 CASE MUSIC$(POINTER) OF.9050 WHEN "
C".9060 IF MUSIC$(POINTER+1)="#" THEN.90
70 FREQ:=36376; POINTER:+1.9080 ELSE .90
90 FREQ:=34334.9100 ENDIF .9110 WHEN "D"
.9120 IF MUSIC$(POINTER+1)="#" THEN.9130
FREQ:=40830; POINTER:+1.9140 ELSE .9150
FREQ:=38539.9160 ENDIF .9170 WHEN "E".9
180 FREQ:=43258.9190 WHEN "F".9200 IF MU
SIC$(POINTER+1)="#" THEN.9210 FREQ:=4855
6; POINTER:+1.9220 ELSE .9230 FREQ:=4583
0.9240 ENDIF .9250 WHEN "G".9260 IF MUSI
C$(POINTER+1)="#" THEN.9270 FREQ:=54502;
POINTER:+1.9280 ELSE .9290 FREQ:=51443.
9300 ENDIF .9310 WHEN "A".9320 IF MUSIC$
(POINTER+1)="#" THEN.9330 FREQ:=61176; P
OINTER:+1.9340 ELSE .9350 FREQ:=57743.93
60 ENDIF .9370 WHEN "B".9380 FREQ:=64814
.9390 WHEN "R".9400 FREQ:=0.9410 OTHERWI
SE .9420 PRINT "'",MUSIC$(POINTER),"' IS
NOT A VALID NOTE".9430 CLOSE.9440 END .
9450 ENDCASE .9460 POINTER:+1.9470 IF MU
SIC$(POINTER)<>"-" THEN.9480 PRINT "'-'
IS NEEDED TO SEPERATE NOTE AND OCTA
VE".9490 CLOSE.9500 END .9510 ENDIF .952
0 POINTER:+1.9530 OCTAVE:=ORD(MUSIC$(POI
NTER))-ORD("0").9540 IF OCTAVE<0 OR OCTA
VE>7 THEN.9550 PRINT "OCTAVE RANGE IS 0-
7 ONLY".9560 CLOSE.9570 END .9580 ENDIF
.9590 FREQ:=FREQ DIV 2^OCTAVE.9600 POKE
SID,FREQ MOD 256.9610 POKE SID+1,FREQ DI
V 256.9620 TEMP:=(PEEK(1023) DIV 2)*2+1.
9630 POKE SID+4,TEMP.9640 POKE 1023,TEMP
.9650 POINTER:+1.9660 IF MUSIC$(POINTER)
<>":" THEN.9670 PRINT "':' IS NEEDED TO
SEPARATE OCAVE AND DURATION".9680 CLOSE.
9690 END .9700 ENDIF .9710 POINTER:+1.97
20 DUR:=ORD(MUSIC$(POINTER))-ORD("0").97
30 POINTER:+1.9740 IF POINTER<=END'OF'NO
TES THEN.9750 IF MUSIC$(POINTER)>="0" AN
D MUSIC$(POINTER)<="9" THEN.9760 DUR:=DU
R*10+ORD(MUSIC$(POINTER))-ORD("0").9770
POINTER:+1.9780 ENDIF .9790 ENDIF .9800
FOR T:=0 TO TEMPO DIV DUR DO NULL.9810 T
EMP:=(PEEK(1023) DIV 2)*2.9820 POKE 5427
2+4,TEMP.9830 POKE 1023,TEMP.9840 UNTIL
POINTER>END'OF'NOTES.9850 ENDPROC PLAY.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL