Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Der Sound Manager

Kanal-Status

Der Der Sound Manager: Kanal-StatusKanal-Status ist dabei Bit-signifikant. Jedes der acht 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
in diesem Datentypen: Bytes
Datenbreite: Bytes
Byte
hat eine eigene Bedeutung:

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
0 = 1 --> Sound-Befehl gilt für Kanal Operationen: BD5B / 349A / 349A: FLO SUBA 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
1 = 1 --> Sound-Befehl gilt für Kanal LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
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
2 = 1 --> Sound-Befehl gilt für Kanal 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
3 = 1 --> Rendezvous mit Kanal Operationen: BD5B / 349A / 349A: FLO SUBA 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
4 = 1 --> Rendezvous mit Kanal LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
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
5 = 1 --> Rendezvous mit Kanal 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 --> Hold-Status 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 --> Flush

Mit den ersten drei 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
kann man zunächst einmal bestimmen, für welchen Kanal Der Sound Manager: Das Sound-Statementdas Sound-Statement überhaupt gelten soll. Dabei ist es möglich, einen Ton gleichzeitig zu mehreren Kanälen zu schicken, indem einfach mehrere 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 werden.

Mit den nächsten drei 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
wird der Rendezvous-Status bestimmt. Hiermit lässt sich die Ton-Ausgabe auf mehreren Kanälen synchronisieren. Soll ein Ton auf dem Kanal Die verwendeten Abkürzungen bedeuten: x:X angespielt werden, bei dem ein Rendezvous-Bit für Kanal Y gesetzt ist, so überprüft Die Abteilungen des Betriebssystems: Der Sound Managerder Sound Manager, ob im Kanal Y ein Ton wartet, der seinerseits ein Rendezvous mit Die verwendeten Abkürzungen bedeuten: x:X hat. Wenn nicht, so muss der Ton im Kanal Die verwendeten Abkürzungen bedeuten: x:X erst noch warten, bis sein Partner auch da ist. Wenn ja, werden beide jetzt gestartet.

Ein Rendezvous mit sich selbst ist immer erfüllt (Wenn man ein Rendezvous mit sich selbst hat, ist man sein eigener Partner). Aber auch flotte Dreier sind möglich: Operationen: BD5B / 349A / 349A: FLO SUBA wartet auf LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
und C, LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
wartet auf Operationen: BD5B / 349A / 349A: FLO SUBA und C, und C wartet auf Operationen: BD5B / 349A / 349A: FLO SUBA und LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
. Erst wenn alle drei Töne mit diesen Bedingungen zur Tonausgabe gelangen, werden sie auch abgespielt.

Übrigens werden bei Sound-Statements, die zu mehreren Kanälen gesandt werden, automatisch die einzelnen Kanäle miteinander synchronisiert:

Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
SOUND
&X00000011,... = Ton zu Kanal Operationen: BD5B / 349A / 349A: FLO SUBA und LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B

ist gleichwertig mit

Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
SOUND
&X00001010,... = Ton zu Kanal LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
und Rendezvous mit Operationen: BD5B / 349A / 349A: FLO SUBA und Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
SOUND
&X00010001,... = Ton zu Kanal Operationen: BD5B / 349A / 349A: FLO SUBA und Rendezvous mit LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
.

Diese Synchronisation ist dabei wichtig, weil ja in einem der beiden Kanäle noch Töne in der Der Key Manager: WarteschlangeWarteschlange sein könnten. Wueden die Kanäle nicht synchronisiert, dann würde der eine Kanal schon loslegen, während der andere erst noch auf die Abarbeitung der Töne in seiner Schlange davor warten müsste. Damit wären dann sicher auch lustige Effekte programmierbar. Die Handhabung des Sound-Befehls wird durch das Mitdenken des Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
Sound
Managers aber stark vereinfacht.

Ist das Hold-Bit gesetzt, so wird der Ton, sobald er an der Reihe ist, nicht abgespielt. Vielmehr wird dieser Ton solange festgehalten, bis er mit einem expliziten Kommando freigegeben wird. In Einleitung: BASIC
Anhang: Basic
Basic
dient dazu der Befehl 'RELEASE'. Dabei muss wieder, Bit-signifikant, angegeben werden, welche Kanäle 'losgelassen' werden sollen.

Speziell für verstopfte Kanäle ist Hardware-Basteleien: Das 8. Bitdas 7. Bit gedacht. Leichter als man denkt, hat man nämlich unerfüllbare Rendezvous-Bedingungen programmiert und damit Anhang: Die Tonausgabedie Tonausgabe blockiert. In diesem Fall hilft es, einen Ton mit gesetztem Flush-Bit 'durch die Kanäle zu jagen'. Ist in einem Sound-Befehl dieses 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
gesetzt, so stellt er sich nicht schön brav hinten an, sondern marschiert sofort bis vorne durch und wird abgespielt (Außer, wenn gleichzeitig das Hold-Bit gesetzt ist. Dann marschiert er zwar durch, wartet aber mit der Ton-Ausgabe, wenn er vorne angekommen ist).

Wird dieses 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
als Notbremse gebraucht, ist es am sinnvollsten, den Ton gleichzeitig zu allen drei Kanälen zu schicken. Genau diese Eigenschaft hat auch der CHR$(7)-Piepser. Man kann die Ton-Ausgabe also jederzeit freimachen, indem man dieses Zeichen ausdrucken lässt oder, im Direkt-Modus, den Zeileneditor mit einem [CLR] oder [DEL] in einer leeren Zeile zu einem Warnpieser anregt.

Aber auch, wenn Töne direkt auf Ereignisse auf dem Bildschirm reagieren sollen, muss man dieses 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
meist setzen. Hat man beispielsweise den Kanal C dafür auserkoren, immer den Super-Laser-Zapper-Sound auszugeben, wenn der Spieler auf den Feuerknopf seines Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joysticks drückt, so muss der Ton ausklingen, wenn der Knopf nur einmal gedrückt wird, aber andererseits sofort neu gestartet werden, wenn der Spieler ein zweites Mal drückt:

100 ENV 5, 0,15,1, 15,-1,20        ' Volumenhüllkurve
110 ENT -5, 1,1,1                  ' Frequenzhüllkurve
120 Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
MODE
1:EVERY 7,3 GOSUB 150 ' MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER
Die Firmware des Schneider CPC: CASSETTE MANAGER
ca
. 7 mal pro Sekunde Feuerknoepfe Erklärung der Anschlussbelegung: Testtesten 130 WHILE 1:WEND ' und den Rest der Zeit verbraten 140 ' 150 IF (JOY(0)AND &30)= 0 THEN RETURN ' Eine Taste gedrückt? Nein -> Return 160 Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
SOUND
&X10000100,50,500,0,5,5,5 ' Super-Laser-Zapper 170 BORDER 26 ' Flash 180 LOCATE 1+Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - Interrupt
Besonderheiten der Z80 im Schneider CPC: normaler Interrupt
Die Besonderheiten des FDC 765 im Schneider CPC: INT
INT
(40*RND),1+Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - Interrupt
Besonderheiten der Z80 im Schneider CPC: normaler Interrupt
Die Besonderheiten des FDC 765 im Schneider CPC: INT
INT
(25*RND) 190 PRINT CHR$(238); ' Einschuss im Screen 200 BORDER 1:RETURN

Will man kompliziertere Ereignisse auf Kommando starten, kann man die Der Key Manager: WarteschlangeWarteschlange eines Kanales mit bis zu vier Sound-Statements füllen. Wenn im ersten Befehl das Hold-Bit gesetzt ist, wird die Der Key Manager: WarteschlangeWarteschlange nicht abgespielt. Tritt dann das bewusste Ereignis ein, kann man den Kanal abspielen, indem man ihn mit 'RELEASE' freigibt.

Valid HTML   Valid CSS