1 Punkte von GN⁺ 7 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Der im Juli 1976 eingeführte Zilog Z80 wurde von Personal- und Hobby-Computern bis hin zu Embedded- und Industrieanlagen breit eingesetzt und prägte die Ära der 8-Bit-Mikroprozessoren
  • Er behielt die binäre Kompatibilität zum Intel 8080 bei, erweiterte aber Register, Adressierungsarten, Befehle und Interrupt-Funktionen und vereinfachte zugleich die elektrische Anbindung
  • Die begrenzte Stack-Struktur und der 14-Bit-Adressraum des 8008 wurden beim 8080 zu einem Speicher-Stack und einem 16-Bit-Adressraum verbessert; der Z80 ergänzte dies um Indexregister, alternative Registerbänke und Blockbefehle
  • Dank einzelner 5-V-Versorgung, einzelnem Takt, den Steuersignalen MREQ·IORQ·RD·WR und integriertem DRAM-Refresh ließ sich ein Computer mit wenigen Peripherie-Chips aufbauen
  • Die Z80-Familie brachte zahlreiche Derivate hervor, darunter den Sharp LR35902 des Game Boy und den eZ80; der ursprüngliche Z80 wurde nach einer langen industriellen Lebensdauer im Juni 2024 eingestellt

Vom Datapoint 2200 zum Intel 8008

  • Die Computer Terminal Corporation (CTC) entwickelte das programmierbare Terminal Datapoint 2200, das einen aus diskreten TTL-Chips aufgebauten 8-Bit-Prozessor enthielt
  • Der Plan, Teile der TTL-Schaltung durch kundenspezifische ICs zu ersetzen, wurde auf die Idee ausgeweitet, die gesamte CPU auf einem einzigen Chip unterzubringen; Texas Instruments und Intel übernahmen jeweils ein Design
  • Beide Unternehmen stellten ihre Designs nicht fristgerecht fertig, und als Intels Chip bereit war, verkaufte CTC bereits TTL-basierte Terminals
    • Die CTC-Ingenieure waren auch mit der Leistung des Chips nicht zufrieden und hatten zudem die Architektur des Terminals der nächsten Generation geändert
    • TI stellte das Design ein, Intel brachte das ursprünglich 1201 genannte Produkt jedoch unter der Marketingbezeichnung 8008 auf den Markt

Aufbau und Grenzen des 8008

  • Der 8008 bot sieben Register: A·B·C·D·E·H·L
    • A ist der Akkumulator, H und L bilden den Speicherzeiger HL
    • Das Pseudoregister M steht für das Speicherbyte, auf das HL zeigt
  • Der ALU-Zustand wird über die Flags Carry, Parity, Zero und Sign gehalten und für bedingte Sprünge, Aufrufe und Rückkehrbefehle verwendet
  • Der Programmzähler war schwer direkt zu manipulieren; Funktionsaufrufe nutzten einen achtstufigen Rücksprungadress-Stack im Prozessor
    • Dieses Design beruhte auf der Einschätzung, dass ein speicherbasierter Call-Stack zum Flaschenhals werden könnte, weil der Datapoint 2200 serielle Speicher verwenden sollte
  • Speicheradressen waren 14 Bit breit; in einem separaten Adressraum standen 32 I/O-Ports bereit
  • Bei einem Interrupt legte ein Peripheriegerät einen RST-Befehl auf den Datenbus, den die CPU ausführte
    • RST ruft einen von acht Slots am Anfang des Adressraums auf
    • Da es keinen universellen Speicher-Stack gab und jeder Speicherzugriff HL benötigte, mussten beim Sichern von Registern während der Interrupt-Verarbeitung externe Latches am I/O-Bus als temporäre Register verwendet werden
  • Der Chip nutzte etwa 3.500 Transistoren und ein DIP18-Gehäuse; Adress- und Datenbus waren multiplexed
    • Externe Schaltungen mussten den Bus latchen und die internen Zustandsignale der CPU interpretieren
    • Erforderlich waren zwei phasenverschobene 500-kHz-Takte sowie +5 V und -9 V Versorgungsspannung

Vom 8008 zum 8080

  • Schon vor Abschluss der 8008-Entwicklung begannen Diskussionen darüber, dessen Grenzen zu verbessern; das Intel-Management wollte jedoch zunächst die Marktreaktion abwarten
  • Federico Faggin trieb die Entwicklung einer verbesserten Version voran; weil man noch auf die Ankündigung eines konkurrierenden 8-Bit-Produkts wartete, verlor Intel neun Monate Vorsprung
  • Faggin holte bereits vor der Projektfreigabe Masatoshi Shima von Busicom in das 8080-Designteam
  • Auch Kritik und Feedback potenzieller Kunden aus 8008-Demonstrationen flossen ein; schon früh wurde beschlossen, die binäre Kompatibilität zum 8008 aufzugeben

8080-Architektur

  • Der 8080 behielt eine ähnliche Registerstruktur wie der 8008 bei, entfernte aber den internen Rücksprungadress-Stack und führte einen von SP adressierten Speicher-Stack ein
    • Die Registerpaare BC, DE, HL und AF können auf den Stack gelegt oder von dort geholt werden
    • In Intels Assembly heißt AF das Programmstatuswort, PSW
  • Der Adressraum wuchs auf 16 Bit beziehungsweise 64 KB, die Zahl der I/O-Ports auf 256
    • Begrenzter indirekter Zugriff über BC und DE wurde möglich
    • Akkumulator und HL konnten von explizit angegebenen Adressen lesen oder dorthin speichern
  • 16-Bit-Operationen wie Inkrementieren und Dekrementieren von Registerpaaren wurden ergänzt, um Zeigerberechnungen und 16-Bit-Zähler zu ermöglichen
    • Dieser Operationsblock beeinflusst die ALU-Flags nicht, daher muss nach dem Dekrementieren von BC separat geprüft werden, ob beide Bytes null sind
  • Interrupts behielten den RST-basierten Ansatz bei, konnten nun aber per Software aktiviert oder deaktiviert werden
    • Durch den expliziten Speicher-Stack war keine I/O-Hardware zum Sichern von Registern mehr nötig
  • Intel-8080-Assembly hatte eine nahezu 1:1-Entsprechung zwischen Mnemonics und Opcodes, wodurch Assembler leicht zu implementieren waren, der Code für Menschen aber unbequem zu lesen sein konnte
    • Befehle für Registerpaare verwenden nur den Namen eines der beiden Register; das X in INX unterscheidet sie vom Ein-Byte-Befehl INC

Elektrisches Interface des 8080

  • Um die Geschwindigkeit zu erhöhen, wurde NMOS-Logik verwendet, was drei Versorgungsspannungen -5 V·+5 V·+12 V und zwei phasenverschobene Takte erforderte
  • Dank des 40-Pin-Gehäuses wurden Adress- und Datenleitungen getrennt, doch Teile des Steuerzustands wurden weiterhin auf den Datenbus multiplexed, sodass externe Latches und Decoder nötig blieben
  • Intel verkaufte Support-Chips für Zustandsdecodierung und Takterzeugung; je nach System waren auch Interrupt-Controller, Timer und DMA-Controller erforderlich
    • Ein programmierbarer Timer konnte zumindest zur Ansteuerung des DRAM-Refresh genutzt werden
  • Der nachfolgende 8085 nutzte eine einzelne 5-V-Versorgung und einen einzelnen 5-V-Takt und ergänzte einige Steuersignale, benötigte aber weiterhin spezielle Support-Chips

Gründung von Zilog und Entwicklung des Z80

  • Unzufrieden mit der verzögerten Freigabe des 8080-Projekts und Konflikten mit dem Intel-Management verließ Faggin Intel zusammen mit dem Leiter der Mikroprozessor-Sparte, Ralph Ungermann, und gründete ein Unternehmen
  • Zunächst wurde ein Mikrocontroller erwogen, doch die Margen erschienen für ein fabless Halbleiter-Startup zu niedrig
  • Danach entschied man sich, eine verbesserte 8080-Version namens Super 80 zu entwickeln; daraus wurde der Zilog Z80
    • Die Finanzierung kam von Exxon, und auch Shima wurde von Intel abgeworben
    • Das Team für Layout, Software-Simulation und weitere Aufgaben wuchs auf insgesamt 11 Personen
  • Ziel war es, die binäre Kompatibilität zum 8080 zu wahren und zugleich Register, Adressierungsarten und Befehle zu ergänzen sowie Eigenschaften zeitgenössischer Prozessoren wie des 6800 aufzugreifen
    • Höhere Geschwindigkeit als beim 8080 und eine einfachere elektrische Anbindung waren ebenfalls Ziele
  • Bis zum ersten funktionsfähigen Prototypen kostete das Projekt rund 400.000 US-Dollar; der Zeitplan wurde mit weniger als dem von Exxon bereitgestellten Budget von 500.000 US-Dollar eingehalten
  • Die Produktion hing nach Konflikten mit dem zunächst beauftragten Synertek von Mostek ab
    • Später wurde mit zusätzlicher Exxon-Investition eine eigene Fab gebaut, doch die Mehrfachbelieferung des Z80 wurde fortgesetzt

Erweiterungen der Z80-Architektur

  • Der Z80 ist vollständig binärkompatibel zum Befehlssatz des 8080
  • Ergänzt wurden die vom 6800 inspirierten 16-Bit-Indexregister IX und IY
    • Sie können per Opcode-Präfix anstelle von HL verwendet werden und unterstützen auch direkte Offsets
  • Die Registerpaare AF, BC, DE und HL besitzen alternative Bänke, die bei der Interrupt-Verarbeitung schnell umgeschaltet werden können
  • Interrupts bieten drei Modi
    • Modus 0 ist der 8080-kompatible Modus
    • Modus 1 ruft immer eine feste Adresse auf
    • Modus 2 nutzt den Wert auf dem Bus als Index, um in eine Aufruftabelle zu springen; ein separates Register gibt die Speicherbasisadresse der Tabelle an
  • Ergänzt wurden Bitrotation, Bitprüfung und -setzung, BCD-Operationen, Wiederholbefehle mit BC als Zähler sowie Blocktransfer-, Vergleichs- und String-Operationen
    • Eine komplette Byte-Kopierschleife lässt sich durch den selbst wiederholenden Befehl LDIR ersetzen
  • Da Intel Urheberrechte an den Assembly-Mnemonics geltend machte, führte der Z80 eine eigene Syntax ein
    • Sie schreibt Operanden expliziter aus und überlädt grundlegende Mnemonics, wodurch sie lesbarer ist als die 8080-Syntax

Vereinfachtes Busdesign

  • Der Z80 benötigt nur eine einzelne 5-V-Versorgung und einen einzelnen Takt
  • Zustände, die beim 8080 von externer Schaltung gelatched und interpretiert werden mussten, werden direkt als dedizierte Signale bereitgestellt
    • MREQ und IORQ unterscheiden Speicher- und I/O-Zugriffe
    • RD und WR stehen für Lesen und Schreiben
    • M1 signalisiert, dass der aktuelle Speicherzugriff ein Befehls-Fetch ist
  • Mit direkt angeschlossenen Adress- und Datenleitungen und einer einfachen Schaltung wie einem 74xx138 zur Auswahl von EEPROM, RAM und UART lässt sich ein Basiscomputer bauen
  • Ein interner Refresh-Zähler gibt während des Befehlsdecodierzyklus Werte auf den Adressbus aus und aktiviert die Steuerleitungen, um den DRAM-Refresh auszuführen
  • Mit Interrupt-Modus 1 kann ein einzelnes Gerät ohne externen Interrupt-Controller an den Interrupt-Pin angeschlossen werden
    • Mehrere Geräte lassen sich mit einfachen Schaltungen wie einem 74xx148-Prioritätsencoder und einem Latch behandeln

Entwicklungen nach dem Z80

  • Noch vor der Einführung des Z80 im Juli 1976 begann der frühe Entwurf des 16-Bit-Z8000; das Produkt erschien 1979, nach dem Intel 8086 und vor dem Motorola 68000
  • Der Z8000 nutzte wie der 8086 segmentierten Speicher, gab aber die Segmentnummer auf den Bus aus, während eine externe MMU lineare Adressumsetzung sowie Bereichs- und Rechteprüfungen übernahm
  • Der 8086-Befehlssatz spiegelt neben der Abstammung vom 8080 auch Eigenschaften des Z80 wider, etwa dessen selbst wiederholende Block-, String- und Loop-Befehle
  • Das Z8000-MMU-Design beeinflusste auch den descriptor-table-basierten 16-Bit-Protected-Mode des 286

Exxon, IBM PC und der Wandel bei Zilog

  • Zilog zielte schon zu einer Zeit auf den Computermarkt, als Mikroprozessoren noch als Ersatz für Logikschaltungen galten; die Beziehung zu Exxon war jedoch einer der Gründe, warum IBM für den PC statt Zilog den Intel 8088 wählte
  • Exxon wollte eine eigene Computing-Sparte als Gegenpol zu IBM aufbauen und investierte strategisch in Hersteller von Schreibmaschinen, Textverarbeitungsgeräten und Druckern
    • Einige davon entwickelten Produkte auf Basis von Zilog-Bauteilen, die Marktanteile von IBM-Produkten angriffen
  • Die enge Beziehung zu Exxon führte auch zu Konflikten zwischen Faggin und Ungermann; Ungermann verließ Zilog, bevor das Unternehmen 1980 vollständig zu einer Exxon-Tochter wurde
  • Zilog wurde 1989 wieder von Exxon ausgegliedert und ging 1991 an die Börse
    • Danach wechselte der Eigentümer mehrfach zwischen Private-Equity-Firmen und Elektronikunternehmen; heute gehört Zilog zu Littelfuse
  • Der Z80 wurde nach langer Nutzung als Embedded-Prozessor im Juni 2024 eingestellt

Persönliche Z80-Erfahrungen und langfristige Wirkung

  • Der Z80 und die binärkompatiblen 8080 und 8085 trugen dazu bei, einen De-facto-Hardwarestandard für 8-Bit-Mikrocomputer zu bilden, und schufen die Grundlage dafür, dass CP/M und Microsoft BASIC zu De-facto-Softwarestandards wurden
  • Der Z80 wurde in frühen Personal Computern, Heim- und Hobby-Computern sowie in vielen Embedded- und Industriesystemen eingesetzt
    • Es entstanden auch Klone und abgeleitete Architekturen, darunter der Sharp LR35902 des ursprünglichen Game Boy
    • Nachdem Zilog die 16- und 32-Bit-Derivatfamilien aufgegeben hatte, kehrte das Unternehmen zu Z80-basierten Mikrocontrollern wie dem eZ80 mit Pipeline und hoher Taktfrequenz zurück
  • Als ich in meinen späten Teenagerjahren in einem Katalog für Elektronikbauteile den noch immer verkauften Z80 entdeckte, entwarf ich einen kleinen Computer und ätzte nachts in der Fotokammer der Schule PCBs
    • Von Lehrern hörte ich von ihren Erfahrungen mit alten Heimcomputern und Konsolen sowie mit einem per Wire-Wrapping in einer Tupperware-Box gebauten Computer, auf dem CP/M und WordStar liefen
    • Außerdem bekam ich MCS-85-Bauteile sowie Z80-, 8085-, 6502- und 6522-Chips und verwendete sie in selbstgebauten Projekten
  • Dabei lernte ich, dass ein zuverlässiger Power-on-Reset schwieriger ist als erwartet, dass ein Linker erheblich schwerer zu implementieren ist als ein Assembler und dass auch Einzelpersonen tatsächlich Compiler bauen können

1 Kommentare

 
GN⁺ 7 시간 전
Hacker-News-Kommentare
  • 1978 begann ich mit dem Programmieren in Assembly und wollte nicht nur Software schreiben, sondern auch verstehen, wie Hardware funktioniert.
    Nachdem ich ein Z80-Kit zusammengebaut hatte, lernte ich mit Logiktester und Oszilloskop digitale Elektronik, arbeitete mich durch das Handbuch und lernte den Befehlssatz. Inzwischen bin ich fast 70, aber es ist so lebendig, als wäre es gestern gewesen, und der Z80 war wirklich eine großartige CPU

    • Drei Jahre später fing ich mit einem 4KB Radio-Shack-Computer auf 6809-Basis an, und obwohl ich seit über 40 Jahren keinen 6809-Code mehr geschrieben hatte, erinnere ich mich noch an viele Opcodes und half kürzlich auf retrocomputing.stackexchange.com bei einem kniffligen Assembly-Bug.
      Ohne Unterricht oder Bücher brachte ich es mir selbst bei, indem ich ROMs disassemblierte und die Motorola-Kurzreferenzkarten benutzte, gründete später mehrere Startups und machte damit erfolgreich Karriere. Es hat nach wie vor unersetzlichen Wert, Computer von den Grundprinzipien der untersten Ebene her zu lernen
    • Turing Complete(https://turingcomplete.game/) wird empfohlen.
      Ein Digital-Logic-Simulationsspiel, in dem man mit NAND-Gattern Grundschaltungen baut, Funktionsblöcke und Befehlsdecoder kombiniert, eine Turing-vollständige Architektur aufbaut und sie dann in einer selbst definierten Assembly programmiert. Wenn man neue Opcodes braucht, kann man sie selbst implementieren; es ist schwierig, aber sehr lohnend. Es nähert sich dem offiziellen Release, und ein Trailer wurde ebenfalls veröffentlicht
    • Sowohl der Z80 als auch der 6502 entstanden aus intern abgelehnten Entwürfen. Heute ist alles viel komplexer, aber ich würde gern sehen, wie wieder ein anderer Designer etwas wie FORK86-64 herausbringt
    • Ich habe sogar eigene externe Peripherie für den ZX81 gebaut
  • Mit 12 baute ich mit dem Kit aus der Fernsehsendung „Klein Microcomputer Sebstgebaut und Programmiert“ einen Z80-Computer zusammen.
    Als Stromversorgung diente ein Märklin-Transformator, als Datenspeicher ein Telefunken-Kassettenrekorder, und nachdem ich ein Mondlandespiel in Z80-Maschinensprache eingegeben hatte, ließ ich den Rechner aus Angst vor Datenverlust zwei Wochen lang eingeschaltet

  • Es fühlt sich an wie eine Rückkehr in die 1980er mit dem ZX Spectrum, und damals waren 128 KB RAM ein kaum bezahlbarer Luxus. Ein bisschen ist es heute wieder ähnlich.
    https://spectrumcomputing.co.uk/entry/2000237/Book/Mastering...
    http://www.primrosebank.net/computers/zxspectrum/docs/Comple...

  • Ich erinnere mich daran, am Z80-Befehlsreferenzblatt am Ende des ZX-81-Handbuchs gesessen und nichts verstanden zu haben. Anders als bei High-Level-Abstraktionen wie BASIC dauerte es ziemlich lange, bis ich begriffen hatte, wie die CPU Programme tatsächlich ausführt

    • Mit 12 machte es mir gerade wegen der einfachen Struktur von BASIC das Verständnis von Z80-Assembly leichter. Speicheradressen waren Zeilennummern, Register waren Variablen, JP entsprach GOTO, CALL entsprach GOSUB, CP entsprach IF, JP Z entsprach THEN GOTO und LD entsprach LET
    • Mein erster Computer war ein Bausatz-ZX-81, und in meiner Kleinstadt wurde ich zum Pionier der Informationstechnik. Das war eine Zeit, in der alles zugleich komplex und einfach war, und mit nur 1 KB RAM lief sogar ein Flugsimulator
    • Mit dem ZX-81 kam ich überhaupt erst mit Computern in Kontakt und war fasziniert davon, wie im Schnellmodus der Bildschirm abgeschaltet wurde und von den interessanten Kompromissen zwischen Hardware und Software
  • Die Aussage „Der Z80 ist vollständig binärkompatibel mit dem 8080-Befehlssatz“ stimmt unter Einbeziehung des Flag-Registers nicht ganz. Bei manchen Operationen verhielt sich das Paritätsflag anders.
    Außerdem konnten Programme, die undefinierte Opcodes des 8080 nutzten, auf beliebige Weise laufen, während der Z80 diese Opcodes für neue Befehle wiederverwendete

    • Dass man das Paritätsflag nicht perfekt kompatibel hielt, war eine kluge Entscheidung. Bestehende Programme prüften es fast nie, und nach Befehlen, die sich auf dem Z80 anders verhielten, praktisch überhaupt nicht.
      Dadurch konnte das Paritätsflag als Overflow-Flag wiederverwendet werden, was eine sehr nützliche Erweiterung war. Datapoint 2200, Intel 8008, Intel 8080 und RISC-V sind seltene Befehlssätze, bei denen die Hardware keinen Overflow erkennt; anders als bei einfachen und billigen frühen Entwürfen gibt es für RISC-V keine Entschuldigung, und ich halte das für den größten Fehler
    • Undefinierte Operationen sind nicht Teil des 8080-Befehlssatzes, ihre Unterstützung betrifft also nicht den Befehlssatz, sondern die Binärkompatibilität mit dem 8080-Silizium. Der Unterschied beim Paritätsflag bricht jedoch reale Kompatibilität, daher wäre „binärkompatibel mit Code, der vom 8080-Befehlssatz abhängt, abgesehen vom Wert des Paritätsflags“ die präzisere Formulierung
  • Anfang 1983 stieg ich auf dem TRS-80 Model I mit Z80-Assembly ins Programmieren ein. Bill Bardens Bücher und die Reihe „The Next Step“ der Hardin Brothers im Magazin 80 Micro öffneten mir den Weg, und ich habe diese Zeit in diesem Beitrag festgehalten

    • Als Teenager um 1980 kaufte ich im örtlichen Radio Shack immer dann Bücher, wenn ich es mir leisten konnte, und weil der TRS-80 den Z80 nutzte, bekam ich auch Bill Bardens Z80-Bücher aus dem Howard-Sams-Verlag in die Hände.
      Sie waren so klar geschrieben, dass sogar Kinder sie verstehen konnten, und ich las sie von Anfang bis Ende. Einen echten Z80 habe ich nie benutzt, aber dadurch hatte ich später keinerlei Mühe, auch den 6502 sowie frühe Mikrocontroller wie 8051 und PIC zu verstehen. Bis heute scheine ich moderne Mikroprozessoren über Vergleiche mit dem Z80 zu begreifen, und ich empfehle das Lernen an 8-Bit-Mikroprozessoren, die noch einfach genug sind, dass normale Menschen das Ganze überblicken können
  • Ich begann mit dem Z80 in einer Zeit, in der Compiler für höhere Sprachen teuer waren und selbst Shareware längst nicht so leicht zu bekommen war wie heutiges Open Source. Jeder sollte wenigstens etwas Assembly lernen, um zu verstehen, was man einer Maschine wirklich aufträgt, und der Z80 war einfach genug, um darüber nachdenken zu können

  • Vor 35 Jahren musste man Programme von Hand assemblieren und hexadezimalen Maschinencode direkt ins Board eingeben. Um das bequemer zu machen, schrieb ich selbst einen Assembler, und diese Erfahrung führte über Entwicklerwerkzeuge schließlich zur Arbeit an bedeutenden C++-Compilern

    • In den 1980ern konnten viele Leute, mich eingeschlossen, die Hex-Codes von Z80-Befehlen fast so leicht wie symbolisches Assembly lesen. Das war beim Reverse Engineering des Microsoft-CP/M-BASIC-Interpreters oder des FORTRAN-Compilers sehr nützlich
    • Das klingt nach einer Geschichte aus den späten 1970ern, war in Wirklichkeit aber 1991. Es war großartig, jederzeit genau zu wissen, was ein Programm gerade tut, aber sobald man etwas Komplexes implementieren wollte, wurde es ziemlich mühsam
    • Dabei wurde Assembly direkt in Maschinensprache übersetzt, die einzige Sprache, die die CPU versteht
  • Es fehlt der TI-84-Taschenrechner, der noch heute von Millionen Schülern in den USA benutzt wird und auf dem man in BASIC programmieren kann. Die Schwarzweißmodelle nutzen einen Z80, die Modelle mit Farbdisplay einen eZ80

    • Auch in Europa schrieben Schulen den Kauf des TI-84 Plus vor, und da er noch immer im Handel zu sein scheint, wird er wohl weiterhin genutzt.
      Ich habe viel Zeit damit verbracht, mit Freunden kleine Programme in TI-BASIC zu schreiben und anzugeben, habe aber nie noch Z80-Assembly gelernt. Ich habe einmal die komplette Z80-Assembly-Dokumentation für den TI-84 Plus ausgedruckt und angefangen zu lesen, aber bis heute keine einzige Zeile geschrieben
    • Der TI-84+ ist vielleicht einer meiner liebsten Retro-Computer
    • Meiner war ein TI-83, der solche fortgeschrittenen Möglichkeiten nicht hatte