Zilog Z80 - Zilog Z80

Zilog Z80
Zilog Z80.jpg
Une Z80 fabriquée en juin 1976 selon le cachet à date
informations générales
Lancé mars 1976
Conçu par Federico Faggin, Masatoshi Shima
Fabricant(s) commun(s)
Performance
Max. Fréquence d'horloge du processeur 2,5, 4, 6, 8 MHz à 10 MHz avec variante CMOS jusqu'à 20 MHz et dérivés compatibles binaires (de Zilog) jusqu'à 33 et 50 MHz.
Largeur des données 8 bits
Largeur de l'adresse 16 bits
Spécifications physiques
Transistors
Paquets)
Prise(s)
Brochage du boîtier de la puce DIP40 d' origine du Z80

Le Z80 est un microprocesseur 8 bits présenté par Zilog en tant que premier produit de la start - up . Le Z80 a été conçu par Federico Faggin à la fin de 1974 et développé par lui et ses 11 employés à partir du début de 1975. Les premiers échantillons fonctionnels ont été livrés en mars 1976 et il a été officiellement introduit sur le marché en juillet 1976. Avec les revenus du Z80, la société a construit ses propres usines de puces et est passée à plus d'un millier d'employés au cours des deux années suivantes.

Le Zilog Z80 est une extension et une amélioration logicielles de l' Intel 8080 et, comme lui, était principalement destiné aux systèmes embarqués . Bien qu'utilisé dans ce rôle, le Z80 est également devenu l'un des processeurs les plus utilisés dans les ordinateurs de bureau et les ordinateurs personnels des années 1970 au milieu des années 1980. Il était également courant dans les applications militaires, équipement musical tels que les synthétiseurs (comme le Roland Jupiter-8 ), et à jetons des jeux d' arcade des années 1970 et début des années 1980 , y compris Pac-Man .

Zilog a concédé sous licence le Z80 aux sociétés américaines Synertek et Mostek , qui les avaient aidés dans la production initiale, ainsi qu'à un deuxième fabricant européen , SGS . Le design a également été copié par plusieurs fabricants japonais, est-européens et soviétiques. Cela a gagné l'acceptation du Z80 sur le marché mondial depuis que de grandes entreprises comme NEC , Toshiba , Sharp et Hitachi ont commencé à fabriquer l'appareil (ou leurs propres clones ou conceptions compatibles Z80).

Au cours des dernières décennies, Zilog s'est recentré sur le marché en croissance constante des systèmes embarqués et la famille de microcontrôleurs compatible Z80 la plus récente , l' eZ80 24 bits entièrement en pipeline avec une plage d'adresses linéaire de 16  Mo , a été introduite avec succès aux côtés des Z80 et Z180 plus simples . des produits.

Histoire

Une publicité de mai 1976 pour le microprocesseur Zilog Z-80 8 bits
Photo de la conception originale du microprocesseur Zilog Z80 en nMOS à charge d'épuisement . La taille totale de la matrice est de 3545 × 3350 m. (Cette puce réelle fabriquée en 1990.)
Un CMOS Z80 dans un boîtier Quad Flat

Le Z80 est né lorsque le physicien et ingénieur Federico Faggin a quitté Intel fin 1974 pour fonder Zilog avec Ralph Ungermann  [ it ] . Chez Fairchild Semiconductor , et plus tard chez Intel, Faggin avait travaillé sur la technologie fondamentale de fabrication des transistors et des semi - conducteurs . Il a également développé la méthodologie de conception de base utilisée pour les mémoires et les microprocesseurs chez Intel et a dirigé les travaux sur l' Intel 4004 , le 8080 et plusieurs autres circuits intégrés. Masatoshi Shima , le principal level-designer logique et transistor des 4004 et 8080 sous la supervision de Faggin, a rejoint l'équipe Zilog.

Selon les concepteurs, les principales cibles du processeur Z80 (et de son support en option et de ses circuits intégrés) étaient des produits tels que des terminaux intelligents , des imprimantes haut de gamme et des caisses enregistreuses avancées, ainsi que des équipements de télécommunications , des robots industriels et d'autres types d' équipements d' automatisation .

En mars 1976, Zilog avait développé le Z80 ainsi qu'un système de développement basé sur un assembleur pour ses clients, et en juillet 1976, celui-ci était officiellement lancé sur le marché. Une partie du support Z80 et des circuits intégrés périphériques étaient en cours de développement à ce stade, et beaucoup d'entre eux ont été lancés au cours de l'année suivante.

Les premiers Z80 ont été fabriqués par Synertek et Mostek, avant que Zilog ne dispose de sa propre usine de fabrication, fin 1976. Ces sociétés ont été choisies parce qu'elles pouvaient effectuer l' implantation ionique nécessaire pour créer les MOSFET en mode d'appauvrissement que la conception du Z80 utilisait comme transistors de charge dans pour faire face à une seule alimentation de 5 volts.

Faggin a conçu le jeu d'instructions pour qu'il soit binairement compatible avec l'Intel 8080 afin que la plupart du code 8080, notamment le système d'exploitation CP/M et le compilateur PL/M d' Intel pour 8080 (ainsi que son code généré), s'exécutent sans modification sur le nouveau Z80. CPU. Masatoshi Shima a conçu la plupart de la microarchitecture ainsi que les niveaux de grille et de transistor du processeur Z80, assisté par un petit nombre d'ingénieurs et de personnes chargées de la mise en page . Le PDG Federico Faggin était en fait fortement impliqué dans le travail de mise en page de la puce, avec deux personnes dédiées à la mise en page. Selon Faggin, il travaillait 80 heures par semaine afin de respecter le calendrier serré des investisseurs financiers.

Le Z80 offrait de nombreuses améliorations par rapport au 8080 :

  • Un jeu d'instructions amélioré comprenant :
    • Un système plus logique, compréhensible et lisible de mnémoniques d' instruction assembleur
    • instructions de mouvement de données 16 bits plus flexibles (chargement ou LD), incluant de manière cruciale le pointeur de pile SP
    • modes d'adressage plus flexibles pour les entrées/sorties vers les ports périphériques externes
    • adressage sur un seul bit de tous les registres et de la mémoire, y compris le test des bits
    • décale/tourne sur la mémoire et les registres autres que l' accumulateur
    • arithmétique BCD améliorée et plus précise (que la précédente 8080)
    • rotation des instructions pour les chaînes numériques BCD en mémoire
    • Soustraction 16 bits et négation 8 bits
    • boucle de programme
    • Sauts relatifs du compteur de programme
    • instructions de copie de bloc, d' entrée/sortie de bloc (E/S) et de recherche d'octets.
  • Un indicateur de débordement avec une meilleure prise en charge des arithmétiques signées 8 et 16 bits.
  • Nouveaux registres d'index IX et IY avec des instructions pour l' adressage direct base+ offset
  • Un meilleur système d' interruption :
    • Un système d'interruption vectorisé plus automatique et général , mode 2 , principalement destiné à la gamme de compteurs/timers Zilog, DMA et contrôleurs de communication, ainsi qu'un système d'interruption vectorielle fixe, mode 1 , pour les systèmes simples avec un minimum de matériel (le mode 0 étant le mode compatible 8080).
    • Une interruption non masquable (NMI) qui peut être utilisée pour répondre à des situations de mise hors tension ou à d'autres événements de haute priorité (et permettant à un système Z80 minimaliste d'implémenter facilement un schéma d'interruption à deux niveaux en mode 1 ).
  • Un fichier de registre en double complet , qui pourrait être rapidement commuté, pour accélérer la réponse aux interruptions telles que les gestionnaires d'événements asynchrones rapides ou un répartiteur multitâche . Bien qu'ils n'aient pas été conçus comme des registres supplémentaires pour le code général, ils ont néanmoins été utilisés de cette façon dans certaines applications.
  • Moins de matériel requis pour l' alimentation , la génération d'horloge et l'interface avec la mémoire et les E/S
  • Alimentation simple 5 volts ( le 8080 nécessitait -5 V/+5 V/+12 V ).
  • Horloge monophasée de 5 volts ( le 8080 avait besoin d'une horloge biphasée de grande amplitude (9 à 12 volts) sans chevauchement ).
  • Rafraîchissement de la DRAM intégré qui nécessiterait autrement des circuits externes, à moins que la SRAM, plus chère et moins dense (mais plus rapide), ne soit utilisée.
  • Bus non multiplexés (le 8080 avait des signaux d'état multiplexés sur le bus de données).
  • Une fonction de réinitialisation spéciale qui efface uniquement le compteur de programme afin qu'un seul processeur Z80 puisse être utilisé dans un système de développement tel qu'un émulateur en circuit .

Le Z80 a succédé au 8080 et à son descendant, le 8085 , sur le marché des processeurs, et est devenu l'un des processeurs 8 bits les plus populaires. Certaines organisations, telles que British Telecom , sont restées fidèles au 8085 pour les applications embarquées en raison de leur familiarité avec celui-ci, ainsi que de son interface série sur puce et de son architecture d'interruption. Intel a produit un CMOS 8085 (80C85) à faible consommation qui est apparu dans les ordinateurs portables alimentés par batterie, tels que l' ordinateur portable conçu par Kyocera à partir d'avril 1983, également vendu par Tandy (sous le nom de TRS-80 Model 100 ), Olivetti et NEC dans diverses variantes. Dans les années suivantes, cependant, les versions CMOS du Z80 (des fabricants Zilog et japonais) domineraient également ce marché.

L'actualisation de la DRAM intégrée, au moins sur des marchés tels que CP/M et d'autres ordinateurs de bureau et à domicile, est peut-être la clé du succès initial du Z80 . (La plupart des systèmes embarqués Z80 utilisent une RAM statique qui n'a pas besoin d'être rafraîchie.) Il peut également s'agir de son système d'interruption minimaliste à deux niveaux ou, à l'inverse, de son système général d'interruption en guirlande à plusieurs niveaux utile pour la maintenance de plusieurs puces IO Z80. Toutes les fonctionnalités qui ont permis de construire des systèmes avec moins de matériel de support et une disposition de carte de circuit plus simple. Cependant, d'autres prétendent que sa popularité était due aux registres dupliqués qui permettaient des changements de contexte rapides ou un traitement plus efficace de choses comme les mathématiques à virgule flottante par rapport aux processeurs 8 bits avec moins de registres. (Le Z80 peut conserver plusieurs de ces nombres en interne, en utilisant HL'HL, DE'DE et BC'BC comme registres 32 bits, évitant d'avoir à y accéder depuis une RAM plus lente pendant le calcul.)

Pour la conception NMOS d' origine , la limite de fréquence d'horloge supérieure spécifiée a augmenté successivement depuis l'introduction de 2,5  MHz , via le bien connu 4 MHz (Z80A), jusqu'à 6 (Z80B) et 8 MHz (Z80H). La version NMOS est produite en tant que pièce 10 MHz depuis la fin des années 1980. Les versions CMOS ont été développées avec des limites de fréquence supérieures spécifiées allant de 4 MHz à 20 MHz pour la version vendue aujourd'hui. Les versions CMOS autorisaient une veille à faible consommation avec l'état interne conservé, sans limite de fréquence inférieure . Les dérivés entièrement compatibles HD64180 / Z180 et eZ80 sont actuellement spécifiés jusqu'à 33 et 50 MHz respectivement.

Concevoir

Modèle de programmation et ensemble de registres

Un schéma fonctionnel approximatif du Z80. Il n'y a pas d'additionneur dédié pour les décalages ou d'incrémenteur séparé pour R, et pas besoin de plus d'un seul registre temporaire de 16 bits WZ (bien que les verrous de l'incrémenteur soient également utilisés comme registre temporaire de 16 bits, dans d'autres contextes). Ce sont les registres PC et IR qui sont placés dans un groupe séparé, avec un segment de bus détachable, pour permettre les mises à jour de ces registres en parallèle avec la banque de registres principale.

Le modèle de programmation et l'ensemble de registres du Z80 sont assez conventionnels, basés finalement sur la structure de registres du Datapoint 2200 . Le Z80 a été conçu comme une extension de l'Intel 8080, créé par les mêmes ingénieurs, qui à son tour était une extension du 8008 . Le 8008 était essentiellement une implémentation PMOS du CPU basé sur TTL du Datapoint 2200.

La conception 2200 permettait aux registres 8 bits H et L (haut et bas) d'être appariés dans un registre d'adresses 16 bits HL. Dans le 8080, cet appariement a également été ajouté aux paires BC et DE, tandis que HL a été généralisé pour permettre l'utilisation comme accumulateur 16 bits, et pas seulement comme registre d'adresses. Le 8080 a également introduit l'important mode de données immédiates à 8 bits pour les opérations d'accumulateur et les données immédiates à 16 bits pour les charges HL, BC et DE. De plus, la copie directe 16 bits entre HL et la mémoire était désormais possible, en utilisant une adresse directe.

Le Z80 a encore orthogonalisé cela en rendant toutes les paires de registres 16 bits, y compris IX et IY, plus générales, ainsi qu'en autorisant la copie 16 bits directement vers et depuis la mémoire pour toutes ces paires. Les registres IX et IY 16 bits du Z80 sont principalement conçus comme des registres d'adresses de base, où une instruction particulière fournit un décalage constant qui s'ajoute aux valeurs précédentes, mais ils sont également utilisables comme accumulateurs 16 bits, entre autres. . Une limitation est que toutes les références d'opérandes impliquant IX ou IY nécessitent un octet de préfixe d'instruction supplémentaire, ajoutant au moins quatre cycles d'horloge sur la synchronisation d'une instruction utilisant HL à la place ; cela rend parfois l'utilisation de IX ou IY moins efficace qu'une méthode utilisant uniquement les registres du modèle 8080. Le Z80 a également introduit un nouveau drapeau de débordement signé et a complété l'arithmétique 16 bits assez simple du 8080 avec des instructions dédiées pour l' arithmétique 16 bits signée .

Les registres compatibles 8080 AF, BC, DE, HL sont dupliqués dans un fichier de registre séparé dans le Z80, où le processeur peut rapidement (quatre
états t, le temps d'exécution le plus court possible pour toute instruction Z80) passer d'une banque à la autre; une fonctionnalité utile pour accélérer les réponses aux interruptions à un seul niveau et à haute priorité. Une fonctionnalité similaire était présente dans le 2200, mais n'a jamais été implémentée chez Intel. Le double jeu de registres est très utile dans le rôle intégré, car il améliore les performances de gestion des interruptions, mais a été largement utilisé dans le rôle d'ordinateur personnel en tant qu'ensemble supplémentaire de registres généraux pour le code complexe comme l' arithmétique à virgule flottante ou les jeux informatiques à domicile.

Le fichier de registre en double est souvent appelé « jeu de registres alternatifs » (par certains, le fichier de registre « amorcé » puisque le caractère apostrophe est utilisé pour les désigner dans le code source de l'assembleur et la documentation Zilog). Cela souligne qu'un seul ensemble est adressable à tout moment. Cependant, l'accumulateur à 8 bits A avec son registre indicateur F est bifurqué des paires de registres "à usage général" HL, DE et BC. Ceci est accompli avec deux instructions distinctes utilisées pour échanger leurs accessibilités : EX AF,AF'n'échange que la paire de registres AF avec AF', tandis que l' EXXinstruction échange les trois paires de registres à usage général HL, DE et BC avec leurs alternatives HL', DE' et BC'. Ainsi, l'accumulateur A peut interagir indépendamment avec n'importe lequel des registres de 8 bits à usage général dans le fichier de registre alternatif (ou amorcé), ou, si HL' contient un pointeur vers la mémoire, certains octets (DE' et BC' peuvent également transférer Données 8 bits entre la mémoire et l'accumulateur A).

Cela peut devenir déroutant pour les programmeurs car après l'exécution EX AF,AF'ou EXXce qui était auparavant les registres alternatifs (primés) sont maintenant les registres principaux, et vice versa. La seule façon pour le programmeur de savoir quel(s) ensemble(s) sont en contexte (en "jouant à l'ordinateur" tout en scrutant le texte source de l'assembleur, ou pire, en étudiant le code avec un débogueur) est de tracer où chaque échange de registre est effectué à chaque point dans le programme. Évidemment, si de nombreux sauts et appels sont effectués dans ces segments de code, il peut rapidement devenir difficile de dire quel fichier de registre est en contexte à moins d'être soigneusement commenté. Il est donc conseillé d'utiliser les instructions d'échange directement et en segments de code discrets courts. Le jeu d'instructions Zilog Z280 comprend JAFet JARinstructions passer directement à une adresse de destination si les autres registres sont dans le contexte (reconnaissant ainsi officiellement cette complication programmation).

Registres

Registres Zilog Z80
1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (position du bit)
Registres principaux
UNE Drapeaux AF (accumulateur 8 bits et drapeaux)
B C BC (registre de données et d'adresses)
E DE (registre de données et d'adresses)
H L HL (accumulateur 16 bits et registre d'adresses)
Registres alternatifs
UNE' Drapeaux' AF ' (accumulateur 8 bits et drapeaux)
B' C' BC ' (registre de données et d'adresses)
RÉ' E' DE ' (registre de données et d'adresses)
H' L' HL ' (accumulateur 16 bits et registre d'adresses)
Registres d'indexation
IX Je ndex X
IY Je ndex Y
SP S tack P ointer
Autres registres
  je I vecteur nterrupt
  R R du compteur
Compteur de programme
ordinateur P rogramme C ontre
Registre d'état
  S Z - H - P / V N C F lags

Comme sur le 8080, les registres 8 bits sont généralement appariés pour fournir des versions 16 bits. Les registres compatibles 8080 sont :

  • AF: accumulateur 8 bits (A) et bits d'indicateur (F) report, zéro, moins, parité/débordement, demi-portée (utilisé pour BCD ), et un indicateur Add/Subtract (généralement appelé N) également pour BCD
  • BC: registre de données/adresse 16 bits ou deux registres 8 bits
  • DE: registre de données/adresse 16 bits ou deux registres 8 bits
  • HL: accumulateur/registre d'adresse 16 bits ou deux registres 8 bits
  • SP: pointeur de pile , 16 bits
  • PC: compteur de programme, 16 bits

Les nouveaux registres introduits avec le Z80 sont :

  • IX: index 16 bits ou registre de base pour décalages immédiats 8 bits
  • IY: index 16 bits ou registre de base pour décalages immédiats 8 bits
  • I: interruption du registre de base du vecteur, 8 bits
  • R: compteur de rafraîchissement DRAM, 8 bits ( msb ne compte pas)
  • AF': accumulateur et drapeaux alternatifs (ou fantômes) ( activés et désactivés avec EX AF,AF' )
  • BC', DE'etHL' : registres alternatifs (ou fantômes ) ( activés et désactivés avec EXX )
  • Quatre bits d'état d'interruption et d'état du mode d'interruption

Le registre de rafraîchissement , R, s'incrémente à chaque fois que la CPU récupère un opcode (ou un préfixe d'opcode, qui s'exécute en interne comme une instruction de 1 octet) et n'a pas de relation simple avec l'exécution du programme. Cela a parfois été utilisé pour générer des nombres pseudo-aléatoires dans les jeux, ainsi que dans les schémas de protection des logiciels. Il a également été utilisé comme compteur « matériel » dans certains modèles ; un exemple de ceci est le ZX81 , qui lui permet de garder une trace des positions des caractères sur l'écran du téléviseur en déclenchant une interruption au bouclage (en connectant INT à A6).

Le registre du vecteur d'interruption , I, est utilisé pour les interruptions spécifiques au mode 2 du Z80 (sélectionnées par l' IM 2instruction). Il fournit l'octet de poids fort de l'adresse de base pour une table de 128 entrées d' adresses de routine de service qui sont sélectionnées via un index envoyé à la CPU lors d'un cycle d'acquittement d' interruption ; cet index est simplement la partie d'octet de poids faible du pointeur vers l'adresse indirecte tabulée pointant vers la routine de service. Le pointeur identifie une puce périphérique particulière ou une fonction ou un événement périphérique, où les puces sont normalement connectées dans ce que l'on appelle une chaîne en guirlande pour une résolution prioritaire. Comme le registre de rafraîchissement, ce registre a aussi parfois été utilisé de manière créative ; dans les modes d'interruption 0 et 1 (ou dans un système n'utilisant pas d'interruptions), il peut être utilisé simplement comme un autre registre de données à 8 bits.

Les instructions LD A,Ret LD A,Iaffectent le registre des drapeaux du Z80, contrairement à toutes les autres LDinstructions (de chargement). Les drapeaux Signe (bit 7) et Zéro (bit 6) sont définis en fonction des données chargées à partir des registres source de rafraîchissement ou d'interruption. Pour les deux instructions, l'indicateur de parité/débordement (bit 2) est défini en fonction de l'état actuel de la bascule IFF2.

Langage assembleur Z80

Point de données 2200 et Intel 8008

Le premier langage assembleur Intel 8008 était basé sur une syntaxe très simple (mais systématique) héritée de la conception Datapoint 2200. Cette syntaxe originale a ensuite été transformée en une nouvelle forme de langage d'assemblage, un peu plus traditionnelle, pour cette même puce 8008 d'origine. À peu près au même moment, le nouveau langage d'assemblage a également été étendu pour s'adapter aux modes d'adressage supplémentaires de la puce Intel 8080 plus avancée (le 8008 et le 8080 partageaient un sous-ensemble de langage sans être binairement compatible ; cependant, le 8008 était binairement compatible avec le Datapoint 2200).

Dans ce processus, le mnémonique L, pour LOAD , a été remplacé par diverses abréviations des mots LOAD , STORE et MOVE , entremêlés avec d'autres lettres symboliques. La lettre mnémonique M, pour mémoire (référencée par HL), a été retirée de l'instruction mnémonique pour devenir un opérande syntaxiquement autonome , tandis que les registres et les combinaisons de registres sont devenus dénotés de manière très incohérente; soit par des opérandes abrégés (MVI D, LXI H, etc.), au sein même du mnémonique de l'instruction (LDA, LHLD, etc.), soit les deux à la fois (LDAX B, STAX D, etc.).

Intel 8008
Point de données 2200
Intel 8080
Intel 8085
Zilog Z80 Intel 8086/
Intel 8088
avant env. 1973 Californie. 1974 1976 1978
LBC MOV B,C LD B,C MOV BL,CL
-- LDAX B LD A,(BC) MOV AL,[BX]
LAM MOV A,M LD A,(HL) MOV AL,[BP]
LBM MOV B,M LD B,(HL) MOV BL,[BP]
-- STAX D LD (DE),A MOV [DX],AL
LMA MOV M,A LD (HL),A MOV [BP],AL
LMC MOV M,C LD (HL),C MOV [BP],CL
LDI 56 MVI D,56 LD D,56 MOV DL,56
LMI 56 MVI M,56 LD (HL),56 MOV byte ptr [BP],56
-- LDA 1234 LD A,(1234) MOV AL,[1234]
-- STA 1234 LD (1234),A MOV [1234],AL
-- -- LD B,(IX+56) MOV BL,[SI+56]
-- -- LD (IX+56),C MOV [SI+56],CL
-- -- LD (IY+56),78 MOV byte ptr [DI+56],78
-- LXI B,1234 LD BC,1234 MOV BX,1234
-- LXI H,1234 LD HL,1234 MOV BP,1234
-- SHLD 1234 LD (1234),HL MOV [1234],BP
-- LHLD 1234 LD HL,(1234) MOV BP,[1234]
-- -- LD BC,(1234) MOV BX,[1234]
-- -- LD IX,(1234) MOV SI,[1234]

Illustration de quatre syntaxes, utilisant des exemples d'instructions de chargement et de stockage équivalentes ou (pour le 8086) très similaires. La syntaxe Z80 utilise des parenthèses autour d'une expression pour indiquer que la valeur doit être utilisée comme adresse mémoire (comme mentionné ci-dessous), tandis que la syntaxe 8086 utilise des crochets au lieu de parenthèses ordinaires à cette fin. Les Z80 et 8086 utilisent tous deux le signe + pour indiquer qu'une constante est ajoutée à un registre de base pour former une adresse

Nouvelle syntaxe

Parce qu'Intel revendiquait un droit d'auteur sur ses mnémoniques d'assemblage, une nouvelle syntaxe d'assemblage a dû être développée pour le Z80. Cette fois, une approche plus systématique a été utilisée :

  • Tous les registres et paires de registres sont explicitement désignés par leurs noms complets
  • Les parenthèses sont systématiquement utilisées pour indiquer le "contenu de la mémoire à" (adresse constante ou déréférencement de pointeur variable) à l'exception d'une instruction de saut JP (HL). JP (XY) est simplement une variante de JP (HL) chargeant la nouvelle adresse PC.
  • Toutes les instructions de chargement et de stockage utilisent le même nom mnémonique, LD, pour LOAD (un retour au vocabulaire simpliste Datapoint 2200) ; d'autres instructions courantes, telles que ADD et INC, utilisent le même mnémonique quel que soit le mode d'adressage ou la taille de l'opérande. Ceci est possible car les opérandes eux-mêmes contiennent suffisamment d'informations.

Ces principes ont facilité la recherche de noms et de formes pour toutes les nouvelles instructions Z80, ainsi que les orthogonalisations des anciennes, telles que LD BC,(1234).

Hormis les différences de nommage, et malgré un certain décalage dans la structure de base des registres, les syntaxes Z80 et 8086 sont virtuellement isomorphes pour une grande partie des instructions. Seules des similitudes assez superficielles (comme le mot MOV, ou la lettre X, pour registre étendu) existent entre les langages assembleur 8080 et 8086, bien que les programmes 8080 puissent être traduits en langage assembleur 8086 par des programmes de traduction .

Jeu d'instructions et encodage

Le Z80 utilise 252 des 256 codes disponibles en tant qu'opcodes à un octet ("instruction racine" qui sont tous hérités du 8080); les quatre codes restants sont largement utilisés comme préfixes d'opcode : CB et ED activent des instructions supplémentaires, et DD ou FD sélectionnent respectivement IX+d ou IY+d (dans certains cas sans déplacement d) à la place de HL. Ce schéma donne au Z80 un grand nombre de permutations d'instructions et de registres ; Zilog les classe en 158 "types d'instructions" différents, dont 78 sont les mêmes que ceux de l'Intel 8080 (permettant le fonctionnement de tous les programmes 8080 sur un Z80). La documentation Zilog regroupe en outre les instructions dans les catégories suivantes (la plupart du 8080, d'autres entièrement nouvelles comme les instructions Block et Bit, et d'autres instructions 8080 avec des modes d'adressage plus polyvalents, comme les charges 16 bits, les E/S, les rotations/décalages et sauts relatifs) :

  • Charger et échanger
  • Bloquer le transfert et la recherche
  • Arithmétique et Logique
  • Rotation et décalage
  • Manipulation des bits (définir, réinitialiser, tester)
  • Sauter, appeler et revenir
  • Entrée sortie
  • Contrôle de base du processeur

Aucune instruction de multiplication explicite n'est disponible dans le Z80 d'origine, bien que les registres A et HL puissent être multipliés par des puissances de deux avec les instructions ADD A,A et ADD HL,HL (de même IX et IY également). Les instructions de décalage peuvent également multiplier ou diviser par des puissances de deux.

Différentes tailles et variantes d'ajouts, de décalages et de rotations ont des effets quelque peu différents sur les drapeaux car la plupart des propriétés de changement de drapeau du 8080 ont été copiées. Cependant, le bit d'indicateur de parité P du 8080 (bit 2) est appelé P/V (parité/débordement) dans le Z80 car il sert en plus d'indicateur de débordement en complément à deux, une caractéristique qui manque au 8080. Instructions arithmétiques sur le Z80 l'a défini pour indiquer le débordement plutôt que la parité, tandis que les instructions au niveau du bit l'utilisent toujours comme indicateur de parité. (Cela introduit une incompatibilité subtile du Z80 avec le code écrit pour le 8080, car le Z80 indique parfois un débordement signé là où le 8080 indiquerait la parité, provoquant éventuellement l'échec de la logique de certains logiciels 8080 pratiques sur le Z80.) Ce nouveau drapeau de débordement est utilisé pour toutes les nouvelles opérations 16 bits spécifiques au Z80 ( ADC, SBC) ainsi que pour les opérations arithmétiques 8 bits, tandis que les opérations 16 bits héritées du 8080 ( ADD, INC, DEC) ne l'affectent pas. De plus, le bit 1 du registre des drapeaux (un bit de réserve sur le 8080) est utilisé comme un drapeau, N, qui indique si la dernière instruction arithmétique exécutée était une soustraction ou une addition. La version Z80 de l' DAAinstruction (Decimal Adjust Accumulator pour l'arithmétique BCD) vérifie le drapeau N et se comporte en conséquence, donc une soustraction (hypothétique) suivie plus tard DAAdonnera un résultat différent sur un ancien 8080 que sur le Z80. Cependant, il s'agirait probablement d'un code erroné sur le 8080, tel qu'il a DAAété défini pour un ajout uniquement sur ce processeur.

Le Z80 a six nouvelles LDinstructions qui peuvent charger les paires de registres DE, BC et SP à partir de la mémoire et charger la mémoire à partir de ces trois paires de registres, contrairement au 8080. Comme sur le 8080, les instructions de chargement n'affectent pas les drapeaux (sauf pour le charges de registre I et R à usage spécial). Un résultat d'un encodage régulier (commun avec le 8080) est que chacun des registres 8 bits peut être chargé à partir d'eux-mêmes (par exemple LD A,A). C'est effectivement un NOP.

Les nouvelles instructions de transfert de bloc peuvent déplacer jusqu'à 64 kilo-octets de mémoire en mémoire ou entre la mémoire et les ports périphériques d'E/S. Les instructions de bloc LDIRet LDDR(LoaD,Increment/Decrement,Repeat) utilisent HL pour pointer vers l'adresse source, DE vers l'adresse de destination et BC comme compteur d'octets. Les octets sont copiés de la source à la destination, les pointeurs sont incrémentés ou décrémentés et le compteur d'octets est décrémenté jusqu'à ce que BC atteigne zéro. Les versions non répétitives LDIet LDDdéplacent un seul octet et déplacent les pointeurs et le compteur d'octets, qui s'il devient zéro réinitialise l'indicateur P/V. Les instructions mémoire vers E/S correspondantes INIR, INDR, OTIR, OTDR, INI, IND, OUTIet OUTDfonctionnent de manière similaire. Le Z80 peut entrer et sortir n'importe quel registre vers un port d'E/S en utilisant le registre C pour désigner le port. (Le 8080 effectue uniquement des E/S via l'accumulateur A, en utilisant une adresse de port directe spécifiée dans l'instruction ; une technique de code auto-modifiant est requise pour utiliser une adresse de port 8080 variable.)

Le dernier groupe d'instructions de bloc effectue une CPopération de comparaison entre l'octet en (HL) et l'accumulateur A. La paire de registres DE n'est pas utilisée. Les versions de répétition CPIRet CPDRne se terminent si la Colombie - Britannique va à zéro ou une correspondance est trouvée. HL pointe vers l'octet après ( CPIR) ou avant ( CPDR) l'octet correspondant. Si aucune correspondance n'est trouvée, le drapeau Z est réinitialisé. Il existe des versions non répétitives CPIet CPD.

Contrairement au 8080, le Z80 peut sauter à une adresse relative ( JRau lieu de JP) en utilisant un déplacement signé de 8 bits. Seuls les drapeaux Zero et Carry peuvent être testés pour ces nouvelles JRinstructions à deux octets . (Tous les 8080 sauts et appels, conditionnel ou non, sont des instructions à trois octets.) Une instruction de deux octets spécialisés pour le bouclage du programme est de nouveau à la Z80: DJNZ(décrémentation Saut si non nul) prend signé le déplacement 8 bits comme un opérande immédiat. Le registre B est décrémenté, et si le résultat est non nul alors l'exécution du programme saute par rapport au PC ; les drapeaux restent inchangés. L'exécution d'une boucle équivalente sur un 8080 nécessite des DECinstructions séparées de saut conditionnel et de saut (vers une adresse absolue de deux octets) (totalisant quatre octets) et DECmodifie le registre des drapeaux.

Les instructions du registre d'index (IX/IY, souvent abrégé XY) peuvent être utiles pour accéder à des données organisées en structures hétérogènes fixes (telles que des enregistrements ) ou à des décalages fixes par rapport à une adresse de base variable (comme dans les trames de pile récursives ) et peuvent également réduire le code taille en supprimant le besoin de plusieurs instructions courtes utilisant des registres non indexés. Cependant, bien qu'ils puissent économiser de la vitesse dans certains contextes par rapport aux séquences "équivalentes" longues/complexes d'opérations plus simples, ils nécessitent beaucoup de temps CPU supplémentaire ( par exemple , 19 états T pour accéder à un emplacement mémoire indexé contre aussi peu que 11 pour accéder à la même mémoire en utilisant HL et INCpour pointer vers la suivante). Ainsi, pour des accès de données simples ou linéaires, l'utilisation de IX et IY a tendance à être plus lente et à occuper plus de mémoire. Néanmoins, ils peuvent être utiles dans les cas où les registres « principaux » sont tous occupés, en supprimant le besoin de sauvegarder/restaurer les registres. Leurs moitiés 8 bits officiellement non documentées (voir ci-dessous) peuvent être particulièrement utiles dans ce contexte, car elles subissent moins de ralentissement que leurs parents 16 bits. De même, les instructions pour les ajouts de 16 bits ne sont pas particulièrement rapides (11 horloges) dans le Z80 d'origine (étant 1 horloge plus lente que dans le 8080/8085); néanmoins, ils sont environ deux fois plus rapides que d'effectuer les mêmes calculs à l'aide d'opérations sur 8 bits, et tout aussi important, ils réduisent l'utilisation des registres. Il n'était pas rare pour les programmeurs de « pousser » différents octets de décalage de décalage (qui étaient généralement calculés dynamiquement) dans des instructions indexées ; il s'agit d'un exemple de code auto-modifiant qui était une pratique régulière sur presque tous les premiers processeurs 8 bits avec des unités d'exécution non pipeline .

Les registres d'index ont une instruction parallèle à JP (HL), qui est JP (XY). Ceci est souvent observé dans les langages orientés pile comme Forth qui, à la fin de chaque mot Forth (sous-routines atomiques comprenant le langage) doivent revenir inconditionnellement à leurs routines d'interprétation de thread. Typiquement, cette instruction de saut apparaît plusieurs centaines de fois dans une application, et en utilisant JP (XY)plutôt que d' JP THREADenregistrer un octet et deux états T pour chaque occurrence. Ceci rend naturellement le registre d'index indisponible pour toute autre utilisation, sinon la nécessité de le recharger constamment annulerait son efficacité.

La conception Z180 microcodée, plus récente de 10 ans , pouvait initialement offrir plus de "zone de puce", permettant une mise en œuvre légèrement plus efficace (en utilisant une ALU plus large , entre autres); des choses similaires peuvent être dites pour les Z800 , Z280 et Z380 . Cependant, ce n'est qu'après le lancement de l'eZ80 entièrement en pipeline en 2001 que ces instructions sont finalement devenues à peu près aussi efficaces en termes de cycle qu'il est techniquement possible de les faire, c'est-à-dire compte tenu des codages Z80 combinés à la capacité d'effectuer une lecture ou écrire chaque cycle d'horloge.

Instructions non documentées

Les registres d'index, IX et IY, étaient conçus comme des pointeurs 16 bits flexibles, améliorant la capacité de manipuler la mémoire, les trames de pile et les structures de données. Officiellement, ils ont été traités comme 16 bits uniquement. En réalité , ils ont été mis en œuvre comme une paire de registres à 8 bits, de la même façon que le registre de HL, qui est accessible soit en tant que 16 bits ou séparément en tant que H IGH et L ow registres. Les opcodes binaires (langage machine) étaient identiques, mais précédés d'un nouveau préfixe d'opcode. Zilog a publié les opcodes et les mnémoniques associés pour les fonctions prévues, mais n'a pas documenté le fait que chaque opcode qui permettait la manipulation des registres H et L était également valable pour les parties 8 bits des registres IX et IY. Par exemple, l'opcode 26h suivi d'une valeur d'octet immédiate (LD H,n)chargera cette valeur dans le registre H. Faire précéder cette instruction de deux octets du préfixe de code d'opération du registre IX, DD, entraînerait plutôt le chargement des 8 bits les plus significatifs du registre IX avec cette même valeur. Une exception notable à cela serait des instructions similaires LD H,(IX+d)qui utilisent à la fois les registres HL et IX ou IY dans la même instruction ; dans ce cas, le préfixe DD n'est appliqué qu'à la partie (IX+d) de l'instruction. Les moitiés des registres XY pourraient également contenir des opérandes pour des instructions arithmétiques, logiques et de comparaison à 8 bits, épargnant les registres réguliers à 8 bits pour d'autres usages. La capacité non documentée d'incrémenter et de décrémenter la moitié supérieure d'un registre d'index a facilité l'extension de la plage des instructions indexées normales, sans avoir à recourir au document ADD/SBC XY,DEou ADD/SBC XY,BC.

Il existe également plusieurs autres instructions non documentées. Les opcodes non documentés ou illégaux ne sont pas détectés par le Z80 et ont divers effets, dont certains sont utiles. Cependant, comme elles ne font pas partie de la définition formelle du jeu d'instructions, les différentes implémentations du Z80 ne sont pas garanties (ou particulièrement susceptibles) de fonctionner de la même manière pour chaque opcode non documenté.

Bugs

L' OTDRinstruction n'est pas conforme à la documentation Z80. Les instructions OTDRet OTIRsont censées laisser le drapeau de retenue (C) inchangé. L' OTIRinstruction fonctionne correctement ; cependant, pendant l'exécution de l' OTDRinstruction, le drapeau de retenue prend les résultats d'une comparaison parasite entre l'accumulateur (A) et la dernière sortie de l' OTDRinstruction.

Exemple de code

EXEMPLE 1 : Le code source assembleur Z80 suivant est pour un sous-programme nommé HELLO_WORLD. Comme il est universellement connu, il s'agit d'un programme d'introduction qui imprimera un message sur l'écran vidéo puis se fermera. Bien que simple, il montre comment un code source assembleur est formaté et interagit avec le matériel d'affichage via un système d'exploitation informatique. Ceci est nécessairement spécifique à un matériel informatique, un système d'exploitation et un logiciel assembleur particuliers. L'exemple utilisé est le
TRS-80 modèle 4 exécutant TRSDOS/LS-DOS 6.x, produit par Tandy/Radio Shack et Logical Systems, avec la plupart des assembleurs vendus par Radio Shack ou Misosys Inc. (Series I/EDTASM, ALDS, EDAS ou MRAS avec commutateur -GC). Les principales caractéristiques de cette configuration sont universelles aux assembleurs Z80, même sous CP/M.

            
            
            
            
            
            
            
            
            
    
  
  
  
  
  
3000 3E 69
3002 EF 
3003 21 14 30
3006 3E 0A
3008 EF
3009 0E 0D
300B 3E 02
300D EF
300E 21 00 00
3011 3E 16
3013 EF
3014 48 65 6C 6C
3018 6F 2C 20 77
301C 6F 72 6C 64
3020 21 0D 0D
3023
 ; hello_world_TRS-80 Model 4
 ; Print "Hello, world!" then exit to TRSDOS Ready
 ;
 ; Entry registers: none
 ; Return registers: none
 ;
 ; values below are decimal unless suffixed by H
 ; the term "pseudo-op" means same as "assembler directive", is not Z80 code
 ;
 @CLS         EQU     105                 ; EQU pseudo-op sets @CLS text label = TRSDOS Supervisor Code
 @DSP         EQU     2                   ; set @DSP text label = TRSDOS SVC to send char to display
 @DSPLY       EQU     10                  ; set @DSPLY text label = SVC for text string display
 @EXIT        EQU     22                  ; set @EXIT text label = SVC for returning to TRSDOS Ready
;
              ORG     3000H               ; ORG pseudo-op sets standard start address under TRSDOS 6.x
START         LD      A,@CLS              ; CLS = Clear Screen, erase display and home cursor
              RST     40                  ; Z80 Restart instruction for system SVC processor, execute @CLS
              LD      HL,MSG              ; point to message string with HL (required by @DSPLY SVC)
              LD      A,@DSPLY            ; send text string to *DO Display Output device (video screen)
              RST     40                  ; execute @DSPLY SVC (13d byte needed to terminate string)
              LD      C,13                ; now send another carriage return, needed in reg C 
              LD      A,@DSP              ; to set off Hello message from TRSDOS Ready prompt
              RST     40                  ; once we exit to system
              LD      HL,0                ; indicate no error condition to Command Interpreter
              LD      A,@EXIT             ; return to TRSDOS Ready
              RST     40                  ; (stack integrity maintained, could as well have used a RET!)
 MSG          DB      'Hello, world!',13  ; DB = Define Byte pseudo-op assembles ASCII string to Z80 memory
 CR           DB      13                  ; 13d byte is ASCII carriage return char, moves cursor down
              END     START               ; END pseudo-op required by assembler 
                                          ; to produce transfer record to program entry point

EXEMPLE 2 : Le code source de l'assembly Z80 suivant concerne un sous-programme nommé memcpyqui copie un bloc d'octets de données d'une taille donnée d'un emplacement à un autre. Important : l'exemple de code ne gère pas le cas où le bloc destination chevauche la source ; une limitation sérieuse, mais qui n'est pas pertinente pour certaines applications, comme, en particulier, lorsque la source est en ROM et la destination en RAM, de sorte qu'elles ne peuvent jamais se chevaucher. L'exemple de code est extrêmement inefficace, destiné à illustrer divers types d'instructions, plutôt que les meilleures pratiques en matière de vitesse. Le bloc de données est copié un octet à la fois, et la logique de mouvement et de bouclage des données utilise des opérations sur 16 bits. De plus, le Z80 a une seule instruction qui exécutera toute la boucle ( LDIR). Notez que le code assemblé est compatible binaire avec les processeurs Intel 8080 et 8085.

                     
                     
                     
                     
        
             
                     
             
                     
                     
                     
 1000            
 1000            
 1000 78         
 1001 B1         
 1002 C8         
 1003 1A         
 1004 77         
 1005 13         
 1006 23         
 1007 0B         
 1008 C3 00 10   
 100B
 ; memcpy --
 ; Copy a block of memory from one location to another.
 ;
 ; Entry registers
 ;      BC - Number of bytes to copy
 ;      DE - Address of source data block
 ;      HL - Address of target data block
 ;
 ; Return registers
 ;      BC - Zero

             org     1000h       ;Origin at 1000h
 memcpy      public
 loop        ld      a,b         ;Test BC,
             or      c           ;If BC = 0,
             ret     z           ;Return
             ld      a,(de)      ;Load A from (DE)
             ld      (hl),a      ;Store A into (HL)
             inc     de          ;Increment DE
             inc     hl          ;Increment HL
             dec     bc          ;Decrement BC
             jp      loop        ;Repeat the loop
             end

Exécution des instructions

Chaque instruction est exécutée en étapes qui sont généralement appelées cycles machine ( cycles M), dont chacune peut prendre entre trois et six périodes d'horloge (cycles T). Chaque cycle M correspond approximativement à un accès mémoire ou une opération interne. De nombreuses instructions se terminent en fait pendant le M1 de l' instruction suivante , ce qui est connu sous le nom de chevauchement d'extraction/exécution .

Exemples d'instructions types (R=lecture, W=écriture)
Le total

M-cycles

instruction M1 M2 M3 M4 M5 M6
1 INC BC code opération
2 ADD A,n code opération m
3 ADD HL,DE code opération interne interne
4 SET b,(HL) préfixe code opération R(HL), régler W(HL)
5 LD (IX+d),n préfixe code opération n, ajouter W(IX+d)
6 INC (IY+d) préfixe code opération ajouter R(IY+d),inc W(IY+d)

Les cycles de la machine Z80 sont séquencés par une machine à états interne qui construit chaque cycle M à partir de 3, 4, 5 ou 6 cycles T selon le contexte. Cela évite une logique asynchrone encombrante et permet aux signaux de commande de se comporter de manière cohérente sur une large gamme de fréquences d'horloge. Cela signifie également qu'un cristal de fréquence plus élevée doit être utilisé que sans cette subdivision des cycles de la machine (environ 2 à 3 fois plus élevée). Cela n'implique pas des exigences plus strictes en matière de temps d'accès à la mémoire , car une horloge haute résolution permet un contrôle plus précis des temps de mémoire et ainsi la mémoire peut être active en parallèle avec le processeur dans une plus grande mesure, permettant une utilisation plus efficace de la bande passante mémoire disponible.

Un exemple central de ceci est que, pour l' extraction de code d'opération , le Z80 combine deux cycles d'horloge complets en une période d'accès à la mémoire (le signal M1). Dans le Z80, ce signal dure une partie relativement plus grande du temps d'exécution d'une instruction typique que dans une conception telle que le 6800 , le 6502 ou similaire, où cette période durerait généralement 30 à 40 % d'un cycle d'horloge. L'abordabilité des puces mémoire (c'est-à-dire des temps d'accès autour de 450-250 ns dans les années 1980) déterminant généralement le temps d'accès le plus rapide possible, cela signifiait que ces conceptions étaient verrouillées sur un cycle d'horloge beaucoup plus long (c'est-à-dire une vitesse d'horloge interne inférieure) que le Z80.

La mémoire était généralement lente par rapport aux sous-cycles de la machine à états (cycles d'horloge) utilisés dans les microprocesseurs contemporains. Le cycle machine le plus court pouvant être utilisé en toute sécurité dans les conceptions embarquées a donc souvent été limité par les temps d'accès à la mémoire, et non par la fréquence maximale du processeur (en particulier à l'époque de l'ordinateur domestique). Cependant, cette relation a lentement changé au cours des dernières décennies, notamment en ce qui concerne la SRAM ; Les conceptions à cycle unique sans cache telles que l'eZ80 sont donc devenues beaucoup plus significatives récemment.

Le contenu du registre de rafraîchissement R est envoyé sur la moitié inférieure du bus d'adresses avec un signal de commande de rafraîchissement pendant que la CPU décode et exécute l'instruction récupérée. Pendant le rafraîchissement, le contenu du registre d'interruption I est envoyé sur la moitié supérieure du bus d'adresses.

Périphériques compatibles

Zilog a introduit un certain nombre de pièces périphériques pour le Z80, qui prennent toutes en charge le système de gestion des interruptions et l'espace d'adressage des E/S du Z80. Ceux-ci incluent le canal compteur/temporisateur (CTC), le SIO (Serial Input Output), le DMA (Direct Memory Access), le PIO (Parallel Input-Output) et le DART (Dual Asynchronous Receiver Transmitter). Au fur et à mesure du développement de la gamme de produits, des versions basse consommation, haute vitesse et CMOS de ces puces ont été introduites.

Comme les processeurs 8080, 8085 et 8086, mais contrairement aux processeurs tels que Motorola 6800 et MOS Technology 6502, les Z80 et 8080 ont une ligne de contrôle et un espace d'adressage séparés pour les instructions d'E/S. Alors que certains ordinateurs basés sur le Z80 tels que l' Osborne 1 utilisaient des périphériques d' entrée/sortie mappés en mémoire "de style Motorola" , l'espace d'E/S était généralement utilisé pour adresser l'une des nombreuses puces périphériques Zilog compatibles avec le Z80. Les puces d'E/S Zilog prenaient en charge les nouvelles interruptions en mode 2 du Z80, ce qui simplifiait la gestion des interruptions pour un grand nombre de périphériques.

Le Z80 a été officiellement décrit comme prenant en charge l'adressage mémoire 16 bits (64 Ko) et l'adressage E/S 8 bits (256 ports). Toutes les instructions d'E/S affirment en fait l'intégralité du bus d'adresses 16 bits. OUT (C),reg et IN reg,(C) placent le contenu de l'ensemble du registre BC à 16 bits sur le bus d'adresses; OUT (n),A et IN A,(n) placent le contenu du registre A sur b8-b15 du bus d'adresse et n sur b0-b7 du bus d'adresse. Un concepteur pourrait choisir de décoder l'intégralité du bus d'adresses 16 bits sur les opérations d'E/S afin de tirer parti de cette fonctionnalité, ou d'utiliser la moitié supérieure du bus d'adresses pour sélectionner des sous-fonctionnalités du périphérique d'E/S. Cette fonctionnalité a également été utilisée pour minimiser les exigences matérielles de décodage, comme dans les Amstrad CPC / PCW et ZX81 .

Sources secondaires et dérivés

Secondes sources

Mostek, qui a produit le premier Z80 pour Zilog, l'a proposé comme deuxième source sous le nom de MK3880. SGS-Thomson (maintenant STMicroelectronics ) était également une deuxième source avec leur Z8400. Sharp et NEC ont développé respectivement des deuxièmes sources pour le NMOS Z80, le LH0080 et le μPD780C . Le LH0080 a été utilisé dans divers ordinateurs personnels et ordinateurs personnels fabriqués par Sharp et d'autres fabricants japonais, y compris les ordinateurs Sony MSX et un certain nombre d'ordinateurs de la série Sharp MZ .

Toshiba a fait une version CMOS, la TMPZ84C00, qui est supposée (mais non vérifiée) être la même conception également utilisée par Zilog pour son propre CMOS Z84C00. Il y avait aussi des puces Z80 fabriquées par GoldStar (maintenant LG ) et la série BU18400 de clones Z80 (y compris DMA, PIO, CTC, DART et SIO) en NMOS et CMOS fabriqués par ROHM Electronics .

En Allemagne de l'Est , un clone sans licence du Z80, connu sous le nom de U880 , a été fabriqué. Il était très populaire et a été utilisé dans les systèmes informatiques de Robotron et de VEB Mikroelektronik Mühlhausen (comme la série KC85) et également dans de nombreux systèmes informatiques fabriqués par nos soins. En Roumanie, un autre clone sans licence a pu être trouvé, nommé MMN80CPU et produit par Microelectronica , utilisé dans des ordinateurs domestiques comme TIM-S, HC, COBRA.

En outre, plusieurs clones de Z80 ont été créés en Union soviétique , les plus notables étant le T34BM1 , également appelé КР1858ВМ1 (parallèlement au clone soviétique 8080 KR580VM80A ). Le premier marquage était utilisé dans les séries de pré-production, tandis que le second devait être utilisé pour une production plus importante. Cependant, en raison de l'effondrement de la microélectronique soviétique à la fin des années 1980, il y a beaucoup plus de T34BM1 que de КР1858ВМ1.

Dérivés

Compatible avec le Z80 d'origine
  • Hitachi a développé le HD64180 , un Z80 microcodé et partiellement dynamique en CMOS, avec des périphériques sur puce et une simple MMU donnant un espace d'adressage de 1  Mo. Il a ensuite été acheté en second par Zilog, d'abord sous le nom de Z64180, puis sous la forme du Z180 légèrement modifié qui a un protocole de bus et des timings mieux adaptés aux puces périphériques Z80. Z180 a été maintenu et développé sous le nom de Zilog, les versions les plus récentes étant basées sur le noyau S180/L180 entièrement statique avec une très faible consommation d'énergie et EMI (bruit).
  • Toshiba a développé les séries de "contrôleurs de périphériques intelligents" Z84013 / Z84C13 à 84 broches et Z84015 / Z84C15 à 100 broches, essentiellement des cœurs NMOS et CMOS Z80 ordinaires avec des périphériques Z80, une minuterie de surveillance , une réinitialisation de la mise sous tension et un générateur d'état d'attente sur la même puce. Fabriqué par Sharp ainsi que Toshiba. Ces produits sont aujourd'hui approvisionnés en second par Zilog.
  • Le Zilog Z380 compatible 32 bits Z80 , introduit en 1994, est principalement utilisé dans les équipements de télécommunications.
  • L' eZ80 compatible Z80 entièrement pipeline de Zilog avec une longueur de mot de 8/16/24 bits et un espace d'adressage linéaire de 16 Mo a été introduit en 2001. Il existe dans des versions avec SRAM sur puce ou mémoire flash , ainsi qu'avec des périphériques intégrés. Une variante a sur puce MAC (contrôleur d'accès au support) et les logiciels disponibles incluent une pile TCP/IP . Contrairement aux Z800 et Z280, il n'y a que quelques instructions ajoutées (principalement des LEA , des PEA et des charges 16/24 bits à adresse variable), mais les instructions sont plutôt exécutées entre 2 et 11 fois plus efficace en cycle d'horloge que sur le Z80 d'origine (avec une valeur moyenne d'environ 3 à 5 fois). Il est actuellement spécifié pour des fréquences d'horloge jusqu'à 50 MHz.
  • Kawasaki a développé le KL5C8400 compatible binaire qui est environ 1,2 à 1,3 fois plus efficace en cycle d'horloge que le Z80 d'origine et peut être cadencé jusqu'à 33 MHz. Kawasaki produit également la famille KL5C80A1x, qui possède des périphériques ainsi qu'une petite RAM sur puce ; il est approximativement aussi efficace en cycle d'horloge que l'eZ80 et peut être cadencé jusqu'à 10 MHz (2006).
  • Le NEC μPD9002 était un processeur hybride compatible avec les familles Z80 et x86 .
  • La famille de processeurs audio de Chinese Actions Semiconductor (ATJ2085 et autres) contient un MCU compatible Z80 ainsi qu'un processeur DSP dédié 24 bits. Ces puces sont utilisées dans de nombreux produits MP3 et lecteurs multimédias.
  • Les noyaux souples synthétisables T80 (VHDL) et TV80 (Verilog) sont disponibles sur OpenCores.org.
  • Le National Semiconductor NSC800 annoncé en 1980 est utilisé dans de nombreuses machines de chiffrement électroniques TeleSecurity Timmann (TST) et le Canon X-07 . Le NSC 800 est entièrement compatible avec le jeu d'instructions Z-80. Le NSC800 utilise un bus multiplexé comme le 8085 mais a un brochage différent de celui du Z80.
Non compatible
  • La série Toshiba TLCS 900 de microcontrôleurs à haut volume (principalement OTP ) est basée sur le Z80 ; ils partagent la même structure de registre de base BC,DE,HL,IX,IY et en grande partie les mêmes instructions, mais ne sont pas compatibles binairement, alors que le TLCS 90 précédent est compatible Z80.
  • Les microcontrôleurs de la série NEC 78K sont basés sur le Z80 ; ils partagent la même structure de registre BC,DE,HL de base et ont des instructions similaires (mais nommées différemment) ; pas compatible binaire.
Partiellement compatible
N'est plus produit
  • L' ASCII Corporation R800 était un processeur 16 bits rapide utilisé dans les ordinateurs MSX TurboR ; c'était un logiciel, mais pas un matériel compatible avec le Z80 (la synchronisation du signal, le brochage et la fonction des broches diffèrent du Z80).
  • Les NMOS Z800 et CMOS Z280 de Zilog étaient des implémentations Z80 16 bits (avant HD64180 / Z180 ) avec un espace d'adressage MMU paginé de 16 Mo ; ils ont ajouté de nombreuses orthogonalisations et modes d'adressage au jeu d'instructions Z80. Les fonctionnalités du mini-ordinateur - telles que les modes utilisateur et système, la prise en charge multiprocesseur, la MMU sur puce, les instructions sur la puce et le cache de données, etc. cela rendait également très difficile la prévision des temps d'exécution des instructions.
  • Certains jeux d'arcade tels que Pang / Buster Bros utilisent un processeur "Kabuki" Z80 crypté fabriqué par VLSI Technology , où les clés de décryptage sont stockées dans sa mémoire interne sauvegardée par batterie , pour éviter le piratage et les jeux pirates illégaux.

Utilisations notables

Ordinateurs de bureau

Le Z80A a été utilisé comme CPU dans un certain nombre de consoles de jeux, comme cette ColecoVision .

À la fin des années 1970 et au début des années 1980, le Z80 a été utilisé dans un grand nombre de machines à vocation commerciale assez anonymes avec le système d'exploitation CP/M , une combinaison qui dominait le marché à l'époque. Quatre exemples bien connus d'ordinateurs professionnels Z80 exécutant CP/M sont le Heathkit H89 , le portable Osborne 1 , la série Kaypro et l' Epson QX-10 . Moins connu était le cher Otrona Attache haut de gamme . Certains systèmes utilisaient un logiciel de système d'exploitation multitâche (comme MP/M ou Morrow 's Micronix) pour partager le même processeur entre plusieurs utilisateurs simultanés .

Un Sinclair ZX Spectrum qui utilisait un Z80 cadencé à 3,5 MHz

Plusieurs ordinateurs domestiques ont été introduits qui utilisaient le Z80 comme processeur principal ou comme option de plug-in pour permettre l'accès aux logiciels écrits pour le Z80. La série TRS-80 est remarquable , y compris le modèle original (plus tard rétronyme "Modèle I"), le modèle II , le modèle III et le modèle 4 , qui étaient équipés d'un Z80 comme processeur principal, et certains (mais pas tous) d'autres Modèles TRS-80 qui utilisaient le Z80 comme processeur principal ou secondaire. D'autres machines notables étaient le DEC Rainbow 100 et le Seequa Chameleon , tous deux dotés à la fois d'un processeur Intel 8088 et d'un processeur Z80, pour prendre en charge soit les applications CP/M-80 8 bits fonctionnant sur le Z80, soit un MS-DOS personnalisé. qui n'était pas entièrement compatible avec les applications PC DOS fonctionnant sur le 8088.

En 1981, Multitech (qui deviendra plus tard Acer ) a introduit le Microprofessor I , un système d'apprentissage simple et peu coûteux pour le microprocesseur Z80. Actuellement, il est toujours fabriqué et vendu par Flite Electronics International Limited à Southampton, en Angleterre .

Ordinateurs portables et de poche

L'utilisation du Z80 dans des appareils plus légers fonctionnant sur batterie s'est généralisée avec la disponibilité des versions CMOS du processeur. Il a également inspiré le développement d'autres processeurs basés sur CMOS, tels que le LH5801 de Sharp. Le Sharp PC-1500 , un BASIC -programmable ordinateur de poche a été publié en 1981, suivi par l'amélioration de Sharp PC-1600 en 1986 et le Sharp PC-E220 en 1991. Les modèles ultérieurs de la Sharp Wizard , série d'organisateurs personnels ont également été Z80 basés . Les ordinateurs portables qui pouvaient exécuter le système d'exploitation CP/M tout comme les ordinateurs de bureau ont suivi avec Epson PX-8 Genève en 1984, et en 1985 les Epson PX-4 et Bondwell-2 . Alors que le marché des ordinateurs portables a évolué au cours des années suivantes vers des processeurs Intel 8086 plus puissants et le système d'exploitation MS-DOS, des systèmes légers basés sur le Z80 avec une autonomie de batterie plus longue étaient toujours en cours d'introduction, tels que le Cambridge Z88 en 1988 et l' Amstrad NC100 en 1992. Le Z8S180 dérivé du Z80 a également trouvé sa place dans un des premiers assistants numériques personnels à stylet , l' Amstrad PenPad PDA600 en 1993. VTech, basée à Hong Kong, a produit une gamme de petits ordinateurs portables appelés « Lasers » basés sur un Z80. Les deux derniers étaient les Laser PC5 et PC6. Le Cidco MailStation Mivo 100, sorti pour la première fois en 1999, était un appareil de messagerie portable autonome, avec un microcontrôleur basé sur Z80. Texas Instruments a produit une gamme d'organisateurs de poche (fin en 2000) utilisant des processeurs Toshiba construits autour d'un cœur Z80 ; le premier d'entre eux était le TI PS-6200 et après une longue série de production d'une douzaine de modèles a abouti à leur série PocketMate.

Systèmes embarqués et électronique grand public

PABX basé sur Z80 . Le Z80 est la troisième puce en partant de la gauche, à droite de la puce avec l'étiquette blanche écrite à la main.

Le Zilog Z80 est depuis longtemps un microprocesseur populaire dans les systèmes embarqués et les cœurs de microcontrôleurs , où il reste largement utilisé aujourd'hui. Les applications du Z80 incluent des utilisations dans l'électronique grand public , les produits industriels et les instruments de musique électroniques. Par exemple, le Z80 a été utilisé dans le synthétiseur musical révolutionnaire Prophet-5 , ainsi que dans le premier synthétiseur MIDI Prophet 600 . Casio a utilisé le Z80A dans sa console de jeu vidéo PV-1000 .

Un bon nombre de jeux vidéo d'arcade du début des années 1980, dont le jeu d'arcade Pac-Man , contiennent des processeurs Z80.

Le Z80 a été utilisé dans les consoles Sega Master System et Sega Game Gear . La Sega Genesis contient un Z80, avec sa propre RAM de 8 Ko, qui fonctionne en parallèle avec le processeur principal MC68000, a un accès direct aux puces sonores et aux ports d'E/S (contrôleur) du système, et dispose d'un chemin de données commuté vers le bus mémoire principale du 68000 (donnant accès à la RAM principale de 64 Ko, à la cartouche logicielle et à l'ensemble de la puce vidéo) ; en plus de fournir une rétrocompatibilité avec les jeux Master System, le Z80 est souvent utilisé pour contrôler l'audio dans le logiciel Genesis.

Les processeurs Z80 ont également été utilisés dans la série pionnière et populaire de calculatrices graphiques TI-8x de Texas Instruments , à partir de 1990 avec la TI-81 , qui comprend une Z80 cadencée à 2 MHz. La plupart des calculatrices haut de gamme de la série, à commencer par la TI-82 et la TI-85 , synchronisent leurs processeurs Z80 à 6 MHz ou plus. (Quelques modèles portant des noms TI-8x utilisent d'autres processeurs, tels que le M68000, mais la grande majorité sont basés sur Z80. Sur ceux-ci, il est possible d'exécuter des programmes utilisateur assemblés ou compilés sous la forme de code en langage machine Z80. ) La série TI-84 Plus , introduite en 2004, est toujours en production à partir de 2020. La série TI-84 Plus CE , introduite en 2015, utilise le processeur Zilog eZ80 dérivé du Z80 et est également toujours en production à partir de 2020.

À la fin des années 1980, une série de téléphones fixes soviétiques appelée « AON » comportait le Z80 ; ces téléphones ont étendu l'ensemble des fonctionnalités de la ligne fixe avec l'identification de l'appelant , différentes sonneries en fonction de l'appelant, la numérotation rapide , etc. Dans la seconde moitié des années 90, les fabricants de ces téléphones sont passés à des microcontrôleurs compatibles 8051 pour réduire la consommation d'énergie et empêcher les verrues murales compactes de surchauffer.

Voir également

Notes de bas de page

Les références

Lectures complémentaires

Fiches techniques et manuels
Livres de quincaillerie
Livres de logiciels
  • Programmation du Z80 ; 3e édition ; Rodnay Zaks ; Sybex ; 630 pages ; 1980 ; ISBN  978-0895880949 . (archiver)
  • Programmation en langage assembleur Z80 ; 1ère édition ; Lance Leventhal ; Osborne/McGraw-Hill; 642 pages ; 1979 ; ISBN  978-0931988219 . (archiver)
  • Langage d'assemblage 8080/Z80 - Techniques pour une programmation améliorée ; 1ère édition ; Alan Miller; John Wiley & Fils; 332 pages ; 1981; ISBN  978-0471081241 . (archiver)
  • Programmation en langage assembleur Z80 et 8080 ; 1ère édition ; Kathe Spracklen; Hayden ; 180 pages ; 1979 ; ISBN  978-0810451674 . (archiver)
  • Programmation pratique de micro-ordinateur - Le Z80 - y compris la source pour l'assembleur résident et le moniteur de débogage ; 1ère édition ; Walter Weller; Technologie du Nord; 501 pages ; 1978; ISBN  978-0930594053 . (archiver)
  • Sous-routines du langage d'assemblage Z80 ; 1ère édition ; Lance Leventhal et Winthrop Saville ; Osborne/McGraw-Hill; 512 pages ; 1983 ; ISBN  978-0931988912 . (archiver)
  • Sans-papiers Z80 Documenté ; Sean Young; v0.91 ; 52 pages ; 2005. (archives)
Cartes de référence
  • Carte de référence pour le microprocesseur Z80 ; Shirley & Nanos ; Systèmes nanos; 16 pages ; 1981. (archives)
  • Carte de référence instantanée à microprocesseur Z80 ; James Lewis ; Micro logique ; 2 pages ; 1981. (archives)

Liens externes