Magic Disk 64

home to index to text: MD9011-KURSE-CIA-KURS_TEIL_1-1_:_DIE_GEHEIMNISSE_DES_SECRET-SERVICE_(TEIL_1).txt
                CIA-Kurs:               
 "Die Geheimnisse des Secret-Service..."
                (Teil 1)                
1) Einleitung:                          

Herzlich willkommen zu unserer neuen Kurs-Serie. Nachdem Sie mein Kollege IVO HERZEG die letzten Monate ja eingehend in die Matierie der Raster-Interrupts eingeführt hat, will ich Ihnen nun ein weiterführendes Thema anbieten: die CIA-Bausteine des C 64 .
Diese steuern ( wie im Raster-IRQ- Kurs schon angedeutet) die übrigen Interruptfunktionen unseres Rechners und sind für den Kontakt mit der Außenwelt des 64 ers verantwortlich. Ohne sie könnten wir ihn in keinster Weise bedienen - die Bedienung der Tastatur und des Joysticks oder die Datenspeicherung auf Massenmedien wie Kassette oder Diskette wäre gar nicht möglich. Sie sehen also, daß in den nächsten Monaten einige ganz interessante Themen auf Sie zukommen werden.
Ich möchte mich zunächst einmal um die Interruptprgrammierung kümmern und in fortführenden Folgen Anleitungen zur Bedienung der Ein-/ Ausgabeeinheiten des 64 ers geben. Wir werden dann den Joystick einmal genauer unter die Lupe nehmen und auch den Anschluß einer Maus durchführen, ganz abgesehen von den vielfältigen Möglichkeiten die uns der Userport bietet, um Harware-Erweiterungen zu bedienen.
Im übrigen sollte ich noch darauf hinweisen, daß Sie zum vollen Verständnis dieses Kurses doch schon tiefergreifende Kenntnisse von der Programmierung in Maschinensprache haben sollten, sowie in der Handhabung eines Maschinensprache-Assemblers und eines Speichermonitors.
Nichts desto trotz können auch BASIC- Programmierer einiges hier lernen, was eventuell auch von BASIC aus genutzt werden kann, jedoch mit Sicherheit nicht in der komplexen und vielfältigen Art und Weise, wie dies von Maschinensprache aus möglich ist.

2) Die Hardware:                        

Zunächst jedoch einmal eine kleine Beschreibung, mit was für Bausteinen wir es überhaupt zu tun haben. Die beiden CIAs des C64 sind zwei unscheinbare 40- polige Microchips mit vielfältigen Möglichkeiten. Man könnte sie quasi als " Manager" unseres Computersystems bezeichnen, die die Verbindung zwischen den einzelnen Einund Ausgabeeinheiten herstellen und deren Zusammenwirken erst richtig möglich machen.
Beide CIAs sind baugleich und können somit also problemlos miteinander vertauscht werden ( was oft bei einer Prü- fung auf Funktionsstörungen schon zu einer eindeutigen Analyse führen kann - trotzdem sei von einer Nachahmung ohne Vorkenntnisse abgeraten) . Sie tragen die Bezeichnung MOS 6526 und befinden sich in der Ecke links oben auf der Mutterplatine unseres Rechners.
Soviel zur harwaremäßigen Einordnung dieser kleinen Helfer, jedoch möchten wir uns hier ja mit der softwaremäßigen Bedienung befassen, weshalb ich nun also zu den für uns intressanten Fähigkeiten komme.
Die CIAs beinhalten jeweils:

* Zwei 16- Bit-Timer, mit denen man hervorragend besonders zeitkritische Programm- Probleme lösen kann.

* Eine 24- Stunden Echtzeituhr, die die Zeit im Gegensatz zur interruptgesteuerten BASIC-Uhr TI$ extrem genau geht.

* Zwei freiprogrammierbare Datenports, mit denen auch komplexe Datenübertra- gungen über den Userport möglich werden.
Wir unterscheiden die beiden CIAs im Folgenden mit CIA1 und CIA2 . Sie werden vom Betriebssystem für unterschiedliche Aufgaben genutzt, die nun ebenfalls beschrieben werden sollen:

* CIA1 ist mit der Tastatur und den beiden Joystickports verbunden und ist somit für die Eingabe über Tastatur, Joysticks, Maus oder Paddles zuständig.
Desweiteren wird von ihm der Systeminterrupt gesesteuert, der zyklische Aufgaben, wie das Empfangen von Tastencodes oder das Weiterzählen der BASIC-Uhr TI$ erledigt ( dazu später mehr) .

* CIA2 ist für die komplette Daten Ein-/ Ausgabe zuständig. Er steuert den IEC-Bus, mit dem bis zu 4 Diskettenlaufwerke und maximal 2 Drucker angesteuert werden können. Desweiteren ist er am Kasettenport angeschlossen und seine Datenleitungen sind am Userport herausgeführt, wodurch auch PC-Standard- Schnittstellen wie RS-232( seriell) oder CENTRONICS ( parallel) softwaremäßig emuliert werden können.
Das Wichtigste, was wir zur Interruptprogrammierung wissen müssen ist, daß der CIA1 mit der IRQ-Leitung und der CIA2 mit der NMI-Leitung des Prozessors verbunden ist. Je nach Aufgabengebiet einer Interruptroutine müssen wir also unterscheiden, von welchem CIA die Interrupts ausgelöst werden. In der Speicherkonfiguation des 64 ers sind die beiden Chips getrennt an zwei verschiedenen Basisadressen eingebunden. Ihre Register sind jedoch aufgrund der Baugleichheit für die gleichen Funktionen zuständig, weshalb wir auch nur EINE Registertabelle benötigen. Es kommt halt nur drauf an, welchen der beiden Zwillinge wir ansprechen wollen. Die Basisadresse für CIA1 ist $ DC00(= dez.56320), für CIA2$ DD00(= dez.56576) . Wollen wir also Timer A ( dazu später) von CIA1 mit dem Grundwert 16384 initialisieren, so müssen wir die Register 4 und 5 ab $ DC00($ DC04 und $ DC05) mit dem LO/ HI-Byte von 16384 beschreiben, bei Timer A von CIA2 ebenfalls Register 4 und 5, jedoch diesmal ab Basisadresse $ DD00($ DD04 und $ DD05) .

3) Was ist ein Interrupt?               

Nun zu einigen grundlegenden Informationen zu Interrupts. Ich benuzte dieses Wort die ganze Zeit schon, ohne zu erklären was es überhaupt bedeutet ( obwohl Sie sich darin vielleicht schon durch den Raster-IRQ- Kurs auskennen) .
Interrupt ist englisch und heißt wörtlich übersetzt " Unterbrechung" . Der Prozessor des C64 besitzt, wie jeder andere Prozessor auch, sogenannte Interrupt-Eingänge. Beim Prozessortyp 6510( wie er in unserem Rechner Verwendung findet) sind dies insgesamt drei Leitungen, womit er zwischen drei verschiedenen Interrupts ( rein hardwaremäßig - softwaremäßig sind es sogar noch mehr) unterscheiden kann. Diese sind IRQ, NMI und RESET. Diese drei Leitungen können nun extern, von anderen Bausteinen, wie zum Beispiel ( und vor allem) von den CIAs angesprochen werden um dem Prozessor das Eintreten eines bestimmten Ereignisses zu signalisieren. Der Prozessor bemerkt dies und kann nun durch ganz bestimmte Maßnahmen auf die Bearbeitung eines Ereignisses eingehen.
Der Clou an der Sache ist, daß der Prozessor so nicht ständig auf das Eintreten eines Ereignisses warten muß und deshalb beispielsweise nicht ständig in einer Endlosschleife prüfen muß, ob in irgendeiner Speicherzelle irgendwann einmal ein bestimmter Wert steht, son- dern er bekommt diese Arbeit von den CIAs abgenommen, die ihn schlichtweg nur noch darauf aufmerksam machen, daß er nun seine Achtung etwas anderem schenken sollte - dem Interruptereignis. So kann er also auch gerade mit ganz anderen Dingen beschäftigt sein - nämlich mit der Abarbeitung eines Programmes - und trotzdem zwischendurch ganz gezielten Aufgaben nachgehen.
In der Praxis sieht das so aus, daß er seine momentane Arbeit - das Hauptprogramm - dann UNTERBRICHT und in ein Jobprogramm zur Bearbeitung des Interrupts springt.
Ich möchte hier zur Verdeutlichung einmal ein Beispiel aus dem Alltag bringen.
Ich, Uli Basters, sitze hier an meinem Rechner und bin gerade dabei, den ersten Teil des CIA-Kurses zu schreiben. Plötzlich klingelt das Telefon. Bevor ich aufstehe um zum Telefon zu gehen speichere ich schnell noch das bisher geschriebene ab und merke mir vor, daß ich nach dem Telefonat unbedingt weiterschreiben werde. Am anderen Ende ist mein Kollege Ralf Zwanziger, der mir den nächsten Redaktionsschluß durchgibt.
Nachdem ich aufgehängt habe erinnere ich mich an mein Vorhaben, gehe wieder zurück zum Rechner, lade den Text wieder ein und setze meine Arbeit fort.
Diesen Vorgang kann man sehr gut mit den Tätigkeiten des Prozessors beim Eintreten eines Interrupts vergleichen. Eine Interruptleitung signalisiert ihm, daß ein Interruptereignis eingetreten ist ( das Telefon klingelt) . Schnell merkt er sich noch die wichtigsten Daten, nämlich den Inhalt der Prozessorregister ( Akku, Xund Y-Register), den Prozessorstatus ( Speicherung des Textes) und den Inhalt des Programmzählers ( das Vormerken weiterzuarbeiten) . Danach springt er auf eine Jobroutine, die er für das Eintreffen eines Interrupts parat hat und arbeitet diese dann ab ( ich führe ein Telefonat) . Ist er am Ende dieser Routine angelangt, so holt er sich Programmzähler, Statusund Prozessorregister wieder ins Gedächtnis zurück ( Erinnerung weiterzuarbeiten und wiedereinladen des Textes) und setzt seine alte Arbeit wieder fort.
Diesen ganzen Vorgang erledigt er mit einer derart affenartigen Geschwindigkeit, daß wir meinen er würde beides gleichzeitig tun. Das wäre dann auch der nächste Vorteil der ganzen Geschichte.
Durch Interrupts ist man also in der Lage mehrere Dinge, ganz unabhängig voneinander, scheinbar gleichzeitig zu erledigen - so auch das Betriebssystem, das, während es in der Hauptschleife auf Tasteneingaben wartet, über einen Interrupt den Cursor weiterhin blinken läßt.
Die Möglichkeiten hier sind sehr vielfältig, wie wir noch bemerken werden.

4) Der Timer-Interrupt:                 
                                        
-----------------------                 

Soviel zu den Vorgängen innerhalb unseres Rechners. Nun möchte ich mich ein wenig mit den Unterschieden zwischen den drei Interruptarten beschäftigen.
Wir haben also insgesamt drei verschiedene Unterbrechungen. Eine davon, nämlich der IRQ wird Ihnen vielleicht, wenn auch unbewußt, vielleicht schon nur zu gut bekannt sein. Er wird vom CIA1 ausgelöst und vom Betriebssystem für interne, cyklische Aufgaben verwendet. Deshalb ist er auch ein gutes Beispiel für uns um in dieser Materie einzusteigen, da uns das Betriebssystem schon eine koplette IRQ-Routine zur Verfügung stellt - den System-IRQ.
Der System-IRQ nutzt die einfachste und zugleich auch vielseitigste Funktion des CIAs um Interrupts auszulösen - den Timerinterrupt. Bevor ich mich jetzt jedoch in unverständlichen Erklärungen verliere erst einmal eine Registerbe- schreibung eines CIA-Registers. Hierzu habe ich Ihnen eine Grafik vorbereitet, die eine Kurzbeschreibung der Register liefert; ausgedruckt sollte sie Ihnen immer parat liegen, da wir sie in Zukunft häufiger benutzen werden.

Valid HTML 4.0 Transitional Valid CSS!