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