Der Kleine ist nicht stumm

Über diesen Artikel aus dem Jahr 1985 habe ich einiges im Techniktagebuch geschrieben (Teil 1, Teil 2, Teil 3). Ich möchte ihn hier nur nochmal im Volltext archivieren, einschließlich der vollständigen Scans. Otherwise, nothing to see here. Move along.

Auch dem ZX81 von Sinclair kann man Töne entlocken, wenn man es richtig anstellt, und die Möglichkeiten sind nicht uninteressant. Wie man dazu vorgehen muß, zeigt dieser Bericht.

Das Programm erzeugt am MIC-Ausgang des ZX81 (Kassettenport) Rechteckschwingungen, die über einen Verstärker, etwa einen auf Aufnahme geschalteten Kassettenrecorder, hörbar sind.

Dadurch wird der ZX81 fast zu einem richtigen Musikinstrument. Allerdings muß der Nachteil in Kauf genommen werden, daß bei der Tonerzeugung das Fernsehbild verschwindet. Auf dem Bildschirm sind dann ähnliche Streifen zu sehen, wie sie beim Aufzeichnen von Programmen entstehen.

Die eigentliche Tonerzeugung übernimmt ein Maschinenprogramm, welches durch das Programm in Listing 1 in die REM-Zeile (85 Zeichen lang!) am Anfang des Programms geladen wird. Achten Sie darauf, daß das Programm mit der Meldung “KEIN FEHLER GEFUNDEN.” stoppt! Die Zeilennummer des REM-Befehls wird dann übrigens 0 sein, was sie vor zufälligem Editieren schützt. Danach können die Zeilen 10-150 gelöscht werden.

Nun wird das Unterprogramm in Listing 2 dazu eingegeben, welches das Maschinenprogramm gewissermaßen steuert. Diese beiden Programmteile sind alles, was Sie zur Tonerzeugung brauchen.

Jeder Ton wird durch die Angaben Tondauer und Tonhöhe bestimmt. Die Tondauer wird von dem Maschinenprogramm dadurch eingehalten, daß die Anzahl der erzeugten Rechteckschwingungen mitgezählt wird. Dadurch ergibt sich aber, daß hohe Töne kürzer klingen als tiefe. Aus diesem Grund wird von dem BASIC-Unterprogramm (Listing 2) die richtige Schwingungsanzahl für die gewählte Tonhöhe ermittelt.

Um einen Ton zu erzeugen, müssen die Parameter Tondauer und Tonhöhe in Variablen abgelegt werden, und zwar nach folgendem Schema:

LET L = Tondauer (1-255)
LET P = Tonhöhe (0-255)
GOSUB 2

Mit dem GOSUB-Befehl wird die Tondauer auf die gewählte Tonhöhe umgerechnet, danach die Tonhöhe in die Adresse 16514 und die Tondauer in die Adressen 16515-16 gepoket, wo sie das Maschinenprogramm dann abfragt und den entsprechenden Ton erzeugt. Die Tonhöhe Null ergibt eine entsprechende Pause.

Die Beispielprogramme DEMO 1 bis 3 müssen natürlich mit dem Sounderzeugungsprogramm (Listing 1+2) zusammen verwendet werden. Wichtig: Vor dem Ablaufen Recorder an der MIC-Buchse auf Aufnahme schalten.

Wollen Sie eine bestimmte Frequenz erzeugen, so können Sie mit dem Programm in Listing 4 den erforderlichen Tonhöhenwert P ermitteln. Die gewünschte Frequenz kann fast nie genau getroffen werden, darum gibt das Programm den möglichen Näherungswert und die prozentuale Abweichung an. Die tatsächliche Tonhöhe hängt auch von der Taktfrequenz Ihres ZX ab. Falls Sie sie bei Ihrem Modell genau kennen, können Sie sie in Zeile 100 korrigieren (Hertz).

Für Musiker: Die Tabelle zeigt die auf diese Weise ermittelten Werte für die temperierte Tonleiter.

André Spiegel, zuerst veröffentlicht in CHIP Nr. 2 / 1985, S. 167/168.

Leave a Reply