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...