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.
bereit
🐞 Im großen Debugger öffnen
0
1
2
3
Rand
Modus 1 · Basis &C000 · Versatz &0000
Tastenpuffer: 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)
0000HLE ▸ RESET ENTRY
0002RET
0003NOP
0004NOP
0005NOP
0006NOP
0007NOP
0008HLE ▸ LOW JUMP
Firmware
Firmware jetzt
▶ RESET ENTRY · Details
Letzte Falle: –
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)
DateiTypLängeLaden
HALLO.TXTASCII33–
ZAHLEN.BINbinär6&5000
MUSTER.DATbinär16&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.