Nascom Journal

  

Oktober/November 1982 · Ausgabe 10/11


Interruptmöglichkeiten 8080 abgedeckt werden. Daneben ließ man sich natürlich auch noch etwas neues einfallen.

Das Ergebnis sind drei verschiedene Interrupt-Modes, mit denen der Z80 laufen kann und die vorher entsprechend mit dem Befehl „IM mode“ (mode = 0, 1, 2) eingestellt werden müssen. Zuvor aber noch einen Blick auf die Hardware. Nachdem an jedem zusätzlichen Pin gespart werden muß, kann also nicht für jeden Interrupt ein eigener Anschluß an der CPU vorgesehen werden. Beim Z80 wurden für diesen Zweck lediglich zwei Pins spendiert. 1.) Der Eingang „NMI“ = nicht maskierbarer Interrupt. Eine Unterbrechung an diesem Pin kann nicht maskiert, d.h. softwaremäßig nicht unterdrückt werden und besitzt somit die höchste Dringlichkeitsstufe. Die Interrupt-Bedienroutine muß bei Adresse 66H liegen, d.h. die Verzweigung dorthin ist hardwaremäßig vorgegeben und deshalb auch besonders schnell. Die Interrupt-Bedienroutine muß beendet werden mit dem Befehl „RETN“.

2.) Der Eingang „INT“ dient als Sammelleitung sämtlicher anderer Interruptanforderungen. Dieser Eingang kann softwaremäßig durch die Befehle Interrupt-Enable und Interrupt-Disable gesperrt oder freigegeben werden. Als weitere Besonderheit ist das Verzweigen auf verschiedene Interrupt-Bedienroutinen möglich und das Priorisieren der verschiedenen Interrupts. Der letzte Begriff muß, da er eine ganz wichtige Rolle spielt, noch näher erklärt werden . Hierbei geht es um die Fragestellung, welcher Interrupt vorrangig zu behandeln ist. Diese Frage ist vor der Realisierung zu klären und kann dann zu folgendem Ablauf führen: Der Prozessor, der gerade eine Unterbrechung bearbeitet, erhält die Meldung eines noch wichtigeren Interrupts. Daraufhin wird er das erste Interrupt-Bedienprogramm verlassen und den Interrupt mit der höheren Priorität zuerst behandeln. Danach kehrt er dann zum ersten Interrupt-Bedienprogramm zurück, beendet dieses, und danach kehrt er ins Hauptprogramm zurück. Bereits geübte Programmierer erkennen eine Parallele zu den geschachtelten Unterprogrammaufrufen. Ein weiterer Vergleich mit Unterprogrammen ist möglich. Durch eine Unterbrechung wird,​wie beim CALL-Befehl, die Programmausführung an einem anderen Punkt fortgesetzt und danach wieder zur ursprünglichen Stelle zurückgekehrt. Und genau wie beim CALL-Befehl wird dafür der Programm-Zähler automatisch auf den Stack gerettet. Im Unterschied zum Unterprogramm muß beim Interrupt die entsprechende Routine mit dem Befehl „RETI“ (return from Interrupt) abgeschlossen werden.

Aber jetzt zurück zu den drei verschiedenen Interrupt-Modes, die den Eingang „INT“ betreffen. Mode 0: Dieser Mode entspricht genau der Interruptbehandlungsweise des 8080. Dabei muß neben dem Interruptsignal das unterbrechende Gerät auch den Datenbus bedienen. In der Regel wird dieses Gerät die Bitfolge eines Restart-Befehls auf den Datenbus legen. Der Prozessor holt also den nächsten Befehl nicht vom Speicher, sondern der nächste Befehl wird vom peripheren Gerät bestimmt. Speziell dafür gibt es die Ein-Byte-Befehle „RST“, die gleichzeitig die Startadressen der Bedienroutinen enthalten. Da dieser Befehl nur ein Byte lang ist, sind damit nur 8 Interrupt-Bedienroutinen auswählbar, deren Startadressen im Bereich 0 – 38H liegen. Wegen dieser eingeschränkten Möglichkeit wird man diesen Mode also nur verwenden, wenn bereits vorhandene 8080-Programme ablaufen sollen.

Mode 1: Auch dieser Mode dient zur Herstellung der Kompatibilität zum 8080 und verzweigt zu einem Bedienprogramm, das bei Adresse 38H beginnen muß.

Mode 2: Dieser Mode bietet die umfassendsten Verzweigungsmöglichkeiten und muß in Verbindung mit den E/A-Bausteinen des Z80 gesehen werden (PIO, SIO, CTC, DMA). Auch im Mode 2 muß beim Interrupt der Datenbus bedient we/den. Da die externen Geräte dazu meist nicht in der Lage sind, wird der Interrupt zuerst zu einem dieser programmierbaren E/A-Bausteine geleitet und diese Bausteine übernehmen dann die Weitergabe des Interrupts an die CPU und die Bedienung des Datenbuses. Eine weitere Funktion liegt noch in diesen E/A-Bausteinen: nämlich die Priorisierung. Diese Bausteine sind ähnlich den Perlen einer Kette durch eine Leitung miteinander verbunden, wobei der Baustein, der in dieser Kette an oberster Stelle liegt, den höchstwertigen Interrupt erzeugt und gleichzeitig alle darunterliegenden Bausteine daran hindert, gleichzeitig einen Interrupt zur CPU zu senden. Damit ist das Problem der Priorisierung hardwaremäßig gelöst.

An einem Beispiel soll jetzt der weitere Ablauf einer Interruptmeldung beschrieben werden. Eine PIO (paralleler E/A-Baustein) erhält von einem externem Gerät die Interruptmeldung. Die Hardware-Priorisierung bestimmt jetzt, ob dieser Interrupt zur CPU weitergeleitet werden

Seite 9 von 28