Construya su propia computadora con z80

Buenas tardes!
Construya su propia computadora con z80 es el título de un libro publicado en 1981 por McGraw-Hill, que aquellos que ya no somos unos pibes posiblemente hayamos oído hablar.

El autor es un gigante de estos temas, Steve Ciarcia, y publicaba artículos periódicamente en la revista Byte (una verdadera fuente de conocimiento entre los 70's y los 90s). El libro ha sido puesto como dominio público por su autor, y es muy fácil de encontrar en la red.

Después de mucho tiempo dando vueltas a la idea, y sobre todo después de encontrar el excelente trabajo realizado por Gudino Roberto , es que me he decidido a seguir los pasos de ese libro (y algunos mas) para intentar construir una pequeña computador a partir de un Z80.

Ya he hecho algunas cosas "similares" (como un clon del Altair 8800) pero usando microcontroladores. Se me da -creo- mejor la programación que la electrónica. Pero este sería un buen proyecto para aprender.

También he armado un "sistema" (no creo que ni siquiera merezca ese nombre) con un Z80 y lo mínimo necesario para que funcione. Lo pongo en el post siguiente.

Mi plan es ir armando, mientras intento conseguir algunos integrados que me faltan, un grabador de EPROMS que es indispensable para este proyecto y otros que tengo pendientes.

Saludos cordiales,
Aitopes.
Z80 mínimo v1 - (07/07/2021)

Construcción de un prototipo que permite a un Z80 funcionar con la mínima cantidad de componentes. Lejos de ser una computadora, solamente sirve para verificar el funcionamiento del microprocesador.
El proyecto está basado en el esquema proporcionado por Thomas Scherrer, con mínimos cambios.​

1637604929125.png


Se utilizó un chip Z840006 de Zilog, de 1990. Al microprocesador solo se le sumaron una mínima cantidad de componentes, los indispensables para su funcionamiento. Una serie de diodos LED permiten visualizar en tiempo real el contenido de los tres bits bajos del bus de direcciones, y un pulsador se encarga de proporcionar la señal de RESET.

El esquema siguiente es el que se tomó como punto de partida:


1637604991277.png



l circuito propuesto se le realizaron algunos cambios, básicamente debido al stock de componentes disponible al momento de construir el prototipo.
Se montó todo sobre una placa perforada, ya que no tenía sentido diseñar y fabricar una placa de circuito impreso especialmente dedicada a este proyecto.
Entre los cambios realizados, el más importante es que se reemplazó la etapa correspondiente al generador de pulsos de reloj, reemplazando la puerta lógica NAND del CD4093 por una NOT Schmitt Trigger de un 74HC141. El circuito utilizado es el siguiente:


1637605038506.png

El capacitor elegido tiene un valor de 220uf/16V, y en el lugar de R se utilizó un preset de 5KΩ que permite variar la frecuencia de los pulsos de salida en un rango de centrado en los 10Hz.

La alimentación proviene de una fuente de 12Vcc, y luego de pasar a través de un diodo de protección contra una inversión accidental de la polaridad, es regulado a 5V mediante un circuito integrado 78L05 y dos condensadores cerámicos de 0,1 uF.

Todos los resistores de 470Ω fueron reemplazados por resistores de 220Ω.

Lo único que hace este "sistema mínimo" es mostrar en tres leds los tres bytes mas bajos del bus de direcciones, a medida que el procesador ejecuta el "programa" que está compuesto íntegramente por "nops", ya que los pines correspondientes a los datos están puestos a GND a través de 8 resistores.

También he armado una placa con LEDs y buffers para mostrar el bus de direcciones y de datos completos, mas los flags del procesador. Más tarde les pongo alguna foto de esa placa (que no tiene nada de compleja tampoco, obviamente)

Saludos cordiales,
Aitopes.
Aquí van algunas fotos de la placa que he llamado "Z80 bus monitor".
Está conectada a un Arduino Nano para probar su funcionamiento. Funcionó a la primera, solo tuve que reemplazar uno de los 4 74HC244 por que estaba dañado (con componentes recuperados de la "basura electrónica" y que mi complejo de Diogenes me obliga a almacenar en el altillo de casa :)):

WhatsApp Image 2021-11-22 at 3.24.01 PM.jpeg

WhatsApp Image 2021-11-22 at 3.24.02 PM (1).jpeg


WhatsApp Image 2021-11-22 at 3.24.03 PM.jpeg

Saludos cordiales,
Aitopes.
 
Última edición:
Aún no se si pueda llamarse sistema mínimo, no tiene memoria y un puerto de salida.

Las memorias RAM las puedes usar como eeprom y una batería para almacenar un programa
Gracias!
Si, claro, por eso he usado tantas comillas :)

En cuanto a las memorias, lo habia pensado. Tengo varias SRAMs, que con algún sistema para cargarles el programa desde un arduino o similar en el momento del arranque, podría servir para hacer pruebas.

Pero por otro lado, estoy viendo que tengo un par de Arduino Mega, que tienen pines suficientes como para conectar una memoria flash de 64Bk y meterle el soft. Solo seria conectar la memoria al Mega, y hacer un pequeño programa en Python que tome el código HEX de la PC y lo envíe por el puerto USB para ser cargado en la Flash.

Saludos cordiales,
Aitopes.
 
Estoy empezando a armar un programador para memorias FLASH a partir de un Arduino Mega.
Cuando tenga el prototipo funcionando paso el esquema.
Estoy usando memorias de 256KB (porque son las que tengo a mano), llegado el caso solo usaré los primeros 16, 32 o 64Kb.

1637678273780.png

Arriba el pinout de la memoria a usar, abajo las conexiones del bus de direcciones con el Arduino Mega:
1637678355271.png

Les paso un par de fotos de como va el prototipo:


WhatsApp Image 2021-11-23 at 11.33.04 AM.jpegWhatsApp Image 2021-11-23 at 11.33.03 AM (1).jpegWhatsApp Image 2021-11-23 at 11.33.03 AM.jpeg


Espero, cuando salga de trabajar, poder terminar el cableado para mañana -despues de testear cada conexión- empezar a hacer las pruebas con el soft.

Saludos cordiales,
Aitopes.
 
Excelente trabajo @aitopes!
El síndrome de Diógenes! Es más que obligatorio en ésta disciplina! Jeje
Respecto a la memoria Flash tienen la "complicación" por decirlo de una manera, que debes guardar los datos por bloques.
Si un bloque NO se completa, todos esos bytes restantes se transforman en FF.
Y si sólo debes modificar un sólo byte, debes leer todo el bloque y luego modificar el byte seleccionado y volver a escribir nuevamente todo el bloque!
Felicitaciones por ese proyecto!
Ver funcionar lo que uno arma, NO tiene precio!!!👏
 
Excelente trabajo @aitopes!
El síndrome de Diógenes! Es más que obligatorio en ésta disciplina! Jeje
Respecto a la memoria Flash tienen la "complicación" por decirlo de una manera, que debes guardar los datos por bloques.
Si un bloque NO se completa, todos esos bytes restantes se transforman en FF.
Y si sólo debes modificar un sólo byte, debes leer todo el bloque y luego modificar el byte seleccionado y volver a escribir nuevamente todo el bloque!
Felicitaciones por ese proyecto!
Ver funcionar lo que uno arma, NO tiene precio!!!👏
Hola Roberto!
Gracias por la respuesta.
Si, ese tema de las flash es un problema. Pero....como solo escribiría en ellas lo que seria el "Sistema Operativo" (por llamarlo de alguna manera), solo debo programarla desde la PC.
Y la que estoy usando,según me parece entender en la hoja de datos, puede escribirse byte a byte. Creo. Tengo que leerla con tranquilidad.

1637690133418.png
Tampoco necesita 12V. Y si es posible borrarla por bloques.

Ya les ire contando que ocurre :)

Saludos cordiales,
Aitopes.
 

Adjuntos

  • MX29F022.pdf
    589.5 KB · Visitas: 10
Excelente trabajo @aitopes!
El síndrome de Diógenes! Es más que obligatorio en ésta disciplina! Jeje
Respecto a la memoria Flash tienen la "complicación" por decirlo de una manera, que debes guardar los datos por bloques.
Si un bloque NO se completa, todos esos bytes restantes se transforman en FF.
Y si sólo debes modificar un sólo byte, debes leer todo el bloque y luego modificar el byte seleccionado y volver a escribir nuevamente todo el bloque!
Felicitaciones por ese proyecto!
Ver funcionar lo que uno arma, NO tiene precio!!!👏
me robaste las palabras yo por eso había hecho un grabador de memorias con un pic18f4550 y USB pero pero pero....... me tope con el problema de que algunas eeproms paralelas necesitan desbloquearse por software y bloquerse nuevamente.

así que mejor compre un grabador universal USB chino a precio razonable en lugar de perder tiempo en ver como grabar una eeprom, le dedique mas tiempo a mi computadora Z80.

este lo encontré barato en Mercado libre es el famoso Ti866
universal.jpg
en un post anterior a los z80 subí el codigo fuente de mi sistema operativo que lo que hace es hacer andar los puertos, y cargar un programa externo a una localidad de la RAM, ver lo que hay en la RAM, poder saltar a ejecutar el programa cargado en RAM.
 
todos en este foro somos junta mugres hasta con cucarachas, pero hay veces que es mejor comprar algo que ya esta probado y funciona que perder el tiempo en hacerlo, en su epoca un grabador de memorias paralelas era prohibitivo tanto en precio como en complejidad, ahora ya hay códigos fuente abiertos con arduino o mejor aun, grabadores chinos que funcionas muy muy bien.
 
Yo tengo la suerte (o la mala suerte) de tener un altillo junto a mi "laboratorio". El altillo es un entrepiso sobre el comedor de casa.

Es tanta la cantidad de chatarra que tengo acumulada que temo que algun dia, mientras almuerzo, se me caiga el techo encima! :) :)

Pero es mas fuerte que yo...no puedo ir por la calle, ver "algo interesante" (desde un horno microondas hasta un mouse de pc, TV, etc) y no cargarlo en el auto. Es mas....alguna vez he pasado caminando o en moto, visto algo interesante, y regresado en el coche a buscarlo! :)
 
Yo tengo la suerte (o la mala suerte) de tener un altillo junto a mi "laboratorio". El altillo es un entrepiso sobre el comedor de casa.

Es tanta la cantidad de chatarra que tengo acumulada que temo que algun dia, mientras almuerzo, se me caiga el techo encima! :) :)

Pero es mas fuerte que yo...no puedo ir por la calle, ver "algo interesante" (desde un horno microondas hasta un mouse de pc, TV, etc) y no cargarlo en el auto. Es mas....alguna vez he pasado caminando o en moto, visto algo interesante, y regresado en el coche a buscarlo! :)
Si te servir de consolo somos dos (2) con mismo "modus operandis".
Mi casa tiene dos andares , jo y mi familia ( mi señora y mi hija mas nueva) residimos en lo andar terreo , ya en lo premero andar tengo destinado a acumular mis charratas electronicas , despues hay mas un piso superior ( lo techo propriamente dicho ) ese tanbien relleño de charratas electronicas .
Al fundos de mi casa tengo otra casa , esa ya bien mas delgada conposta en lo piso terreo por mi taller ( laboratorio de electronica) relleño de todo tipo de cosas possibles del tema y todo totalmente desordenado quanto lo possible y arriba hay mas un andar , ese relleño tanbien de charratas electronicas.
Enfin NO es nada facil acumular charratas electronicas por 40 años , Jajajajajajajaja!
Actualmente NO tengo mas ningun espacio libre para guardas mas cosas aun , Jajajajajaja!
Quizaz algun dia jo subo aca ( Foro) algunas fotos de todo , solamente para confirmar lo que aclaro aca , Jajajajajaja!
!Saludos desde Brasil!
 
Volviendo al tema memoria Flash, estuve viendo la hoja de datos que compartiste y no encontré que se programe por bloques.
Pero bueno, no cuesta nada probar de grabar sólo un par de bytes y ver qué ocurre.
Si ves que sólo grabó el último byte, entonces quiere decir que la programación es eficaz por bloques.
Sólo debes ejecutar el comando de grabación previo, que son 4bytes en locaciones específicas con datos específicos y listo.
Yo renegué una vez, con una 29F040 hasta que di con el porque no podía grabarla.
 
Volviendo al tema memoria Flash, estuve viendo la hoja de datos que compartiste y no encontré que se programe por bloques.
Pero bueno, no cuesta nada probar de grabar sólo un par de bytes y ver qué ocurre.
Si ves que sólo grabó el último byte, entonces quiere decir que la programación es eficaz por bloques.
Sólo debes ejecutar el comando de grabación previo, que son 4bytes en locaciones específicas con datos específicos y listo.
Yo renegué una vez, con una 29F040 hasta que di con el porque no podía grabarla.
Genial. Esperemos a ver como me trata el trabajo. Ni bien tenga tiempo compruebo las soldaduras (ya tengo todo el cableado hecho) y armo un par de rutinas para escribir/leer y veo que hace :)

Gracias!
Saludos cordiales,
Aitopes.
 
Buenos días!
Hoy tuve un ratito libre.
Comprobé las 32 conexiones entre el Arduino Mega y la memoria Flash, escribí un programa muy básico (y para nada optimizado) que recorre las direcciones de memoria a partir de una dada como inicial, y muestra el dato que está alojado en ella.

Me gustaría decir que fue fácil, pero la verdad es que me llevo como media hora la lectura del datasheet, ver qué papel juega cada pin de control, etc, equivocarme un par de veces, pero al final...ya puedo leer su contenido:

1637842385270.png

Se ve la dirección en decimal y en binario (de A0 a A17), el dato leido (de Q7 a Q0) en binario, y finalmente el dato en decimal.

Mañana (o antes si tengo tiempo) voy a intentar escribir un solo byte a ver si soporta o no la escritura sin necesidad de usar bloques.

Saludos cordiales,
Aitopes.

PD: Cuando esto funcione al 100% comparto el código, diagrama, etc. Todavía no tiene sentido hacerlo, es un lio :)
 
Buenos días!
Hoy tuve un ratito libre.
Comprobé las 32 conexiones entre el Arduino Mega y la memoria Flash, escribí un programa muy básico (y para nada optimizado) que recorre las direcciones de memoria a partir de una dada como inicial, y muestra el dato que está alojado en ella.

Me gustaría decir que fue fácil, pero la verdad es que me llevo como media hora la lectura del datasheet, ver qué papel juega cada pin de control, etc, equivocarme un par de veces, pero al final...ya puedo leer su contenido:

Ver el archivo adjunto 274774

Se ve la dirección en decimal y en binario (de A0 a A17), el dato leido (de Q7 a Q0) en binario, y finalmente el dato en decimal.

Mañana (o antes si tengo tiempo) voy a intentar escribir un solo byte a ver si soporta o no la escritura sin necesidad de usar bloques.

Saludos cordiales,
Aitopes.

PD: Cuando esto funcione al 100% comparto el código, diagrama, etc. Todavía no tiene sentido hacerlo, es un lio :)
Felicitaciones! Si puede grabarse de a un sólo byte!
Podría servirme, para usarla en backups del firmware de la PDC.
ÉXITOS!👏
 
Felicitaciones! Si puede grabarse de a un sólo byte!
Podría servirme, para usarla en backups del firmware de la PDC.
ÉXITOS!👏
Te mantengo al tanto. Hoy trabajo hasta las 18:30, no se si despues de eso me voy a poder poner.
Tambien tengo que ver como es el sistema de proteccion contra escritura que tiene (parece que son dos, uno usando 12V y otro sin necesidad de 12V, solo con 5V). Por que seguramente está protegida contra escritura (esta memoria es "recuperada" de la basura).

Saludos cordiales,
Ariel.
 
Buenos días!
Solo paso para comentar que sigo "peleando" con la memoria :)

El fin de semana tengo service del auto toda la mañana, cumple de uno de los "peques" por la tarde. Pero en algun momento espero avanzar con esto. Estoy leyendo sin problemas. Tengo que implementar la grabacion (que tengo empezado, pero sin funcionar por ahora)

1637934047546.png

Rojo: codigo del fabricante de la FLASH.
Naranja: Device ID
Verde: Memoria desbloqueada.

Cuando haya novedades vuelvo :) :)

Saludos cordiales,
Aitopes
 
Buenas noches!
Paso solo a contarles que resolvi todo lo que tenía pendiente.:giggle:

Ya puedo:

- leer bytes
- escribir bytes
- borrar bytes
- borrar la eeprom completa
- proteger el chip
- desprotegerlo
- Ver qué fabricante y modelo de chip posee


Todo mediante comandos enviados por el puerto serie del Arduino.

Mañana, con mas tiempo, explico un poco más.

Ahora ya podría empezar a hacer el soft en Python que use esto para "volcar" un HEX a la EEPROM...;)

Saludos cordiales,
Aitopes.
 
Atrás
Arriba