Magic Disk 64

home to index to html: MD9011-KURSE-CIA-KURS_TEIL_1-1_:_DIE_GEHEIMNISSE_DES_SECRET-SERVICE_(TEIL_1).html
                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 Interrupt-
funktionen unseres Rechners und sind für
den Kontakt mit der Außenwelt des  64ers
verantwortlich. Ohne sie könnten wir ihn
in  keinster Weise bedienen - die Bedie-
nung der  Tastatur  und  des  Joysticks 
oder  die Datenspeicherung auf Massenme-
dien wie Kassette oder Diskette wäre gar
nicht möglich. Sie sehen  also,  daß  in
den  nächsten  Monaten einige ganz inte-
ressante 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
64ers  geben.  Wir  werden dann den Joy-
stick einmal genauer unter die Lupe neh-
men  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 hin-
weisen, 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 Be-
schreibung, 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  be-
zeichnen, die  die  Verbindung  zwischen
den einzelnen Ein- und Ausgabeeinheiten 
herstellen und deren Zusammenwirken erst
richtig möglich machen.                 
Beide CIAs  sind  baugleich  und  können
somit  also  problemlos miteinander ver-
tauscht 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 Mutter-
platine 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  her-
  vorragend besonders zeitkritische Pro-
  gramm-Probleme lösen kann.            
* Eine  24-Stunden  Echtzeituhr, die die
  Zeit  im  Gegensatz  zur  interruptge-
  steuerten  BASIC-Uhr  TI$ extrem genau
  geht.                                 
* Zwei  freiprogrammierbare  Datenports,
  mit denen auch komplexe  Datenübertra-
  gungen  über den Userport möglich wer-
  den.                                  
Wir unterscheiden  die  beiden  CIAs  im
Folgenden  mit CIA1 und CIA2. Sie werden
vom Betriebssystem für  unterschiedliche
Aufgaben  genutzt, die nun ebenfalls be-
schrieben werden sollen:                
* CIA1 ist mit der Tastatur und den bei-
  den Joystickports  verbunden  und  ist
  somit  für  die Eingabe über Tastatur,
  Joysticks, Maus oder  Paddles  zustän-
  dig.                                  
  Desweiteren wird von ihm der Systemin-
  terrupt   gesesteuert,  der  zyklische
  Aufgaben, wie das  Empfangen  von  Ta-
  stencodes  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 Disketten-
  laufwerke und maximal 2 Drucker  ange-
  steuert 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  Interrupt-
programmierung  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  In-
terrupts  ausgelöst werden. In der Spei-
cherkonfiguation des 64ers sind die bei-
den 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 Registertabel-
le 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üs-
sen  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 dies-
mal ab  Basisadresse  $DD00  ($DD04  und
$DD05).                                 
3) Was ist ein Interrupt?               
-------------------------               
Nun zu einigen grundlegenden Informatio-
nen 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ört-
lich übersetzt "Unterbrechung". Der Pro-
zessor 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,  wo-
mit  er  zwischen drei verschiedenen In-
terrupts (rein hardwaremäßig  -  softwa-
remäßig  sind es sogar noch mehr) unter-
scheiden 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  Pro-
zessor  so nicht ständig auf das Eintre-
ten 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  Hauptpro-
gramm - dann UNTERBRICHT und in ein Job-
programm zur Bearbeitung des  Interrupts
springt.                                
Ich möchte hier zur Verdeutlichung  ein-
mal 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ötz-
lich  klingelt  das  Telefon.  Bevor ich
aufstehe um zum Telefon zu  gehen  spei-
chere  ich  schnell  noch das bisher ge-
schriebene ab und merke mir vor, daß ich
nach  dem  Telefonat  unbedingt  weiter-
schreiben  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 Eintre-
ten 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,
X-  und Y-Register), den Prozessorstatus
(Speicherung des Textes) und den  Inhalt
des  Programmzählers (das Vormerken wei-
terzuarbeiten). Danach  springt  er  auf
eine Jobroutine, die er für das Eintref-
fen eines Interrupts parat hat  und  ar-
beitet  diese dann ab (ich führe ein Te-
lefonat). Ist er am Ende dieser  Routine
angelangt,  so holt er sich Programmzäh-
ler, Status- und Prozessorregister  wie-
der  ins  Gedächtnis  zurück (Erinnerung
weiterzuarbeiten und wiedereinladen  des
Textes) und setzt seine alte Arbeit wie-
der fort.                               
Diesen  ganzen  Vorgang  erledigt er mit
einer derart  affenartigen  Geschwindig-
keit,  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  vo-
neinander,   scheinbar  gleichzeitig  zu
erledigen - so auch das  Betriebssystem,
das, während es in der Hauptschleife auf
Tasteneingaben wartet, über einen Inter-
rupt den Cursor weiterhin blinken  läßt.
Die   Möglichkeiten   hier   sind   sehr
vielfältig, wie wir noch  bemerken  wer-
den.                                    
4) Der Timer-Interrupt:                 
                                        
-----------------------                 
Soviel zu den Vorgängen innerhalb  unse-
res  Rechners.  Nun  möchte ich mich ein
wenig mit den Unterschieden zwischen den
drei Interruptarten beschäftigen.       
Wir  haben also insgesamt drei verschie-
dene Unterbrechungen. Eine  davon,  näm-
lich der IRQ wird Ihnen vielleicht, wenn
auch  unbewußt,  vielleicht schon nur zu
gut bekannt sein. Er wird vom CIA1  aus-
gelöst und vom Betriebssystem für inter-
ne, cyklische Aufgaben  verwendet.  Des-
halb  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  Ti-
merinterrupt.  Bevor  ich mich jetzt je-
doch  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  Zu-
kunft häufiger benutzen werden.         
Valid HTML 4.0 Transitional Valid CSS!