1000 REM ****************************** 1010 REM * * 1020 REM * LESEPROGRAMM * 1030 REM * FUER SEQUENCER-DATEN * 1040 REM * * 1050 REM * ERZEUGT AUS DATA-ZEILEN * 1060 REM * EINEN ABSOLUT LADBAREN * 1070 REM * DATENSATZ FUER SEQUENCER * 1080 REM * * 1090 REM * THOMAS KRAETZIG SEP 85 * 1100 REM * * 1110 REM ****************************** 1120 REM 1130 REM KONSTANTEN UND 1140 REM VARIABLEN MIT VORBESETZUNGEN 1150 REM 1160 DIM SF(200) :REM SEQUENZFOLGELISTE 1170 DIM SA(200) :REM SEQUENZADRESSENL. 1180 DIM TA(3) :REM TRACKADRESSEN 1190 REM NOTENNAMEN 1200 NN$="CCDDEFFGGAAH" 1210 DN$="" :REM DATEINAME 1220 S=1 :REM AKTUELLE SEQUENZ 1230 T=1 :REM AKTUELLER TRACK 1240 AD=0 :REM ALLG. ADRESSE 1250 SA=39432 :REM $9A08 1260 Q=96 :REM QUANTISIERUNG 1270 R=0.5 :REM GATE ON/LAENGE 1280 NL=1/4 :REM NOTENLAENGE 1290 L=0 :REM STRINGLAENGE 1300 SV=12*4096 :REM SAVE-ROUTINE 1500 REM------------------------------- 1510 REM PROGRAMMSTART 1520 REM------------------------------- 1530 REM SAVE-MASCHINENPROGRAMM 1540 FOR I=0 TO 17 1550 READ X:POKE SV+I,X:NEXT I 2020 REM 2030 REM DUMMY-TRACK ERZEUGEN 2040 AD=SA+2 2050 POKE AD ,1 :POKE AD+1,97 2060 POKE AD+2,239:POKE AD+3,0 2070 H0=INT(AD/256):L0=AD-256*H0 2080 AD=AD+4:A$="" 2100 REM NAECHSTES DATUM LESEN 2110 PRINT" ";A$;:READ A$ 2120 L=LEN(A$):L$=LEFT$(A$,1) 2150 IF A$="P" THEN 3100 2160 IF A$="PAUSE" THEN 3100 2165 IF A$="TRACK" THEN 3800 2170 IF A$="SEQUENZ" THEN 4000 2175 IF A$="SEQUENZFOLGE" THEN 3600 2190 IF A$="ENDE" THEN 4300 2200 REM 2210 REM NACH NOTENNAMEN SUCHEN 2220 REM 2230 IF L=1 THEN 5000 2240 IF L>3 THEN 2500 2250 N=1 2260 IF L$=MID$(NN$,N,1) THEN 2300 2270 N=N+1:IF N<13 THEN 2260 2280 GOTO 2500 :REM KEINE NOTE 2300 R$=RIGHT$(A$,1):O=VAL(R$) 2310 IF O=0 AND R$<>"0" THEN 2420 2320 IF O>6 THEN 2420 2330 IF L=2 THEN 3000 2340 M$=MID$(A$,2,1) 2350 IF M$="#" THEN N=N+1:GOTO 3000 2360 IF M$="B" THEN N=N-1:GOTO 3000 2380 F$="NUR "+L$+"#"+R$+" ODER "+L$+"B"+R$ 2390 F$=F$+" ODER "+L$+R$+" MOEGLICH" 2400 GOTO 5000 2420 F$="OKTAVBEREICH 0-6" 2430 GOTO 5000 2500 REM 2510 REM NACH / ODER - SUCHEN 2520 REM 2530 M$=MID$(A$,2,1) 2540 IF M$<>"/" AND M$<>"-" THEN 2560 2550 R$=RIGHT$(A$,L-2):GOTO 2600 2560 M$=MID$(A$,3,1) 2570 IF M$<>"/" AND M$<>"-" THEN 5000 2580 L$=LEFT$(A$,2):R$=RIGHT$(A$,L-3) 2600 REM 2610 REM ZAEHLER UND NENNER UNTERSUCHEN 2620 REM 2630 Z=VAL(L$) 2640 IF Z>0 AND Z<99 THEN 2670 2650 F$="ZAEHLER-BEREICH 1 BIS 99" 2660 GOTO 5000 2670 N=VAL(R$) 2680 IF N>0 OR M$="-" THEN 2710 2690 F$="NENNER MUSS GROESSER 0 SEIN" 2700 GOTO 5000 2710 IF M$="/" THEN 3200 :REM ZEIT 2720 IF M$="-" THEN 3400 :REM ON/OFF 2730 GOTO 5000 3000 REM------------------------------- 3010 REM NOTE (TONNUMMER N OKTAVE O) 3020 REM------------------------------- 3030 IF N=0 THEN N=12:O=O-1 3040 IF N=13 THEN N=1 :O=O+1 3050 POKE AD,128+16*O+N-1:AD=AD+1 3060 GOTO 2110 3100 REM------------------------------- 3110 REM PAUSE 3120 REM------------------------------- 3130 POKE AD,239:AD=AD+1:GOTO 2110 3200 REM------------------------------- 3210 REM ZEIT (NOTENDAUER) 3220 REM------------------------------- 3230 T=INT(Q*Z/N) :REM GESAMTZEIT 3240 AN=INT(R*Q*Z/N):REM GATE-ON-ZEIT 3250 OF=T-AN :REM GATE-OFF-ZEIT 3260 IF AN<=96 THEN 3290 3270 F$="GATE-ON-ZEIT ZU GROSS" 3280 GOTO 5000 3290 IF OF<=30 THEN 3320 3300 F$="GATE-OFF-ZEIT ZU GROSS" 3310 GOTO 5000 3320 POKE AD,AN:AD=AD+1 3330 POKE AD,OF+97:AD=AD+1 3340 GOTO 2110 3400 REM------------------------------- 3410 REM VERHAELTNIS GATE-ON/GESAMTZEIT 3420 REM (Z/N = GATE ON/GATE-OFF) 3430 REM------------------------------- 3440 R=Z/(Z+N):GOTO 2110 3600 REM------------------------------- 3610 REM SEQUENZFOLGE 3620 REM------------------------------- 3630 PRINT:PRINT:AS=0 3640 PRINT" ";A$;:READA$:A=INT(VAL(A$)) 3650 IF A=0 THEN 3670 3660 SF(AS)=A:AS=AS+1:GOTO 3640 3670 IF A$<>"0" THEN 3690 3680 PRINT" 0":READ A$:GOTO 2120 3690 F$="LISTE MUSS MIT 0 ABGESCHLOSSEN SEIN" 3700 GOTO 5000 3800 REM------------------------------- 3810 REM TRACK 3820 REM------------------------------- 3830 PRINT:PRINT:PRINT A$; 3840 READ A$:A=INT(VAL(A$)) 3850 IF A>=1 AND A<=3 THEN 3880 3860 F$="NUR 1,2,3 ZULAESSIG" 3870 GOTO 5000 3880 PRINT A:T=A 3890 IF NS THEN NS=0:GOTO 3910 3900 POKE AD,0:AD=AD+1 3910 HI=INT(AD/256):LO=AD-256*HI 3920 POKE SA(S)+(T-1)*2,LO 3930 POKE SA(S)+(T-1)*2+1,HI 3940 READ A$:GOTO 2120 4000 REM------------------------------- 4010 REM SEQUENZ 4020 REM------------------------------- 4030 PRINT:PRINT:PRINT:PRINT A$; 4040 READ A$:A=INT(VAL(A$)) 4050 IF A>=1 AND A<=200 THEN 4080 4060 F$="NUR 1-200 ZULAESSIG" 4070 GOTO 5000 4080 PRINT A:S=A 4090 POKE AD,0:AD=AD+1:NS=-1:SA(S)=AD 4100 REM TRACK-ZEIGER AUF DUMMY-TRACK 4110 REM INITIALISIEREN 4120 POKE AD ,L0:POKE AD+1,H0 4130 POKE AD+2,L0:POKE AD+3,H0 4140 POKE AD+4,L0:POKE AD+5,H0 4150 AD=AD+6 4160 READ A$:GOTO 2120 4300 REM------------------------------- 4310 REM ENDE 4320 REM SEQUENZFOLGELISTE AUFBAUEN 4330 REM------------------------------- 4340 PRINT:PRINT A$ 4350 POKE AD,0:AD=AD+1 4360 HI=INT(AD/256):LO=AD-256*HI 4370 POKE SA,LO:POKE SA+1,HI 4380 FOR I=0 TO AS-1 4390 : X=SA(SF(I)):IF X>0 THEN 4410 4400 : PRINT"SEQUENZ";I;"NICHT DEFINIERT":GOTO 4420 4410 : HI=INT(X/256):LO=X-256*HI 4420 : POKE AD+3*I,LO 4430 : POKE AD+3*I+1,HI 4440 : POKE AD+3*I+2,0 4450 NEXT I 4460 FOR I=0 TO 2:POKE AD+3*AS+I,0:NEXT 4470 AD=AD+3*AS+3 4500 REM 4510 REM BEREICH SA-AD AUF DISK 4520 REM 4530 INPUT"ABSPEICHERN (J/N) ";A$ 4540 IF A$<>"J" THEN END 4550 INPUT"DATEINAME ";DN$ 4560 AH=INT(SA/256):AL=SA-256*AH 4570 EH=INT(AD/256):EL=AD-256*EH 4580 OPEN 1,8,1,DN$ 4590 POKE 252,AL:POKE 253,AH 4600 POKE 780,252 4610 POKE 781,EL:POKE 782,EH 4620 SYS SV:CLOSE 1 4630 END 5000 REM------------------------------- 5010 REM FEHLER 5020 REM------------------------------- 5030 PRINT:PRINT 5040 PRINT"FEHLERHAFTES DATUM: ";A$ 5050 IF F$<>"" THEN PRINT F$ 5060 PRINT:A$="":F$="":GOTO 2110 7000 REM------------------------------- 7010 REM SAVE-ROUTINE 7020 REM------------------------------- 7030 DATA 072,165,001,041,254,133,001 7040 DATA 104,032,216,255,165,001,009 7050 DATA 001,133,001,096 8000 REM------------------------------- 8010 REM MUSIKSTUECK 8020 REM (EDVARD GRIEG KOBOLD) 8030 REM------------------------------- 8100 DATA SEQUENZ,1 8110 DATA TRACK,3 8120 DATA 1-1,1/4,EB1,HB1,EB1,HB0 8130 DATA EB1,HB1,EB1 8140 REM 8200 DATA SEQUENZ,2 8210 DATA TRACK,1 8220 DATA 1-0,1/4,P,1/8,HB3,3/8,P 8230 DATA 1/8,HB3,3/8,P,1-1,1/4 8240 DATA HB3,GB3,GB3,HB3,A3,F3,F3,A3 8250 DATA 1/2,A3,P,1-0 8260 DATA 1/8,EB4,3/8,P,1/8,EB4,3/8,P 8270 DATA 1-1,1/4,EB4,CB4,CB4,EB4 8280 DATA D4,HB3,HB3,D4,1-0,1/4,D4 8290 DATA 1/2,P 8300 DATA TRACK,2 8310 DATA 1-0,1/8,EB3,F3 8320 DATA GB3,F3,EB3,F3,GB3,F3,EB3,F3 8330 DATA 1-1,1/4,GB3,EB3,EB3,GB3 8340 DATA F3,C3,C3,F3,1/2,F3,1/4,P 8350 DATA 1-0,1/8,AB3,HB3 8360 DATA CB4,HB3,AB3,HB3 8370 DATA CB4,HB3,AB3,HB3,1-1,1/4 8380 DATA CB4,AB3,AB3,CB4,HB3,F3,F3,HB3 8390 DATA 1/2,HB3,1/4,P 8400 DATA TRACK,3 8410 DATA 1-1,1/4,HB0,EB1,HB1,EB1 8420 REM 8430 DATA SEQUENZ,3 8440 DATA TRACK,1 8450 DATA 1-1,1/4,P 8460 DATA DB5,P,DB5,P,AB4,P,AB4,P 8470 DATA GB4,P,GB4,P,DB4,P,DB4 8480 DATA TRACK,2 8490 DATA 1-0,1/8 8500 DATA GB4,AB4,HB4,AB4,GB4,AB4,HB4,P 8510 DATA DB4,EB4,F4,EB4,DB4,EB4,F4,P 8520 DATA CB4,DB4,EB4,DB4,CB4,DB4,EB4,P 8530 DATA GB3,AB3,HB3,AB3,GB3,AB3,HB3,P 8540 DATA TRACK,3 8550 DATA 1-0,1/4,P,1/2 8560 DATA GB3,P,DB3,P,CB3,P,GB2,1/4,P 8570 REM 8600 DATA SEQUENZ,4 8610 DATA TRACK,1 8620 DATA 1-0,1/4,P,1/1,P,P,P,P,1/8 8630 DATA HB1,F2,HB2,HB2,F3,HB3,HB3,F4 8640 DATA 1/4,HB4,3/4,P 8650 DATA TRACK,2 8660 DATA 1-0,1/8,F2,GB2,AB2,GB2,F2,P 8670 DATA GB2,F2,EB2,P,F2,EB2,DB2,P 8680 DATA EB2,DB2,C2,P,1/1,P,1/8 8690 DATA EB2,DB2,CB2,P,1/2,P 8700 DATA 1/1,F1,1/4,F4,3/4,P 8710 DATA TRACK,3 8720 DATA 1-0,1/8,F1,GB1,AB1,GB1,F1,P 8730 DATA GB1,F1,EB1,P,F1,EB1,DB1,P 8740 DATA EB1,DB1,C1,P,1/1,P,1/8 8750 DATA EB1,DB1,CB1,P,1/2,P 8760 DATA 1/1,F0,1/4,F2,3/4,P 8800 REM 8810 DATA SEQUENZFOLGE,1,2,2,3,3,4,0 8820 DATA ENDE