M066 – KLANG
22
4.3.6.1 Umsetzung durch das M066
Prinzipiell besteht eine AY-Musik aus einer Folge von Registerwerten, die
fortlaufend (also im Gegensatz zum einzelnen Geräusch mit ständiger
Aktivität der CPU) in den PSG geschrieben werden. Resultierend aus der
damals benutzten Technik wurden diese Schreibvorgänge in einem
Rhythmus von 1/50 Sekunde vorgenommen. Damit lässt sich ein fließender
Klang erzeugen.
Als "Taktgeber" wird im M066 ein eigener CTC benutzt, welcher einen
Interrupt dieser Frequenz erzeugt. So wird der Rechner durch die
Musikausgabe nicht blockiert und das Gesamtsystem nur wenig belastet.
4.3.6.2 Player für STC-Dateien
Zur Demonstration der Funktionsfähigkeit wurde ein Player benutzt, der
das STC-Format beherrscht. Derartige Dateien sind relativ klein (ca. 4 KB),
im Gegensatz zu den "besser klingenden" (aber wesentlich größeren)
MOD-Dateien für AMIGA & Co, mit Samples von Klängen echter
Musikinstrumente. Andere Formate sind natürlich auch möglich, erfordern
dann aber einen anderen Player.
Der weiter vorn schon erwähnte "Soundtracker" arbeitet mit nicht
kompilierten
Musiken
(Dateiformat
"*.ST1").
Es
gibt
dafür
aber
Zubehörprogramme, womit eine Umwandlung (ST1 ↔ STC) möglich ist.
Beim STC-Format handelt es sich um eine kompilierte Form, d.h. die
Register-Programmierwerte für den PSG werden nicht direkt sondern
komprimiert abgelegt. Das spart natürlich Platz (kürzere Datei für die
Musik), erfordert aber ein de-kompilieren durch den Player.
Der Player liest die komplett in den RAM geladene STC-Datei stückweise
ein und ermittelt (de-kompiliert) den tatsächlichen Registerwert. Damit wird
nun im o.a. Takt der PSG programmiert und der Ton beginnt zu erklingen.
Durch die wiederholte Abfolge von Programmierungen des PSG wird ein
fließender Klang erzeugt. Das ist eigentlich schon alles.
4.4 Programmierung des CTC
Der M066-interne CTC wird für das Abspielen von AY-Musik benötigt. In
der Player-Engine (siehe dazu Kapitel
"5.3.1 Software für das
M066") und
damit den Demo-Programmen und Musikstücken wird er so programmiert,
daß er alle 20 ms (Frequenz 50 Hz) einen Interrupt erzeugt, wie
nachfolgend erläutert:
22