1 puntos por GN⁺ 7 시간 전 | 1 comentarios | Compartir por WhatsApp
  • Lanzado en julio de 1976, el Zilog Z80 llegó a usarse ampliamente desde computadoras personales y para aficionados hasta equipos embebidos e industriales, y terminó representando la era de los microprocesadores de 8 bits
  • Mantuvo la compatibilidad binaria con Intel 8080, a la vez que amplió registros, direccionamiento, instrucciones e interrupciones, y diseñó conexiones eléctricas más simples
  • La pila limitada y el espacio de direcciones de 14 bits del 8008 se mejoraron en el 8080 con una pila en memoria y un espacio de direcciones de 16 bits; el Z80 añadió a esto registros índice, bancos de registros alternativos e instrucciones de bloque
  • Gracias a una sola alimentación de 5V, un solo reloj, señales de control MREQ·IORQ·RD·WR y refresco de DRAM integrado, era posible construir una computadora con pocos chips periféricos
  • La familia Z80 dio origen a varios derivados, como el Sharp LR35902 del Game Boy y el eZ80; el Z80 original tuvo una larga vida industrial y fue descontinuado en junio de 2024

Del Datapoint 2200 al Intel 8008

  • Computer Terminal Corporation (CTC) desarrolló la terminal programable Datapoint 2200, equipada con un procesador de 8 bits hecho con chips TTL discretos
  • El plan de reemplazar parte de los circuitos TTL por IC personalizados se amplió hasta llevar toda la CPU a un solo chip, y Texas Instruments e Intel se encargaron de diseños por separado
  • Ninguna de las dos empresas completó el diseño a tiempo y, cuando el chip de Intel estuvo listo, CTC ya vendía terminales basadas en TTL
    • Los ingenieros de CTC tampoco estaban satisfechos con el rendimiento del chip, y ya habían cambiado la arquitectura de la terminal de próxima generación
    • TI abandonó el diseño, pero Intel cambió el nombre del producto, originalmente 1201, al nombre comercial 8008 y lo lanzó al mercado

Estructura y límites del 8008

  • El 8008 ofrecía siete registros: A·B·C·D·E·H·L
    • A era el acumulador, y H y L formaban el puntero de memoria HL
    • El seudorregistro M representaba el byte de memoria apuntado por HL
  • El estado de la ALU se mantenía con las banderas Carry, Parity, Zero y Sign, usadas para saltos, llamadas y retornos condicionales
  • El contador de programa era difícil de manipular directamente, y las llamadas a funciones usaban una pila interna de 8 niveles para direcciones de retorno dentro del procesador
    • Este diseño se debió a que el Datapoint 2200 estaba pensado para usar memoria serial, por lo que una pila de llamadas basada en memoria podía convertirse en un cuello de botella
  • Las direcciones de memoria eran de 14 bits, y ofrecía 32 puertos de E/S en un espacio de direcciones separado
  • Cuando ocurría una interrupción, el dispositivo periférico colocaba una instrucción RST en el bus de datos y la CPU la ejecutaba
    • RST llamaba a uno de los ocho slots al comienzo del espacio de direcciones
    • Como no había una pila de memoria de propósito general y todo acceso a memoria requería HL, para guardar registros durante el manejo de interrupciones había que usar latches externos del bus de E/S como registros temporales
  • Usaba alrededor de 3,500 transistores y un encapsulado DIP18, con buses de direcciones y datos multiplexados
    • El circuito externo debía latchear el bus e interpretar las señales de estado internas de la CPU
    • Requería dos relojes de 500 kHz con fases distintas y alimentaciones de +5V y -9V

Del 8008 al 8080

  • Incluso antes de terminar el desarrollo del 8008 empezaron las discusiones para mejorar sus limitaciones, pero la dirección de Intel quiso comprobar primero la reacción del mercado
  • Federico Faggin impulsó el desarrollo de una versión mejorada y, al esperar hasta el anuncio de productos rivales de 8 bits, Intel perdió una ventaja de nueve meses
  • Antes de que se aprobara el proyecto, Faggin reclutó a Masatoshi Shima de Busicom para trabajar en el diseño del 8080
  • También se incorporaron críticas y comentarios que clientes potenciales habían aportado en demostraciones del 8008, y desde el inicio se decidió abandonar la compatibilidad binaria con el 8008

Arquitectura del 8080

  • El 8080 mantuvo una configuración de registros similar a la del 8008, pero eliminó la pila interna de direcciones de retorno e introdujo una pila en memoria apuntada por SP
    • Los pares de registros BC·DE·HL·AF podían apilarse o desapilarse
    • En el ensamblador de Intel, AF se llamaba PSW, la palabra de estado del programa
  • El espacio de direcciones aumentó a 64KB de 16 bits, y los puertos de E/S a 256
    • Se habilitó acceso indirecto limitado a través de BC y DE
    • El acumulador y HL podían leerse o guardarse en una dirección especificada de inmediato
  • Se añadieron operaciones de 16 bits, como incremento y decremento de pares de registros, para manejar cálculos de punteros y contadores de 16 bits
    • Este bloque de operaciones no afecta las banderas de la ALU, por lo que tras decrementar BC había que comprobar por separado si ambos bytes eran 0
  • Las interrupciones mantuvieron el mecanismo basado en RST, pero pasaron a poder activarse o desactivarse por software
    • Gracias a la pila explícita en memoria, ya no se necesitaba hardware de E/S para guardar registros
  • El ensamblador de Intel 8080 tenía una correspondencia casi 1:1 entre mnemónicos y opcodes, por lo que implementar un ensamblador era fácil, aunque podía resultar incómodo de leer para las personas
    • Las instrucciones de pares de registros usaban solo el nombre de uno de los registros, y se distinguían del INC de un solo byte con la X de INX

Interfaz eléctrica del 8080

  • Para aumentar la velocidad se usó lógica NMOS, lo que hizo necesarias tres alimentaciones, -5V·+5V·+12V, y dos relojes con fases distintas
  • Gracias al encapsulado de 40 pines se separaron las líneas de direcciones y datos, pero parte del estado de control seguía multiplexado en el bus de datos, por lo que todavía hacían falta latches y decodificadores externos
  • Intel vendía chips de apoyo para decodificar estados y generar relojes, y según el sistema también podían requerirse controlador de interrupciones, temporizador y controlador DMA
    • Como mínimo, el temporizador programable podía usarse para impulsar el refresco de DRAM
  • El posterior 8085 usaba una sola alimentación de 5V y un solo reloj de 5V, y añadía algunas señales de control, pero aún requería chips de apoyo especiales

Fundación de Zilog y desarrollo del Z80

  • Frustrado por la demora en aprobar el proyecto 8080 y por los conflictos con la dirección de Intel, Faggin dejó la empresa junto con Ralph Ungermann, responsable de la división de microprocesadores, para fundar una compañía
  • Al principio consideraron hacer microcontroladores, pero concluyeron que los márgenes eran demasiado bajos para una startup fabless de semiconductores
  • Luego decidieron diseñar un 8080 mejorado, el Super 80, que terminaría convirtiéndose en el Zilog Z80
    • Consiguieron financiamiento de Exxon y también reclutaron a Shima desde Intel
    • El equipo encargado de layout, simulación de software y otras tareas creció hasta un total de 11 personas
  • El objetivo era mantener la compatibilidad binaria con el 8080 mientras se añadían registros, modos de direccionamiento e instrucciones, e incorporar características de procesadores contemporáneos como el 6800
    • También apuntaban a mayor velocidad que el 8080 y conexiones eléctricas más simples
  • Hasta el primer prototipo funcional se gastaron unos 400,000 dólares, cumpliendo el cronograma por debajo del presupuesto de 500,000 dólares obtenido de Exxon
  • La producción dependió de Mostek tras conflictos con Synertek, el primer contratista
    • Más tarde, con una inversión adicional de Exxon, construyeron su propia fábrica, pero mantuvieron múltiples proveedores para el Z80

Extensiones de la arquitectura Z80

  • El Z80 es totalmente compatible a nivel binario con el conjunto de instrucciones del 8080
  • Añadió los registros índice de 16 bits IX e IY, inspirados en el 6800
    • Pueden usarse en lugar de HL mediante prefijos de opcode, y también soportan desplazamientos inmediatos
  • Los pares de registros AF·BC·DE·HL tienen bancos alternativos, que permiten conmutar rápidamente durante el manejo de interrupciones
  • Las interrupciones ofrecen tres modos
    • El modo 0 es compatible con el 8080
    • El modo 1 siempre llama a una dirección fija
    • El modo 2 usa el valor del bus como índice para saltar a una tabla de llamadas, y un registro separado especifica la dirección base en memoria de la tabla
  • Añadió rotación, prueba y establecimiento de bits, operaciones BCD, instrucciones repetitivas que usan BC como contador, y operaciones de transferencia, comparación y cadenas en bloque
    • Un bucle completo de copia de bytes podía reemplazarse por una sola instrucción repetitiva propia, LDIR
  • Como Intel reclamaba derechos de autor sobre los mnemónicos de ensamblador, el Z80 adoptó su propia sintaxis
    • Escribía los operandos de forma más explícita y sobrecargaba mnemónicos básicos, lo que la hacía más legible que la sintaxis del 8080

Diseño de bus simplificado

  • El Z80 solo requiere una alimentación de 5V y un solo reloj
  • Expone directamente como señales dedicadas el estado que en el 8080 debía latchear e interpretar un circuito externo
    • MREQ e IORQ distinguen accesos a memoria y E/S
    • RD y WR indican lectura y escritura
    • M1 indica que el acceso actual a memoria es una búsqueda de instrucción
  • Se puede construir una computadora básica con un circuito que conecte directamente las líneas de direcciones y datos y use apenas un 74xx138 para seleccionar EEPROM, RAM y UART
  • El contador interno de refresco emite valores en el bus de direcciones durante el ciclo de decodificación de instrucciones y activa las líneas de control para encargarse del refresco de DRAM
  • Con el modo de interrupción 1, puede conectarse un solo dispositivo al pin de interrupción sin un controlador de interrupciones externo
    • Varios dispositivos pueden manejarse con circuitos simples, como un codificador de prioridad 74xx148 y un latch

Evolución posterior al Z80

  • Antes de que el Z80 se lanzara en julio de 1976 ya había empezado el diseño inicial del Z8000 de 16 bits, cuyo producto salió en 1979, después del Intel 8086 y antes del Motorola 68000
  • El Z8000 usaba memoria segmentada como el 8086, pero emitía el número de segmento en el bus y una MMU externa se encargaba de traducir a direcciones lineales y de comprobar rangos y permisos
  • El conjunto de instrucciones del 8086 reflejó tanto el linaje del 8080 como características del Z80, como sus propias instrucciones repetitivas de bloque, cadenas y bucles
  • El diseño de la MMU del Z8000 también influyó en el modo protegido de 16 bits basado en tablas de descriptores del 286

Exxon, IBM PC y los cambios en Zilog

  • Zilog apuntó al mercado de computadoras desde una época en que los microprocesadores se veían como reemplazos de lógica cableada, pero su relación con Exxon fue una de las razones por las que IBM eligió el Intel 8088 en lugar de Zilog para la PC
  • Exxon intentó crear su propio grupo de negocios de computación para competir con IBM e invirtió estratégicamente en fabricantes de máquinas de escribir, procesadores de texto e impresoras
    • Algunos de ellos diseñaron productos basados en componentes de Zilog que erosionaron la cuota de mercado de los productos de IBM
  • La estrecha relación con Exxon también provocó conflictos entre Faggin y Ungermann, y Ungermann dejó Zilog antes de que en 1980 se convirtiera en una subsidiaria completa de Exxon
  • Zilog volvió a separarse de Exxon en 1989 y salió a bolsa en 1991
    • Más tarde cambió de dueño varias veces entre firmas de capital privado y empresas electrónicas, y actualmente pertenece a Littelfuse
  • El Z80 se usó durante mucho tiempo como procesador embebido y luego fue descontinuado en junio de 2024

Experiencia personal con el Z80 e impacto a largo plazo

  • El Z80 y los 8080·8085 compatibles a nivel binario contribuyeron a formar el estándar de hardware de facto de las microcomputadoras de 8 bits, y sirvieron de base para que CP/M y Microsoft BASIC se consolidaran como estándares de software de facto
  • El Z80 se usó en las primeras computadoras personales, computadoras hogareñas y para aficionados, y en diversos sistemas embebidos e industriales
    • También aparecieron copias y arquitecturas derivadas, incluido el Sharp LR35902 del Game Boy original
    • Tras abandonar sus familias derivadas de 16 y 32 bits, Zilog volvió a microcontroladores basados en Z80, como el eZ80, con pipeline y relojes más altos
  • A finales de la adolescencia, después de descubrir que el Z80 aún se vendía en catálogos de componentes electrónicos, diseñé una computadora pequeña y usé por las noches el laboratorio de fotografía de la escuela para grabar placas PCB
    • Escuché de mis profesores experiencias con computadoras hogareñas y consolas antiguas, y con computadoras construidas con wire wrapping dentro de cajas Tupperware que ejecutaban CP/M y WordStar
    • También recibí componentes MCS-85 y chips Z80·8085·6502·6522, que usé en proyectos propios
  • En ese proceso aprendí que un reset confiable al encender es más difícil de lo esperado, que un linker es mucho más difícil de implementar que un ensamblador, y que una persona también puede construir realmente un compilador

1 comentarios

 
GN⁺ 7 시간 전
Opiniones de Hacker News
  • Empecé a programar en lenguaje ensamblador en 1978, y quería entender no solo el software sino también cómo funcionaba el hardware.
    Después de armar un kit Z80, aprendí electrónica digital con una sonda lógica y un osciloscopio, y me metí a fondo en el manual para aprender el conjunto de instrucciones. Ahora tengo casi 70 años, pero lo recuerdo como si hubiera sido ayer; el Z80 fue una CPU realmente excelente.

    • Tres años después empecé con una computadora Radio Shack de 4 KB basada en 6809 y, aunque hace más de 40 años que no escribo código 6809, todavía recuerdo varios opcodes y hace poco ayudé a resolver un bug complicado de ensamblador en retrocomputing.stackexchange.com.
      Aprendí por mi cuenta desensamblando la ROM y consultando una tarjeta de referencia de Motorola, sin clases ni libros, pero después tuve una carrera exitosa fundando varias startups. Aprender computadoras desde los primeros principios, en la capa más baja, sigue teniendo un valor irremplazable.
    • Recomiendo Turing Complete(https://turingcomplete.game/).
      Es un juego de simulación de lógica digital en el que se crean circuitos básicos con compuertas NAND, se combinan unidades funcionales y decodificadores de instrucciones para construir una arquitectura Turing-completa, y luego se programa en un lenguaje ensamblador definido por uno mismo. Si necesitas un nuevo opcode puedes implementarlo tú mismo, así que es difícil pero muy gratificante; se acerca al lanzamiento oficial y ya publicaron un tráiler.
    • Tanto el Z80 como el 6502 nacieron de diseños rechazados dentro de sus empresas. Hoy todo es mucho más complejo, pero me gustaría ver a otro diseñador sacar algo como FORK86-64.
    • Yo también llegué a fabricar periféricos externos para la ZX81.
  • A los 12 años armé una computadora Z80 con un kit del programa de TV “Klein Microcomputer Sebstgebaut und Programmiert”.
    Usé un transformador Märklin como fuente de alimentación y una grabadora de cinta Telefunken como dispositivo de almacenamiento de datos; después de ingresar un juego de alunizaje en código máquina Z80, tuve tanto miedo de perder el programa que no apagué la computadora durante dos semanas.

  • Se siente como volver a los años 80 de la ZX Spectrum, cuando 128 KB de RAM eran un lujo difícil de justificar. En cierto modo, se parece un poco a la actualidad.
    https://spectrumcomputing.co.uk/entry/2000237/Book/Mastering...
    http://www.primrosebank.net/computers/zxspectrum/docs/Comple...

  • Recuerdo mirar la tabla de referencia de instrucciones Z80 al final del manual de usuario de la ZX-81 y no entender nada. A diferencia de las abstracciones de alto nivel como BASIC, me tomó bastante tiempo comprender cómo la CPU ejecutaba realmente un programa.

    • A los 12 años, más bien fue la estructura simple de BASIC lo que me facilitó entender el ensamblador Z80. Las direcciones de memoria correspondían a números de línea, los registros a variables, JP a GOTO, CALL a GOSUB, CP a IF, JP Z a THEN GOTO y LD a LET.
    • La primera computadora que compré fue una ZX-81 en kit, y me convertí en un pionero de la informática en una ciudad pequeña. Era una época en la que todo era complejo y a la vez simple; con solo 1 KB de RAM incluso corríamos un simulador de vuelo.
    • Mi primer contacto con las computadoras fue con la ZX-81, y me fascinó la forma en que apagaba la pantalla en modo rápido y los interesantes compromisos entre hardware y software.
  • La frase “el Z80 es completamente compatible a nivel binario con el conjunto de instrucciones 8080” no es cierta si se considera también el registro de flags. En algunas operaciones, el comportamiento del flag de paridad era distinto.
    Además, los programas que usaban opcodes no definidos del 8080 podían ejecutarse de manera arbitraria, pero el Z80 reutilizó esos opcodes para nuevas instrucciones.

    • No hacer que el flag de paridad fuera perfectamente compatible fue una decisión inteligente. Los programas existentes casi nunca lo comprobaban, y prácticamente nunca después de instrucciones que se comportaban distinto en el Z80.
      Gracias a eso, el flag de paridad pudo reutilizarse como flag de overflow, lo cual fue una extensión muy útil. Datapoint 2200, Intel 8008, Intel 8080 y RISC-V son conjuntos de instrucciones poco comunes en los que el hardware no detecta overflow; a diferencia de esos diseños tempranos, simples y baratos, RISC-V no tiene excusa, y considero que ese es su mayor error.
    • Las operaciones no definidas no forman parte del conjunto de instrucciones 8080, así que soportarlas corresponde a compatibilidad binaria con el silicio 8080, no con el conjunto de instrucciones. Dicho esto, la diferencia en el flag de paridad sí rompe la compatibilidad real, así que lo preciso sería decir: “es compatible a nivel binario con código que depende solo del conjunto de instrucciones 8080, excepto por el valor del flag de paridad”.
  • A comienzos de 1983 me inicié en la programación con ensamblador Z80 en una TRS-80 Model I. Los libros de Bill Barden y la serie ‘The Next Step’ de los Hardin Brothers en la revista 80 Micro me abrieron el camino, y resumí esa experiencia en este artículo.

    • Alrededor de 1980, cuando era adolescente, compraba y leía los libros que podía pagar en la Radio Shack del barrio; como la TRS-80 usaba Z80, también conocí el libro sobre Z80 de Bill Barden publicado por Howard Sams.
      Era tan claro que hasta un niño podía entenderlo, así que lo leí de principio a fin. Aunque nunca llegué a tocar un Z80 real, me dio una base para entender sin dificultad el 6502 y microcontroladores tempranos como el 8051 y el PIC. Aún hoy parece que entiendo los microprocesadores modernos comparándolos con el Z80, y recomiendo aprender con microprocesadores de 8 bits, lo bastante simples como para que una persona común pueda comprenderlos por completo.
  • Empecé con el Z80 en una época en que los compiladores de lenguajes de alto nivel eran caros y el shareware no era tan fácil de conseguir como el open source hoy. Para entender qué le estás pidiendo a la máquina, cualquiera debería aprender al menos un poco de ensamblador, y el Z80 era lo bastante simple como para razonar sobre él.

  • Hace 35 años había que ensamblar los programas a mano e ingresar código máquina hexadecimal en la placa. Para hacerlo más cómodo escribí mi propio ensamblador, y esa experiencia me llevó al campo de las herramientas de desarrollo y luego a trabajar en compiladores C++ importantes.

    • En los años 80, muchas personas, incluyéndome, podíamos leer los códigos hexadecimales de las instrucciones Z80 casi con la misma facilidad que el ensamblador simbólico. Era muy útil al hacer ingeniería inversa del intérprete BASIC de Microsoft para CP/M o de un compilador FORTRAN.
    • Ese tipo de trabajo suena a fines de los años 70, pero en realidad fue en 1991. Era genial poder saber exactamente qué hacía un programa en cada momento, pero implementar cosas complejas era bastante arduo.
    • Lo que hiciste fue convertir directamente el ensamblador en código máquina, el único lenguaje que entiende la CPU.
  • Falta la calculadora TI-84, que todavía usan millones de estudiantes en EE. UU. y que se puede programar en BASIC. Los modelos monocromos usan Z80 y los modelos con pantalla a color usan eZ80.

    • En Europa, mi secundaria también exigía comprar una TI-84 Plus, y por el hecho de que todavía se venda en tiendas parece que se sigue usando.
      Pasé mucho tiempo con amigos presumiendo pequeños programas hechos en TI-BASIC, pero no llegué a aprender ensamblador Z80. Imprimí completo el manual de ensamblador Z80 para la TI-84 Plus y empecé a leerlo, pero todavía no escribí ni una sola línea.
    • La TI-84+ quizá sea una de mis computadoras retro favoritas.
    • La mía era una TI-83, y no tenía esas tecnologías avanzadas.