Hauptsprungleiste🔊 Sound ManagerEintrag Nr. 149CPC 464/664/6128
SOUND TONE ENVELOPE
&BCBF
Eine Tonhüllkurve einrichten.
Original (SOFT 968): „Set up a tone envelope.“
🔀Wie der Aufruf die Routine erreicht
Dein Programm RAM-Sprungleiste Low Kernel (RAM/ROM) unteres ROM
───────────── ──────────────── ──────────────────── ───────────
CALL &BCBF ───────▶ &BCBF: RST 1 ─────────▶ &0008 LOW JUMP: SOUND TONE 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 Tonhü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 Tondatenblocks.
⬅️ 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 Envelope-Nummer ungültig ist:
- Carry gelöscht.
- A, BC und HL bleiben erhalten.
- Immer:
- DE und andere Flags verändert.
- Alle anderen Register bleiben erhalten.
📝 Hinweise aus dem Handbuch
- Die einzurichtende Envelope wird durch eine Zahl im Bereich 1..15 angegeben. Es wird keine Envelope eingerichtet, wenn eine Zahl außerhalb dieses Bereichs übergeben wird.
- Der Ton-Datenblock wird in die Ton-Envelope kopiert. Der Datenblock kann im ROM oder im RAM liegen. Er darf nicht im RAM unter einem ROM liegen.
- Der Ton-Datenblock hat das folgende Layout:
- Byte 0: Anzahl der Abschnitte in der Envelope.
- Bytes 1..3: Erster Abschnitt der Envelope.
- Bytes 4..6: Zweiter Abschnitt der Envelope.
- Bytes 7..9: Dritter Abschnitt der Envelope.
- Bytes 10..12: Vierter Abschnitt der Envelope.
- Bytes 13..15: Fünfter Abschnitt der Envelope.
- in der Envelope verwendete Abschnitte. Nicht verwendete Abschnitte müssen nicht eingerichtet werden. Eine Envelope, die keine Abschnitte verwendet, verändert den Ton nicht (d. h. keine Envelope-Bildung). Die Anzahl der zu verwendenden Abschnitte wird nicht überprüft; wenn eine Zahl außerhalb des Bereichs 0..5 übergeben wird, hat dies unvorhersehbare Auswirkungen. Dies sollte vermieden werden.
- Das oberste Bit, Bit 7, der Anzahl wird verwendet, um eine sich wiederholende Envelope anzugeben. Wenn dieses Bit gesetzt ist, wird nach dem Ende des letzten Abschnitts der Envelope wieder der erste verwendet.
- Jeder Abschnitt des Ton-Datenblocks ist wie folgt aufgebaut:
- Byte 0: Schrittzahl.
- Byte 1: Schrittgröße.
- Byte 2: Pausenzeit.
- Wenn die Schrittzahl im Bereich #00..#EF liegt, dann ist der Abschnitt ein relativer Abschnitt. Die Schrittgröße wird vorzeichenerweitert (Bit 7 wird auf die Bits 8..15 kopiert) und wird zur aktuellen Tonperiode addiert, und zwar so oft, wie durch die Schrittzahl angegeben. Nach jeder Addition wird eine Wartezeit von der Pausenzeit in 1/100 Sekunden eingehalten. Der Soundchip verwendet nur die unteren 12 Bits der Tonperiode, daher wird die gesamte Arithmetik modulo #1000 durchgeführt.
- Eine Schrittzahl von 0 bedeutet 1 Schritt, während eine Pausenzeit von 0 256 bedeutet
- 1/100 Sekunden.
- Wenn die Schrittzahl im Bereich #F0..#FF liegt, dann ist der Abschnitt ein absoluter Abschnitt. Die niederwertigsten vier Bits der Schrittzahl werden als das höchstwertige Byte der Tonperiode betrachtet und die Schrittgröße wird als das niederwertigste Byte betrachtet. Diese Tonperiode wird sofort gesetzt, gefolgt von einer Pause, deren Länge durch die Pausenzeit in 1/100 Sekunden festgelegt wird.
- Es gibt keinen Schutz gegen das Ändern einer Envelope, während sie verwendet wird. Dies könnte unvorhersehbare Auswirkungen haben und sollte vermieden werden.
- Wenn die Ton-Envelope vor dem Ende des Klangs endet (wie beim Einreihen des Klangs festgelegt), dann wird der letzte Ton gehalten. D. h. die Ton-Envelope beeinflusst nicht die Länge des Klangs.
🧪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.