Les 50 ans du lancement du Zilog Z80
(goliath32.com)- Lancé en juillet 1976, le Zilog Z80 s’est largement diffusé, des ordinateurs personnels et de loisirs aux équipements embarqués et industriels, au point de devenir emblématique de l’ère des microprocesseurs 8 bits
- Tout en conservant la compatibilité binaire avec l’Intel 8080, il étendait les registres, l’adressage, les instructions et les interruptions, avec une interface électrique conçue pour être plus simple
- La pile limitée et l’espace d’adressage sur 14 bits du 8008 ont été améliorés dans le 8080 avec une pile en mémoire et un espace d’adressage sur 16 bits ; le Z80 y a ajouté des registres d’index, une banque de registres alternative et des instructions de bloc
- Grâce à une alimentation unique 5 V, une horloge unique, aux signaux de contrôle MREQ·IORQ·RD·WR et au rafraîchissement DRAM intégré, il permettait de construire un ordinateur avec peu de puces périphériques
- La famille Z80 a donné naissance à de nombreux dérivés, dont le Sharp LR35902 de la Game Boy et l’eZ80 ; le Z80 original, après une longue carrière industrielle, a été arrêté en juin 2024
Du Datapoint 2200 à l’Intel 8008
- Computer Terminal Corporation (CTC) a développé le terminal programmable Datapoint 2200, équipé d’un processeur 8 bits réalisé avec des puces TTL discrètes
- Le projet initial, qui consistait à remplacer une partie des circuits TTL par des CI personnalisés, s’est élargi jusqu’à mettre l’ensemble du CPU sur une seule puce ; Texas Instruments et Intel ont chacun pris en charge une conception
- Aucune des deux entreprises n’a terminé sa conception dans les délais et, lorsque la puce d’Intel a été prête, CTC vendait déjà son terminal à base de TTL
- Les ingénieurs de CTC n’étaient pas non plus satisfaits des performances de la puce, et l’architecture du terminal de génération suivante avait déjà été modifiée
- TI a abandonné sa conception, mais Intel a commercialisé le produit, initialement nommé 1201, sous le nom marketing 8008
Architecture et limites du 8008
- Le 8008 fournit sept registres : A·B·C·D·E·H·L
- A est l’accumulateur, et H et L forment le pointeur mémoire HL
- Le pseudo-registre M représente l’octet mémoire pointé par HL
- L’état de l’ALU est conservé via les flags Carry, Parity, Zero et Sign, utilisés pour les sauts, appels et retours conditionnels
- Le compteur ordinal était difficile à manipuler directement, et les appels de fonction utilisaient une pile d’adresses de retour à 8 niveaux interne au processeur
- Ce choix venait du fait que le Datapoint 2200 devait utiliser de la mémoire série, ce qui aurait pu faire d’une pile d’appels en mémoire un goulot d’étranglement
- Les adresses mémoire sont sur 14 bits, avec 32 ports d’E/S dans un espace d’adressage séparé
- Lorsqu’une interruption se produit, le périphérique place une instruction RST sur le bus de données et le CPU l’exécute
- RST appelle l’un des huit emplacements au début de l’espace d’adressage
- En l’absence de pile mémoire généraliste, et comme tout accès mémoire nécessite HL, sauvegarder les registres pendant le traitement d’une interruption obligeait à utiliser des verrous externes sur le bus d’E/S comme registres temporaires
- Il utilisait environ 3 500 transistors et un boîtier DIP18, avec multiplexage des bus d’adresse et de données
- Des circuits externes devaient verrouiller le bus et interpréter les signaux d’état internes du CPU
- Il fallait deux horloges déphasées à 500 kHz et des alimentations +5 V et -9 V
Du 8008 au 8080
- Avant même la fin du développement du 8008, des discussions ont commencé pour en corriger les limites, mais la direction d’Intel voulait d’abord vérifier la réaction du marché
- Federico Faggin a poussé au développement d’une version améliorée ; en attendant l’annonce de produits 8 bits concurrents, Intel a perdu neuf mois d’avance
- Avant même l’approbation du projet, Faggin a recruté Masatoshi Shima de Busicom pour participer à la conception du 8080
- Les critiques et retours fournis par des clients potentiels lors des démonstrations du 8008 ont aussi été pris en compte, et il a été décidé dès le départ d’abandonner la compatibilité binaire avec le 8008
Architecture du 8080
- Le 8080 conserve une organisation de registres similaire à celle du 8008, mais supprime la pile interne d’adresses de retour et introduit une pile en mémoire pointée par SP
- Les paires de registres BC, DE, HL et AF peuvent être empilées ou dépilées
- Dans l’assembleur Intel, AF est appelé PSW, pour Program Status Word
- L’espace d’adressage passe à 64 Ko sur 16 bits, et le nombre de ports d’E/S à 256
- Un accès indirect limité via BC et DE devient possible
- L’accumulateur et HL peuvent être lus ou stockés à des adresses spécifiées immédiatement
- Des opérations 16 bits, comme l’incrémentation/décrémentation de paires de registres, sont ajoutées pour gérer les calculs de pointeurs et les compteurs 16 bits
- Ce bloc d’opérations n’affecte pas les flags de l’ALU ; après avoir décrémenté BC, il faut donc vérifier séparément si les deux octets valent zéro
- Les interruptions conservent le mécanisme basé sur RST, mais peuvent désormais être activées ou désactivées par logiciel
- Grâce à la pile mémoire explicite, il n’est plus nécessaire d’avoir du matériel d’E/S pour sauvegarder les registres
- L’assembleur Intel 8080 faisait correspondre presque directement les mnémoniques et les opcodes, ce qui facilitait l’implémentation de l’assembleur, mais pouvait être moins lisible pour les humains
- Les instructions sur paires de registres n’utilisent que le nom d’un des deux registres, et le X de INX les distingue de l’instruction INC sur un seul octet
Interface électrique du 8080
- Pour augmenter la vitesse, l’usage de la logique NMOS imposait trois alimentations, -5 V·+5 V·+12 V, ainsi que deux horloges déphasées
- Le boîtier 40 broches a permis de séparer les lignes d’adresse et de données, mais une partie de l’état de contrôle restait multiplexée sur le bus de données, ce qui nécessitait toujours des verrous et décodeurs externes
- Intel vendait des puces de support pour le décodage d’état et la génération d’horloge ; selon les systèmes, il fallait aussi un contrôleur d’interruptions, un timer ou un contrôleur DMA
- Le timer programmable pouvait au minimum servir à piloter le rafraîchissement DRAM
- Le successeur 8085 utilisait une alimentation unique 5 V et une horloge unique 5 V, et ajoutait certains signaux de contrôle, mais nécessitait toujours des puces de support spécialisées
Création de Zilog et développement du Z80
- Frustré par le retard dans l’approbation du projet 8080 et par ses conflits avec la direction d’Intel, Faggin a quitté Intel avec Ralph Ungermann, responsable de la division microprocesseurs, pour fonder une entreprise
- Ils ont d’abord envisagé un microcontrôleur, mais ont estimé que les marges étaient trop faibles pour une startup fabless de semi-conducteurs
- Ils ont ensuite décidé de concevoir une version améliorée du 8080, le Super 80, qui allait devenir le Zilog Z80
- Ils ont obtenu un financement d’Exxon et recruté Shima chez Intel
- L’équipe chargée notamment du layout et de la simulation logicielle est passée à 11 personnes au total
- L’objectif était de conserver la compatibilité binaire avec le 8080 tout en ajoutant des registres, des modes d’adressage et des instructions, et en reprenant des caractéristiques de processeurs contemporains comme le 6800
- Une vitesse supérieure au 8080 et une interface électrique plus simple faisaient aussi partie des objectifs
- Le premier prototype fonctionnel a coûté environ 400 000 dollars, ce qui a permis de tenir le calendrier pour un coût inférieur au budget de 500 000 dollars obtenu auprès d’Exxon
- Après des conflits avec Synertek, le premier sous-traitant choisi, la production a reposé sur Mostek
- Par la suite, Zilog a construit sa propre fab grâce à un investissement supplémentaire d’Exxon, tout en continuant à faire produire le Z80 par plusieurs fournisseurs
Extensions de l’architecture Z80
- Le Z80 est entièrement compatible binaire avec le jeu d’instructions du 8080
- Il ajoute les registres d’index 16 bits IX et IY, inspirés du 6800
- Ils peuvent être utilisés à la place de HL via un préfixe d’opcode, et prennent aussi en charge des offsets immédiats
- Les paires de registres AF, BC, DE et HL disposent d’une banque alternative, permettant un basculement rapide lors du traitement des interruptions
- Les interruptions offrent trois modes
- Le mode 0 est compatible avec le 8080
- Le mode 1 appelle toujours une adresse fixe
- Le mode 2 utilise la valeur présente sur le bus comme index vers une table d’appels, tandis qu’un registre dédié indique l’adresse de base de cette table en mémoire
- Il ajoute la rotation, le test et la mise à 1 de bits, les opérations BCD, des instructions répétées utilisant BC comme compteur, ainsi que des transferts, comparaisons et opérations sur chaînes par blocs
- Une boucle complète de copie d’octets peut être remplacée par une seule instruction répétée, LDIR
- Intel revendiquant des droits d’auteur sur les mnémoniques d’assembleur, le Z80 a adopté sa propre syntaxe
- Elle explicite davantage les opérandes et surcharge les mnémoniques de base, ce qui la rend plus lisible que la syntaxe du 8080
Une conception de bus simplifiée
- Le Z80 ne nécessite qu’une alimentation unique 5 V et une horloge unique
- Les états que des circuits externes devaient verrouiller et interpréter sur le 8080 sont fournis directement sous forme de signaux dédiés
- MREQ et IORQ distinguent les accès mémoire et E/S
- RD et WR indiquent la lecture et l’écriture
- M1 indique que l’accès mémoire en cours est un fetch d’instruction
- En connectant directement les lignes d’adresse et de données, et avec un circuit aussi simple qu’un 74xx138 pour sélectionner EEPROM, RAM et UART, on peut construire un ordinateur de base
- Le compteur de rafraîchissement interne émet une valeur sur le bus d’adresse pendant le cycle de décodage des instructions et active les lignes de contrôle pour assurer le rafraîchissement DRAM
- Avec le mode d’interruption 1, un périphérique unique peut être relié à la broche d’interruption sans contrôleur d’interruptions externe
- Plusieurs périphériques peuvent être gérés avec des circuits simples comme un encodeur de priorité 74xx148 et un verrou
Après le Z80
- Avant même le lancement du Z80 en juillet 1976, la conception initiale du Z8000 16 bits avait commencé ; le produit est sorti en 1979, après l’Intel 8086 et avant le Motorola 68000
- Le Z8000 utilisait une mémoire segmentée comme le 8086, mais émettait le numéro de segment sur le bus, tandis qu’une MMU externe se chargeait de la traduction en adresses linéaires ainsi que des contrôles de limites et de permissions
- Le jeu d’instructions du 8086 reflète à la fois la lignée du 8080 et les caractéristiques propres au Z80, comme les instructions répétées de bloc, de chaînes et de boucles
- La conception de la MMU du Z8000 a aussi influencé le mode protégé 16 bits basé sur des tables de descripteurs du 286
Exxon, l’IBM PC et l’évolution de Zilog
- Zilog visait le marché informatique dès l’époque où les microprocesseurs étaient considérés comme des substituts aux circuits logiques, mais sa relation avec Exxon a été l’une des raisons pour lesquelles IBM a choisi l’Intel 8088 plutôt que Zilog pour son PC
- Exxon voulait constituer une activité informatique capable de concurrencer IBM et a investi stratégiquement dans des fabricants de machines à écrire, de traitements de texte et d’imprimantes
- Certains d’entre eux ont conçu des produits basés sur des composants Zilog, qui ont grignoté les parts de marché des produits IBM
- La relation étroite avec Exxon a aussi provoqué des tensions entre Faggin et Ungermann ; Ungermann a quitté Zilog avant que l’entreprise ne devienne une filiale à 100 % d’Exxon en 1980
- Zilog a été de nouveau séparée d’Exxon en 1989 et introduite en Bourse en 1991
- Par la suite, l’entreprise a changé plusieurs fois de propriétaire entre fonds de private equity et sociétés d’électronique ; elle appartient aujourd’hui à Littelfuse
- Le Z80, après avoir été longtemps utilisé comme processeur embarqué, a été arrêté en juin 2024
Expérience personnelle avec le Z80 et influence durable
- Le Z80 et les 8080/8085 compatibles binaires ont contribué à former un standard matériel de fait pour les micro-ordinateurs 8 bits, et ont servi de base à l’installation de CP/M et Microsoft BASIC comme standards logiciels de fait
- Le Z80 a été utilisé dans les premiers ordinateurs personnels, les ordinateurs domestiques et de loisirs, ainsi que dans de nombreux systèmes embarqués et industriels
- Des clones et architectures dérivées sont aussi apparus, notamment le Sharp LR35902 de la Game Boy originale
- Après avoir abandonné ses familles dérivées 16 et 32 bits, Zilog est revenue à des microcontrôleurs basés sur le Z80, comme l’eZ80, doté d’un pipeline et de fréquences plus élevées
- À la fin de son adolescence, après avoir découvert dans un catalogue de composants électroniques que le Z80 était toujours en vente, l’auteur a conçu un petit ordinateur et gravé le PCB en empruntant la nuit le labo photo de l’école
- Des enseignants lui ont raconté leurs expériences avec de vieux ordinateurs domestiques et consoles, ainsi qu’avec un ordinateur construit en wire wrapping dans une boîte Tupperware et capable d’exécuter CP/M et WordStar
- Il a aussi reçu des composants MCS-85 ainsi que des puces Z80, 8085, 6502 et 6522, qu’il a utilisées dans des projets faits maison
- Ce parcours lui a appris qu’une réinitialisation fiable à la mise sous tension était plus difficile que prévu, qu’un linker était bien plus difficile à implémenter qu’un assembleur, et qu’un particulier pouvait réellement créer un compilateur
1 commentaires
Commentaires sur Hacker News
J’ai commencé à programmer en assembleur en 1978, et je voulais comprendre non seulement le logiciel, mais aussi le fonctionnement du matériel
Après avoir assemblé un kit Z80, j’ai appris l’électronique numérique avec une sonde logique et un oscilloscope, et j’ai étudié le jeu d’instructions en épluchant la documentation. J’ai maintenant presque 70 ans, mais c’est aussi vif que si c’était hier, et le Z80 était vraiment un excellent CPU
J’ai appris seul, sans cours ni livres, en désassemblant des ROM et en consultant les cartes-résumé de Motorola, puis j’ai fondé plusieurs startups et mené une carrière réussie. Apprendre l’informatique depuis les premiers principes, au niveau le plus bas, garde une valeur irremplaçable
C’est un jeu de simulation de logique numérique où l’on construit des circuits de base avec des portes NAND, puis où l’on assemble des unités fonctionnelles et un décodeur d’instructions pour créer une architecture Turing-complete, avant de la programmer avec un assembleur que l’on définit soi-même. Si un nouvel opcode est nécessaire, on peut l’implémenter soi-même, donc c’est difficile mais très gratifiant ; le jeu se rapproche de sa sortie officielle, et une bande-annonce a aussi été publiée
FORK86-64À 12 ans, j’ai assemblé un ordinateur Z80 à partir d’un kit présenté dans l’émission de télévision « Klein Microcomputer Sebstgebaut und Programmiert »
J’utilisais un transformateur Märklin comme alimentation et un magnétophone Telefunken comme support de stockage des données, et après avoir saisi un jeu d’alunissage en code machine Z80, j’avais tellement peur de perdre le programme que je n’ai pas coupé le courant pendant deux semaines
Cela donne l’impression de revenir dans les années 1980 du ZX Spectrum, où 128 KB de RAM était un luxe difficilement envisageable. C’est encore un peu pareil aujourd’hui
https://spectrumcomputing.co.uk/entry/2000237/Book/Mastering...
http://www.primrosebank.net/computers/zxspectrum/docs/Comple...
Je me souviens avoir regardé le tableau de référence des instructions Z80 à la fin du manuel du ZX-81 sans rien y comprendre. Contrairement aux abstractions de haut niveau comme le BASIC, il m’a fallu pas mal de temps pour comprendre comment le CPU exécute réellement un programme
JPàGOTO,CALLàGOSUB,CPàIF,JP ZàTHEN GOTO, etLDàLETDire que « le Z80 est complètement compatible au niveau binaire avec le jeu d’instructions du 8080 » n’est pas exact si l’on prend en compte le registre de flags. Le comportement du flag de parité différait sur certaines opérations
De plus, les programmes qui utilisaient des opcodes non définis du 8080 pouvaient s’exécuter d’une manière arbitraire, alors que le Z80 a réutilisé ces opcodes pour de nouvelles instructions
Cela a permis de réutiliser le flag de parité comme flag d’overflow, ce qui a été une extension très utile. Le Datapoint 2200, l’Intel 8008, l’Intel 8080 et RISC-V font partie des rares jeux d’instructions dont le matériel ne détecte pas l’overflow ; à la différence des conceptions initiales simples et peu coûteuses, RISC-V n’a aucune excuse, et je considère que c’est sa plus grosse erreur
J’ai débuté la programmation en assembleur Z80 sur un TRS-80 Model I au début de 1983. Les livres de Bill Barden et la série « The Next Step » de Hardin Brothers dans le magazine 80 Micro m’ont ouvert la voie, et j’ai résumé cette expérience dans cet article
C’était assez clair pour qu’un enfant puisse comprendre, et je les ai lus de bout en bout ; je n’ai jamais vraiment touché un Z80, mais cela m’a donné une base qui m’a ensuite permis de comprendre sans difficulté le 6502 ainsi que les premiers microcontrôleurs comme les 8051 et PIC. J’ai encore l’impression aujourd’hui de comprendre les microprocesseurs modernes par analogie avec le Z80, et je recommande d’apprendre les microprocesseurs 8 bits, assez simples pour qu’une personne ordinaire puisse en saisir l’ensemble
J’ai commencé avec le Z80 à une époque où les compilateurs de langages avancés coûtaient cher et où les sharewares n’étaient pas aussi faciles à obtenir que l’open source d’aujourd’hui. Pour comprendre ce qu’on demande réellement à une machine, tout le monde devrait apprendre un peu d’assembleur, et le Z80 était assez simple pour qu’on puisse raisonner dessus
Il y a 35 ans, il fallait assembler les programmes à la main puis saisir le code machine hexadécimal dans la carte. Pour rendre cela plus pratique, j’ai écrit mon propre assembleur, et cette expérience m’a ensuite conduit vers les outils de développement puis vers le travail sur des compilateurs C++ majeurs
On oublie encore les calculatrices TI-84, toujours utilisées par des millions d’élèves américains et programmables en BASIC. Les modèles noir et blanc utilisent un Z80, et les modèles à écran couleur un eZ80
J’ai passé beaucoup de temps à créer de petits programmes en TI-BASIC avec mes amis pour frimer, mais je ne suis jamais allé jusqu’à apprendre l’assembleur Z80. J’ai imprimé toute la documentation de l’assembleur Z80 pour TI-84 Plus et commencé à la lire, mais je n’ai pas encore écrit une seule ligne