WAVE

Aus C64-Wiki
Wechseln zu: Navigation, Suche
WAVE
Format: WAVE <stimme>, <bitmuster>
Parameter
stimme: Stimme (1..3)
bitmuster: (Muster aus 8 Nullen oder Einsen)
Einordnung
Typ: Anweisung
Kontext: Soundkontrolle
Aufgabe: Festlegen einer Wellenform für eine der drei Stimmen
Abkürzung: keine
Verwandte Befehle
VOL - ENVELOPE - MUSIC - PLAY


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort WAVE.

Typ: Anweisung 
Syntax: WAVE <stimme>, <bitmuster>

WAVE legt die Wellenform der zu spielenden Töne fest. Jede Stimme kann direkt angesprochen werden (erster Parameter), sodass die SID-Register $D404 (Stimme 1), $D40B (Stimme 2) und $D412 (Stimme 3) betroffen sind.

Das "Bitmuster" stellt Schalter für die oben genannten Register dar. Eine "1" aktiviert folgende SID-Features für die angesprochene Stimme:

Bit 7 : Rauschgenerator 
Bit 6 : Rechteck
Bit 5 : Sägezahn
Bit 4 : Dreieck
Bit 3 : Testbit
Bit 2 : Ringmodulation
Bit 1 : Sync (Stimme 1 mit 3, 2 mit 1 bzw. 3 mit 2)
Bit 0 : Steuerbit (immer 0)

Für das Setzen der Pulsbreite, die zum Erzeugen einer klingenden Rechteckschwingung (Bit 6) erforderlich ist, bietet Simons' Basic keinen Befehl, so dass man sich mit zwei POKEs behelfen muss:

POKE SOUND+2+(stimme-1)*7, lobyte: POKE SOUND+3+(stimme-1)*7, hibyte

Die Pulsbreite ist maximal 12 Bits breit (also lautet der Höchstwert für die Pulsbreite 4095).

Beachten: Von den Bits 4 bis 7 darf immer nur eines auf "1" stehen.

Die unteren vier Bits haben folgende Bedeutung:

Testbit: Wenn eine Schwingungsform gleichzeitig mit dem Rauschgenerator läuft, kann es vorkommen, 
  dass der Rauschgenerator aussetzt. Das Testbit aktiviert ihn auf jeden Fall. Sollte immer 0 sein.
Ringmodulation: Die Dreiecksschwingung von Stimme 1 wird durch ein Gemisch aus Stimme 1
  und 3 ersetzt (auch wenn Stimme 3 stumm ist). Entsprechendes gilt für die anderen Stimmen.
Synchronisation: Vermeidet Schwebungen, wenn zwei Stimmen parallel arbeiten.
Steuerbit: Kann immer 0 bleiben, da es vom Interpreter unbeeinflussbar selbst verwendet wird.

Wird kein Parameter eingegeben, so erscheint die Fehlermeldung ?SYNTAX ERROR. Eine falsche Stimmennummer (kleiner als 1 oder größer als 3) führt zu einem ?BAD MODE ERROR. Andere Zeichen als "0" oder "1" oder zu wenige Zeichen im Bitmuster erzeugen einen ?NOT BINARY CHAR ERROR.

Beispiel: 

100 VOL 15
110 ENVELOPE 1,1,8,10,10
120 WAVE 1, 00100000
130 MUSIC 150, "{clear}1c2{f2}"
140 PLAY 1
150 VOL 0

(spielt mit Stimme 1 den Sägezahn-Ton c2 als Viertelnote)

Ein komplettes Anwendungsbeispiel beim Simons-Basic-
Befehl MOB SET (Beipiel 2).