|
Der Mikroprozessor U 880Der in der DDR am häufigsten eingesetzte Prozessor war der U 880. Er war die DDR-Variante des Z 80 von Zilog. Man fand ihn in förmlich jedem Gerät, welches annähernd mit Computer zu tun hatte, wieder. Er war in Computerbausätzen, Bürocomputern vorhanden, man konnte ihm bei der Prozeßautomatisierung begegnen und natürlich war er auch das treibende Herz in den Kleincomputern angefangen vom Z 1013 bis hin zum KC Compact. Aus diesem Grunde soll der U880 näher beleuchtet werden. Nachfolgende Aufzeichnungen entstammen zum Großteil privaten Aufzeichnungen und natürlich "dem Buch zum U 880" mit dem Titel "8-Bit-Mikrorechentechnik" [Bar88] von Bäurich/Barthold aus dem Militärverlag der Deutschen Demokratischen Republik. |
Der U880RegisterstrukturDer U 880 ist ein in NMOS [n-Channel Metal Oxide Semiconductor] Technologie gefertigter LSI [Large Scale Integration] Schaltkreis. Er besitzt einen bidirektionalen 8-Bit-Datenbus von dem aus alle Register erreichbar sind und einen 16 Bit breiten Adreßbus.Der Registersatz umfaßt:
bei logischen Operationen: Anzahl der Einsen im Ergebnis ist gerade bei Rechenoperationen: Überlauf ist aufgetreten ProzessorstartFür den Start des Prozessors existieren drei Möglichkeiten, wobei eine der RESET darstellt. Der Startimpuls kann ausgelöst werden über:
Befehle1 bis 4 Byte benötigt man zur Darstellung eines Befehles, der aus Operationsteil und Adreßteil besteht, dabei kann der Operationsteil 1 bis 3 Byte und der Adreßteil 1 bis 2 Byte lang sein. Meist hat der Operationsteil eine Länge von einem Byte. Bei 2 Byte Länge gibt das 1. Byte die Befehlsgruppe an, 2. und 3. Byte kennzeichnen einen speziellen Befehl innerhalb dieser Gruppe.Eine tabellarische Übersicht ist im Anhang E.1 zu finden. Zu jedem Befehl gehören ein bis zwei Operanden. Für Operanden gibt es die unterschiedlichsten Speicherorte:
AbarbeitungDie Abarbeitung eines Befehls läßt sich in mehrere Schritte unterteilen, wobei die einzelnen Arbeitsgänge in Maschinenzyklen ausgeführt werden. Diese einzelnen Arbeitsgänge umfassen: den Befehl holen, den Befehl entschlüsseln, den Operanden holen, den Befehl ausführen und die Adresse des nächsten Befehls ermitteln.Ein Maschinenzyklus wird charakterisiert durch die Befehlssignale, die aus der Befehlsentschlüsselung hervorgehen. Interne Steuersignale entstehen wie schon erwähnt aus dem Hinzufügen von Zeitsignalen zu den Befehlssignalen. Diese Steuersignale steuern die Abarbeitung in Form von Registertransporten. Zur Steuerung des Datentransfers mit angeschlossenen Bausteinen werden gleichzeitig äußere Steuersignale gebildet. Gleichzeitig zur Abarbeitung interner Prozessorfunktionen erfolgt in einem Maschinenzyklus auch der Zugriff auf den Bus, daher gibt es verschiedene Funktionen, die ein Maschinenzyklus erfüllen kann:
Hierzu ein Beispiel. Maschinenzyklen zum Lesen eines Byte aus dem SpeicherDer zum Lesen eines Byte durchzuführende Befehlszyklus umfaßt das Holen des Operationcodes und das Lesen des Speichers.Der Befehlszähler enthält zu Beginn die Adresse des Operationscodes. Bei fallender Flanke von T1 werden die Signale /MREQ und /RD aktiv, d.h Memory Request, also Anforderung zum Speicher und Read, eine Lese-Operation soll ablaufen. Das Einlesen geschieht mit der Vorderflanke während T3. Während der Zyklen T3 und T4 liegt eine Auffrischadresse für dynamische Speicher am Adreßbus an - an den Adreßbits A0 bis A6, die restlichen Bit sind 0 und das Signal /RFSH ist aktiv. Ist bei einer Rückflanke im Zustand T2 das /WAIT aktiv, so wird nach T2 solange ein Wartezyklus eingeschoben, bis /WAIT inaktiv wird. Zu Beginn des Speicher-Lesezyklusses, ausgelöst durch die Taktvorderflanke
in T1, wird die Speicheradresse auf den Adreßbus gelegt.
Die Rückflanke in T1 aktiviert die Signale /MREQ und /RD.
/MREQ wird zur Ansteuerung des betreffenden Speichers genutzt, /RD schaltet
den Speicher auf Lesen. Bei der Taktrückflanke in T2 wird
das Signal /WAIT abgetastet. Bei aktiven /WAIT wird nach T2
ein Wartezyklus eingefügt. Während des Wartezyklusses bleiben
die Adressen am Adreßbus und die Daten am Datenbus erhalten. Bei
der nächsten Taktrückflanke wird die Abfrage von /WAIT wiederholt
und gegebenenfalls erneut ein Wartezyklus eingefügt. Bei nicht mehr
aktivem /WAIT wird der Zustand T3 eingenommen. Während
des Taktes in T3 werden die Daten vom Speicher in den Prozessor
übernommen und mit der Taktrückflanke werden /MREQ und /RD abgeschaltet.
|
Interrupt - BetriebInterrupt - TypenDer U 880 kennt zwei Interrupteingänge, den maskierbaren (INT) und den nicht maskierbaren Interrupt (NMI). Maskierbar bedeutet, daß ein Öffnen und Sperren des Eingangstores durch das Programm mittels den Befehlen EI bzw. DI geschehen kann. Der maskierbare Interrupt wird zum Aufbau umfangreicher Unterbrechungsschaltungen genutzt. Zur Steuerung des Eingangstores INT dienen die im Prozessor enthaltenen Flip-Flop IFF1 und IFF2. IFF1 steuert das Eingangstor unmittelbar, ist es eingeschaltet, ist das Tor offen, ist es ausgeschaltet, ist das Tor geschlossen. IFF2 dient als Zwischenspeicher für IFF1 für den Fall, das ein Signal über den NMI-Eingang kommt. Der NMI wird für besonders wichtige Ereignisse verwendet und hat daher die höchste Priorität und unterbricht in jedem Fall das laufende Programm. Ab Adresse 66H muß ein Bedienprogramm stehen, da der NMI immer dort sein Programm startet.Nach Auftreten eines Signals an einem der beiden Interrupteingänge wird der laufende Befehl abgearbeitet und danach der Interruptzyklus ausgeführt. Dieser bereitet den Übergang zu einem entsprechenden Bedienprogramm vor - anschließend wird es ausgeführt. Beeinflussung der Flip-Flops IFF1 und IFF2Hier sei die Wirkung von Befehlen und Signalen auf die Flip-Flops aufgeführt.
AblaufJeder Interrupt, sowohl NMI (Anhang E.2) als auch INT (Anhang E.3), schaltet als erstes IFF1 aus, nachdem das laufende Programm unterbrochen wurde. Der Unterschied zwischen dem nicht maskierbaren und dem maskierbaren Interrupt besteht darin, daß bei einem nichtmaskierbaren Interrupt NMI IFF1 zuvor nach IFF2 gerettet wird. Nach Beendigung des Bedienprogramms für den NMI wird IFF2 nach IFF1 zurückgeschrieben.Der Übergang in das Bedienprogramm für NMI und INT unterscheidet sich folgendermaßen:
Während des Interrupt-Zyklusses wird ein 8-Bit-Wort eingelesen und sofort im Zusammenhang mit RST z ausgeführt. RST z ist ein 1-Byte-CALL-Befehl zu der Adresse z, die hier den vom Datenbus eingelesenen Wert darstellt. MODE 1 verhält sich ähnlich einem nichtmaskierbaren Interrupt NMI, mit dem Unterschied, das der Sprung zur Adresse 38H führt - also CALL 38H. Hier wird die Adresse aus dem I-Register und dem eingelesenen 8-Bit-Wort vom Datenbus, dem Interrupt-Vektor, gebildet. Die Produktionsvorschrift lautet demnach: Adresse = I-Register, Interrupt-Vektor. Der Inhalt des I-Registers bildet somit den höherwertigen Teil, während der Interrupt-Vektor den niederwertigen Teil bereitstellt. Diese hier konstruierte Adresse zeigt auf eine Speicherzelle, deren Inhalt als Argument für einen CALL-Befehl dient -> CALL <I-Register, Interrupt-Vektor>.
|
|