# Ordenador casero con uP Z80



## Daniel Meza (Ene 8, 2012)

Saludos… Este es prácticamente el primer post de un proyecto que hago en el foro; consiste básicamente en un ordenador de 8 bits, si, como aquellos antiguos ordenadores de la antigüedad Spectrum, Atari, Commodore, etc.

Mi idea de llevarlo a cabo fue desde que aprendí a programar el uP Z80, ayá por los inicios del 2009. (Llevaba en la vocacional una materia en la que lo utilizabamos junto con su sistema mínimo para algunas prácticas).

Una vez con el proyecto en mente, comencé a idear lo que deseaba que hiciera mi ordenador: que fuera programable en consola, tuviera una pantalla donde mostrar información,  puertos para controlar dispositivos externos, que emitiera aquellas fastidiosas pero melancólicas melodías de los 80’s, que tuviera un teclado alfanumérico, etc; entonces comencé a diseñar el hardware y a empaparme de información relativa al proyecto. Por esas fechas también me uní a este foro donde me encontré con el  proyecto del amigo Antiworldx y me animé más a armar el mío. 

Fui construyendo el hardware y haciendo pequeñas pruebas de funcionamiento, encender un led por aquí, otro por allá bla, bla; una vez que ingresé a la escuela de nuevo (siendo precisos inicié el proyecto en las vacaciones de fin de año que dan en la escuela) ya no le pude dedicar tanto tiempo al proyecto y poco a poco lo fui dejando de lado, aunado a eso que comencé a trabajar en algunos  proyectos de automatización con µC’s. 

Volvieron otra vez las vacaciones y desempolvé el ordenador para continuarlo, pero esta vez lo rearmé porque en todo el tiempo que lo abandoné se me ocurrieron más ideas que no compatibilizaban con lo que llevaba armado. Rediseñé un poco el hardware y lo ensamblé en placas “multitrama” (desistí de la idea de armarlo en PCB por el tiempo que implicaba y por las seguras modificaciones que le haría en un futuro), continué haciendo pruebas de software, sufriendo desesperaciones, diseñando nuevas secciones del hardware, etc. Y así es como he ido desarrollando este proyecto a la par de mis conocimientos del tema hasta actualmente.

Dejando atrás un poco de historia que hay detrás de este proyecto, les platicaré de sus características técnicas:

**CPU:* Z80
**Frecuencia:* 2 MHz
**Memoria:* Está dividida en 9 páginas de 32 KB c/u

-Pág 0: 24 KB en ROM para el SO y 8 KB de RAM para el manejo de las rutinas de audio, de gráficos del GLCD y de control de los periféricos.
	-Pág 1: 16KB RAM y 16KB en EEPROM para programas y aplicaciones
	-Pág 2: 16KB RAM y 16KB en EEPROM para programas y aplicaciones
-Pág 3: 32KB para un cartucho o bien una expansión para una tarjeta de adquisición de datos.
-Págs 4, 5, 6, 7 y 8 con 32 KB c/u pero no están implementadas físicamente, las reservé para una expansión futura.

**Monitor:* GLCD 160*80 pixéles o alfanumérico con 20X10 caracteres
**Audio:* SN76489 (Como el que  se puede hallar en un SEGA Master System)
**Puertos:*
	-Paralelo con la interfaz PPI 8255 
	-Serie con la interfaz 8250
**Temporizadores:* 3 de 16 bits con el 8254
**Teclado:* QWERTY de una laptop IBM L40 

Otros datos curiosos es que tiene un circuito especial (ya se utilizaban desde mucho antes) para sobrepasar el límite de 64 KB direccionables por el Z80 con el que se puede direccionar hasta 288 KBytes, buffers en los buses para proteger a la CPU por posibles cortos (más de una ocasión me ocurrieron), tiene además un µC PIC16F84 para gestionar el  teclado y su alimentación es gracias a una fuente ATX.

En lo que refiere a la parte del software apenas me encuentro programando el SO pero les contaré los programas que tengo pensado en desarrollar:

**SO TeXON 1.0 Sistema operativo:* Programa principal que se encargará de gestionar el acceso a las rutinas de servicio de los periféricos.
**Cuaderno:* Algo como un bloc de notas de Windows
*Ensamblador: Es un lenguaje para la programación en consola (Aún no se me ocurre un nombre para él).
**Calculadora:* Una calculadora básica sumas, restas, multiplicaciones y divisiones.
**MatPop:* Programa de cálculo, gráficas (sencillas) de funciones, y estadísticas de datos.
**µLoop:* Programa para crear melodías de 8 bits a base de "samples".
**Juegos:* Hasta el momento tengo pensado hacer un “tres en línea” (acá en México se le conoce como gato), tetris, ruleta, pacman, etc…

Y pues es lo principal que les puedo platicar de mi proyecto; seguramente más de uno se preguntará el caso de armar algo tan obsoleto; yo también me lo pregunté; pero no es tanto el armarlo, si no lo que vas aprendiendo a lo largo de su elaboración. En este caso aprendí a solucionar algunos problemas de ruido, interfaces entre familiar lógicas, programación (fue fácil aprenderle a los µC’s) y lo principal “paciencia en desarrollar tus proyectos”.

Finalmente les comparto algunas fotos de los avances  del proyecto y  los diagramas esquemáticos en ISIS.

Espero que a más de uno le interese el proyecto, es que me he dado cuenta que por el foro casi no se habla de lo que se le conoce como “Retroinformática”, una parte de la electrónica que más llama mi atención. 

Saludos y buen año…


----------



## trons (Ene 8, 2012)

Orale!, te felicito, tengo un buen de Z80 que saque de varias placas de videojuegos, la verdad esto se muy interesante y como dices, para hacer esto hace falta mucha paciencia y dedicacion, oye, yo en la escuela lleve en la clase de micros el 8031 de intel y llos programas los metiamos en una memoria paralela eeprom 28c64, sabes o de casualidas tienes algun software para programarla, en la escuela lo tenia pero por algun accidente de disco duro se me perdio este programa. saludos y felicidades


----------



## Daniel Meza (Ene 8, 2012)

Gracias... software ahy muchos, pero más que el software necesitas saber el modelo de tu programador y sobre eso buscar el softaware que lo controla. En mi caso uso uno como esté.


----------



## Scooter (Ene 8, 2012)

Seguro que no te has aburrido. Enhorabuena por el trabajo.



trons dijo:


> Orale!, te felicito, tengo un buen de Z80 que saque de varias placas de videojuegos, la verdad esto se muy interesante y como dices, para hacer esto hace falta mucha paciencia y dedicacion, oye, yo en la escuela lleve en la clase de micros el 8031 de intel y llos programas los metiamos en una memoria paralela eeprom 28c64, sabes o de casualidas tienes algun software para programarla, en la escuela lo tenia pero por algun accidente de disco duro se me perdio este programa. saludos y felicidades



Busca un derivado con flash o haz alguno de los inventos de memoria compartida para ejecutar en ram y un bootloader en eeprom.


----------



## joselo27 (Ene 9, 2012)

excelente trabajo,.,.,. se nota la dedicación y calidad con lo que lo ha logrado,.., felicidades


----------



## NarXEh (Ene 9, 2012)

Buenas!

sinceramente me parece fantastico tu proyecto, es mas, debo confesarte que yo tengo una idea muy similar a la tuya (desde hace ya muchos años) de crearme mi propia pc/consola integrada hecha por mi solo que con algunas variantes (utilizar un JK3 que corre a 32Mhz, un sistema de cartuchos con memorias sd y una salida a TV utilizando unos integrados que consigo cerca).Desgraciadamente todavia no los puedo realizar por falta de conocimientos pero la verdad que me encanto tu proyecto.

solo tengo una duda... con que programa se abren los archivos que contienen el rar ? 

Ojala sigas con esa iniciativa que me parece muy buena.

saludos!


----------



## Daniel Meza (Ene 9, 2012)

Muchas gracias por sus comentarios... me parece buena tu idea Narhex (de hecho yo quería utilizar una tele común como pantalla pero igualmente debido a mis escasos conocimientos del tema lo dejé de lado).



> solo tengo una duda... con que programa se abren los archivos que contienen el rar ?



Con Isis de Proteus, son los diagramas de interconexión del ordenador, por si alguien se anima a armar algo semejante o le puedan servir. 
Saludos y nuevamente gracias


----------



## solaris8 (Ene 9, 2012)

aca hay algunas cosas interesantes desde soft a diagramas de la sinclair y la tk90,manuales del z80/z81, algo de enzamblador.... de esos años.....
espero les sirva ....
ahh, muy buen tema

http://wos.meulie.net/pub/sinclair/technical-docs/


----------



## NarXEh (Ene 10, 2012)

Buenas! 



Daniel Meza dijo:


> Muchas gracias por sus comentarios... me parece buena tu idea Narhex (de hecho yo quería utilizar una tele común como pantalla pero igualmente debido a mis escasos conocimientos del tema lo dejé de lado).



Claro... despues si lo encuentro pienso subir un documento que explica como hacer eso.

en cuanto a la pagina que porpuso solaris8 me parece muy buena, yo tenia una guardada por ahi voy a ver si la encuentro y la posteo.

saludos


----------



## Daniel Meza (Ene 22, 2012)

> aca hay algunas cosas interesantes desde soft a diagramas de la sinclair y la tk90,manuales del z80/z81, algo de enzamblador.... de esos años.....
> espero les sirva ....


He revisado los links y vaya que tienen excelente información.. muchas gracias



> Claro... despues si lo encuentro pienso subir un documento que explica como hacer eso.



Te estaré muy agradecido


----------



## NarXEh (Ene 23, 2012)

Buenas!

Ahi me acorde de ponerte el documento, gracias por hacemer acordar contestando 

Ahora voy a editar... para buscar los otros integrados que talvez te ayuden a hacer algo util

saludos! 

p.d.: el integrado es el LM1889 fijate si te sirve o se puede hacer algo, lo utilizaban los spectrum creo


----------



## nietzche (Mar 7, 2012)

buscaba algo como una computadora analogica y un enlace llevo a otro, asi que aqui usaste la glcd, jejeje, esta bueno el proyecto, a mi me gustaria hacer algo con un pic32 o algo asi, que estudias, se ve que tienes buenas bases.


----------



## chclau (Mar 7, 2012)

Realmente, te felicito. Se ve excelente


----------



## Daniel Meza (Mar 7, 2012)

Muchas gracias amigos... contestando a Nietzche, estudio actualmente Ingeniería en comunicaciónes y eléctrónica en ESIME del Poli... pero el gusto por todo este rollo de la electrónica comenzó cuando cursé Sistemas digitales en la vocacional.


----------



## nietzche (Mar 8, 2012)

A ke bien,  se podria decir ke eres de la competenvia kajaja


----------



## cox (Mar 8, 2012)

Daniel te felicito por el proyecto se lo ve muy bueno!!

lo unico que tengo para decirte es que eres un maleducado por llamar "fastidiosas" a las melodias de los 80's.. siempre hablando de los 8 bits, claro esta..

Saludos!!


----------



## Daniel Meza (Mar 8, 2012)

> A ke bien, se podria decir ke eres de la competenvia kajaja



¿UNAM? Considere ser PUMA alguna vez... solo que esta carrera me llamó más la atención, ¿que carrera estudias tu?...



> lo unico que tengo para decirte es que eres un maleducado por llamar "fastidiosas" a las melodias de los 80's.. siempre hablando de los 8 bits, claro esta..



jaja... pues lo digo por lo que algunas personas me han dicho que así les parecen... en lo personal, me encantan; considerando que soy de los 90's para acá y de pequeño no tuve alguna de esas consolas...


----------



## nietzche (Mar 8, 2012)

jajaja seee, pues estudio Ingenieria mecanica-electrica en la facultad de estudios superiores aragon, la carrera esta buena pero los maestros pateticos, casi la mayoria de todos pero en fin , esa facultad me decepciono un poco pero ahora creo me ya mejoro, la carrera ya ni existe la separaron en 3: industrial mecanica y electrica electronica, yo sey del ultima area y con pre especializacion en sistemas digitales, asi ke ok.


----------



## Daniel Meza (Mar 8, 2012)

Entiendo... coincidencia pero mi hermano estudia también allí pero la carrera de Diseño industrial. 



> la carrera esta buena pero los maestros pateticos



Comienzo a creer que en México la mayoría de las universidades son así.

En fin, creo que no hay mejor remedio que buscarle por cuenta propia... así es como he ido haciendo de conocimiento


----------



## nietzche (Mar 8, 2012)

como no se de sistemas embebidos, cual es la diferencia de diseÑar un sistema asi como el tuyo, que por ejemplo implementarlo con un pic32, o pic24  u otro buen microcontrolador ?


----------



## Daniel Meza (Mar 8, 2012)

> Excelente proyecto!



Gracias!...



> como no se de sistemas embebidos, cual es la diferencia de diseÑar un sistema asi como el tuyo, que por ejemplo implementarlo con un pic32, o pic24 u otro buen microcontrolador ?



Diría yo que la diferencia es la flexibilidad entre ambos tipos de sistemas... la mayoría de los uControladores (corrijanme si estoy equivocado) son un sistema cerrado que consiste en la CPU y sus períféricos ya interconectados de fábrica, lo que hasta cierto punto limíta las prestaciónes del sistema. Otra cosa... al tratarse de un uP este generalmente tiene mayor número de instrucciónes que un microcontrolador además de ser más poderosas en cuanto a direccionamiento y tratamiento de datos.

Respecto a usar un micro depende de la aplicación, en lo personal desistí de usar uno por varias razones:
La más importante desde mi punto de vista era la "didáctica" de armar un proyecto de estos, con un sistema basado en uP tengo más flexibilidad para futuras expansiónes del sistema (memoria, puertos, interrupciónes, etc.).

Obviamente hablando de optimización es mucho más recomendable hoy en día utilizar un solo uC y concentrarse en la programación de este, no es necesario preocuparse por algún cable que se haya desconectado de tal periférico, un CI descompuesto, etc. Hablando de dinero, es más óptimo un sistema con uControlador.

Resumiendo, un proyecto como estos es meramente didático, para aplicaciónes serias, ni pensarlo dos veces, un uControlador será la mejor opción (creo que un 95% de las veces es así).


----------



## LuisZ (Abr 30, 2012)

Hola. Exelente proyecto. Todos tus comentarios son muy acertados. Yo he trabajado algunos años con microcontroladores, no soy experto pero mis conocimientos en el tema me facultan para calificar tus comentarios. Viendo tú proyecto me gustaría diseñar un sistema de control para un robot didáctico, el cual ya he controlado con PIC y con Arduino (cosa fácil comparado con un uP). Encontre en la red un proyecto con el 8055, pero al parecer ya es un uP algo antiguo. En verdad al ver tú proyecto me he interezado sobremanera en este tema y honestamente no conozco el tema.
Tambien estudio en ESIME-UC y como han dicho, en estos temas no hay un gran apoyo por parte de los conocimientos de los profes.
Mi robot cuenta con motores PAP y servos. Esteticamente no es muy atractivo ya que yo lo hice completamente, tiene 8 grados de libertad. Tambien he realizado PCB con Protel. 
La idea actual es contar con un sistema de control con uP que tenga un teclado hexadecimal. Mi objetivo es adquirir habilidad en el manejo de comandos para el uP y por eso me gustaría almacenar los datos por ese teclado. Podrías acesorarme al respecto?
Agradezco la atención.


----------



## Daniel Meza (Abr 30, 2012)

Gracias por el interés... es cierto ese uP es ya bastante antiguo y por lo mismo será algo difícil construir algo basado en el (por una razón similar base mi proyecto en el Z80, aunque es antiguo aún es relativamente fácil conseguir periféricos para el). 
Si estas de acuerdo en basar tu robot en algún uP con gusto te puedo ayudar en lo que refiere a programación e interfaz para los motores, el teclado, algún LCD, etc.
Podemos empezar aclarando que es lo que deseas que tenga el robot y el uP a utilizar.
Saludos y nuevamente gracias por el interés.


----------



## TRILO-BYTE (Jun 3, 2013)

me gustaria saber como aprendiste a usar el Z80 siempre quise aprender a usarlo tambien n la vocacional "me lo enseñaron" pero pura de arabe.
una vez hise un seudo compilador C con instrucciones del pic 16fxx solo para ver si era posible hacer uno un propio compilador, creo que seria interesante hacer un compilador C para Z80  
uso los pic y avr sin problemas pero siempre me dio el gusano de aprender usar un CPU obsoleto 
no dispongo de grabador de eproms pero pude hacer mi gradador de Sram USB para mis juegos de NES y mi atari2600  , supongo que seria lo mismo que un grabador eeprom


----------



## Daniel Meza (Jun 3, 2013)

Pues el "chispazo" del conocimiento lo tuve en la vocacional cuando empezamos a ver el tema de los microprocesadores, me llamo mucho la atención y por mi cuenta comencé a estudiar del tema.
Creo recordar que ya existe un compilador C para el Z80. No hay comparación entre un AVR, PIC y una CPU como tal, como ya he mencionado se tiene más flexibilidad en el diseño con una CPU.
Sobre lo del programador, si ya tienes tu grabador d SRAM perfectamente te serviría para empezar a depurar pequeños programas en el sistema mínimo del Z80 que supongo armaste en la vocacional ¿no es así?


----------



## TRILO-BYTE (Jun 3, 2013)

si asi fue nunca supe programarlo debido a que hubo problemas en aquel entonces en mi escuela querian quitar al martin vera que enseñaba Z80 y termino no enseñando y mis compañeros diario mataban clase asi pus jamas aprendi aparte que no tenia dinero para comprar cosas

ahora pues me quede con 2 z80 y el puerto apenas a comienzos de este año hise mi grabador de memorias y lei tu publicacion y dije achis si el pudo por que yo no 

me podrias facilitar informacion del Z80 la verdad estoy bien perdido pero me gustaria saber mas del tema digo solo para ver que puedo hacer  como hobby actualmente si hay micros muy avanzados que hacen eso y mas como los pic32 o los freescale que son muy galletudos pero
quiero armar una microcomputadora con mis propias manos 

¿como empiezo?
nunca supe ni prender un led con el ni tube la tabla de nemonicos del z80 en internet me hace bolas con este cpu


----------



## Daniel Meza (Jun 3, 2013)

Igualmente como tal de mi profe no aprendí mucho más que lo básico, él nos proporcionó el PCB para armar el sistema mínimo del Z80, aún recuerdo que tenía una RAM de 2KB y una EPROM de 32KB y las conexiónes para los puertos y hasta allí, para las prácticas más o menos nos explicaba que hacía cada instrucción y como estaba la cosa, algo obvio ya que meterse de lleno en el Z80 es tema de más de un semestre. 
En fin ¿como empezar?, primero que nada y me atrevo a decir: interés.. mucho mucho interés y paciencia muuuuucha paciencia, armarte tu sistema mínimo con lo básico, CPU memorias y buses de puertos para comenzar a hacer pequeños programas.

Yo me empapé de información en internet y de un libro que se llama "El microprocesador Z80" de Uruñuela que me prestó un amigo cuando vió mi interés por el tema.
Dices que ya tienes tu programador y USB, que mejor, empieza a conocer la estructura y sintaxis del compilador, en lo personal uso este  TASM para el Z80. 

No olvides su respectiva biblia  para que no andes a ciegas con el tema de las intrucciónes.

Eso para comenzar... si tienes dudas con gusto por acá te puedo ayudar.


----------



## TRILO-BYTE (Jun 4, 2013)

armare un Z80 en las vacaciones normalmente no lo hago no por ineptitud si no por falta de tiempo en mi chambita una pregunta 
¿proteus simula un sistema minimo aunquesea para prender un led?
por que con un pic se  me pone lenta la compu para prender un Lcd y supuse que un pic es menos carga para el proteus que todo un sistema minimo 

y si es asi cargo el .hex a la eprom? o como le haria estoy medio verde en proteus

tambien lei que eres de la esime zacatenco no es asi?

yo estoy cursando en 8° semestre paso a 9° en la tarde en la especialidad de electronica creo que debi meterme a la unam o a esime culuacan  puras porquerias de profes desepcionante la especialidad ojala no te pase lo mismo y eso que hui de esime azcapotzalco de robotica estaba peor de chafa  creo que era ing en taqueria o hamburgueseria 4, robotica paranada!!!


----------



## Daniel Meza (Jun 4, 2013)

Proteus no simula al Z80, todos los programas que hagas los tendrás que depurar físicamente en tu sistema mínimo :/
Si también soy de ESIME Zacatenco del turno matutino, se supone pasaría a 7° semestre pero por reprobar algunas materias me quedaré en 6to , en verdad el nivel ha bajado mucho en todo el politécnico, parte los profesores y otra parte nosotros los alumnos


----------



## TRILO-BYTE (Jun 4, 2013)

no te creas yo igual soy dinosaurio reprobe en zacatenco por maestros corruptos querian varo y yo no sabia daria una lista de nombres pero son de la tarde esime azcapo estaba deplorable y aca pues algo pero no tanto.
de hecho hago proyectos para chavos que no dan una , ets , diagramas y asesoarias para ineptos que es el 75%
cuando yo estaba en la voca me decian que zacatenco estaba feo y pues cuando yo llege ene el 2008 lo vi pero ya no estaba "tan mal" 

metete a una especialidad que no sea electronica los maestros son super mamones y no enseñan nada

bueno ok armare un sistema minimo y te cuento como me fue primero empezare con un led tratare de buscar un libro por que asi aun me siento muy inepto


----------



## Daniel Meza (Jun 4, 2013)

Sírvete de estos archivos, en su momento me fueron de ayuda... ya después hay páginas más especializadas.

http://galia.fc.uaslp.mx/~cantocar/microprocesadores/PRACTICAS__Z80_PDF_S/2_EL_Z80.PDF

jaja yo tengo pensado meter electrónica, de hecho solo por esa carrera me metí en ESIME, y pues como sean los profes me da igual, tenemos la ventaja de conocer el plan de estudios y pues no queda de otra que darle por nuestra cuenta.


----------



## TRILO-BYTE (Jun 4, 2013)

mira el dios de la electronica en verdad es el maestro macias palacios jorge es muy buen maestro te deja proyectos fabulosos y enseña con tanto gusto que no dan ganas de perderte ningua clase dara electronica de potencia en enero del 2013 pero es de la tarde por el electronica de la tarde se saturo pero no dio este semestre metete de oyente con macias para que veas lo buen profe que es 

los maestros que deberas debes cuidarte son ELEAZAR no hay forma de tratarlo es muy muy mamon y debes hacerle la baraba no hay forma de pasar mas que besarle los pies da en la tarde y en la mañana , Ruiz Meza es igual pero almenos el si enseña ,Fernel nunca va pero con el si pasas, Urbano da clases de maestria en el cinvestav igual una porqueria de profe tambien reprueba a todos, ismael cosme tambien no enseña nada del semestre es algo mamonson y reprueba a un grupo entero sin piedad alguna.
con Eleazar ya reprobo a 3 grupos enteros sin piedad y pide un monton de transmisores para derecho al ETS el hace los ETS  si fuera por mi lo atropellaba 

suerte carnal echale galleta si pudiste armar algo asi puedes salir de la carrera medio vivo


----------



## Daniel Meza (Jun 4, 2013)

Gracias por las recomendaciones, si hay que tener mucho cuidado con la elección de profes.
Ya voy más de la mitad, no me quiero echar para atrás. Hasta ahorita he corrido con suerte por que los temas no se me dificultan tanto (más que nada por el gusto a la carrera), ya a ver que opino después jaja


----------



## TRILO-BYTE (Ene 7, 2014)

hola soy yo denuevo apenas en diciembre construi mi computadora con Z80 tube que releer todo lo que escribiste.
no la construi pues cuando te envie el ultimo mensaje mi papá murio.
apenas me decidi y me quedo mas o menos descargue un compilador Z80 con simulador de puertos y con debug 

pero algo no logro comprender ¿como mando llamar una subrutina?
yo pongo :
CALL  etiqueta
mas codigo

etiqueta: 
mi subrutina
RET

el simulador lo simula bien pero en mi maquina no funicona 
¿que estoy haciendo mal?
debe ser por el Stack Pointer?
esta es mi maquina en prototipo ahi no aparece la ram conectada pero ya la conecte esta en la direccion 3000H


----------



## Daniel Meza (Ene 7, 2014)

Saludos amigo y mi más sincero pésame para ti y tu familia...
Lo que pasa es que, como mencionas, antes de llamar a alguna subrutina es necesario inicializar al "apuntador de pila" (SP) con alguna dirección que esté apuntando en el espacio de RAM.
Recuerda que el SP se DECREMENTA cada vez que se almacena un byte en la RAM por lo que es recomendable declarar el espacio de la pila en las últimas direcciónes de la RAM; en tu caso dices que la RAM está situada a partir de la dirección 3000H así que te convendrá apuntar a una dirección superior a esa, por ejemplo:

LD SP,3500H

PD: Felicidades por tu prototipo


----------



## TRILO-BYTE (Ene 7, 2014)

gracias 

soy muy piedra aun para el ensamblador solo he hecho juego de luces en el z80
no se declarar bien el stack pointer te pondre un ejemplo de como lo hise
este programa ya me saco canas verdes y en simulacion me queda pero no trabaja en mi prototipo


```
;-------DECLARO LOS PUERTOS-----------
PORTA    EQU    00H
PORTB    EQU    01H
PORTC    EQU    02H
CONTROL EQU    03H
;----------------FIN------------------

    LD    SP,37FFH        ;CARGO EL STACK POINTER CON MI MEMORIA MAXIMA "2Kb"
    
    LD     A,80H            ;DECLARO LOS PUERTOS COMO SALIDAS
    OUT     (CONTROL),A        ;LLAMO AL CONTROL
    LD    A,170
    OUT     (PORTA),A
    LD    A,85
    OUT     (PORTB),A



    LD    A,1            ;CARGO EL ACUMULADOR CON 1 PARA ROTARLO
INICIO
    CALL     IZQ
    CALL     DER
    
    JP    INICIO


DER:
    LD     B,6            ;NUMERO DE VECES A ROTAR
ROTAR2:    RRCA                ;ROTA EL ACUMULADOR A A LA DERECHA
    OUT     (PORTC),A
    DJNZ     ROTAR2    
    RET

IZQ:    
    LD     B,6            ;NUMERO DE VECES A ROTAR
ROTAR1:    RLCA                ;ROTA EL ACUMULADOR A A LA IZQUIERDA
    OUT     (PORTC),A
    DJNZ     ROTAR1            ;SALTA DECREMENTANDO B CUANDO SE ACABA B TERMINA EL BUCLE
    RET
        
    END
```

¿que estare haciendo mal?


----------



## Daniel Meza (Ene 7, 2014)

Por el momento veo dos posibles causas:
1-No declaraste el inicio del programa con ORG 0000h
y 
2-Puede que en realidad si funcione el programa pero como el proceso de rotación es muy veloz no se alcanza a apreciar. Introduce algunas rutinas de retardo.

¿Usas el 8255 para los puertos?


----------



## TRILO-BYTE (Ene 7, 2014)

si uso el 82C55 a 4 Mhz 
pero uso un NE555 a una frecuencia muy baja para hacer debug 

por eso no hay problema del retardo 

el reloj real no se lo pongo aun las rutinas de retardo lo queria hacer como sub rutina pero queria usar el CALL pero no me funciona

y que es eso del ORG eso no lo entiendo no lo encuentro en la tabla de nemonicos

mi logica para hacer retardos en C es la siguiente "es un ejemplo no esta calculado"
uso char pues solo ocupan 1 byte en los micros y unsignes por que char es de 0 a 127 y -127 y con el unsigned es de 0 a 255


```
unsigned char contador=0;
unsigned char segundos=0;
unsigned char minutos=0;
void main()
{
if(contador>=200)
{
segundos++;
contador=0;
}

if (segundos>=60)
{
minutos++;
segundos=0;
}

if (minutos>=60)
{
minutos=0;
}



delay_us(50);
contador++;
}
```


lo que hago es un delay muy chico para no trabar los micros "por flojera al declarar el timer"y queria hacer igual un delay pequeño para el Z80 
con una subrutina de 50us
pero no se calcularla cuando mi reloj trabaja a 4Mhz

podrias orientarme con un libro que hable mas de las subrutinas en internet encuentro pero son cosas rebuscadas o no dicen nada
muchas gracias por responder


----------



## mcrven (Ene 7, 2014)

DVT dijo:


> ...podrias orientarme con un libro que hable mas de las subrutinas...



Programación del Microprocesador Z80 por Elizabeth A. Nichols, Joseph C. Nichols y Peter R. Rony - Editorial Marcombo

Es muy bueno. Espero te sea útil.


----------



## Daniel Meza (Ene 7, 2014)

Ese libro es muy bueno, ahora, lo del ORG no es propiamente una instrucción del Z80 si no una directiva del ensamblador la cual le indica a partir de que dirección comenzará a guardar las instrucciones subsecuentes en la memoria. 
Te recomiendo mejor usar algún timer de circuito integrado como el 8254, verás que es más sencillo hacer retardos largos y cortos con él que con bucles anidados en el CPU además de liberar tiempo de procesado.


----------



## savad (Ene 10, 2014)

```

```
Hola, Viendo este tema me recordo loa años 80 cuando lleve en ESIME-Zacatenco el Z-80.  Aun yo lo sigo utilizando, ya que es facil de programar y añadirle perifericos. Solo una nota   2MHz es muy lento, 4Mhz es mucho mejor. Yo uso para checar mis rutinas el siguiente simulador que es gratis
http://www.oshonsoft.com/z80.html
y te permite correr tus programas en casi cualquier Windows (probado en Win 98, Win 2000, WIN XP y WIN7)
y tambien en Virtual Box de oracle, el cual tiene la ventaja de preservar la fecha y hora, asi que nunca expira.
el Z80 aunque es bastante viejito, se usa mucho en controles industriales (fabricados- hasta los principios del 2002), como controles temperatura-tiempo, controles de posición angular y de presión. Me he encontrado aplicaciones hasta como PLC's ya que el programa es rápido y 4Mhz son suficientes.
Como computadora personal ... Nope comprate una portatil usada y tienes todo lo que deseas. 
Ademas me encontre varios libros pero el que mas me enseño fue:
Z80 Assembly Language Subroutines (1983)(Lance A Leventhal)(Osborne), que aunque viene en Ingles, es facil de leer ... ltraté de subir el pdf pero es de 26M y comprimido es de 16M, Asi que busquen el link en la web 
Bueno espero que les sea de utilidad, como lo es para mi.


----------



## TRILO-BYTE (Ene 11, 2014)

orales comparte todo lo que sabes de este tiliche
bueno ami me gusta el Z80 por el simple hecho de que es viejo

gracias a Daniel Meza que compartio mucha ayuda pude motivarme a construirlo

tambien uso ese simulador es muy bueno 

no se si sea bienvenido el grabador de memorias USB que cosntrui ya que muchas maquinas no tienen puerto serie ni paralelo actualmente


----------



## Daniel Meza (Ene 11, 2014)

Compañero savat, somos de la misma casa, me ha tocado que en las generaciones actuales ya no se enseña ningún uP, se van directo a los pic's y pues a mis compañeros les cuesta mucho pescarle la onda. Y respecto al reloj lo puse de 2MHz porque el Z80 que tengo no es de alta velocidad; el libro que mencionas ya me lo conseguí y vaya que es bueno. 
Con respecto a lo del amigo DVT Bienvenido será el programador, en verdad que es un alivio poder compilar y programar desde W7


----------



## TRILO-BYTE (Ene 11, 2014)

bueno yo quisiera tener los libros no los he podido conseguir los he visto en la biblioteca de la ESIME pero soy egresado nimodo de ir asta aya para leer una pequeña duda quisiera tenerlo almenos en PDF

ok el prgramador no graba EEPROM bueno si pero es muy lento grabar una EEPROM VS Sram
hay que darle retardos diferentes yo uso una SRAM con bateria es casi instantaneo el grabado

soporta formato intel HEX , BIN y lee la memoria y la garda en formato binario
cualquier sugerencia para mejorar el programa es bienvenido pronto publicare el circuito si alguien se anima a cosntruirlo 

es decir recien compilado del simulador Z80 metemos el .HEX al la memoria 

aqui una imagen de mi grabador
https://scontent-a-lax.xx.fbcdn.net/hphotos-prn2/1509741_419465374853012_1493820157_n.jpg

https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-ash3/1535691_419465471519669_849660547_n.jpg

y aca una donde trabaja un Atari 2600 

https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash3/t1/1488252_413591105440439_782391980_n.jpg


y respecto a lo que dice el colega Daniel Meza es cierto ami me toco usar el Freescale Kwistick y el Pic 18f4550 y deberas que nadie los sabia usar
y eso que se programaba en C y el kinettis Kwistick se programaba en C++!!!

unos creen que el Arduino es mejor solo por ser comercial y que es popular pero la verdad es que en realidad las nuevas generaciones ya no saben programar


----------



## Daniel Meza (Ene 11, 2014)

Sorprendente amigo, enhorabuena veo que usaste el PICkit, hace unos meses me estaba animando a diseñar un programador de EEPROM's paralelas a partir del PICKit simulando una memoria 24LCXX con un PIC I2C y recibiendo los datos en una RAM externa para después volcarlos a la EEPROM final pero por falta de tiempo dejé el proyecto de lado. Vamos yo quisiera ver el circuito, igual y cambio de opinión y armo el que usas. Saludos


----------



## TRILO-BYTE (Ene 11, 2014)

jaja si mira me anime por que tenia nadamas 1 juego en mi viejo atari y mi sistema minimo z80 queria programarlo y vi hace tiempo los inventos de este sujeto

spaceinvader.comuf.com/Atari_SRAMCART.htm

pero para mi desgracia mi computadora no tenia puerto paralelo ni serie 

asi que agarre un pic18f4550 y lo empese a programar desde 0 fue una pachanga por que no sabia como empezar me tarde 1 semana al agarrarle el chiste

no es un pickit2 es una placa generica que hise para el pic18f4550 

yo uso electronica modular
es decir hago PCB de circuitos genericos para no armar portos todo el tiempo pues me la paso inventando cosas y hacer el mismo circuito 1 y otra vez  es aburrido
asi que diceñe modulos 
modulos de memoria, modulos de dac , modulos amplificadores , etc.


la idea es usar contadores CD4040 que le van dando las direcciones a la memoria paralela
y el pic le envia de un golpe los 8 bits por 1 puerto

lo que hago es con el puerto A uso los pines ENABLE, READ ,WRITE para la memoria
y el puerto E para el reloj CD4040 CLK y Reset

el puerto B para enviar los 8 bits y el Puerto D lo estor reservando para los juegos del NES

el puerto C5 y C6 para la comunicacion USB

no tengo diagrama pero lo dibujare en este fin para aver si se animan

empezare hoy mismo la publicacion


----------



## Daniel Meza (Ene 11, 2014)

Por acá está el libro "Programming the Z80" de Rodnay Zaks


----------



## savad (Ene 11, 2014)

Bueno, les comparto el manual de la tablilla de desarroyo que todavia uso desde 1981. Es facil de hacer, y trae lo que en esa era fue muy popular para guardar tus programas ... un cassette.
Lo interesante es el Monitor (ya que trae las rutinas para programar las EPROMS) y lo que yo le añadi casi imediatamente .. Una memoria RAM de 16K alimentada con una bateria para evitar que se perdiera el programa. Tambien le puse un SIO para poder programarlo desde otra computer que tenia un amigo (Comodore 64). Ahora uso la PC y le he añadido un teclado que ademas trae un display flourecente alphanumerico de 20 x 1, que rescate de un garage sale.

Ademas ultimamente le puse un adaptador RS232-USB que cosegui por solo $2 US en un mercado sobre ruedas que se especializa en solo electronica aqui en el Area de Long Beach CA
por lo que lo conecto directamente a mi LapTop que ya no soporta Puertos serie ni paralelo, Todo es USB ahora.

Tambien les dejo el pdf de las instrucciones del Z80 que no estan documentadas, pero son útiles en algunos proyectos

Espero que les sea util como me ha sido a mi


----------



## avefenix586 (Mar 2, 2019)

Hola colegas hobbistas electrónicos de los retro-microprocesadores, en esta ocasión quiero echar a andar un sistema mínimo con un uP Z-80 , en mi alacena de antiguedades poseía varios Z80s de 2 y 4 Mhz pero hace un año que me di con la sorpresa de que existían también los Z80 de hasta 20 Mhz en versión dip 40 pines, así que me animé a construir un sistema mínimo usando el metodo de las placas modulares insertables e intercambiables , pero como es un sistema mínimo estará conformado por las siguientes placas o modulos



- La Placa Principal donde reside el Z80 con la circuitería básica , en este caso para éste modelo no se le adicionarán drivers o buffers sino que los buses serán transparentes como en muchos circuitos mínimos que he visto por allí, el encargado de suministrarle los pulsos de reloj será un cristal de 20 Mhz porque mi propósito sería tratar de hacer correr todo el conjunto a esa velocidad si fuera posible, sino habrá que bajarle las revoluciones,  en éste caso el cristal sería del tipo chip que tiene 4 pines (Vcc, GND y clkout) en la misma placa principal estarán presentes solo dos zócalos verticales para recibir dos tarjetas de memoria y un zócalo horizontal para unirse al modulo de bus para dispositivos I/O

-Una tarjetita para la memoria Rom, Eeprom, E2prom de 32k maximo
-Una tarjetita para la memoria RAM en este caso para alojar una 62C256 o compatible
-Una tarjeta bus para conectar los dispositivos I/O, en este caso admite solo 4 tarjetas o módulos
-Una tarjeta de entradas/salidas paralelas programable usando un PPI 82C55
-Una tarjeta de temporización de 3 canales usando un 82C53
-Una tarjeta de comunicaciones seriales usando un 82C51 u otro alternativo de motorola
-Una Tarjeta extra que podria ser para otro uso por verse

Por lo pronto ya tengo listos los diseños PCB de la tarjeta principal, las de memorias y del PPI con lo cual ya podria echarlo a andar con algunos ejemplos
Ahora respecto a un programa monitor he visto en una página que proveen un circuito mínimo cerrado con un programa monitor de un interprete basic , el programa en lenguaje basic  se escribe en un terminal y éste se envía al sistema mínimo y al darle RUN echa a andar el programa,  en éste caso el modulo de usart 82c51 tendría que conectarse a un módulo de esos serie ttl - USB del tipo FT232RL o similares para entablar la comunicación. via USB.



La imagen de ese sistema mínimo es aproximadamente lo que estoy construyendo con las modificaciones necesarias para permitir los dispositivos I/O , temporizadores y comunicaciones,  a medida que vaya avanzando en la construcción de las tarjetas las iré subiendo , no está de mas mencionar que éste proyecto es con fines didacticos  .


----------



## avefenix586 (Mar 4, 2019)

No entiendo porque mi tema "Sistema minimo con uP z80" me lo han anexado a este post que tiene 4 años de antiguedad , en otros casos cuando respondo un tema de hace 4 años me aplican moderacion , pero bueno prosigamos nomas con el proyecto , aqui les pongo los diseños de los modulos de memoria con lo que he empezado porque la placa principal es mas grande debido tambien a que todo lo hago con placas de una sola cara y sus respectivos puentes, los diseños como siempre los hago en PCBwizard , estos modulos de memoria o que el modulo de buses sea independiente tambien obedece a que se pueda reutilizar con otros procesadores de 8 bits diseñando una placa  principal para ese microprocesador y enchufandola al resto de modulos, aqui las imagenes de como se ven los modulos para RAM y ROM de 32K respectivamente, tambien he preparado otros dos modulos para RAM y ROM de 8 K por si se quiere utilizar solo esa capacidad de memorias, asi que seria valido construir cualquiera de esas parejas o una combinacion de Rom de 8k y Ram de 32K . las conexiones se haran a travez de espadines machos que se insertaran en su contraparte hembra que los recibiran en la placa principal . 
Bueno hasta aqui por el momento que me voy poniendo a armar los modulos de memoria


----------



## avefenix586 (Mar 5, 2019)

Siguiendo con los avanzes ya termine de preparar mis dos tarjetas modulos para ROM y RAM, notese que cerca de la regleta de agujas tiene 4 pines , esto es para poder intercambiar la seleccion entre los modulos, es decir en el mapa de memoria que modulo arrancaria en los primeros 32k y que modulo en los 32k siguientes, en el caso del z80 , 8085 despues del reset el bus de direcciones comenzara a buscar las instrucciones en la direccion 0000H y para ello el modulo ROM se colocara un jumper para que corresponda con la direcciones de 0000h a 7FFFH mientras que la RAM se le coloca el jumper en la posicion que le correspondera de 8000H a FFFFH , y como estos mismos modulos puedo usarlos para otros micros donde al resetear el bus de direcciones se situa en direcciones altas como el caso del 8088 o el 6809 pues le cambio de posicion los jumpers y estaran listos.
Asi van quedando ya mis dos modulos de memoria ensamblados , para los puentes uso cablecillo desnudo de cable estañado solido calibre 24 sino me equvoco y como de costumbre despues de soldar todo y lavarlos con alcohol isopropilico o tinner les paso una capa de laca transparente en aerosol para que no se corrompa el cobre por el ambiente humedo. En el siguiente avanze estare preparando la tarjeta modulo de Buses I/O y el modulo PPI .


----------



## avefenix586 (Mar 6, 2019)

Una de las primeras cosas que me gustaria recrear con este sistema minimo de z80 es aquellas tarjetas entrenadores de antaño donde veias como medio de ingreso del programa un conjunto de 6 u 8 displays de 7 segmentis y un teclado matricial de 20 teclas  para ingresar los datos en hexadecimal previamente habiendolos compilado ya sea en la PC o a mano , algunos podrian decirme que eso es como un mazoquista microelectronico , me intersaria tambien el circuito que menciona Trilo byte de la RAM con bateria, yo arme una basada en un diagrama que encontre y en mi programador rustico la programaba tal como un eeprom y se grababa la data ok , pero luego la extraia del zocalo del programador y la conectaba en la placa principal entonces al hacerla arrancar me daba con la sorpresa que los datos se alteraban y el programa no funcionaba asi que deje de usarlo y quedarme con las memorias EEprom de la serie 28Cxx para el monitor. para este circuito de sistema minimo con Z-80 me gustaria implementarle esa RAM con bateria para almacenar los datos o programas que uno le cargue y permanezcan alli apagando el sistema.


----------



## Dr. Zoidberg (Mar 6, 2019)

avefenix586 dijo:


> Una de las primeras cosas que me gustaria recrear con este sistema minimo de z80 es aquellas tarjetas entrenadores de antaño donde veias como medio de ingreso del programa un conjunto de 6 u 8 displays de 7 segmentis y un teclado matricial de 20 teclas para ingresar los datos en hexadecimal previamente habiendolos compilado ya sea en la PC o a mano , algunos podrian decirme que eso es como un mazoquista microelectronico


Masoquismo o nó, así trabajaba en la universidad cuando cursaba Sistemas Digitales II, solo que no era con un Z80 sino con un 8080 o con un *SC/MP*... según la época del año...


----------



## avefenix586 (Mar 6, 2019)

Yo aterrize en el fascinante mundo de los microprocesadores conociendo el 8085 , construi mi primer sistema microprocesador rustico en unos protoboard  con la circuiteria minima alrededor de un microprocesador 8085, una ram, unas compuertas, driver, dipswitch y un timer 555 como monoestable para hacerlo trabajar en baja velocidad congelandolo por su entrada wait para que me espere a que ingrese instruccion por instruccion manualmente, en cuanto el micro pedia la primera instruccion yo le mandaba una secuencia de instrucciones que eran solo cargar el acumulador con un dato inmediato y luego mover ese dato a una posicion de memoria especificada , repetia el procedimiento asi sucesivamente con los dipswitch y el monoestable hasta llenar esa zona de la ram con los datos, una vez que ya estaba completo todos los datos que vendrian a ser el programa final cargado en esa zona de memoria le daba la ultima instruccion JUMP a la direccion de ese bloque y le soltaba el wait para que el uP corriera a toda marcha, asi que esos primeros programas que cargaba a manera de practicas eran  mayormente secuenciales o contadores con leds, de esa forma prescindia de la memoria eeprom porque tampoco tenia un programador a la mano, pero luego venia el terror al tener que apagar el circuito y que se perdiera el programa cargado jeje, con esas practicas tambien me daba cuenta de como los primeros pioneros programadores tuvieron que padecer con la programacion en binario y leyendo o interpretando los resultados en puras luces , realmente eran unos capos de su epoca


----------



## pandacba (Mar 6, 2019)

Había placas para la mayoría de los micros conocidos el 6800 y todos sus derivados de Motorola, el6502 de Rockwel y todos trabajaban bajo la misma  forma placa gigante teclado mecánico el cosabido display, un compañero de la Facu, empezó a hacer de esas placas para varios micros de la épcoa


----------



## avefenix586 (Mar 6, 2019)

Para construir esas tarjetas entrenadoras que de por si se ven circuiterias ya intrincadas nesesariamente habrian que diseñarlas en placas doblecara para hacerlas mas compactas, en nuestro caso nuestros equivalentes practicos seran en monocara con puentes y estructuras  apilables como sandwichs  Yo compre hace tiempo un libro sobre Microprocesadores del autor A. Usategui que explicaba el funcionamiento de algunas de esas placas entrenadoras basadas en el microprocesador 8085 de forma didactica con ejemplos y en cierta forma les veo cierta belleza a esas placas que alguna vez quise tener alguna que venia en su maletin de james bond  jeje, no recuerdo si fue en este libro o en de Electronica Digital del mismo autor que vi un proyecto de construccion de un microprocesador didactico de 4 bits con muchos circuitos TTL ,contadores, flip flops, compuertas, dos eprom ,toda la estructura conformando sus tres bloques basicos con su ALU , su unidad de direccionamiento/captura  y  de ejecucion con repertorio basico de instrucciones, esta toda la informacion exepto que uno mismo tendria que diseñar sus circuitos impresos propios o sino armarlo en sus 4 protoboards , creo que me dare el trabajo de escanearlo y publicarlo por si alguien le interesa armarlo , probarlo o quizas mejorarlo .


----------



## avefenix586 (Mar 7, 2019)

Continuando con el Sistema Minimo del z80 aqui les muestro y subo tambien el archivo del Slot o modulo de expansion que soportara los demas modulos como el PPI, USART, PTC , ADC , control de interrupciones, etc etc que uno combinaria de acuerdo a la nesesidad, por ejemplo si nesesite mas PPI puedo colocar dos de ellos , o dos ADC , y en los pines de seleccion jumpeo otra direccion disponible en un comienzo lo habia hecho con solo 4 slots pero le agregue uno mas porque el decoder me permite una linea mas de seleccion de dispositivo entre las pistas y con lo que para este sistema minimo quedariamos en 5 slot maximo.
El mapa de dispositivos para el slot esta distribuido en las direcciones.
Este modulo esta gobernado por un decodificador 74LS138  a sus entradas le enviamos las señales A7, A6, A5, A4 y /MREQ y con ello tendremos el mapa de direcciones siguiente 

CS0  no disponible
CS1  no disponible
CS2 = 0010 xA2A1A0B  = 2XH
CS3 = 0011 xA2A1A0B  = 3XH
CS4 = 0100 xA2A1A0B  = 4XH
CS5 = 0101 xA2A1A0B  = 5XH
CS6 = 0110 xA2A1A0B  = 6XH
CS7  no disponible

Los circulos rojos indican la posicion de las tarjetas que se insertan , algunas tarjetas se conectaran en un sentido y otras en otro sentido asi que en algun momento se veran dandose la espalda , en cada modulo tambien va ese circulo rojo indicandonos que debe coincidir con la placa , es por cuestion de comodidad y del sentido en que van las señales presentes sobre todo los buses de datos .

Bueno este es el avanze de hoy, y como para hacer las pruebas de funcionamiento nesesitamos el modulo PPI para conectar leds o display que nos indique un "Hola mundo soy el Z80 y vine a patear microcontroladores"   asi que ese modulo sera el siguiente en presentarse .


----------



## avefenix586 (Mar 8, 2019)

Esta seria la tarjeta de interface paralela para comunicarnos con el mundo exterior que ya esta diseñada y lista para ir al horno, la fabricare junto con el modulo de expansion o slots de un solo golpe,  Esta tarjetita nos entrega 3 puertos de 8 bits configurables como entrada o salidas y una modalidad de comunicacion con handshak .  los tres puertos de salida tambien estarian disponibles a travez de 3 grupos de espadines hembras y ademas cada uno con su alimentacion VCC y GND, el puerto A y B estan ordenados segun vemos en la datasheet en cambio el puerto C esta intercambiado el orden de sus nibbles . en el modulo hay dos pines del PPI 82c55 que tendremos que cablearlos por el lado de las soldadura, estas dos señales son las de direcciones A0 y A1 para lo cual usaremos dos cablecillos aislados , el resto son todos puentes directos tal como en los modulos de memoria ,junto a latira de espadines veremos que hay 10 terminales agrupados en 5x2 , colocando un jumper en la posicion que uno desee le asignara una direccion al modulo PPI, lo mismo tendran los demas modulos .tambien tiene su led de testigo de que la tarjetita o modulo esta energizada, el siguiente modulo a diseñar seria un Modulo PTC  con el 82C53 u 82c54.
Notese que en el modulo PPI hay varias lineas sin usar, algunas de ellas son señales que provienen del micro y otras lineas mas que solo estan presentes en el modulo de expansion es para el intercambio de señales nesesarias entre los modulos como por ejemplo que la salida de un PTC podria ser usada como generador de reloj para el USART , o que el USART envie una señal al modulo de interrupciones, son 5 o 6 lineas aun por definir.


----------



## avefenix586 (Mar 13, 2019)

En esta tabla de la imagen esta la lista de las señales presentes en los terminales y en su orden 

*1.- Señales del Bus de Memoria*
Este Bus es que se encuentra en la placa principal y es el quenos conectara a los dispositivos de Memoria RAM y ROM , el bus nos provee de la alimentacion VCC 5v y GND, las señales de control  /WR, /RD y la seleccion /CS0 y /CS1,  las señales RESET y M! estan de paso nomas, no se utilizan por las memorias , esas señales van  rumbo al conector de SLOT para estar presentes en el modulo de SLOT que son nesesarios, asi que esos pines en las tarjetas de RAM y ROM no se conectan.

*2.- Señales de Conexion al SLOT*
Estas señales son las que se nesesitan estar presentes desde la placa principal hacia la placa de SLOTS , para conectarse los respectivos modulos de Entrada y Salidas. en las señales presentes se puede ver que la señal /IORQ esta repetida pero lo que ocurre es que utilizamos un puente para conectar la señal /IORQ desde el pin 29 al pin 13 donde llegara y truncara a una entrada del decodificador 74LS138 nesesaria para generar el mapa de seleccion de dispositivos I/O, la razon de que la señal /IORQ continua por el resto del SLOT en el pin 29 es que se requiere junto con la señal /M1 para generar entre las dos la señal de /INTA mediante una compuerta OR eso cuando tengamos que usar un 82C59 controlador programable de interrupciones.

*3.- Señales del SLOT para los Modulos I/O*
Las señales presentes en este bus son las minimas nesesarias para poder conectar los diferentes modulos de entrada y salida como el PPI, USART, PTC, PIC, ADC y demas modulos que se puedan diseñar utilizando estas señales , tenemos la alimentacion de VCC  5V y GND, las señales de control principales que serian /RD, /WR, RESET , /M1, /WAIT, /INT, /NMI, /IORQ, CLK , cinco señales de seleccion de modulo /CS2 ... /CS6, tres lineas de direccion bajas A2, A1 y A0, el bus de datos D0...D7, y tenemos 4 lineas de señales NC aun no definidas pero que estan orientadas al paso de señales entre modulos I/O  por ejemplo si un dispositivo requiera enviarle una señal de temporizacion a otro modulo o si requiera enviarle un reloj secundario de baja velocidad o quizas una peticion a un Controlador de Interrupciones , etc.

Notese que los Conectores Hembras tanto en la placa principal como en los SLOTS los he estandarizado por asi decirlo a 31 terminales que es un numero de terminales que ya vengo usando desde un comienzo en mis circuitos anteriores y tambien la distribucion de señales. Para este sistema minimo no requerimos acceso a memoria DMA, en los modulos I/O tambien se podria montar algun microcontrolador por si se requiere repartir tareas. A manera de prueba empezare haciendo correr el sistema a velocidad baja de 4 mhz, de alli la subire a 10 mhz y por ultimo a 20 mhz que soporta esta version de uP z80 que dispongo, para ellos utilizare  un chip de cristal integrado de 4 pines con lo que se simplificaria el circuito de reloj pero es posible que en algunas partes no esta disponible asi que tambien le preparare un modulo de reloj enchufable del que usa dos inversores , filtros y cristal de 4 mhz,  al llevar el sistema a trabajar a la velocidad de 20 mhz que es el tope y siendo varios de los dispositivos que usaremos aqui  antiguos parece que no podran correr correctamente a la par asi que hay un pequeño slot de 6 terminales que dispuse en la placa principal donde se le acondicionara un modulo pequeño con flip flops que genere los estados de espera nesesarios entre 2 a 4 estados . a 20 Mhz cada pulso de reloj duraria como 50 nseg pero el acceso a la memoria le toma como 3 pulsos de reloj osea casi 150 nseg y la ram  62256-15 es de 150 nseg de acceso osea que estan muy ajustados asi que pueda que funcionen bien o quizas se requiera agregarle de todas maneras un estado o dos de espera para que se estabilizen, de todas maneras ganariamos  rendimiento porque internamente el z80 estaria ejecutando sus instrucciones a 20 mhz y espero que asi sea porque como lo fabrican los chinos capaz no llegue a esa velocidad especificada y haber si aparece un z80 que corra a 40 mhz jeje.


----------



## avefenix586 (Mar 14, 2019)

*CORRECCIONES*

Colegas Hobbistas de los retromicroprocesadores tengo que advertios que en el circuito de SLOT que postee antes se me paso una pista es decir por error omiti una linea que correspondia al camino de la señal /M1 asi que posteo el circuito corregido y esto tambien afecta al modulo PPI 82C55 donde tambien se tenia que corregir agregandole el nuevo cambio, es una lastima que no se pueda editar mis post anteriores para sustituirlos pero bueno los coloco aqui ya CORREGIDOS y terminados en Circuito Impreso. Como veran en la tarjeta de SLOTs le he colocado espadines machos para conectarse con la tarjeta principal, en el modulo PPI veran como quedaron los dos cablecillos puentes , en otros circuitos o modulos pueda que tambien recurra a estos puentes cuando ya no me lo permita las pistas jeje.












*MODULO PRINCIPAL Z80*

Aqui ya tengo tambien listo el diseño final de la placa principal para alojar al uP  Z-80 con su circuito impreso listo , en ultimo momento le agregue un buffer para el bus de datos solamente, el zocalo de 4x4 es donde se alojara el chip de reloj de 4 pines de cuerpo metalico, para el caso de que no tengan ese chip o no lo encuentren en su comercio le diseñare un modulo que se pueda enchufar en ese zocalo con el circuito de reloj habitual de los dos inversores , filtros y cristal de 2 pines, cerca a la posicion del buffer 74LS245 practicamente en su cabecera hay un conector de 6 pines donde tambien le agregare su modulo de estados /Wait, la razon de que esta funcion sea separada es porque es opcional, es decir si trabajan todo el sistema con señales de reloj CLK del orden de 2 a 4 mhz no seria nesesario agregarle estados de espera, en cambio para inyectarle un CLK de 10 a 20 Mhz si creo que vamos a nesesitar insertarle estados de espera para sincronizar con los chips lentos, al comienzo cuando quieres insertar las tarjetas entre si los espadines macho y hembras se resisten un poco ademas por ser 31 pines a conectar casi en simultaneo , por eso que primero le inserto un pin de un diodo en los terminales hembras para abrirlos un poco y luego ya pueda sentarse bien todo el modulo y mientras se lo inserta hay que balancearlo un poco de lado a lado para no forcejear hasta que entre bien, y tambien alli tenemos una bornera por donde le ingresaremos los 5 voltios / 2 amp minimo regulados de alguna fuente que tengamos , no se equivoquen en la polaridad sino adios chips jeje, bueno le colocamos su cable rojo-negro mejor para no equivocarse guiandonos por la polaridad del filtro de 1000 uF., Todavia tengo los modulos sin los integrados puestos porque tengo que verificar primero que no haya cruces entre las lineas o si hay soldaduras puenteando terminales que se me hayan pasado.


----------



## avefenix586 (Mar 14, 2019)

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.


----------



## TRILO-BYTE (Mar 15, 2019)

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.


----------



## Daniel Meza (Mar 16, 2019)

Hola hola, vaya, me da gusto saber que alguien secunda el tema del ordenador casero con Z80 . 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


----------



## TRILO-BYTE (Mar 16, 2019)

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 (Mar 16, 2019)

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.


----------



## avefenix586 (Mar 22, 2019)

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  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 .


----------



## TRILO-BYTE (Mar 23, 2019)

Una obra de arte de la retrocomputacion felicidades.


----------



## avefenix586 (Mar 29, 2019)

Ni tan obra de arte porque le falta un mejor acabado  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.


----------



## avefenix586 (Mar 29, 2019)

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








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


----------



## avefenix586 (Abr 27, 2019)

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


----------



## avefenix586 (Sep 10, 2020)

A pasado mas de un año de que este proyecto a quedado casi inconcluso y con todo este asunto de la pandemia como que merma tambien en el estado de animo pero hay que procurar ser positivos y que podamos superar esta terrible pandemia, espero que los colegas del foro y sus familias gozen de buena salud , sigan procurando cumplir con las medidas sanitarias en lo posible y si aun asi se contagian espero no pasen ninguno a situacion de gravedad.

Bueno pasando a nuestro temas electronicos parece que aun hay varios nostalgicos por las computadoras retro en este caso por los microcontroladores retro que ya seria como un hobbie tambien , hay aun muchos videos recientes de youtube de hace un año o dos sobre el Z80 pero mas acondicionado a funcionar hombro a hombro con microcontroladores de apoyo como los AVR o arduinos  para apoyar su programacion y depuracion, en mi caso como procuro que sea algo no tan complicado de elaborar como muchos enjambres de cableados y por eso opto por hacerlo mediante modulos de circuitos impresos separados como la placa principal , memoria ram, rom, puertos I/O y demas circuitos  ADC,, Temporizadores que se puedan ir agregando paulatinamente y que se puedan ir enchufando a un bus comun y ayudaria tambien en el aprendizaje.

he visto por alli algunos proyectos como de incluir un interprete basic incorporado en la memoria eeprom, se conecta a un puerto serie en este caso a travez de modulos USB-COM a la PC y mediante el terminal de windows le escriben el codigo basic linea por linea y se lo envian para interpretarlo , otros proyectos mas elaborados ya llegan a adicionarles manejo de monitor VGA , su teclado y tarjeta compact flash para almacenamiento de archivos en fat32 , hace unos dias que volvi a retomar el Z80 simulator IDE con el que tambien andaba teniendo problemas pero al final pude echarlo a andar , este programa te genera un archivo en assembler ASM y tambien uno HEX-intel que es el que finalmente se cargara en la memoria RAM para ser ejecutada, entonces viendo ese archivo HEX se me vino una idea de algo que ya habia hecho tambien antes con un microprocesador 8085, usando el Turbo pascal  para ese entonces le programe un compilador rustico de assembler y de paso un cargador a travez del puerto paralelo de la PC , creaba mi archivo fuente en la PC  y tenia un menu para darle a compilar y otras opciones mas y que ese archivo resultante en hexadecimal enviarselo a un circuito basico que adapte de uno presentado por una revista de CEkit sobre un curso de microprocesadores , su circuito lo conformaba principalmente una pareja de 8085 con un 8155  que tenia un teclado y su display de 2 digitos, el ingreso de datos era por apoyo de hardware sin monitor alguno y se tenia que ingresar la direccion y el dato , en esa secuencia correlativa  siendo muy tedioso , ese circuito lo adapte al puerto paralelo y se simplifico entonces el funcionamiento, creo que aun tengo por alli una tarjeta de aquel circuito, si lo encuentro le tomare una foto jeje.

Entonces recordando ese circuito anterior que habia hecho antes y viendo como va el funcionamiento del arduino se me ocurrio algo y en vez de tener un firmware monitor interprete en la misma placa , lo haria tal como funcionan en los arduinos  le diseñaria simplemente un bootloader , esta idea del Bootloader para Z80 no es tan nueva o no se me a ocurrido solo a mi ,  googleando para sorpresa mia un estudiante tenia interes en construir algo asi como su proyecto para presentarlo y habia hecho esa consulta hace 7 años pero no le dieron muchas respuestas de como comenzar concretamente aquello.

Bueno en este caso lo que haria seria diseñar un programa pequeño , un firmware de bootloader que maneje la comunicacion serie con la PC claro a travez de USB emulado como COM , este programa se encargaria de recibir ya un archivo listo en formato HEX o BIN que un programa como el Z80  simulator IDE generaria , asi ya puede uno programar en Basic o en asembler o en cualquier otro lenguaje que produzca un archivo hexadecimal y mediante otra aplicacion similar al terminal de windows enviarle ese archivo para que la placa lo reciba y acomode en su memoria RAM y despues de recibirla comienze a ejecutarla tal como lo haria un Arduino.

Bueno en estos dias le andare hechando manos a la obra y para el manejo de las comunicacion serie utilizare un chip 68B50 al que tendre que revisar su datasheet, podria ser otro chip serie como el 8051 o el Z80 SIO , pero como tengo a la mano el 68B50  comenzare con este , el firmware del bootloader no a de ser muy extenso que creo que hasta seria suficiente con una 28C16 pero usare la que tengo a mano que es una 28C64, ahora uno podria pensar que al apagar el circuito la memoria RAM se borraria todo y tendria que volverse a cargar el archivo HEX desde la PC, y esta en lo cierto pero para ese caso se me ocurre otra idea para resolverlo mas adelante.

Alguien se anima en diseñar un Bootloader para Z80?


----------



## Scooter (Sep 10, 2020)

A penas usé el z80 en su día. Si que use el 8085 y sobre todo el 6502

No me llama. Casi de querer hacer un retrotrasto lo haría con 6502


----------



## Dr. Zoidberg (Sep 10, 2020)

Scooter dijo:


> Casi de querer hacer un retrotrasto lo haría con 6502


El Z80 era un micro con una estructura bastante mas sofisticada que el 8080 y mas parecida a los microcontroladores actuales en cuanto a registros y demas cosas. Yo hice mi tesis de graduación sobre una computadora con el Z80...y lo programé por ultima vez en 1989, así que ya poco es lo que recuerdo...


----------



## avefenix586 (Sep 11, 2020)

Bueno yo tambien en su momento utilize para mi estudio de los microprocesadores un micro 8085 como inicio y luego me aventure por el z80 y el 8088, les prepare unos ensambladores bien rusticos en turbo pascal jeje, aunque conocia de los otros micros populares de motorola y mostek no llegue a manipularlos como son el 6502 y el 6809 que dicen es muy potente pero ademas me quede con las ganas tambien de hechar a andar un complicado 68000, recientemente pude conseguirme su version de 8 bits osea el 68008 que esta en la lista de espera tambien, muchos dirian pero para que ya le andan con esos microprocesadores antiguos si ya son historia cuando ya tenemos los PICS, AVR y DSP , ARM dobles nucleos, raspberryes  y demas chips maravillosos, pero no sabria como explicarlo es como una especie de adrenalina que te da cuando agarras uno de esos cacharros antiguos , le diseñas su circuito, desarrollas programitas, lo ves funcionando asi solo este encendiendo unos leds y como el profesor frankestein dirias "esta vivo!!", y pues no es la misma sensacion que con un arduino o un Pic donde todo ya esta aglutinado en su interior, con un circuito hecho con microprocesador es como si vieras a esa entidad electronica casi en todo su interior expuesto parte por parte jeje , No se si han visto la computadora que llevaba abordo el Apolo XI , que esta conformada por un panel de varias teclas , luces indicadoras y varias lineas de displays de 7 segmentos , increible para la epoca que ese equipo era de lo mas sofisticado para el soporte de vuelo de la nave para el viaje a la Luna, ese artificio tiene su belleza que da ganas de replicarla como ya lo han hecho otros por alli hasta con simulacion y todo .  

Bueno prosiguiendo con el proyecto ya he podido reunir algunas piezas nesesarias para implementar el circuito de comunicacion serial como el de la imagen , claro no llevara el max232 sino un modulo de esos comerciales USB a ttl
que se conectara al 68B50 , buscando entre mis cosas encontre justo ese cristal nesesario de 7.3228 MHz  me faltaria conseguir ese 74HCT04, tengo el comun 74LS04 pero creo que no serviria para generar la oscilacion a esa frecuencia a menos que lo pruebe, segun la configuracion del 68B50 tendria que configurarse para que esa señal de reloj pase por sus divisores internos de /64 que es el mas alto para que nos de una velocidad de trasmision de 115,200 baudios, osea la mas alta velocidad de trasmision serial con lo cual enviar 32KB no deberia demorar tanto. para este caso el circuito lo acoplare desde un protoboard antes de diseñarle su modulo, ademas en su respectivo modulo estara incluido el circuito de reloj propio independiente del reloj de la tarjeta principal. 

En el caso del Z80 el bootloader ira al comienzo a partir de la direccion 0000H a la 7FFFH , ocupara menos de 2 K en si , los 32K de RAM estan mapeados a partir de la direccion 8000H -FFFFH , estaba evaluando dos formas de recibir el archivo HEX desde la PC.

1).- Recibir toda la data en bruto y almacenarla temporalmente en una area reservada de la memoria por decir a partir de la  C000H y despues de culminar la recepcion pasar a procesarla , hacer una repasada que la procesaria y los datos extraidos se cargarian como corresponde a partir de la direccion 8000H, pero esto ocuparia memoria dejando solo la mitad disponible 

2).- Ir recibiendo la data enviada y a medida que esta va llegando ir procesandola , identificando la cantidad de datos , checksum, direccion,  secuencia de datos obtenidos para ir almacenandolas directamente  a partir de la direccion 8000H y utilizar una pequeñisima porcion en la parte alta de la RAM , unos 256 bytes reservados para operaciones temporales y luego se libera.

Una vez cargado el programa se enviaria un "OK" de conformidad al terminal de que todo fue recibido correctamente y se procede a darle el control al programa y empieza a ejecutarlo, como es un bootloader hecho para recibir un archivo HEX entonces seria casi indiferente que programa  y lenguaje se utilize para generar el archivo HEX final. Con el Z80 simulator IDE se puede programar en un Basic limitado provisto a parcharse con codigo asembler a suplirlo, pero deben haber por alli disponibles otros Basic mas completos o lenguaje C para el Z80. 
Una vez quede terminado y probado el bootloader para Z80 podria emigrarlo a los codigos de los otros microprocesadores tambien como el 6502 , 6809 y sobre todo para el condenado 68008 .


----------



## Scooter (Sep 12, 2020)

Yo hice uno para un 8052.
Recibía una linea en .hex la procesaba y la flasheaba. Comp el formato .hex ya lleva checksum pues no inventé nada nuevo.
Claro que el flasheo era una rutina ya incluida en la rom del chip, en este caso sería simplemente escribir en la RAM.

EL chip ya llevaba bootloader, esto era para modificar aplicaciones desde otra aplicación.

Lo que si que podrías implementar es lo siguiente; siempre que se escribe se escribe en los 64kB de RAM pero al leer la parte baja se lee la ROM.
Si se resetea por hardware se produce esto pero si se resetea por software entonces lo que pasa es que se mapea toda la RAM.

Parecido lo implementé en el 8052. Si se reseteaba pulsando reset se paraba la aplicación de control y se entraba en una linea de comandos. Si se reseteaba por quitar y poner la alimentación se seguía con la aplicación. Así el "automata" seguía haciendo de automata para siempre hasta que alguien lo paraba manualmente pulsando reset.


----------



## Dr. Zoidberg (Sep 12, 2020)

avefenix586 dijo:


> Alguien se anima en diseñar un Bootloader para Z80?


Hablando de diseñar un bootloader, tal vez puedas usar el código del Optiboot como punto de partida: Optiboot/optiboot


----------



## Scooter (Sep 12, 2020)

Lo primero que haría es añadirle una uart usart o como se llame.
No recuerdo si era z80 sio o algo así 
Hacer por bit Bang la lectura serie no lo veo muy lógico.


----------



## Dr. Zoidberg (Sep 12, 2020)

Scooter dijo:


> Hacer por bit Bang la lectura serie no lo veo muy lógico.


Si es solo para cargar hasta 32K de código podría ser una alternativa viable, pero para usar bit bang lo mismo hay que agregar algo de hardware, tipo un 8255 o al menos un latch, por que el Z80 no tiene ningun GPIO...


----------



## Scooter (Sep 12, 2020)

El 8085 tenía dos lineas serie que no recuerdo como se usaban.


----------



## Hellmut1956 (Sep 12, 2020)

Yo me confronté alrededor del año 1980 con un sistema basado en el MC6809. Lo que me gustó del 6809 era que tenía una memoria addressable continua de 64 kbyte. Así todo ese mecanismo de la bancas de los z80 y similares no me gustó. Lo digo como aficionado a los 6809.
El sistema operacional que usaba era el OS9 y era capaz de administrar hasta 2 mega bytes. Con unas memorias estáticas en esos tiempos super rápidas. implementaba una MMU, memory management unit. eso en combinación con su capacidad de registrar qué módulos de software había en su memoria addressable se armaba algo llamado "mdir, module directory" si no mal recuerdo el significado de las siglas. Las periferias en el procesador eran "memory mapped", osea tenían cada una su dirección. 
Un proyecto que realicé fue el programar una placa gráfica usando el entonces famoso NEC 7220. Claro, todo el código era en assembler pero ese era casi una lengua de programación. Sumamente sencillo aprender a dominarlo. Recuerdo lo simple que fue implementar una rutina de multiplicación con dígitos de 16 bits. Los tales "carry bits" son el secreto de como hacerlo.
Claro. Mis floppy disc eran de 8", tenía y aún tengo 2 de estos drives.recuerdo que la primera memoria externa basaba en una banda de un grabador de oficina. Que impresionante era el ver como el procesador controla los movimientos de la banda.


----------



## avefenix586 (Sep 13, 2020)

Scooter lo que propone no esta mal para implementar como una siguiente version, creo entender que seria algo como crear dos paginas de 64K donde residen independientemente en una la ROM y en otra la RAM sin cruzarse , me hago la idea de que tendria que apoyarse en una extencion del acceso al mapa de memoria con una señal extra mas de bus  de direcciones que seria como un A16 que al reseteo por hard le da  el funcionamiento a la pagina de la ROM y esta despues de recibir los datos via serial accederia a la segunda pagina donde reside enteramente la RAM y como dice al terminar la recepcion de los datos esa señal A16 commutaria para intercambiar el orden de las paginas y el programa a ejecutar arrancaria en la direccion 0000H ya desde la RAM, le andaba dandole vueltas en mi cabeza como hacer la commutacion de paginas de forma segura, un metodo asi de tener toda la RAM disponible es casi equivalente a como la tecnica invasiva de colgar a todos los buses de datos, direcciones, control las amplias señales digitales de un arduino mega mientras mantiene al microprocesador en estado de tri-estado , luego ya con el sketch envian toda la data mismo DMA a la RAM y luego lo liberan para que arranque .

Hace dos noches que llevo trabajando en el Bootloader , utilize el Z80 simulator IDE para prepararlo, este me genero casi 2 Kbytes al compilar en hexadecimal y pensaba que porque tanto asi que con el codigo en ASM le tuve que andar reduciendo el codigo inflado haciendolo bajar hasta 1 Kilobyte y eso que aun se puede optimizar para reducirle un 20% mas, bueno entonces al ser de esa capacidad tan pequeña respecto a los 64K del mapa total se podria hasta poder considerarlo como tener 1K de ROM + 63K de RAM pero para hacer una distribucion asi requeririamos ya tambien incluir una gal22v10 , con muchos cambios mas de rediseño de hardware , asi que por este momento por cuestion de simplicidad de circuiteria seguiria manejandolo como dos bancos de 32K  que ya esta distribuido asi en los modulos preparados, el Bootloader + RAM , y en el codigo ASM en la cabecera hay que agregarle el ORG 8000H para que corresponda con el banco de RAM.

Dr. Zoidberg efectivamente me estoy inspirando en el funcionamiento del bootloader del arduino , asi que casi se comportara de forma similar ,despues de energizar el circuito el bootloader le hara al Z80 estar a la espera de la llegada de datos via puerto serial por un tiempo , los datos van a llegar por el usart  68B50 generando interrupciones , pasado este tiempo pasaria a ejecutar el programa que tenga cargado en la RAM , pero como no hay ningun programa cargado tendria que quedarse en un bucle de espera , ahora para completar la parte del funcionamiento del Arduino de ejecutar un programa cargado en su memoria flash , este seria suplido no por una RAM con bateria sino tal como lo hace un Propeller de Parallax con una memoria I2C 24C256,
en un modulo preparare un 24C256 + RTC  DS1307 , en la memoria I2C se respaldara el contenido de la RAM de tal manera que una vez energizado el circuito y al no recibirse por unos segundos nada desde la PC el bootloader haria que el contenido de la 24C256 se vuelque completa hacia la RAM y comienza su ejecucion.

El Basic del Z80 simulator IDE es muy basico , le faltan mas instrucciones y tipos de variables , si yo manejara un Visual Basic me daria a la tarea tambien de crearle una plataforma IDE con un Basic , C , Pascal o quizas un nuevo lenguaje derivado del Sketch de arduino  jeje que tenga su editor , compilador y cargador amigables , es mas hasta lo haria compatible con varios microprocesadores , asi con solo cambiar en la cabecera el microprocesador con una directiva que especifique si es para un 8085, 6502, 6809, Z80, 68008 nos daria el HEX respectivo para cargarse, despues me imagino que a las tarjetas microprocesadoras se le puede conectar toda esa gama de sensores que se conectan a los arduinos para practicas  y poco a poco prepararles sus propias librerias para ir adjuntadolas


----------



## Scooter (Sep 13, 2020)

Normalmente es mejor no hacer páginas completas de 64kB, porque no puedes pasar de una a otra sin que crashee el sistema.
Lo que se suele hacer es una ventana dejando un lado con el código, conmutas unu banco de 16kB o de 32kB y entonces saltas al nuevo banco.
Si no eres muy exigente un esquema podría ser:
0-16kB bootloader + BIOS en rom siempre. 16-48kB ram de usuario para programas 48-64kB mil bancos conmutables para guardar datos.
Eso te permitiría aplicaciones de hasta 32kB que son bastantes y tener mogollón de datos manejables facimnete, la única pega es que si son bloques de mas de 16kB los tienes que partir.

Pero llegados a ese punto usa un microprocesador que direccione mas memoria, hay z80's tuneados con 20 bits de direccionamiento, aunque necesitarás un ensamblador especial simplificas el paginado.

Si miras en el canal de youtube de "The 8 bit guy "verás que está haciendo una cosa así.


----------



## Hellmut1956 (Sep 14, 2020)

Había un ordenador de Olivetti. Podía ocurrir que escribes un texto y de un momento a otro podrás mirar y escanear todo el texto, pero no tenías la posibilidad de guardar el archivo. No quedaba otra que resetear el sistema y volver a escribir el texto y asegurar copia al floppy antes de alcanzar el límite responsable para el problema!


----------



## avefenix586 (Sep 16, 2020)

Vaya al poner en el buscador del foro el tema de Z80 me aparecio ese post, seria alguna tarea que le habrian dejado en el instituto? osea todavia se incluira el Z80 en la enseñanza actual antes de pasar a los PICS o Arduino?

*bryan258*
_May 24, 2020
alguien me puede ayudar con un programa pequeño para multiplicar 2 números reales
en el simulador z80 ide como puedo realizarlo????_

Con el Z80 simulator de oshonsoft escribi esa simple multiplicacion de dos numeros reales y vaya que el programa resultante te ocupa como 500 bytes al ser en ese formato de punto flotante de 4 bytes , escribirla directamente en assembler si que es un dolor de cabeza , pero seguro al revisarla bien se pueda comprimir a 300 bytes

Dim a As Single
Dim b As Single
Dim c As Single
a = 12.56
b = 23.32
c = a * b

no habria un coprocesador matematico para ese entonces que le auxiliara al Z80 y demas micros de 8 bits? ,de coprocesadores matematicos me entere solo a partir del 8087 ,que en una ocasion lo consegui en la venta de chatarras electronicas y eran pues algo rarisimo de encontar estos chips en las placas amontonadas, lo compre y todo contento lo coloque en una placa XT que tambien me la habia conseguido en esa chatarrerias pero esta si funcionaba, era de esas llenas de chips ttl y memorias dram  (era toda una belleza para museo) y el condenado 8087 empezo a calentar como plancha que lo saque rapido antes que se destruya todo , Ahora en la actualidad con la tecnologia que hay creo que es posible meter toda una XT en un solo chip como quien dice una version de aniversario, como esos STM32F411 de dos nucleos, con coprocesador matematico que no son tan costosos pero no he visto muchos proyectos publicados con el asi como tampoco del Propeller de Parallax .

Bueno prosiguiendo con el Bootloader para Z80 me estaba fijando en este contenido del archivo *.hex que se envia a la tarjeta y la tabla de composicion  que explica que representa cada grupo de caracteres pero tenia una duda de si ese era toda la trama que se enviaba y pues faltaba unos codigos mas que no son visibles pero estan alli y eso se constata con un programa que visualiza los archivos de texto con sus codigos binarios completos asi que al final de cada linea se enviarian tambien los codigos de control CR y LF para que el bootloader los capture y haga el reconocimiento que se termino la linea actual poniendo a cero todas las variables temporales a la espera de la proxima linea completa y asi indefinidamente hasta que identifique la ultima linea .  

:1000A000612E00C9C680D94FC5D5444DD9C1E5D907
:1000B000D13E200D0C201AFE093816D608F5D97944
:1000C000480600D94847D97D6C2600D96C67F118DD
:1000D000E2D9CB38CB19D9CB18CB19300519D9EDCA
:1000E0005AD9D9CB1CCB1DD9CB1CCB1D3D20C4D993
:1000F000E5D9D1C1C979B72004475F57C9CB7A2068
:100100001079B728F40DCB25CB14CB13CB12C3FD3C
:10011000007DC6807CCE006F7BCE00677ACE00303B
:10012000010C87CB391F5F78E680B157424BEBC992
:00000001FF




Bueno el codigo ya esta avanzado en un 95% solo faltaria agregarle la configuracion especifica para el 68B50 , es preferible contar con esa unidad serial en hardware para que luego las aplicaciones que se carguen puedan tambien comunicarse con el terminal facilmente con sus comandos o instrucciones  y devolver valores de forma similar a como lo hace un arduino o se puedan presentar resultados o valores de sensores en algun programa hecho en visual basic.

*Hitachi HD64180*





El *HD64180* es un microprocesador basado en el Z80 desarrollado por Hitachi que incluye una MMU. El HD64180 _Super Z80_ fue posteriormente licenciado a Zilog y vendido por esta con el nombre Z64180 incluyendo algunas mejoras como las presentes en el Z180.

Ese super Z80 vendria a ser este microprocesador de Hitachi y que convenientemente tiene empaque dip de 64 pines que he visto aun se puede conseguir por aliexpress pero el envio esta muy costoso, segun leo puede manejar hasta 1 mega de RAM como un 8088, pero no creo que llegue a usar tanta memoria RAM  porque este proyecto es un sistema minimo no una computadora en si que vaya a tener algun sistema operativo o compilador incorporado, estaria de sobra con sus 32 kbytes o a lo mucho llegar a los 54 Kb manteniendo el bootloader en una 28C64 con algunas rutinas basicas de apoyo,


----------



## avefenix586 (Sep 16, 2020)

Este podria ser como un off topic del tema de Z80 ...

No se si han visto antes esta serie de "desafiando a las vegas", yo me los vi todos los episodios pero el que me llamo mas la atencion fue este episodio en particular por el tipo ingenioso que segun relata para esa epoca del 70 ya habia un metodo de ganarle a la casa usando las matematicas y probabilidades que publico un profesor en un libro muy vendido unos años atras para saber cuando era propicio apostar, pasar , doblar apuesta , etc  y era a travez del metodo llamado del cuenta cartas al que los casinos pronto le tomaron cautela y si descubrian a un jugador haciendolo lo sacaban por la puerta trasera con golpiza incluida, y pues tenias que estuiar entrenar y tener buena memoria para poder ponerlo en practica (eso suena al trading de la epoca)  entonces el tipo ingenioso padre de familia construyo una computadora que pudo alojar en todo su abdomen y el mismo ingresar las cartas por codigos binarios mediante switch incorporados en el interior de su zapato , me imagino que a puro componentes discretos  de la epoca  porque los microprocesadores creo que no eran comerciales todavia para el 71 o si habia predecesores del 8080 ? y asi programo su computadora para que le apoye a contar las cartas altas y bajas y le indique ademas que procedia hacer mediante tres indicadores leds mismo semaforo ocultos en unos lentes oscuros, sino lo han visto veanlo que esta interesante y esta en 7 partes , me imagino que en la actualidad ya no puedes hacer estas trampas porque ya le habran puesto algun remedio eficaz desde entonces asi que no seria buena idea ingresar a un casino con algo asi hecho con un atmega328 o arduino jeje , pero a manera de practica electronica esta interesante poder replicar esa computadora con la logica discreta a manera de un ejercicio de diseño y verla en accion con las cartas , quizas tambien la hagamos con el modulo del z80 , nomas no le vayan a dar uso para tomar ventaja cuando jueguen las cartas con sus amigos jeje


----------



## avefenix586 (Sep 19, 2020)

Espero que se habeis entretenido un poco con ese video de youtube del jugador genial de blackjack 
Bueno siguiendo con los avanzes del bootloader para Z80 fue una larga tarde que se prolongo hasta la madrugada e incluso a punto de tirar la toalla , no habia hecho o diseñado circuitos antes de comunicaciones seriales ni usado mucho los USART o UART o ACIAs a pesar de tenerlos alli entre mis chips antiguos en la alacena, pues mas practico me parecia siempre usar las conexiones del puerto paralelo para interactuar sobre cualquiera dispositivo externo pero ya luego este puerto desaparecio y muchos de mis circuitos quedaron alli olvidados como un programador de memorias eeprom , ahora todo es puerto USB y hay que tratar de aprender como usarlo (me dare un tiempo tambien para ello),  lo que era puerto serie antiguo rs232 tambien gracias a esos modulos novedosos USB-TTL han sido mas practicos para adaptarlos,

Bueno como mi circuito minimo de Z80 esta inspirado en la imagen que he posteado antes donde se usa un ACIA MC68B50 , he preferido armarlo primero en un protoboard y conectarlo a la tarjeta modular del Z80 con los cables jumper para comprobar que funciona y que modificaciones se pudieran hacer tambien, para comenzar se tenia que implementar el circuito de reloj de 7.3728 mhz para lo cual no contaba con el 74HCT04 asi que use lo que tenia primero un 74LS04 en su lugar con el cual no funciono el oscilador luego opte por usar un 74LS14  que es un hex-inversor smith trigger y tal como estaba en el circuito no funciono en un primer momento hasta que le suprimi la resistencia de 1K y coloque el cristal en paralelo con el inversor entre las patillas 1 y 2 , con ello el circuito comenzo a oscilar y ya tenia pulsos que coloque a unos contadores CD4040 en cascada de 24 etapas para comprobar en su penultima salida que seria la etapa 23 de 7.3728 Mhz con un led parpadeando a menos de un segundo asi ya teniamos la frecuencia patron que al ser dividida /64 nos daria la velocidad de trasmision de 115200 baudios.



la señal de reloj de 7.3728 mhz se le puede conectar tambien al Z80 en lugar del cristal cuadrado y haciendo las pruebas sin ningun circuito de espera wait el PPI 8255 A -5 que estoy usando trabaja correctamente con el secuencial de leds que cuenta en binario conectado a su puerto A, si entonces le coloco un cristal de 8 mhz ya tambien el PPI comienza a trabajar erraticamente asi que regreso a la velocidad de 7.3728 mhz, aun me falta comprobar si la Eeprom y RAM estan trabajando bien al elevar la velocidad y cual es su tope de velocidad practica yo creo que si pueden funcionar bien hasta los 8 mhz recuerden que el Z80 es de 20 mhz pero no llego a mas de 10 mhz en las pruebas anteriores sin perder el control.  

Bien entonces habiendo conectado el 68B50 tal como lo indica el diagrama de esa pagina Grant's 7-chip Z80 computer en que me baso para la conexion serial, incluso recomiendan usar el 68B50 en lugar de simplemente un 6850 porque es mas veloz que este, en las primeras pruebas no se dio la conexion con el terminal , me puse a revisar las conexiones, el cableado, el protoboard , cambiar de 68B50 , el programa que hize , programando una y otra vez la eeprom 28C256  y nada la pantalla seguia en blanco sin ningun mensaje , para la conexion del 68B50 use un modulo USB TTL CH340 y tambien revise su instalacion y driver era reconocido pero no ocurria nada, luego lo cambie por un FTDI232 tampoco se producia la comunicacion, me dije algo debo estar haciendo mal , el secuencial de leds seguia operando bien pero la comunicacion serial seguia sin operar,




de la misma pagina en mencion descargue el codigo ROM.HEX para la version de 32K del interprete basic disponible , dije con esto me saco el clavo ya que ese programa si debe estar probado y funcionando OK por sus autores ,asi que lo cargue en la eeprom y heche a andar pero oh sorpresa no ocurrio nada tampoco, no aparecio la presentacion del basic en la pantalla, esta seguia en blanco, no se si alguno del foro habra armado ya antes ese circuito tal como esta en el diagrama y probado ese firmware de interprete basic , algo debia estar haciendo mal que no me funciono adsolutamente la comunicacion serie.


Estando ya por dejarlo alli porque ya era tarde y dejarlo para continuar mañana se me ocurrio un intento mas para hacer trabajar el circuito a una velocidad lenta del orden de los kHz  , como tenia unos CD4040 conectados en cascada podia usar las frecuencias bajas y suministrarselas al Z80 mientras testeaba con mi punta logica  y ohh sorpresa a baja velocidad el 68B50 estaba enviando el dato por su salida TX data , aparecia en su pin un tren de pulsos por lo que el condenado chip si estaba operativo y haciendo su trabajo de trasmitir (estaba pensando que me vinieron malos)  , osea no habia error en el programa de prueba que hize pero entonces porque rayos no aparece nada en la pantalla del terminal serial del PC? algo estaria mal configurado en esos programas?, pero ya habia puesto bien la velocidad en baudios 115200, 8 bits de datos, sin paridad , 1 bit de stop del puerto en la PC, entonces se me ocurrio seguir rastreando las señales de salida del TXdata para lo cual comenze a ir subiendo la frecuencia del z80 de forma gradual , subiendo a los 1/256 de la frecuencia patron, 1/128....1/64...1/32 y aun se apreciaba la debil señal de  trasmision de la salida, seguia aumentando la velocidad 1/16...1/8  de la frecuencia y seguia presentes los pulsos debiles en TX data, 1/4...1/2 ...y entonces a 1/1 bingo!! se detuvo toda señal, el ACIA estaba fuera de servicio , perdido en el limbo, a la frecuencia de 7.3728mhz  el 68B50 se habia colgado mientras que el PPI seguia trabajando !! Pero entonces como en el circuito propuesto de computador Z80 de ese enlace lo estaban conectando a esa frecuencia y parece que les funciona?

Bueno solo puedo deducir en caso de mis pruebas que el 68B50 o no llega a trabajar bien a esa frecuencia de 7.3728 Mhz , que posiblemente esta en un umbral de frecuencia donde se da la loteria del silicio para ese chip , que se le esta sobre exigiendo mismo overcloking y pueda que si trabajen algunos chips y otros no dependiendo el lote o que la version del chip que tengo es mala y que solo trabaja como una version 6850 pura a baja velocidad, capas esos chinos le trucaron el codigo en el cuerpo jeje. 

Bueno luego de poner el reloj de el sistema minimo del z80 a la velocidad de 3.6864 mhz parece que todo se armonizo y funciono correctamente sobre todo con el ACIA 68B50 y entonces aparecio la rafaga del mensaje de "HOLA" en la pantalla del terminal y casi salto hasta el techo siendo las 3 am jeje y ya hasta habia perdido el sueño, este hobbie nos captura demasiado no?



Tambien le hize otras pruebas al 68B50 en sus entradas de reloj para recepcion y trasmision RXclk y TXclk y alli si puede soportar conectarle los 7.3728 Mhz para que la trasmision funcione a 115.200 baudios pero la parte de los buses de datos , direcciones , control si tiene que trabajar a baja velocidad 3.5864 mhz pero incluso con el cristal de 4Mhz que suelo conectarle a la placa me esta trabajando correctamente, me faltaria probarlo con cristales de 5 o 6 Mhz que lo hare mas adelante cuando me consiga esos cristales.

Despues de que ya el puerto serie me estaba trabajando correctamente a los 115200 baudios quize aprovechar a comprobar ese firmware , configurando el numero del puerto en 80H para el ACIA como se indica en la pagina del Z80 Computer le grabe el firmware ROM_32K.HEX pero no me llego a funcionar cosa que ya debia haber trabajado si mi tarjeta ya estaba operativa pero bueno sera cuestion de que alguien que haya armado ese circuito del enlace nos confirme si le a funcionado ese firmware pero bueno pueda que lo compruebe mas adelante.  
Bueno ahora si ya probada y comprobada la comunicacion serial ya podemos continuar con lo que falta del bootloader, probarlo y ajustarlo para que reciba el archivo hex desde la PC , el bootloader realmente resulta muy util para no estar recurriendo a estar retirando y poniendo la eeprom una y otra vez al programador y de vuelta a su tarjeta o de utilizar emuladores de eprom con ram y que conllevan mas hardware o arduinos con sus conexionados extensas de cableados.


----------



## avefenix586 (Sep 21, 2020)

Siguiendo con los avanzes del bootloader , la version preliminar no me a funcionado del todo asi que he tenido que hacer algunas pruebas mas con otros programas pequeños para testear el funcionamiento por partes, en el post anterior les mencione que al atacar las entradas de TXclock y RXclock con el reloj de 7.3728 mhz el ACIA 68B50 me recibia cuando presionaba una tecla aislada desde el terminal este se enviaba y llegaba correctamente pues para constatarlo se reflejaba el valor en los leds  conectados al PPI 8255 , hasta alli todo parecia bien , pero en cuanto enviaba un archivo de texto que podia ser el hex, el asm o el bas ocurria que en cuanto verificaba lo almacenado en la RAM con una operacion de volcado de memoria del Z80 hacia el hyperterminal en la pantalla se mostraba efectivamente parte del contenido correcto pero entre las lineas del texto se infiltraba una trama de caracteres ilegibles en varias lineas, asi que tuve que recurrir a preparar un programa de test de memoria para descartar si mi memoria RAM de 32K tendria algun bloque de celdas falladas pero la prueba la paso olimpicamente bien (son memorias tomadas de placas )  asi que no era problema la memoria, entonces se me  ocurrio bajarle la velocidad de trasmision bajando la frecuencia de clock a la mitad osea a 3.6864 mhz, fue entonces que la trasmision del archivo se realizo correctamente al verificarla con el volcado.



Al encender la tarjeta Z-80 me aparece ese escueto mensaje de bienvenida, asi lo he programado provisionalmnte como enviando caracter por caracter individualmente por lo pronto, en el asm de z80 simulator ide se limita mucho la extension de texto 

mensaje:       . DB   "Bienvenido al Sistema Z-80" 

de inmediato da error porque esta limitado a 10 caracteres maximo pero aun asi uso un texto de solo 10 caracteres e indexandolo para leer el texto no llega a enviarse correctamente, solo me aparecia una letra inicial "Z" y alli quedaba  asi que preferi enviar el texto de una forma que consume mas codigo como es solo la presentacion no influye en la funcion y procesos del bootloader

LD A, "Z"
OUT (81), A
retardo ...
proximo caracter 
 retardo..

En la segunda imagen ya le transferi un archivo de texto en *.hex que se envia en su formato correcto
tal como se muestra 



Despues de enviarle el archivo de texto procedo a su verificacion para lo cual presiono la letra "M" que programe asi y entonces el z80 me devuelve los bytes almacenados a partir de la posicion de memoria 8000H  por defecto y si se corresponde , asi que hasta alli ya se tiene una estabilidad en el envio y recepcion de datos 



en la respuesta de volcado de memoria no se muestra completo el archivo porque lo defini para enviarme solo una porcion de memoria de casi 500 bytes  y al final le envio un archivo en basic muy breve y al presionar la letra M me devuelve ese archivo mas parte del anterior que ocupaba mas memoria osea como quien dice lo chanco , mas adelante tengo que agregarle una funcionalidad de un puntero que contabilize el tamaño de un archivo para devolver un volcado de la misma dimension


El bootloader  como esta por ahora ocupa casi 1 kilobyte y como el archivo hex es enviado a una velocidad de 57600 baudio parece que en el intervalo entre byte y byte que envia el terminal no se termina de completar la preparacion y procesado del dato para almacenarlo donde corresponde y parece que se crea un cuello de botella al llegar a la tarjeta Z-80 que termina con bytes perdidos ,asi que tendria que optimizar mas el bootloader para reducir su carga o tambien bajarle la velocidad de trasmision hasta los 9600 baudios estandar con lo que tendria tiempo de sobra para procesar los datos , creo que en esa velocidad de 9600 tambien se comunica el arduino IDE con su placa porque tiene que almacenar su programa en la memoria flash interna que a de consumir su tiempo tambien y eso que el arduino corre a 16 mhz versus este Z80 que hay que hacerlo trabajar a 4 mhz para evitar complicaciones con los demas perifericos.  y por tercera opcion seria  separar una zona de memoria como  buffer para recibir la rafaga de datos y al terminar esta el z-80 ya recien se tomaria su tiempo en procesarla.

En este modulo del ACIA 68B50 que voy a preparar estoy pensando en proveerle solo dos velocidades la maxima estable de 57600 baudios y la de 9600 baudios seleccionable por jumper, la configuracion interna del divisor de clock es muy limitada y no seria posible cubrir todas las velocidades estandarizadas.

el proximo modulo despues de este seria el de I2C , parece que no hay un C.I. periferico como tal que se conecte a un bus de 8 bits y gestione por su cuenta todas las señales de un bus master  I2C asi que el mismo Z-80 tendra que encargarse de gestionarlas, en ese modulo vendria alojado una memoria 24C256  de 32K que vendria a ser el respaldo del programa que se cargue en la RAM, y tambien se alojaria el RTC DS1307 con lo cual el Z-80 seria muy puntual jeje, y de alli tiene que salir una salida I2C para conectar dispositivos externos en I2C para loc cuales hay que prepararle librerias correspondientes.


----------



## avefenix586 (Sep 22, 2020)

Hace tiempo entre la chatarra me habia encontrado esta curiosa tarjeta asi suelta casi intacta como se muestra en la imagen , en ese momento pense que seria alguna especie de calculadora , lo tome de entre las tarjetas amontonadas y la escogi porque vi que alli tenia un Z80 CPU soldado, por entonces conocia poco del Z80 y mas del 8085 asi que me lo lleve por un sencillo, le extraje el Z80 que resulto estar cruzado y pues deseche el resto de la tarjeta pero rescate el display que aun lo tengo por alli entre mis cosas,  unos años despues buscando mas informacion del Z80 me aparecio la imagen de esa tarjeta y del equipo al que pertenecia , asi que me di la sorpresa que era de ese juego de master chess ajedrez de 1979 , entonces pense  vaya si hubiera sabido para que esa tarjeta era de un juego de ajedrez capaz le cambiaba el Z80 dañado y echaba a andar el artificio jeje, pero alli veo que lleva una tarjetita pequeña montada encima , esa si no vino con la tarjeta que compre asi que posiblemente no hubiera funcionado, nuestra zona de chatarra electronica era tan variada que facil podias haberte encontrado con el computador del apolo XI por alli jeje, ahora deben haber modelos de ajedrez mejorado  hecho con arduino o un PIC no? o ya solo la aplicacion de android


----------



## Futaba2020 (Sep 23, 2020)

Daniel Meza dijo:


> Sírvete de estos archivos, en su momento me fueron de ayuda... ya después hay páginas más especializadas.
> 
> http://galia.fc.uaslp.mx/~cantocar/microprocesadores/PRACTICAS__Z80_PDF_S/2_EL_Z80.PDF
> 
> jaja yo tengo pensado meter electrónica, de hecho solo por esa carrera me metí en ESIME, y pues como sean los profes me da igual, tenemos la ventaja de conocer el plan de estudios y pues no queda de otra que darle por nuestra cuenta.


Hola, Leyendo tu proyectos me animo hacerlos unos tengo tarjeta de una maquina ya absoleta y el monitor b/n que desarmer como basura pero le guarde un tiempo.(Minilab de fotos) y actualmente ya son maquina digitales.
Me podria publicar mas apuntes de Practica? porque ahorita son el numero 2 y leyendo me gusto para poder aprender.
Saludos y Felicidades Daniel.


----------



## avefenix586 (Sep 26, 2020)

Siguiendo con los avanzes del proyecto "Road to Bootloader" para Z80 jeje , anduve un poco agripado porque en mi laboratorio de casa hace mucho frio en las noches y estube tan embalado con el proyecto que me quede varias noches hasta la madrugada que termine con una gripe que espero no sea ese inche covid nomas, bueno a pesar de ello segui con el avanze porque llega un momento en que el proyecto se pone por asi decirlo como un reto emocionante y hasta se te quita el sueño XD, en este foro veo que hay muchos tiburones de la electronica y la programacion que creo que programar un dispositivo tan sencillo como un ACIA 68B50 debe ser como un ejercicio rutinario pero vaya que me a costado varias noches hechar a andar este bicho , en un principio aparentemente el codigo del programa parecia estar bien hecho respecto a la logica de funcionamiento pero sobre la marcha y tras las pruebas te vas dando cuenta de errores que van apareciando para irse corrigiendo reprogramando una y otra vez y a pesar de ello no lo ves funcionar como esperas, creo que tuve que sacar la eeprom 28C256 de su zocalo al programador TL866 como 50 veces , y pasaba que algo no terminaba de funcionar bien , enviaba unos datos y me grababa otros, enviaba una direccion y me salia con otra , daba ejecutar y se perdia el programa  , tuve que ir rastreando la ruta de los datos y corroborando su integridad paso a paso a travez de las salidas del PPI 8255 en los que tenia conectado mis modulos de leds para constatar que los datos ya llegaban bien despues de ser procesados pero en se perdian en el alguna parte, como pense que quizas por la velocidad de 57kbaudios podia estar atropellandose los datos con el tiempo del procesamiento lo baje a 9600 baudios pero los fallos seguian alli presentes, creo que ya estaba por tirar la toalla pero segui revisando el codigo una y otra vez y modificando y corrigiendo , habia varios errores que habia cometido en las secuencias que llevaban hasta que se perdiera el control por saltos y manejo de la pila erroneos que no me habia percatado en su momento  y asi pues cada repasada del codigo de principio a fin  encontraba algun error o alguna nueva modificacion comprometia a otras partes pero bueno asi dando y dando , en un intento mas  ayer viernes a eso de las 4pm la tarjeta del Z80 recibio los datos desde la PC a 9600 baudios y los presento de vuelta en la pantalla tal como eran , osea en su integridad total despues de haber sido procesados desde el archivo en formato HEX  a sus respectivos bytes y almacenados en donde correspondia , casi salto hasta el techo de emocion , el botloader a respondido "estoy funcionando OK!!!" el skynet vive jeje.
En un momento ya estaba evaluando que quizas le exigia mucho tiempo de procesado entre el intervalo de byte y byte recibido para ir interpretandolos  sobre la marcha y acomodandolos donde correspondian  que se estarian perdiendo tramas mientras estaba deshabilitada las interrupciones que ya estaba por optar en enviar toda la trama pura del archivo HEX completo asi sin procesar a una zona de la RAM y una vez completada de recibirla comenzaria a procesarla o interpretarla y ponerla en el area que corresponde asi que estaba pensando dividirlo en dos areas 16K para el buffer y  los otros 16k donde se cargara el codigo final listo para ser ejecutado pero menos mal funciono a tiempo el interprete del bootloader como se esperaba de interpretar sobre la marcha, claro que nesesita una pequeña porcion infima reservada de la RAM situada en la parte alta  en la direccion 0FF00H osea 1/4 de 1kbyte que es pues despreciable comparada al espacio completo de 32 Kbytes



En esa pantalla se refleja el funcionamiento basico del bootloader , como ven se envia el archivo HEX por el hyperterminal configurado a una velocidad de 9600 baudios que en este caso es un programa secuencial de leds preparado para correr en la RAM, este se envio sin perturbaciones y despues que yo presiono la tecla "V" (de volcado) me envia un volcado del contenido de la RAM a partir de la direccion 8000H hasta el ultimo byte del programa que fue cargado Alli se puede constatar que en la primera linea del codigo 

:10800000DD2100FF31FBFE3E80D3233E00DD77FF04 

al desglosar el contenido quitamos el :, contador 10, direccion 8000 y tipo 00 quedandonos solo con la componente de datos DD2100FF31FBFE3E80D3233E00DD77FF el 04 final tambien se retira porque es el checksum y haciendo lo mismo con las demas lineas del archivo HEX las veremos alli de corrido en la trama de volcado depurada siendo el byte final del archivo en la ultima linea el C9 y recuerdese que ED es el checksum asi que no es parte de la trama, bueno por lo pronto la trama de volcado esta asi de corrido pero la arreglare despues para que se presente en dos grupos de 16 bytes, y despues al presionar la "J" le doy la orden de que ejecute el programa cargado en la direccion  8000H y empieza a correr este que era un secuencial que en el codigo assembler debe estar precedido por la directiva .ORG 8000H para que todas las variables se generen en la zona de la RAM desde 8000H-FFFFH, el bootloader obedece a capturar e interpretar la linea de direccion que aparece en el archivo HEX  asi que uno le puede poner la direccion en la directiva .ORG xxxx y este colocara los datos siguientes a partir de esa direccion  y bueno pues ya solo le faltaria hacerle algunos arreglos de presentacion de datos al bootloader, agregarle algunas funciones basicas sin hacerlo tampoco algo engorroso lleno de directivas en sucesivas versiones, solo el hyperterminal no me convence del todo porque en cuanto presiono una tecla esta se envia sin dejarme poner una orden como "V 8000 FF" y despues de darle enter recien se procese completo esa linea o tambien darle una orden de "J 9000"  y enter para que la orden se reciba como ejecutar un programa situado en la direccion 9000H , lo ire afinando en su version 1.00 para subirlo y tambien la conexion fisica del ACIA 68B50 que tambien tengo que diseñarle su modulo PCB, bueno hasta aqui quizas pregunten y entonces solo podra trabajar en 9600 baudios? bueno pues despues que funciono a esa velocidad se me ocurrio probar a la velocidad de 57kbaudios y ohh sorpresa el archivo se envio e interpreto correctamente a esa velocidad tope asi que ya dependera usarlo a cada quien a la velocidad que le sea mas conveniente jeje  con este bootloader ya podremos diseñar programas monitores hasta pequeños sistemas operativos si quereis y probarlos depurarlos y cuando ya esten bien probados grabarlo en su eeprom final y sustituir el bootloader . asi que nos sera como una herramienta util para los que aun queremos hechar a andar estos retro microcprocesadores ya sea por hobbie o por el fin que fuere jeje 

una cosa curiosa y que me ayudo del hyperterminal es que podia probar paso a paso de forma manual digitar la trama y ver la respuesta reflejada en los leds que me hacian rastrear los errores y porque se vuelve indistinguible si los envias desde teclado o como archivo de texto, yo habia configurado la tecla "E" para comando de ejecutar el programa cargado y pasaba que cada vez que en la trama de datos que se enviaba como archivo en cuanto llegaba el caracter "E" el bootloader lo interpretaba como que debia ejecutar el programa y alli era una de las situaciones donde se me perdia el control o la secuencia y pues para darle una orden debo usar una tecla ajena a los caracteres "A ...F"  y puse la J para ejecutar  

Y pues ahora que ya tengo casi un molde o modelo de Bootloader ya me sera mas facil emigrar a un bootloader para otro microprocesador como el 6502 o el 6809 (me quejo nomas que no los produjeran a mas megahertz ) solo que me pregunto ahora donde estan los ensambladores , Basic, C para estos micros? podremos usar el Visual studio code para ello? ojala algun experto nos ayude con algun post tutorial sobre ello


----------



## avefenix586 (Sep 30, 2020)

Esta es la disposicion de la conexion del ACIA 68B50 que estoy usando y me esta trabajando OK para la trasmision serial , en el diagrama del circuito minimo de Grant Searle le conectaron un cristal de 7.3728Mhz directamente a las entradas de reloj del 68B50 pero lamentablemente en las pruebas que hize a esa velocidad el ACIA se me ponia rebelde y la trasmision del archivo me la enviaba con tramas de caracteres extraños (me olvide tomarle una foto a ello) y pues como el cristal que use y tenia era de 7.3728 MHz le conecte un divisor para dividirlo a la mitad (en el protoboard) y obtener los 57K que me resultaron mas estables en las primeras pruebas , a veces en la trasmision me sale algun error (1 de 20 veces a esa velocidad) asi que tambien le acondicione un divisor de frecuencia con un 74LS90 que esta configurado para dividir entre 6 la frecuencia base , pero para evitarnos ese divisor  entre dos anterior lo conveniente sera ya usar mejor un cristal de 3.6864 Mhz y esta frecuencia podria ser tambien aplicada al mismo Z-80 pero preferi manejar eso de forma independiente asi que el Z80 usa su propio cristal integrado de 4 MHz. que posteriormente hare mas pruebas para elevar su frecuencia a 6 Mhz y luego a 8 mhz con un circuito de wait

El terminal conectado a la señal /M1 del Z80 me resulto tambien opcional osea simplemente se puede conectar ese terminal a Vcc y va a funcionar sin problema el ACIA  pero lo pongo a /M1 por el diagrama del Grant Searls , ahora mediante el switch de la imagen que podrian ser simplemente unos jumper podremos seleccionar que velocidad enviarle al ACIA si una frecuencia de 3.6864 mhz o una dividida entre 6 osea 614,400 Khz , y como el ACIA esta configurado para dividir esa señal de reloj entrante entre 64 obtendremos las frecuencias standar maxima de 57.6K  y la minima de 9600 baudios y arreglado esa parte.

al otro extremo las salidas del TX y RX lo conectaremos respectivamente a los pines que corresponde en el modulo serie-USB, en el mercado hay varios modelos de adaptadores, yo probe con 2, el FTDI232 y el CH340, me resulto mejor este ultimo que el otro para este caso y es tambien mas economico , para conectarlo a la PC tendrian que usar un cable de extension USB macho-hembra.
El diodo en el circuito es para evitar que se junten los voltajes de la placa con el voltaje 5v del USB incluso es opcional no conectarlo a ese terminal dispuesto y solo los 3 pines TX, RX y GND que igual va a funcionar  y pues los nostalgicos de los retromicroprocesadores ya pueden armar su circuito minimo Z80 en las placas PCB modulares, en protoboard , o quizas diseñar su placa mas compacta todo horizontal a doble cara para caber en la palma de la mano, pero les recomiendo el modular porque nos permitira ir agregandole mas perifericos hechos por mi o por ustedes como el  CTC, ADC, Interrupciones , I2C , memorias y RTC ver que chips se acomodan al bus de señales dispuestos , uno mas que se me viene a la mente seria un modulo PWM para controlar servomotores , alguien conoce algun chip PWM que se pueda anexar a un microprocesador? deberia existir alguno quizas si o quizas desaparecio del mercado.


----------



## avefenix586 (Sep 30, 2020)

*El Bootloader Z80*

Bueno asi es como queda la presentacion del Bootloader para Z80 en cuanto conectan a su puerto USB y configuran el Hyperterminal para la conexion a la velocidad establecida  de 57600 o 9600 baudios, un bit de inicio , 8 bits de datos, ninguna paridad y un bit de stop , la version es la 1.00 porque es la inicial ya veremos a cuantas versiones mas lo hacemos evolucionar con el tiempo de ser posible creando programas utiles que se pueden ir agregando de a pocos , ahhh Parutronics es mi empresa personal jeje, el Bootloader a ocupado unos 1800 bytes aproximadamente , esta es la primera pantalla que verian al hecharlo a correr quedandonos el "Z80" como inicio de linea .



luego de alli selecionamos nuestro archivo resultante HEX que nos entrego en este caso el Z80 simulator IDE  despues de compilar en este caso el ejemplo es secuenz80.hex que ya esta acondicionado para ejecutarse en la RAM porque se debe cargar en cualquier parte del area de la zona de 8000H - FEFFH, los ultimos 255 bytes de la memoria los reservamos para que opere el bootloader, la preparacion o acondiconamiento para que corrar en la RAM se hace solo agregandole al inicio de su codigo ASM la directiva .ORG  XXXX, mas adelante lo veremos



Luego de cargarse el archivo HEX lo veremos en pantalla tal como esta en la imagen y nos mostrara un mensaje final de que la carga se a completado con 0 errores cuando es exitosa en caso contrario les indicara que ha habido errores en la transferencia y deben volver a enviar el archivo , como les dije antes me salia algun error ya muy remotamente como 1 de cada 20 intentos y con enviarlo nuevamente quedaba OK , quizas por interferencia de tanto  cableados en protoboard  



Despues de enviar nuestro archivo HEX podemos corroborar que esta alli haciendo un volcado de memoria donde podemos cotejar los bytes presentes en su respectiva ubicacion con el archivo compilado a manera de ejercicio visual, para ejecutar el volcado de memoria tenemos que usar la tecla "M" mayuscula (antes fue V) y seguidamente escribir junto la direccion en Hexadecimal de 4 digitos, no es nesesario agregarle H al final porque el bootloader lo interpretara como una direccion hexadecimal y luego de darle enter  entonces nos mostrara el contenido de esa zona hasta los 256 bytes siguientes , es asi que al ingresar M8000 nos hara un volcado desde 8000H a 80FFH



Aqui otro ejemplo de el uso del comando "M" de volcado de memoria, como ven esta vez se a ingresado M0100 y nos mostrara el contenido que es parte del bootloader ya que este esta ocupando casi los primeros 2 K, en caso se me ocurra ponerle otra direccion despues de esa como puede ser M4000 vere en la pantalla puros FF porque en esas zonas no hay nada grabado 


En caso de que yo digite solo la M me mostrara lo mismo que le ingrese anteriormente , en este caso antes habia ingresado la direccion  M0100 y ahora que presiono M + enter me muestra la mismas direcciones, cuando yo presiono  la letra M despues de encender el equipo este me mostrara un volcado a partir de la direccion 0000 a 00FF, en la parte de abajo al pie de esta imagen esta el otro comando "R" de RUN (antes era J provisional)  de igaul manera que con la M debemos escribir la letra R seguido de la direccion donde esta nuestro programa cargado para ejecutarlo , alli pueden ver que he ingresado M8000 que corresponde con la direccion donde se cargara el programa dirigido por la directiva .ORG 8000H  en cuanto le de enter comenzara a ejecutarse mi aplicacion , si esta bien elaborada hara lo que le hemos pedido sino se ira a la deriva, en este caso se ejecuta un secuencial de leds basico en el PORT A del 8255 de forma indefinida y para salir de alli tengo que presionar el boton reset para volver al bootloader, si yo ingreso M0000 se empezara a ejecutar desde la direccion 0000 donde reside el bootloader y nos aparecera  nuevamente la presentacion, 


 En esta ultima imagen podemos ver el Z80 simulator IDE, a su izquierda esta la pantalla del Basic donde podemos escribir nuestro programa mas facilmente en ese lenguaje y dejar que el software nos lo convierta a un ASM , pero hay un detalle con el Z80 simulator IDE , como ven me permite agregarle instrucciones assembler anteponiendole la directiva ASM: y alli le indico que quiero que el programa inicie en la direccion 8000H para que cargue en esa zona de la RAM , pero al compilar  automaticamente el software escribe las instrucciones LD IX, 0FF00H y  LD SP, 0FEFBH  y despues de esas lineas recien agrega e  identifica la directiva ORG asi que simplemente tendria uno que entrar a la ventana de la derecha y hacer esa modificacion indicada con la linea roja de mover la directiva a antes de las dos primeras instrucciones generadas por el Basic y listo , claro los valores tambien ya le pueden poner los que crean convenientes al SP por ejemplo yo para el Bootloader se lo puse en 0FF80H y el IX en FFA0  de preferencia no se deberia ocupar esos ultimos 255 bytes y dejarlo solo para el bootloader 


Y pues aqui esta el archivo HEX del Bootloader Z80 listo para grabar en la memoria 28C256 o 28C64 que tengan. disponible , y pues tengo que terminar con el modulo del ACIA 68B50, hasta aqui los avanzes jeje


----------



## avefenix586 (Oct 11, 2020)

AMD Am9511​El *AMD Am9511* fue una unidad de procesamiento aritmético (APU) fabricada por AMD en 1977 con capacidad para realizar operaciones aritméticas de punto flotante de simple precisión (32 bits) y de números enteros complemento a dos de 16 y 32 bits. Podía conectarse con diversos microprocesadores de 8 bits de la época para aumentar su capacidad de procesamiento numérico. Es compatible con el intel 8231
Venía en un paquete DIP de 24 pines, de los cuales 8 eran usados para su bus de datos. Dependiendo del modelo, trabajaba con frecuencias de reloj de 2, 3 y 4 MHz.
Internamente tenía un stack de 8 niveles para los operandos enteros de 16 bits, que también se usaba para almacenar 4 niveles de operandos de 32 bits, tanto enteros como números de punto. La pila era usada como medio de almacenamiento temporal para los operandos y las operaciones se realizaban con el elemento tope (operaciones monádicas) o los dos elementos topes de la pila (operaciones diádicas). El resultado de la operación se almacenaba en el tope de la pila. Un esquema semejante, con el uso de una pila, es el usado por los coprocesadores numéricos de la posterior serie Intel x87 y posteriores.
El Am9511 podía realizar operaciones de conversión entre los diferentes formatos numéricos, operaciones aritméticas como suma, resta, multiplicación y división, cambio de signo, operaciones trigonométricas (en radianes) SIN, COS, TAN y sus inversas ASIN, ACOS y ATAN, raíz cuadrada, logaritmo natural y decimal, exponencial y potencia.



Este integrado aun se puede conseguir por via online compra en tiendas chinas pero su precio es relativamente alto respecto a otros componentes como microprocesadores , tiene la facilidad de poder conectarse como un periferico mas a los buses y asignarle una direccion de habilitacion en el mapa de memoria o de dispositivos I/O, algo negativo que le veo es que requiera una alimentacion de 12 v adicional  en uno de sus pines tal como el 8080 no? 

En mi alacena de chips antiguos tenia muchos con codigos extraños,  que me eran irreconocibles y ahora me acorde que entre ellos tenia 2 chips AM9511 lo recuerdo claramente como si fuera hace unos instantes , los observe y me pregunte si serian quizas memorias 6116 o algun perfierico conocidos pero con otros codigos , los guarde en una caja junto con otros chips pero tiempo despues hize una purga y bote varios chips que estaban en mal estado , desoldados mal , patas rotas, patas cortas y hasta oxidados, asi que parece que termine botandolos porque no los he vuelto a ver por ninguna parte o quizas esten refundidos en alguna parte y aparezcan cuando no los nesesite jeje


----------



## avefenix586 (Oct 30, 2020)

El modulo ACIA 68B50  para el sistema minimo ya esta listo tambien y ahora podre reemplazar mis tallarines en protoboard, esta version trabaja con su cristal de 3.6864 Mhz  y su frecuencia de trasmision resultante es 57,600 baudios , en la esquina superior izquierda vemos el zocalo de 4 pines para conectar un modulo USB-TTL, alli tenemos los 4 terminales GND, TX, RX y VCC en ese orden pero no es nesesario que conectemos al terminal V porque la alimentacion al modulo USB-TTL viene por el mismo cable USB por lo tanto basta con conectar solo  tres terminales G, T y R del modulo ACIA, las pruebas de funcionamiento son con un modulo CH340 pero se pueden usar cualquier otro y lo conectamos con unos cables jumper M-H.


----------



## avefenix586 (Nov 15, 2020)

Ahora si desconecte el ACIA cableado en protoboard y  construi el modulo del MC68B50 en circuito impreso con el metodo mistico de la plancha.
Y pues no me quedo tan mal, algun par de imperfecciones quedaron pero corregidos con unos refuerzos de soldadura.

Ahora ya tomo su lugar en la tarjeta de expansion, en las pruebas que hize en protoboard use una señal de reloj de 3.6864 Mhz que venia dividido desde un CD4040 y tenia en mente usar un cristal de ese valor para evitar usar un chip divisor de mas pero este valor de cristal no es comercial en nuestro medio y tampoco el cristal de 7.3728 Mhz que felizmente lo habia comprado online hace tiempo y para esta ocasion me sirvio tenerlo.

Estando listo el modulo ACIA no me quedo mas remedio que usar el cristal alto con lo que la velocidad seria de 115,200 baudios. Y oh sorpresa esta vez si me funciono bien la trasmision a 115,200 baudios con lo que las trasmisiones seran mas rapidas y asi puede funcionar a eleccion de uno dependiendo que cristal se le ponga, ya que me quedo bien la tarjeta ACIA.

Creo que ya podre hacer las demas tarjetas modulares yo mismo con ese metodo de la plancha que practicando mas ya uno le agarrara la maña para que queden el minimo de fallas de pistas jeje


----------



## avefenix586 (Nov 20, 2020)

Este es el modulo de temporizador para la placa del Z80, es similar al preparado para el 8088 ,podemos usar un 82C53 o un 82C54,  debido a que no hay un cristal de 1 Mhz se me ocurrio usar un cristal de 4Mhz y agregarle un divisor de 12 etapas, de esa forma la frecuencia de 4 Mhz principal es dividida por 4096 a travez del contador CD4040 , de esta forma tenemos un clock de casi 1 Khz que se puede conectar a cualquiera de las entradas CLK0, CLK1, CLK2 mediante los jumper, de esa forma los temporizadores podrian generar un pulso a intervalos maximos de 65 segundos aproximadamente ,  la salida del temporizador OUT0 tambien esta conectada a un pin de interrupcion del 8259 de esa forma podriamos interrumpir al CPU a intervalos de 65 segundos maximo para alguna tarea requerida, solo el OUT0 puede generar la interrupcion .


Y esta seria el modulo de interrupciones del chip 82C59, como este dispone de hasta 8 entradas de interrupcion y el bus de señales esta limitado, se me ocurrio disponer 4 señales para el bus de I/O  y 4 señales de interrupcion para uso externo que se llevan hasta un conector superior, una de las interrupciones del slot esta asignada al ACIA 68B50 mientras que la otra al temporizador 82C53, asi que nos quedan 2 señales disponibles para otros dispositivos.


y pues para completar los modulos tendria que adicionar el modulo I2C que contenga una eprom 24C256 de 8 pines y a un RTC  DS1307 ademas de que ese bus tenga salida exterior para conectarse tambien a modulos I2C , este modulo en si no es un hardware dedicado sino que el mismo Z80 se tienen que encargar mediante software a manejar esas señales, de la salida del DS1307 tambien podria conectarse a uno de los pines de interrupcion disponibles en el slot y entonces quedaria solo uno libre para otro modulo, imagino que el amigo Gudino tambien le agregara un modulo I2C a su computadora de 32 bits tambien jeje


----------



## avefenix586 (Nov 23, 2020)

Aqui les muestro el esquematico del futuro modulo de comunicaciones I2C, SPI, 3-wire y 1-wire , este modulo como que me parece el mas interesante de construir y de diseñar sus programas de manejo , funciones, subrutinas o librerias , en este modulo tenemos dos puertos asignados a la misma seleccion, solo que uno envia un byte y el otro lee un byte , las señales resultantes se conectan a buffers de colector abiertos para conformar los buses I2C, SPI y 1-wire ,en si hay dos buses I2C uno que es de uso interno para el RTC Ds1307  que mantiene al Sistema minimo a la hora y una memoria EEprom 24C256 de 32 K bytes de capacidad, ademas la salida out del DS1307  se conecta a una entrada de interrupcion del 82C59 a intervalo de 1 hertz para generar una interrupcion si es que se habilita esta señal para alguna aplicacion, mientras que la eeprom 24C256 nos sirve para almacenar todo el contenido del programa que cargamos en la RAM de tal modo que estando guardado un programa alli al energizar el sistema minimo , lo primero que hara es intentar comunicarse con el puerto serial hacia la PC  y si no encuentra respuesta alguna entonces volcara el contenido de la eeprom hacia la Ram y comenzara a ejecutar el programa en la direccion 8000H , el otro bus I2C es para uso externo junto con el bus SPI /3-wire y el 1-wire que tendrian sus conectores enchufables de salidas , asi que esta parte de la programacion creo que sera la mas complicada para mi , una primera aplicacion con ese bus I2C seria el manejo de 1 pantalla LCD-I2C  ya sea de 2 o 4 lineas tambien un teclado I2C , por el bus SPI se puede conectar ampliaciones de salidas I/O y por el 1-wire prepararle para comunicarse con dispositivos como el sensor de temperatura DS18B20 entre otros, asi que este modulo es el mas interesante de todos los demas jeje


----------



## avefenix586 (Nov 29, 2020)

Aqui les muestro los modulos PTC 82C53 y PIC 82C59 hechos con el metodo de la plancha , me quedaron mas o menos , ya le voy agarrando la maña a ese metodo de la plancha, mas bien lo malo es cuando completas las pistas huecas con el plumon indeleble porque este suele trazar y luego rayarse a si misma en una segunda pasada y queda debil esa area que termina volandose por el acido o quedar medio descontinuada, pero bueno ahora viene la parte tediosa de taladrar con mi taladro de mano los agujeros y que quede lo mas derecho posible para ensamblarlos, alguna vez quiero comprarme un taladro de mesa para estos menesteres , como no suelo hacer mis diseños en placas sino encargarlos a terceros pero esta vez tuve una jornada de manufacturar como doce tarjetitas ademas de estas dos para este sistema minimo con Z80 y ya solo faltaria preparar el ultimo modulo I2C, asi que si yo que soy torpe para hacer placas puedo creo que ustedes lo haran mejor jeje, Bueno al final del ultimo modulo ya subiria un archivo compilado con los moldes definitivos de las placas que he hecho, comprobados que funcionan ya y que fueron corregidas en algun error que se me haya escapado durante el diseño, la siguiente version que andaba preparando era otra version minima de Z80 version 2.0 compatible con los modulos hechos para el Sistema minimo 8088 y de paso tambien para el sistema del 8085 version 2.


----------



## Gudino Roberto duberlin (Nov 29, 2020)

Yo hace tiempo dejé de usar el fibron indeleble por el mismo motivo que comentas.
Para que los agujeros queden bien alineados, debes marcarlos con un punzón alineando con  una regla y listo.


----------



## avefenix586 (Nov 29, 2020)

Si con el caso de usar plumones indelebles el detalle que me encontre cuando lo usaba era que hay que darle una segunda pasada a todo dentro de un par de horas de que la tinta este bien seca (doble trabajo para que quede lo mejor posible) , pero ya no tenia mucho tiempo para retocar doblemente estas tarjetas  sino se me venia la amanecida y queria terminarlas para ayer mismo, si tambien solia meterle unas punzadas al impreso para que quede la guia y el taladro de mano no este bailando cuando tenia la paciencia de hacer impresos , hasta me arme un taladro de mesa pero que igual no era estable ,ladeaba y no me agujereaba en donde debia sino habia esas marcas del punzon para guiar la broca , pero cuando se trataba de grandes tramos de pines y para que me quedaran alineados perforaba los extremos y alli sujetaba una tarjeta perforada de guia y asi ya taladraba con confianza todos los agujeros , eso hize en las tarjetas slots y tambien en los bordes de las tarjetas modulares donde van tiras de 31 a 40 pines  y alli queda todo alineado, con los chips de 24, 28 y 40 pines tambien lo hacia , tomaba un pedazo de la tarjeta perforado cortado como molde y lo sujetaba con alambre sobre los 4 extremos previamente taladrados y listo me quedaba todo alineado jeje, el metodo de la plancha es algo tedioso y tiene sus detalles de cuidado para que quede lo mejor posible la primera vez que lo intente termine con el cobre completamente desprendido de la bakelita jeje , en youtube hace tiempo vi un video sobre como modificar una impresora laser para imprimir directamente una baquelita virgen tal como si estuvieras imprimiendo una hoja , lo cual estaria fenomenal pero tienes que desmontar la impresora y hacerle las modificaciones respectivas lo cual valdria la pena si uno se dedicara al negocio de los impresos o los hiciera muy a menudo, quien sabe aqui ya lo esten usando en los que manufacturan pero son recelosos con mostrarlo a la vista jeje, a proposito Gudino como van los avanzes de su microcomputador de 32 bits ? me voy a dar una vuelta por su seccion haber que novedad a publicado , como ve la viabilidad de implementar I2C, PWM  o USB en su diseño combinacional?


----------



## Gudino Roberto duberlin (Nov 30, 2020)

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.


----------



## avefenix586 (Dic 1, 2020)

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


----------



## avefenix586 (Dic 2, 2020)

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


----------



## Gudino Roberto duberlin (Dic 12, 2020)

avefenix586 dijo:


> 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: Dic 12, 2020


Aquí comparto el lector/grabador de la serie 24CXX.
Tengo que añadir el código cargado en la 27C64.

	Mensaje automáticamente combinado: Dic 12, 2020


----------



## Gudino Roberto duberlin (Dic 14, 2020)

Lo prometido es deuda, aquí adjunto el circuito discreto de PWM.


----------



## avefenix586 (Dic 22, 2020)

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.


----------



## Gudino Roberto duberlin (Dic 22, 2020)

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.


----------



## avefenix586 (Feb 5, 2021)

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


----------



## TRILO-BYTE (Jun 13, 2021)

¡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 :

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:


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



Se ve feito mi sistema pruebo subrutinas en el, no soy un experto como los demás pero me uno al *homebrew computer club .*
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:



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.

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.


----------



## Gudino Roberto duberlin (Jun 13, 2021)

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!!


----------



## TRILO-BYTE (Jun 13, 2021)

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.


----------



## Gudino Roberto duberlin (Jun 13, 2021)

TRILO-BYTE dijo:


> 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.


Pues eso es más que suficiente teniendo a un bit alcahuete! Si la velocidad de revisión es al menos el doble que la de ingreso de datos sobra!
En mi caso me encuentro en la misma situación, para leer el puerto UART o el teclado.


----------



## TRILO-BYTE (Jun 27, 2021)

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.




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


----------



## Dr. Zoidberg (Jul 26, 2021)

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:

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.


----------

