100 REM ******************************* 110 REM * + - NOTENEINGABE - + * 120 REM * ZUM PROGRAMM 'SOUND-MACHINE'* 130 REM * FUER DEN C64 * 140 REM * VON: ARNO MUHR * 150 REM * UNTERSTR. 32 * 160 REM * 5176 INDEN-FRENZ * 170 REM ******************************* 180 POKE 53280,9:POKE 53281,5:PRINT"[144]" 190 PRINT"[147]BITTE CA. 13 SEKUNDEN WARTEN" 200 NA=49152:FOR I=NA TO NA+3000:POKEI,0:NEXT 210 DIM NW(5,203),T(5,203):GOSUB 320 220 INPUT"[147]ZEIT FUER 1/4 NOTE (1-120):";GT 230 GT=INT(GT):GT=GT/120*32:IF GT<=0 OR GT>32 THEN 220 240 PRINT CHR$(147) 250 PRINT CHR$(19);C/3+1"[157] . NOTE : ":N$="" 260 INPUT "NOTE : ";N$ 270 GOTO 610 280 W=1 290 FOR I=1 TO 98:IF N$=N$(I) THEN W=W(I) 300 NEXT 310 RETURN 320 REM *** NOTENWERTE EINLESEN *** 330 DIM N$(98),W(98) 340 FOR I=1 TO 98:READ N$ 350 N$(I)=N$:NEXT 360 FOR I=1 TO 98:READ W 370 W(I)=W:NEXT 380 RETURN 390 REM *** NOTENDATAS *** 400 DATA C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,H0 410 DATA C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,H1 420 DATA C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,H2 430 DATA C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,H3 440 DATA C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,H4 450 DATA C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,H5 460 DATA C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,H6 470 DATA C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,H7 480 DATA PAUSE,P 490 DATA 268,284,301,318,337,358,379,401,425,451,477,506,536,568,602,637,675 500 DATA 716,758,803,851,902,955,1012,1072,1136,1204,1275,1351,1432,1517,1607 510 DATA 1703,1804,1911,2025,2145,2273,2408,2551,2703,2864,3034,3215,3406,3608 520 DATA 3823,4050,4291,4547,4817,5103,5407,5728,6069,6430,6812,7217,7647,8101 530 DATA 8583,9094,9634,10207,10814,11457,12139,12860,13625,14435,15294,16203 540 DATA 17167,18188,19269,20415,21629,22915,24278,25721,27251,28871,30588 550 DATA 32407,34334,36376,38539,40830,43258,45830,48556,51443,54502,57743 560 DATA 61176,64814,0,0 570 : 580 REM ****************** 590 REM *+- FUNKTIONEN -+* 600 REM ****************** 610 : 620 IF N$="-" AND C=>3 THEN C=C-3:GOTO 250 630 IF N$="-" THEN PRINT "ERSTE NOTE ! ":GOTO 250 640 IF N$="+" THEN C=C+3:GOTO 250 650 IF N$="SAVE" THEN 1120 660 IF N$="LOAD" THEN 1870 670 IF N$="DEF." THEN 1280 680 IF N$="COPY" THEN 1650 690 IF N$="INSERT" THEN 1470 700 IF N$="QUIT" THEN 1040 710 IF N$="ON" THEN SYS 53004:GOTO 250 720 IF N$="OFF" THEN SYS 53027:GOTO 250 730 IF N$="NEW" THEN C=0:GOTO 240 740 IF N$="CLEAR" THEN RUN 750 IF N$="SET END"THEN 1060 760 GOSUB 280 770 INPUT "ZEIT : ";T$:T$=T$+" " 780 PRINT " [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"; 790 IF W=1 THEN PRINT "NOTEN FEHLER!":IF ZZ<>1 GOTO 250 800 IF W=1 THEN RETURN 810 HB=INT(W/256):LB=W-256*HB 820 A=VAL(T$):AA=3:IF A>9 THEN AA=4 830 A$=MID$(T$,AA,2):T=0 840 A1=VAL(A$) 850 IF A1=64 THEN T=2 860 IF A1=32 THEN T=4 870 IF A1=16 THEN T=8 880 IF A1=08 THEN T=16 890 IF A1=04 THEN T=32 900 IF A1=02 THEN T=64 910 IF A1=01 THEN T=127 920 IF T=0 THEN PRINT" ZEIT FEHLER!":IF ZZ<>1 THEN GOTO 250 930 IF T=0 THEN RETURN 940 T=T/32*GT:T=T*A 950 IF T>255 THEN PRINT " ZEIT ZU LANG !":IF ZZ<>1 GOTO 250 960 IF T>255 THEN RETURN 970 IF ZZ=1 THEN RETURN 980 POKE 49152+C,LB 990 POKE 49153+C,HB 1000 POKE 49154+C,T 1010 C=C+3 1020 GOTO 250 1030 : 1040 FOR I=0 TO 9:POKE 49152+C+I,0:NEXT 1050 END 1060 REM *** SET END *** 1070 REM -ENDE DES STUECKES MAKIEREN 1080 POKE NA+C,0 1090 POKE NA+C+1,0 1100 POKE NA+C+2,0 1110 GOTO 250 1120 REM *** SAVE *** 1130 REM -ABSPEICHERN VON MUSIKSTUECKEN 1140 SYS 53TAN27 1150 I=0:PRINT "[147]ABSPEICHERN " 1160 INPUT "[147]TITEL ";A$ 1170 IF LEN(A$)>16 THEN 1150 1180 IF A$="^" THEN 240 1190 OPEN 1,8,1,A$ 1200 PRINT#1,CHR$(0);CHR$(192); 1210 :NP=PEEK(49152+I) 1220 :PRINT#1,CHR$(NP); 1230 :I=I+1:IF I<=C THEN 1210 1240 PRINT#1,CHR$(0);CHR$(0);CHR$(0) 1250 CLOSE 1:GOSUB 2380 1260 PRINT"";E;Z$:PRINT"TASTE DRUECKEN " 1270 POKE 198,0:WAIT 198,1:POKE198,0:GOTO 240 1280 REM *** DEF. *** 1290 REM -DEFINIEREN EINER NOTENFOLGE 1300 PRINT "[147]":NN=0 1310 IF NS>5 THEN PRINT"ES BESTEHEN SCHON 6 ":FORI=0TO999:NEXT:PRINT"[147]":GOTO250 1320 PRINT"DEFINITIONFILE NR.";NS:PRINT NN+1;"[157] . NOTE" 1330 INPUT "NOTE : ";N$ 1340 IF N$="END" THEN 1430 1350 IF N$="^" THEN 240 1360 IF N$="-" THEN NN=NN-1:GOTO 1320 1370 IF N$="+" THEN NN=NN+1:GOTO 1320 1380 GOSUB 280:ZZ=1:GOSUB 770:ZZ=0 1390 IF T=0 OR T>255 OR W=1 THEN 1320 1400 NW(NS,NN)=W:T(NS,NN)=T 1410 NN=NN+1:IF NN<201 THEN 1320 1420 PRINT "DEFINITIONFILE IS VOLL!" 1430 W=0:T=0:FOR I=1 TO 2:NN=NN+1:NW(NS,NN)=0:T(NS,NN)=0:NEXT 1440 FOR I=1 TO 999:NEXT:PRINT"[147]" 1450 NS=NS+1:GOTO 250 1460 : 1470 REM *** INSERT *** 1480 REM -EINFUEGEN EINER DEFINITION 1490 : 1500 PRINT "[147]DEFINITIONFILE EINFUEGEN" 1510 PRINT "NR. 0-5 ODER ^" 1520 POKE 198,0:WAIT 198,1:GET A$ 1530 IF A$="^" THEN 1630 1540 IF A$<"0" OR A$>"5" THEN 1520 1550 NI=VAL(A$):A=0 1560 IF NI>NS THEN 1630 1570 :P2=INT(NW(NI,A)/256):P1=NW(NI,A)-256*P2:P3=T(NI,A) 1580 :POKE 49152+C,P1 1590 :POKE 49153+C,P2 1600 :POKE 49154+C,255-P3 1610 A=A+1:C=C+3:IF P3<>0 THEN 1570 1620 C=C-3 1630 PRINT "[147]":GOTO 250 1640 : 1650 REM *** COPY *** 1660 REM -KOPIEREN VON NOTENREIHEN 1670 : 1680 PRINT "[147]COPY" 1690 INPUT "ERSTE NOTE :";A$ 1700 A=VAL (A$) 1710 INPUT "LETZTE NOTE :";B 1720 A=INT(A):B=INT(B) 1730 IF A<1 OR B<1 THEN 240 1740 X=1:IF A>B THEN X=-1 1750 IF A>C/3 OR B>C/3 THEN 240 1760 IF AB THEN A=A+X:B=B+X 1780 : 1790 FOR I=A TO B STEP X 1800 :POKE 49152+C,PEEK(49152+I*3) 1810 :POKE 49153+C,PEEK(49153+I*3) 1820 :POKE 49154+C,PEEK(49154+I*3) 1830 :C=C+3 1840 NEXT 1850 GOTO 240 1860 : 1870 REM *** LOAD *** 1880 REM -LADEN VON MUSIKSTUECKEN UND $ 1890 REM SYS 53027 1900 PRINT "[147]LOAD SONG ODER DIRECTORY" 1910 INPUT "TITEL :";A$ 1920 IF A$="$" THEN 2150 1930 IF A$="^" THEN 240 1940 INPUT "ANHAENGEN (J/N) :";B$ 1950 IF B$="^" THEN 240 1960 OPEN 1,8,0,A$:GOSUB 2380:IF E<>0 THEN 2120 1970 OPEN 1,8,0,A$ 1980 GET#1,C$,C$ 1990 IF B$<>"J" AND B$<>"JA" THEN C=0 2000 A=1 2010 :GET#1,C$ 2020 :A2=A1:A1=A 2030 :IF C$<=CHR$(0) THEN A=0:GOTO 2050 2040 :A=ASC(C$) 2050 :POKE 49152+C,A 2060 :C=C+1 2070 :IF A=0 AND A1=A AND A2=A THEN 2090 2080 :GOTO 2010 2090 C=C-3 2100 CLOSE 1 2110 GOSUB 2380 2120 PRINT"";E;Z$:PRINT"TASTE DRUECKEN " 2130 POKE 198,0:WAIT 198,1:POKE198,0:GOTO 240 2140 : 2150 REM --- DIRECTORY ANZEIGEN --- 2160 : 2170 OPEN 1,8,0,"$":KV=0 2180 FOR I=0 TO 30:GET#1,A$:B$=B$+A$:NEXT 2190 PRINT" ";B$ 2200 GET#1,A$,B$,E$,F$,G$:FOR I=0 TO 26:GET#1,D$:C$=C$+D$:NEXT 2210 IF F$<=CHR$(0) THEN A=0:GOTO 2230 2220 A=ASC(F$) 2230 IF G$<=CHR$(0) THEN B=0:GOTO 2250 2240 B=ASC(G$) 2250 D=A+256*B 2260 IF C$="[199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199][199]" THEN C$="":GOTO 2340: REM -27 SHIFT G- 2270 PRINT D;C$:C$="" 2280 KV=KV+1:IF KV=22 THEN 2300 2290 GOTO 2200 2300 KV=0:PRINT "TASTE DRUECKEN" 2310 POKE 198,0:WAIT 198,1 2320 PRINT"[145] ":PRINT"[145][145][145]" 2330 GOTO 2200 2340 KV=0:PRINT "TASTE DRUECKEN" 2350 POKE 198,0:WAIT 198,1 2360 CLOSE 1:POKE 198,0:GOTO 1870 2370 : 2380 REM +++ FEHLERKANAL ABFRAGEN +++ 2390 OPEN 2,8,15 2400 INPUT#2,E,Z$,T,S 2410 CLOSE 1 2420 CLOSE 2 2430 RETURN