Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Der Sound Manager

Bedienen bei Bedarf

Wenn ein Programm nicht gerade den Zweck hat, ein Musikstueck oder 'Geräusch-Kulisse' wiederzugeben, wird man die Sound-Programmierung mit möglichst wenig verbrauchter Zeit nebenher erledigen wollen.

Die Abteilungen des Betriebssystems: Der Sound ManagerDer Sound Manager verfügt pro Kanal über eine Der Key Manager: WarteschlangeWarteschlange für vier Töne, wobei der erste normalerweise gerade abgespielt wird. Man kann also zunächst einmal 4 Töne an Die Abteilungen des Betriebssystems: Der Sound Managerden Sound Manager übergeben, ohne mit einer Verzögerung rechnen zu müssen. Schiebt man dann aber auch gleich den fünften nach (oder versucht man das zumindest), so muss das Programm warten, bis wieder ein Platz in der Der Key Manager: WarteschlangeWarteschlange frei wird.

Bei ungeschickter Programmierung kann man die Die ICs im Überblick: Die CPU Z80
Das Innenleben der CPC-Rechner: Die CPU Z80
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die CPU Z80
CPU
dazu verdonnern, die meiste Zeit zu warten, um nun endlich wieder 'mal einen Sound-Befehl loszuwerden.

Die einfachste Möglichkeit (für die Programmierer des Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
Sound
Managers) besteht zunächst einmal darin, mit der Die Fließkomma-Routinen: FunktionenFunktion SQ(kanal) (Vektor &SOUND MANAGER: BCAD: SOUND CHECKBCAD SOUND CHECK in Maschinensprache) regelmäßig nachzufragen, ob in einem Kanal wieder ein Platz frei ist, um nur dann den nächsten Sound-Befehl nachzuschieben.

Der Wert, den man dabei erhält, ist bitsignifikant und liefert folgende Informationen:

Kanalstatus:
  Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bits
0,1,2 --> Anzahl freier Plätze Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bits
3,4,5 --> Ist eins dieser Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bits
gesetzt, so wartet der erste Ton des getesteten Kanals auf ein Rendezvous mit einem anderen. Dabei sind die einzelnen Kanäle in ihrer üblichen Reihenfolge kodiert: 2,4,5 <=> Erklärung der Anschlussbelegung: A, B, CA,B,C. Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
6 = 1 --> Der erste Ton in der Der Key Manager: WarteschlangeWarteschlange befindet sich im Haltezustand (Hold-Bit gesetzt). Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
7 = 1 --> Der erste Ton der Schlange wird gerade gespielt. Port B - Input: &F5xx: Bits 1, 2 und 3:
Port C - Output: &F6xx: Bit 6 und 7:
Bit 6 und
7 können nicht gleichzeitig gesetzt sein. Ebenso ist bei einem gesetzten Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
7 die Information in den Port C - Output: &F6xx: Bits 0 bis 3:Bits 3 bis 5 bedeutungslos.

Der Nachteil bei dieser Methode, dem sogenannten Polling ist, dass man an jeder nur denkbaren Stelle im Hauptprogramm einen solchen Erklärung der Anschlussbelegung: TestTest einfügen muss. Dadurch wird das Programm nicht nur länger, sondern auch langsamer. Und die nahtlose Versorgung des Soundmanagers ist trotzdem nicht immer sichergestellt.

Deshalb ist es auch möglich, den Sound-Manager via Software-Interrupt zu programmieren. Dabei kann man für jeden Kanal eine Routine bestimmen, die aufgerufen werden soll, wenn in seiner Der Key Manager: WarteschlangeWarteschlange ein Platz frei wird.

In Maschinensprache muss man dem Vektor &SOUND MANAGER: BCB0: SOUND ARM EVENTBCB0 SOUND ARM EVENT einen BCEF: KL INIT EVENT: EventblockEventblock übergeben, den Die Abteilungen des Betriebssystems: Der Sound Managerder Sound Manager dann in seine Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
SOUND
Datenspeicherung und Datenstrukturen: ChainsCHAIN einreiht.

In Einleitung: BASIC
Anhang: Basic
Basic
dient dafür der Befehl 'ON_SQ(kanal)_GOSUB'.

Dabei muss man beachten, dass Diese Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts nur jeweils einmal ausgeführt werden, und sich deshalb ständig selbst initialisieren müssen, nachdem (!) ein neuer Befehl programmiert wurde. Der Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt für einen speziellen Kanal wird nämlich aufgehoben, wenn

1) der Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt erzeugt wurde,
2) ein Sound-Befehl in den entsprechenden Kanal nachgeschoben wurde oder
3) der Bedienen bei Bedarf: Kanalstatus:
BCAD: SOUND CHECK: Kanalstatus:
Kanalstatus
getestet wird (SOUND MANAGER: BCAD: SOUND CHECKSOUND CHECK oder Die Fließkomma-Routinen: FunktionenFunktion SQ(kanal)).

Da die Programmierung der drei Kanäle so vollkommen unabhängig voneinander erfolgt, kann ihre Synchronisierung mit der Zeit aus dem Tritt geraten. Am sinnvollsten ist es deshalb, alle Kanäle einmal pro Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: Takt
Erklärung der Anschlussbelegung: Takt
Erklärung zu den verwendeten Bezeichnungen: Takt
Takt
mit Hilfe der Rendezvous-Technik zu synchronisieren.

Valid HTML   Valid CSS