home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
sh2x
/
sh26b.d64
/
sequenzgenerator
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
7KB
|
288 lines
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 ******************************
1111 REM
1112 REM SPEICHERENDE HERUNTERSETZEN
1115 REM
1117 POKE 56,144
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