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 Userport, 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 bestimmt 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, beziehungsweise hineinschreiben, kommen von, oder
erscheinen an den jeweiligen Portleitungen der entsprechenden CIA und sind aus
ihr herausgeleitet.
" Frei programmierbar" heißt, daß diese
Ports sowohl zur Ein-, als auch zur Ausgabe benutzt werden können. Die jeweilige 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
Einoder Ausgabe schalten.
Die Portleitungen erscheinen an den verschiedensten Stellen wieder. So sind zum
Beispiel die Portbits der CIA2 am Userport zu finden, oder die der CIA1 an den
beiden Control Ports für Joysticks, beziehungsweise intern an der Tastatur.
Sie sehen also, daß die Ports auch mehrfach benutzt werden. Daher erklärt es
sich auch, daß Sie, wenn Sie den Joystick in Port1 ein wenig hin und her bewegen, wirre Zeichen auf dem Bildschirm erscheinen. Das Betriebssystem
des C64 glaubt nämlich, die Tastatur
würde bedient und gibt die entsprechenden 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 unterscheidet die Ports einer CIA mit den Bezeichnungen " Port A" und " Port B" . Die Register 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 Datenrichtungsregister 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 benutzen) :
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 entsprechende Bit des Ports auf " Eingang" geschaltet; ist es gesetzt, so steht das
Bit des Ports auf " Ausgang" . Dem Programmierer sind hier keine Grenzen gesetzt. 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 geschatet sind ( im Beispiel die Bits 0-3) .
Die übrigen Bits werden ignoriert, beziehungsweise 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 Einund 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 Datenports darauf achten, daß die Eingangsbits 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 erscheint es im Portregister als 0 ! Das
ist wichtig zu wissen, da wir den gelesenen Wert dann nämlich erst einmal wieder 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 invertieren.
Umgekehrt müssen wir beim Beschreiben
der Portregister darauf achten, daß wir
das was wir an Eins-Bits erscheinen lassen wollen umgekehrt schreiben müssen.
Wenn Sie also zum Beipsiel die Bitfolge
11110000 am Port A der CIA2 ausgeben
wollen ( dieser ist am Userport herausgefü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 Weise. Da jeder Port über jeweils 8 Bits
verfügt, könnte man eigentlich nur 16 Tasten abfragen. Mit diesen 2 x8 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. Deshalb gibt es jetzt erst einmal eine Grafik 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. . .