SID: Erster ‚Piepser‚

weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

CBM prg Studio
Mäuschen mach mal piep

Nachdem wir nun einen Blick auf die Register geworfen haben, wollen wir dem C64 mal die ersten Geräusche entlocken. Prinzipiell haben wir bei ‚Puzzle 010‚ und ‚Landung 009‚ schon mal etwas Sound verwendet, nun wollen wir dies aber mal genauer untersuchen und beginnen daher wieder ganz simpel.

 

Piepen, Fiepen, Ziepen und Rauschen
Ich habe zunächst damit begonnen und ein Include mit SID-Konstanten angelegt…

Dieses habe ich unter dem Namen SID_const.asm gespeichert.

Jetzt wollen wir mal die 1. Stimme des SID aktivieren.

Wir fangen damit an, unsere Konstanten einzubinden und den BASIC-Start festzulegen. Danach setzen wir zur Sicherheit für unsere Tests sämtliche SID-Register, die sich beschreiben lassen, auf 0, damit wir immer die selben Voraussetzungen haben.

Wie ihr seht, verwenden wir einfach eine Schleife, die von 24 bis einschließlich 0 herunterzählt und benutzen als Basisadresse die Konstante SID_BASEADDR.

Jetzt füllen wir die benötigten Register, um einen Ton zu erzeugen. Nehmt die folgenden Abschnitte bitte erstmal so hin, die genaue Erklärung der einzelnen Register werden wir uns noch im Detail erarbeiten, sobald unser Testprogramm läuft.

Zunächst setzen wir unsere Frequenz, in den betroffenen Registern, auf 1000. Da wir den 16-BIT-Wert auf zwei Register verteilen müssen, landet im MSB $03 und im LSB $E8 dies entspricht $03E8 also 1000.

Dann setzen wir Attack, Decay, Sustain und Release, sowie die Gesamtlautstärke. Auch hier folgt die genaue Erklärung etwas später.

Zum Schluß müssen wir noch eine Wellenform festlegen, wir nehmen hier den Sägezahn. Die Tonwiedergabe beginnt übrigens, sobald wir BIT-0 im Wellenform-Register der jeweiligen Stimme (hier  SID_V1_WAVE) auf 1 setzen. Daher empfielt es sich, dieses Register erst ganz zum Schluß zu füllen. Abschließend kehren wir ins BASIC zurück.

Startet nun einfach mal das Programm. Ihr solltet dann einen Ton hören. Obwohl unser Programm bereits beendet ist, wir sind ja schon wieder im BASIC, bleibt der Ton weiterhin aktiv. Wir müssen also selbst dafür sorgen, dass der Ton auch wieder aufhört.

Fügt direkt vor dem rts einmal die beiden folgenden Zeilen ein.

Hiermit löschen wir das BIT-0 (OK, wir löschen das gesamte Register) im Wellenform-Register der 1. Stimme wieder.

Ein erneuter Start bringt zwar Linderung für unsere Ohren, aber nun hören wir außer einem kurzen Knackser nichts. Wir sollten also noch für ein kontrolliertes Beenden sorgen, indem wir z. B. auf einen Tastendruck warten.

 

Exkurs:
Ich verwende hier mal die Tastaturabfrage vom ‚Betriebssystem‚. Das System ruft bekanntlich 60 mal in der Sekunde den Interrupt bei  $EA31  auf. Dort wird u. a. die Uhr weitergestellt und geprüft, ob eine Taste gedrückt wurde. Ist dies der Fall, dann wird die Tastenkoordinate auf der Zero-Page bei $CB abgelegt.

Vorsicht: Die Koordinaten sind keine PETSCII-Werte!!! Wenn keine Taste gedrückt ist, dann wird dies durch  #$40 angezeigt.

Sollte euch die obige Art der Tastaturabfrage noch fremd sein, dann werft einfach einen Blick auf die ‚Tastaturmatrix‚.

Nun können wir das Programm starten. Sobald wir eine Taste drücken wird der Ton beendet und wir landen wieder im BASIC.

Unsere ersten Erkenntnisse sind also:

  • Der Ton beginnt, sobald BIT-0 im Wellenform-Register auf 1 gesetzt wird.
  • Wir müssen den Ton selbst wieder abstellen.
  • Der Ton endet, sobald BIT-0 im Wellenform-Register auf 0 gesetzt wird.

Damit haben wir jetzt unser Testprogramm. Der Beitrag hat zwar nicht viel Neues gebracht, er ist aber die Basis für die Erforschung der einzelnen Register. Als erstes kümmern wir uns dann mal um die Frequenz.


 

<<< zurück | weiter >>>

weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

Schreibe einen Kommentar


Beachtet bitte, dass ich eure Kommentare erst manuell freigegeben muß, bevor sie auf der Seite erscheinen! Da ich nicht pausenlos am Rechner sitze, kann es schon mal etwas dauern, bis ein Kommentar für alle sichtbar ist.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Protected by WP Anti Spam