1-Bit-Musik

Bekannt und vielfach anzutreffen ist eine monophone Tonausgabe, wie z.B. bei der Funkamateur-Melodieklingel.

Durch Pulsweitenmodulation (PWM) ist es möglich, bei entsprechend hoher Trägerfrequenz auch mehrere Töne gleichzeitig erklingen zu lassen. Für Computer wie den ZX81 wurde das in verschiedenen Spielen genutzt, es gibt aufgefeilte Engines, die einen bis zu 7-stimmigen Klang incl. Schlagzeug produzieren können.

Im Buch von Rolf-Dieter Klein: „Mikrocomputer selbstgebaut und programmiert“, Franzis-Verlag, 2. Auflage 1984, habe ich eine passende Routine und auch 2 Musiken gefunden, die ich auf den Z9001 umgesetzt habe (anderes Ansprechen der Tonausgabe, andere Grundfrequenz). Die Sound-Routine erlaubt 4stimmige Tonwiedergabe!

Als Besonderheit ist beim Z9001 zu beachten, dass der Beeper original über die CTC mit nachfolgendem D-Flip-Flop angesteuert wird. Durch ein nachfolgendes NAND-Gatter wird der Beeper zugeschaltet (Schaltungshinweise siehe Kassetteninterface). Für die PWM-Sound-Ausgabe wird dieses NAND-Gatter zweckentfremdet und über den zugehörigen PIO-Ausgang der Beeper ständig ein- und ausgeschaltet. Damit ein Ton zu hören ist, muss das der CTC nachfolgende D-Flip-Flop so gesetzt sein, dass das NAND-Gatter „durchlässig“ wird. Das erfolgt ggf. durch die Erzeugung eines einzelnen Impulses der CTC.

Aufgrund dieser Tonerzeugung hört man nur Töne am Beeper, aber nichts am Kassettenausgang!

Für den ZX Sprectrum gibt es einige 1-Bit-Engines, die vielfältigen Sound erzeugen können. Die Anpassung an den Z9001 ist relativ einfach, allerdings müssen Tohhöhen und Tonlängen an den geringeren Systemtakt angepasst werden.

Für die Anpassung der Engines sind deshalb ein paar Eigenschaften des ZX Spectrum zu beachten:

  • Die Taktfrequenz des ZX Spectrum beträgt 3,5 MHz (Z9001: 2,4576 MHz)
  • ein Interrupt wird zu Beginn der vertikalen Austastlücke ausgelöst, mithin aller 1/50 s. Das wird in einigen Engines genutzt.
  • der Beeper ist an Port 0FEh, Bit 4 angeschlossen. Bit 2..0 des Ports bestimmen die Randfarbe.
  • beim Lesen des Ports 0FEh wird über Bit 3 ermittelt, ob eine Taste gedrückt wurde.

Details siehe http://www.zxdesign.info/cassette.shtml und http://www.zxdesign.info/interrupts.shtml

Ein interessantes PC-Windows-Programm ist Beepola. Mit diesen Programm können Musikstücke mit einem Tracker programmiert werden, es werden 9 (?) verschiedene Engines unterstützt, und Beepola erzeugt Assembler-Quelltext!

Das Stück „L'autre valse d'Amelie“ der Gruppe „irrlicht Project“ wurde mit Beepola erzeugt und für den Z9001 umgesetzt.

Ein anderes gutes Programm ist 1tracker by Shiru. Ähnlich zu Beepola kann auch mit diesem Programm Assemblerquellcode erzeugt werden. Dieses Programm ist open source!