VC 20
Anwendung

Der VC 20 als Musik Maestro

Mit dem Musik Maestro bringen Sie Ihrem VC 20 Töne bei. Das Programm nutzt die Fähigkeiten des VC 20, so weit es geht, aus. Trotzdem ist das Programm leicht zu bedienen und begeistert alle, die sich bisher nicht mit Musik beschäftigt haben.

Musik Maestro wurde programmiert, um polyphone Musikstücke mit bis zu drei Stimmen spielen zu können. Das Programm wurde zusätzlich mit einer ansprechenden Grafik (Notenschlüssel, Notenzeichen etc.) ausgestattet. Dabei werden alle drei Stimmen gleichzeitig auf dem Bildschirm dargestellt. Die Programmierung der Musikstücke ist »kinderleicht« und wird Ihnen viel Spaß machen.

Im Direktmodus folgende Zeile eingeben:

Laden des Programms:

POKE 44,32:POKE 43,1:POKE 8192,0:NEW sowie
:POKE 648,30: SYS 58648.

Danach lädt man das Programm »Music Maestro Basic Loader« (Listing 1) und startet es durch RUN. Es bringt das Maschinenspracheprogramm und einen neu definierten Zeichensatz in das unter dem Basic-Anfang liegende RAM. Das Programm ist mit Prüfsummen versehen, so daß bei einem Eingabefehler die fehlerhafte Zeile ausgewiesen wird.

Wenn das Programm beendet ist, fordert es dazu auf, es zu löschen und das Hauptprogramm einzugeben. Man gibt NEW ein und lädt das Hauptprogramm (Music Maestro Basic, Listing 2). Dieses startet man einfach mit RUN.

»Music-Maestro« ist dazu geeignet, polyphone Musikstücke mit bis zu drei Stimmen zu spielen, einzugeben, zu ändern und zu transponieren, oder eigene Musikstücke zu komponieren und abzuspielen. Es zeichnet sich durch äußerst komfortable Eingabe der Noten aus (meist genügen zwei Tasten pro Note), durch vielseitige Editiermöglichkeiten und vor allem durch eine gute Notengrafik (beim Eingeben und beim Spielen). Die Grafik stellt sämtliche Noten völlig korrekt dar mit allen Zusatzzeichen wie Kreuz, Punktierung, Hilfslinien, etc. Es können drei Notenschlüssel gewählt werden sowie sieben verschiedene Tempi. Es lassen sich alle Stimmen zusammen spielen oder auch einzeln. Jede Melodie kann beliebig höher oder niedriger transponiert werden (zum Beispiel von C-Dur nach G-Dur). Schließlich können die eingegebenen Stücke auf Kassette gespeichert und wieder geladen werden. Die Aufteilung des Speichers läßt sich frei wählen. Dank einer codierten Speicherung wird pro Note nur ein Byte Speicherplatz benötigt, so daß trotz der Länge des Programms noch über 5000 Töne zur Verfügung stehen, mit 24 KByte-Erweiterung sogar 13000 Töne.

Bedienung des Programms im einzelnen:

Nach dem Starten beginnt das Programm mit einer einfachen Demonstration (Unterprogramm ab Zeile 32000). Durch Drücken einer beliebigen Taste kommt man ins Menü, wo man zwischen sieben Optionen wählen kann. Diese werden im folgenden beschrieben.

Noten eingeben/editieren:

Hier wählt man zunächst die Stimme aus (1 bis 3). Sodann kann man Vorzeichen (Kreuz oder b) eingeben, die für die ganze Zeit des Eingebens gelten, bis sie bei einem erneuten Sprung vom Menü in den Eingabeteil geändert werden. Danach kann man Darstellung der Noten im Violin-, B- oder Baßschlüssel wählen. Nun erscheint der Bildschirmaufbau. Oben wird die Stimme angezeigt, darunter die Nummer des Tones, der als nächster eingegeben wird, sowie die Zahl der noch freien Töne. Es stehen insgesamt über drei Oktaven zur Verfügung. Die rote senkrechte Linie links zeigt ungefähr an, welche Oktave gerade gewählt wurde. Mit den Tasten F1, F3, F5 und F7 kann von Oktave 1 bis Oktave 4 gewählt werden.

Noten eingeben

Dies geschieht sehr einfach. Will man zum Beispiel das »C« eingeben, so drückt man einfach die Taste »C«, für das »D« die Taste »D« und so weiter, für das »H« allerdings die Taste »B«. Jetzt erscheint auf dem Bildschirm das violette Zeitwertsymbol, das anzeigt, daß nun die Eingabe der Länge der Note erwartet wird (ganze, halbe, viertel und so weiter). Dies geschieht mit den Tasten 1 bis 7. Taste 1: ganze Note, Taste 2: halbe, Taste 3: viertel, Taste 4: achtel und so weiter bis Taste 7: hundertachtundzwanzigstel. Nun wird im Notensystem die Note angezeigt und gespielt und der Zähler für die Ton-Nummer erhöht sich. Jetzt kann die nächste Note eingegeben werden. (Für das »C« wählt man die Oktave 2, für das »C'« die Oktave 3, für das »C"« die Oktave 4 (siehe Bild)). Hat man vorher Vorzeichen eingegeben, zum Beispiel »#« für »F«, so wird ein »F« automatisch zu »Fis« erhöht. Es können natürlich auch alle anderen Noten erhöht, beziehungsweise erniedrigt werden. Dazu gibt man einfach die Note geshiftet oder mit der Commodore-Taste ein. Soll im Beispielsfall das »F« ausnahmsweise nicht erhöht werden, so drückt man erst die CTRL-Taste (es erscheint ein Auflösungszeichen) und danach das »F«. Der Vorteil mit den Oktavenwahltasten liegt darin, daß man solange Noten mit nur zwei Tasten eingeben kann, bis die Oktave gewechselt werden soll, erst danach muß man eine weitere Taste drücken.

Punktierte Noten:

Will man zum Beispiel eine halbe Note punktieren, gibt man erst die halbe Note und dann die gleiche noch einmal als Viertel-Note ein – das Programm erkennt die Punktierung und stellt sie später richtig dar.

Editieren:

Zum Korrigieren und zum Überprüfen der bereits eingegebenen Noten kann man wie folgt editieren: Taste »←« geht einen Schritt zurück und zeigt die hier eingegebene Note an beziehungsweise spielt sie, mit Taste »↑« geht man einen Schritt vorwärts. Will man die so überprüfte Note ändern, gibt man jetzt einfach die gewünschte neue Note ein; die alte Note wird überschrieben. Mit SHIFT F1,F3 beziehungsweise SHIFT F5,F7 kann man zehn und 50 Schritte vor- und zurückgehen. Mit Taste »+« (Insert) werden alle folgenden Töne einen Schritt nach vorne geschoben, so daß eine Note eingefügt werden kann, mit Taste »-« (Delete) wird die zuletzt eingegebene beziehungsweise editierte Note gelöscht, alle folgenden Noten rücken einen Schritt zurück (alle Tasten haben Wiederholautomatik).

Wenn man beim Eingeben oder Editieren über den zulässigen Bereich vor- oder zurückgehen will, ertönt ein neunmaliges Warnsignal, und der Befehl wird nicht ausgeführt. Taste »P« und die Tasten eins bis sieben : Pause (ganze, halbe, viertel und so weiter). Taste »*«: End-Marker. Hierdurch wird das Ende des Musikstücks beim Spielen angezeigt, der Marker kann jederzeit geändert beziehungsweise überschrieben werden; es sollte jedoch immer ein Marker gesetzt werden. Beim Editieren wird der Marker durch dreimaligen Piepton angezeigt. Man kann natürlich über den Marker hinaus editieren und eingeben.

Taste »=«: PLAY (Spielen der eingegebenen Melodie), siehe PLAY.

Taste »£«: Rückkehr zum Menü.

PLAY (Spielen):

Hier wird gefragt, wieviele Stimmen zugleich gespielt werden sollen. Man sollte nur die Stimmen spielen, bei denen man auch Noten eingegeben und den End-Marker gesetzt hat. Dann wird für die gewählten Stimmen gefragt, mit welchem Notenschlüssel sie dargestellt werden sollen. Schließlich kann man das Tempo wählen. Jetzt erscheint nach einigen Sekunden der Bildschirm mit drei verschiedenfarbigen Notensystemen. Durch Drücken einer beliebigen Taste wird das Ganze gestartet.

Während des Abspielens kann man folgendes ändern: Taste F1, F3: schneller, Taste F5, F7: langsamer, Taste »←«: Stop, danach durch Taste »↑« Fortsetzung, Taste »S«: Spielen beenden. Wenn alle Stimmen nicht mehr gespielt werden beziehungsweise wenn Taste »S« gedrückt wurde, kann man mit beliebiger Taste ins Menü zurückkehren (außer »S«), mit Taste »SPACE« wird das Abspielen wiederholt.

Transponieren:

Hierdurch kann man einfach eingegebene Stücke höher oder niedriger versetzen (transponieren), das Programm fragt nach den nötigen Angaben und führt das Transponieren unter akustischer Kontrolle aus.

Reservieren:

Am Anfang werden automatisch für Stimme 1 und 2 je 2000 Töne, für Stimme 3 genau 1000 Töne reserviert. Dies kann man beliebig ändern, wenn zum Beispiel für eine Stimme alle Töne reserviert werden sollen. Das Minimum sind 15 Töne. Zu beachten ist nur, daß nach SAVE oder LOAD wieder die alte Reservierung vom Anfang vorhanden ist, man muß dann gegebenenfalls neu reservieren.

SAVE

Hiermit kann man eingegebene Stücke auf Kassette speichern. Das Programm erfragt die nötigen Daten. Es kann nur jeweils eine Stimme auf einmal gespeichert werden.

Will man also zum Beispiel ein dreistimmiges Stück speichern, so führt man drei SAVE-Operationen für Stimme 1 bis 3 nacheinander aus.

LOAD

Hierdurch wird die gespeicherte Melodie genauso wieder geladen, wie sie gespeichert wurde. Soll die Melodie wieder gespielt werden, muß auch die Reservierung der Töne die gleiche sein wie beim Speichern. Will man zum Beispiel ein dreistimmiges Stück wieder laden, so sind (für die drei Stimmen) drei LOAD-Operationen hintereinander auszuführen. Am besten ist es, wenn man SAVE und LOAD nur mit der vom Programm am Anfang vorgenommenen Reservierung verwendet, wenn man also an der Reservierung nichts ändert.

Geschwindigkeitsänderung:

Wenn man die Geschwindigkeit verlangsamen oder erhöhen will, so kann man den Wert 5 in Zeile 12364 erhöhen (langsamer) beziehungsweise erniedrigen (schneller), ebenso den Wert 35 in derselben Zeile erniedrigen.

(C. Neupert/aw)
S: Stimme (0 bis 2)
SF: Schlüsselflag
O: Violinschlüssel
1: B-Schlüssel
2: Baßschlüssel
OK: Oktave (0 bis 3)
N: Zähler für RAM, an welche Adresse eingegebener Ton gespeichert werden soll.
L: Art der einzugebenden Note (ob C,D,E,F etc.)
L=0 : Pause, L=1 : F, L=2 : G, bis L=31 : c"
TP: Notenwert (ganze, halbe, viertel etc.) (0,1, bis 7)
TA(S), TE(S): Anfang beziehungsweise Ende der RAM-Adresse, an die Töne der Stimme S zu speichern sind
Variable
Maschinenprogramm-Adressen:
SYS 6067: Löschen von Stimme S
SYS 5460: Darstellen der Note für Stimme S
SYS 5490: Darstellen der Pause für Stimme S
SYS 5120: PLAY Stimme 0 bis 2
Die Programme benötigen folgende Daten:
für Grafik:
835: Stimmflag (0 bis 2)
834: Schlüsselflag (siehe oben SF)
838: Notenwert (siehe oben TP)
841: L (siehe oben L)
»PLAY«:
860, 861, 862: TA(S) LSB für Stimme S
863, 864, 865: TA(S) MSB für Stimme S
880, 881, 882: Flag für Stimme S, ob spielen oder nicht (1=ja)

Anmerkungen:
Im Spielmodus werden Halbtöne nur mit Kreuz ausgegeben, nicht mit »b« (aus »g-es« wird also zum Beispiel »fis«), was aber in der Praxis keinen Unterschied bedeutet.
Die letzte obere Note (»c"«) kann nur bis 1/64 Länge haben, 1/128 Länge ergibt den End-Marker.
Punktierte Noten werden korrekt gespielt.

Eingabe/Editieren:
Eingabe: Tasten »C,D,E,F,G,A,B« und Tasten »1 bis 7« (für ganze, halbe, viertel etc.) bis 1/128 Note.
Erhöhen: GeSHIFTete Tasten »C,D« etc.
Erniedrigen: Commodore-Taste + C,D etc.
Auflösungszeichen: erst CTRL-Taste, dann C,D etc.
Taste »P« und 1,2,3 etc: Pause (ganze, halbe, viertel)
Taste »F1« bis »F7«: Oktave 1 bis 4
Taste »*«: End-Marker setzen
Editieren: Taste »←«: 1 Ton rückwärts
Taste »↑«: 1 Ton vorwärts
SHIFT F1: wie »↑«, nur 10 Töne
SHIFT F3: wie »↑«, nur 50 Töne
SHIFT F5: wie »←«, nur 10 Töne
SHIFT F7: wie »←«, nur 50 Töne
Taste »+«: INSERT (Einfügen)
Taste »-«: DELETE (Löschen)
Taste »=«: PLAY (Abspielen)
Taste »£«: zurück ins Menü
Play: beliebige Taste, um zu starten.
Während des Abspielens:
F1, F3: schneller
F5, F7: langsamer
Taste »←«: STOP
Taste »↑«: GO
Taste »S«: Spielen beenden
Nach Beendigung: Taste »SPACE«: wieder spielen
andere Tasten (außer S:) Menü

Anmerkung:
In der untersten Oktave können nur die Töne von »Fis« aufwärts gespielt werden, in der obersten (vierten) Oktave nur das »c"«, andere Noten erzeugen eine Pause.

Zusammenfassung der Bedienung des Programms:
1 rem
2 rem ** music maestro       **
3 rem ** machine code loader **
4 rem **
5 rem ** by claus neupert    **
6 rem **                     **
7 rem ** before loading:     **
8 rem ** 'poke 44,32:poke 8192,0:new' **
9 rem ** and:'poke 648,30:sys 58648' **
10 dim h(75):for i=0 to 9
20 h(48+i)=i:h(65+i)=i+10:next
30 for i=4750 to 7675:read a$
40 h=asc(left$(a$,1)):l=asc(right$(a$,1))
50 d=h(h)*16+h(l):s=s+d:poke i,d
60 a=a+1:if a<20 then next: a=-1
65 print"zeile ";1000+z;
70 read v:z=z+1:if v=s then 85
80 print"fehler !";999+z:stop
85 if a<0 then 100
90 s=0:a=0:print:next:
100 print"{clr}{down}geben sie 'new' ein"
110 print"{down}und laden sie"
120 print"{down}'music maestro basic'"
130 end
1000 data 41,43,48,20,43,4f,44,45,32,32,20,32,32,20,34,38,31,32,38,20, 1078
1001 data 38,20,34,38,31,31,35,36,34,4d,55,53,49,43,20,4d,41,53,54,45, 1248
1002 data ad,40,03,8d,0b,90,8e,40,03,e8,8e,43,03,60,ea,bd,66,03,d0,03, 2024
1003 data 4c,08,16,de,66,03,60,ea,ea,ea,de,76,03,a9,01,9d,66,03,60,ea, 2336
1004 data ea,ea,ea,ea,ea,8a,48,0a,0a,0a,18,69,04,48,aa,a0,05,bd,7a,03, 2264
1005 data c9,09,f0,06,fe,7a,03,18,90,0b,a9,00,9d,7a,03,ca,88,c0,00,d0, 2203
1006 data e8,68,a8,68,aa,a9,00,8d,96,03,8e,95,03,98,38,e9,04,aa,bd,7a, 2461
1007 data 03,18,69,60,20,2d,13,e8,ee,96,03,a9,05,cd,96,03,d0,ec,60,48, 2091
1008 data ac,96,03,ad,95,03,c9,00,f0,0e,c9,01,f0,05,68,99,54,1f,60,68, 2124
1009 data 99,af,1e,60,68,99,19,1e,60,ea,c9,27,d0,10,ae,b6,03,e0,0f,d0, 2366
1010 data 02,a2,ff,e8,8e,b6,03,4c,74,13,c9,2f,f0,01,60,ae,b7,03,e0,07, 2365
1011 data d0,02,a2,ff,e8,8e,b7,03,ea,ea,48,ad,b6,03,0a,0a,0a,0a,b8,6d, 2418
1012 data b7,03,18,69,08,8d,0f,90,68,60,ea,ea,ea,a5,c5,c9,40,d0,01,60, 2457
1013 data c9,27,d0,0c,ce,6c,03,ce,6c,03,ce,6c,03,ea,ea,ea,c9,37,d0,0c, 2589
1014 data ee,6c,03,ee,6c,03,ee,6c,03,ea,ea,ea,c9,08,d0,0c,a5,c5,c9,40, 2805
1015 data d0,fa,a5,c5,c9,36,d0,fa,c9,29,f0,01,60,a2,02,a9,01,9d,53,03, 2689
1016 data 9d,0a,90,ca,ea,ea,10,f5,60,ea,ae,43,03,bd,76,03,f0,0b,ac,44, 2617
1017 data 03,a9,60,99,05,1a,99,06,1a,60,20,ea,15,a5,c5,c9,40,f0,fa,c9, 2338
1018 data 20,f0,07,20,4c,13,18,90,ed,ea,a0,02,b9,70,03,99,56,03,49,01, 1823
1019 data 99,53,03,a9,00,99,76,03,88,10,ed,a0,00,8c,43,03,c8,cc,53,03, 1931
1020 data f0,1e,cc,56,03,d0,19,a2,00,20,6b,1c,a2,00,20,13,15,20,37,15, 1467
1021 data 8d,0c,90,ad,73,03,8d,42,03,20,c5,12,a0,01,8c,43,03,cc,54,03, 1707
1022 data f0,1e,cc,57,03,d0,19,a2,01,20,6b,1c,a2,01,20,13,15,20,37,15, 1470
1023 data 8d,0b,90,ad,74,03,8d,42,03,20,c5,12,a0,02,8c,43,03,88,cc,55, 1842
1024 data 03,d0,0b,cc,54,03,d0,24,cc,53,03,d0,1f,60,cc,58,03,d0,19,a2, 2072
1025 data 02,20,6b,1c,a2,02,20,13,15,20,37,15,8d,0a,90,ad,75,03,8d,42, 1308
1026 data 03,20,c5,12,ad,53,03,c9,01,f0,1d,ad,50,03,cd,4d,03,d0,12,a2, 1909
1027 data 01,8e,56,03,ca,8e,50,03,20,e6,1d,20,ac,17,18,90,03,ee,50,03, 1669
1028 data ad,54,03,c9,01,f0,1d,ad,51,03,cd,4e,03,d0,12,a2,01,8e,57,03, 1895
1029 data ca,8e,51,03,20,b6,12,20,ac,17,18,90,03,ee,51,03,ad,55,03,c9, 1842
1030 data 01,f0,1d,ad,52,03,cd,4f,03,d0,12,a2,01,8e,58,03,ca,8e,52,03, 1866
1031 data 20,63,15,20,ac,17,18,90,03,ee,52,03,20,88,13,ea,ea,ea,ea,20, 2028
1032 data ea,15,4c,15,14,a9,00,9d,56,03,ad,5a,03,9d,4d,03,c9,ff,d0,06, 1960
1033 data a9,01,9d,53,03,60,ad,49,03,c9,00,d0,03,20,72,15,a8,b9,de,1c, 1940
1034 data 60,48,a9,01,dd,76,03,d0,05,20,d4,12,68,60,ac,49,03,cc,62,03, 1908
1035 data f0,02,68,60,ac,46,03,c8,cc,63,03,f0,02,68,60,9d,76,03,68,9d, 2174
1036 data 3f,03,60,ea,ea,ad,41,03,8d,0a,90,8e,41,03,e8,e8,8e,43,03,60, 2148
1037 data ac,46,03,ae,43,03,bd,c5,1d,18,79,b0,1d,aa,98,b8,c9,03,30,32, 2062
1038 data 38,e9,02,0a,0a,0a,a8,8c,4b,03,a0,00,b9,74,1d,1d,00,19,9d,00, 1408
1039 data 19,e8,c8,cc,4b,03,d0,f0,b8,c0,19,10,10,a9,01,a0,00,1d,00,19, 2004
1040 data 9d,00,19,e8,c8,c0,07,d0,f4,60,c9,02,f0,09,a8,a9,08,8d,4b,03, 2377
1041 data 18,90,06,a8,a9,28,8d,4b,03,98,0a,0a,0a,a8,18,6d,4b,03,8d,4b, 1547
1042 data 03,b9,38,1d,1d,00,19,9d,00,19,e8,c8,cc,4b,03,d0,f0,ea,ea,60, 2235
1043 data a9,00,aa,a8,e8,c8,cc,6c,03,d0,fa,a0,00,20,88,13,ec,6d,03,d0, 2615
1044 data ef,60,ea,60,ea,ea,ea,ea,ea,ea,ae,49,03,bc,10,1d,98,0a,0a,0a, 2734
1045 data 4a,ae,43,03,18,7d,c5,1d,48,ad,42,03,0a,0a,85,02,68,18,65,02, 1393
1046 data aa,8e,44,03,98,4a,4a,4a,4a,4a,8d,45,03,a0,00,8c,4a,16,b8,ad, 1871
1047 data 46,03,c9,02,30,09,a9,08,18,6d,4a,16,8d,4a,16,b9,08,1d,1d,00, 1227
1048 data 19,9d,00,19,e8,c8,c0,08,d0,f1,ea,ea,a9,00,cd,46,03,d0,03,18, 2438
1049 data 90,4a,ad,42,03,0a,18,69,10,c9,10,d0,03,18,69,01,b8,cd,49,03, 1638
1050 data 30,11,a9,00,8d,3e,03,ad,44,03,38,e9,18,aa,a9,01,18,90,0e,a9, 1688
1051 data 01,8d,3e,03,ad,44,03,18,69,03,aa,a9,80,8d,4a,03,a0,00,8e,47, 1641
1052 data 03,1d,00,19,9d,00,19,ad,4a,03,c8,e8,c0,1c,d0,f1,4c,02,17,ea, 1925
1053 data ac,46,03,b8,c0,03,10,03,ea,ea,60,ea,88,88,ad,3e,03,c9,01,f0, 2393
1054 data 1d,ae,47,03,a9,ff,9d,00,1a,e8,9d,00,1a,e8,9d,00,1a,e8,e8,e8, 2410
1055 data 88,c0,00,d0,ed,60,ea,ea,ea,ea,ad,47,03,18,69,1b,aa,a9,ff,9d, 2959
1056 data 00,19,ca,9d,00,19,ca,9d,00,19,ca,ca,ca,88,c0,00,d0,ed,60,00, 2268
1057 data ad,49,03,85,01,ea,ea,ea,ac,42,03,b9,9f,1d,b8,c5,01,10,2f,b9, 2329
1058 data a2,1d,c5,01,30,03,18,90,5a,a9,01,8d,48,03,a5,01,38,f9,a2,1d, 1746
1059 data aa,ca,bd,70,1d,a8,20,96,17,aa,20,82,17,8a,38,e9,08,aa,88,c0, 2363
1060 data 00,d0,f3,18,90,35,a6,01,e0,00,d0,03,18,90,2c,c0,00,f0,10,c0, 2126
1061 data 01,f0,06,bd,c9,1c,18,90,09,bd,b7,1d,18,90,03,bd,d4,1c,a8,20, 2043
1062 data 96,17,18,69,30,aa,20,82,17,8a,18,69,08,aa,88,c0,00,d0,f3,20, 1961
1063 data c9,1d,20,d8,13,4c,b2,16,a9,07,9d,00,18,a9,ff,9d,00,19,a9,e0, 2129
1064 data 9d,00,1a,60,ea,ea,ea,ea,ad,43,03,c9,00,f0,0a,c9,01,f0,03,a9, 2523
1065 data b4,60,a9,5c,60,a9,0c,60,33,32,a9,00,dd,76,03,d0,4c,ad,43,03, 2049
1066 data c9,00,f0,12,c9,01,f0,07,a2,a8,a0,58,18,90,0b,a2,50,a0,58,18, 2179
1067 data 90,04,a2,00,a0,50,8a,48,a9,00,9d,00,19,9d,00,18,9d,00,1a,88, 1611
1068 data e8,c0,00,d0,f1,a0,00,68,18,69,14,aa,a9,ff,9d,00,18,9d,00,19, 2243
1069 data 9d,00,1a,8a,18,69,08,aa,c8,c0,05,d0,eb,60,00,00,00,00,00,00, 1564
1070 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,00,00,00,00,00, 255
1071 data 00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00,00,00,ff,00, 765
1072 data 00,00,00,00,00,00,ff,00,00,00,00,00,00,00,00,00,00,00,00,00, 255
1073 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0
1074 data 00,00,00,00,00,00,07,00,00,00,00,fb,22,22,22,22,23,00,00,d1, 638
1075 data d9,55,55,53,d3,00,00,f7,84,e7,85,85,84,00,00,bd,a1,bd,21,21, 2294
1076 data bd,00,00,f4,95,96,95,95,f4,00,00,be,08,08,08,08,89,00,24,7e, 1795
1077 data 24,24,ff,24,7e,24,20,38,26,22,ff,24,38,00,00,00,48,48,ff,48, 1503
1078 data fc,48,48,fc,48,48,ff,48,00,00,40,40,40,40,ff,70,48,44,48,48, 2026
1079 data 70,70,ff,00,00,00,00,00,00,00,ff,20,20,20,fb,80,80,f8,08,08, 1601
1080 data f8,00,e2,80,80,80,80,80,92,00,fe,80,80,fc,80,80,fe,00,3c,7e, 2718
1081 data fe,ff,fe,bc,80,80,7e,7e,40,7e,7e,40,40,40,80,80,fc,84,84,fc, 2991
1082 data 04,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 8
1083 data 00,00,00,00,00,00,00,00,00,00,ff,00,00,00,00,00,00,00,ff,ff, 765
1084 data ff,ff,ff,ff,00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00, 1530
1085 data 00,00,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 255
1086 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,3c,7e,ff,ff,ff, 951
1087 data fe,bc,ff,ff,ff,80,80,ff,ff,ff,ff,80,ff,ff,ff,80,80,ff,ff,ff, 4397
1088 data 80,80,ff,ff,ff,00,ff,00,00,00,00,00,00,00,ff,00,00,00,3c,42, 1657
1089 data 46,5a,62,42,3c,00,08,18,28,08,08,08,3e,00,3c,42,02,0c,30,40, 794
1090 data 7e,00,3c,42,02,1c,02,42,3c,00,04,0c,14,24,7e,04,04,00,7e,40, 806
1091 data 78,04,02,44,38,00,1c,20,40,7c,42,42,3c,00,7e,42,04,08,10,10, 926
1092 data 10,00,3c,42,42,3c,42,42,3c,00,3c,42,42,3e,02,04,38,00,00,00, 776
1093 data 00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00,00,00,00,00, 510
1094 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0
1095 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0
1096 data 00,00,00,00,00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00, 510
1097 data 00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00,00,00,ff,00, 765
1098 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0
1099 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e0,00, 224
1100 data 00,00,00,00,00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00, 510
1101 data 00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00,00,00,ff,00, 765
1102 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0
1103 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0
1104 data 00,00,00,00,00,00,e0,00,00,00,00,00,00,00,ff,00,00,00,00,00, 479
1105 data 00,00,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00,00,00,ff,00, 765
1106 data 00,00,00,00,00,00,ff,00,00,00,00,00,00,00,00,00,00,00,00,00, 255
1107 data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0
1108 data 00,00,fc,84,84,84,84,e4,fc,fc,30,50,90,10,10,10,10,7c,7e,82, 2228
1109 data 84,08,10,20,40,fe,7e,82,04,18,18,04,82,7e,18,18,28,48,88,88, 1506
1110 data 7e,08,fc,80,c0,3c,04,04,04,fc,fe,80,80,fe,82,c2,e2,fe,7e,84, 2856
1111 data 04,08,10,20,40,40,fe,84,84,fe,84,84,e2,fe,7e,82,c2,fe,02,02, 2412
1112 data 82,7c,00,00,00,01,01,01,01,01,01,78,fc,c6,83,03,03,03,01,01, 972
1113 data 01,01,ff,01,01,01,03,03,03,03,ff,07,0f,1e,01,01,01,01,ff,07, 845
1114 data 0f,1e,3e,7c,f8,f0,ff,c0,80,80,3c,78,f0,f0,ff,f0,f1,e3,80,80, 3301
1115 data 80,80,ff,80,f0,fc,e7,e6,e6,64,ff,72,38,18,fe,9e,8e,87,ff,83, 3446
1116 data 83,82,0c,07,01,00,ff,00,00,00,82,8e,f8,b0,ff,80,80,80,18,3c, 1955
1117 data 7e,ff,7e,3f,18,00,80,80,80,80,80,80,00,00,0f,1f,1c,30,ff,40, 1803
1118 data c0,c0,83,f2,38,38,ff,1f,0f,0e,f0,fc,fe,fe,ff,fc,78,10,05,07, 2839
1119 data 07,07,ff,0f,0f,0f,0f,1f,1e,1e,ff,3c,38,70,00,00,01,03,ff,0c, 1174
1120 data 38,e0,f0,e0,c0,80,ff,00,00,00,00,00,01,d1,ff,d7,df,e9,00,00, 2455
1121 data f0,d8,ff,c6,c3,c3,d7,d3,d0,d0,df,d0,d0,d0,83,01,01,03,ff,07, 3386
1122 data 06,0c,d0,d6,df,df,ff,d6,d0,d0,38,e0,c0,00,ff,e0,70,38,d0,d0, 3306
1123 data d0,d0,df,d0,d3,d7,1c,0e,07,03,ff,03,03,03,df,d7,d3,d3,ff,d0, 2912
1124 data d0,d0,e6,c6,84,88,ff,00,00,00,00,00,00,00,ff,00,00,00,00,00, 1622
1125 data 00,00,00,00,00,00,10,10,10,10,1f,10,10,10,0b,0b,0b,0b,fb,0b, 449
1126 data 0b,0b,5c,aa,dd,bd,5c,03,8d,b7,1c,bd,5f,03,8d,b8,1c,20,b6,1c, 2023
1127 data bc,5c,03,c0,ff,d0,03,fe,5f,03,c8,48,98,9d,5c,03,bd,5c,03,8d, 2394
1128 data b7,1c,bd,5f,03,8d,b8,1c,68,20,bb,1c,8c,49,03,8d,46,03,a8,b9, 1985
1129 data 97,1d,8d,5a,03,20,b6,1c,20,bb,1c,8c,62,03,8d,63,03,4c,e3,12, 1708
1130 data ad,74,4c,60,ea,48,0a,0a,0a,4a,4a,4a,a8,68,4a,4a,4a,4a,4a,60, 1757
1131 data 04,03,03,03,03,02,02,02,01,01,01,03,02,02,02,02,01,01,01,e8, 271
1132 data 00,a4,aa,ae,b3,b7,bb,bf,c3,c6,c9,cc,cf,d2,d5,d7,d9,db,dd,df, 3771
1133 data e1,e3,e4,e6,e7,e8,ea,eb,ec,ed,ee,ef,33,fa,00,3c,66,81,42,81, 3579
1134 data 66,3c,00,3c,7e,ff,ff,ff,7e,3c,07,32,11,31,10,30,0f,0e,2e,0d, 1574
1135 data 2d,0c,0b,2b,0a,2a,09,29,08,07,27,06,26,05,04,24,03,23,02,22, 430
1136 data 01,00,44,fe,44,44,ff,44,fe,44,ff,ff,ff,ff,ff,00,00,00,00,00, 2379
1137 data 00,ff,ff,ff,ff,ff,00,00,00,00,00,00,20,30,18,1c,1e,1f,3f,3f, 1594
1138 data 7f,fe,fc,f8,7c,1e,0e,07,23,ff,ff,ff,ff,fc,fe,7e,3f,0f,03,01, 2825
1139 data 00,00,00,00,00,00,01,01,01,02,39,39,3d,07,03,01,01,01,39,39, 307
1140 data 3d,07,03,01,01,01,39,39,3d,07,03,01,01,01,39,39,3d,07,03,01, 448
1141 data 01,01,fe,c9,4d,bf,5f,2f,17,0b,05,02,ff,08,0a,0b,1b,1d,1e,0d, 1291
1142 data 84,d8,4c,9e,04,f8,cd,8d,1f,d1,1d,1d,10,1e,1e,16,16,37,03,03, 1659
1143 data 03,02,02,02,01,01,01,01,01,01,01,00,50,a8,13,ad,45,03,c9,00, 729
1144 data d0,01,60,ae,44,03,a0,00,b9,30,1d,1d,00,18,9d,00,18,c8,e8,c0, 1830
1145 data 08,d0,f1,60,ad,3f,03,8d,0c,90,8e,3f,03,8e,43,03,60,60,ea,ea, 2169
1146 data ea,ea,ea,ea,b3,23, 1150
Listing 1. Ladeprogramm zu »MUSIC MAESTRO«. Bitte beachten Sie die Eingabehinweise.
60 dim t%(7,3),v%(9),ts%(7):for i=0to2:poke886+i,0:next:poke 844,0
70 poke 56,76:poke 55,0:poke 650,128:poke36879,8:poke36878,15:gosub32000
90 ta(0)=19500:te(0)=21499:ta(1)=21500:te(1)=23499:ta(2)=23500:te(2)=24570
110 for j=0 to 3:for i=0 to 7: read t%(i,j):next:next
120 data 0,4,6,0,0,0,0,2,0,16,18,7,9,11,12,14
130 data 0,28,30,19,21,23,24,26, 0,0,0,31,0,0,0,0
150 ts%(0)=67:ts%(1)=68:ts%(2)=69:ts%(3)=70:ts%(4)=71:ts%(5)=65:ts%(6)=66
160 cc(1)=176:cc(2)=191:cc(3)=188:cc(4)=172:cc(5)=177:cc(6)=187:cc(7)=165
170 lf(1)=0:lf(2)=1:lf(3)=0:lf(4)=1:lf(5)=0:lf(6)=1:lf(7)=1
172 lg(1)=1:lg(2)=0:lg(3)=1:lg(4)=0:lg(5)=1:lg(6)=0:lg(7)=1
174 vv(1)=44:vv(2)=44:vv(3)=22:vv(4)=22:vv(5)=00:vv(6)=00:vv(7)=66
176 vx(1)=66:vx(2)=44:vx(3)=44:vx(4)=22:vx(5)=22:vx(6)=0:vx(7)=0
180 qw(0)=2:qw(1)=1:qw(2)=5:qw(3)=3:qw(4)=7:qw(5)=4:qw(6)=6
200 poke 36878,15:poke 36879,8:print"{clr}{wht}{rvon}{rght}{rght}{rght}{rght}music maestro":print"{down}{rght}{rght}{rght}{rght}{cyn}by c. neupert"
210 :print"{down}{down}{down}{wht}{rvon}1{rvof} {yel}toene eingeben/edit.":print"{wht}{rvon}2{rvof} {yel}toene spielen"
220 print"{down}{wht}{rvon}3{rvof} {yel}toene reservieren":print"{down}{wht}{rvon}4{rvof} {yel}transponieren"
230 print"{down}{wht}{rvon}5{rvof} {yel}save":print"{down}{wht}{rvon}6{rvof} {yel}load"
240 print"{down}{down}{down}{red}{rght}{rght}{rght}waehlen sie...{wht}"
250 get a$:if a$="" or val(a$)<1 or val(a$)> 6 then 250
260 gosub 900: print"{clr}{wht}":on val(a$)goto 1000,10000,5000,6000,7000,8000
270 stop
800 print"{down}fuer diese stimme":print"{down}wurden keine toene":print"{down}reserviert !":print:return
900 poke 36876,240:for qr=1to120:next:poke 36876,0:return
1000 poke 36878,15:printchr$(147):poke 36879,8
1010 print"{down}{wht}welche stimme":print:print"   {cyn}[1...3] ?"
1012 get a$:if a$="" or val(a$)<1 or val(a$)>3 then 1012
1013 gosub 900:s=val(a$)-1:if abs(ta(s)-te(s))>15 then 1015
1014 gosub800:goto 1010
1015 print"{clr}{down}{cyn}wollen sie vorzeichen":print"{down}eingeben {wht}[j/n] ?"
1016 get a$:if a$="" or a$<>"j" and a$<>"n"then 1016
1017 if a$="n" then 1041
1018 print"{clr}{down}{wht}0{cyn}{rght}- kein vorzeichen":print"{down}{wht}1 {cyn}- #":print"{down}{wht}2{cyn} - b{yel}"
1019 for i=0 to 6:print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}"chr$(ts%(i));" ?"
1020 get a$:if a$="" then 1020
1021 gosub 900:q=val(a$):if q>2 or (q=0 and a$<>"0") then 1020
1022 if q=2 then q=-1
1025 v%(ts%(i)-64)=q:next i
1041 print"{clr}{down}{rght}{rght}{rght}{cyn}schluessel:{wht}":print:print:print:print"1 - violinschluessel":print
1042 print"2 - b-schluessel":print
1043 print"3 - bass-schluessel"
1044 geta$:if a$="" or val(a$)>3 or val(a$)<1 then 1044
1045 sf=val(a$)-1:poke 834,sf:poke 835,0:poke 36869,254
1046 print"{clr}":poke 36869,254:gosub 1800
1050 n=ta(s):sg=36876-s:poke te(s),255:gosub 1610:ok=2:gosub 1950
1090 tf=0
1100 vq=0:get a$:pp=peek(653):if a$="" and pp<> 4 then 1100
1101 ifpp=4thenva=1:pp=0:poke36876,243::poke7826,30:poke38546,5:poke 36876,0:goto 1100
1103 if tf=1 then 1500
1104 if a$<>"" then q=asc(a$):k=q-64:if q>136andq<141then1550
1106 if q>132 and q<137 then ok=q-133:poke 36876,245:gosub 1880:gosub 1950:goto 1100
1107 if q<128 then 1111
1108 ifpeek(653)=1thenq=q-128:k=q-64:ifq>64andq<72thenvq=1:goto 1120
1109 ifpeek(653)=2thengosub1900:if q>64 and q<72 then vq=-1:k=q-64:goto 1120
1110 goto 1100
1111 if a$="="then 10000
1112 if a$="^"then df=1:gosub2000:goto 1100
1113 if a$="_"then df=1:gosub 2100:goto 1100
1114 if a$="p" then l=0:tx=0:goto 1130
1115 if a$="+" then gosub 3000:goto 1100
1116 if a$="-" then gosub 4000: goto 1100
1117 if a$="\" then poke 36869,240:goto 200
1120 ifq<65 or q> 71 then 1150
1121 if va=1 then vb=-v%(k):va=0:goto 1125
1122 vb=0
1125 l=t%(k,ok)+vq+v%(k)+vb:tx=t%(k,ok)
1126 if l<0 or l>31 then poke 36876,245:::::::::poke 36876,0:goto 1100
1127 rem
1130 tf=1:poke 36876,243:poke 7823,29:poke 38543,4:poke 36876,0:sys 6067:goto 1100
1150 if a$="*"then poke 36876,246:poke n,255:poke 36876,0:goto 1522
1160 goto 1100
1500 r=val(a$):if r<1 or r>7 then poke 36876,245::::::::::poke 36876,0:goto 1100
1510 tp=(r-1)*32
1520 poke n,l+tp:goto 1530
1522 poke 36876,245:poke 7825,27:poke 38545,7:gosub 1610:for zx=1 to 2:gosub 900:next
1523 for zx=1 to 1000:next
1524 poke 7825,138
1530 if n<(te(s)-1) then n=n+1:goto 1540
1535 for zx=1 to 9:gosub 900:next:for zx=1 to 1000:next
1540 gosub 1600:tf=0:poke 7823,28:poke 38543,3:poke 7826,138:goto 1100
1550 df=q-136:if df=1 then df=10:gosub 2000:goto 1100
1551 if df=2 then df=50:gosub 2000:goto 1100
1552 if df=3 then df=10:gosub 2100:goto 1100
1553 df=50
1555 gosub 2100:goto 1100
1600 gosub 1610:if a$<>"*" then gosub 1620:return
1610 print"{home}{down}{down}{down}{rght}{rght}{rght}{rght}{wht}{rvon}jjjjjjjj{rvof}{left}{left}{left}{left}{left}{left}{left}{left}"(n-ta(s))-vr;tab(16)"{red}{rvon}jjjjjjjj{rvof}{left}{left}{left}{left}{left}{left}{left}{left}"te(s)-(n-vr)
1612 return
1620 poke 7750,138:poke 7762,138
1630 poke 838,r-1:poke 841,tx:sys 6067:if tx>0 then sys 5640:goto 1640
1635 sys 5490:return
1640 poke sg,peek(7390+l): for qt=1 to 10*(2^(7-r)):next
1650 poke sg,0
1699 return
1800 poke 36879,8:print"{clr}{wht}":gosub 2900:gosub 2400
1805 ad=7947:zz=22:on sf+1 gosub 2500,2600,2700
1810 qz=0: for i=7680+12+10*22 to 7680+12+19*22 step 22
1820 poke i,qz:poke i+1,qz+32:poke i+2,qz+64:qz=qz+1:next i
1830 for i=6144+8*48 to 6144+8*58:poke i,peek(32768+i-6144):next
1840 poke 835,0:sys 6067
1845 for i=1 to 21:poke 7702+i,137:poke 7790+i,137:next
1850 poke 7689,25:poke 7690,26:poke 7747,12:poke 7748,13:poke 7759,14:poke 7760,15
1860 poke 7839,16:poke 7840,17:
1870 poke 7692,49+s:poke 38412,3
1880 poke 7842,49+ok:poke 7842+30720,7:poke 36876,0
1890 return
1900 forqr=1to7:ifq=cc(qr)thenq=qr+64:return
1902 next:return
1950 for i=7857 to 8121 step 22:poke i,138:next
1955 ad=7857+(3-ok)*66:for i=ad to ad+66 step 22
1960 poke i,139:poke i+30720,2:next
1970 return
2000 if n+df>=te(s)then for qt=1 to 9:gosub 900:next: gosub 1610:return
2010 n=n+df:vr=0
2015 z=peek(n):if z=255 then for qt=1 to 3:gosub 900:next:gosub 1610:return
2020 q1=int(z/32):q2=z-q1*32:tx=q2:l=tx:r=q1+1:gosub 1600:return
2100 if n-df<ta(s)then for qt=1 to 9:gosub 900:next:gosub 1610:return
2120 n=n-df:vr=0:goto 2015
2400 restore: for i=1 to 32: read x:next
2420 for i=6240 to 6391:read x:poke i,x:next
2490 return
2500 ad=ad-zz:ifad<7680orad>8185 then return
2510 qz=0:for i=ad to ad+6*zz step zz
2520 poke i,106+qz:poke i+1,106+qz+1:qz=qz+2:next
2530 ad=ad+zz:gosub 2800:return
2600 if ad>8185 or ad<7680 then return
2610 qz=0: for i=ad to ad+4*zz step zz:poke i,127+qz:poke i+1,128+qz:qz=qz+2:next
2620 gosub 2800:return
2700 if ad<7680 or ad>8185 then return
2710 poke ad,120:poke ad+1,121:poke ad+zz,122:poke ad+zz+1,123:poke ad+2*zz+1,124
2720 poke ad+3*zz,125:poke ad+3*zz+1,126:poke ad+2*zz,137:poke ad+4*zz,137
2725 poke ad+ 4*zz+1,137
2730 gosub 2800:return
2800 if ad+120>8185 or ad<7681 then return
2810 for j=0 to 4:for i=ad+2 to ad+13-3*(zz=22):poke i+zz*j,137:next:next
2820 for i=ad-1 to ad +4*zz-1 step zz:poke i,139:pokei+14-3*(zz=22),140:next
2825 if zz<>22 then return
2830 px=ad+2:for i=0 to 6
2840 x=v%(qw(i)):if x=0 then 2880
2850 if x=1then c1=18:c2=20:c3=21:goto2856
2855 c1=19:c2=22:c3=23
2856 if sf=2 then 2875
2857 if sf=1 then 2865
2858 p=px+vv(qw(i)):if lf(qw(i))=1 then poke p,c1:px=px+1:if c1=19 then poke p-22,24
2859 if lf(qw(i))=1 then 2880
2861 poke p,c2:poke p+22,c3:px=px+1:goto 2880
2865 p=px+vx(qw(i)):if lg(qw(i))=1 then poke p,c1:px=px+1:if c1=19 then poke p-22,24
2866 if lg(qw(i))=1 then 2880
2867 poke p,c2:poke p+22,c3:px=px+1:goto 2880
2875 p=px+vv(qw(i))+22:if lf(qw(i))=1 then poke p,c1:px=px+1: if c1=19 then poke p-22,24
2876 if lf(qw(i))=1 then 2880
2877 poke p,c2:poke p+22,c3:px=px+1
2880 next i
2890 return
2900 for i=7680 to 8185:poke i,138:next:return
3000 if n>=te(s)-1 or n<ta(s) then for zx=1 to 9:gosub 900:next: return
3005 poke 36874,130
3010 n1=te(s)-2
3020 poke n1+1,peek(n1)
3030 n1=n1-1:if n1>n then 3020
3040 poke n1,0:poke 36874,0:poke 36876,235:for zx=1 to 500:next: poke 36876,0:return
4000 if n<=ta(s) or n>=te(s) then for zx=1 to 9:gosub 900:next:return
4005 poke 36874,140
4010 n1=n
4020 poke n1-1,peek(n1):n1=n1+1
4030 if n1<te(s) then 4020
4040 poke 36874,0:n=n-1:poke 36876,237:for zx=1 to 900:next:poke 36876,0
4050 return
5000 ub=peek(56)*256-peek(55):ob=24570:fr=ob-ub:af=ub+1
5010 print"{clr}{cyn}{down}{rght}freie toene:";fr-35
5020 for zx=0 to 1:print"{down}{down}{wht}wieviel toene wollen":print"{down}sie fuer stimme ";zx+1
5030 print"{down}reservieren ?":print
5035 input rt(zx)
5040 if rt(zx)+12>frthen print"{down}{down}{down}{red}es sind nur{grn}";fr-15:print"{down}{red}toene frei !{wht}":print:goto 5035
5045 fr=fr-rt(zx)-4:next zx
5050 t1=rt(0):t2=rt(1):t3=fr
5060 ta(0)=af:te(0)=af+t1+1
5080 ta(1)=af+t1+2:te(1)=ta(1)+t2
5100 ta(2)=af+t1+t2+2:te(2)=ta(2)+t3
5110 goto 200
6000 input"stimme";s:if s<1 or s> 3 then 6000
6010 s=s-1:ifabs(ta(s)-te(s))<10 thengosub 800:goto 6000
6020 input"{clr}{down}wieviele halbtoene";dt:if dt<1 or dt>29 then 6020
6030 print"{down}{down}hoeher [1] oder":print"tiefer [2]":print:input sf:if sf<1 or sf>2 then 6030
6040 if sf=2 then sf=-1
6050 for i=ta(s) to te(s)-1:t=int(peek(i)/32):x=peek(i)-32*t:if peek(i)=255then 6100
6055 if x+sf*dt>1 and x+sf*dt<32then x=x+sf*dt:goto 6090
6060 x=x-sf*12:goto 6055
6090 poke i,x+32*t:poke 36876,peek(7390+x):next
6100 poke 36876,0:goto 200
7000 input"{clr}{down}{wht}stimme";s:ifs<1ors>3thenprint:goto7000
7010 s=s-1:ifabs(ta(s)-te(s))<15thengosub800:goto7000
7020 input"{down}{down}{down}von ton # ";t1:print:input"bis ton # ";t2
7030 t1=t1+ta(s):t2=t2+ta(s):if t1>=t2 or(t1<ta(s)ort2>te(s))thenprint:goto7020
7050 fori=0to3:poke i,peek(43+i):next:print"{clr}{wht}pO43,pE(0):pO44,pE(1):pO45,pE(2):pO46,pE(3):run"
7060 aa=int(t1/256):bb=t1-256*aa-1:cc=int(t2/256):dd=t2-256*cc+1
7070 poke 198,2:poke 631,19:poke 632,13:poke 673,aa:poke 674,bb:poke 675,cc:poke 676,dd
7080 poke 44,peek(673):poke 43,peek(674):poke 46,peek(675):poke 45,peek(676):save"",1,1:end
8000 poke 0,peek(45):poke 1,peek(46):print"{clr}{wht}pO45,pE(0):pO46,pE(1):run"
8010 poke 198,2:poke 631,19:poke 632,13:load"",1,1
10000 gosub 12000
10040 get a$:if a$="" then 10040
10050 sys 5120
10060 get a$:ifa$=""or a$="s" then 10060
10070 if a$=" "then gosub 13000:gosub12300:goto 10040
10080 gosub 13000:goto 200
12000 gosub 13000
12005 zx=0:print"{clr}{wht}":poke 36869,240:for i=0 to 2
12006 if abs(ta(i)-te(i))<15then12040
12008 print:print"{cyn}stimme ";i+1;"{wht}j/n ?"
12010 get a$:if a$="" then 12010
12015 gosub 900
12020 if a$="j" then poke 880+i,1:zx=1:goto 12040
12030 if a$="n" then poke 880+i,0:goto 12040
12035 goto 12010
12040 next i:ifzx=0then200
12045 zx=0:for i=0 to 2:if peek(880+i)=1 then poke 870+i,0:zx=1
12046 next:if zx=0then200
12050 for i=0 to 2: if peek(880+i)=0 then 12090
12060 print"{clr}{down}{rght}{rght}{rght}{rght}stimme ";i+1;" :":print:print
12070 print"1 - violinschluessel":print
12072 print"2 - b-schluessel":print
12074 print"3 - bass-schluessel"
12075 get a$:if a$="" or val(a$)<1 or val(a$)>3 then 12075
12080 q=val(a$)-1:gosub 900:poke 883+i,q
12090 next i
12100 rem
12300 for i=0 to 2:if peek(880+i)=0 then 12330
12310 h=int(ta(i)/256):l=ta(i)-h*256:poke 860+i,l:poke 863+i,h
12330 next i
12340 for i=890 to 916:poke i,0:next
12350 poke 848,1:poke 849,1:poke 850,1
12360 print"{clr}{cyn}      {rvon} t e m p o ":print"{wht}{down}{down}{down}{rvon}1{rvof} largo":print
12361 print"{rvon}2{rvof} larghetto":print"{down}{rvon}3{rvof} adagio":print"{down}{rvon}4{rvof} andante"
12362 print"{down}{rvon}5{rvof} allegro moderato":print"{down}{rvon}6{rvof} allegro":print"{down}{rvon}7{rvof} presto"
12363 get a$:if a$="" or val(a$)<1 or val(a$)> 7 then 12363
12364 gosub 900:poke 877,8:poke 876,35*(8-val(a$)):print"{clr}"
12400 for i=0 to 2:poke 835,i: sys 6067:next
12405 poke 36869,254:gosub 2900
12410 poke 36864,20:poke 36865,20:poke 36866,143:poke 36867,192:poke 36869,254
12420 zz=15:ad=7711:on peek(883)+1 gosub 2500,2600,2700:goto 12430
12425 gosub 2500
12430 zz=15:ad=7861:on peek(884)+1 gosub 2500,2600,2700:goto 12440
12435 gosub 2500
12440 zz=15:ad=8026:on peek(885)+1 gosub 2500,2600,2700:goto 12450
12445 gosub 2500
12450 qz=0: for i=7686 to 8166 step 15:poke i,qz:poke i+1,qz+32:poke i+2,qz+64
12460 qz=qz+1: next
12470 for i=7830 to 7979:poke i+30720,3:next
12480 for i=7980 to 8184:poke i+30720,2:next
12490 for i=7705 to 7709:poke i+30720,7:next:for i=7855 to 7859:poke i+30720,5:next
12495 for i=8020 to 8024:poke i+30720,4:next
12499 return
12999 return
13000 poke 36864,12:poke 36865,38:poke 36866,150:poke 36867,174:poke 36869,240:return
30000 data 000,251,34,34,34,34,35,0, 000,209,217,85,85,83,211,0
30010 data 000,247,132,231,133,133,132,0, 000,189,161,189,33,33,189,0
30020 data 0,244,149,150,149,149,244,0, 0,190,8,8,8,8,137,0
30030 data 36,126,36,36,255,36,126,36, 32,56,38,34,255,36,56,0
30040 data 0,0,72,72,255,72,252,72, 72,252,72,72,255,72,0,0
30050 data 64,64,64,64,255,112,72,68, 72,72,112,112,255,0,0,0
30060 data 0,0,0,0,255,32,32,32
30070 data 251,128,128,248,8,8,248,0, 226,128,128,128,128,128,146,0
30075 data 254,128,128,252,128,128,254,0
30080 data 60,126,254,255,254,188,128,128, 126,126,64,126,126,64,64,64
30090 data 128,128,252,132,132,252,4,4
32000 print"{clr}":poke883,0:poke884,1:poke885,2:gosub 12405:poke36878,15
32005 fori=0to2:poke835,i:sys6067:next
32010 x=int(rnd(1)*30)+1:y=int(rnd(1)*6):poke838,y:poke841,x:poke835,0:poke834,0:sys 5640
32020 poke835,1:poke834,1:sys5640:poke835,2:poke834,2:sys5640
32030 z=peek(7390+x):poke36876,z:poke36875,z:poke36874,z
32040 forzx=1to22*y:next
32050 geta$:ifa$=""then32005
32060 poke36876,0:poke36875,0:poke36874,0:gosub13000:return
Listing 2.»MUSIC MAESTRO« – Konzert auf dem VC 20. Bitte beachten Sie die Eingabehinweise.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →