Magic Disk 64

home to index to html: MD8907-KURS-BASIC_KURS_TEIL_6-1_:_VON_ADAM_UND_EVA...(TEIL_6)-2.1.html
     BASIC-Kurs : "Von Adam und Eva..." (Teil 6)     
     ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾     
Herzlich  Willkommen zum 6. Teil unsers BASIC-Kurses.
Nachdem mich meine Mitredakteure letzen  Monat  wegen
Platzmangels  aus  meiner  Sparte  geschmissen haben,
geht es nun wieder weiter im  Text.  Allerdings  kann
ich Ihnen eine weitere kleine Enttäuschung nicht vor-
enthalten. Ich hatte Ihnen im Mai  zwar  versprochen,
daß  wir  uns  dieses Mal mit der Grafik beschäftigen
würden, doch möchte ich dies  nun  erst  einmal  auf-
schieben.  Der  Grund  hierfür  liegt darin, daß nach
diesem Kurs hier ein Grafikkurs geplant ist. Da  habe
ich dann auch genügend Platz und Freiheit, Ihnen die-
ses Thema besser zu erläutern und näher zu bringen.  
Gerade  die  Grafik  ist  beim C64 ein sehr brisantes
Thema, zumal BASIC die Grafikprogrammierung in  kein-
ster Weise unterstützt, wie man das von größeren Com-
putern (ich sage da ja nur "AMIGA" und  "AmigaBasic")
gewohnt  ist.  Doch  ganau das wird dann Thema dieses
Kurses werden, weshalb ich Sie jetzt  noch  3  Monate
vertrösten muß. Dann wird nämlich der Basickurs been-
det sein.                                            
Nun wollen wir aber einmal mit diesem sechsten Basic-
kurs  beginnen.  Ich  möchte Sie nun ein wenig in die
Soundprogrammierung des  64ers  einführen,  die  auch
nicht  gerade  ohne ist, und für die Sie die Informa-
tionen über das Binärsystem  und  den  Speicheraufbau
des  C64  vom  letzten  Mal genauso, wenn nicht sogar
noch mehr, benötigen.                                
Erinnern  wir  uns  : mit der Soundprogrammierung hat
der SID, der Chip der Musik erzeugt,  etwas  zu  tun.
Wir hatten ja gelernt, daß die Adressen mit denen man
ihn  programmiert  im sogenannten I/O-Bereich (INPUT-
/OUTPUT- oder EIN-/AUSGABE-Bereich) liegen, der  sich
von  Adresse 53248 bis 57344 erstreckt. "Puh!" werden
Sie sagen, "Das sind ja mehr  als  4000  Speicherzel-
len !  Wie soll man sich die denn alle merken !" Doch
keine Angst ich kann Sie beruhigen.  Der  SID  belegt
lediglich  28  davon.  Ebenso  wie  alle anderen Ein-
/Ausgabe-Bausteine (es sind derer insgesamt vier, die
wir hier allerdings, außer dem SID,  nicht  behandeln
werden),  die  auch nicht mehr als 50 Bytes in diesem
Riesenbereich belegen. Doch Vorsicht. Sie können hier
zwar die meisten Adressen mit beliebigen  Werten  be-
schreiben,  doch  ist  es NICHT möglich die nicht be-
nutzten Speicherzellen zu benutzen. Sollten Sie  hier
einen  Wert  hineinschreiben, so wird gar nichts pas-
sieren, da die adressierte Speicherzelle nämlich phy-
sisch,  also  im  Innern  Ihres 64ers, gar nicht exi-
stiert. Sie bekommen irgendwelche Werte beim Auslesen
mit PEEK geliefert, und beim Schreiben mit POKE  wird
der  zu  schreibende Wert einfach, wie bei einer ROM-
Speicherzelle, ignoriert.                            
Doch  gehen  wir nun einmal zu den Speicherzellen die
wir benutzen DÜRFEN. Die sogenannte Basisadresse  des
SID liegt bei Adresse 54272. Dies ist die erste Spei-
cherzelle des SID. Sie ist deshalb so  wichtig,  weil
wir  sie  benutzen  wollen,  um sogenannte "Register"
adressieren zu können. Ein Register  ist  eine  Spei-
cherzelle  des SID (oder eines anderen I/O-Bausteins)
die man mit Hilfe der Basisadresse und der  Register-
nummer anspricht. Hierzu vielleicht ein Beispiel. Mit
dem Befehl:                                          
POKE SI+24,15                                        
setzt man  die  Lautstärke  der  erzeugten  Töne  auf
"laut". Hierbei steht die Variable SI für die Basisa-
dresse des SID, wir haben ihr also  vorher  den  Wert
54272  zugeordnet !  Das  Register 24 des SID ist für
die Lautstärke verantwortlich. Schreibt  man  hier  0
hinein, so wird der Ton gänzlich abgeschaltet. Mit 15
schalten  Sie  volle Lautstärke ein. Natürlich können
Sie auch alle Werte zwischen 0 und 15 hier  benutzen.
Diese  sind  dann eben je nach dem mehr, oder weniger
laut.                                                
Nachdem Sie nun hoffentlich über die Bedeutung  eines
Registers ausfgeklärt sind, möchte ich erst einmal zu
den  Grundlagen  übergehen. Wie Sie vielleicht wissen
verfügt Ihr 64er über drei "Stimmen".  Das  heißt  er
kann  3  verschiedene Töne gleichzeitig gerenerieren.
Deshalb gibt man einer Stimme des SID auch den  etwas
päßlicheren  Namen  "Tongenerator". Diese sind aufge-
teilt in Tongenerator 1, 2 und 3. Jeder dieser  Gene-
ratoren  arbeitet unabhängig von den anderen und kann
eigene Töne erzeugen ohne  seine  Kollegen  damit  zu
stören.  Sie können jeden einzelnen von Ihnen mit ei-
ner bestimmten "Tonhöhe" und einem bestimmten "Klang"
programmieren. Damit Sie dies ein wenig  besser  ver-
stehen, schlage ich vor, daß wir einmal einen kleinen
Ausflug in die Physik machen:                        
Wie Sie vielleicht wissen besteht ein Ton, so wie ihn
das  menschliche Ohr hört, aus nichts anderem als ei-
nem extrem schnellen Schwingen der Luft. Auch bekannt
unter dem Namen "Schall". Die Art dieses Tones, warum
sich Töne also voneinander unterscheiden können, wird
von zwei Komponenten bestimmt. Da wäre zum einen  die
Wellenform  und zum anderen die Frequenz. Die Wellen-
form gibt an, wie die Schwingungen  verlaufen.  Diese
lassen sich durch eine Grafiklinie darstellen, häufig
sogar durch eine mathematische Funktion. Ein Beispiel
wäre  da  sie Sinuskurve. Mit ihr lässt sich eine Si-
nuswelle erzeugen. Dies klingt  dann  etwa  wie  eine
Oboe.  Ein weicher und "perfekter" Klang, da die Wel-
lenform  ja   dem   perfektesten   geometrischen   2-
dimensionalen Körper zugrunde liegt, dem Kreis.      
Jedem der 3 Tongeneratoren Ihres C64 können  Sie  nun
eine eigene Wellenform einprogrammieren, die dann von
diesem  erzeugt  wird. Eine Sinuskurve kriegt der SID
zwar nicht ganz hin, doch reicht es immerhin zu einer
Dreieckskurve, die der Sinuskurve in Punkto Hoch- und
Tiefpunkten ja schon sehr ähnlich kommt. Sollten  Sie
jetzt hier nur "Bahnhof,  Abfahrt und Koffer geklaut"
verstehen,  so  möchte  ich  sie  mit  dem  Folgenden
noch  ein  wenig mehr aufklären. Jede Wellenform kann
nämlich auch mit Hilfe eines Oszillators als Tonwelle
sichtbar gemacht werden. Aus der  Schule  kennen  Sie
bestimmt noch diese Experimente, wo dann auf so einem
kleinen  runden Bildschirm eine merkwürdige Kurve er-
schien, wenn der Lehrer irgend einen Ton von sich gab
(oder mit Hilfe eines Tongenerators  erzeugte).      
Der C64 versteht es nun, 4 veschiedene solcher Kurven
zu erzeugen, zwischen denen Sie dann auch wählen kön-
nen, wenn Sie einem Tongenerator  eine  "persönliche"
Note geben möchten. Diese sind die Dreieck- (ich hat-
te diese Kurve oben schon  erwähnt),  Rechteck-,  und
Sägezahnkurve.  Dann  gibt es da noch eine Wellenform
die eher eine Sonderstellung einnimmt, die Rauschkur-
ve.  Man  kann  hier  eigentlich nicht mehr von einer
Wellenform reden, da das Rauschen  nicht  nach  einer
vorgegebenen Kurve erzeugt wird, sonden von verschie-
denen Zufallswerten, die den Abstand zum 0-Wert ange-
ben  und  einfach  nur  aneinandergereiht  werden. So
entsteht ein Eindruck des Rauschens.                 
Die Rechteckskurve nimmt ebenfalls  eine  Sonderstel-
lung ein, was ihre Programmierung betrifft. Dies wer-
de ich ein weinig später erläutern.                  
Wie  man nun dem SID klarmacht, welche der 4 Möglich-
keiten man auf einer Stimme spielen möchte, werde ich
Ihnen gleich erklären. Zunächst einmal  noch  zu  der
2ten  Komponente,  mit der sie einen Ton beeinflussen
können,  der  Frequenz.  Davon  haben Sie sicher auch
schon einmal gehört. Je höher die Frequenz ist, desto
schneller wird die Luft zu Schwingungen angeregt.  Es
kommen  quasi mehr Dreiecksspitzen einer Dreieckkurve
(beispielsweise) in gleichen Zeitabständen  an  Ihrem
Ohr  an,  als bei einer niedrigeren Frequenz. Dadurch
werden die Hörnerven mehr gereizt und es entsteht  im
Gehirn  der  Eindruck  eines höheren Tones. Dies kann
bis zum Schmerz gehen, wenn der  Ton  besonders  laut
und  intensiv gespielt wird, wie etwa bei einer Säge-
zahnkurve, oder bei manchen Rechteckkurven (mit  laut
meine  ich RICHTIG laut - wenn Sie auf einem Rockkon-
zert einmal nahe den Boxen standen als der Leadgitta-
rist  ein  Solo von sich gab, dann wissen Sie was ich
meine).                                              
Diese Frequenzen kann man nun auch jedem Tongenerator
angeben, so daß dieser dann genau weiß,  wie  er  den
Ton zu gestalten hat. Um beispielsweise den Kammerton
A  zu  spielen benötigen Sie eine Frequenz von 440 Hz
(Hertz). Geben Sie diese dem Computer an, so wird  er
Ihnen  genau diesen Ton vordüdeln. Das hört sich doch
ganz einfach an ! Nun ja,  ist  es  allerdings  nicht
unbedingt.  Denn Sie können dem SID nicht einfach die
Zahl 440 irgendwo hinschreiben. Dem stehen 2 Dinge im
Weg. Erstens einmal benötigt der SID auch noch weite-
re  Angaben  über einen Ton, bevor er richtig "losle-
gen" kann und zweitens gibt es mit der Frequenzangabe
auch noch einige kleine Probleme, die etwas  mit  der
Hardware des 64ers zu tun haben.                     
Zunächst möchte ich Ihnen eine Übersicht  aller  SID-
Register  geben. Anschließend können wir dann richtig
anfangen. Ich muß noch hinzufügen, daß ich die  Regi-
ster  25-28  aus  Platzgründen  ausgelassen habe. Wir
werden uns mit diesen sowieso nicht befassen, da  de-
ren  Funktion  für  uns  kaum von Nutzen ist. Nur als
Assemblerroutinen wären diese Register  effektiv  von
Nutzen, und dann auch nur sehr, sehr selten. Nun aber
zu unsrer Tabelle :                                  
Register  Adresse  Funktion                          
–––––––––––––––––––––––––––––––––––––––––––––––––––––
  00       54272   Frequenz für Stimme 1 - LO        
  01       54273   Frequenz für Stimme 1 - HI        
  02       54274   Pulsbreite für Stimme 1 - LO      
  03       54275   Pulsbreite für Stimme 1 - HI      
  04       54276   Ton anschlagen und Wellenform für 
                   Stimme 1                          
  05       54277   Hüllkurve ATTACK/DECAY Stimme 1   
  06       54278   Hüllkurve SUSTAIN/RELEASE Stimme 1
  07       54279   Frequenz für Stimme 2 - LO        
  08       54280   Frequenz für Stimme 2 - HI        
  09       54281   Pulsbreite für Stimme 2 - LO      
  10       54282   Pulsbreite für Stimme 2 - HI      
  11       54283   Ton anschlagen und Wellenform für 
                   Stimme 2                          
  12       54284   Hüllkurve ATTACK/DECAY Stimme 2   
  13       54285   Hüllkurve SUSTAIN/RELEASE Stimme 2
  14       54286   Frequenz für Stimme 3 - LO        
  15       54287   Frequenz für Stimme 3 - HI        
  16       54288   Pulsbreite für Stimme 3 - LO      
  17       54289   Pulsbreite für Stimme 3 - HI      
Register  Adresse  Funktion                          
–––––––––––––––––––––––––––––––––––––––––––––––––––––
  18       54290   Ton anschlagen und Wellenform für 
                   Stimme 3                          
  19       54291   Hüllkurve ATTACK/DECAY Stimme 3   
  20       54292   Hüllkurve SUSTAIN/RELEASE Stimme 3
  21       54293   Filter-Grenzfrequenz LO           
  22       54294   Filter-Grenzfrequenz HI           
  23       54295   Resonanz und Filterschalter       
  24       54296   Filtermodus und Lautstärke        
Doch  nun  frisch  ans Werk. Wie Sie ja gesehen haben
gibt es hier jeweils 7 Register für jede Stimme.  Als
aufmerksamer  Leser  sind  Ihnen hierbei bestimmt für
Stimme 1 die Register 00, 01 und 04 aufgefallen.  Mit
diesen  Registern  nämlich  können  wir  unsere  Töne
beeinflussen, so wie wir das bisher gelernt haben. In
Register  00  und  01  wird die Frequenz des Tons für
Stimme 1 angegeben und in Register 04 die Wellenform.
Wollen  wir  nun das Problem lösen, wie wir eine Fre-
quenz, in Hertz gemessen, in  diese  beiden  Register
eingeben.  Ich  hatte  ja  schon angedeutet, daß dies
nicht so einfach sein wird.                          
Ich  hole  hierzu  einmal ein wenig weiter aus. Viel-
leicht haben Sie ja schon einmal gehört, daß der  C64
mit  einer  bestimmten Taktfequenz "getaktet" ist, so
wie das bei jedem Computer der Fall ist.  Ein  Mikro-
prozesor  und  überhaupt  alle logischen Bausteine in
einem Computer brauchen so etwas ganz einfach,  damit
die  Arbeiten  im  Computer  geregelt und gleichmäßig
ablaufen. Als Herzstück dient  hierzu  ein  Quarzbau-
stein,  der eine bestimmte Taktfrequenz vorgibt. Alle
Bausteine greifen sich nun den Takt von diesem  Quarz
ab  und  modulieren ihn meistens auf eine eigene Fre-
quenz, mit der sie besser arbeiten können. Der Mikro-
prozessor  in Ihrem C64 arbeitet zum Beispiel mit ei-
ner Taktfrequenz von 985.2484 KHz. Dies ist genau der
18  Teil  der  Systemtaktfrequenz,  die   vom   Quarz
herrührt.  Diese  beträgt demnach 17 734 472 Hz. Also
knapp 17.7 MHz. Der SID benutzt nun  ebenfalls  diese
Frequenz. Um nun aus internen Gründen des Aufbaus des
SID  auf den richtigen Wert zu kommen, mit dem dieser
dann die echte Tonfrequenz spielt muß man vorher noch
eine kleine Umrechnung  vornehmen.  Diese  folgt  der
folgenden Formel :                                   
WERT=Tonfrequenz * 2'24 / Taktfrequenz               
Möchten Sie also den Kammerton A, mit 440  Hz,  spie-
len,  so müssen Sie erst den SID-Wert hierfür berech-
nen. Dies sieht dann so aus :                        
440Hz * 2'24 / 17734472 = 416.25                     
Lassen wir nun noch die Stellen hinter dem Komma weg-
fallen,  so  erhalten  wir den Wert 416. Genau diesen
Wert müssen Sie jetzt an  den  SID  übergeben,  damit
dieser  einen  440  Hz-Ton erzeugt. Hierbei haben wir
allerdings ebenfalls  noch  ein  kleines  Problem  zu
bewältigen. Wie Sie sich errinnern können wir mit dem
POKE-Befehl lediglich ein Byte verändern, also 8 Bit.
Die  größte  Zahl,  die  Sie mit dem POKE-Befehl also
übergeben können ist die Zahl 255 (2↑8 Bits - 1), die
nun folgende Zahl, die 256 also, hat  jetzt  schon  9
Bits,  da  ja ein Überlauf stattfand. Ich zeige Ihnen
das einmal in Form von (16 stelligen) Binärzahlen:   
dezimal    binär                                     
  255      0000 0000 1111 1111                       
  256      0000 0001 0000 0000                       
Nun  ist aber die Zahl 416 größer als 255, somit müs-
sen wir zu einem kleinen  Trick  greifen  um  sie  zu
übermitteln. Wir schreiben sie einfach mit 16 Bit, da
eine  16-Bit-Zahl  maximal  den  Wert 65535 aufnehmen
kann, was für unsere Zwecke vollkommen  reicht.  Dies
sieht dann so aus:                                   
416 (dez.)  =  0000 0001 1010 0000 (bin.)            
Diese 16-Bit spalten wir jetzt ganz einfach  in  zwei
8-Bit-Zahlen  auf. Die Eine nennen wir "höherwertiges
Byte", die Andere  "niederwertiges  Byte"  einer  16-
Bit-Zahl.  Das  sähe dann für 416 etwa folgendermaßen
aus :                                                
416 = 0000 0001 1010 0000                            
Höherwertiges Byte (die ersten 8 Bits von links) :   
0000 0001 = 256 (dez.)                               
Niederwertiges Byte (die nächsten 8 Bits von links) :
1010 0000 = 160                                      
Und siehe da, schon hätten wir unsere  Zahl  in  zwei
Bytes  zerlegt,  die  wir  nun einzeln, mit Hilfe des
POKE-Befehls, an den  SID  übergeben  können.  Dieser
setzt  sie  dann  intern  wieder zusammen und erzeugt
dann die Frequenz 440 Hz !                           
Für  diese beiden Frequenzbytes der Stimme 1 sind nun
die Register 00 und 01 zuständig. Oben in  der  Regi-
stertabelle  waren  deren  Funktionen beschrieben mit
"Frequenz für Stimme 1 - LO" und "Frequenz für Stimme
1 - HI". Das "LO" und "HI"  steht  hierbei  für  "LOw
significant  byte"  und  für  "HIgh significant byte"
oder höher- und niederwertiges Byte. Sie müssen  also
den  LO-Wert  von 416, also 160, in Register 00 POKEn
und den HI-Wert 1 in  Register  01.  Dies  sieht  als
kleines Programm geschreiben dann so aus :           
10 SI=54272:REM BASISADRESSE SID                     
20 POKE SI+0,160                                     
30 POKE SI+1,1                                       
Und schon wäre der Kammerton A programmiert. Um  das-
selbe  bei Stimme 2 tun zu können, müssen Sie die Re-
gister 07 und 08 benutzen, bei Stimme 3  Register  14
und 15.                                              
So, die Frequenz wäre gesetzt, aber hören können  Sie
jetzt noch nichts. Wir müssen zuerst ja noch die Wel-
lenform angeben. Nehmen wir hierzu doch einfach  ein-
mal  eine Dreieckskurve.  Was ist nun zu tun, um dies
dem SID klarzumachen ? Hierzu benötigen wir für Stim-
me  1 das Register 04 (analog für Stimme 2 und 3, die
Register 11 und 18). Dieses Register vereint  mehrere
Funktionen   in  einem.  Die einzelnen Bits in diesem
Register haben  verschiedene  Aufgaben,  die  erfüllt
werden,  wenn  man  das entspechende Bit auf 1 setzt.
Ich möchte Ihnen die Bitbelegung hier  einmal  anhand
einer Grafik darstellen :                            
MD8907-KURS-2.16.hires.png
Die Bits 1, 2 und 3 sind für uns unwichtig. Sie akti-
vieren zu komplexe Funktionen, als daß  sie  hier  in
den  Kurs  passen  würden. Für uns sind eher die Bits
4-7 und Bit 0 wichtig. Wie Sie sehen steht jedes die-
ser  Bits  (außer  dem 0.) für eine bestimmte Wellen-
form. Wir möchten  nun  eine  Dreieckskurve  spielen.
Also  setzen  wir  einfach Bit 4. Die anderen bleiben
unberührt und haben somit den Wert 0. Unser Byte sähe
Binär geschrieben dann so aus :                      
0001 0000                                            
Das enstpricht der dezimalen Zahl 16 (der Wert des 4.
Bits).  Sollten  Sie  diese Zahl jetzt in Register 04
schreiben, so wird allerdings immer  noch  nichts  zu
hören  sein.  Der SID benötigt nämlich noch 2 weitere
Angaben. Zum Einen müssen wir noch die Lautstärke der
vom SID  gespielten  Musik  setzen  und  zum  anderen
braucht dieser auch noch eine sogenannte "Hüllkurve",
die  etwas  über  den Verlauf des gespielten Tons an-
gibt. Kommen wir jedoch erst einmal zur Lautstärke.  
Diese schalten Sie am besten  auf  volle  Lautstärke.
Wir hatten dies ja oben schon einmal. Sie müssen ein-
fach den Wert 15 (Maximalwert) in das Lautstärkeregi-
ster 24 schreiben. Also :                            
POKE SI+24,15                                        
So. Nun machen wir uns einmal an die Hüllkurve heran.
Physikalisch  haben  wir den Ton ja nun schon festge-
legt.  Wir  können  jetzt  allerdings   noch   seinen
Lautstärkeverlauf,  WÄHREND  er gespielt wird bestim-
men, eben mit Hilfe  der  oben  genannten  Hüllkurve.
Diese  besteht  aus 4 Phasen. Diese heißen "Attack-",
"Decay-", Sustain-" und "Releasephase" und werden  in
der  eben angezeigten Reihenfolge vom SID durchgegan-
gen. Wozu nun das ganze ?                            
Wie Sie ja vielleicht wissen ist nicht jeder Ton, der
die gleiche Frequenz hat, allerdings von 2  verschie-
denen   Instrumenten   gespielt wird, vom  Klang  her
gleich. Eine Oboe zum Beispiel hört sich "weicher" an
als ein Glockenspiel, obwohl die Wellenformen  einan-
der sehr ähnlich sind. Das Glockenspiel wird "härter"
gespielt als die Oboe. Das heißt, daß beim Anschlagen
einer  Metalleiste des Glockenspiels der Ton die mei-
sten Schwingungen  erzeugt  und  somit  am  lautesten
klingt.  Im Gegensatz zur Oboe, bei der die hindurch-
geblasene Luft erst einmal  einen  Ton  erzeugen  und
quasi  "in Schwingung" gebracht werden muß. Ein ande-
res Beispiel wäre  eine  Klaviersaite.  Schlagen  Sie
eine  Taste auf der Klaviatur an, so wird der Ton an-
fangs am lautesten sein und nach und nach  abklingen.
Dies  kann  manchmal bis zu 50 Sekunden dauern, wobei
die Oboe kaum mehr als 0.5 Sekunden braucht. Sie  se-
hen  also,  daß ein Ton einen sogenannten Lautstärke-
verlauf bestitzt.  Genau  diesen  Verlauf  beschreibt
eben die Hüllkurve. Wie Sie in der obigen SID-Tabelle
sahen sind die Hüllkurvenregister für den ersten Ton-
generator die Register 05 und 06. In ihnen werden die
Werte für die 4 Hüllkurvenphasen gespeichert. Da  wir
4  Werte  haben, allerdings nur 2 Register, wird dies
so gehandhabt, daß  jedes  Register  in  zwei  4-Bit-
Bereiche aufgeteilt wird. So, daß die vier "höherwer-
tigen" Bits eine, und die vier "niederwertigen"  Bits
eine andere Phase darstellen. Diese sind folgenderma-
ßen verteilt :                                       
Register   Bits 4-7 (HI)   Bits 0-3 (LO)             
––––––––––––––––––––––––––––––––––––––––             
  05       Attack          Decay                     
  06       Sustain         Release                   
Somit  sind  Werte  von  0-15  für jede Phase möglich
(2↑4-1). Wollen wir nun klären, welche  Aufgaben  die
einzelnen Phasen haben :                             
1.) Die Attackphase:                                 
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾                                 
Mit  ihr  kann  die Zeit angegeben werden, in der ein
Ton von Lautstärke 0 auf die in Register 24 angegebe-
ne Lautstärke ansteigt, wobei bei dem Wert 0 diese am
schnellsten, und beim Wert 15 am langsamsten erreicht
wird. Hier eine Tabelle mit den genauen Werten :     
 WERT       ZEIT (in Sekunden)                       
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾                       
  0        0.002                                     
  1        0.008                                     
  2        0.016                                     
  3        0.024                                     
  4        0.038                                     
  5        0.056                                     
  6        0.068                                     
  7        0.080                                     
  8        0.100                                     
  9        0.250                                     
 10        0.500                                     
 11        0.800                                     
 12        1.000                                     
 13        3.000                                     
 14        5.000                                     
 15        8.000                                     
2.) Die Decayphase :                                 
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾                                 
Diese  Phase  gibt  an, in welcher Zeit der soeben in
der Attackphase erreichte Wert  der  Lautstärke,  auf
den Lautstärkewert absinkt, der als Sustainwert ange-
geben wird.                                          
3.) Sustain-spanne :                                 
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾                                 
Hier wird ein Wert zwischen 0 und 15  angegeben,  der
die Endlautstärke nach ablauf der Decay-Phase angibt.
4.) Releasephase :                                   
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾                                   
Wird  ein  Ton  abgeschaltet  (dazu kommen wir gleich
noch) dann wird unverzüglich die Releasephase  einge-
leitet.  Sie  gibt an in welcher Zeit der Ton von der
Sustainlautstärke wieder auf 0 absinkt.              
Die Zeitwerte für die Decay- und Releasephase  können
Sie der folgenden Tabelle entnehmen :                
 WERT       ZEIT (in Sekunden)                       
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾                       
  0             0.008                                
  1             0.024                                
  2             0.048                                
  3             0.072                                
  4             0.114                                
  5             0.168                                
  6             0.204                                
  7             0.240                                
  8             0.300                                
  9             0.750                                
 10             1.500                                
 11             2.400                                
 12             3.000                                
 13             9.000                                
 14            15.000                                
 15            24.000                                
Angenommen,  wir wollten ein Glockenspiel mit dem SID
simulieren, dann bräuchten wir einen Ton der  schnell
auf  voller  Lautstärke  steht  und dann auch relativ
schnell wieder abklingt.  Wählen  wir  also  folgende
Werte für die einzelnen Phasen :                     
Attack   -  00                                       
Decay    -  07                                       
Sustain  -  09                                       
Release  -  01                                       
Die 2 Bytes für die Hüllkuve müßten dann folgenderma-
ßen aussehen :                                       
1.) 0000  0111                                       
     A=0   S=7                                       
2.) 1001  0001                                       
     S=9   R=1                                       
Nun müssen Sie diese Bytes also nur noch ins dezimale
System umrechnen und in die Register 05 und 06 poken.
Die Werte wären demnach 7 und  145.  Zugegebenermaßen
ist  dies  eine  ein wenig mühselige Arbeit, wenn man
nicht gerade über einen Taschenrechner  verfügt,  der
das Binärsystem beherrscht. Deshalb kann das auch ein
wenig  einfacher  gehandhabt werden. Denn ebenso, wie
man HI- und LO-Bytes bilden kann,  lassen  sich  auch
"HI-  und  LO-Halb-Bytes"  bilden.  Diese heißen dann
"Nibble". Nun müssen Sie nur noch nach einem bestimm-
ten  Schema  die  verschiedenen  Werte miteinander zu
multiplizieren (der Umgekehrte Weg der  Zerlegung  in
LO- und HI-Byte). Nämlich nach der Formel :          
HI-Nibble * 16 + LO-Nibble                           
In unserem Fall hätten wir dann folgende Berechnungen
durchzuführen :                                      
Attack- und Decay-Byte    : 0*16+7=  7               
Sustain- und Release-Byte : 9*16+1=145               
Und schon wären wir am Ziel. Nun gilt es nur noch die
Werte im SID zu setzen, also :                       
POKE SI+5,7                                          
POKE SI+6,145                                        
Das wäre geschafft ! Doch  -  oh  Enttäuschung  -  es
kommt immer noch nichts aus dem Lautsprecher !!! Kei-
ne Panik, das ist ganz normal so, denn wir haben noch
eine weitere Operation durchzuführen.  Der  SID  weiß
jetzt zwar welche Frequenz er zu spielen hat, was für
eine  Wellenform  er unserem Ton geben soll, und wel-
chen Klangverlauf dieser haben soll,  damit  er  aber
nun  endlich die Hüllkurve abspielt, muß man ihm auch
noch mitteilen, wann er dies zu tun hat.  Wir  müssen
ihm  also  quasi ein "Startzeichen" geben, daß er die
Attackphase einleiten darf. Dies geschieht mit  Hilfe
des  0.  Bits  aus  Register  04 (ich hatte es vorhin
schon einmal erwähnt, siehe auch Grafik).  Erst  wenn
dieses  Bit  gesetzt wird, beginnt er nämlich die At-
tackphase einzuleiten. Wir müssen somit also  zu  dem
Wellenform-Wert  16  für  die Dreieckskurve auch noch
eine 1 addieren, damit dies der Fall ist (1  ist  die
Wertigkeit  des 0. Bits). Schreiben Sie also nun fol-
genden Befehl :                                      
POKE SI+4,17                                         
Nun kommt er endlich aus dem Lautsprecher, unser lang
erwarteter Ton. Lange hat es gedauert, doch  schließ-
lich  und  endlich haben wir es doch noch geschafft! 
Wie Sie jetzt allerdings schnell merken werden,  hört
er gar nicht mehr auf zu spielen, sondern brummt mun-
ter weiter. Das war allerdings gar nicht der  Effekt,
den wir erzielen wollten. Der Ton sollte doch eigent-
lich wieder in der Releasephase abklingen ! Der Grund
hierfür liegt darin, daß die  Releasephase  noch  gar
nicht  eingeleitet  wurde !  Dies  geschieht  nämlich
erst, wenn das 0. Bit in Register  04  wieder  auf  0
gesetzt  wird.  Bitte,  probieren Sie - diesmal kommt
also nur  16  in  dieses  Register,  da  wir  ja  die
Dreieckswellenform  ja  noch beibehalten möchten, al-
so :                                                 
POKE SI+4,16                                         
Und schon hört der Krach auf. Dies ist ein Punkt  den
Sie   beim  Soundprogrammieren  genauestens  beachten
sollten. Die Zeit, in der der Ton  auf  der  Sustain-
Lautstärke  gehalten wird, bestimmen Sie als Program-
mierer, nicht der SID. Sie müssen ihn erst "von Hand"
wieder abschalten. Praktisch läßt sich das  etwa  mit
einer Verzögerungsschleife realisieren.              
Sie  programmieren  einfach eine Schleife, in der der
Computer  zwar  mit  dem  Abarbeiten   der   Schleife
beschäftigt  ist,  jedoch  nichts  tut. Es fehlt ganz
einfach der Schleifenrumpf. Hier ein Beispiel :      
FOR I=1 TO 100:NEXT                                  
Sie sehen, die Schleife zählt ganz still und heimlich
bis 100. Effektiv tut der Computer jedoch nichts.  So
können  wir das Programm mit Scheinberechnungen quasi
"anhalten", damit der SID auch genug  Zeit  hat,  die
ersten  3 Phasen auch durchzuspielen. Am besten sehen
Sie sich einmal das Programm "MINISOUNDDEMO" auf  der
Rückseite der MagicDisk einmal an. Hier habe ich alle
notwendigen  Befehle  noch  einmal   zusammengerafft,
damit Sie auch ein kleines praktisches  Beispiel  ha-
ben.                                                 
Nun will ich Ihnen noch erklären welch eine Besonder-
heit die Rechteckskurve auf sich hat, und  wofür  die
Register  02  und 03 benutzt werden. In diesen beiden
Registern können Sie nämlich die Pulsbreite der Rech-
teckskurve  für Stimme 1 angeben. Wie Sie oben in der
Wellenformgrafik gesehen haben, wird der Abstand, der
zwischen den beiden Punkten liegt, an dem  die Recht-
eckskurve  von ihrem Tiefstpunkt zu ihrem Höchstpunkt
"springt"  in der sogenannten "Pulsbreite" angegeben.
Sie können in diesen beiden Registern also ganz  ein-
fach  den Abstand dieser beiden Rechtecksseiten ange-
ben. Dadurch können Sie den Klang der  Rechteckskurve
noch  einmal drastisch verändern. Mit niedrigen Puls-
breiten gespielt hört sich diese Welle  sehr  "kräch-
zend"  an,  fast  schon wie ein "Sägezahn". Je größer
die Abstände werden, desto weicher  und  voller  wird
der  Klang.  Hier  liegt  es  an Ihnen, die einzelnen
Zustände einmal durchzuprobieren.  Es  sei  nur  noch
gesagt,  daß  hier  mit  einem 12-Bit-Wert gearbeitet
wird. Das heißt, daß die Bits  4-7  von  Register  03
KEINE  Auswirkung auf die Pulsbreite haben. Der maxi-
male Pulsbreitenwert liegt  somit  bei  2↑12-1,  also
4095.  Probieren  Sie einfach einmal ein wenig herum,
denn, wie heißt es so schön : "Nur  die  Übung  macht
den  Meister." Wie Sie dies handhaben, sollten Sie ja
mittlerweile wissen, ich hatte Ihnen die  Problematik
von  HI-  LO-Byte  oben  ja schon erklärt. Sie müssen
hier nur darauf achten, daß Sie im Register  04  auch
die  Rechteckwellenform  einschalten, und daß das HI-
Nibble (Bits 4-7) der Pulsbreite immer 0 ist.        
Im übrigen sei noch erwähnt, daß Sie  alle  hier  ge-
nannten  Vorgänge mit Registern  usw. natürlich eben-
falls an den Stimmen 2 und 3 durchführen können.  Sie
müssen  nur  in  der Registertabelle nach dem entspe-
chenden Äquivalent des Registers für die entspechende
Stimme suchen. Sie werden merken, daß diese  alle  in
der  gleichen  Reihenfolge  für die einzelnen Stimmen
angeordnet sind. Im übrigen sind die meisten Register
des SID nicht auslesbar (bis auf die der 3.  Stimme).
Es  passiert also dasselbe, wie wenn Sie auf eine der
oben erwähnten I/O-Adressen zugreifen...             
Ich möchte mich nun bis nächsten Monat wieder  verab-
schieden, wenn wir uns dann ein wenig mit der  Daten-
speicherung und der Peripherie des 64ers beschäftigen
werden.  Sie  werden  dann  auch gleich noch den noch
fehlenden Befehlssatz von BASIC 2.0 kennenlernen.    
Ich bedanke mich nun für Ihre Aufmerksamkeit und wün-
sche ein fröhliches SID-Gedüdels, bis in einem Monat,
                                     Ihr Uli Basters.



Valid HTML 4.0 Transitional Valid CSS!