desktop

Ordenador casero con uP Z80

Es muy buena idea usar una placa experimental cómo guía. Yo en lo posible utilizo SMD, para evitar lo tedioso del eterno taladrado.
Bueno, respecto a mi proyecto, ahora estoy en el desarrollo de la tarjeta VGA. Si la velocidad de los CIs es la esperada, debería poder manejar un formato de 640x480 en 256 colores.
Con atributos en modo texto, cómo parpadeo de carácter.
En modo gráfico, permite manejar píxeles individuales.
Me resultó difícil conseguir memorias súper rápidas para el buffer. Dado el refresco de vídeo se necesita 40nS/píxel. En fin, aún me queda un 30% para armar y comienzo, con las 1ras. pruebas.
Y la verdad, es que me está llevando más tiempo de lo previsto.
El tema PWM, de hecho, el hardware que maneja el altavoz utiliza un oscilador variable binario hecho con contadores preseteables. Y puede utilizarse cómo PWM.
Respecto a la conectividad, el I2C es viable realizarlo con lógica discreta.
El problema del USB, es complejo, pero cómo el sistema posee un puerto UART, fácilmente se puede utilizar una interfaz seríe a USB externa, si es que se piensa conectar algo allí afuera jeje.
Aunque antes de pensar en un puerto USB.
Me atrae la idea de implementar un controlador de floppy disk. Hace más de un año que vengo analizando el sistema. Aunque en caso de realizarlo, el formato de datos no sería compatible con el standard IBM que todos hemos usado.
 
Gudino me interesaria darle una ojeada a ese esquematico de su circuito PWM , si el I2C es factible con logica discreta pero por alli le di una ojeada a un codigo para echarlo a andar hecho en assembler para el 6502 y ocupaba mas de 600 lineas de instrucciones para echarlo andar, andaba deduciendo que saldria un codigo mas compacto pero ya veremos , nos deja algo asombrados que quiera habilitar una disquetera para diskettes de 1.44 megas en lugar de usar esas memorias compact flash o las SD de varias megas para amacenamiento, en mi caso quiero utilizar memorias EEprom de la serie 24Cxx que hay capacidades de hasta 128 Kbytes
 
Este es el modulo I2C , en un comienzo tenia pensado diseñarlo con un latch 74LS573 y un buffer 74LS245 como puertos de entrada y salida para controlar las señales del bus I2C , SPI/3-wire y 1-wire a travez de las compuertas no-inversoras de colector abierto pero despues de empezar el diseño me di con la sorpresa que la dimension de la tarjeta resultante no encajaba y hasta creceria mucho asi que se me ocurrio utilizar otro 82C55 de forma dedicada usando los pines nesesarios de sus 3 puertos A, B y C de la forma masconveniente, descartando algunos pines de cada puerto que no tendran ningun uso, haciendo menos engorrosa las conexiones y compactando la tarjeta para que no desalinee tanto con las demas , alli podemos ver que tenemos las salidas disponibles de los 3 grupos de señales acompañados con su toma de GND , en la parte superior vemos la memoria eeprom 24C256 y el respectivo DS1307 del cual su salida de 1 Hz llegara hasta una linea de interrupcion del 82C59 y luego prepararle su rutina de atencion, el soporte de la bateria o pila de 3v para mantener funcionando al RTC ira cableada y adosada o pegada a la espalda de la tarjeta y listo , cerca a los pines del 11 al 16 del 82C55 va una regleta o pack de resistencias de valor 3.3K con punto comun a positivo pero como no la tengo solo conectare las resistencias a la manera de peine unidas por el otro extremo y a VCC porque ya no hay otro espacio mas comodo donde colocarlas, estas resistencias corresponden a las pull-up conectadas a los colectores de los 74LS07. y pues llegando a esta parte ya las direcciones para estos modulos los he dejado fijos de tal manera que quedarian asi sin jumpers de seleccion

20H - PIC Controlador programable de Interrupciones 82C59
30H - PTC Controlador temporizador programable 82C53/54 (este ultimo mas veloz)
40H - I2C Este modulo de bus I2C, 1-wire y SPI/3-wire
50H - PPI Modulos entradas /salidas paralelas
60H - ACIA Modulo de comunicacion serial

Para la version del Sistema Minimo Z80 v2.0 , se seguira usando la misma placa de soporte principal del Z80 solo cambiara la placa de slots y los modulos que usara seran compatibles con los usados por el 8088 y en este caso seran 7 zocalos,. pero con esta version 1.00 basica ya es suficiente como para embuirse en el fascinante mundo de los retromicroprocesadores clasicos jeje

Modulo I2C 1wire spi.jpg
 
Gudino me interesaria darle una ojeada a ese esquematico de su circuito PWM , si el I2C es factible con logica discreta pero por alli le di una ojeada a un codigo para echarlo a andar hecho en assembler para el 6502 y ocupaba mas de 600 lineas de instrucciones para echarlo andar, andaba deduciendo que saldria un codigo mas compacto pero ya veremos , nos deja algo asombrados que quiera habilitar una disquetera para diskettes de 1.44 megas en lugar de usar esas memorias compact flash o las SD de varias megas para amacenamiento, en mi caso quiero utilizar memorias EEprom de la serie 24Cxx que hay capacidades de hasta 128 Kbytes
Hola Amigo, busco la imagen del PWM con lógica y lo comparto por aquí.
La opción de usar I2C con lógica discreta, me baso en un sistema secuencial con un patrón almacenado en una EPROM. Luego con un comando de lectura o escritura, accedo a la memoria I2C.
Mensaje automáticamente combinado:

IMG-20201212-WA0029.jpg
Aquí comparto el lector/grabador de la serie 24CXX.
Tengo que añadir el código cargado en la 27C64.
Mensaje automáticamente combinado:
 

Adjuntos

  • IMG-20201212-WA0031.jpg
    IMG-20201212-WA0031.jpg
    105.8 KB · Visitas: 15
  • IMG-20201212-WA0032.jpg
    IMG-20201212-WA0032.jpg
    121.4 KB · Visitas: 15
Última edición:
Por estas fechas ando algo ocupado y he dejado en pausa los proyectos de los retrocomputadoras pero estube revisando sus circuitos Gudino del I2C y PWM , el de I2C se ve algo compliado de implementar en un modulo de tamaño reducido mientras que el otro circuito del PWM me parecio muy ingenioso que me dio algunas ideas para tratar de implementarlos o adecuarlos a los PTC 8253 con algun circuito extra minimo que me permitiera convertir los 3 canales en 3 PWM para controlar 3 servos , los diseñadores del 8253 se hubieran anotado un gol de media cancha si hubieran creado un nuevo PTC 8254X que incluyera ya circuiteria PWM lista.
 
El circuito I2C, se ve complejo, porque se trata de un programador manual de memorias 24CXX.
Pero, para implementar en un sistema con procesador, se minimizan varias cosas.
Aún no tengo un diseño final para implementar. Apenas tenga algo, lo comparto por aquí.
Por el momento sigo trabajando en la placa VGA, que por cierto me está llevando demasiado tiempo.
 
Vaya me di con un tropiezo con el modulo 82C59 que controla y gestiona las interrupciones, resulto que no es compatible con el Z80 en el modo que trabajaria con el 8080 o incluso el 8088 en cuanto a las señales INT e INTA y revisando e indagando llegue a que solo se puede utilizar un 8259 en modo polling por software osea el Z80 tendria que cada cierto tiempo ver si los semaforos de interrupciones se han activado para atenderlos y pues el Z80 tenia otra forma de ejecutar las interrupciones de sus perifericos como son el DART , SIO, CTC y otros mas, estos pueden enviar una señal de interrupcion INT y colocar una un vector de interrupcion ademas de entre ellos tener un bus interno de dos señales que se conectan en cascada entre todos los perifericos a manera de acarreo de entrada y salida para arbitrar la prioridad de la interrupcion , y pues para este sistema modular con Z80 tendre que prescindir del uso del modulo 8259.
Aun se podria incorporar modulos con chips de la misma familia del Z80, algo curioso con el CTC del Z80 es que en su datasheet muestra que este no tiene señal WR solo RD y para enviar la configuracion tiene que estar presente una secuencia con las señales de control que me preguntaba vaya que les costaba poner la señal WR jeje
 
¡HOLA que tal homebrew computer club!
Aunque ha pasado bastante tiempo, con esta pandemia me di a la tarea de reciclar componentes interesantes de mi cajón de chácharas, en este caso una matriz de leds que tenia un cpu Z-80 a 6Mhz y cosillas varias.

Arme mi propia computadora casera no tan pulida como la de los compañeros pero funciona y me siento bastante contento al verla funcionar.
el sistema consta de placas modulares donde están alojados diferentes periféricos como son la memoria RAM, una EEPROM, un puerto PPI 82c55 y el mismo cpu.

A pesar de que no es algo nuevo un libro que me ayudo mucho fue :
libro.jpg
lo encontré y decidí en el emprendimiento de la programación de este microprocesador.

Las placas son bastante sencillas aunque no me base directamente de la idea del compañero avefenix586 se parecen un poco en cuanto al tipo de buses.

acá unas fotos:
IMG_20210613_174349.jpgIMG_20210613_174404.jpgIMG_20210613_174425.jpgIMG_20210613_174438.jpg

Las placas son hechas con el método de la plancha de toda la vida, el barniz es el UV-mask de toda la vida.
si tienen duda como lo aplique es complicada mente fácil.

/*
Una vez hecha la PCB con un bastidor de 90 hilos le aplico tinta UV y la seco con la pistola de aire caliente, una vez seca la tinta, sumerjo en agua la PCB y una vez sumergida y sin burbujas le coloco el acetato con los pads dibujados, que se pegue a la placa, una vez adherido el acetato se va a 4 minutos a la insoladora.

con alcohol isopropilico limpio los pads no endurecidos, una vez limpio se mete un ratito mas a la insoladora para que termine de curar.

fuera del tema de la mascara UV.
*/


El sistema esta armado por el momento en un protoboard por que a cada rato se me ocurren ideas así que aun no hago una mother borad.

memoria EEPROM: AT28C64B 8k
memoria RAM: HY6264 8k
puerto serie: 68B50 a 9600 baudios
puerto paralelo: 82C55
chips de apoyo: 74ls139, 74ls14, 74ls04, 74hc595,cd4040

IMG_20210613_174228.jpg

Se ve feito mi sistema pruebo subrutinas en el, no soy un experto como los demás pero me uno al homebrew computer club :love:.
mi sistema usa un bootloader por puerto serie completamente escrito en ASM.

Aunque no use el bootloader del compañero avefenix586 pero si lo desensamble con disassembler del Z80 IDE, me di cuenta que estaba escrito en BASIC así que no lo toque y decidí en escribir uno propio, no use el del compañero por la razón que mi sistema cuenta con solo 8K de memoria y la idea de meter un .hex implicaba cargar el .hex como texto en la RAM para después ser volcado en binario a la misma.

mi bootloader rustico pero simple, recibe el binario crudo y lo va copiando a la RAM en la dirección 2000H.
no soy un gran programador pero así se ve mi bootloader:

BOOTLOADER.pngBOOTLOADER.png

por el momento adjunto el código fuente de mi bootloader hasta donde va, aun no se me ocurren funciones nuevas y después agregare diagramas y posiblemente una placa base para que el sistema corra como liebre, obviamente agregare mas memoria, solo que se me habían acabado las PCB vírgenes por eso no le agregue mas memoria.:ROFLMAO:

con el tiempo subiré diagramas y código fuente para los que tengan curiosidad por los retrostatos.
por el momento tengo escritos códigos de matemáticas a 8 y 16 bits, imprimir en BCD por puerto serie, pero aun no me atrevo a publicar por lo cochino que esta la programación.

hasta la próxima.
 

Adjuntos

  • boot.txt
    7.7 KB · Visitas: 8
  • LCD spi.TXT
    9.7 KB · Visitas: 5
Excelente Amigo!!! Echar a andar éstas máquinas creadas por ntras. manos, no tienen descripción!
Las PCBs, te quedaron con un toque muy profesional. Nada que envidiar a los chinos!!!
Pregunta, cómo sincronizas la captura de los datos del bootloader que van ingresando a la RAM? Por lo que vi NO hay buffer, así que el micro debe ser lo suficientemente rápido cómo para "ver" cuándo entra un dato e instantáneamente lo copia?


Vamos por más!
Hay que engordar a éste club!!
 
Así es el 68B50
Es algo lento, no tiene Buffer de entrada solo tiene 1 registro de 8 bits para lectura otro para escritura, 1 registro de control y un registro de estatus.

Lo que hago es un bucle que revisa el registro de estatus en el bit 1, cuando hay un dato salta a leer el registro, y ese dato en el registro lo envío a un byte en la RAM incrementando la dirección en los registros HL.

Si te preguntas si hay sincronía pues en realidad NO pero hice pruebas y vi que funcionaba a la primera. 👍🏽

Al tener poca ram envío directamente el archivo binario, para que se escriba directamente en la RAM.
 
Se que a pasado bastante tiempo desde que publique el sistema mínimo con el z80.
los archivos los subía en formato TXT por hyperterminal en y para subir los archivos a la memoria RAM usaba la dirección 2000H para poder ejecutar el programa desde la RAM.

El problema era hacer que el binario ocupara la dirección 2000H.
para eso tenia que usar el programa que muchos conocerán llamado WINHEX.

El problema era que cada vez que uno compilaba el ASM había que modificar el .hex que se generaba y guardarlo como binario y re nombrarlo con extension .txt para poder subirlo a hyperterminal.

Eso hacia que escribir un programa para el Z-80 fuera un dolor de cabeza tratar de ejecutarlo en la computadora real.

Así que decidí hacer un programa bootloader en Visual Studio para hacer una interfaz y subir directamente el .HEX al Z-80 y que el Z80 sea capaz de ejecutar el programa. ;)

Adjunto el bootloader para que puedan darle un ojo aparte subo el código fuente para que puedan hacer las modificaciones que quieran para diferentes proyectos.

boot visual.png


Disculpen si el programa es bastante rudimentario, la verdad es que tenia pereza de pensar y recicle código de diferentes programas que había hecho esta el código algo espaguetizado pero bien comentado ;)
 

Adjuntos

  • abrirguardar.rar
    6.9 MB · Visitas: 11
Bueno, esto lo pongo por aquí ya que tiene que ver con el tema y tal vez a alguien le sirve.
Revolviendo cosas viejas en mi casa encontré un Z80-CPU y dos Z80-PIO originales y sin uso (aparentemente). No tengo idea de donde los saqué pero YO no los he usado nunca y ya dudo que alguna vez lo haga. Estos son los chips:
Z80s.jpg
La idea es: si estos chips le son útiles a alguien, podemos arreglar para que se los envíe de regalo (GRATIS) pero tiene que hacerse cargo del flete....preferiblemente dentro de Argentina.
 
Última edición:
Atrás
Arriba