Magic Disk 64

home to index to html: MD9105-KURSE-CIA-KURS_TEIL_7-1_:_DIE_GEHEIMNISSE_DES_SECRET_SERVICE_(TEIL_7).html
                CIA-Kurs:               
 "Die Geheimnisse des Secret Service..."
                (Teil 7)                
----------------------------------------
Hallo und willkommen  zum  7.  Teil  des
CIA-Kurses.  Diesen Monat wollen wir uns
mit der wichtigsten  Funktion  der  CIA-
Bausteine  beschäftigen,  durch  die sie
erst so  richtig  leitungsfähig  werden.
Die beiden kleinen Chips steuern nämlich
den kompletten Verkehr mit der Außenwelt
des C64. Sei das nun die Bedienung eines
Diskettenlaufwerks,  eines Druckers, der
Tastatur oder  sogar  die  Kommunikation
mit eiener Hardware-Erweiterung am User-
port, alles geht nur mit den  CIAs.  Und
das  sogar  relativ  einfach. Kommen wir
zunächst einmal zu den Grundeinheiten in
den CIAs, die die für  Ein-/Ausgabe  be-
stimmt sind, den Portregistern.         
Jede CIA verfügt  nämlich  über  jeweils
zwei  frei  programmierbare 8-Bit-Ports.
Jeder dieser Ports  wird  von  je  einem
Register   der  CIA  repräsentiert.  Die
Bits, die Sie dort auslesen, beziehungs-
weise  hineinschreiben, kommen von, oder
erscheinen an den jeweiligen Portleitun-
gen  der entsprechenden CIA und sind aus
ihr herausgeleitet.                     
"Frei  programmierbar"  heißt, daß diese
Ports sowohl zur Ein-, als auch zur Aus-
gabe benutzt werden können. Die jeweili-
ge Funktion, die  man  benutzen  möchte,
kann  softwaremäßig  festgelegt  werden.
Und das nicht nur für einen ganzen Port,
sondern wir können sogar  die  einzelnen
Bits  eines  Ports,  je  nach Bedarf auf
Ein- oder Ausgabe schalten.             
Die Portleitungen erscheinen an den ver-
schiedensten Stellen wieder. So sind zum
Beispiel  die Portbits der CIA2 am User-
port zu finden, oder die der CIA1 an den
beiden Control Ports für Joysticks,  be-
ziehungsweise  intern  an  der Tastatur.
Sie sehen also, daß die Ports auch mehr-
fach  benutzt  werden.  Daher erklärt es
sich auch, daß Sie, wenn  Sie  den  Joy-
stick  in  Port1  ein  wenig hin und her
bewegen, wirre  Zeichen  auf  dem  Bild-
schirm  erscheinen.  Das  Betriebssystem
des C64  glaubt  nämlich,  die  Tastatur
würde  bedient und gibt die entsprechen-
den Zeichen aus. Doch  dazu  wollen  wir
später noch einmal kommen. Zunächst will
ich Ihnen erst einmal erläutern, wie die
Abfrage dieser Geräte funktioniert.     
Kommen  wir  also  zu der Funktionsweise
der Portprogrammierung. Man  unterschei-
det die Ports einer CIA mit den Bezeich-
nungen "Port A" und "Port B". Die  Regi-
ster  dieser  Ports  finden  sich in den
Registern 0 und 1 der entsprechenden CIA
wieder. Sie heißen Portregister A und B.
Zu jedem dieser Ports gibt es  nun  auch
die  sogenannten Datenrichtungsregister.
Hier wird bestimmt,  welches  Bit  eines
Ports  auf  "Eingabe",  und  welches auf
"Ausgabe" steht. Die Datenrichtungsregi-
ster sind in den Registern 2 und 3 einer
CIA  zu finden. Hier nochmal eine kleine
Öbersicht (die  Abkürzungen  werden  wir
der  Einfachheit  ab  jetzt immer benut-
zen):                                   
Reg. Abk.  Name                         
----------------------------------------
 0   PRA   Portregister A               
 1   PRB   Portregister B               
 2   DDRA  Datenrichtungsregister Port A
 3   DDRB  Datenrichtungsregister Port B
Ist ein  Bit  im  Datenrichtungsregister
eines  Ports  gelöscht,  so ist das ent-
sprechende Bit des Ports  auf  "Eingang"
geschaltet; ist es gesetzt, so steht das
Bit  des  Ports  auf "Ausgang". Dem Pro-
grammierer sind hier keine  Grenzen  ge-
setzt.  Schreibt man einen 8-Bit-Wert in
einen Port, dessen Bits unterschiedlich,
also in beide Richtungen geschaltet sind
(z.B. Bits 0-3 auf "Ausgang"=1, Bits 4-7
auf "Eingang"=0), so werden auch nur die
Bits des entsprechenden Portregister  an
den  Ausgang gelegt, die als solcher ge-
schatet sind (im Beispiel die Bits 0-3).
Die übrigen Bits werden  ignoriert,  be-
ziehungsweise vom Eingang überschrieben.
Im  Handling mit den Portregister müssen
wir übrigens  dringend  darauf  auchten,
daß  in  der  CIA ein Inverter eingebaut
ist der  die  Ein-  und  Ausgangssignale
invertiet.  Fragen Sie mich nicht warum,
für die  Probrammierung  ist  es  jedoch
unablässig dies zu wissen.              
So müssen wir beim  Lesen  eines  Daten-
ports  darauf  achten, daß die Eingangs-
bits immer in invertierter  Schreibweise
im  Register  erscheinen. Ist dabei also
ein Port, der auf  "Eingang"  geschaltet
ist,  unbelegt,  das  heißt,  daß an ihm
kein Signal anlegt, so sind die Bits  im
Datenportregister   auf  1.  Liegt  eine
Spannung an einem der Bits  an,  so  er-
scheint  es  im  Portregister als 0! Das
ist wichtig zu wissen, da wir den  gele-
senen Wert dann nämlich erst einmal wie-
der invertieren müssen, wenn wir ihn als
normalen  Zahlwert  lesen  wollen.  Dazu
benutzt man dann den EOR-Befehl. Mit EOR
#$FF  kann  man den Inhalt des Akkus in-
vertieren.                              
Umgekehrt  müssen  wir  beim Beschreiben
der Portregister darauf achten, daß  wir
das was wir an Eins-Bits erscheinen las-
sen wollen umgekehrt  schreiben  müssen.
Wenn  Sie also zum Beipsiel die Bitfolge
11110000 am  Port A  der  CIA2  ausgeben
wollen  (dieser  ist am Userport heraus-
geführt), dann müssen Sie  die  Bitfolge
00001111  in das Portregister (Reg.0 von
CIA2 = $DD00) schreiben!                
Kommen wir nun zur Tastaturabfrage.  Die
Tastatur wird mit Hilfe der Datenports A
und B der CIA1 abgefragt. Dies geschieht
auf eine besonders pfiffige Art und Wei-
se. Da jeder Port über  jeweils  8  Bits
verfügt,  könnte  man  eigentlich nur 16
Tasten abfragen.  Mit  diesen  2x8  Bits
kann  man  aber auch eine Matrix bilden,
mit der 2↑8=64  Kombinationen  abgefragt
werden können. Die Abfrage dieser Kombi-
nationen ist nun etwas kompliziert. Des-
halb gibt es jetzt erst einmal eine Gra-
fik mit der Belegung der Matrix. Drucken
Sie sie sich am besten aus,  oder  malen
Sie  sie  ab,  da ich sie später bei der
Erklärung dringend benötige...          
Valid HTML 4.0 Transitional Valid CSS!