APPLICATIONSDIVERS ★ Interrupt Gesteuerte Musik ★

Interrupt Gesteuerte Musik (CPC Amstrad International)Applications Divers
★ 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 ★ 

In Basic werden Töne mit Interrupts, die jede 1/50 Sekunde aufgerufen werden, programmiert. Allerdings gibt es in den Tonwarteschlangen nur Platz für fünf Töne pro Kanal. Sollen mehr als fünf Töne erzeugt werden, dann wartet der Basic-Interpreter in der entsprechenden Zeile, bis wieder Platz frei ist Will man dies umgehen, dann muß man ein Programm haben, das automatisch den nächsten Ton in die Register des Tongenerators schreibt und dessen Länge beachtet. In Basic würde dies mit den EVERY- oder ON SQ GOSUB-Funktionen zu lange dauern, deshalb muß das Steuerprogramm in Maschinensprache geschrieben sein.

Der Betriebssystemkern (Kernel) durchläuft fünfzigmal in der Sekunde (bei jedem Bildaufbau) eine Liste von Ereignissen, die jedesmal aufgerufen werden müssen. Mit drei solchen Ereignissen, für jeden Tonkanal eines, wird die interruptgesteuerte Musik realisiert. Man könnte alle drei Kanäle mit einem einzigen Interrupt steuern, nur gäbe es dann nicht die Möglichkeit, einzelne Kanäle aus-bzw. einzuschalten.

Eine Zählroutine zieht vom Zähler bei jedem Aufruf 1 ab. Ist der Zähler gleich 0, dann wird der Tongenerator (PSG) mit dem nächsten Ton versorgt. Ist bei der Tonhöhe das 16. Bit gesetzt (z.B. 32768), dann wird der Tontabellenzeiger wieder auf den Ausgangswert gesetzt und die Tontabelle wieder von vorne durchgearbeitet. Ist das 15. Bit gesetzt (z.B. 16384), dann wird der Interrupt für den entsprechenden Kanal gelöscht und das Ereignis nicht mehr aufgerufen. Bei der Tonhöhe werden nur die unteren zwölf Bits beachtet, eine Prüfung, ob das 13. oder 14. Bit gesetzt ist, findet nicht statt

Folgendes sollte beachtet werden:

  • Beim Einrichten einer Tontabelle (Reihenfolge: Tonhöhe, Tonlänge) muß beachtet werden, daß zur gleichen Zeit keine Interruptroutine auf den entsprechenden Speicherbereich zugreifen darf, weil dadurch das Steuerprogramm eventuell durcheinander gerät. (Vorher mit OFF abschalten!) -Zum POKEn der 16-Bit-Werte steht ein RSX-Befehl DOKE zur Verfügung.
  • Beim Abschalten eines Tonkanals wird der jeweils letzte Ton beibehalten. Er kann gelöscht werden, indem man die Lautstärke mit dem VOL-Befehl auf Null setzt
  • Bei der Basic-Programmierung (z.B. Zeileneingabe) oder bei der Benutzung der Basic-Soundbefehle werden die Interrupt-Töne zerstört ( auch bei PRINT CHR$(7)).
  • Ein mit OFF abgeschalteter Interrupt kann mit ON wieder aktiviert werden, indem man hier keine Adresse angibt. Wurde die Lautstärke oder sonst ein maßgebliches Register zerstört, dann muß es vorher wieder auf den richtigen Wert gebracht werden. War vorher kein Interrupt vorhanden, oder wurde der Interruptblock verändert, so kann dies unvorhersehbare Folgen haben.
  • Damit ein Ton erklingen kann, muß die Lautstärke des Kanals mindestens 1, das Register Nr. 7 richtig geladen und eine Tontabelle vorhanden sein.
  • Die Tonlänge wird in 1/50 Sekunden angegeben, die Tonhöhe wie im Handbuch in Anhang 7 (Seite 1 ff.) beschrieben.

Für die Programmierung stehen RSX-Befehle zur Verfügung: OFF

Abschalten aller drei Interrupts
|OFF,A
Abschalten des Interrupts für Kanal A
|OFF,B
Abschalten des Interrupts für Kanal B
|OFF,C
Abschalten des Interrupts für Kanal C
|ON,A, adresse
Einschalten des Interrupts für Kanal A
|ON.B, adresse
Einschalten des Interrupts für Kanal B
|ON.C, adresse
Einschalten des Interrupts für Kanal
|VOL,A, lautstarke
Lautstärke für Kanal A setzen
|VOL,B, lautstarke
Lautstärke für Kanal B setzen
|VOL,C, lautstarke
Lautstärke für Kanal C setzen
|PSG, register, 8-bit-wert
Register des Tongenerators beschreiben
|DOKE, adresse, 16-bit-wert
16-Bit-Wert poken (Intel-Format) Der Wert des PSG-Registers darf sich zwischen 0 und 13 bewegen, der für die Lautstärke zwischen 0 und 16. Ist die Lautstärke auf 16 gesetzt dann bestimmt der Hüllkurvengenerator die Lautstärke des Tones. Der Hüllkurvengenerator kann mit drei Registern des Tongenerators beeinflußt werden:

11 Feineinstellung Hüllkurvenperiode 0 - 255
12 Grobeinstellung Hüllkurvenperiode 0 - 255
13 Hüllkurvenform (8 Verschiedene) 0-15 (siehe Abb. 1)


AY-3-8912 Huellkurvenformen

Register Nr. 7:

Das Register Nr. 7 steuert das Sperren von Tönen oder Rauschen auf den einzelnen Kanälen. Ist ein Bit gesetzt, dann wird die entsprechende Funktion gesperrt sonst zugelassen. Bit 6 und 7 sind für die Steuerung der I/O-Ports des PSG zuständig. Sie sind für die Soundprogrammierung uninteressant und werden deshalb auf Null gesetzt.
Bit 76543210
Kanal 00CBACBA

Die Bits 0-2 steuern die Töne, die Bits 3 - 5 das Rauschen.

Der Assembler-Quellcode befindet sich aus technischen Gründen auf der zugehörigen CPC-Databox.

Einsprung-Referenz:

Für die Anpassung des Programms an CPC 664 und CPC 6128 hier die Einsprünge in die Firmware und ins Basic-ROM:

  • B900 KL UROM ENABLE oberes ROM öffnen
  • BCD1 KL LOG EXT RSX einbinden
  • BCD7 KL NEW FRAME FLY neuen Frame Fly Interrupt initialisieren und einbinden
  • BCDD KL DEL FRAME FLY Frame Fly Interrupt löschen
  • BD34 MC SOUND REGISTER Sound-Register laden
  • CA94 BAS ERROR : Basic-Fehlermeldung ausgeben

Hermann Röscheisen, CPCAI 8608

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1990
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1986
★ AUTHOR: Hermann Röscheisen
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Interrupt  Mastered  Music    (CPC  Amstrad  International)    GERMANDATE: 2012-12-27
DL: 270
TYPE: ZIP
SiZE: 8Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Audio - Speech - Swift Software
» Applications » MIDI Recorder (CPC Amstrad International)
» Applications » Sound Digitiser (The Amstrad User)
» Applications » DK'Tronics Speech Synthesizer Software
» Applications » Amdrum
» Applications » Dazzler
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 220 millisecondes et consultée 1692 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.