Hauptsprungleiste🔊 Sound ManagerEintrag Nr. 142CPC 464/664/6128
SOUND QUEUE
&BCAA
Füge einen Sound zu einer Sound-Warteschlange hinzu.
Original (SOFT 968): „Add a sound to a sound queue.“
🔀Wie der Aufruf die Routine erreicht
Dein Programm RAM-Sprungleiste Low Kernel (RAM/ROM) unteres ROM
───────────── ──────────────── ──────────────────── ───────────
CALL &BCAA ───────▶ &BCAA: RST 1 ─────────▶ &0008 LOW JUMP: SOUND QUEUE
DW Low Address ROM-Zustand merken, ───▶ (Routine)
(Bit 15 = oberes ROM aus) unteres ROM an │
◀────────────────────────────────────────── ROM-Zustand zurück ◀──── RET ──┘📖Beschreibung
⚙️ Wirkung
- Versuche, einen Sound zur Sound-Warteschlange eines oder mehrerer Kanäle hinzuzufügen. Wenn die Sound-Warteschlange eines der Kanäle voll ist, dann wird kein Sound an irgendeinen Kanal ausgegeben.
🧮 Register auf einen Blick
EingabeHL
AusgabeCarry
verändertABCDEFHLIX
Automatisch aus den Bedingungen abgeleitet – bei Fallunterscheidungen („wenn … dann“) gilt der Volltext unten.
➡️ Einsprungbedingungen
- HL enthält die Adresse eines Soundprogramms, das im zentralen 32K des RAM liegen muss.
⬅️ Rücksprungbedingungen
- Wenn der Sound zur Warteschlange (zu den Warteschlangen) hinzugefügt wurde:
- Carry gesetzt.
- HL verändert.
- Wenn mindestens eine Warteschlange voll war:
- Carry gelöscht.
- HL bleibt erhalten.
- Immer:
- A, BC, DE, IX und andere Flags verändert.
- Alle anderen Register bleiben erhalten.
📝 Hinweise aus dem Handbuch
- Das Klangprogramm ist wie folgt aufgebaut:
- Byte 0: Zu verwendende Kanäle und Rendezvous-Anforderungen.
- Byte 1: Zu verwendende Amplitudenhüllkurve.
- Byte 2: Zu verwendende Tonhüllkurve.
- Bytes 3..4: Tonperiode.
- Byte 5: Rauschperiode.
- Byte 6: Anfangsamplitude.
- Bytes 7..8: Dauer oder Wiederholungszähler der Hüllkurve.
- Alle Werte im Klangprogramm werden vor der Verwendung auf den entsprechenden Bereich maskiert.
- Die Kanäle, auf denen der Klang ausgegeben werden soll, sind wie folgt in Byte 0 kodiert:
- Bit 0: Ausgabe auf Kanal A.
- Bit 1: Ausgabe auf Kanal B.
- Bit 2: Ausgabe auf Kanal C.
- Bit 3: Rendezvous mit Kanal A.
- Bit 4: Rendezvous mit Kanal B.
- Bit 5: Rendezvous mit Kanal C.
- Bit 6: Halten bis zur Freigabe.
- Bit 7: Warteschlange leeren.
- Ein Kanal ignoriert den Befehl, mit sich selbst ein Rendezvous durchzuführen. Klänge, die auf mehreren Kanälen ausgegeben werden, führen implizit ein Rendezvous miteinander durch. Klänge, für die ein Rendezvous angeordnet wird, werden zum selben Zeitpunkt an den Klanggenerator ausgegeben.
- Das Setzen des Halte-Bits verhindert, dass der Klang läuft, bis er durch Aufruf von SOUND RELEASE (oder einer Routine mit ähnlicher Wirkung) freigegeben wird. Das Setzen des Leerungs-Bits leert die Warteschlange und verwirft jeden aktuell aktiven Klang, sodass der neue Klang sofort starten kann.
- Die Amplitudenhüllkurve liegt im Bereich 0..15. Die Hüllkurven 1..15 sind die Amplitudenhüllkurven, die mit SOUND AMPL ENVELOPE eingestellt werden können. Hüllkurve 0 bedeutet, keine Amplitudenhüllkurve zu verwenden, sondern einfach die Anfangsamplitude für 2 Sekunden oder die angegebene Dauer zu halten.
- Die Tonhüllkurve liegt im Bereich 0..15. Die Hüllkurven 1..15 sind die Tonhüllkurven, die mit SOUND TONE ENVELOPE eingestellt werden können. Hüllkurve 0 bedeutet, keine Tonhüllkurve zu verwenden,
- sondern einfach den Anfangston zu halten.
- Eine Tonperiode von 0 bedeutet, keinen Ton zu erzeugen. Tonperioden im Bereich 1..4095 geben die Periode des Tons in Einheiten von 8 Mikrosekunden an.
- Die Rauschperiode liegt im Bereich 0..31. Rauschperioden 1..31 geben die Periode der Rauschkomponente eines Klangs an. Eine Rauschperiode von 0 bedeutet, kein Rauschen zu verwenden.
- Die Anfangsamplitude liegt im Bereich 0..15. Amplitude 0 bedeutet keinen Anfangsklang, Amplitude 15 die maximale Lautstärke.
- Die Bytes 7 und 8 speichern die Klangzeit. Ist diese null, so wird die Amplitudenhüllkurve einmal durchlaufen. Ist die Klangzeit negativ, so wird die Amplitudenhüllkurve minus der Klangzeit oft durchlaufen (d. h. 1..32768 Mal). Ist die Klangzeit positiv, aber nicht null, so wird sie als Dauer des Klangs in 1/100 Sekunden angenommen.
- Wenn eine Dauer angegeben wird, während eine Amplitudenhüllkurve verwendet wird, legt die angegebene Dauer die Länge des Klangs fest. Ist die Dauer länger als die Hüllkurve, so wird die Endamplitude der Hüllkurve aufrechterhalten, bis die Dauer abläuft. Tonhüllkurven werden weitgehend genauso behandelt wie Amplitudenhüllkurven, außer dass sie niemals die Länge des Klangs festlegen.
- Das Klangereignis, das ausgeführt wird, wenn eine Klangwarteschlange einen freien Platz hat, wird auf den in diesem Befehl angegebenen Kanälen deaktiviert.
- Alle Klänge, die derzeit von KLANG ANHALTEN gehalten werden, werden automatisch freigegeben, wenn diese Routine aufgerufen wird. Außerdem wird das Klangwarteschlangenereignis deaktiviert (siehe KLANG AKTIVIEREN EREIGNIS). KLANGWARTESCHLANGE kann Interrupts aktivieren.
🧪Beispielprogramm – ausführen, ändern, Schritt für Schritt
Das Programm liegt bei
&4000 und würde auf dem echten CPC mit CALL &4000 aus BASIC gestartet. Hier läuft es im Z80-Emulator; die Firmware ist nachgebildet.ℹ️ Ton wird nicht hörbar abgespielt, sondern als Warteschlange je Kanal angezeigt.
0
1
2
3
Rand
Modus 1 · Basis &C000 · Versatz &0000Tastenpuffer: leer
Gedrückt gehaltene Tasten (für KM TEST KEY / KM GET JOYSTICK) per Klick umschalten; die Zahl ist die Tastennummer.
Register & Flags
AF
&FFFF
BC
&0000
DE
&0000
HL
&0000
IX
&FFFF
IY
&FFFF
SP
&C000
PC
&0000
S
1
Z
1
Y
1
H
1
X
1
P/V
1
N
1
C
1
Z80-Takte: 0 TCPC-Zeit: 0 µsROMs: unten aus, oben ausRAM-Konfig: &C0
Nächste Befehle (Disassembler)
0000ED FEHLE ▸ RESET ENTRY
0002C9RET
000300NOP
000400NOP
000500NOP
000600NOP
000700NOP
0008ED FEHLE ▸ LOW JUMP
Firmware
Letzte Firmware-Aufrufe
noch keine
Weitere Anzeigen: Speicher, Stapel, Ton, Dateien, Drucker, Kernel
Speicher
400000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
401000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
402000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
403000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
404000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
405000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
406000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
407000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
PCSP(HL)(DE)Leseansicht mit aktueller ROM-/Bank-Einblendung
Stapel
C0000000← SP
C0020000
C0040000
C0060000
C0080000
C00A0000
C00C0000
C00E0000
Ton (Sound Manager)
Kanal A
still
4 von 4 Plätzen frei
Kanal B
still
4 von 4 Plätzen frei
Kanal C
still
4 von 4 Plätzen frei
Dateien (simuliertes Laufwerk)
| Datei | Typ | Länge | Laden |
|---|---|---|---|
| HALLO.TXT | ASCII | 33 | – |
| ZAHLEN.BIN | binär | 6 | &5000 |
| MUSTER.DAT | binär | 16 | &6000 |
Eingabe: keine · Ausgabe: keine
Drucker
(noch nichts gedruckt)
Kernel: Zeit & Ereignisse
Zeit (KL TIME PLEASE): 0 × 1/300 s = 0.00 s · Interrupts: 0
keine Ereignisblöcke angemeldet
🔗Verwandte Einträge
💡 Quellen
Amstrad SOFT 968 „CPC 464/664/6128 Firmware“, Abschnitt 15 (Beschreibung, übersetzt); Adresse und Name abgeglichen mit Taylor/Defoe „The Amstrad CPC Firmware Guide“. Simulation: eigene Nachbildung (HLE) – Laufzeiten der Firmware selbst werden nicht nachgebildet.