Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Der Sound Manager

Frequenz-Hüllkurven

Neben den 16 Software-Volumenhüllkurven gibt es auch noch 16, fast völlig entsprechend aufgebaute Der Sound Manager: Frequenz-Hüllkurven
BCBF: SOUND TONE ENVELOPE: Der Parameterblock der Frequenz-Hüllkurve:
Frequenz-Hüllkurven
.

Die nicht veränderliche Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve 0, die von Einleitung: BASIC
Anhang: Basic
Basic
auch immer als Default angenommen wird, erzeugt einen Ton konstanter Frequenz.

Bei den 15 selbst definierbaren Der Sound Manager: Frequenz-Hüllkurven
BCBF: SOUND TONE ENVELOPE: Der Parameterblock der Frequenz-Hüllkurve:
Frequenz-Hüllkurven
kann man wieder insgesamt 5 Abschnitte definieren, für die man jeweils Schrittzahl, Schritthöhe und Schrittdauer angeben muss.

Die Programmierung dieser Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurven geschieht dabei in Maschinensprache wieder auf fast identische Weise:

+------------------------------------------------------+
!        Basic und Maschinencode: ParameterParameter der Tonperioden-Hüllkurven          !
+------------------------------------------------------+
!                                                      !
!   Einleitung: BASIC
Anhang: Basic
BASIC
: ENT (-)nummer, SZ1,SH1,SL1, ... SZ5,SH5,SL5 ! ! MCode: Vektor &SOUND MANAGER: BCBF: SOUND TONE ENVELOPEBCBF: Operationen: BD5B / 349A / 349A: FLO SUBA=Nummer HL -> Datablock ! ! ! !HL -> DEFB ANZ = Anzahl Hüllkurvenabschnitten ! ! 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 = 1 --> Wiederholend ! ! DEFB SZ1 \ ! ! DEFB SH1 > Basic und Maschinencode: ParameterParameter des ersten Abschnittes ! ! DEFB SL1 / ! ! ... ... ! ! DEFB SZ5 = Schrittzahl ! ! DEFB SH5 = Schritthöhe (Änderung d. P.Len.) ! ! DEFB SL5 = Schrittlänge (Dauer) ! +------------------------------------------------------+

Für die Basic und Maschinencode: ParameterParameter der einzelnen Abschnitte gelten wieder ähnliche Grenzen:

  - Schrittzahl:      0 ...  239 (0 entspricht 1)
  - Schrittweite   -128 ... +127
  - Schrittlänge:    0 ...  255 (0 entspricht wieder 256)

Das ganze funktioniert wie beim ENV-Kommando. Nur dass sich die Änderungen jetzt auf die Der Sound Manager: PeriodenlängePeriodenlänge, also die Frequenz der ausgegebenen Note beziehen.

Ist, bei der Programmierung in Maschinensprache, im ersten Datentypen: Bytes
Datenbreite: Bytes
Byte
(= Anzahl) das siebte 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
gesetzt, so wird damit eine Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve definiert, die sich bei Bedarf beliebig oft wiederholen kann. Ist die Der Sound Manager: Frequenz-Hüllkurven
BCBF: SOUND TONE ENVELOPE: Der Parameterblock der Frequenz-Hüllkurve:
Frequenz-Hüllkurve
fertig abgespielt, bevor ein Ton komplett abgespielt ist, so wird sie von vorne wiederholt. In Einleitung: BASIC
Anhang: Basic
Basic
wird das mit einer negativen Hüllkurven-Nummer festgelegt:

ENT -5, ....

Ist dieses 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
nicht gesetzt, so wird nach Ablauf der Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve die Frequenz des Tones nicht mehr geändert.

Ungünstig, aber ohne unverhältnismäßig hohem Aufwand nicht zu umgehen, ist dabei, dass die Änderung der Der Sound Manager: PeriodenlängePeriodenlänge linear ist, während die einzelnen Noten einer Periodenlängen der Noten aus 9 Oktaven: Oktave -4
Periodenlängen der Noten aus 9 Oktaven: Oktave -3
Periodenlängen der Noten aus 9 Oktaven: Oktave -2
Periodenlängen der Noten aus 9 Oktaven: Oktave -1
Periodenlängen der Noten aus 9 Oktaven: Oktave +0
Periodenlängen der Noten aus 9 Oktaven: Oktave +1
Periodenlängen der Noten aus 9 Oktaven: Oktave +2
Periodenlängen der Noten aus 9 Oktaven: Oktave +3
Periodenlängen der Noten aus 9 Oktaven: Oktave +4
Oktave
in einem logarithmischen Raster aufeinander folgen.

Will man ein Vibrato programmieren, so muss man praktisch für alle 3 bis 4 Halbtoene eine neue Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve definieren, in denen die Änderung der Der Sound Manager: PeriodenlängePeriodenlänge mit steigender Frequenz immer kleiner werden.

Ist zum Beispiel bei der Grund-Periodenlänge 568 (110 Hz = Operationen: BD5B / 349A / 349A: FLO SUBA'') ein Ausschlag von 8 Einheiten gerade wahrnehmbar (Abstand zum nächsten Halbton ist hier etwa 33, also das vierfache), so bewegt sich das selbe 'Vibrato' drei Periodenlängen der Noten aus 9 Oktaven: Oktave -4
Periodenlängen der Noten aus 9 Oktaven: Oktave -3
Periodenlängen der Noten aus 9 Oktaven: Oktave -2
Periodenlängen der Noten aus 9 Oktaven: Oktave -1
Periodenlängen der Noten aus 9 Oktaven: Oktave +0
Periodenlängen der Noten aus 9 Oktaven: Oktave +1
Periodenlängen der Noten aus 9 Oktaven: Oktave +2
Periodenlängen der Noten aus 9 Oktaven: Oktave +3
Periodenlängen der Noten aus 9 Oktaven: Oktave +4
Oktaven
höher bei 880 Hz = Operationen: BD5B / 349A / 349A: FLO SUBa' bereits über +/- zwei Halbtoene! Die Der Sound Manager: PeriodenlängePeriodenlänge dieses Operationen: BD5B / 349A / 349A: FLO SUBa's beträgt 71, der Abstand zum nächsten Halbton nur noch etwa 4 Einheiten! (Vergleiche die Tabelle im AnhangAnhang.)

Aehnlich wie bei der Amplitude kann man auch bei Tonperioden-Hüllkurven in einem Abschnitt die Tonperioden-Länge auf einen Adressierungsarten der Z80: Absolutabsoluten Wert neu festsetzen. Diese Möglichkeit ist im Basic-Handbuch weder erwähnt noch beschrieben, obwohl es auch hier möglich ist! Der Syntax ist dabei der Definition einer Hardware-Volumenhüllkurve ähnlich:

ENT 5,  =568,10, ...

Auch hier enthält der Abschnitt nur noch zwei statt drei Basic und Maschinencode: ParameterParameter. Der erste gibt die neue Tonperiodenlänge an und der zweite bestimmt die Pausenlänge nach dieser Änderung. Da auch für jedes ENT-Treppchen zuerst die Änderung durchgeführt und erst danach gewartet wird, kann man, wenn man bereits im ersten Abschnitt eine Adressierungsarten der Z80: Absolutabsolute Periode programmiert, die Angabe im Sound-Statement vollkommen unterdrücken.

In Maschinensprache sieht der Syntax ein wenig anders aus. Hier ist die Adressierungsarten der Z80: Absolutabsolute Festlegung daran erkennbar, dass im ersten Datentypen: Bytes
Datenbreite: Bytes
Byte
des Abschnitts (normalerweise Schrittzahl) die obersten 4 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
gesetzt sind. Damit ergibt sich für dieses Datentypen: Bytes
Datenbreite: Bytes
Byte
ein Wert, der größer oder gleich &Der Zeichensatz des Schneider CPC: &F0 = 240F0 = 240 ist. Alle Werte darunter (0 bis &EF = 239) zeigen, dass ein Adressierungsarten der Z80: Relativrelativer Abschnitt folgt. Alle Werte ab &Der Zeichensatz des Schneider CPC: &F0 = 240F0 zeigen, dass eine Adressierungsarten der Z80: Absolutabsolute Festlegung der Frequenz erfolgen soll.

Hierbei werden dann die ersten beiden Datentypen: Bytes
Datenbreite: Bytes
Bytes
zu einem Datenbreite: WordsWord zusammengefasst, das die neue Der Sound Manager: PeriodenlängePeriodenlänge darstellt. Im ersten Datentypen: Bytes
Datenbreite: Bytes
Byte
werden die vier obersten 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
ausmaskiert, und der Die ICs im Überblick: Der PSG AY-3-8912
Die Anschlussbelegungen der wichtigsten ICs im CPC: Der PSG AY-3-8912
PSG
mit dem so erhaltenen Wert programmiert. Da die Der Sound Manager: PeriodenlängePeriodenlänge beim Die ICs im Überblick: Der PSG AY-3-8912
Die Anschlussbelegungen der wichtigsten ICs im CPC: Der PSG AY-3-8912
AY-3-8912
nur mit 12 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
genau angegeben werden kann, sind die 4 obersten 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
eh' bedeutungslos.

Das dritte Datentypen: Bytes
Datenbreite: Bytes
Byte
stellt dann wieder, wie gewöhnlich, die Pausenlänge dar, die nach dieser Einstellung abgewartet werden muss.

Vor einer gemeinen Falle seien hier aber die Assembler-Programmierer gewarnt: Das erste Datentypen: Bytes
Datenbreite: Bytes
Byte
der Der Sound Manager: PeriodenlängePeriodenlänge ist hier das höherwertige Datentypen: Bytes
Datenbreite: Bytes
Byte
! Hier musste vom normalen Die CPU Z80: Byte-SexByte-Sex der Z80-CPU abgewichen werden. Die beiden folgenden Beispiel zeigen einen falschen und einen korrekten Abschnitt für BCAA: SOUND QUEUE: Der Parameterblock:den Parameterblock:

Einstellung einer absoluten Periodenlänge (=APL) in Assembler:
   ------------------------------------------------------------------------
   falsch:  DEFW &F000 + APL     richtig:  DEFB APL\256 OR &Der Zeichensatz des Schneider CPC: &F0 = 240F0 ; MSB von APL
            DEFB PAUSE                     DEFB APL AND &FF    ; LSB von APL
                                           DEFB PAUSE
   ------------------------------------------------------------------------

Viele Assembler stellen für die benötigten Verknüpfungen spezielle Kommandos bereit. Leider gibt es hier keinen einheitlichen Standard. Für das Beispiel wurde deshalb der Syntax von Einleitung: BASIC
Anhang: Basic
Basic
angenommen.

Valid HTML   Valid CSS