|
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: BytesByte 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 INTERRUPTB
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 INTERRUPTB
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 INTERRUPTB und C, LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPTB 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 INTERRUPTB. 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 MANAGERSOUND &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 INTERRUPTB
ist gleichwertig mit
Einleitung: Sound MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER Die Firmware des Schneider CPC: SOUND MANAGERSOUND &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 INTERRUPTB und Rendezvous mit Operationen: BD5B / 349A / 349A: FLO SUBA und
Einleitung: Sound MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER Die Firmware des Schneider CPC: SOUND MANAGERSOUND &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 INTERRUPTB.
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 MANAGERSound 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: BasicBasic 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 MANAGERca. 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 MANAGERSOUND &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: INTINT(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: INTINT(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.
| |