Sans rentrer dans les détails techniques, il avait été prévu pour être relativement compatible avec l'’Intel 8080, et donc la majorité du code pour 8080 pouvait fonctionner sans grandes modifications sur le Z80.
En fait, le Z80 est compatible hard et soft avec l'Intel 8080 (i8080), à 2 petites différences près :
- Le quartz (l'horloge) de l'i8080 plafonnait à 1MHz, alors que le début de gamme du Z80 commençait à 2.5MHz pour s'arrêter, à l'heure où j'étudiais ce circuit dans les années 80, à 6MHz (mais Zilog a pu par la suite étoffer sa gamme en proposant des modèles supportant des horloges plus rapides). En conséquence, les programmes tournent plus vite sur le Z80 que sur l'i8080, ce qui est généralement plus un bien qu'un mal (sauf si le programme écrit pour un i8080 fait des temporisations basées sur le cycle de l'horloge, à base de boucles vides; évidemment, elles se finiront plus vite sur le Z80.)
- Les mnémoniques des instructions de l'assembleur du Z80 sont différents de ceux de l'i8080, je pense pour des raisons de droit industriel. En d'autres termes, les instructions Intel et Zilog portent un nom différent mais il y a correspondance directe entre les deux. En principe un assembleur bien fait sait aussi bien assembler du code Z80 que de l'i8080, grâce à une directive de compilation. Tout ça n'affecte que la compatibilité des programmes au niveau source. Au niveau binaire, les codes machines sont strictement identiques.
Pour tout le reste, les 2 processeurs sont parfaitement compatibles tant hard (broche à broche) que soft (instructions). Le Z80 rajoute quelques possibilités de rafraîchissement automatique de la mémoire dynamique et autres détails que je ne vais pas mentionner ici.