Ordenador casero con uP Z80

#61
Y es asi como quedaria todo el sistema minimo con Z80 con sus modulos conectados con lo cual ya podria ser funcional , tenemos la tarjeta principal , la RAM de 32Kbyte , la Eeprom de 32 Kbyte donde alojaremos un programa monitor o de alguna otra aplicacion , la tarjeta principal conectada a la de SLOTS y por lo pronto alli tenemos un modulo solitario con el PPI 82C55, las memorias se pueden colocar indiferentemente en cualquiera de los dos zocalos de la tarjeta principal asi como los modulos de I/O tambien se pueden colocar en cualquiera de los 5 zocalos respectivos porque lo que hace la distincion es la posicion de los jumper de seleccion en cada modulo en diferente posicion y bueno a manera de test escribire un programa para un secuencial de leds conectados a los puertos del PPI 82C55 , el programa quiero escribirlo con el Z80 simulator ide de oshonsoft y cargar ese hex resultante mediante un programador que tengo ,echarlo a andar para prueba de velocidad de reloj del sistema subiendolo desde el minimo 2 mhz hasta el maximo 20 mhz. Alguien sabe si hay un compilador C cruzado para Z80?
El siguiente modulo a preparar seria el de la comunicacion serie con el 68B50 para comunicarnos con la PC a travez de un modulo TTL/USB que hay en el comercio como el FT232RL ya no se usaria el max232, el programa monitor para Basic esta disponible en la pagina de donde tome la primera imagen del circuito minimo, claro pero estaba preparado para ese circuito de la imagen , asi que requeriria hacerle cambios en el mapa de direcciones cosa que con paciencia habria que hacerlo segun las indicaciones , pero yo tambien quiero echarlo a andar tambien con su teclado matriz de 24 teclas (numerico + comandos) y sus seis display de 7 segmentos o quizas una pantalla LCD , para el teclado y el display se podria utilizar otro modulo preparado para ello o conectarlos simplemente a las salidas del modulo PPI , como no se usa ninguna bateria para conservar el contenido de la RAM podriamos tambien agregarle un modulo con una memoria 24C256 donde con un comando se volcaria todo el contenido de la RAM y al encender el sistema tambien se pueda restaurar desde alli a la RAM con otro comando y retomar nuestra aplicacion . Esto seria algo asi como lo que se hace en el Propeller de Parallax. Bueno en la siguiente publicacion ya les mostraria el circuito funcionando si es que no hay algun imprevisto jeje.


IMG_20190313_181559632.jpg IMG_20190313_181650118.jpg
 
#62
Felicidades por tu proyecto yo usaba basic para Z80 y si es cómodo.
C para Z80 si existe pero es muy limitado.
Curioso pero existe un compilador C para nintendo NES y es más funcional que el C del Z-80.
Ami no me gustó , el basic de Z80 es muy bueno y útil para hacer proyectos.
 
#63
Hola hola, vaya, me da gusto saber que alguien secunda el tema del ordenador casero con Z80 (y). Como comenté en este post anteriormente, más allá de una funcionalidad del sistema mínimo, se aprende bastante de la arquitectura de un microcontrolador y de los sistemas en general. Mi compu con ese procesador está guardada para futura herencia.

Cuando desarrollé este proyecto no tenía idea de C y todo lo hice en ensamblador. Si vi que había compiladores de C pero no me adentré en su uso... en fin, estaré por aquí leyendo sobre tus avances.

Saludos
 
#64
Es que el ASM de el Z80 para mí gusto es muy bueno y poderoso hay instrucciones para cosas muy útiles e instrucciones que parecen ser la misma pero alertan banderas.
El ASM del PIC de la familia 16 es muy cutre por sus limitadas 32 instrucciones y hacen el código muy tedioso.

Basic para Z80 es muy fácil de interpretar y hay simuladores que permiten usar el puerto serie o simular varios tipos de puertos.
 

Dr. Zoidberg

Well-known-Papá Pitufo
#65
Cuando hicimos el trabajo final de la universidad me tocó programar un controlador PID (6 en realidad) en assembler del Z80 en una Talent MSX, y la verdad que a pesar de ser muy parecido al del 8080 tenia registros espejados y otras cosillas que simplificaban mucho el diseño del programa. Muy buen assembler en verdad.
 
#66
Gracias colegas electronicos por sus comentarios, Daniel en realidad yo habia comenzado un post nuevo aparte titulado "Sistema Minimo con Z80 " que no tenia grandes pretenciones de poder igualar a su proyecto porque veo que es todo un maestro en esa materia microprocesadora, pero los administradores arbitrariamente unieron mi post nuevo con su post de la computadora con z80, espero que cuando haga mi post con el MC6809 no lo empalmen aqui tambien :ROFLMAO:pero bueno continuemos adelante.

En las imagenes anteriores les mostraba las tarjetas sin sus chips solo con zocalos vacios para verificar antes que no hubieran problemas en las pistas y efectivamente encontre algunos puntos en los puentes que no habia soldado bien y en la manufactura del impreso de la placa principal habia una pista rota que interrumpia la señal del D0 del bus de datos del uP al buffer, tambien tengo que hacer una acotacion sobre el diseño de la tarjetita que dice ROM 32k que se corresponde con los pines para una 27C256 que difiere en la posicion de dos pines con respecto a la memoria 28C256 que estoy usando , estos pines son /WE y A14 que en la misma tarjeta modifique los puentes enviando /WE a VCC y encaminando la pista A14 , asi que tendriamos una version adicional de tarjeta de memoria al usar una E2prom 28Cxx a cuando se use una 27cxx que agregare tambien, una vez resuelto todo ello con el Z80 simulator ide escribi un programa sencillo de cuenta ascendente de 0 a 255 que se mostrara por la puerta A del PPI en una primera instancia arme un oscilador con timer 555 a una frecuencia baja de 10 hz aproximadamente y se lo inyecte por el pin de clk , al energizar tenia que presionar manualmente el boton de reset por unos segundos y pude ver que el circuito estaba "vivo" ,veran que tambien use un modulo de 8 leds con un pin comun a GND que esta enchufado a la salida de PORTA y se ve como los leds reflejan la cuenta ascendente y vuelven a cero y asi indefinidamente, el programa ejemplo enviaba la cuenta ascendente sin delays porque estaba corriendo con un reloj de 10 HZ , tengo 4 cristales integrados de 4 pines de 4MHz, 8Mhz, 10MHz y 20Mhz , volvi al programa ejemplo y le agregue un retardo adecuado y le puse el primer cristal de 4Mhz con lo que todo el sistema minimo corrio bien sin error y de esa situacion son las imagenes que subi , luego le cambie el reloj del sistema por el cristal de 8 Mhz y al echarlo a andar los valores mostrados en los leds ya no eran en cuenta ascendente ordenada sino que los valores aparecian de forma arbitraria solo una vez y alli se quedaban detenidos osea se puede deducir que hasta aqui la CPU y las memorias si alcanzan a responder al envio de la instruccion a la frecuencia de 8Mhz y se envia la señal de /IORQ osea la instruccion "OUT" en assembler se esta leyendo y procesando correctamente desde la memoria en un primer momento y mas bien el que tira el sistema abajo es el PPI 82C55 que no responde al ritmo de la de los 8Mhz, solo tengo una version que dice 82C55-5 que dice correr a 5 Mhz tengo tambien uno que dice 82C55-2 que no tendria caso usarlo, pueda que exista una version mas rapida del PPI a 8 o 10 MHz luego al probar con colocarle un cristal de 10 MHZ al sistema minimo ya no se ve ninguna reaccion en el PPI no le hace ni cosquillas, no aparece ningun cambio en adsoluto en sus salidas, no tengo un osciloscopio o forma de ver las señales presentes en los buses asi que no podria asegurar si las memorias estan respondiendo correctamente a esa velocidad y es el PPI el que quedo fuera de combate solamente , sospecho que la E2prom 28C256 tambien ya esta algo confundida jeje, entonces a partir de estos 8 MHz en adelante ya tendria que diseñarle el circuito que inserte los correspondientes estados Wait que dependiendo la velocidad serian 2 a 4 estados insertados , pero si los fabricantes han lanzado esa version del z80 a 20 Mhz deben tambien estar acompañado de su familia corriendo a esa misma velocidad y tambien memoria RAM y Flash que respondan a esa velocidad sino el sistema corre disparejo para esas velocidades irrisorias que hace tiempo rebasaron los microcontroladores .
El programita de prueba en Z80 simulator ide es muy sencillo

Dim a As Short
Dim b As Integer
Dim c As Integer

Put 23h, 128 'control del ppi 82c55 que configura como salidas

inicio:
For a = 0 To 255
Put 20h, a 'contenido de la variable a al puertoA
For c = 0 To 10 'delay anidado
For b = 0 To 320
Next b
Next c
Next a
Goto inicio
End

Se compila en assembler, en Hex y se carga con un programador de memorias que tengan a mano y lo echan a correr .
Bueno con este pequeño test compruebo que el circuito es funcional para las practicas con este uP Z80 para los que quieren aventurarse a armarlo basado en estas tarjetas modulares les va a funcionar si lo arman correctamente.
en el proximo post veriamos el pequeño modulo de estados waits a insertar en el zocalo preparado para ello y tendriamos que avanzar al siguiente paso que es el llamado "entrenador para Z80" al que adjuntamos su display y teclado compacto .


IMG_20190322_145633650.jpg IMG_20190322_145648449.jpg IMG_20190322_145730464.jpg IMG_20190322_145745268.jpg IMG_20190322_145610967.jpg IMG_20190322_145622144.jpg IMG_20190322_145716458.jpg
 
#68
Ni tan obra de arte porque le falta un mejor acabado :p bueno se hace lo que se puede jeje.
Bueno en este post comentare el resultado de el circuito /Wait para estados de espera para dispositivos lentos que probe ,estos circuitos los tome de unos libros tecnicos de z80 ademas que diseñe un circuito basado en contador para insertar desde 2 hasta 15 estados de espera, lo resultados no fueron del todo buenos, he armado como 4 circuitos de estados waits para insertar estados de espera desde 2 a 12 tiempos de reloj, ahora para comprobar de que estos funcionaban bien le hice la prueba en la velocidad mas segura de manejo del Z80 es decir a 4 mhz y su circuito minimo comprobando satisfactoriamente que 3 de los 4 diseños funcionaban aceptablemente utilizando el mismo programa de cuenta ascendente por el Port A del 82C55, el insertar 2 estados waits es casi imperceptible pero si se puede notar su efecto en cambio insertarle 12 estados de espera si es mucho mas notorio, esos circuitos trabajaron muy bien a 4 Mhz reduciendose la velocidad de las cuentas drasticamente pudiendose notar su efecto ralentizador y luego vino la incertidumbre al aumentar la velocidad de reloj . en este sistema minimo utilizamos las señales /RD y /WR para habilitar los estados de espera, despues tambien probe con/mrequ, /iorq, /m1 consiguiendo los mismos resultados siendo casi indiferente trabajar con cualquiera de esas señales.
Al usar cristal de 8 Mhz ya no se tenia respuesta en las salidas del PORT A , probe los cuatro circuitos de estados de espera y ninguno pudo ralentizar la cuenta, comprobe con una punta logica que estaban presentes los pulsos de entrada al circuito y tambien los pulsos de salida del circuito a la patilla /Wait del CPU , todos los pulsos presentes insertandole 12 estados de espera por ciclo de lectura o escritura y no se veia ningun cambio, al cambiar de cristal a 10 MHz el resultado fue el mismo las señales de espera estaban presentes , se diria que el z80 leia los datos pero no enviaba nada a la salida del 82C55, luego de eso cambie el cristal por el de 20 MHz y el resultado fue calamitoso, practicamente el micro estaba congelado parcialmente , las señales de salida de sus buses de direcciones y control estaban detenidas ya sea en estado alto o bajo arbitrariamente ojo que si habia señal del cristal de 20 mhz constatada con mi punta logica, el circuito de estados de espera tampoco funcionaba y se quedaba congelado , asi que vi conveniente hacer una prueba del micro en vacio osea solo sin memorias ni I/O , asi que coloque el micro en un protoboard , las señales colocadas donde corresponden, en el bus de 8 bits coloque 8 resistencias de 1k a GND para obligar al micro a leer la instruccion equivalente de 0x00H que equivale a NOP con lo que el bus de direcciones incrementa su valor de uno en uno pudiendose notar la oscilacion de mas a menos en las salidas de los buses de direcciones donde iban conectadas unos leds siendo A15 la de menor frecuencia trabajando a 4 mhz para comenzar , luego con 8 mhz hasta alli todo bien con las señales con las oscilaciones esperadas subiendo la frecuencia en A15 por efecto de aumentar la velocidad de reloj, luego segui la prueba cambiando el cristal a 10 Mhz y tambien se veia que el micro funcionaba y seguian corriendo las direcciones hasta aqui estamos en que el micro si trabaja hasta los 10 Mhz pero entonces el sistema minimo con las memorias y el PPI dejan de seguirle el ritmo y por alguna razon ni siquiera ayuda la insercion de los estados de espera para tratar de que el CPU les espere su gana , o los circuitos de espera tienen algo que se les escapa en su diseño o los tiempos de los estados de espera al aumentar la velocidad de reloj no llegan a sincronizarse haciendo que el circuito alargue las esperas en ciertas partes de las señales y en cambio no en otras donde tambien se requeriria estiramiento de señales para completar el funcionamiento correcto porque normalmente como las señales del Z80 son de activo bajo como /Memrq /IOrq, /RD, /WR, /M1... son todos activo bajo y es solo en ese momento en que las señales de estado de espera son reconocidas e insertadas adecuadamente y alli si se ralentiza pero en cuanto estas señales pasan a nivel alto es donde ya no se puede estirar esas señales altas e inmediatamente al venir los proximos estados activos bajos terminaran atropellandose o solapandose los datos remanentes con los de la siguiente direccion en curso del contador de programa pues no le dieron tiempo a extinguirse ocasionando error de lecturas o datos no estables , bueno eso estoy suponiendo, y entonces al hacer la ultima prueba de fuego de probar el micro CPU z80 que viene acuñado en su cuerpo que es una version que corre a 20 mhz que compre nueva made in la gran China, como no tenia mas cristales intermedios de 12 o 16 Mhz ya le coloque de frente el cristal de 20 Mhz y ohhh sorpresa el micro deja de funcionar correctamente, empieza a entorpecerse , el bus de direcciones bajos los 8 bits inferiores estan oscilando pero en cambio el bus de direcciones altos deja de oscilar y se mantienen algunas patillas en estado alto y otras en estado bajo fijos cosa que no deberia ser asi y estas tambien deberian oscilar , he hecho las pruebas varias veces y el resultado a sido el mismo ,parece que ese dichoso micro Z80 de codigo Z84C00020PEC que segun la datasheet es de las ultimas versiones ( e incluso en una pagina mencionan que hay una version mas de hasta 25 Mhz) no corre a la velocidad tope que indica el fabricante, o son versiones defectuosas y puede que corran a velocidades proximas como 16 o 18 Mhz pero en 20 Mhz se cae por completo , no creo que el cristal de 20 Mhz que estoy utilizando este mandando mas de 20 mhz?? mmm tendria que prestarme un osciloscopio o frecuencimetro, he buscado en internet alguna luz sobre este micro de 20 mhz pero practicamente no he encontrado casi nada, he encontrado que tampoco puedes sustituir en algun equipo comercial un CPU z80 NMOS por estas versiones CMOS porque el comportamiento no es 100% equivalentes y producen errores misteriosos, busque varios dias informacion sobre este z80 de 20 mhz y encontre una pagina en ingles donde construyen tarjetas hibridas con z80 de 4 mhz y atmegas ,de alli conectadas con su propia salidas de video vga y demas perifericos, el autor en un ultimo post reciente comenta que quiere mejorar el rendimiento de esas tarjetas elevandolo a 5 veces por lo cual va a utilizar en su lista de componentes a nada menos que tambien cambiar el z80 de 4 mhz por el de 20 Mhz asi que andare pendiente de que incidencias se presenten con su uso o si capaz tambien encuentra los mismos problemas que yo, quien sabe y me a tocado unos micros de un lote con fallas de fabrica o eran micros de 10 Mhz y le acuñaron fraudulentamente una leyenda de 20 Mhz , bueno espero que alguien mas que tenga estos micros z80 de 20 mhz pueda hacer pruebas y verificar si tiene los mismos problemas o encontro la forma de hacerlo funcionar a lo rapido y furioso, asi que por lo pronto hare una pausa con lo de los circuitos de estados de espera y continuare al desarrollo de mi programa monitor basico para habilitar el sistema minimo como tarjeta entrenadora para Z80 corriendo a los estables 4mhz.





IMG_20190327_182946367.jpg IMG_20190327_175432924.jpg IMG_20190327_175941621.jpg IMG_20190327_175952791.jpg IMG_20190327_182937330.jpg
 
#69
Encontre en otros foros que otras personas comentan que el Z84C0020PEC esta bastante trucado que no es mas que un micro de 10 mhz disfrazado osea en cuanto a los lotes que estan abundando en nuestro medio , debe ser el caso de los micros que tengo y al someterlos a la prueba de rigor de 20 mhz colapsan totalmente ,tambien mencionan que comparando que en la tienda Mouser ese micro z80 de 20 mhz original lo venden a 11 dolares la unidad mientras que por esa misma cantidad te compras 10 unidades desde China no hay reclamo a calidad jeje, estare tambien a la expectativa de ver como otros hobbistas por alli le hacen para levantar ese micro de 20 mhz autentico con todo su sistema minimo completo o ya sea para una determinada aplicacion, el autor de la tarjeta hibrida z80-atmega tambien estaba considerando usar memorias que corran a 100 mhz, me imagino que seran memorias DDR1 o memorias que usaran quizas en esas tarjetas del tipo raspberry o similares y para la rom iba a emplear memorias flash de la serie 29Fxx que alcanzan tiempos de hasta 70 nanoseg . Esto parece que se esta volviendo como un reto jeje
Notese en las imagenes como unos micros tienen su codigo bien marcado mientras que en la segunda imagen del medio el codigo es bien ralo que se lee con dificultad, justo ese es el micro que tengo asi que facil esa nomenclatura esta trucha y se trata de un Z80 rechino de solo 4 mhz camuflado como de 20 mhz jeje

6947665_c7a4fd9f-2acd-49c9-bc9e-df10f48eced9.jpg images.jpg




$(KGrHqZ,!qIFDQ4m09+qBQ5UKm!jC!__60_1.jpg

Este es uno de los circuitos de estados de espera basicos para insertar dos estados de espera que vi en uno de los manuales de Z80, utiliza solo la señal de /M1, pero puede uno usar tambien la /MREQ, /IORQ o /RD y /WR o combinarlas con compuertas y con cualquiera de ellas es el mismo resultado al hacer las pruebas, una cosa que se me ocurrio es que quizas al elevar la velocidad a 20 MHZ en los buses de direcciones despues del ciclo M1 estan presentes las señales del refresco para memorias RAM dinamicas lo que mientras mas rapido el reloj podrian estar confundiendo la direccion a la que se este accediendo desde las memorias estaticas y terminen por colapsar leyendo instrucciones erradas , asi que quizas podria colocar un latch en el bus de direcciones para retener las direcciones validas para la memoria y descartar la direccion de refresco pero en 10 Mhz porque en las pruebas en vacio (micro solo) a 20 Mhz colapso totalmente estos micros truchos, bueno es una idea .

Hablando de velocidad de relojes recuerdo que lei en el manual del 8088 que para realizar unas multiplicaciones se consumia como 95 ciclos de reloj osea es bastante tiempo, debieron haber sacado una version actualizada conmemorativa que trabajara a 4.7 mhz externos como se usa en el PC XT pero internamente con PLL se multiplicara a 50 mhz y asi demoraria muchisimo menos en esos procesos complicados jeje
FF j-k wait state.jpg
 
#70
Me quede congelado con este proyecto del sistema minimo con Z-80 por causa de que el Z80 simulator IDE me estaba dando problemas para arrancar en mi windows 7 por ese famoso "error 7 out of memory" pero ya lo solucione y ahora empezare con mi diseño de programa monitor para 6 a 8 display y un teclado de 24 teclas para ingresar la informacion en hexadecimal como en la prehistoria de los microprocesadores jeje, tambien he encargado unas unidades de Z80 de otro proveedor que veo tienen otra leyenda impresa en el cuerpo diferente a la que he utilizado y que ya algunos usuarios compradores se percataron tambien que hemos sido timados y estos procesadores etiquetados como de 20 mhz no son mas que de 10 mhz trucados, que criollos se han vuelto estos chinos :LOL:
 

Temas similares


Arriba