Das Schneider CPC Systembuch

Die Firmware des Schneider CPC

SOUND MANAGER

Die Lautsprecher-Routinen

BCA7: SOUND RESET

Setze die Lautsprecher-Routinen zurück.

Eingaben:    keine
Ausgaben:    keine
Unverändert: IX,IY

Stoppt Anhang: Die Tonausgabedie Tonausgabe, leert die Ton-Warteschlangen, setzt ein ON SQ GOSUB zurück. Die Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurven bleiben erhalten.

BCAA: SOUND QUEUE

Schicke einen Ton zum Sound-Manager.

Eingaben:    HL zeigt auf Parameterblock
Ausgaben:    CY=1 -> Ton wurde in die Der Key Manager: WarteschlangeWarteschlange aufgenommen sonst: CY=0
Unverändert: IY. Wenn CY=0 dann auch HL
Der Parameterblock:
DEFB Bedienen bei Bedarf: Kanalstatus:
BCAD: SOUND CHECK: Kanalstatus:
Kanalstatus
DEFB Nr. der ENV (Volumenhüllkurve. 0 = keine Änderung) DEFB Nr. der ENT (Frequenzhüllkurve. 0 = keine Änderung) DEFW Der Sound Manager: PeriodenlängePeriodenlänge (Frequenz) DEFB Rauschperiode (0 = kein Rauschen) DEFB Startamplitude DEFW Dauer (in 1/100 sek.) oder Wiederholfaktor

Die Angaben entsprechen denen im SOUND-Kommando in Einleitung: BASIC
Anhang: Basic
Basic
, nur die Reihenfolge ist etwas vertauscht.

Eine Tonperiode von 0 erzeugt keinen Ton, sondern eine Pause.

Bei einer negativen Dauer wird die Länge der Volumenhüllkurve als Maß genommen. Diese wird dann -n mal abgespielt. Die Angabe 0 für die Dauer entspricht -1 (ein mal die Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve abspielen).

Die SOUND MANAGER: BCAA: SOUND QUEUESOUND QUEUE Der Kernel - Software-Interrupts: EventsEVENTs (ON SQ GOSUB) aller Kanäle, die durch diesen Ton bedient wurden (Bedienen bei Bedarf: Kanalstatus:
BCAD: SOUND CHECK: Kanalstatus:
Kanalstatus
!), werden deaktiviert.

Die mit SOUND MANAGER: BCB6: SOUND HOLDSOUND HOLD angehaltenen Töne werden wieder frei gegeben.

BCAD: SOUND CHECK

Frage an, ob in der Ton-Warteschlange ein Platz für einen neuen Ton frei ist.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Bitmaske für den zu testenden Kanal
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Bedienen bei Bedarf: Kanalstatus:
BCAD: SOUND CHECK: Kanalstatus:
Kanalstatus
Unverändert: IX,IY

Auch wenn bei der Eingabe 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
in Operationen: BD5B / 349A / 349A: FLO SUBA gesetzt sind, wird nur ein Kanal getestet. Und zwar Operationen: BD5B / 349A / 349A: FLO SUBA vor 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 LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
vor C.

Der Bedienen bei Bedarf: Kanalstatus:
BCAD: SOUND CHECK: Kanalstatus:
Kanalstatus
entspricht der Die Fließkomma-Routinen: FunktionenFunktion SQ(n) in Einleitung: BASIC
Anhang: Basic
Basic
:

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 in der Queue des Kanals. 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 = Gesetzt, wenn der erste Ton der Queue ein Rendezvous mit Kanal Operationen: BD5B / 349A / 349A: FLO SUBA, 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/oder C hat. 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 = Erster Ton befindet sich im Haltezustand (Hold). 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 = Erster Ton ist gerade aktiv (kann nicht gleichzeitig mit 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 gesetzt sein).

Das SOUND MANAGER: BCAA: SOUND QUEUESOUND QUEUE Der Kernel - Software-Interrupts: EventsEVENT (ON SQ GOSUB) des getesteten Kanals wird deaktiviert.

BCB0: SOUND ARM EVENT

Bestimme eine Routine, die aufgerufen werden soll, sobald in der Ton-Warteschlange ein Platz frei ist. (ON SQ GOSUB)

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA=Bitmaske für Kanal
             HL=Adresse des Der Kernel - Software-Interrupts: EventsEVENT Die Speicherkonfiguration im Schneider CPC: BlockBLOCKs
Ausgaben:    keine
Unverändert: IX,IY

Auch wenn bei der Eingabe 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
in Operationen: BD5B / 349A / 349A: FLO SUBA gesetzt sind, wird nur ein Kanal aktiviert. Und zwar Operationen: BD5B / 349A / 349A: FLO SUBA vor 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 LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
vor C.

Der Der Kernel - Software-Interrupts: EventsEVENT Die Speicherkonfiguration im Schneider CPC: BlockBLOCK muss vollständig initialisiert sein.

Der Der Kernel - Software-Interrupts: EventsEVENT Die Speicherkonfiguration im Schneider CPC: BlockBLOCK wird automatisch deaktiviert, wenn er
• angestoßen wurde (KICK),
SOUND MANAGER: BCAA: SOUND QUEUESOUND QUEUE oder
SOUND MANAGER: BCAD: SOUND CHECKSOUND CHECK aufgerufen wird.

BCB3: SOUND RELEASE

Gebe Anhang: Die Tonausgabedie Tonausgabe frei.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Bitmaske für die freizugebenden Kanäle
Ausgaben:    keine
Unverändert: IY

Alle Töne, die durch SOUND MANAGER: BCB6: SOUND HOLDSOUND HOLD eingefroren wurden, werden frei gegeben. Zusätzlich werden die angegebenen Kanäle freigegeben, wenn diese durch das Hold-Bit im Bedienen bei Bedarf: Kanalstatus:
BCAD: SOUND CHECK: Kanalstatus:
Kanalstatus
festgehalten wurden.

BCB6: SOUND HOLD

Friere Anhang: Die Tonausgabedie Tonausgabe ein.

Eingaben:    keine
Ausgaben:    CY=1 -> es waren Töne aktiv, die nun angehalten wurden
Unverändert: DE,IX,IY

Anhang: Die TonausgabeDie Tonausgabe wird sofort unterbrochen. Ist CY=0, so waren keine Töne aktiv.

Anhang: Die TonausgabeDie Tonausgabe wird wieder fortgesetzt, wenn SOUND MANAGER: BCAA: SOUND QUEUESOUND QUEUE, SOUND MANAGER: BCB3: SOUND RELEASESOUND RELEASE oder SOUND MANAGER: BCB9: SOUND CONTINUESOUND CONTINUE aufgerufen wird.

BCB9: SOUND CONTINUE

Setze Anhang: Die Tonausgabedie Tonausgabe fort.

Eingaben:    keine
Ausgaben:    keine
Unverändert: HL,IY

Die Tonunterbrechung durch SOUND MANAGER: BCB6: SOUND HOLDSOUND HOLD wird beendet. Sind keine Töne angehalten Datenbreite: Wordsworden, bewirkt die Routine nichts.

BCBC: SOUND AMPL ENVELOPE

Lege eine Der Sound Manager: Amplituden-Hüllkurve
BCBC: SOUND AMPL ENVELOPE: Der Parameterblock der Amplituden-Hüllkurve:
Amplituden-Hüllkurve
neu fest.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA  = Hüllkurvennummer
             HL = Adresse BCAA: SOUND QUEUE: Der Parameterblock:des Parameterblocks
Ausgaben:    CY=1 -> o.k. - CY=0 -> ungültige Hüllkurvennummer
Unverändert: IX,IY. Wenn CY=0 dann auch HL, BC und A
Der Parameterblock der Amplituden-Hüllkurve:
DEFB Anzahl Hüllkurvenabschnitte
     danach entsprechend oft:
DEFB Anzahl Schritte (0 ... 127)
DEFB Schritthöhe     (0 ... 255 modulo 16 !!!)
DEFB Schrittlänge    (0 ... 255.  0 = 256 !!!)

Es können maximal 5 Abschnitte angegeben werden. Die Anzahl wird aber nicht überprüft!

Gibt man 0 Abschnitte an, wird die 'Standard-Hüllkurve' (2 Sekunden lang ein konstanter Ton) eingestellt.

Der Die Speicherkonfiguration im Schneider CPC: BlockBlock darf überall im RAM liegen, wenn er durch kein Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM verdeckt ist (-> also nicht im unteren Viertel).

Die erlaubten Hüllkurvennummern sind 1 bis 15. Die Die Fließkomma-Routinen: FunktionenFunktion des Vektors und die Bedeutung der einzelnen Datentypen: Bytes
Datenbreite: Bytes
Bytes
im Parameterblock entsprechen dem Befehl ENV in Einleitung: BASIC
Anhang: Basic
Basic
.

Adressierungsarten der Z80: AbsolutAbsolute Volumen-Einstellungen werden mit der Schrittzahl 0 gekennzeichnet.

Ein Abschnitt kann auch eine Der Sound Manager: Hardware-HüllkurvenHardware-Hüllkurve des Die ICs im Überblick: Der PSG AY-3-8912
Die Anschlussbelegungen der wichtigsten ICs im CPC: Der PSG AY-3-8912
PSG
definieren. Er muss dann wie folgt aufgebaut sein:

DEFB  #80 + Wert für Die Tonausgabe: Das Kontrollregister  (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
13 (Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurvenform) DEFW Der Sound Manager: PeriodenlängePeriodenlänge für den Hüllkurvengenerator (Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Reg. 11,12)

BCBF: SOUND TONE ENVELOPE

Lege eine Der Sound Manager: Frequenz-Hüllkurven
BCBF: SOUND TONE ENVELOPE: Der Parameterblock der Frequenz-Hüllkurve:
Frequenz-Hüllkurve
neu fest.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA  = Hüllkurvennummer
             HL = Adresse BCAA: SOUND QUEUE: Der Parameterblock:des Parameterblocks
Ausgaben:    CY=1 -> o.k. - CY=0 -> ungültige Hüllkurvennummer
Unverändert: IX,IY. Wenn CY=0 dann auch Operationen: BD5B / 349A / 349A:  FLO SUBA,BC,HL

Die Die Fließkomma-Routinen: FunktionenFunktion dieses Vektors und seine Basic und Maschinencode: ParameterParameter sind identisch mit dem Befehl ENT in Einleitung: BASIC
Anhang: Basic
Basic
.

Der Parameterblock der Frequenz-Hüllkurve:
DEFB Anzahl Hüllkurvenabschnitte (+ #80 für Der Key Manager: RepeatRepeat)
     danach entsprechend oft:
DEFB Anzahl Schritte (0 ... &EF)
DEFB Schritthöhe     (-128 ... +127)
DEFB Schrittlänge    (0 ... 255.  0 = 256 !!!)

Ist 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 im ersten Datentypen: Bytes
Datenbreite: Bytes
Byte
(Anzahl Abschnitte) gesetzt, so wird diese Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve bei Bedarf beliebig oft wiederholt, bis der Ton abgearbeitet ist.

Abweichend davon können auch Adressierungsarten der Z80: Absolutabsolute Tonperiodenlängen (=APL) eingestellt werden. Ein Abschnitt ist dann wie folgt aufgebaut:

DEFB APL\256 OR &Der Zeichensatz des Schneider CPC: &F0 = 240F0   ; MSB der neuen Tonperidenlänge.
DEFB APL AND &FF      ; LSB der neuen Tonperidenlänge.
DEFB Schrittlänge

Achtung: Das Datentypen: Bytes
Datenbreite: Bytes
Byte
mit dem höherwertigen Datenbreite: NibblesNibble (Port C - Output: &F6xx: Bits 0 bis 3:Bits 8 bis 11) kommt zuerst! Außerdem müssen hier die Port C - Output: &F6xx: Bits 0 bis 3:Bits 4 bis 7 gesetzt sein, um diesen Abschnitt von einem normalen, Adressierungsarten der Z80: Relativrelativen zu unterscheiden.

Ansonsten gelten die allgemeinen Angaben bei &SOUND MANAGER: BCBC: SOUND AMPL ENVELOPEBCBC SOUND AMPL ENVELOPE.

BCC2: SOUND A ADDRESS

Erfrage die Adresse einer Der Sound Manager: Amplituden-Hüllkurve
BCBC: SOUND AMPL ENVELOPE: Der Parameterblock der Amplituden-Hüllkurve:
Amplituden-Hüllkurve
.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Hüllkurvennummer
Ausgaben:    CY=1 -> o.k.: HL = Adresse der Die Tonausgabe: Die möglichen Hüllkurvenformen  (Reg. 13)Hüllkurve und
                           BC = Länge der Die Tonausgabe: Die möglichen Hüllkurvenformen  (Reg. 13)Hüllkurve (immer 16)
Unverändert: DE,IX,IY. Wenn CY=0 dann auch BC

Liegt die Nummer im Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
Operationen: BD5B / 349A / 349A: FLO SUBA nicht im zulässigen Bereich (1 bis 15) kehrt die Routine mit CY=0 zurück.

BCC5: SOUND T ADDRESS

Erfrage die Adresse einer Der Sound Manager: Frequenz-Hüllkurven
BCBF: SOUND TONE ENVELOPE: Der Parameterblock der Frequenz-Hüllkurve:
Frequenz-Hüllkurve
.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Hüllkurvennummer
Ausgaben:    CY=1 -> o.k.: HL = Adresse der Die Tonausgabe: Die möglichen Hüllkurvenformen  (Reg. 13)Hüllkurve und
                           BC = Länge der Die Tonausgabe: Die möglichen Hüllkurvenformen  (Reg. 13)Hüllkurve (immer 16)
Unverändert: DE,IX,IY. Wenn CY=0 dann auch BC

Liegt die Nummer im Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
Operationen: BD5B / 349A / 349A: FLO SUBA nicht im zulässigen Bereich (1 bis 15) kehrt die Routine mit CY=0 zurück.

Valid HTML   Valid CSS