Z80-CPU (in der DDR U880D) und weiter Äquivalente history menue Letztmalig dran rumgefummelt: 14.03.25 09:55:53
Implementiert in ein 40-poliges DIL-Gehäuse präsentiert sich die Z80-CPU mit einem 8 Bit breitem Daten-BUS als Aritmetic-Logical Unit mit 158 Basisbefehlen (insgesamt 796 Befehle) mit 3 leitungsfähigen Interruptmodi und einem linear adressierbarem Speichervolumen von 64 KByte (das entspricht 65536 Adressen). Die CPU verfügt über nur eine 5 Volt-Versorgungsspannung, einen Einphasentakt. Alle Ausgänge sind TTL-kompatibel und können eine Standardlast treiben. Bedingt durch die statische Arbeitsweise dieser CPU ist das Analysieren dieses Prozessors mit minimaler Frequenz (Extremfall 0 - das entspricht durch Hand getaktet) möglich.

Z80-System

UNIX & Windows war gestern - Z80 ist heute!!!

Z80-CPU

 

inhaltlich auf korrektem Stand - evtl. partiell unvollständig ;-)

Wissen für Fortgeschrittene der Informatik

Informatik-Profi-Wissen

  1. Blockschaltbild und technische Daten
  2. Registersatz und FLAG-Wirkungen
  3. Grundlagen der Befehlsabarbeitung
  4. Befehlssystem des Z80 oder auch U880D ;-)
  5. Schaltpläne und Startprogramm-Listings
  6. Vergleichslisten
  7. Z80-Fan-Club
  8. Verwandte Themen

Warum fiel die Wahl für die Unterrichtsarbeit ausgerechnet auf den Z80 bzw. sein System? Dieser Prozessor sowie sein System vereinigt eine Reihe positiver Merkmale für den Rechentechnik-Einsteiger:

  • alles funktioniert im Prinzip bis heute unverändert - anders geworden sind: 
    • wesentlich höhere Taktfrequenzen - die spielen aber eh' erst bei komplexen Algorithmen eine Rolle ;-)
    • Cache
    • Befehlspipeline
    • verbesserter Befehlssatz
    • RISC-Architekturen
  • 30-jährige Einsatzzeit und nicht totzukriegen
  • kostengünstig zu beschaffen
  • zwischenzeitlich als CMOS-Bauelement mit modernen Taktfrequenzen und als Einchipsystem verfügbar und weiterhin entwickelt
  • Programme selbst mit professionellen Betriebssystemen (CPM) verfügbar (ausgetestet und fehlerfrei: PASCAL-Compiler, Word-Star, dBase liefen auf Z80!!!)
  • statischer Prozessor - das heißt, Taktrate niedrig oder ganz STOPP (nicht WAIT - das's was and'res!) - so was geht hier wirklich noch!!!
  • "einfaches" Verständnis für die Grundlagen der Prozessorarbeit und Befehlssatz, da Adressraum noch mit 64K linear - ein unschätzbarer Vorteil für alle Assemblerprogrammierer!!!
  • ... doch - das ist noch einfach: alles weitere ist etwas komplexer ;-)

1. Blockschaltbild und technische Daten der Z80-CPU history menue scroll up
Der Z80-Prozessor, seine Peripherie, wohl aber auch seine Weiterentwicklungen ganz aktuell, haben ihn zu einem der langlebigsten Fossilien der Prozessortechnik überhaupt mutieren lassen.  Er ist bildet im Gegensatz zu Controllern ein sagenhaftes Einsatzspektrum und liegt von der Leistungsfähigkeit weit über diesen. Und nicht zu vergessen: jeder klassische IT-Ingieur kennt und liebt das letzte Stück Elektronik, für welches noch fehlerfreie Betriebssysteme verfügbar waren.

Blockschaltbild in Feingliederung der Z80 CPU

Z80-Innenleben

Z80-Innenleben im CorelDraw 11-Format zum Download

Programmzustandstabelle Z80 vollständig mit Register sowie Hauptspeicher

Programmzustandstabelle Z80 vollständig zum Download im CoreDraw 11.0-Format

Z80-ASide-Assembler

Der LC-80 Emulator zum direkten Starten

Funktionsbeschreibung 
Pinbelegung 
Technische Daten
Taktdiagramme
Kurzruf- und Interruptfunktion
Schaltpläne
Stack-Funktion bei Unterprogramm-Aufruf sowie PUSH und POP-Befehlen
Interrupt-Funktion der Z80-CPU

2. Registersatz der Z80 CPU (oder CPU U880) sowie die FLAG-wirkung der Z80-CPU-Befehle history menue scroll up
Die Register, ihre Anzahl, ihre Bit-Breite, ihre Flag-Beeinflussung, ihre Möglichkeit, als Akkumulator agieren zu können - das macht neben der Taktfrequenz im Wesentlichen die Leistungsfähigkeit einer x-beliebigen CPU aus.

FLAG-Beeinflussung der Z80-CPU Befehle

in ihrer Funktion sind die einzelnen8-Bit-Register durchaus nicht gleichrangig - das sieht man dann auch aus den entsprechenden Befehlslisten
unbestritten ist der Akkumulator A (das wichtigste Register!) jeweils einer der Operanden, häufig jedoch auch Ziel arithmetischer und logischer Operationen
Register B wird für einige Befehlen automatisch als Abwärtszähler genutzt (Jump relative on ...)
Registerpaar DE ist die Datensenke für mehrfache Operationen auf dem Speicher oder auf Ports von Peripherieelementen
Registerpaar HL ist Ziel für Datenverschiebungen
Registerpaar HL und DE sind untereinander leicht austauschbar (EX DE,HL), wobei HL mit Sicherheit das wichtigere Registerpaar ist (Kurzbezeichnung oft M)
beachten Sie immer, dass sie zwischen Haupt- und Alternativregistersätzen umschalten können

Vollständiger Z80-Registersatz

Übersicht 8-Bit-Register  - Detail-Darstellung
Übersicht 16-Bit-Register  - Detail-Darstellung
Übersicht FLAG-Register  - Detail-Darstellung sowie Wirkungsbedingungen
Haupt- und Alternativ-Registersatz können mit einem Befehl umgeschalten werden
alle 8-Bit Ergebnisse arithmetischer Operationen stehen grundsätzlich im Akkumulator - dies trifft auch für Daten mit Quelle Peripherie zu
zwei 8-Bit-Register können funktional zu einem 16-Bit-Register zusammengefasst werden

Flags (Flag-Register, Condition Code Register)

Direkt an die ALU angeschlossen sind einige (getrennte) Flipflops bzw. ein ganzes Register, in denen sogenannte Zustandsbits (auch: Kennzeichenbits) gespeichert werden. Sie sind für viele Aufgaben der Programmabarbeitung von großer Bedeutung. Beispielsweise können mit ihrer Hilfe bedingte Sprünge (Verzweigungen) programmiert werden, die vom logischen Zustand der o. g. Flipflops (Bedingungs-Flipflops, Flag-Flipflops) bzw. des Registers (Bedingungsregister, Flag-Register) abhängen.
Die Flags signalisieren und speichern, ob das Ergebnis einer in der ALU vorgenommenen Rechenoperation einen Übertrag, ein negatives Vorzeichen u. ä. ergab. Folgende Zustandsbits sind typisch :Übertrag (C), Null (Z), Vorzeichen (S), Parität (P). 
Akkumulator. Der Akkumulator ist ein aus mehreren Flipflops bestehendes Register für spezielle Anwendungen. Die Anzahl der Flipflops entspricht der Wortlänge des Mikroprozessors. Normalerweise speichert er einen Operanden, der in der ALU verarbeitet 
werden soll. Aber auch das. Ergebnis einer arithmetischen bzw. logischen Operation wird ihm zugeführt.
Zusätzlich zum Akkumulator enthält der Mikroprozessor weitere Datenregister (Scratch pad memory), die der Programmierer zur Zwischenspeicherung von Daten nutzen kann. Die Befehlsausführungszeit beim Zugriff zu diesen Registern ist kürzer als bei der Speicherung von Daten im äußeren RAM. Da bei arithmetischen und logischen Operationen oft ein „Übertragsbit" auftritt, das der Akkumulator verliert, wird dieses in einem der Bedingungs-Flipflops (Flags) gespeichert, speziell im Übertrags-Flipflop (Carry-Flag). Dieser Fall tritt beispielsweise beim Rechts- oder Linksschieben des Akkumulatorinhalts auf 

Programmzähler (PC Programm counter)

Der Programmzähler (auch Befehlszähler genannt) sorgt dafür, dass der Mikroprozessor stets weiß, unter welcher Adresse der nächste zu holende und zu verarbeitende Befehl zu finden ist. Zu Beginn einer Programmabarbeitung wird er in der Regel nullgestellt und während der Abarbeitung jedes Befehlsbytes um Eins erhöht, da das Programm normalerweise in aufeinanderfolgenden Speicheradressen enthalten ist. Eine Abweichung vom üblichen inkrementellen Ablauf tritt bei Sprungbefehlen auf. Hierbei wird der Programmzähler mit derjenigen Speicheradresse geladen, zu der gesprungen werden soll. Ein 16-bit-Programmzähler kann 216 = 65 536 Speicherplätze adressieren.

Stack (Stapelspeicher, Kellerspeicher)

Bei Unterprogrammen (Subroutinen) oder bei der Ausführung von Programmunterbrechungen (Interrupt) führt das Programm Sprünge zu Adressen aus, die sich u. U. weit entfernt vom jeweiligen Programmzählerinhalt befinden.
In diesen Fällen muss der Programmzählerstand (nachdem er um Eins erhöht wurde) unmittelbar vor der Ausführung des Sprungbefehls zwischengespeichert werden, damit das Hauptprogramm nach Beendigung des Unterprogramms bzw. der Interruptbearbeitung an der richtigen Stelle, d. h. bei der Rückkehradresse, fortgesetzt wird. Die Rückkehradressen lassen sich auf zwei unterschiedliche Arten speichern:

  1. in einem aus mehreren Registern bestehenden Adressenstapelspeicher (Kellerspeicher, Stapelregister, Stack) innerhalb der CPU (z.B. U 808)
  2. in einem speziell reservierten Speicherbereich des äußeren Arbeitsspeichers (RAM) in Verbindung mit einem Stapelzeiger (Stackpointer, z. B. U 880, 8080), d. h. außerhalb der CPU.

Unterprogramme kommen geschachtelt vor, d. h., mehrere Unterprogramme können ineinander eingelagert sein. In diesem Fall müssen zeitlich nacheinander mehrere Rückkehradressen zwischengespeichert werden. In jedem Register des Stack bzw. in jeder Speicherzelle des vom Stapelzeiger adressierten RAM-Bereiches lässt sich eine Rückkehradresse speichern. Deshalb bestimmt die Anzahl der Register im Stack bzw. die Bitanzahl des Stapelzeigers die Tiefe der Verschachtelung von Unterprogrammen (Bild unten).

Arbeitsweise des Adressenspeichers (Stapelspeicher, Stack) bei 2-Byte-Adressen

Die Rückkehradressen werden bei mehrfach verschachtelten Unterprogrammen in umgekehrter Reihenfolge benötigt als beim Einspeichern. Deshalb ist der Adressenstapelspeicher als LIFO-Stack (last in first out) aufgebaut.
In das obere Register wird eine Information eingeschrieben. Dabei rücken alle Registerinhalte eine Etage tiefer (PUSH-Operation). Beim Auslesen (POP-Operation) rücken alle Registerinhalte wieder eine Etage nach oben, d. h., der Inhalt des oberen Registers, in das zuletzt eingeschrieben wurde, wird ausgegeben (Bild 13.9).
Der Inhalt des untersten Stackregisters geht beim Einschreiben einer Information in das oberste Register verloren, falls er nicht durch spezielle Maßnahmen ins äußere RAM gerettet wird.
Mit einem Stapelzeiger und der Speicherung von Rückkehradressen im äußeren RAM läßt sich eine nahezu unbegrenzte Verschachtelungstiefe erzielen. Die Adresse der Speicherzelle, in der sich die jeweils aktuelle Rücksprungadresse befindet, ist im Stapelzeiger enthalten. Der Stapelzeigerinhalt wird bei jedem Sprung in ein Unterprogramm um Eins erniedrigt und bei jedem Rücksprung aus einem Unterprogramm um Eins erhöht. (Beim Mikroprozessor U 880 wird der Stapelzeiger um 2 erniedrigt bzw. erhöht, da die Adresse aus 2 Bytes besteht.)

Arbeitsweise des Adressenspeichers (Stapelspeicher, Stack) bei 1-Byte-Adressen

Speicherorganisation

Die Speicher des Mikrorechners sind wortorganisiert. Jeder Speicherplatz enthält ein Wort und wird durch seine Adresse identifiziert (siehe Abschnitt Speicher).
Befehlsregister und -dekoder. Bei der Befehlsabarbeitung holt der Mikroprozessor zunächst einen Befehl aus dem Programmspeicher und speichert ihn bzw. (bei Mehrbyte-Befehlen) das erste Byte des Befehls im Befehlsregister. Der Befehl ist im Binärkode gespeichert. Damit er in „Aktionen" umgesetzt werden kann, muss er zunächst dekodiert werden.

Steuerschaltung

Die Steuerschaltung sorgt für einen exakten zeitlichen Ablauf aller Operationen und für die Ausführung des jeweiligen Befehls. Nach der Befehlsdekodierung werden die Verbindungen innerhalb der CPU so gesteuert, dass für jede Befehlsausführung eine spezielle Hardware-Struktur wirksam ist. Vereinfacht kann man sich dies so vorstellen, als würde nach jedem neuen dekodierten Befehl innerhalb der CPU eine Verdrahtungsänderung vorgenommen.
Bustreiber. Damit an die Busanschlüsse möglichst viele äußere Einheiten anschließbar sind, wird zwischen den internen und den äußeren Bus ein Bustreiber geschaltet. Beim Datenbus muss dieser Bustreiber die Signale in beiden Richtungen verstärken und übertragen (Zweirichtungsbustreiber).
Bei Einchip-Mikroprozessoren mit relativ wenigen Gehäuseanschlüssen (U 808: 24 Anschlüsse) wird ein gemeinsamer Bus (z. B. 8-bit-Bus beim U 808) zur Übertragung von Daten (in beiden Richtungen), Adressen (2-Byte-Adressen beim U 808) und Steuersignalen benutzt. Die Befehlsausführungszeit ist hierbei natürlich unter gleichen übrigen Bedingungen größer als bei Mikroprozessoren mit getrenntem Adress- und Datenbus (U 880, 8080 u. ä.), weil im ersten Falle ein größerer Anteil von Informationen zeitlich nacheinander übertragen werden muss.


3. Grundlagen der Befehlsabarbeitung history menue scroll up
Basis der Befehlsabarbeitung aller Mikrorechner ist eine stabile Taktung. Das war in den Gründerjahren der Radio-Technik (... Computer führen die Technologie des Radios auf höherer Ebene fort) ein echtes Problem. Nicht das die Zusammenhänge unbekannt gewesen wären - seit Heinrich Herz wissen wir, wie wie ein Schwingkreis berechnet werden kann, aber in den Anfangsjahren der Radiotechnologie war die Änderung der Ausgangsfrequenz (... also das, was Du heute mit der Senderauswahl - natürlich gerne auch automatisch tust) ein gigantisches Problem. Da waren keine Sendernamen in der Skala des Radios. da gab es einen kleinen Kasten mit "Schwingquarzen" sowie dem Namen des Senders, unter welchem diese erreichbar waren.

Arbeitszyklen des Prozessors - siehe auch hier ...

... oder ganz genau auf Z80 - hier:

 Taktdiagramm Clock-Point

Z80-CPU-Taktdiagramme - so sehen dir Signale real aus ;-)


Die Befehlsabarbeitung in einem Mikroprozessor erfolgt in einem streng geregelten zeitlichen Rhythmus. Jeder Befehlszyklus besteht aus aufeinanderfolgenden Grundoperationen wie z. B. Befehl holen, Speicher lesen, Speicher schreiben usw. Die Grundabläufe 
lassen sich hinsichtlich ihrer Länge und ihres Umfangs in folgende 3 Gruppen einteilen: 

  1. T-Zustand (T-State) Er ist der kleinste Operationsschritt der CPU und häufig identisch mit der Periodendauer der Taktimpulsfolge (U 880, 8080) bzw. mit der doppelten Taktperiodendauer (U 808)
  2. M-Zyklus, Maschinenzyklus, Operationszyklus (machine cycle) Der M-Zyklus umfasst eine abgeschlossene Teiloperation eines Befehls, z. B. den Holzyklus, Lesezyklus. Der M-Zyklus setzt sich aus mehreren T-Zuständen zusammen. 
    Ein M-Zyklus wird stets benötigt, wenn eine Speicherzelle oder ein E/A-Baustein adressiert werden soll. Der erste M-Zyklus eines Befehls ist stets ein Operationskode-Holzyklus (fetch-cycle). Er holt den Operationskode des Befehls aus dem Programmspeicher in die CPU.
  3. Befehlszyklus (instruction cycle) Das ist die Zeitspanne für die Abarbeitung eines kompletten Befehls (Befehl lesen und Befehl. ausführen). Jeder Befehlszyklus besteht aus einem oder aus mehreren M-Zyklen. Er umfasst stets mehrere T-Zustände. Bild unten zeigt einen aus drei M-Zyklen bestehenden Befehl der CPU U 880. Der Operationskode-Holzykles wird beim U 880 als M1-Zyklus bezeichnet.

Für das Zusammenschalten mit äußeren Geräten, für Prüfzwecke usw. sind bei Mikroprozessoren Steuersignale nach außen geführt, die signalisieren, in welchem Maschinenzyklus und in welchem T-Zustand sich der Mikroprozessor gerade befindet.

Abarbeitung eines Befehls

Befehlsaufbau der Z80 CPU

Typische Befehle umfassen 1 ... 3 (einige 4!) Bytes. Aufeinanderfolgende zu einem Befehl gehörige Bytes werden in aufeinanderfolgenden Adressen gespeichert. Die CPU erhält einen 3-byte-Befehl durch drei Holzyklen. Das erste aus dem Programmspeicher geholte Byte wird im Befehlsregister der CPU gespeichert. Es enthält den Operationskode, d. h. die kodierte Steueranweisung für die ALU. Die folgenden 1-3 Bytes gelangen meist in andere Register der CPU.

Folgende hauptsächlichen Aktivitäten laufen in einigen ausgewählten Maschinenzyklen des Mikroprozessors U 880 ab:

  • der PC-Inhalt wird zu Beginn des M1-Zyklus auf den Adressbus gelegt
  • die Steuersignale MREQ und RD werden in der Mitte des T1-Zustandes aktiv (Speicherfreigabe CE = MREQ und RD = 1)
  • die CPU übernimmt mit der L - H-Flanke des Taktimpulses T3 die auf dem Datenbus befindlichen Daten in ihr Befehlsregister; gleichzeitig werden die Signale MREQ und RD inaktiv
  • die Taktzustände T3 und T4 dienen der internen Befehlsdekodierung und -ausführung sowie in Verbindung mit RFSH = L dem Auffrischen dynamischer Speicher (die 7 niederwertigen Bits des Adressbusses stellen die Auffrischadresse dar)

4. Befehlslisten der Z80-CPU - beachten Sie die Gruppierungen - es handelt sich in jeder Liste um 796 Befehle - die einzelnen Listen unterscheiden sich nur in ihrer Sortierung history menue scroll up
Der Befehlssatz des Z80-Prozessors ist für sein Alter schon recht umfangreich ohne das man sofort verkennen kann, dass ein Akkumulatorregister extrem wenig ist. In der Konsequenz steigt somit die Anzahl der notwendigen Daten-Umschaufel-Operationen. Trotzdem: für seine Zeit - und wir sprechen von 1968 (da lag das Baby in den Entwicklungslabors bei Zilog) war das schon ein Renner.

Original-Befehlsliste aus dem LC-80 - gescannt (also Original und damit fehlerfrei)

FAQ - The Most Wanted Requested Commands ;-)
Tallarische Befehlsliste und deren Aktualisierung sowie der Schnellversteh-Blockaufbau für die Hosentasche - leider sehr alt und gebraucht ;-) - leider nicht ganz vollständig (kanns'de aber vergessen - sind seltene Befehle)

Word-Dokument der alphabetischen Liste des Z80 Befehlssatzes

WORD-Dokument der Alphabetischen Liste - Achtung - kleine Fehler in selten benötigten Befehlen - laufend aktualisiert!

die beliebte alphabetisch sortierte Schnell-Liste

die beliebte numerisch sortierte Schnell-Liste

Allgemeine FLAG-Wirkung

FLAG-Wirkung auf OP-Code-Gruppen

Alphabetisch sortierte Dokumentation

FLAG Teile I

FLAG Teile 2

WORD-Dokument der numerischen -Liste - Achtung - kleine Fehler in selten benötigten Befehlen - laufend aktualisiert!

Allgemeine Funktionssymbolik


5. Schaltpläne und Startprogramme history menue scroll up
Hier nun wird sich schon in nächster Zeit sicherlich einiges tun, denn wir haben den Prozessor für ein halbes Jahr lang auf unsere Arbeitsliste gesetzt und jeder Schüler ist verpflichtet, etwas sinnvolles dazu bei zu tragen. Also wird sich auch der Pool der möglichen Schaltungsapplikationen vermutlich schnell füllen ;-)

Schaltplansymbol der Z80 CPU

Schnelle Datenbus-Richtungslogik
Datenbus-Richtungslogik bei Einsatz eines DMA-Controllers

6. Äquivalenztypen

Die Äquivalente unterscheiden sich durch Taktfrequenz und Betriebsstrom teilweise erheblich voneinander. Zu empfehlen sind die CMOS-Typen.

Klasse/Technologie Bauelemente-Typ Funktion

n-Kanal-MOS

Z80A-CPU 8-Bit-Mikroprozessor 4 MHz
n-Kanal-MOS Z80B-CPU 8-Bit-Mikroprozessor 2 MHz
CMOS Z84C00-06MHz 8-Bit-Mikroprozessor 6 MHz
CMOS Z84C00 8-Bit-Mikroprozessor 10 MHz

8. Verwandte Themen history menue scroll up

Was ist alles mit dem Betriebssystem eines Microcomputers verwandt? Antwort: faktisch der gesamte Bereich der Digitalelektronik und sowieso die gesamte Technik der Software-Technologie der Vergangenheit, Gegenwart sowie zumindest der nächsten Zukunft.

Der LC-80 Simulator

POLYCOMPUTER

Z80-CPU

Mnemonic-Code-Notation

höhere Programmierwerkzeuge

... und so funktioniert ein Computer

 



zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost im Oktober 1998

... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-)

„Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“

Diddi Hallervorden, dt. Komiker und Kabarettist