Addon Z80 de McLeod para el ZX-Uno
- antoniovillena
- Amiga 1200
- Mensajes: 2013
- Registrado: 16 Abr 2012, 21:22
- Gracias recibidas: 8 veces
Re: Addon Z80 de McLeod para el ZX-Uno
Yo no tengo plaquita Z80, el único que te puede ayudar (si tiene tiempo) es McLeod.
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Addon Z80 de McLeod para el ZX-Uno
Quest escribió:Me sería de ayuda saber:
- Qué hace exáctamente el core "z80exttest1" del repositorio (con el addon me parpadea el led y sin él, no parpadea, pero no puedo deducir si el Z80 va o no, porque no sé exáctamente qué hace. Sólo veo que pulsando ESC, hace algo, pero no deduzco nada más)
Ese test es un sistema mínimo con el Z80. No es un Spectrum, sino lo mínimo mínimo para probar que el Z80 externo funciona.
Este sistema consta de:
- El propio Z80, que usa una frecuencia de reloj aquí de 4MHz.
- Una memoria de 256 bytes, que contiene el programa que se va a ejecutar, y al ser RAM, también puede escribirse en ella. Esta memoria está mapeada en las posiciones 0000 - 00FF
- 3 puertos de E/S, que son:
Puerto 00h: sólo lectura, conectado al puerto PS/2. Aquí se guarda la última tecla (pulsada o soltada) que entregó el teclado. Realmente lo que se guarda es su scancode, no el código ASCII de la tecla que representa ni nada de eso.
Puerto 01h: sólo lectura, conectado al puerto PS/2. Este es un puerto de estado y sirve para inerrogar cosas sobre la última tecla pulsada/soltada. Sólo se usan dos bits:
Bit 0: vale 0 si la tecla está pulsada, y 1 si está soltada
Bit 1: vale 0 si la tecla es un scancode normal, y 1 si es un scancode extendido (E0 + scancode).
Puerto 02h: sólo escritura. Se emplea sólamente el bit 0, cuyo valor se usa para encender o apagar el LED.
El programa que ejecuta este Z80 lo puedes ver en el fichero pruebaz80.asm que está en la misma carpeta que ese core. Como ves, sólamente se dedica a encender y apagar el LED, dejando una pausa entre ciclo y ciclo, con la idea de que lo veamos parpadear.
Una vez que lo veas parpadear, déjalo así funcionando unos minutos, para comprobar que el Z80 no se bloquea ni nada. Si no lo hace, puedes probar a "estresarlo" un poco subiendo la velocidad de reloj. Para ello, mira el fichero "relojes.v" y verás que hay un parámetro dentro del fichero que pone algo así como CLKFX_DIVIDE(25). Si cambias el 25 por otro valor, la frecuencia variará. La frecuencia que ve el Z80 viene de la fórmula: 100/CLKFX_DIVIDE , así que si bajas el valor de 25 a, por ejemplo, 20, el Z80 correrá a 5MHz. Como mínimo, el valor puede ser 2, y el más grande, 32, si mal no recuerdo. En las primeras pruebas me lié con estos valores y sin darme cuenta, estaba metiéndole al Z80... pues no sé si era 1GHz o así

Quest escribió:- Si el core "test15_z80_ext" necesita algún ajuste extra, o algún contenido específico en la SPI diferente del test15 normal o no (puesto que no me funciona)
- Qué Z80 habéis usado exactamente
- Si habéis usado todos los componentes (ferrita, condensadores, resistencias y regulador) exactamente de los valores indicados, y los puentes realizados.
El test15_z80_ext es idéntico al test15 "normal" salvo por el uso del Z80 externo, así que no hay que tocar nada de la SPI.
He usado un Z80 CMOS 20MHz, pero el test15 no la pone a más de 3.5MHz
Sí, he usado todos los componentes. En cuanto al valor de la ferrita y los condensadores: el de la ferrita no es crítico, y que tenga un valor más pequeño lo único que hace es que el Z80 meta más ruido a la FPGA. Si sospechas que el ruido que mete pudiera ser excesivo, haz una prueba: pincha la plaquita, pero usa el test15 normall. El Z80 externo recibirá alimentación, pero no será usado por el sistema, que debería funcionar normalmente. Si el test15 NO funciona, entonces el Z80 está metiendo tanto ruido que confunde al resto del sistema (esto es muy raro que pase)
En cuanto a las resistencias que hacen el pullup de algunas señales, tampoco son críticas. Un valor entre 4,7K y 10K es más que suficiente.
En cuanto a los condensadores, sus valores son los típicos para acompañar al regulador de tensión. Comprueba, antes que nada, que el regulador está dando realmente 3,3V (esto sí es importante)
Si hasta aquí todo bien, y con el z80test te funciona el invento, pero con el test15_z80_ext no te funciona, entonces mira lo siguiente:
- Antes que nada, y usando el test15 "normal", configura en la BIOS del ZX-Uno para deshabilitar el DivMMC y la NMI asociada. Configura también una ROM "normal" de Sinclair. No pongas ninguna tarjeta SD en el slot. Cuando todo vaya bien, ya lo vuelves a poner a tu gusto.
- El z80test no usa todo el espacio de memoria, tan solo 256 bytes. Esto significa que si las líneas A8-A15 no están bien soldadas, el z80test seguirá funcionando, pero el test15 no.
- Idem con algunas otras señales, tales como INT o NMI, que tampoco uso.
Cuando se enciende el ZX-Uno, el color del borde rojo indica que el procesador aún no está funcionando (de las primeras cosas que hace el Z80 en el Spectrum es poner el borde de color blanco, incluso antes de detectar si la memoria falla o no).
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- Quest
- Atari 1040 STf
- Mensajes: 900
- Registrado: 18 Jul 2013, 22:20
- Sistema Favorito: Commodore Amiga
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo SNES
- Primera consola: Nintendo NES/Clónica
- Gracias dadas: 9 veces
- Gracias recibidas: 16 veces
Re: Addon Z80 de McLeod para el ZX-Uno
Ante todo muchas gracias mcleod por dedicarle unos minutos a este tema, se agradece de verdad 
Ya he hecho algunas pruebas según tus comentarios. De momento sigo sin resultados con el test15_ext. Voy comentando:
Con el test tal como está (a 4Mhz según comentas) el led parpadea sin problemas, y se puede tirar así una hora sin bloquearse. He hecho diversas pruebas a: 6,25Mhz (divisor 16) y a 10Mhz (divisor 10). Lo he tenido así durante una media hora sin bloqueos. Evidentemente el led parpadeaba más deprisa. No he subido más de 10Mhz, puesto que el Z80 que estoy usando está marcado como de 6Mhz.
Con la plaquita pinchada, el test15 normal va perfecto. De hecho lo tengo así ya siempre, con la plaquita pinchada, porque al haber 3 hileras de pines va muy duro cada vez que quiero ponerla o sacarla, así que la dejo fija.
He usado 10K para las resistencias, así que debería ser correcto. PAra el resto de componentes he usado los valores exactos que comentabas. Respecto al regulador, lo he medido en carga, y está dando exactamente 3,28V, así que asumo que está bien. No obstante supongo que si no estuviera bien, el test del led no iría, no?
Ok, he hecho tal como comentabas (puesto que lo usaba con SD, DivMMC activado y demás). Así que he deshabilitado el DivMMC y la NMI, he sacado la SD y he puesto por defecto la ROM estándar del 48K. No ha dado resultado. Sigue sin funcionar el test15_z80_ext. Border rojo y de paper pues lo último que había en memoria (normalmente el 1982 sinclair, etc.., y no responde a nada. El led por cierto, se mantiene siempre encendido. Imagino que hasta que el Z80 no inicie, no se apagará.
Sospechaba de algo así, así que he repasado varias veces las soldaduras tanto del propio Z80 como de las tiras de pines macho de la plaquita como de las hembra del ZX-UNO. Todas están bien, incluso al microscopio. Lo único que es más difícil de comprobar son los pines de la FPGA a los que van. En principio al microscopio están bien. Con el multíetro no es fiable puesto que al posar el terminal sobre una pata puedes estar forzando a la pata a hacer contacto con el pad que tiene debajo sin darte cuenta. No obstante, simplemente rozando apenas sin fuerza, pita en todos los pines. Aun así, como estas comprobaciones no pueden ser 100% fiables, necesitaría algún otro método (vía software supongo) para comprobar si esas señales van o no.
Entiendo. Pues creo que lo que necesito entonces es comprobar qué señal o señales no están llegando, pero no se realmente cómo hacerlo. ¿Quizá modificando el z80exttest para que el led haga algo por cada señal que me indique si ésta funciona bien o no? No se... si supiera más de esto (o al menos supiera el ensamblador suficiente para hacer los tests básicos...). Si cuando tengas unos minutos puedes decirme alguna pista para testear esto, genial, si no, volveré a repasar soldaduras a ver. Y como última opción... ¿Quizá este Z80 en concreto no funcione bien en todas sus señales con 3.3V, es decir, unas si y otras no?
Gracias.

Ya he hecho algunas pruebas según tus comentarios. De momento sigo sin resultados con el test15_ext. Voy comentando:
mcleod_ideafix escribió:Una vez que lo veas parpadear, déjalo así funcionando unos minutos, para comprobar que el Z80 no se bloquea ni nada. Si no lo hace, puedes probar a "estresarlo" un poco subiendo la velocidad de reloj. Para ello, mira el fichero "relojes.v" y verás que hay un parámetro dentro del fichero que pone algo así como CLKFX_DIVIDE(25). Si cambias el 25 por otro valor, la frecuencia variará. La frecuencia que ve el Z80 viene de la fórmula: 100/CLKFX_DIVIDE , así que si bajas el valor de 25 a, por ejemplo, 20, el Z80 correrá a 5MHz.
Con el test tal como está (a 4Mhz según comentas) el led parpadea sin problemas, y se puede tirar así una hora sin bloquearse. He hecho diversas pruebas a: 6,25Mhz (divisor 16) y a 10Mhz (divisor 10). Lo he tenido así durante una media hora sin bloqueos. Evidentemente el led parpadeaba más deprisa. No he subido más de 10Mhz, puesto que el Z80 que estoy usando está marcado como de 6Mhz.
mcleod_ideafix escribió:Sí, he usado todos los componentes. En cuanto al valor de la ferrita y los condensadores: el de la ferrita no es crítico, y que tenga un valor más pequeño lo único que hace es que el Z80 meta más ruido a la FPGA. Si sospechas que el ruido que mete pudiera ser excesivo, haz una prueba: pincha la plaquita, pero usa el test15 normall. El Z80 externo recibirá alimentación, pero no será usado por el sistema, que debería funcionar normalmente. Si el test15 NO funciona, entonces el Z80 está metiendo tanto ruido que confunde al resto del sistema (esto es muy raro que pase)
Con la plaquita pinchada, el test15 normal va perfecto. De hecho lo tengo así ya siempre, con la plaquita pinchada, porque al haber 3 hileras de pines va muy duro cada vez que quiero ponerla o sacarla, así que la dejo fija.
mcleod_ideafix escribió:En cuanto a las resistencias que hacen el pullup de algunas señales, tampoco son críticas. Un valor entre 4,7K y 10K es más que suficiente.
En cuanto a los condensadores, sus valores son los típicos para acompañar al regulador de tensión. Comprueba, antes que nada, que el regulador está dando realmente 3,3V (esto sí es importante)
He usado 10K para las resistencias, así que debería ser correcto. PAra el resto de componentes he usado los valores exactos que comentabas. Respecto al regulador, lo he medido en carga, y está dando exactamente 3,28V, así que asumo que está bien. No obstante supongo que si no estuviera bien, el test del led no iría, no?
Si hasta aquí todo bien, y con el z80test te funciona el invento, pero con el test15_z80_ext no te funciona, entonces mira lo siguiente:
- Antes que nada, y usando el test15 "normal", configura en la BIOS del ZX-Uno para deshabilitar el DivMMC y la NMI asociada. Configura también una ROM "normal" de Sinclair. No pongas ninguna tarjeta SD en el slot. Cuando todo vaya bien, ya lo vuelves a poner a tu gusto.
Ok, he hecho tal como comentabas (puesto que lo usaba con SD, DivMMC activado y demás). Así que he deshabilitado el DivMMC y la NMI, he sacado la SD y he puesto por defecto la ROM estándar del 48K. No ha dado resultado. Sigue sin funcionar el test15_z80_ext. Border rojo y de paper pues lo último que había en memoria (normalmente el 1982 sinclair, etc.., y no responde a nada. El led por cierto, se mantiene siempre encendido. Imagino que hasta que el Z80 no inicie, no se apagará.
- El z80test no usa todo el espacio de memoria, tan solo 256 bytes. Esto significa que si las líneas A8-A15 no están bien soldadas, el z80test seguirá funcionando, pero el test15 no.
- Idem con algunas otras señales, tales como INT o NMI, que tampoco uso.
Sospechaba de algo así, así que he repasado varias veces las soldaduras tanto del propio Z80 como de las tiras de pines macho de la plaquita como de las hembra del ZX-UNO. Todas están bien, incluso al microscopio. Lo único que es más difícil de comprobar son los pines de la FPGA a los que van. En principio al microscopio están bien. Con el multíetro no es fiable puesto que al posar el terminal sobre una pata puedes estar forzando a la pata a hacer contacto con el pad que tiene debajo sin darte cuenta. No obstante, simplemente rozando apenas sin fuerza, pita en todos los pines. Aun así, como estas comprobaciones no pueden ser 100% fiables, necesitaría algún otro método (vía software supongo) para comprobar si esas señales van o no.
Cuando se enciende el ZX-Uno, el color del borde rojo indica que el procesador aún no está funcionando (de las primeras cosas que hace el Z80 en el Spectrum es poner el borde de color blanco, incluso antes de detectar si la memoria falla o no).
Entiendo. Pues creo que lo que necesito entonces es comprobar qué señal o señales no están llegando, pero no se realmente cómo hacerlo. ¿Quizá modificando el z80exttest para que el led haga algo por cada señal que me indique si ésta funciona bien o no? No se... si supiera más de esto (o al menos supiera el ensamblador suficiente para hacer los tests básicos...). Si cuando tengas unos minutos puedes decirme alguna pista para testear esto, genial, si no, volveré a repasar soldaduras a ver. Y como última opción... ¿Quizá este Z80 en concreto no funcione bien en todas sus señales con 3.3V, es decir, unas si y otras no?
Gracias.
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Addon Z80 de McLeod para el ZX-Uno
Quest escribió:Entiendo. Pues creo que lo que necesito entonces es comprobar qué señal o señales no están llegando, pero no se realmente cómo hacerlo. ¿Quizá modificando el z80exttest para que el led haga algo por cada señal que me indique si ésta funciona bien o no? No se... si supiera más de esto (o al menos supiera el ensamblador suficiente para hacer los tests básicos...). Si cuando tengas unos minutos puedes decirme alguna pista para testear esto, genial, si no, volveré a repasar soldaduras a ver. Y como última opción... ¿Quizá este Z80 en concreto no funcione bien en todas sus señales con 3.3V, es decir, unas si y otras no?
Gracias.
Intentaré mejorar el z80test para que pueda comprobar más cositas. De momento, sabes que te funcionan el bus de datos, la señal MREQ, IORQ, RD, WR, RESET, y CLK. Si falla alguna otra, es más probable que sea en el bus de direcciones. Probaré por ese camino, a ver qué puedo hacer

Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- Quest
- Atari 1040 STf
- Mensajes: 900
- Registrado: 18 Jul 2013, 22:20
- Sistema Favorito: Commodore Amiga
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo SNES
- Primera consola: Nintendo NES/Clónica
- Gracias dadas: 9 veces
- Gracias recibidas: 16 veces
Re: Addon Z80 de McLeod para el ZX-Uno
Intentaré mejorar el z80test para que pueda comprobar más cositas. De momento, sabes que te funcionan el bus de datos, la señal MREQ, IORQ, RD, WR, RESET, y CLK. Si falla alguna otra, es más probable que sea en el bus de direcciones. Probaré por ese camino, a ver qué puedo hacer
Genial, mil gracias

Además podrá servir a alguien más que la monte y le pase algo parecido. Visto lo visto hay bastantes que montarán la plaquita.
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Addon Z80 de McLeod para el ZX-Uno
Bueno: al final, en lugar de hacer una versión más sofisticada del z80test, he decidido hacer un core completamente diferente, que se encargue sencillamente de testear los pines del conector externo. Su nombre es "testpines" y lo encontrarás en la misma carpeta que el resto de cores de la Spartan 6. Prepara un LED, al que conectarás en serie con una resistencia de unos 220 ohmios a su ánodo.
El ZX-Uno ponlo en posición tal que el conector de expansión te quede arriba a la izquierda, el slot SD a tu izquierda, y el conector de teclado a la derecha. Usaré esta posición como referencia para lo que viene a continuación.
El cátodo del LED enchúfalo al conector de expansión, a cualquiera de los tres pines que están en la última columna, la de más a la derecha, que son todas GND. El cabo de la resistencia que está unido al ánodo del LED será nuestra punta de prueba.
Carga tld.bit en la FPGA y asegúrate de tener conectado un teclado PS/2 que te funcione con ZX-Uno. Una vez cargado, deberás ver como el LED interno del ZX-Uno parpadea, con una cadencia de unos 5 parpadeos por segundo.
Con el teclado, y usando siempre el keypad numérico, teclea el valor 00 y pulsa Intro (el Intro del keypad). Deberá apagarse el LED interno.
Teclea ahora el código 99 y pulsa Intro. Deberá volver a parpadear el LED interno.
Si todo ha ido bien, ya puedes probar con todos los pines. A cada uno de los pines se le ha asignado un código, del 01 al 36 (siempre dos dígitos), así que cuando teclees, por ejemplo, 36 (e Intro), el parpadeo se dirigirá al pin EXT36.
Los pines EXT4, EXT5 y EXT6 no existen en la realidad, así que no habrá ningún parpadeo en ellos cuando teclees 04, 05 o 06. Coge el esquemático del ZX-Uno y mira en la parte de la derecha, donde está el cableado de los tres bloques de pines que forman el conector de expansión. J11 es el bloque superior, J10 el bloque de enmedio, y J9 el bloque inferior.
Así, tendrás que ir pinchando (o tocando, según qué tipo de conector, macho o hembra, hayas puesto como conector de expansión) la punta de prueba en cada pin del conector de expansión y teclear el código que le corresponde a ese pin. Deberá parpadear. Si no lo hace, señal de que no está bien soldado. Si lo hace muy débilmente, o erráticamente, significa que probablemente hay un corto entre ese pin y algún otro (casi siempre alguno de los de al lado de él). Recuerda que los pines de la primera columna (la más a la izquierda) contienen alimentación y masa.
Si no hay parpadeo en alguno de los pines, presiona levemente la FPGA por el lado que está más cerca del bloque de pines del conector de expansión, ya que casi todos los pines están soldados en esa cara (y en la cara de la izquierda, la que mira al slot SD) a ver si así hay contacto (te tocará repasar la soldadura, claro está). Si parece más bien un cortocircuito, toca mirar con lupa.
El ZX-Uno ponlo en posición tal que el conector de expansión te quede arriba a la izquierda, el slot SD a tu izquierda, y el conector de teclado a la derecha. Usaré esta posición como referencia para lo que viene a continuación.
El cátodo del LED enchúfalo al conector de expansión, a cualquiera de los tres pines que están en la última columna, la de más a la derecha, que son todas GND. El cabo de la resistencia que está unido al ánodo del LED será nuestra punta de prueba.
Carga tld.bit en la FPGA y asegúrate de tener conectado un teclado PS/2 que te funcione con ZX-Uno. Una vez cargado, deberás ver como el LED interno del ZX-Uno parpadea, con una cadencia de unos 5 parpadeos por segundo.
Con el teclado, y usando siempre el keypad numérico, teclea el valor 00 y pulsa Intro (el Intro del keypad). Deberá apagarse el LED interno.
Teclea ahora el código 99 y pulsa Intro. Deberá volver a parpadear el LED interno.
Si todo ha ido bien, ya puedes probar con todos los pines. A cada uno de los pines se le ha asignado un código, del 01 al 36 (siempre dos dígitos), así que cuando teclees, por ejemplo, 36 (e Intro), el parpadeo se dirigirá al pin EXT36.
Los pines EXT4, EXT5 y EXT6 no existen en la realidad, así que no habrá ningún parpadeo en ellos cuando teclees 04, 05 o 06. Coge el esquemático del ZX-Uno y mira en la parte de la derecha, donde está el cableado de los tres bloques de pines que forman el conector de expansión. J11 es el bloque superior, J10 el bloque de enmedio, y J9 el bloque inferior.
Así, tendrás que ir pinchando (o tocando, según qué tipo de conector, macho o hembra, hayas puesto como conector de expansión) la punta de prueba en cada pin del conector de expansión y teclear el código que le corresponde a ese pin. Deberá parpadear. Si no lo hace, señal de que no está bien soldado. Si lo hace muy débilmente, o erráticamente, significa que probablemente hay un corto entre ese pin y algún otro (casi siempre alguno de los de al lado de él). Recuerda que los pines de la primera columna (la más a la izquierda) contienen alimentación y masa.
Si no hay parpadeo en alguno de los pines, presiona levemente la FPGA por el lado que está más cerca del bloque de pines del conector de expansión, ya que casi todos los pines están soldados en esa cara (y en la cara de la izquierda, la que mira al slot SD) a ver si así hay contacto (te tocará repasar la soldadura, claro está). Si parece más bien un cortocircuito, toca mirar con lupa.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- Quest
- Atari 1040 STf
- Mensajes: 900
- Registrado: 18 Jul 2013, 22:20
- Sistema Favorito: Commodore Amiga
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo SNES
- Primera consola: Nintendo NES/Clónica
- Gracias dadas: 9 veces
- Gracias recibidas: 16 veces
Re: Addon Z80 de McLeod para el ZX-Uno
mcleod_ideafix escribió:Bueno: al final, en lugar de hacer una versión más sofisticada del z80test, he decidido hacer un core completamente diferente, que se encargue sencillamente de testear los pines del conector externo. Su nombre es "testpines" y lo encontrarás en la misma carpeta que el resto de cores de la Spartan 6. Prepara un LED, al que conectarás en serie con una resistencia de unos 220 ohmios a su ánodo.
[...]
Bueno, pues gracias a tu estupendo test de pines, ya he hecho todo el proceso, y he probado los 36 pines con el led (menos los 3 que nos están conectados, claro).
Y ahora viene cuando la mataban...

Ahora sí que empieza a mosquear el asunto... así que, creo tras este proceso "Sherlockiano", sólo me quedan 3 hipótesis (y me da que puede ser la primera):
A- El Z80 que uso (un Toshiba T84C00AU-6, CMOS) tiene "algo" que hace que no funcione bien en esta configuración, o a 3.3V en sus señales. También pudiera ser que esté ¿capado? lo saqué de una Sega Megadrive II, la cual usa un Z80 para el sonido.
B- Alguno de los componentes que he puesto no esá bien (Aunque es raro, porque los medí antes de ponerlos. Las resistencias me daban 9.9K, los condensadores también en rango, puesto que mi multímetro tiene capacímetro hasta 20uF, y el regulador en funcionamiento me daba 3.28V. Los puentes en los pines los hice tal como estaban en el esquema que pusiste, medidos y sin cortos)
C- Algo tenemos diferente en cuanto a software. ¿Son exactamente los mismos archivos los del test15_z80_ext de la versión que hay en el repositorio y los que tú grabas en tu ZX-UNO para usar con la plaquita?
¿Alguna otra prueba que hacer para comprobar el funcionamiento del Z80? ¿O alguna otra idea para descartar?

- antoniovillena
- Amiga 1200
- Mensajes: 2013
- Registrado: 16 Abr 2012, 21:22
- Gracias recibidas: 8 veces
Re: Addon Z80 de McLeod para el ZX-Uno
El Z80 que tienes va a 6Mhz, puede que el problema esté ahí. Como estamos utilizando el chip fuera de sus especificaciones es muy importante que la frecuencia máxima soportada sea alta (20MHz), aunque luego lo vayamos a usar a 3.5MHz. Mientras más alta sea la diferencia entre la frecuencia admitida del chip y la frecuencia operativa, menos será el voltaje necesario para alimentarlo (nuestro objetivo es llegar a 3.3V partiendo de los 5V especificados).
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Addon Z80 de McLeod para el ZX-Uno
La cosa es que el z80test le funciona. El LED parpadea...
Por otra parte tenemos este post de jotego al respecto:
viewtopic.php?f=26&t=3937&start=70#p26863
En él daba el siguiente razonamiento: dado un Z80 diseñado para 5V y 20MHz, ¿podrá funcionar a 3.5MHz y 3.3V? El hizo estas cuentas:
Y deducía que es razonable esperar que un Z80, diseñado para 20MHz, 5V pueda funcionar a 3.5MHz, 3.3V
Me quedé así a cuadritos y le pregunté qué significaban esas fórmulas. Jotego respondió lo siguiente:
Pues bien, tomando estos cálculos como condición necesaria para que el Z80 de Quest funcione tenemos:
6MHz/3.5MHz = 1.71
5V/3.3V=1.5, (5V/3.3V)²=2.25
1.71 está dentro del rango [1.5 , 2.25] pero más cercano a 1.5 que a 2.25 . Si la transconductancia del integrado varía y lo hace más cercano al cuadrado de la razón de los dos voltajes, entonces lo más probable es que no funcione. Se necesitaría una versión del procesador diseñado para una frecuencia F tal que F / 3.5 > 2.25 -> F >= 7.8MHz. Una CPU de 8MHz o superior.
Mi conclusión aquí, a falta de más información, es que el test del led funciona porque no se usan todas las instrucciones del Z80, y si alguna falla por esta historia, no es de las que estamos usando.
De toda formas.... no está de más que sigamos haciendo pruebas. Una muy tonta: ¿has probado a, con el Z80 de verdad puesto y cuando ves el borde rojo, resetear con el teclado varias veces? Resetear con el reset maestro, se entiende.
Por otra parte tenemos este post de jotego al respecto:
viewtopic.php?f=26&t=3937&start=70#p26863
En él daba el siguiente razonamiento: dado un Z80 diseñado para 5V y 20MHz, ¿podrá funcionar a 3.5MHz y 3.3V? El hizo estas cuentas:
jotego escribió:20MHz/3.5MHz = 5.7
5V/3.3V=1.5, (5V/3.3V)²=2.25
Y deducía que es razonable esperar que un Z80, diseñado para 20MHz, 5V pueda funcionar a 3.5MHz, 3.3V
Me quedé así a cuadritos y le pregunté qué significaban esas fórmulas. Jotego respondió lo siguiente:
jotego escribió:La relación entre la frecuencia y la potencia sí es lineal W = f C V²
Pero en realidad yo estaba pensando en cuánto perdías de transconductancia en el transistor al bajar el voltaje. Según la tecnología y la amplitud de la señal, la relación va entre lineal y cuadrática, de ahí que calculase la razón 5/3.3 y su cuadrado. Pero, aunque la transconductancia bajase cuadráticamente, el voltaje al que se carga la siguiente etapa también está bajando (porque ya no se carga hasta 5V sino hasta 3,3V). Así que el retardo de propagación no aumentaría cuadráticamente. Estimo que el retardo aumentaría entre 5/3,3 y su cuadrado y como esa cifra es bastante menor que lo que bajamos la frecuencia (20/3,5), veo razonable esperar que funcione. Estos cálculos no aseguran que vaya a funcionar pero sí estos cálculos tan sencillos ya indicaran problemas no habría nada que hacer (es decir, son condición necesaria pero no suficiente).
Lo suyo sería simular algunas puertas en esa tecnología, que seguramente será al menos de 1,2µm, pero eso lleva bastante más trabajo. Tendríamos una respuesta más precisa pero seguiría siendo condición necesaria pero no suficente para el circuito real.
Pues bien, tomando estos cálculos como condición necesaria para que el Z80 de Quest funcione tenemos:
6MHz/3.5MHz = 1.71
5V/3.3V=1.5, (5V/3.3V)²=2.25
1.71 está dentro del rango [1.5 , 2.25] pero más cercano a 1.5 que a 2.25 . Si la transconductancia del integrado varía y lo hace más cercano al cuadrado de la razón de los dos voltajes, entonces lo más probable es que no funcione. Se necesitaría una versión del procesador diseñado para una frecuencia F tal que F / 3.5 > 2.25 -> F >= 7.8MHz. Una CPU de 8MHz o superior.
Mi conclusión aquí, a falta de más información, es que el test del led funciona porque no se usan todas las instrucciones del Z80, y si alguna falla por esta historia, no es de las que estamos usando.
De toda formas.... no está de más que sigamos haciendo pruebas. Una muy tonta: ¿has probado a, con el Z80 de verdad puesto y cuando ves el borde rojo, resetear con el teclado varias veces? Resetear con el reset maestro, se entiende.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- Quest
- Atari 1040 STf
- Mensajes: 900
- Registrado: 18 Jul 2013, 22:20
- Sistema Favorito: Commodore Amiga
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo SNES
- Primera consola: Nintendo NES/Clónica
- Gracias dadas: 9 veces
- Gracias recibidas: 16 veces
Re: Addon Z80 de McLeod para el ZX-Uno
mcleod_ideafix escribió:Pues bien, tomando estos cálculos como condición necesaria para que el Z80 de Quest funcione tenemos:
6MHz/3.5MHz = 1.71
5V/3.3V=1.5, (5V/3.3V)²=2.25
1.71 está dentro del rango [1.5 , 2.25] pero más cercano a 1.5 que a 2.25 . Si la transconductancia del integrado varía y lo hace más cercano al cuadrado de la razón de los dos voltajes, entonces lo más probable es que no funcione. Se necesitaría una versión del procesador diseñado para una frecuencia F tal que F / 3.5 > 2.25 -> F >= 7.8MHz. Una CPU de 8MHz o superior.
Mi conclusión aquí, a falta de más información, es que el test del led funciona porque no se usan todas las instrucciones del Z80, y si alguna falla por esta historia, no es de las que estamos usando.
La verdad es que yo también me he quedado "a cuadritos" al leer lo de jotego. Realmente jamás habría pensado que había una relación entre la frecuencia soportada del procesador y el voltaje que necesita para funcionar. Resulta curioso

De toda formas.... no está de más que sigamos haciendo pruebas. Una muy tonta: ¿has probado a, con el Z80 de verdad puesto y cuando ves el borde rojo, resetear con el teclado varias veces? Resetear con el reset maestro, se entiende.
A estas alturas de la historia, aunque sólo sea por resolver el misterio, tengo aún más ganas de hacer pruebas


Respecto a la prueba que comentas de probar el reset maestro con el border rojo, ya lo hice ayer varias veces por si acaso, y no funcionó. Por si acaso, lo he vuelto a hacer ahora. Bien insistentemente, muchas veces durante más de 5 minutos. Ni se inmuta. Quizá sí que se note una ligerísima interferencia en la imagen (una ligera vibración como de pqeueñas bandas horizontales que suben y bajan, apenas apreciable mientras mantengo las teclas pulsadas), pero nada más. De hecho igual sucede también con el test15 normal y no me había fijado, así que no creo que indique mucho.
Otra cosa que se me ocurre, igual estoy diciendo una tontería, pero aunque sólo sea por probar... ¿Y si "overclockeamos" o "underclockeamos" el test15_z80_ext? Es decir, modificarlo para que el Z80 vaya a más o menos Mhz de los 3.5, y ver si cambia algo. Supongo que para eso, más elementos subirán o bajarán de frecuencia aparte del propio Z80, pero bueno, para una prueba puntual no creo que pase nada, no?
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados