Tablero Z80 con muy pocas piezas

La Z80 es una de esas CPU antiguas que es asequible y fácil de trabajar, al menos en algunas versiones. [Doctor Volt] elabore lo que pueden ser los arreglos más simples posibles para poner en funcionamiento un sistema Z80. Tiene el procesador, por supuesto. Pero todo lo demás - reloj, memoria y energía - es de Arduino Mega 2560. Se podría argumentar que estos son dos chips, pero la placa en realidad tiene varios chips. Por otro lado, probablemente podría realizar el mismo truco con un ATMega 2560 desnudo.

Ya lo hemos visto antes, pero generalmente con algunos chips de soporte más. Si eres un limpiador, [Doctor Volt] También tiene algunos experimentos Z80 y CP / M, donde el Arduino solo funciona como una unidad de disco para la computadora y solo hay dos chips de soporte. Hay tres videos para ambos proyectos que puedes ver a continuación.

Sin embargo, nos sorprendió lo sencillo que era el primer proyecto. Aproximadamente 100 líneas de código fuente son suficientes, y algunas de ellas son comentarios. El Arduino incluso proporciona la memoria del sistema (1K) y usted la inicializa cambiando el archivo memory.h y recargando el Arduino.

El código organiza las interrupciones y el reloj un poco y luego simplemente se enciende. El Arduino recibe una interrupción en la lectura de la CPU y una interrupción diferente en la escritura de la CPU. Todas las lecturas de memoria se extraen de la RAM de 1K simulada y las escrituras de memoria también van allí. El código de escritura también puede detectar la escritura del puerto de E / S y enviar esos datos al puerto serie Arduino. No parece importar en qué puerto de E / S está escribiendo.

Esto nos recordó uno de nuestros proyectos Z80 baratos favoritos. Esta placa usa ATMega32A de manera similar pero también tiene RAM externa. Si agrega algunas EEPROM para que funcionen como unidades de disco, se ubicará en algún lugar en el medio de las dos computadoras [Doctor Volt]. Con tan pocas partes, es fácil obtener estas maravillas de 8 bits en espacios bastante pequeños.

  • Juan7 dice:

    ¿Has oído hablar de interruptores mecánicos? Tal vez agregue una resistencia para evitar un rebote. Eso es lo que tenía disponible en la escuela para conducir un Z80.

    • RetepV dice:

      Para evitar un rebote, necesitaría al menos una resistencia y un condensador. A menos que el pin de entrada del circuito del interruptor tenga una gran capacidad de dispersión, supongo.

      • Juan7 dice:

        Sí, y condensadores. Incluso menos componentes que en Arduino.

  • ROBÓ dice:

    CMOS Z80 todavía está en producción. El Z84C020 está disponible en DIP40 y es un Z80 de 20 MHz

    • forma inteligente dice:

      Entonces, y esta es probablemente una pregunta tonta, ¿podría sacar la CPU que dice ZX81 o ZX Spectrum y "actualizarla" con el procesador más rápido?

      Supongo que habría problemas con otros componentes porque creo que todos tienen la misma fuente de reloj. ¿Pero en teoría?

      • RetepV dice:

        Sí tu puedes. Debido a que el z80 es un diseño completamente estacionario, puede cambiar la velocidad del reloj sobre la marcha. Aunque necesita cambiarlo en sincronización, para deshabilitar el voltaje del reloj (lo que afectaría a hsync / vsync y, por lo tanto, a la sincronización de la pantalla).

        Consulte esta página: http://www.user.dccnet.com/wrigter/index_files/turbo.htm

      • RetepV dice:

        Sí tu puedes. Debido a que el Z80 es un diseño completamente estacionario, puede cambiar la velocidad del reloj al instante. Solo debe tener cuidado al sincronizar el interruptor para evitar que el reloj se mueva. Porque esto afectaría el tiempo de hsync / vsync y provocaría que la pantalla no se sincronizara correctamente con el televisor.

        Aquí hay una forma de duplicar la velocidad del reloj del Z80: http://www.user.dccnet.com/wrigter/index_files/turbo.htm

      • tekkieneet dice:

        Funcionará a la velocidad del reloj original a menos que tenga un espacio de memoria reservado que le permita funcionar a toda velocidad. Al final, es un desperdicio porque la generación de video está ligada a los ciclos de la memoria.

        • Al Williams dice:

          No estoy seguro de cuánto espacio de memoria ingresa, pero sí, las cosas de ZX usaban mucho la CPU, por lo que su video probablemente se apagaría junto con el escaneo del teclado y algo más sensible al tiempo (por ejemplo, puerto de casete).

          • tekkieneet dice:

            La DRAM y la ROM incorporadas son el factor limitante para el tiempo de acceso (lento) y necesitaría agregar estados de espera. Si desea tener una memoria más rápida, deben estar * fuera * de este espacio de direcciones para que no se seleccionen los chips lentos. Casi todas las tarjetas "aceleradoras" hacen eso.

            Todo el Zx81 es un dolor de cabeza, por lo que es mucho mejor volver a implementar todo en FPGA o simplemente abandonarlo por un hardware mejor diseñado.

    • tekkieneet dice:

      Arduino intenta simular memoria y otros periféricos en estos sistemas de 2-4 chips. El problema que verá es que Arduino ya no puede alimentar al Z80 más rápido y convertirse en el signo de interrogación.

      En cuanto a un Z80 más rápido, Rabbit Semconductor hizo algo similar, pero no una compatibilidad binaria completa. Desafortunadamente, Digi los obtuvo y solo vendió placas y módulos. Vi algunos módulos Rabbit 6000 de 200MHz en su sitio web.

    • JRD dice:

      Pero, ¿los más nuevos tienen las instrucciones indocumentadas? (Cómo tratar IX / IY como 4 registros adicionales de 8 bits IXh IXl IYh IYl, o el divertido shift-left-with-1.) Usted lidió con estos procesadores lentos y limitados retorciendo hasta el último truco que pudiera encontrar. Sé que algunos de los descendientes avanzados del Z80 no lo hicieron: el Z280 finalmente obtuvo más y más memoria, pero no pudo ver IXh o IXl.

  • Mike Massen en Perth, Australia Occidental dice:

    Genial, otra buena publicación que me lleva de regreso a esos tiempos sentimentales, gracias 🙂

    Escribí bastantes programas para diseños integrados de Z80, incluido mi proyecto WAIT (antes de la Universidad de Curtin) Ba EE 1982 "EFI con control de transmisión" en una escolta de vadeo de 1972. Es decir, la consola central tenía una placa prototipo S100 con la CPU, pegamento -Lógico y ad y segmento de 8 dígitos, que también simulaba el motor de 4 cilindros con cajas arriba / abajo jejeje.
    Entradas, bomba e inyectores de VW Kombi. El Z80 nmi cambió la rom incorporada opcional CP / M para servir el disparo del inyector con entrada AFM en segundo plano. Para cargar un disquete era necesario apagar el motor. En su mayoría funcionó, el tiempo suficiente para evitar la unidad del proyecto de ingeniería. Lo financié yo mismo y rechacé la subvención de $ 50 porque luego asignó los derechos de autor al departamento, sin embargo, eso no les gustó, una amenaza de un wtf legal.
    Entre otras cosas. Explotó el modo de salida paralelo de 16 bits a pesar de ser un bus de 8 bits, nadie más lo hizo y tampoco es una instrucción indocumentada: funcionó bien, los detalles están enterrados en la operación del modo de instrucción, sin embargo, es un truco bastante poco convencional. problema de decodificación. 😉 Pregunte si está interesado 🙂

    También compró una serie de "Superbrains" de los EE. UU., Computadoras de escritorio de fibra de vidrio blanca de doble CPU z80 con pantallas en blanco y negro de doble disquete para alimentar Pascal mt +, paquetes de contabilidad básica y Osborne para los clientes. Buena experiencia, escribió una cantidad considerable de controladores de sistema operativo para discos duros Winchester. A muchos proyectos en una base de datos incluso se les ha pedido que hagan un análisis de lotería considerable para un cliente que paga bien, extraño.

    Grandes experiencias, en estos días puedes copiar fácilmente el Z80 en cualquier CPU de los últimos 20 años, mucho más rápido que el más nuevo z80 de 880 MHz, aunque el mío solo funcionaba a 4 MHz. Recuerdo que algo como Avocet estaba en ese momento, probablemente un grupo actualizado ahora.
    Hola

    • Bert dice:

      > Interalie. Explotó el modo de salida paralelo de 16 bits a pesar de que es un bus de 8 bits, nadie más lo hizo y tampoco es una instrucción indocumentada: funcionó bien, los detalles están enterrados en la operación del modo de instrucción, sin embargo, es un bonito truco problema de decodificación bastante poco convencional. 😉 Pregunte si está interesado 🙂

      Sí, más información sobre formas no convencionales.

      • Mike Massen dice:

        Buen día Bert,
        La parte poco convencional es solo la decodificación. La instrucción z80 ofrece los registros BC expresados ​​como una única operación de 16 bits de ancho en el bus de direcciones en algunas instrucciones de salida con datos de 8 bits en las líneas de datos.

        Entonces, si desea hacer una salida paralela de 16 bits, coloque los datos en los registros BC con la dirección de salida en las líneas de datos y descifre eso, luego cambie el método de decodificación. Solo tenga en cuenta los diferentes retrasos de la salida estándar y funciona bien 🙂

        No hay muchos sitios en ese momento que podrían usar 16 bits de velocidad relativamente alta distintos de los DAC, pero algunos usan la generación de formas de onda como una forma barata, por ejemplo. Desde eprom o filtro fft hasta registros BC y DAC, tal vez un generador de formas de onda personalizado simple e muerto ...

    • purza95 dice:

      ¡Guau! Esto trae recuerdos. La construcción de una computadora 8085 fue mi proyecto principal. Tenía 27128 eprom y 26128 RAM estática. ¡Todo estaba cableado y tuvimos que escribir el sistema operativo desde cero! Me sorprende que ahora pueda descargar IDE gratis. ¡A finales de los 80, eso costaría miles de dólares!

      • RW versión 0.0.3 dice:

        Motorola fue bastante generoso con las herramientas de software en ese momento, creo. Aunque ser honesto con un buen "IDE" no te ayudaría mucho a menos que tuvieras Vax en el garaje.

    • RW versión 0.0.3 dice:

      "Grandes experiencias, en estos días puedes copiar fácilmente el Z80 en cualquier CPU de los últimos 20 años, mucho más rápido que el último z80 de 880 MHz, aunque el mío solo funcionaba a 4 MHz. Recuerdo que algo como ese aguacate estaba en esa época, probablemente una multitud actualizada ".

      Probablemente comenzará otra década, ya que los 90 pasaron de 3 o 4 veces más rápido a más de 30 veces más rápido, y tal vez otra media década, ya que 68020 y 286 podrían hacer una emulación de doble velocidad Z80.

    • Al Williams dice:

      Crucé mucho el desarrollo para el 6805 con un ensamblador Avocet en un Quasar QDP100 con un terminal de Teletexto 910. ¡Dos disquetes de 8 ″! Pensamos que nunca necesitaríamos más que esas cajas.

      Para las E / S de 16 bits, ¿fueron estas las instrucciones de entrada / salida repetidas? Creo recordar eso.

      • Mike Massen dice:

        Hola a todos,
        Puede hacer una salida de 16 bits de ancho en un bucle modificando la decodificación de algo, informe aquí:
        https://la-tecnologia.com/2020/07/17/a-z80-board-with-very-few-parts/#comment-6268242

        PD guardar la selección de nombre cuando la escritura de comentarios ha dejado de funcionar en la tableta Lenovo Android, regocijo

  • Jim dice:

    Puede crear un Z80 verdaderamente minimalista con Z80, decodificador de calcomanías '138, 27xx eprom, 6116 8 bit widex2k RAM y 8250 para el puerto serie y 8255 para acceder a puertos GPIO paralelos. Esa era una especie de "micro placa única" estándar en los años 80. Roscado, soldado, etc. Muchos de ellos. Probablemente podría dejar el 8250 y hacer un programa UART si tiene algún código para ello. Y necesitará un borrador EPROM.

    • Al Williams dice:

      Básicamente lo construí en una tarjeta de cable STDBUS hace muchos, muchos años.

  • Brian pequeño dice:

    Este no es el primer emparejamiento de Arduino Mega Z80. Goran Devic lo hizo en 2014 https://baltazarstudios.com/arduino-zilog-z80/

Marco Navarro
Marco Navarro

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *