Magic Disk 64

home to index to text: MD9105-KURSE-CIA-KURS_TEIL_7-1_:_DIE_GEHEIMNISSE_DES_SECRET_SERVICE_(TEIL_7).txt
                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. . .

Valid HTML 4.0 Transitional Valid CSS!