Z80 PIO (in der DDR U855) in CMOS-Architektur Z84C30 history menue Letztmalig dran rumgefummelt: 27.09.20 11:44:06
Implementiert in ein 40-poliges DIL-Gehäuse präsentiert sich die Z80-PIO mit einem 8 Bit breitem Daten-BUS, 3 leitungsfähigen Interruptmodi und einem linear adressierbarem Speichervolumen von 64 KByte (das entspricht 65536 Adressen). Die PIO verfügt über nur eine 5 Volt-Versorgungsspannung, einen Einphasentakt. Alle Ausgänge sind TTL-kompatibel und können eine Standardlast treiben.

Z80-System

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

Z80-PIO

 

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

Wissen für Fortgeschrittene der Informatik

Informatik-Profi-Wissen

  0. Vorläufer des Z80-PIO
  1. Blockschaltbild und technische Daten
  2. Portstruktur
  3. PIO-Programmierung
  4. Handshake-Prinzip und Interruptprogrammierung
  5. Schaltpläne und Startprogramm-Listings
  6. 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
  • 50-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, da Adressraum noch mit 64K linear - ein unschätzbarer Vorteil für alle Assemblerprogrammierer!!!

1. Blockschaltbild und technische Daten history menue scroll up
Zwei voneinander unabhängige - allerdings nicht komplett identisch funktionierende Ports stehen pro Baustein mit einer fest verdrahteten Adressierungslogik pro Baustein zur Verfügung. Theoretisch bis zu maximal 256 Bausteine können in einem System implementiert werden - dies wird praktisch so nie realisiert, da sich bedingt durch die Logikabarbeitung in der Prioritätenkette dann Probleme ergeben würden. Acht Bit pro Port, welche theoretisch auch noch zu 16 Bit in der jeweiligen Funktionalität zusammengefasst werden können, ergeben eine in sich, bezogen auf die die verfügbare Leitungsanzahl über theoretisch viele Kilometer (wobei natürlich elektrische Verstärker eine wesentliche Rolle spielen!), eine nahezu sagenhafte "Datendurchsatzrate". Leider stört die Entfernung, was dazu führt, dass wir dies heute anders "erledigen"!
PIO-Portstruktur ... mögliche elektrische Beschaltung beider PIO-Ports

Blockschaltbild der Z80 PIO

mögliche elektrische Beschatung der Ports

... das Projekt auch als CorelDraw-Datei im Format 11.0

Funktionsbeschreibung 
Pinbelegung 
Technische Daten
Taktdiagramme
Schaltpläne

2. Portstruktur der Z80 PIO (oder PIO U855D) history menue scroll up
... die Kernpunkte des jeweiligen Bausteins sind die beiden jeweils theoretisch 8 Bit breiten I/O-Ports.

Grundstruktur eines Z80-PIO-Ports

Der CPU-Buspuffer dient zur Anpassung der PIO-Daten- und -Steuerinformationen an das Standardzeitverhalten des U880 und ermöglicht eine direkte Zusammenschaltung beider Bauelemente. Die interne Steuerlogik überwacht in Abhängigkeit vom Systemtakt, von den CPU-Steuersignalen und vom Zustand der PIO-Quittierungssignale die Funktion der Einheit. Die Interruptsteuereinheit übernimmt in Auswertung der in den Portlogiken abgespeicherten Informationen, der an den Kanälen anliegenden Daten, des Zustands der Quittierungssignale und in Abhängigkeit externer Informationen die Anforderung von Interrupts an die CPU. Bild oben zeigt die innere Struktur eines der beiden Ein-/Ausgabe-Ports.
Das Betriebsartenregister ist ein 2-bit-Register, das durch ein Steuerwort (OUT-Befehl) vom Prozessor programmiert wird. Mit ihm wird eine der vier möglichen Betriebsarten des PIO-Ports (Byteausgabe, Byteeingabe, bidirektionaler Bytebetrieb bei Port A, Bitbetrieb) festgelegt.
Das Ausgaberegister dient in der Betriebsart Byteausgabe zur Zwischenspeicherung der Ausgabedaten. Es wird durch die CPU mit Hilfe eines Datenworts (OUT-Befehl) programmiert.
Das Eingaberegister dient analog hierzu in der Betriebsart Byteeingabe zur Zwischenspeicherung der Porteingabedaten. Die Übernahme dieser Daten wird durch die Quittierungslogik (Signal STB) gesteuert. Das Register kann vom Prozessor mittels einer IN-Instruktion als Datenwort gelesen werden. In der Betriebsart bidirektionaler Bytebetrieb dienen die Ein- und Ausgaberegister des Ports A zur bidirektionalen Datenübertragung. 
Die Steuerung hierfür wird von den Quittierungslogiken der Kanäle A (Datenausgabesteuerung) und B (Dateneingabesteuerung) übernommen. Port B muss in diesem Anwendungsfall in der Betriebsart Bitbetrieb verwendet werden, da hierfür keine Quittierungslogik erforderlich ist.
Das Ein-/Ausgabe-Wablregister ist ein 8-bit-Register, das in der Betriebsart Bitdatenaustausch zur Festlegung der Funktion der einzelnen Bits (Eingabe oder Ausgabe) dient. Es ist durch den Prozessor per Steuerwort programmierbar (OUT-Operation).
Die Portlogik beider Kanäle enthält neben diesen für den eigentlichen Datentransfer nötigen Registern weitere, die eine leistungsfähige gerätebezogene Interruptbearbeitung ermöglichen. Das Interruptfreigabeflipflop dient zur Sperrung bzw. Freigabe der Interruptfähigkeit des entsprechenden Ports und ist über ein Steuerwort von der CPU setz- oder rücksetzbar.
Das Vektorregister ist ein 8-bit-Register; es ist mit Hilfe eines Steuerworts programmierbar. In der Interruptbetriebsart IM2 des Prozessors U880 wird nach einer Interruptanmeldung und -quittierung eines systemzugehörigen Peripherieschaltkreises automatisch eine 16-bit-Unterprogrammstartadresse gebildet. Diese Startadresse wird aus zwei aufeinanderfolgenden Speicherplätzen entnommen (Low-Byte, High-Byte), die durch den Inhalt des 8-bit-CPU-Registers I und den sieben niederwertigeren Bits des Vektorregisters des unterbrechenden peripheren Geräts adressiert werden.
Es ist somit möglich, in Verbindung mit einer Prioritätsfestlegung mittels der „daisy-chain"-Kaskadierung ein sehr leistungsfähiges und automatisch wirkendes Interruptssystem anzuwenden. In den byteorientierten Betriebsarten des PIO erfolgt eine Interruptanmeldung nach Auswertung der Signale in der Quittierungslogik.
Dagegen erfolgt die Interruptanmeldung in der Bitbetriebsart nach Auswertung der anliegenden Portdaten. In dieser Auswertung dienen die Maskierungs- und Maskierungssteuerregister. Beide Register sind ebenfalls durch Steuerwörter vom Prozessor programmierbar. Mit dem 8-bit-Maskierungsregister wird festgelegt, welche der acht Datenlinien des entsprechenden Ports überhaupt für eine Interruptanmeldung verwendet werden. Das 2-bit-Maskierungssteuerregister entscheidet, welcher Pegel als aktiv definiert wird (H oder L) und ob eine AND- oder eine OR-Verknüpfung zwischen den ausgewählten Datenlinien die Anmeldung auslöst. In dieser Betriebsart können also weitere logische Entscheidungen (z. B. Auslösung eines Alarms bei einer bestimmten Bitbelegung des Ports) ohne zusätzlichen Hardwareaufwand bzw. zeitliche Belastung des Mikroprozessors gefällt werden.
in der Interrupt-Kaskade ist der Port A höherwertiger als Port B
in der bidirektionalen Byte-Betriebsart fungieren die Quittungssignale des Port B anders als die des Port A
zwei 8-Bit-Register können funktional zu einem 16-Bit-Register zusammengefasst werden

3. PIO-Programmierung history menue scroll up
PIO-Programmierung war lange Zeit das A und das O der Rechner-Peripherie Verwaltung. Das kann man heute so nicht mehr sagen, da die seriellen Bausteine die ihnen anhaftende Altlast erfolgreich abwerfen konnten - sie sind nicht mehr langsam - im Gegenteil: ... diese sind sehr schnell geworden. Und Parallel-Betrieb benötigt viele Leitungen - mit vielen Bits auf welchen dann auch noch unterschiedliche Signalzustände anliegen. Diese ergeben bei den heute angewandten Taktfrequenzen unangenehme "Überlagerungen" - das Induktionsgesetzt lässt hier grüßen. Wir machen das aber trotzdem noch, weil das Prinzip der Programmierung der I/O-Devices hier noch sehr gut erkennbar sowie noch relativ einfach ist ;-)

PIO-Programmierung

Beispielprogramme zur PIO-Programmierung

4. Handshake und Interruptprogrammieung history menue scroll up

 


5. Schaltpläne und Startprogramme history menue scroll up
 
         

Zusammenschaltung von CPU und PIO

Zusammenschaltung von CPU und PIO im Beispiel 1

     

Schaltplansymbol des Z80 PIO

die einzelnen BUS-Systeme werden immer als "Strang" zusammengefasst - deshalb auch die zusammengehörigen Komponenten am Schaltsymbol so angefügt
der Ausgang eines PIO ist niemals mit "Lasten" zu beschalten - maximal ein TTL-Last
die Kanäle sowie die Signalpegel haben verschiedene Ausgangsströme - siehe auch hier
Beispielprogramme zur PIO-Programmierung
Schnelle LookAhead-Logik


6. Verwandte Themen history menue scroll up

Was soll's - der Z80 lebt! Und 2012 auf Glas implementiert - das alles auf der aktuell gehaltenen Seite von Thomas Scherrer. Aber auch andere Institutionen veröffentlichen marginal, dass der Z80 nahezu unverändert bei ihnen Einsatz findet - z. B. die NASA!

Z80 - in der DDR als U880 bekannt ...

Thomas Scherrer Z80-Family Official Support Page

mehr LC-80 - 2018 aktuell



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