-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathBUMMI.bc
More file actions
351 lines (351 loc) · 12.2 KB
/
BUMMI.bc
File metadata and controls
351 lines (351 loc) · 12.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
1000 A=100:GOTO20:REM ### B U M M I ###
1010 W=200:HH=HO:VV=VE:Z=3
1020 DIMM(W),N(W),Q(13)
1030 SV=15:GOSUB1200:F$="C-DUR"
1090 GOTO9020
1100 PRINT:PRINT" >Taste<";
1110 GOSUB210:GOSUB100:PRINT:PRINT:RETURN
1120 PRINT:PRINT" 1 = BASICODE":PRINT
1130 PRINT" 2 = BASIC":PRINT
1140 PRINT" 3 = DISK1":PRINT
1150 PRINT" 4 = DISK2":PRINT:PRINT
1160 PRINT" AUSWAHL:";:GOSUB210:X=IN-48
1170 IFIN=77 THENX=1.5
1180 IF(X<1)OR(X>4)THENX=0
1190 RETURN
1200 RESTORE:FORI=0 TO32:READX:NEXTI
1210 FORI=1 TO13:READQ(I):NEXTI:RETURN
1220 GOSUB600:CN=0
1230 FORI=10 TO30 STEP5
1240 VE=I/99:HO=.01:GOSUB620
1250 HO=.99:GOSUB630
1260 NEXTI:RETURN
1270 A$="C":RETURN
1280 A$="G":RETURN
1290 A$="D":RETURN
1300 A$="A":RETURN
1310 A$="F":RETURN
1320 A$="B":RETURN
1330 VE=.9:SR$="* (A/E/K/CUL/CUR) ":GOSUB650
1340 GOSUB210:IFIN=77 THENX=1:RETURN
1350 IFIN=29 THENSR$=SR$+"Liedende":GOTO1410
1360 IFIN=28 THENSR$=SR$+"Liedanfang":GOTO1470
1370 IFIN=65 THENSR$=SR$+"Anfangsmarke":KA=I:GOTO1480
1380 IFIN=69 THENSR$=SR$+"Endemarke":KE=I:GOTO1490
1390 IFIN=75 THENSR$=SR$+"Kopieren":GOTO1500
1400 C$="falsche Taste!":GOTO1570
1410 GOSUB650:FORJ=1 TOW
1420 IFJ=W THENX=1:I=W
1430 IFM(J)+N(J)=0 THENI=J-1:J=W
1440 NEXTJ:IFX=1 THEN1550
1450 IFI=0 THENI=1
1460 GOTO1580
1470 GOSUB650:I=1:GOTO1580
1480 GOSUB650:KA=I:GOTO1580
1490 GOSUB650:KE=I:GOTO1580
1500 K=KE-KA:IFK<0 THEN1560
1510 GOSUB650:FORJ=0 TOK
1520 M(I+J)=M(KA+J):N(I+J)=N(KA+J)
1530 IFI+J=W THENJ=K:X=1
1540 NEXTJ:IFX=0 THEN1580
1550 C$="Speicherende":GOTO1570
1560 C$="Fehler! (Ende vor Anfang)"
1570 CN=1:GOSUB650:SR$=C$:CN=0:GOSUB650:GOSUB1620
1580 SD=10:GOSUB450:CN=1:GOSUB650:VE=.8:CN=0
1590 X=0:RETURN
1600 CN=1:B$="":SR$=B$:GOSUB650:CN=0
1610 B$=T$+P$+" "+D$:SR$=B$:GOSUB650:RETURN
1620 RESTORE:FORH=0 TO10
1630 READSP,SD,SV:SD=SD/Z:GOSUB400
1640 NEXTH:RETURN
2000 REM INPUT/EDIT
2010 GOSUB1220:SR$="### EINGABE/AENDERN ###"
2020 HO=.02:VE=.02:GOSUB650
2030 RESTORE:FORI=0 TO45:READA:NEXTI:X=0
2040 FORI=35 TO5 STEP-2.5
2050 H=1-(I+.5)/38:X=X+1
2060 FORJ=-1 TO1 STEP.2
2070 VE=(I+J*1.7)/99:HO=H-COS(J)*2/99:GOSUB620
2080 IF(ABS(J)>.1)OR(X<7)THEN2100
2090 VE=VE+.15:GOSUB630:VE=VE-.15:GOSUB620:GOTO2100
2100 HO=H+COS(J)*2/99:GOSUB630
2110 IFABS(J)>.1 THEN2140
2120 IFX<7 THENVE=VE-.15
2130 GOSUB630
2140 NEXTJ
2150 READSR$:VE=.4:HO=H-.01:GOSUB650
2160 IF(X>7)OR(INT((X+1)/2)<>(X+1)/2)THEN2280
2170 V=60:FORJ=-1 TO1 STEP.2
2180 VE=(V+J*1.7)/99:HO=H-COS(J)*2/99:GOSUB620
2190 HO=H+COS(J)*2/99
2200 IF(ABS(J)>.9)OR(X<5)THEN GOSUB630:GOTO2220
2210 GOSUB620
2220 IF(ABS(J)>.1)OR(X>5)THEN2260
2230 VE=VE-15/99:GOSUB630:IFX>2 THEN2260
2240 VE=VE+4/99:HO=HO+2/99:GOSUB630
2250 VE=VE+5/99:GOSUB630
2260 NEXTJ
2270 VE=.65:READSR$:HO=H-.01:GOSUB650
2280 NEXTI
2290 SR$="@=Pause":VE=.5:HO=.55:GOSUB650
2300 SR$=".=Laenge*1.5":VE=.6:GOSUB650
2310 SR$="*=Sonderfkt.":VE=.7:GOSUB650
2320 SR$="M=MENU":VE=.8:GOSUB650
2330 T$="":P$="":D$="":HO=.02:VE=.8
2340 FORI=1 TOW:X=0
2350 SR=I:GOSUB300:T$=SR$+". Ton: ":IFX=1 THEN9010
2360 IFM(I)+N(I)<>0 THENY=0:GOTO2560
2370 P$="":D$="":GOSUB1600
2380 Y=1:V=0:GOSUB210:P=IN
2390 IFP=29 THEN2650
2400 IF(P=28)AND(I>1)THENI=I-1:GOTO2350
2410 IFP=42 THENX=0:GOSUB1330:GOTO2350
2420 IFP=77 THEN9010
2430 IFP=64 THENP=.5:GOTO2480
2440 IF(P>57)AND(P<65)THEN2470
2450 IFP>64 THENP=P-7
2460 P=P-48:IFP=-48 THEN2380
2470 IF(P<1)OR(P>13)THEN GOSUB1620:GOTO2380
2480 M(I)=P
2490 P$=IN$:GOSUB1600
2500 GOSUB210:D=IN-48:IFIN=77 THENM(I)=0:GOTO9010
2510 IFIN<>46 THEN2530
2520 V=10:D$=" .":GOSUB1600:GOTO2500
2530 IF(D=1)OR(D=2)OR(D=4)OR(D=8)THEN2550
2540 GOSUB1620:GOTO2500
2550 N(I)=D+V
2560 SR=N(I):IFSR>10 THENSR=N(I)-10
2570 GOSUB300:IFN(I)>10 THENSR$=SR$+"."
2580 D$=SR$:P=M(I):IFP>9 THENP=P+7
2590 IFP=.5 THENP=64:GOTO2610
2600 P=P+48
2610 P$=CHR$(P):GOSUB1600
2620 SD=N(I):IFN(I)>10 THENSD=(N(I)-10)*.75
2630 SD=10/SD:IFP=64 THENSV=0
2640 SP=Q(M(I)):GOSUB400:SV=15
2650 IFY=0 THENY=1:GOTO2380
2660 IFI=W THENVE=.9:GOSUB1550:I=I-1
2670 NEXTI
3000 REM PLAY
3010 GOSUB100:PRINT" ### Abspielen ###"
3020 PRINT:PRINT:PRINT" Tonlage (0...9) : ";
3030 GOSUB210:L=IN-48:IFIN=77 THEN9010
3040 IF(L<0)OR(L>9)THEN GOSUB1620:GOTO3030
3050 L=(L-5)*7:PRINTIN$
3060 PRINT:PRINT" Tempo (0...9) : ";
3070 GOSUB210:T=IN-48:IFIN=77 THEN9010
3080 IF(T<0)OR(T>9)THEN GOSUB1620:GOTO3070
3090 PRINTIN$:PRINT:PRINT:T=T*4+1
3100 SV=15:FORI=1 TOW
3110 GOSUB200:IFIN=77 THENX=0:I=W:GOTO3160
3120 IF(M(I)+N(I)=0)OR(IN=77)THENX=I:I=W:GOTO3160
3130 SD=N(I):IFSD>10 THENSD=(SD-10)*.75
3140 SD=T/SD:IFM(I)=.5 THENSV=0
3150 SP=Q(M(I))+L:GOSUB400:SV=15
3160 NEXTI:IFX=0 THEN9010
3170 IFX>1 THEN3200
3180 PRINT"kein Lied im Speicher!"
3190 GOSUB1620:SD=10:GOSUB450:GOTO9010
3200 HO=0:VE=15:GOSUB110:PRINT"wiederholen? J/(N)";
3210 GOSUB210:IFIN<>74 THEN9010
3220 GOSUB110:PRINT" "
3230 GOTO3100
4000 REM DUR
4010 GOSUB1220:SR$="### T O N A R T ###"
4020 HO=.02:VE=.02:GOSUB650:SR$=""
4030 X=1:FORI=0 TO1 STEP.15
4040 VE=.07:HO=I:GOSUB620
4050 VE=.5:GOSUB630:IFX>6 THEN4090
4060 SR=X:GOSUB300:HO=HO+.07:VE=.45:GOSUB650
4070 ONX GOSUB1270,1280,1290,1300,1310,1320
4080 VE=.35:HO=HO-.05:SR$=A$+"-Dur":GOSUB650
4090 X=X+1:NEXTI:SR$="#"
4100 VE=.086:HO=.22:GOSUB650:HO=.35:GOSUB650
4110 HO=.49:GOSUB650:VE=.14:HO=.56:GOSUB650
4120 VE=.16:HO=.4:GOSUB650:HO=.52:GOSUB650
4130 SR$="b":VE=.116:HO=.85:GOSUB650
4140 VE=.186:HO=.67:GOSUB650:HO=.8:GOSUB650
4150 HO=.02:VE=.7:SR$="(Eingestellt: "+F$+")":GOSUB650
4160 VE=.6:SR$=" AUSWAHL:?":HO=.02:VE=.6:GOSUB650
4170 GOSUB210:F=IN-48:IFIN=77 THEN9010
4180 IF(F<1)OR(F>6)THEN GOSUB1620:GOTO4170
4190 GOSUB1200:ONF GOSUB1270,1280,1290,1300,1310,1320
4200 F$=A$+"-Dur":SR$=SR$+F$:GOSUB650:SD=20:GOSUB450
4210 ONF GOTO9010,4240,4230,4220,4260,4250
4220 Q(2)=Q(2)+1:Q(9)=Q(9)+1
4230 Q(1)=Q(1)+1:Q(8)=Q(8)+1
4240 Q(4)=Q(4)+1:Q(11)=Q(11)+1:GOTO4270
4250 Q(3)=Q(3)-1:Q(10)=Q(10)-1
4260 Q(7)=Q(7)-1
4270 GOTO9010
5000 REM LOAD
5010 GOSUB100:PRINT:PRINT" ### Laden ###"
5020 GOSUB1120:IFX=0 THEN GOSUB1620:GOTO5010
5030 IFX=1.5 THEN9010
5040 NF=INT((X-1)*2+.5):PRINTIN$:PRINT:PRINT
5050 PRINT" wirklich? J/(N)";:GOSUB1620
5060 GOSUB210:IFIN<>74 THEN9010
5070 INPUT" Name:";A$:IF(A$="m")OR(A$="M")THEN9010
5080 NF$=A$:GOSUB100:GOSUB500
5090 FORI=0 TOW
5100 GOSUB540:M(I)=VAL(IN$):IFI=0 THENA$=IN$
5110 GOSUB540:N(I)=VAL(IN$):IFI=0 THENM$=IN$
5120 NEXTI:GOSUB580:PRINT:PRINT
5130 PRINT"Name: >";A$;"<"
5140 PRINT:PRINT"Tonart: > ";M$;" <"
5150 GOSUB1100:GOTO9010
6000 REM SAVE
6010 GOSUB100:PRINT:PRINT" ### Retten ###"
6020 GOSUB1120:IFX=0 THEN GOSUB1620:GOTO6010
6030 IFX=1.5 THEN9010
6040 NF=INT(X*2-.5):PRINTIN$:PRINT:PRINT
6050 INPUT" Name:";A$:IF(A$="m")OR(A$="M")THEN9010
6060 NF$=A$:GOSUB100:GOSUB500
6070 FORI=0 TOW
6080 SR=M(I):GOSUB300:IFI=0 THENSR$=A$
6090 GOSUB560:SR=N(I):GOSUB300:IFI=0 THENSR$=F$
6100 GOSUB560:NEXTI
6110 GOSUB580:GOTO9010
7000 REM HELP
7010 GOSUB100:PRINT:PRINT" ### H I L F E ###"
7020 PRINT:PRINT
7030 PRINT" Wer notenunkundig ist, aber"
7040 PRINT"seinem Kind z.B. die Lieder"
7050 PRINT"aus dem >BUMMI<-Heft vorsingen"
7060 PRINT"will, kann das jetzt mit Hilfe"
7070 PRINT"dieses Programms tun."
7080 PRINT"Man braucht nur das Notenbild"
7090 PRINT"mit der Grafik zu vergleichen"
7100 PRINT"und die richtigen Nummern an-"
7110 PRINT"hand der Symbole der Noten"
7120 PRINT"und der Tonart einzugeben."
7130 PRINT"Es ist guenstig die Noten vor-"
7140 PRINT"her auf dem Blatt zu numme-"
7150 PRINT"rieren, um bei der Eingabe"
7160 PRINT"nicht durcheinander zu kommen.":GOSUB1100
7170 PRINT"1.Eingabe/Aendern"
7180 PRINT"-----------------":PRINT
7190 PRINT"M = Sprung ins MENU (gilt im"
7200 PRINT"ganzen Prog. ausser >Hilfe<)"
7210 PRINT"1.Ziffer = Tonhoehe (1...D)"
7220 PRINT"2.Ziffer = Tonlaenge (1,2,4,8)"
7230 PRINT"@ als 1.Ziffer = kein Ton/Pause"
7240 PRINT". vor 2.Ziffer = Laenge * 1.5"
7250 PRINT" (wenn hinter der Note ein .)"
7260 PRINT"CUR = naechster Ton"
7270 PRINT"CUL = 1 Ton zurueck"
7280 PRINT"* = Sonderfunktion"
7290 PRINT" * CUR = Liedende"
7300 PRINT" * CUL = Liedanfang"
7310 PRINT" * A = Anfangsmarke"
7320 PRINT" * E = Endemarke"
7330 PRINT" * K = Kopieren des markier-"
7340 PRINT"ten Teils ab aktuelle Position":GOSUB1100
7350 PRINT" Mit den Kursortasten kann ein"
7360 PRINT"schneller Vor-/Ruecklauf er-"
7370 PRINT"erzeugt werden. Der angezeigte"
7380 PRINT"Ton wird durch Eingabe der"
7390 PRINT"beiden Ziffern ueberschrieben"
7400 PRINT"oder bleibt bei Kursorbetaeti-"
7410 PRINT"gung erhalten."
7420 PRINT"Befindet sich auf dem Noten-"
7430 PRINT"blatt in einem Takt ein > oder"
7440 PRINT"aehnl., dann ist der Takt an"
7450 PRINT"dieser Stelle mit @ aufzufuel-"
7460 PRINT"len."
7470 PRINT"Das Kopieren dient zum Zusam-"
7480 PRINT"menstellen ganzer Lieder mit"
7490 PRINT"mehreren Strophen und Refrain,"
7500 PRINT"kann aber auch zum Loeschen"
7510 PRINT"benutzt werden. Bei * CUR"
7520 PRINT"wird der erste nichtbelegte"
7530 PRINT"Ton als Liedende gewertet.":GOSUB1100
7540 PRINT"2.Abspielen"
7550 PRINT"-----------":PRINT
7560 PRINT"Tonlage 0=Tief 9=HOCH"
7570 PRINT"Tempo 0=Schnell 9=Langsam":PRINT
7580 PRINT"Normale Tonlage = 5"
7590 PRINT"Normales Tempo = 3...5":PRINT
7600 PRINT" Die Tonlage wird jeweils um"
7610 PRINT"eine Oktave verstellt. In ex-"
7620 PRINT"tremen Tonlagen ( <2 / >8 )"
7630 PRINT"kommt es evtl. zum Missklang.":GOSUB1100
7640 PRINT"3. Tonart":PRINT"---------":PRINT
7650 PRINT"Es werden die Symbole des No-"
7660 PRINT"tenblattes (vor dem 1. Takt)"
7670 PRINT"mit den Symbolen der Grafik"
7680 PRINT"verglichen und die entspre-"
7690 PRINT"chende Ziffer (1-6) gedrueckt."
7700 PRINT" Je nach eingegebener Tonart"
7710 PRINT"werden die Toene umgestimmt."
7720 PRINT"Im Grundzustand ist C-Dur ein-"
7730 PRINT"gestellt. Das Einstellen der"
7740 PRINT"Tonart ist erforderlich, um"
7750 PRINT"ein tonrichtiges Abspielen des"
7760 PRINT"Liedes zu erreichen. Man kann"
7770 PRINT"dies bei einer einfachen Ton-"
7780 PRINT"leiter (C-Dur) mit verschiede-"
7790 PRINT"Tonarten ausprobieren.":GOSUB1100
7800 PRINT"4.Laden":PRINT"-------":PRINT
7810 PRINT" Beim Laden wird ein evtl. ge-"
7820 PRINT"speichertes Lied ueberschrie-"
7830 PRINT"ben. Deshalb erfolgt vorher"
7840 PRINT"eine Sicherheitsabfrage. Die"
7850 PRINT"angezeigte Tonart muss vor dem"
7860 PRINT"Abspielen eingestellt werden.":GOSUB1100
7870 PRINT"5.Retten":PRINT"--------":PRINT
7880 PRINT" Das Lied wird unabhaengig von"
7890 PRINT"der eingestellten Tonart ge-"
7900 PRINT"savt. Die zuletzt eingestellte"
7910 PRINT"Tonart wird beim erneuten La-"
7920 PRINT"als Empfehlung angezeigt.":GOSUB1100
7930 PRINT"7.Ende":PRINT"------":PRINT
7940 PRINT" Diese Funktion kann auch zum"
7950 PRINT"schnellen Loeschen eins Liedes"
7960 PRINT"genutzt werden.":GOSUB1100:GOTO9020
8000 REM ENDE
8010 PRINT" Wirklich? J/(N)";:GOSUB1620:GOSUB210
8020 IFIN<>74 THEN9010
8030 GOTO950
9000 REM MENU
9010 GOSUB100
9020 PRINT:PRINT" Programm ### B U M M I ###"
9030 PRINT:PRINT" M E N U"
9040 PRINT" -------":PRINT
9050 PRINT" 1 = Eingabe/Aendern":PRINT
9060 PRINT" 2 = Abspielen":PRINT
9070 PRINT" 3 = Tonart":PRINT
9080 PRINT" 4 = Laden":PRINT
9090 PRINT" 5 = Retten":PRINT
9100 PRINT" 6 = Hilfe":PRINT
9110 PRINT" 7 = Ende":PRINT
9120 PRINT" AUSWAHL:";
9130 GOSUB210:X=IN-48
9140 IF(X<1)OR(X>7)THEN GOSUB1620:GOTO9010
9150 ONX GOTO2010,3010,4010,5010,6010,7010,8010
25000 REM DATA
25010 DATA55,1,15,52,1,15,0,3,0,52,1,15,53,1,15
25020 DATA55,1,15,64,1,15,0,1,0,64,1,15,0,1,0,60,3,15
25030 DATA48,50,52,53,55,57,59,60,62,64,65,67,69
25040 DATA1,8,2,3,4,4,5,2,6,7,1,8,9,"A","B","C","D"
30000 REM W=ANZAHL DER TOENE
30010 REM Z=TEMPO FEHLERMELUNG
30020 REM (ANSTELLE GOSUB250)
30030 REM BEIDES KANN IN ZEILE
30040 REM 1010 GEAENDERT WERDEN
32000 REM
32010 REM **********************
32020 REM * *
32030 REM * ERARBEITET AUF *
32040 REM * KC85/3 UND C 116 *
32050 REM * *
32060 REM * C 25.05.1990 *
32070 REM * *
32080 REM * STEFFEN HANTZSCH *
32090 REM * KRENKELSTR. 15 *
32100 REM * DRESDEN 8019 *
32110 REM * *
32120 REM **********************
32130 REM
32140 REM Erstausstrahlung: Deutschlandsender Kultur
32150 REM-spezial 910306