El Zilog Z8000 es un microprocesador de 16 bits diseñado por Zilog a principios de 1979.
Bernard Peuto diseñó la arquitectura, mientras que Masatoshi Shima se encargó de la lógica y la implementación física, con la ayuda de un pequeño grupo de personas. A diferencia de la mayoría de los diseños de la época, el Z8000 no utilizaba microcódigo , lo que permitió su implementación en tan solo 17.500 transistores.
El Z8000 no es compatible con el Z80 , pero incluye varios elementos de diseño de este último. Entre ellos se encuentra la capacidad de combinar sus registros y utilizarlos como un único registro más grande; mientras que el Z80 permitía utilizar dos registros de 8 bits como un único registro de 16 bits, el Z8000 amplió esta posibilidad permitiendo que dos registros de 16 bits funcionaran como un registro de 32 bits, o cuatro como un registro de 64 bits. Estos registros combinados son especialmente útiles para operaciones matemáticas.
Aunque se utilizó un poco a principios de los años 80, nunca fue tan popular como el Z80. Se lanzó después del Intel 8086 de 16 bits (abril de 1978) y al mismo tiempo que el Intel 8088 , más económico , y solo unos meses antes del Motorola 68000 (septiembre de 1979), que tenía una arquitectura de conjunto de instrucciones de 32 bits y era aproximadamente el doble de rápido.
El Zilog Z80000 fue un diseño posterior de 32 bits, lanzado en 1986.
El Z8000 se vendió inicialmente en dos versiones: el Z8001 con un bus de direcciones externo de 23 bits para permitirle acceder a hasta 8 megabytes de memoria, y el Z8002 que sólo admitía direcciones de 16 bits para permitir 64 kilobytes de memoria. Esto permitió que el Z8002 tuviera ocho pines menos y se vendiera en un formato DIP más pequeño de 40 pines que lo hacía menos costoso de implementar. Zilog afirmó que el Z8001 y el Z8002 eran simplemente versiones empaquetadas de forma diferente del mismo chip Z8000, "la diferencia se logró mediante una opción de unión durante la fabricación". [1]
Incluso con 48 pines, no había suficientes conexiones para permitir un bus de datos de 16 bits y un bus de direcciones de 24 bits completos, ya que eso dejaría solo 8 pines libres, lo que no es suficiente para otras necesidades de interfaz como energía, relojes e interrupciones. Para solucionar esto, el Z8001 multiplexó los pines de dirección y datos juntos. Los primeros 16 pines del bus de direcciones de 23 pines se usaron en ciclos alternativos como un bus de datos de 16 bits. Esto significaba que cada acceso a la memoria tomaba dos ciclos de memoria completos: primero se presentaba la dirección y tenía que ser "enclavada" usando circuitos externos, y luego en el siguiente ciclo se leían o escribían 16 bits de datos usando los mismos pines. [2] Esto significa que el Z8000 funcionaría aproximadamente la mitad de rápido que algo como el 68000, que tenía 16 pines de datos separados y 24 pines de dirección en un chip más grande de 64 pines.
La serie se amplió posteriormente para incluir las versiones actualizadas Z8003 y Z8004 de los modelos Z8001 y Z8002, respectivamente. Estas versiones se diseñaron para proporcionar un soporte mejorado para la memoria virtual , añadiendo nuevos registros de estado para indicar fallos de segmentación (prueba y configuración) y proporcionar una capacidad de cancelación.
Hay dieciséis registros de 16 bits , etiquetados de R0 a R15. Los registros se pueden concatenar en ocho registros de 32 bits, etiquetados RR0/RR2/../RR14, o en cuatro registros de 64 bits, etiquetados RQ0/RQ4/RQ8/RQ12. Los primeros ocho registros también se pueden subdividir en dieciséis registros de 8 bits, etiquetados de RL0 a RL7 para el byte inferior y de RH0 a RH7 para el byte superior (alto). El registro R15 se designa como puntero de pila . En el Z8001, el registro R14 se utiliza para incluir un segmento fijo en el puntero de pila, y el contador de programa se expande a 32 bits para incluir un segmento similar.
Existe un modo de usuario ("normal") y un modo de supervisor , que se seleccionan mediante el bit 14 del registro de indicadores. En el modo de supervisor, los registros de pila apuntan a la pila del sistema y todas las instrucciones privilegiadas están disponibles. En el modo de usuario, los registros de pila apuntan a la pila normal y todas las instrucciones privilegiadas generarán un fallo. Tener modos y pilas separados mejora enormemente el rendimiento de los cambios de contexto entre los programas de usuario y un sistema operativo . [3] : 6.1
Al igual que el Z80 anterior, el Z8000 incluye un sistema para actualizar automáticamente la RAM dinámica . En la mayoría de los sistemas, esto normalmente lo maneja el controlador de pantalla de video o la lógica externa. Esto se implementó a través de un registro de contador de actualización (RC) independiente que contenía la página de memoria que se estaba actualizando en ese momento. La función se activa configurando el bit más significativo del RC, el bit 15, en 1. Los siguientes seis bits, del 14 al 9, son una tasa, medida en términos de cada cuarto ciclo de reloj. Con un reloj estándar de 4 MHz, eso permite que se llame a la actualización cada 1 a 64 microsegundos. Los 8 bits restantes seleccionan una fila en la memoria para actualizar. [3] : 6.5, 6.28
El Z8000 tiene un mapa de memoria segmentado , con un "número de segmento" de 7 bits y un desplazamiento de 16 bits. Ambos números están representados por pines en el Z8001, lo que significa que puede direccionar directamente una memoria de 23 bits, u 8 MB. [3] : 6.19 Las instrucciones solo pueden acceder directamente a un desplazamiento de 16 bits. Esto permite que el formato de instrucción sea más pequeño; un sistema con acceso directo a una dirección de 23 bits necesitaría leer tres bytes (24 bits) de la memoria por cada dirección a la que se hace referencia en el código, requiriendo así dos lecturas en un bus de 16 bits. Con segmentos, las direcciones solo necesitan una única lectura de 16 bits que luego se suma a un número de segmento para producir la dirección completa. El número de segmento solo necesita actualizarse cuando los datos cruzan los límites de 16 bits/64 KB. [3] : 6.3
Internamente, las direcciones son todas de 32 bits: una palabra de 16 bits superior con un 0 inicial en el bit 15, el número de segmento de 7 bits y luego 8 ceros. Esto requiere más memoria para almacenar, ya que cada dirección de 23 bits utiliza 32 bits de espacio de registro, pero permite que las direcciones se almacenen limpiamente en los registros de 16 bits y se puedan insertar y extraer de la pila con mayor facilidad, lo que ocurre en las palabras de 16 bits. [3] : 6.6
La unidad de gestión de memoria (MMU) Z8010 opcional de 48 pines amplía el mapa de memoria a 16 MB al traducir la dirección de 23 bits de la CPU a una de 24 bits. Un Z8010 tiene 64 registros descriptores de segmento, cada uno de los cuales contiene una dirección física base de 16 bits, un límite de 8 bits y un conjunto de atributos de 8 bits. Cuando la CPU intenta acceder a un segmento en particular, un valor de 7 bits, el Z8010 utiliza los 6 bits inferiores del número de segmento para seleccionar un registro descriptor de segmento, verifica el desplazamiento de 16 bits en el segmento contra el valor límite en ese registro y verifica los bits de permiso en los atributos para ver si el acceso está permitido y, si el acceso está permitido, agrega la dirección física base al desplazamiento del segmento para generar una dirección física. Esto permite que varios programas se distribuyan en la RAM física, cada uno con su propio espacio para trabajar mientras cree que está accediendo a la totalidad de los 8 MB de RAM. Los segmentos tienen una longitud variable y pueden ampliarse hasta 64 KB para permitir el acceso a toda la memoria desde 64 segmentos. Si se necesitan más de 64 segmentos, se pueden utilizar varios Z8010, y el bit superior del número de segmento de 7 bits selecciona qué Z8010 se utiliza. [4] [5] El Z8010 no estaba disponible en el momento del lanzamiento y, en última instancia, se retrasó entre nueve meses y un año. [6]
Con el lanzamiento del Z8003/Z8004, se agregó el Z8015 a la línea, agregando soporte de memoria paginada . La principal diferencia es que el Z8015 divide la memoria en 64 bloques de 2 KB, mientras que el Z8010 divide la memoria en 64 bloques de tamaño variable, hasta 64 KB cada uno. Además, el Z8015 expande el número de segmento de 7 a 12 bits, y luego los usa como los bits más significativos de la dirección general de 23 bits, anulando los bits superiores del desplazamiento original de 16 bits. La ventaja de este esquema de acceso es que es fácil leer o escribir bloques de 2 KB en un disco duro , por lo que este patrón se asemeja más a lo que sucederá en última instancia en caso de una falla de segmentación . [4]
Una característica poco común que se encuentra en el Z8000, más comúnmente asociada con las minicomputadoras , es el soporte directo para interrupciones vectorizadas . Las interrupciones son utilizadas por dispositivos externos para notificar al procesador que se ha cumplido alguna condición; un uso común es indicar que los datos de un proceso lento como leer un disquete ahora están disponibles y la CPU puede leer los datos en la memoria.
Normalmente, en máquinas pequeñas, una interrupción hace que se ejecute un código especial que examina varios bits de estado y ubicaciones de memoria para decidir qué dispositivo llamó realmente a la interrupción y por qué. En algunos diseños, especialmente aquellos destinados a la computación en tiempo real , se reserva un área de memoria como un conjunto de punteros, o vectores, al código que maneja un dispositivo en particular. Los dispositivos que causan la interrupción luego establecen algún estado, generalmente a través de pines en la CPU, para indicar un número de interrupción particular, N. Cuando se llama a la interrupción, la CPU salta inmediatamente a la entrada N en la tabla, evitando cualquier necesidad de decodificar la interrupción. Esto puede acelerar en gran medida el servicio de interrupciones al evitar tener que ejecutar operaciones adicionales, al mismo tiempo que simplifica el código de manejo de interrupciones.
En el Z8000, un nuevo registro admite vectores: el puntero de área de estado de nuevo programa. Esto era similar a una dirección de memoria en un registro, que constaba de dos valores de 16 bits, en los que los 16 bits superiores contenían el número de segmento. Los 16 bits inferiores se dividían a la mitad, los 8 bits superiores contenían un desplazamiento y los 8 bits inferiores estaban vacíos. Para llamar a un vector en particular, el dispositivo externo presenta los 8 bits inferiores (o 9 en algunos casos) en el bus de direcciones y la dirección completa del vector se construye a partir de los tres valores. [3] : 6.8
A principios de los años 80, la CPU Zilog Z8000 era popular para las máquinas Unix de tamaño de escritorio . Estos sistemas Unix de bajo costo permitían a las pequeñas empresas ejecutar un verdadero sistema multiusuario y compartir recursos (disco, impresoras) antes de que las redes fueran comunes. Por lo general, solo tenían puertos serie RS-232 (4-16) y puertos de impresora paralelos en lugar de gráficos integrados, como era habitual en los servidores de la época.
Los sistemas informáticos basados en Z8000 incluían la propia serie System 8000 de Zilog, así como otros fabricantes:
El ordenador Zilog S8000 salió con una versión de Unix llamada ZEUS (Zilog Enhanced Unix System). ZEUS era una versión de Unix versión 7 e incluía lo que se conocía como "las mejoras de Berkeley". ZEUS incluía una versión de COBOL llamada RM/COBOL (Ryan McFarland COBOL). La disponibilidad de RM/COBOL permitió que muchas aplicaciones comerciales se trasladaran rápidamente al ordenador S8000, aunque esto no ayudó a su éxito a largo plazo. El S8000 tuvo cierto éxito con el IRS y los preparadores de impuestos en Estados Unidos, que utilizaron el modelo para procesar las declaraciones de impuestos presentadas electrónicamente. [34]
El Z8000 apareció en el proyecto Trump Card de Steve Ciarcia para su columna Circuit Cellar en la revista Byte , proporcionando una tarjeta de expansión con el procesador Z8001 y 512 KB de RAM adecuada para su uso con un PC compatible con IBM. [35] Los compiladores para BASIC y C se suministraban con la placa, junto con un ensamblador y un emulador Z80 que podía ejecutar programas escritos para CP/M-80. Se previó que Unix también estaría disponible para la Trump Card. [36]
A pesar de una recepción algo positiva como "un supermicro razonablemente rápido con un rendimiento generalmente bueno para el precio", las limitaciones arquitectónicas de 16 bits del Z8000, con manejo de segmentos requerido para acceder a más de 64 KB en un proceso, llevaron a preguntas sobre la longevidad de los productos de la Serie 8000 a medida que las arquitecturas de procesador de 32 bits de Motorola y National Semiconductor se adoptaron más ampliamente. [37] Zilog Systems finalmente adoptó el procesador WE32100 de 32 bits de AT&T , introduciéndolo en un nuevo producto, el System 8000/32, junto con actualizaciones de 32 bits a sus modelos System 8000 Serie 2 existentes. Esto permitió la introducción de Unix System V en los productos de Zilog Systems. [38]
La adopción del WE32100 por parte de la División de Sistemas de Zilog, en lugar de seguir utilizando productos de la División de Componentes de Zilog, se debió a requisitos divergentes. Zilog buscaba introducir su sucesor de 32 bits del Z8000, el Z80000, para aprovechar la adopción exitosa del producto de 16 bits en aplicaciones militares y gráficas, mientras que su División de Sistemas priorizó el soporte Unix y las aplicaciones comerciales. Se llegó a la conclusión de adoptar el WE32100 como "el chip UNIX de primera calidad". [39] Posteriormente, Zilog anunció un acuerdo para fabricar el chipset WE32100 durante un período de cinco años, siendo la primera fuente alternativa de estos productos. [40]
Hubo una versión Z8000 del sistema operativo Xenix . [41] En 1982, Digital Research y Zilog anunciaron un acuerdo para que CP/M estuviera disponible para el Z8000. [42]
Namco utilizó la serie Z8000 en sus juegos arcade Pole Position y Pole Position II . Las máquinas utilizaban dos Z8002, las versiones de 64 KB del Z8000.
En un caso, el Z8001 se utilizó para implementar una arquitectura basada en capacidades, empleando el número de segmento en el modelo de direccionamiento del Z8001 para indicar un registro de capacidad en un procesador virtual. Dichos procesadores virtuales se proporcionaron mediante la ampliación del Z8001 con un "dispositivo de memoria inteligente", que proporcionaba funciones de gestión de memoria y de cambio de contexto, con instrucciones adicionales relacionadas con las capacidades admitidas mediante emulación. [43]
La inclusión del dispositivo en diseños militares [44] tal vez explique la supervivencia del Z8000, en forma de CPU Zilog Z16C01/02. Además, la Standard Central Air Data Computer (SCADC) utilizaba el Z8002. [45] Sin embargo, el aviso de fin de vida útil de Zilog se envió en 2012. [46]
Si bien el Z8000 tuvo cierto uso a principios de la década de 1980, fue reemplazado por otros diseños con relativa rapidez. [47]
Federico Faggin , entonces director ejecutivo de Zilog, sugirió más tarde que esto se debía al acuerdo de financiación de Zilog con el brazo de capital de riesgo de Exxon , Exxon Enterprises. Enterprises había realizado una serie de inversiones en el campo de las computadoras y, a principios de la década de 1980, se estaba posicionando como un competidor de IBM en el espacio de los grandes sistemas. Faggin sugirió que, por lo tanto, IBM veía a Zilog como un competidor y, como resultado, se negó a considerar el Z8000. [47]
Sin embargo, Faggin admitió que la arquitectura segmentada del Z8000 era una desventaja para las "aplicaciones basadas en gráficos" emergentes, donde sistemas como el Apple Macintosh necesitaban acceder fácilmente a más de 64 KB de memoria en un único espacio de direcciones. También se reconoció que el proceso más largo de lo previsto para llevar el producto al mercado contribuyó a su falta de adopción, y Faggin señaló que "ser el primero y tener el marketing más fuerte y el impulso más fuerte", como había sucedido con Intel con el 8086, habría sido la única ruta restante hacia el éxito para un producto de este tipo. [48]
Un análisis de las opciones disponibles para los diseñadores a principios de la década de 1980 sugiere que hay varias razones prosaicas por las que el Z8000 no fue más popular:
Si comparamos las versiones en lenguaje ensamblador del Byte Sieve , vemos que los 1,1 segundos del Z8000 de 5,5 MHz son impresionantes si los comparamos con los diseños de 8 bits que reemplazó, incluido el Z80 de 4 MHz de Zilog con 6,8 segundos y el popular MOS 6502 de 1 MHz con 13,9. Incluso el más nuevo Motorola 6809 de 1 MHz fue mucho más lento, con 5,1 segundos. [49] También se desempeña bien frente al Intel 8086 de 8 MHz , que alcanzó un tiempo de 1,9 segundos, o el menos costoso Intel 8088 de 5 MHz con 4 segundos. [49]
Aunque los procesadores Intel eran fácilmente superados por el Z8001, estaban empaquetados en DIP de 40 pines, lo que los hacía menos costosos de implementar que el Z8001 de 48 pines. El Z8002 también usaba un encapsulado de 40 pines, pero tenía un bus de direcciones de 16 bits que sólo podía acceder a 64 KB de RAM, mientras que los procesadores Intel tenían un bus de 20 bits que podía acceder a 1 MB de RAM. Internamente, las direcciones de 23 bits del Z8000 también eran más complejas de procesar que el sistema más simple de Intel que usaba direcciones base de 16 bits y registros de segmento separados. Para aquellos que buscaban una opción de bajo costo capaz de acceder a (lo que entonces eran) grandes cantidades de memoria, los diseños de Intel eran competitivos y estaban disponibles más de un año antes. [49] [ se necesita una mejor fuente ]
Para aquellos que buscaban rendimiento puro, el Z8000 era la CPU más rápida disponible a principios de 1979. Pero esto fue así sólo durante un período de unos pocos meses. El Motorola 68000 de 16/32 bits y 8 MHz llegó al mercado más tarde ese mismo año y presenta un tiempo de 0,49 segundos en la misma prueba Sieve, más del doble de rápido que el Z8000. [49] Aunque utilizaba un diseño DIP de 64 pines aún más grande, para aquellos dispuestos a pasar a más de 40 pines este era un pequeño precio a pagar por lo que era, con mucho, el procesador más rápido de su época. Sus instrucciones y registros de 32 bits, combinados con un bus de direcciones de 24 bits con direccionamiento plano de 16 MB, también lo hicieron mucho más atractivo para los diseñadores, algo que Faggin admite. [47]
Para colmo de males, cuando se lanzó por primera vez el Z8000, contenía una serie de errores. Esto se debía a su complejo decodificador de instrucciones, que, a diferencia de la mayoría de procesadores de la época, no utilizaba microcódigo y dependía de la lógica implementada directamente en la CPU. Esto permitió que el diseño eliminara el almacenamiento de microcódigo y la lógica de decodificación asociada, lo que redujo el número de transistores a 17.500. [50] En contraste, el Intel 8088 contemporáneo utilizaba 29.000 transistores, [51] mientras que el Motorola 68000 de unos meses más tarde utilizaba 68.000. [52]
Varios terceros fabricaron el Z8000, incluidos AMD , [53] SGS-Ates , Toshiba y Sharp . [54]