Zilog Z80

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Zilog Z80 A.
Un Z80 en encapsulado LQFP.

El Zilog Z80 (Z80) es un microprocesador de 8 bits cuya arquitectura se encuentra a medio camino entre la organización de acumulador y de registros generales. Si consideramos al Z80 como procesador de arquitectura de registros generales, se sitúa dentro del tipo de registro-memoria.

Fue lanzado al mercado en julio de 1976 por la compañía Zilog, y se popularizó en los años 80 a través de ordenadores como el Sinclair ZX Spectrum, Amstrad CPC o los ordenadores de sistema MSX. Es uno de los procesadores de más éxito del mercado, del cual se han producido infinidad de versiones clónicas, y sigue siendo usado de forma extensiva en la actualidad en multitud de sistemas embebidos.

Historia[editar]

Introducción[editar]

El Z80 fue diseñado principalmente por Federico Faggin, que estuvo trabajando en Intel como diseñador jefe del Intel 4004 y del Intel 8080. Cuando se terminó de producir, en 1974, Federico Faggin dejó Intel, fundó Zilog y comenzó a trabajar en el diseño de Z80 basándose en la experiencia adquirida creando el Intel 8080 y basándose en la estructura de este último. Dos años después estaba a la venta el Z80.

El Z80 estaba diseñado para ser compatible a nivel de código con el Intel 8080, de forma que la mayoría de los programas para el 8080 pudieran funcionar en él, especialmente el sistema operativo CP/M

El Z80 tenía ocho mejoras fundamentales respecto al Intel 8080:

  • Un conjunto de instrucciones mejorado, incluyendo los nuevos registros índice IX e IY y las instrucciones necesarias para manejarlos.
  • Dos bancos de registros que podían ser cambiados de forma rápida para acelerar la respuesta a interrupciones.
  • Instrucciones de movimiento de bloques, E/S de bloques y búsqueda de bytes.
  • Instrucciones de manipulación de bits.
  • Un contador de direcciones para el refresco de la DRAM integrado, que en el 8080 tenía que ser proporcionado por el conjunto de circuitos de soporte.
  • Alimentación única de 5 voltios.
  • Necesidad de menos circuitos auxiliares, tanto para la generación de la señal de reloj como para el enlace con la memoria y la E/S.
  • Más barato que el Intel 8080.

El Z80 eliminó rápidamente al Intel 8080 del mercado y se convirtió en uno de los procesadores de 8 bits más populares. Las primeras versiones funcionaban a 2,5 MHz, pero su velocidad ha aumentado hasta los 20 MHz. Así, la versión más utilizada fue el Z80A funcionando a 3,58 MHz (un cuarto de la frecuencia PAL o NTSC) siendo la velocidad de fábrica de 4 MHz.

En la actualidad Zilog sigue fabricando versiones del Z80 original y otros modelos compatibles con él que mejoran las prestaciones.

Usos notables[editar]

A comienzos de los años 1980 el Z80 o versiones clónicas del mismo fueron usadas en multitud de ordenadores domésticos, como la gama MSX, el Radio Shack TRS-80, el Sinclair ZX80, ZX81 y ZX Spectrum. También fue usado en el Osborne 1, el Kaypro y otra gran cantidad de ordenadores empresariales que dominaban el mercado por aquella época y que usaban el sistema operativo CP/M.

A mediados de los años 1980 el Z80 fue usado en el Tatung Einstein y la familia de ordenadores domésticos y empresariales Amstrad CPC y Amstrad PCW. El Z80 también fue usado en los ordenadores Tiki 100, que se empleaban en los colegios de Noruega por entonces.

Tal fue la popularidad del Z80 y el CP/M que otros ordenadores basados en el MOS Technology 6502 o 6510 que ya estaban en el mercado, como el BBC Micro, el Apple II y el Commodore 64 podían ser ampliados mediante una tarjeta o cartucho que contenía un procesador Z80. También el Commodore 128 incluía un Z80 secundario junto al MOS Technology 8502 principal para poder usar CP/M.

Ya en los años 1990 el Z80 ha sido usado en las videoconsolas Sega Master System y Sega Game Gear. Además las videoconsolas SNK Neo-Geo y la Sega Mega Drive y muchas máquinas arcade usan un Z80 como el procesador especializado en sonido.

Las Game Boy y Game Boy Color de Nintendo utilizan una variante del Z80 fabricada por Sharp.

En la actualidad parte de la gama de calculadoras gráficas programables de Texas Instruments tales como las TI-82, TI-83, TI-85, TI-86 y sus sucesoras emplean una versión clónica del Z80 fabricada por NEC como procesador principal.

Además el Z80 también es un microprocesador popular para ser usado en sistemas embebidos, campo donde se emplea de manera extensiva.

Segundas fuentes y clónicos[editar]

Mostek y SGS fueron segundas fuentes del Z80 (Mostek MK3880 y SGS Z8400). Sharp y NEC fabrican clónicos del Z80 (Sharp LH-0080 y NEC µPD780C). National Semiconductor fabricó un procesador clónico, el NSC800, con tecnología CMOS pero que no era compatible pin a pin. Hitachi fabricó una versión con tecnología CMOS mejorada, cuya segunda fuente fue curiosamente la propia Zilog.

En la República Democrática Alemana se produjo una versión clónica del Z80 llamada U880, que fue empleada en los sistemas informáticos de Robotron y de VEB Mikroelektronik Mühlhausen, tales como las series KC85 y en muchos ordenadores de fabricación casera.

En Rumanía se fabricó una versión clónica del Z80, el MMN80, y que según algunas fuentes fue también fabricada en la Unión Soviética. Este microprocesador fue utilizado en la mayoría de ordenadores fabricados en este país, casi todos clones de los Sinclair ZX Spectrum: Ice Felix HC85, HC90, HC91, HC2000, Datatim/Universidad Técnica de Timisoara TIM-S, MicroTIM y MicroTIM+ o los Intreprinderea Electrónica CIP, CIP-02, CIP-03, CIP-04.

También se crearon varias copias del Z80 en la Unión Soviética, siendo el más conocido el T34.

Hoy en día existen dos núcleos de procesador llamados T80 y TV80 que son funcionalmente equivalentes al Zilog Z80 y se encuentran disponibles bajo una licencia tipo BSD. El código fuente de estos núcleos está disponible tanto en Verilog como en VHDL. Una vez sintetizada ésta última versión puede funcionar hasta 35 MHz en una FPGA Xilinx Spartan II.

En la actualidad la propia Zilog fabrica una versión mejorada del Z80 llamada eZ80, que funcionando a 50 MHz tiene un rendimiento similar a un Z80 funcionando a 150 MHz y además puede direccionar hasta 16 MB de memoria RAM extendiendo el tamaño de los registros, frente a los 64 KB del Z80.

Existen diseños de hardware actuales que implementan un Z80 dentro de un chip programables programando parte del chip para que cumpla las funciones del Z80.

  • No todos los clones de este microprocesador tienen conectado el pin NMI, por lo que al intentar usarlo en algunos modelos este hace caso omiso.

Evoluciones[editar]

Z180[editar]

Un antiguo Z180 en un empaquetado PLCC (los más pequeños QFP y LQFP son más comunes hoy día).
Z8S180.

El Z180 es el sucesor del Z80. Es compatible con una larga colección de software escrito para este.[1] La familia Z180 añade mayores prestaciones y funciones de periféricos integrados como el generador de reloj, contadores/relojes de 16 bits, controlador de interrupciones, generadores de estado de espera, puertos serie y un controlador DMA.[2] Usa ciclos de lectura y escritura separados, usando relojes similares a los del Z80 y a los procesadores Intel.[3] La MMU integrada tiene la capacidad de direccionar hasta 1 MB de memoria. Es posible configurar el Z180 para que opere como un Hitachi HD64180.

Chip Velocidad (MHz) Relojes I/O Ctrl. comunicaciones Otros
Z80180 6, 8, 10 2 N/S CPU 1 MB MMU, 2xDMAs, 2xUARTs
Z80181 10 1 16 CPU 1 MB MMU, 2xDMAs, 2xUARTs
Z80182 16, 33, 20 0 Reloj serie, 24 ESCC, CSIO, UART S180 Megacell, 2xESCC channels, 16550 MIMIC
Z80195 20, 33 4 7/24 SCC, CSIO, UART
Z8L180 20 2 Reloj serie CSIO, UART 1 MB MMU, 2xDMAs, 2xUARTs, 3.3 V Operation
Z8L182 20 0 Reloj serie ESCC, CSIO, UART S180 Megacell, 2xESCC channels, 16550 MIMIC, 3.3V operation
Z8S180 10, 20, 33 2 Reloj serie UART, DMA, I2C, SPI 1 MB MMU, 2xDMAs, 2xUARTs

Z80182[editar]

El Z80182 es una versión mejorada y mejor del Z80 y es parte de la familia Z180. Se le apoda Controlador de periféricos inteligentes de Zilog (ZIP: Zilog Intelligent Peripheral Controller). También es completamente estático (el reloj puede ser parado y no se pierden datos de los registros)[cita requerida] y tiene una opción de baja interferencia electromagnética que reduce el slew rate de las salidas.[cita requerida].

El Z80182 puede operar a 33 MHz con un oscilador externo operando a 5 voltios, o a 20 MHz usando el oscilador interno a 3,3 V.[4]

Hitachi HD64180[editar]

Hitachi HD64180
Hitachi HD64180
Hitachi HD64180
Hitachi HD64180 DIP64
Hitachi HD64180 DIP64

El HD64180 es un microprocesador basado en el Z80 desarrollado por Hitachi que incluye una MMU. El HD64180 Super Z80 fue posteriormente licenciado a Zilog y vendido por esta con el nombre Z64180 incluyendo algunas mejoras como las presentes en el Z180.

Tiene las siguientes características:

  • MMU con soporte de 512 KiB de memoria y un espacio de E/S 64 KiB
  • 12 nuevas instrucciones fueron añadidas
  • Direct Memory Access Controller (DMAC) de dos direcciones
  • Generador de estado de espera programable
  • Refresco programable de DRAM
  • Interfaz de comunicaciones serie asíncronas (ASCI) de dos canales
  • Temporizador de recarga programable (PRT) de 16 bits de dos canales
  • Puerto E/S de 1 canal con reloj (CSI/O)
  • Controlador de interrupciones vectorizadas programable

Los ordenadores CP/M Micromint SB180 y SemiDisk Systems DT42 se basaron en el Hitachi HD64180.

Z280[editar]

El Z280 en un empaquetado PLCC

El Z280 fue una mejora de la arquitectura Z80 presentada en julio de 1987.

Básicamente es una versión CMOS ligeramente mejorada del anterior Z800. Ambas versiones, el Z280 y el Z800, fueron fracasos comerciales.

Añadían ambos:

  • Una MMU para expandir el rango de direccionamiento de memoria hasta los 16 MiB
  • Características de configuración para multitarea, multiprocesador y coprocesador
  • Una caché de 256 bytes
  • Un gran número de instrucciones y modos de direccionamiento, dando como resultado un total de más de 2000 combinaciones
  • Su reloj interno funcionaba a 2 ó 4 veces la velocidad del reloj externo (p.e. una CPU a 16 MHz con un bus de 4 MHz).

Estructura[editar]

A pesar de ser un microprocesador de 8 bits, el Z80 puede manejar instrucciones de 16 bits y puede direccionar hasta 64 KiB de RAM. Una de las características más reseñables es que tiene las instrucciones del Intel 8080 como subconjunto, de modo que algunos ordenadores basados en Z80 podían ejecutar programas diseñados para el CP/M del 8080. Esto ha hecho que los formatos de instrucción del Z80 sean bastante complejos, ya que tienen que mantener su compatibilidad con el 8080. Sin embargo el Z80 ha conseguido mejorar al microprocesador de Intel en velocidad, ha añadido nuevos modos de direccionamiento y contiene un juego de instrucciones más amplio.

Registros[editar]

Estructura interna del Z80.

La estructura de registros del Z80 está compuesta por un banco principal, otro alternativo y por último un banco compuesto por registros especiales. La existencia del banco alternativo mejora la velocidad ante la presencia de las interrupciones ya que permite cambiar desde el banco principal al alternativo. Los registros son:

  • A, B, C, D, E, H y L (banco principal)
  • A', B', C', D', E', H' y L' (banco alternativo)
  • I, R, IX, IY, SP y PC (registros especiales)

Los registros del banco principal son generales y de 8 bits. Se pueden tomar por parejas, siendo entonces IX e IY los registros índices. El registro A sirve de acumulador. El R almacena el bloque de memoria a cuyo refresco se va a proceder. El SP es el puntero de cima de pila. El PC es el contador de programa. El F contiene los flags o también llamados bits de condición.

Registros primarios                  Registros alternativos
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       A       |S Z - A - P N C| F  |       A'      |S Z - A - P N C| F'
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       B       |       C       |    |       B'      |       C'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       D       |       E       |    |       D'      |       E'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       H       |       L       |    |       H'      |       L'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Registros índice
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              IX               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              IY               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Puntero de pila y Contador de programa
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              SP               | Puntero de pila
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              PC               | Contador de programa
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Registro de interrupciones y
Registro de refresco de memoria
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       I       |       R       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Acumulador[editar]

Registro utilizado para guardar el dato que se está usando. Es el registro mas importante, junto al registro F (con el que forma el par de registros AF). La mayoría de las operaciones matemáticas y lógicas de 8 bits se realizan a través de este registro, de ahí su importancia.

Par HL[editar]

Es el par de registros más versátil, utilizado sobre todo para contener direcciones de memoria. En el registro simple L se coloca el byte más bajo (LOW en inglés) de la dirección de memoria, y en H, se coloca el byte más alto (HIGH en inglés) de la dirección de memoria. Así mismo, es muy utilizado por las llamadas a subrutinas BIOS (CALL) para datos de entrada/salida de la subrutina llamada. Algunas instrucciones Assembler son específicas de este par de registros.

Pares BC y DE[editar]

Se utilizan como pares auxiliares de HL en instrucciones que manipulan bloques como LDI, LDIR, etc.

Registros indexados IX e IY[editar]

Son 2 registros de 16 bits. Se utilizan como registros base para apuntar a una dirección de memoria de donde se va a tomar un dato. Se indica un byte adicional que implica desplazamiento.

  • Aunque no está documentado oficialmente, se pueden utilizar como 2 registros de 8 bits independientes, obteniendo un total de 4 registros de 8 bits extras.

Puntero de pila SP[editar]

Permite el anidamiento de rutinas. Apunta a una zona de memoria llamada STACK que es una estructura de pila o LIFO.

Registros especiales[editar]

  • Flag F: Indica condiciones especiales al realizar operaciones matemáticas o lógicas.

Sirve como conjunto de banderas, que nos indican la información sobre las operaciones que se están realizando.

  • Registro de interrupciones I: Se utiliza para ejecutar cualquier subrutina como respuesta a una interrupción hardware, utilizándose como puntero I como la parte alta de la dirección y el dato que exista en el bus de datos como la parte baja, esto permite manejar 128 interrupciones distintas.
  • Registro de refresco R: El valor del registro R se coloca en el bus de direcciones mientras se activa la señal de refresco proporcionada por la CPU. Esto ocurre mientras la CPU decodifica una instrucción, o un prefijo de instrucción.

Bits de condición (flags) del Z80[editar]

  • 0-C: Acarreo.
  • 1-N: Resta BCD, para corrección con DAA.
  • 2-P/V: Paridad/desbordamiento.
  • 4-H: Medio acarreo, para corrección BCD con DAA.
  • 6-Z: Cero.
  • 7-S: Signo.

Los bits 3 y 5 no se utilizan, pero ciertas instrucciones los modifican, aunque no están oficialmente documentados.

Patillaje[editar]

Patillas del Z80. Las líneas del bus de direcciones se ven en rojo, las del bus de datos en azul y las del bus de control en color verde.

            +--\/--+
<-- A11    1|      |40 A10    -->
<-- A12    2|      |39 A9     -->
<-- A13    3|      |38 A8     -->
<-- A14    4|      |37 A7     -->
<-- A15    5|      |36 A6     -->
--> CLK    6|      |35 A5     -->
<-> D4     7|      |34 A4     -->
<-> D3     8|      |33 A3     -->
<-> D5     9| Z80  |32 A2     -->
<-> D6    10|      |31 A1     -->
+5V Vcc   11|      |30 A0     -->
<-> D2    12|      |29 GND
<-> D7    13|      |28 !RFSH  -->
<-> D0    14|      |27 !M1    -->
<-> D1    15|      |26 !RESET <--
--> !INT  16|      |25 !BUSRQ <--
--> !NMI  17|      |24 !WAIT  <--
<-- !HALT 18|      |23 !BUSAK -->
<-- !MREQ 19|      |22 !WR    -->
<-- !IORQ 20|      |21 !RD    -->
            +------+

Véase también[editar]

Enlaces externos[editar]

Referencias[editar]

  1. Ganssle, Jack (1992). «The Z80 Lives!». «The designers picked an architecture compatible with the Z80, giving Z80 users a completely software compatible upgrade path».
  2. Jack G. Ganssle. (1992). The art of programming embedded systems. San Diego: Academic Press. p. 13. ISBN 9780122748806. 
  3. Stuart R. Ball. (2002). Embedded microprocessor systems real world design. Amsterdam: Newnes. p. 34. ISBN 9780750675345. 
  4. «CPU Control Register». Z80182/Z8L182 Zilog Intelligent Peripheral Controller Product Specification. San Jose, California: Zilog. 1997. p. 3–48. 

Otras lecturas[editar]