Synthesizer
geplant als Artikel für Jugend-Technik, 02/88. Das originale Listing wurde auf dem Z9001 mit dem ASM erstellt, das zugehörige Programm ist synthi21.asm (vp 1987).
Originaltext (Schreibmaschine):
Ein Synthesizer auf dem LC80
Der LC80, ein Lernkomputer aus Erfurt, ist mit geringstem Hardwareaufwand gebaut. So besitzt er in der Grundausbaustufe nur 1 kByte RAM, der aber auf 4kByte aufgestockt werden kann. Dieser geringe Speicher reicht jedoch fuer viele Anwendungs- und Lernfaelle aus, da der LC80 nur in Maschinencode programmierbar ist. Die Tonausgabe und die sechsstellige Siebensegmentanzeige lassen wirkungsvolle Spiele und ernsthaftere Anwendungen zu, so z.B. ein Taschenrechner oder ein Schaltkreispruefgeraet. Heute moechte ich einen kleinen Synthesizer fuer den LC80 vorstellen.
Dieser Synthesizer laeuft ueber die Hoerkapsel und die Tastatur des Computers. Es ist keine Erweiterung der Hardware notwendig. Vom Programmlisting ist die zweite Spalte CODE ab der Adresse 2000H einzugeben - und schon kann es losgehen. Vorher empfiehlt es sich aber, eine Kopie des soeben muehsam eingetippten Programms auf eine Kassette auszulagern. Der Synthesizer wird mit <RES>, <ADR>, <2>, <0>, <0>, <0>, <EX> gestartet. Die weissen Tasten stellen die eigentliche Klaviatur -oder zuenftiger Keyboard- dar, waehrend die schwarzen Tasten fuer den Klang verantwortlich sind. Die Taste <0> entspricht dem Ton gis, <1> dem a usw. bis zur Taste <F> Ton h1 . Wird auf eine dieser Tasten gedrueckt, so erklingt der entsprechende Ton, Beim Druecken auf eine schwarze Taste werden intern einige Speicherzellen veraendert, die auf den Klang Einfluss haben. (Bei den Tasten <LD>, <ST>, <ADR> kommen vorerst nur dieselben Toene, s.u.). Verlassen werden kann das Programm durch <RES>.
Wie funktioniert das nun? Das Programm untergliedert sich grob in die zwei Bereiche Tastaturabfrage und Tonausgabe. Die Tastaturabfrage ist analog dem Betriebssystem-Unterprogramm DAK2 aufgebaut, d. h. die Laufzeit fuer diesen Programmteil ist bei jeder gedrueckten Taste gleich! Das ist fuer die hier gewaehlte Art der Tonausgabe wichtig. Am Ende des Programmteils TASTATUR- ABFRAGE (LINE 21-39) steht im A-teg1ster ein interner, DAK2 entsprechender Tastencode. Dieser wird in den Zeilen LINE 44-47 in einen weiteren, besser nutzbaren Tastaturcode umgewandelt. Dieser Code steht in der Tabelle TACOD (LINE 106-129). Der gesamte Programmteil Tastaturabfrage kann auch dort in anderen Programmen genutzt werden, wo es auf eine schnelle Tastenerkennung ankommt.
Der zweite Teil des Synthesizers, die Tonerzeugung, ist etwas komplizierter aufgebaut. Es muessen zuerst die Daten aus dem Programmteil TAB (LINE 134-199) entsprechend des gewaehlten Klangs bereitgestellt werderi. Dazu wird das Register IX genutzt und in der Routine TABZEIGERBERECHNUNG geladen; dann wird zurueck zur Tastaturabfrage gesprungen. Wurde eine weisse Taste gedrueckt, erfolgt ein Sprung zum Programmteil LD TONKONSTANTE. Hier wird das Register C mit einer Tonkonstanten entsprechend dem aktuellen Klang und Ton geladen. Der Ton wird letztendlich im Programmteil TONAUSGABE in LINE 82-84 erzeugt und als Rechteckschwingung ausgegeben: Es wird das PIO-Bit der Hoerkapsel abgefragt. Ist es 0, wird eine 1 ausgegeben und umgekehrt. Danach wird eine Zeitschleife mit der Tonkonstanten (in Register C) durchlaufen; sie bestimmt im wesentlichen die Periodendauer und damit die Tonhoehe des Tones. Durch staendiges Veraendern dieser Konstanten koennen nun verschiedene Klaenge erzeugt werden.
Wie werden nun die Klaenge programiert? Die Klangdaten sind in der Tabelle TAB untergebracht. Fuer jede schwarze Taste stehen 7 Byte zur Klangdefinition bereit, deren Bedeutung Bild 2 zu entnehmen ist. Hier kann sich jeder selbst an verschiedenen Klaengen probieren. Die dazugehoerigen Tonkonstanten sind im Programmteil TONTABELLEN analog LINE 207-222 unterzubringen. So muss man z.B. selbst noch die Tonkonstanten fuer die Tasten <LD>, <ST>, <ADR> schreiben. (Das ist der Grund dafuer, dass bei diesen Klaengen alle Toene (noch) gleich sind).
Zum Schluss noch zwei Kleinigkeiten: Mit den Befehlen LD A,0FFH und OUT 0F4H wird eine unerwuenschte Ausgabe auf der Anzeige unterdrueckt. In LINE 14 wird der EX-Klang als erster, d.h. nach dem Programmstart gueltiger, Klang definiert.
Ich wuensche Euch viel Spass mit diesem Synthesizer. Und vielleicht erweitert Ihr ihn noch um einige Effekte wie Vibrato, Lautstaerkeaenderungen,…
Bild 1: Programmaufbau
START | INITIALISIERUNG | | +-------> TASTATURABFRAGE | | | +--- keine Taste | | gedrueckt | | | | TASTCODEBERECHNUNG | | | | schwarze weisse | Taste Taste | | | | TABZEIGER- LD TONKONSTANTE | BERECHNUNG | | | | | | TONAUSGABE | | | +-------+------------------+
Bild 2: Aufbau der Tabelle TAB
Nr. Anzahl Bedeutung Byte des Byte der Byte steht in 1+2 2 Adresse der zugehoerigen Tontab. (IX+0) 3 1 0 Ton anschwellend (IX+2) 1 Ton abschwellend 4 1 Tondauer (Anzahl der Durchlaeufe) (IX+3) 5 1 Variationsbreite des. Tons (IX+4) 6 1 0 reiner Ton (IX+5) 1 Tongemisch 7 1 0 einphasige Veraenderung (IX+6) 1 beidphasige Veraenderung
Anlage: Programmlisting
Die Downloads selbst gibt es auf der Seite Software.