Hauptsprungleiste🔊 Sound ManagerEintrag Nr. 148CPC 464/664/6128
SOUND AMPL ENVELOPE
&BCBC
Eine Amplitudenhüllkurve einrichten.
Original (SOFT 968): „Set up an amplitude envelope.“
🔀Wie der Aufruf die Routine erreicht
Dein Programm RAM-Sprungleiste Low Kernel (RAM/ROM) unteres ROM
───────────── ──────────────── ──────────────────── ───────────
CALL &BCBC ───────▶ &BCBC: RST 1 ─────────▶ &0008 LOW JUMP: SOUND AMPL ENVELOPE
DW Low Address ROM-Zustand merken, ───▶ (Routine)
(Bit 15 = oberes ROM aus) unteres ROM an │
◀────────────────────────────────────────── ROM-Zustand zurück ◀──── RET ──┘📖Beschreibung
⚙️ Wirkung
- Eine der 15 benutzerprogrammierbaren Amplituden- (Lautstärke-) Hüllkurven einrichten.
🧮 Register auf einen Blick
EingabeAHL
AusgabeCarryHL
verändertABCDEF
Automatisch aus den Bedingungen abgeleitet – bei Fallunterscheidungen („wenn … dann“) gilt der Volltext unten.
➡️ Einsprungbedingungen
- A enthält eine Hüllkurvennummer.
- HL enthält die Adresse eines Amplitudendatenblocks.
⬅️ Rücksprungbedingungen
- Wenn die Hüllkurve erfolgreich eingerichtet wurde:
- Carry gesetzt.
- HL enthält die Adresse des Datenblocks + 16.
- A und BC verändert.
- Wenn die Hüllkurvennummer ungültig ist:
- Carry gelöscht.
- A, B und HL bleiben erhalten.
- Immer:
- DE und andere Flags verändert.
- Alle anderen Register bleiben erhalten.
📝 Hinweise aus dem Handbuch
- Die einzurichtende Hüllkurve wird durch eine Zahl im Bereich 1..15 angegeben. Es wird keine Hüllkurve eingerichtet, wenn eine Zahl außerhalb dieses Bereichs übergeben wird.
- Der Amplitudendatenblock wird in die Amplitudenhüllkurve kopiert. Der Datenblock kann im ROM oder im RAM liegen. Er darf nicht im RAM liegen, das unter einem ROM verborgen ist.
- Der Amplitudendatenblock hat das folgende Layout:
- Byte 0: Anzahl der Abschnitte in der Hüllkurve.
- Bytes 1..3: Erster Abschnitt der Hüllkurve.
- Bytes 4..6: Zweiter Abschnitt der Hüllkurve.
- Bytes 7..9: Dritter Abschnitt der Hüllkurve.
- Bytes 10..12: Vierter Abschnitt der Hüllkurve.
- Bytes 13..15: Fünfter Abschnitt der Hüllkurve.
- Das erste Byte des Amplitudendatenblocks gibt die Anzahl der in der Hüllkurve verwendeten Abschnitte an. Nicht verwendete Abschnitte müssen nicht eingerichtet werden. Eine Hüllkurve, die keine Abschnitte verwendet, hat eine besondere Bedeutung – halte eine konstante Lautstärke für 2 Sekunden.
- bereitgestellt, dann hat dies unvorhersehbare Auswirkungen. Dies sollte vermieden werden.
- Jeder Abschnitt des Amplitudendatenblocks kann entweder eine Hardware- oder eine Software-Hüllkurve angeben. Dies wird durch das erste Byte des Abschnitts angezeigt.
- Ein Software-Hüllkurvenabschnitt ist wie folgt aufgebaut:
- Byte 0: Schrittzahl.
- Byte 1: Schrittgröße.
- Byte 2: Pausenzeit.
- Die Tatsache, dass dies ein Software-Hüllkurvenabschnitt und kein Hardware-Hüllkurvenabschnitt ist, wird dadurch angezeigt, dass Byte 0 nicht Bit 7 gesetzt hat.
- Wenn die Schrittzahl im Bereich 1..27 liegt, wird die Schrittgröße zu der Lautstärke addiert, und zwar so oft wie die Schrittzahl angibt, mit einer Wartezeit gleich der Pausenzeit in 1/100 Sekunden nach jeder Addition.
- Wenn die Schrittzahl 0 ist, wird die Schrittgröße als absolute Lautstärkeeinstellung genommen. Es wird eine einzelne Wartezeit von der Pausenzeit in 1/100 Sekunden durchgeführt.
- Nach der Berechnung der neuen Lautstärke wird diese mit #0F maskiert, um sicherzustellen, dass sie zulässig ist. Somit wird jede Arithmetik auf der Lautstärke modulo 16 durchgeführt.
- Eine Pausenzeit von 0 bedeutet 256 1/100 Sekunden.
- Ein Hardware-Hüllkurvenabschnitt ist wie folgt aufgebaut:
- Byte 0: Hüllkurvenform.
- Byte 1..2: Hüllkurvenperiode.
- Die Tatsache, dass dies ein Hardware-Hüllkurvenabschnitt und kein Software-Hüllkurvenabschnitt ist, wird dadurch angezeigt, dass Byte 0 Bit 7 gesetzt hat.
- Die Hüllkurvenform (maskiert mit #7F) wird an Register 13 des Tongenerators gesendet. Dies legt die Form der Hardware-Hüllkurve fest und ob sie sich wiederholt (siehe Anhang IX für Details).
- Die Hüllkurvenperiode wird an die Register 11 und 12 des Tongenerators gesendet. Diese legen die Länge der Hardware-Hüllkurve fest (siehe Anhang IX für Details).
- Der Abschnitt nach einem Hardware-Abschnitt sollte eine ausreichend lange Pause sein, um der Hardware-Hüllkurve den Betrieb zu ermöglichen. Eine Pause kann mit einer Software-Hüllkurve mit einer Schrittgröße von 0 und mit der Wiederholungszahl und Pausenzeit konstruiert werden, die so abgestimmt sind, dass sie die richtige Gesamtzeit ergeben.
- Es gibt keinen Schutz gegen das Ändern einer Hüllkurve, während sie in Gebrauch ist. Dies könnte unvorhersehbare Auswirkungen haben und sollte vermieden werden.
- Ton wird in die Warteschlange gestellt oder durch die Beendigung der Hüllkurve (siehe SOUND QUEUE). Wenn eine Dauer eingestellt wird, die kürzer als die Hüllkurve ist, dann wird die Hüllkurve abgeschnitten. Wenn die Dauer länger als die Hüllkurve ist, dann wird die endgültige Lautstärke aufrechterhalten, bis die Dauer abläuft.
🧪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.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.