APPLICATIONSCREATION MUSICAL ★ PSG-PROGRAMMER (CPC AMSTRAD INTERNATIONAL) ★

PSG-Programmer (CPC Amstrad International)Applications Creation Musical
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Sound relativ und absolut

Keine Angst, es handelt sich hier nicht um die x-te »Einführung in die Soundprogrammierung für Anfänger«. Wir gehen davon aus, daß Sie sich schon mit der Programmierung von Klängen beschäftigt haben; insbesondere sollte Ihnen der SOUND-Befehl des Schneider-Basic vertraut sein. Im Folgenden wollen wir uns hauptsächlich mit jenen Details der Soundprogrammierung befassen, die im CPC-Handbuch nur versteckt angedeutet werden; teilweise sind sie dort auch schlicht falsch dargestellt oder werden gar nicht erst erwähnt. Das betrifft vor allem die Hüllkurven-Kommandos ENV und ENT.

ENT

Als erstes wollen wir ENT, den Befehl zur Definition einer Tonhüllkurve, unter die Lupe nehmen. Das Format ist bekannt:

ENT < Nummer > , < maximal 5 Veränderungsfolgen >

Der Parameter < Nummer > kann zwischen 1 und 15 liegen, es sind also bis zu 15 verschiedene Tonhüllkurven programmierbar. Wenn Sie keine < Veränderungsfolge > angeben (z.B.: ENT 3), wird die betreffende Tonhüllkurve gelöscht. Das Standardformat einer < Veränderungsfolge > sieht so aus:

< Schrittzahl >, < Schrittgröße >, < Pausenzeit >

Dabei gilt:

< Schrittzahl > : Wertebereich 0.. .239
< Schrittgröße >: Wertebereich-128... +127
< Pausenzeit > : Wertebereich 0.. .255

Die Abarbeitung einer Tonhüllkurve geschieht wie folgt: Zunächst wird die aktuelle Tonperiode um den Wert < Schrittgröße > vergrößert (bzw.vermindert, wenn < Schrittgröße > negativ ist). Der so entstandene Ton wird so viele Hundertstelsekundenlang gehalten, wie durch

< Pausenzeit > angegeben (eine < Pausenzeit > von 0 wird als 256 interpretiert). Dieser Vorgang wird so oft wiederholt, wie durch < Schrittzahl > definiert. Anschließend wird, falls vorhanden, die nächste <Veränderungsfolge > abgearbeitet usw. Um uns diesen Vorgang ganz klarzumachen, wollen wir ihn einmal durch ein Basic-Programm simulieren.
Allgemein sieht der Aufruf einer Tonhüllkurve so aus:

ENT nr, sz(1), sg(1), pz(1),..., sz(n), sg(n), pz(n)

SOUND kanal, grundperiode, dauer, lautstärke, 0, nr

(n bezeichnet hier die Anzahl der <Veränderungsfolgen > und liegt zwischen 1 und 5.) Das gleiche wird durch das folgende Programm bewirkt:

10 periode = grundperiode
20 FOR folge = 1 TO n
30 FOR schritt = 1 TO sz(folge)
40 periode = periode + sg(folge)
50 SOUND kanal, periode,pz(folge), lautstärke
60 NEXT schritt
70 NEXT folge

Beachten Sie dabei, daß die erste Veränderung der Tonperiode schon zu Beginn des erzeugten Tons stattfindet; insofern ist die Grafik im Sound-Kapitel des Handbuchs nicht ganz korrekt. Dazu ein Beispiel:

ENT 1, 4,-10,25
SOUND 1,150,100,15,0,1

bewirkt das gleiche wie die Befehlsfolge:

SOUND 1, 140, 25, 15
SOUND 1, 130, 25, 15
SOUND 1, 120, 25, 15
SOUND 1, 110, 25, 15

Sie hören vier aufsteigende Töne von je einer Viertelsekunde Länge. Die Dauer der Tonhüllkurve hat übrigens keinen Einfluß auf die Gesamtdauer des Tons. Geben Sie z.B.ein:

SOUND 1, 150, 50, 15, 0, 1

so hören Sie nur die ersten zwei Töne.

SOUND 1, 150, 200, 15, 0, 1

bewirkt wieder die Ausgabe von vier Tönen, wobei der letzte Ton diesmal jedoch eine Sekunde länger gehalten wird. Wenn Sie beim ENT-Kommando eine negative < Nummer> angeben, wird die Tonhüllkurve wiederholt — natürlich nur so lange, wie durch den dritten Parameter des SOUND-Befehls definiert. Beispiel:

ENT -1, 4,-10, 25
SOUND 1, 150, 300, 15, 0, 1

erzeugt zwölf verschiedene Töne. Die Wiederholungsfunktion eignet sich vorzüglich zur Programmierung von Soundeffekten:

ENT -1, 50,-1, 2, 50, 1, 2
SOUND 1, 200, 2000, 15, 0, 1

ergibt einen sirenenartigen, an-und abschwellenden Klang. Ein anderes Anwendungsgebiet ist die Erzeugung eines Vibratos, das den doch recht monotonen Rechteckklang des Soundchips etwas interessanter macht:

ENT -1, 1, 1, 5, 1,-1, 5

Falls Sie mit tiefen Tönen arbeiten, sollten Sie den Betrag von < Schrittgröße > entsprechend größer wählen.

Bisher haben wir uns mit der relativen Änderung der Tonperiode beschäftigt. Jedoch gibt es, wie anscheinend kaum jemand weiß, auch die Möglichkeit, den Ton absolut zu ändern. Hier sieht das Format der < Veränderungsfolge > so aus:

= < Tonperiode >,< Pausenzeit > mit:
< Tonperiode >: Wertebereich 0.. .4095
< Pausenzeit > : Wertebereich 0...2555

In diesem Format hat eine < Veränderungsfolge > also nur zwei Parameter; zur Unterscheidung von der Standardform muß vor dem ersten Parameter ein Gleichheitszeichen stehen. < Pausenzeit > hat dabei die gleiche Funktion wie im Normalformat, bezeichnet also die Pausenlänge in Hundertstel Sekunden.

< Tonperiode > steht für die absolute Tonhöhe, wie Sie es ja vom SOUND-Kommando her kennen. Beispiel:

ENT -1. =239,20, =213,20, =190,20, = 179,20
SOUND 1, 0, 30000, 15, 0, 1

spielt Ihnen fünf Minuten lang die ersten vier Noten der C-Dur-Tonleiter vor. (Wenn Ihnen das Gedudel auf die Nerven zu gehen beginnt, drücken Sie einmal auf die DEL-oder CLR-Taste; das erzeugt den bekannten CHR$(7)-Piepser, und der bewirkt nichts anderes als der Befehl SOUND 135, 90, 20, 11.) Selbstverständlich lassen sich beide Formate — relative und absolute Tonhöhenänderung — beliebig mischen, wobei die Gesamtzahl der< Veränderungsfolgen > natürlich Fünf nicht überschreiten darf.

ENV

Wenden wir uns nun der Lautstärkenhüllkurve zu. Der Befehl ENV ist formal mit dem ENT-Kommando fast identisch:

ENV < Nummer >, < maximal 5 Veränderungsfolgen >

Auch hier können bis zu 15 verschiedene Hüllkurven programmiert werden. Das Standardformat einer < Veränderungsfolge > sieht ebenfalls genauso aus:

< Schrittzahl > , < Schrittgröße > , < Pausenzeit >

mit:

< Schrittzahl > : Wertebereich 0... 127
< Schrittgröße > : Wertebereich -128... + 127
< Pausenzeit > : Wertebereich 0...255 Der einzige Unterschied zur Tonhüllkurve besteht darin, daß < Schrittzahl > den Wert 127 nicht überschreiten darf.
< Schrittgröße > bezeichnet hier natürlich nicht die Änderung der Tonhöhe, sondern den Betrag, um den sich die Lautstärke verändert. Es verblüfft vielleicht zunächst, daß < Schrittgröße > Werte zwischen -128 und +127 annehmen darf, da doch die Lautstärkeskala nur von 0 bis 15 reicht. Die Erklärung ist einfach: Wenn die aktuelle Lautstärke aus dem zulässigen Bereich herauswandert, wird sie mit 15 verUNDet und so wieder auf einen korrekten Wert gebracht. Wir wollen auch die Lautstärkenhüllkurve durch ein Basic-Programm simulieren. Das allgemeine Format für ihren Aufruf:

ENV nr, sz(1), sg(1), pz(1),..., sz(n), sg(n), pz(n)
SOUND kanal, periode, dauer, grund-

lautstärke, nr

Und als Basic-Programm:

10 lautstärke = grundlautst ärke
20 FOR folge = 1 TO n
30 FOR schritt = 1 TO sz(folge)
40 lautstärke = (lautstärke + sg(lolge)) AND 15
50 SOUND kanal, periode, pz(folge), lautstärke
60 NEXT schritt
70 NEXT folge

Betrachten wir jetzt ein einfaches Beispiel:

ENV 1, 15, 1, 10 SOUND 1,250, 150, 0, 1

Die Lautstärke wird, wie zu erwarten war, in 15 Schritten von 0 auf den Maximalwert hochgeregelt. Was passiert nun aber, wenn wir im SOUND-Kom-mando eine andere Grundlautstärke definieren? Geben Sie ein:

SOUND 1, 250, 150, 8, 1

Ergebnis: Die Lautstärke steigt zunächst von 9 auf 15, wird dann aber abrupt auf 0 gesetzt (denn 16 AND 15 ergibt 0) und klettert anschließend weiter bis zum Endwert 7. Um Verwirrungen zu vermeiden, empfiehlt es sich daher zumeist, die Grundlautstärke im SOUND-Kommando prinzipiell auf 0 zu setzen und jegliche Lautstärke nur über die Hüllkurve zuzugeben.

Auch die Lautstärkenhüllkurve hat im Normalfall keinen Einfluß auf die Dauer des Tons; diese wird durch den dritten Parameter des SOUND-Kommandos bestimmt. Falls die Tondauer kürzer ist als die Länge der Hüllkurve, wird die Hüllkurve nur zum Teil abgearbeitet:

SOUND 1, 250, 80,0, 1

regelt die Lautstärke bis auf 8 hinauf und bricht dann ab. Ist die Tondauer dagegen länger als die Hüllkurve, so wird der Ton mit dem zuletzt erreichten Lautstärkepegel fortgesetzt:

SOUND 1, 250, 400, 0, 1

Soweit also alles wie beim ENT-Kommando. Jedoch gibt es die Möglichkeit, den dritten Parameter des SOUND-Befehls auf 0 zu setzen:

SOUND 1,250, 0,0, 1

Jetzt wird die Tondauer allein durch die Länge der Hüllkurve bestimmt. Übrigens ist auch eine gelöschte Lautstärkenhüllkurve noch definiert; das Betriebssystem rechnet dann mit folgenden Default-Werten: < Schrittzahl > = 1, < Schrittgröße > =0, < Pausenzeit > = 200. Das können Sie ganz einfach überprüfen; geben Sie einmal ein:

ENV 1
SOUND 1, 250, 0, 15, 1

Der Ton erklingt genau zwei Sekunden lang. Auch für die Lautstärkenhüllkurve existiert eine Wiederholfunktion.

Dazu müssen wir im SOUND-Befehl für die Dauer einen negativen Wert ein-setzen:

ENV 1. 16,-1,2
SOUND 1, 250,-10, 0, 1

Die Hüllkurve wiederholt sich genau zehnmal. Diese Funktion ermöglicht es uns, den CPC auf einfache Weise in einen Drum-Computer zu verwandeln:

ENV 1, 16,-1, 2, 8,-4, 4, 16,-1,2, 4, -4,8
SOUND 1,0, -30000, 0, 1,0, 20

ergibt den bekannten DUM-DA-DA-DUM-DAH-Rhythmus. Zur Krönung des Ganzen können wir noch eine Tonhüllkurve definieren:

ENT -1, =1000, 32, =500, 32

Drücken Sie jetzt DEL oder CLR, um den Ton abzubrechen, und geben Sie dann ein:

SOUND 1, 0, -30000, 0, 1, 1, 20

Der Takt wird jetzt 30000mal wiederholt, das heißt, das Schlagzeug läuft genau 10 Stunden und 40 Minuten ohne Pause. Das dürfte wohl ausreichen, um auch Ihre längsten Kompositionen mit einer Rhythmusbegleitung zu versehen. Soviel zur relativen Lautstärkenänderung. Natürlich gibt es auch beim ENV-Befehl die Möglichkeit, die Lautstärke absolut zu definieren. Dazu müssen wir < Schrittzahl > auf den (an sich ja sinnlosen) Wert 0 setzen; < Schrittgröße > steht dann für den absoluten Lautstärkewert:

ENV 1, 0, 8. 50. 0, 3, 50, 0,15,50
SOUND 1, 250, 150, 0, 1

Der Ton erklingt zunächst mit mittlerer Lautstärke (8), wird dann auf 3 gesetzt und schließlich auf den Maximalpegel hochgeschaltet. Selbstverständlich können Sie auch beim ENV-Befehl relative und absolute < Veränderungsfolgen > beliebig mischen. Damit hätten wir alle Aspekte des Standardformats der < Veränderungsfolge > abgehandelt. Zusätzlich gibt es noch ein Format mit nur zwei Parametern; wie beim ENT-Befehl muß

vor dem ersten Parameter zur Unterscheidung ein Gleichheitszeichen gesetzt werden:

= < Hüllkurvenform > , < Veränderungsperiode >

Dabei gilt:

< Hüllkurvenform > : Wertebereich 0...15
< Veränderungsperiode > : Wertebereich 0...65535

Zur Erklärung dieses Formats müssen wir etwas weiter ausholen. Bisher haben wir uns ausschließlich mit softwaremäßig erzeugten Hüllkurven befaßt. Das Betriebssystem des CPC arbeitet die Hüllkurven per Interrupt ab und erzeugt Lautstärkeveränderungen durch direkte Manipulation der Lautstärkeregister des Soundchips. Daneben verfügt der Soundchip aber noch über einen eigenen Hüllkurvengenerator, der normalerweise nicht benutzt wird. Die Zwei-Parameter-Formder < Verände- rungsfolge > erlaubt uns nun den direkten Zugriff auf die Hardwarehüllkurven des PSG (PSG = Programmable Sound Generator, also der Soundchip)

Der Parameter < Hüllkurvenform > bestimmt die gewünschte Hardwarehüllkurve. Diese sind von 0 bis 15 durchnumeriert; allerdings sind die Hüllkurven 0 bis 3 mit Nummer 9 sowie 4 bis 7 mit Nummer 15 identisch, so daß uns de facto nur acht verschiedene Hüllkurven zur Verfügung stehen. Mit Worten lassen sich diese nur unzulänglich beschreiben, wir haben sie daher in einer Tabelle abgebildet (Abb. 1).

Wie Sie sehen, setzen sich die Hardwarehüllkurven des PSG aus verschiedenen Kombinationen von steigenden und fallenden Sägezahnflanken zusammen. Hüllkurve 8 beispielsweise erzeugt einen Ton, der von der Maximallautstärke auf 0 absinkt, dann abrupt wieder auf den Maximalpegel gesetzt wird, wieder leiser wird usw. Hüllkurve 13 dagegen steigt von 0 auf den Maximal- wert und bleibt für den Rest des Tons auf der höchsten Lautstärke. Beachten Sie, daß Lautstärkeveränderungen per Hardwarehüllkurve immer zwischen den beiden Extremwerten der Lautstärkeskala ablaufen (also von 0 nach 15 oder von 15 nach 0); auch die im SOUND-Befehl angegebene Grundlautstärke hat hier keinerlei Einfluß auf den Tonverlauf.

Denken Sie außerdem daran, daß der PSG zwar drei Tongeneratoren besitzt, aber nur einen Hüllkurvengenerator. Wenn Sie also beispielsweise auf Kanal A einen Ton mit der Hardwarehüllkurve 8 ausgeben, können Sie nicht gleichzeitig auf Kanal B einen Ton mit Hüllkurve 14 spielen.

Wir kommen jetzt zum zweiten Parameter. Die < Periodendauer > bestimmt die Flankenlänge der Hardwarehüllkurve. Leider hält sich der PSG nicht an den üblichen Hundertstelsekunden-Takt der CPC-Soundbefehle; eine Einheit steht hier für 256 Mikrosekunden (1 Mikrosekunde = 1 Millionstelsekunde). Angenommen, wir wollen die Hüllkurve 10 mit einer Flankenlänge von einer Sekunde aufrufen. 1 dividiert durch 0,000256 ergibt rund 3906. Geben wir also ein:

ENV 1, =10,3906 SOUND 1, 250, 400, 0, 1

Selbstverständlich sind auch hier bis zu fünf < Veränderungsfolgen > möglich. Ein Problem besteht allerdings darin, daß wir im Zwei-Parameter-Format keine Pausenzeit angeben können; diese müssen wir daher durch eine weitere

< Veränderungsfolge > im Standardformat definieren, wobei die < Schrittgröße > hier natürlich 0 betragen muß (andemfalls würde das Betriebssystem die Hardwarehüllkurve sofort abschalten). Beispiel:

ENV 1. =8.1953. 1,0.150, =12,1953
SOUND 1,250, 0,0, 1

Der Ton erklingt eineinhalb Sekunden lang mit Hüllkurve 8, anschließend hören Sie für 256 Hundertstelsekunden die Hüllkurve 12 (wenn eine ENV-Anwei-sung mit einer < Verän- derungsfolge > im Zwei-Parameter-Format abschließt, nimmt das Betriebssystem eine Default-Pausenzeit von 256 an).

PSG

In der Beschreibung des zweiten Formats der ENV-< Veränderungsfolge > sind wir bereits Ansatzweise auf die direkte Programmierung der Hardware eingegangen. Wir wollen das Thema jetzt vertiefen. Der PSG AY-3-8912 verfügt über fünfzehn dem Benutzer zugängliche Datenregister, die wir als R0 bis R14 bezeichnen wollen. R14 fungiert allerdings als Datenspeicher für den In/Out-Port des Soundchips und hat keinen Einfluß auf die Klangerzeugung (im CPC wird der I/O-Port für die Abfrage von Tastatur und Joystick eingesetzt). Hier die Funktion der restlichen vierzehn Register:

R0/R1: Der Inhalt dieser beiden Register bestimmt die Periode des Tons von Kanal A. Die Tonperiode ist ein 12-Bit-Wert zwischen 0 und 4095 und entspricht dem zweiten Parameter des SOUND-Kommandos; dabei steht in R0 das Low-Byte, in RI dagegen die obersten vier Bit des Wertes. Es gilt also:

R0 = periode AND 255
R1 = INT (periode / 256)

Es sei noch daraufhingewiesen, daß die Notentabelle im Anhang des CPC-Hand-buchs falsch ist. Anscheinend war ursprünglich geplant, den Soundchip mit einer Taktfrequenz von 2 MHz zu versehen; tatsächlich ist der PSG aber nur mit 1 MHz getaktet. Die Formel zur Berechnung der Tonperiode muß daher lauten: periode = ROUND (62500 / frequenz)

R2/R3: Funktion wie R0/R1, aber für Kanal B.
R4/R5: Funktion wie R0/R1, aber für Kanal C.
R6: Dieses Register legt die Rauschperiode fest. Die Rauschperiode kann Werte zwischen 0 und 31 annehmen und entspricht dem siebten Parameter des SOUND-Kommandos. Dabei gilt: je höher die Rauschperiode, desto tiefer die

Durchschnittsfrequenz des erzeugten Rauschens.

R7: Dies ist das Freischaltregister. Die einzelnen Bit kontrollienen:

Bit 0: Ton Kanal A; 1 =aus, 0=an Bit 1: Ton Kanal B; 1 =aus, 0 = an Bit 2: Ton Kanal C; 1 =aus, 0=an Bit 3: Rauschen Kanal A; 1 =aus, 0=an Bit 4: Rauschen Kanal B; 1 = aus, 0=an Bit 5: Rauschen Kanal C; l=aus,0=an Bit 6: Datenrichtung des I/O-Ports:

1 =out, 0 = in

Um also einen Ton auszugeben, müssen Sie zuerst das entsprechende Bit auf 0 setzen. Achten Sie darauf, daß Bit 6 immer 0 ist; andernfalls würde der CPC auf keinen Tastendruck mehr reagieren, und Ihnen bliebe nichts anderes übrig, als den Computer auszuschalten.

R8: Die unteren vier Bit dieses Registers bestimmen die Lautstärke von Kanal A (Wertebereich 0 bis 15, entspricht dem vierten Parameter des SOUND-Befehls). Das fünfte Bit hat eine Sonderfunktion: Falls es gesetzt ist, werden die unteren vier Bit ignoriert und jegliche Lautstärke nur über die Hüllkurve geregelt (siehe R11 bis R13).

R9: Funktion wie R8, aber für Kanal B. RIO: Funktion wie R8, aber für Kanal C.
R11/R12: Durch diese beiden Register wird die Periodendauer der Hüllkurve festgelegt; dabei steht in R11 das Low-Byte und in R12 das High-Byte:

R11 = UNT (periodendauer) AND 255
R12 = INT (periodendauer / 256)

Die Periodendauer läßt sich nach folgender Formel berechnen: periodendauer = ROUND (Sekunden * 3906.25)

R13: Dieses Register bestimmt die Hüllkurvenform; dabei sind Werte zwischen 0 und 15 möglich (siehe Abb. 1).

Zur schnellen Referenz haben wir die Registerbelegung noch einmal in einer Tabelle zusammengefaßt (Abb. 2).

Jetzt stellt sich natürlich die Frage: Wie bekommen wir unsere Daten in die PSG-Register hinein? Von Basic aus geht es schon mal nicht; wir müssen uns also mit Maschinensprache behelfen. Leider ist der PSG nicht direkt an den Prozessor angeschlossen, so daß wir ihn auf dem Umweg über die 8255-PIO programmieren müssen, was allerdings ein ziemlich kompliziertes Datengeschiebe notwendig macht. Aber zum Glück gibt es im ROM die Routine MC SOUND REGISTER, die über den Vektor &BD34 aufgerufen
wird; wir müssen ihr lediglich im Akku die Registernummer und in C die zu schreibenden Daten übergeben. Dazu genügt das folgende kleine Assemblerprogramm:

LD A,(IX + 2); Registemummer in A
LD C,E ; Datenbyte ln C
CALL &BD34 ; MC SOUND REGISTER
RET; fertig

Und hier das gleiche als Basiclader:

10 DATA DD, 7E, 02, 4B, CD, 34, BD, C9
20 INPUT "Startadresse"; adresse
30 IF adresse < HIMEM THEN MEMORY HIMEM + 1
40 FOR i = adresse TO adresse + 7
50 READ byte$
60 POKE i,VAL("&" + byte$)
70 NEXT i

Der Aufruf erfolgt mit:

CALL < Adresse >, < Registernummer >, < Datenwert >

(Falls es Sie interessiert: Unser CALL entspricht genau dem SOUND-Befehl des MSX-Basic.) Zur Verdeutlichung ein kleines Beispiel. Wir wollen auf Kanal B den Kammerton a' mit der Hüllkurve Nummer 14 ausgeben; die Flankenlänge der Hüllkurve soll eine Viertelsekunde betragen. Die international ge-

normte Frequenz des Kammertons beträgt 440 Hz; nach unserer Formel periode = ROUND (62500 / frequenz) ergibt sich eine Tonperiode von 142. Wir müssen also R2 mit 142 und R3 mit 0 laden:

CALL adresse,2,142
CALL adresse,3,0

Jetzt ist R13 mit der Hüllkurvennummer zu laden:

CALL adresse, 13,14

Die Flankenlänge soll 0,25 Sekunden betragen; die Formel zur Berechnung der Periodendauer lautet:

periodendauer = ROUND (Sekunden * 3906.25)

Es ergibt sich eine Periodendauer von 977 oder hexadezimal &3D1. Das Low-Byte müssen wir in R11, das High-Byte in R12 eintragen:

CALL adresse , 11 , &D1
CALL adresse , 12 , &3

Nun müssen wir dem PSG mitteilen, daß die Lautstärke von Kanal B durch die Hüllkurve gesteuert wird; dazu ist Bit 4 von R9 zu setzen:

CALL adresse,9,&X10000

Um den Ton erklingen zu lassen, muß nur noch das zuständige Bit im Freischaltregister auf 0 gesetzt werden:

CALL adresse,7,&X111101


Das war's. Um den PSG wieder auszuschalten, geben Sie ein:

CALL adresse,7,&cX111111

DER PSG-PROGRAMMER

Wie Sie sehen, gestaltet sich die Direktprogrammierung des Soundchips doch recht umständlich. Um Ihnen ein komfortables Tool zur Klangentwicklung in die Hand zu geben, haben wir daher den PSG-PROGRAMMER geschrieben (siehe nachfolgendes Listing). Nach dem Starten des Programms befinden Sie sich im Hauptmenü (rechtes unteres Bid-schirmfenster). Vier Menüpunkte stehen zur Auswahl:

  1. eingeben: Soundparameter eingeben.
  2. ausdrucken: Die aktuelle Registerbelegung des PSG wird auf Ihren Drucker ausgegeben.
  3. rücksetzen: Der Psg wird vollständig auf seine Standardwerte zurückgesetzt, also quasi abgeschaltet. Sämtliche bisher eingegebenen Tonwerte gehen verloren.
  4. Tonausgabe abbrechen: Der Ton wird abgeschaltet. Im Gegensatz zu bleiben aber die eingegebenen Werte zur weiteren Bearbeitung erhalten.

Zum Menüpunkt < 1 > sind noch nähere Erläuterungen erforderlich. Wenn Sie diese Funktion gewählt haben, erscheint ein blinkender Cursor in der linken Bild-
schirmhälfte. Steuern Sie den Cursor mit den Pfeiltasten zum gewünschten Parameter und geben Sie dann den Wert ein. Alle Eingaben müssen hexadezimal erfolgen; für das Ein-/Ausschaltfeld gilt grundsätzlich: 0 = aus, l=an.

Durch Drücken von H gelangen Sie ins Hilfsmenü, wo Sie zwischen vier Optionen wählen können:

  1. Umrechnung einer Dezimalzahl in den entsprechenden Hexadezimalwert.
  2. Umrechnung Frequenz in Tonperiode.
  3. Umrechnung eines Notenwerts in die entsprechende Tonperiode. Dabei ist der der Note entsprechende Buchstabe einzugeben (C, D, E, F, G, A, B oder H); Halbtöne sind durch ein nachgestelltes » # « oder »b« zu kennzeichnen. Beispiele: A, C#, Eb. Außerdem ist die Oktave anzugeben; dabei steht 0 für die mittlere Oktave (sog. eingestrichene Oktave).
  4. Umrechnung der Flankenlänge der Hüllkurve in die entsprechende Periodendauer. Die Flankenlänge ist in Sekunden einzugeben; dabei sind natürlich auch gebrochene Werte wie 0.75 erlaubt. Durch Drücken der ENTER-Taste beenden Sie die Eingabe. Der PSG-PROGRAMMER errechnet aus den eingegebenen Werten die Daten für den Soundchip und gibt den Ton aus. Anschließend gelangen Sie ins Hauptmenü zurück.

(G.Cebulla), CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1987
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL-SONDERHEFT
★ AUTHOR: G.CEBULLA
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» PSG-Programmer    (CPC  Amstrad  International-Sonderheft  5)    GERMANDATE: 2024-03-04
DL: 20
TYPE: ZIP
SiZE: 7Ko
NOTE: 40 tracks
.DSK: √

» PSG-Programmer    (CPC  Amstrad  International-Sonderheft  5)    LISTING    GERMANDATE: 2024-03-03
DL: 22
TYPE: PDF
SiZE: 1352Ko
NOTE: Supplied by archive.org ; 3 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Terminal-programm (Schneider Aktiv)
» Applications » Terminalprogram
» Applications » PLATOTerm
» Applications » CPC Term
» Applications » CPC-Termy
» Applications » Terminal-Star
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 348 millisecondes et consultée 96 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.