Clon Superfo 128K - Manos a la obra

Sinclair QL, ZX81, +2, +3, 128K ...
jepalza

Re: Clon Superfo 128K - Manos a la obra

Mensajepor jepalza » 21 Abr 2013, 09:50

antoniovillena escribió:
mcleod_ideafix escribió:No, no debería ser así. ¿Tienes bien puestos los jumpers para el modo Amstrad? Parece ser que tal y como está hecha la huella de J13, el modo Sinclair es fácil de jumpear, pero el de Amstrad no.


Hay que hacer un puente entre los pines 1 y 5 del conector para que funcione el modo Amstrad. El diseño de ese conector no era lineal, sino cuadrado de 2x2. Y no debería ser de 5 pines sino de 4, Superfo se equivocó al poner la huella, por eso el quinto pin no está conectado a nada. Pero casualidades del destino ambos errores se contrarrestan si puenteas los pines 1 y 5, y la tira de pines lineal tiene exactamente la misma funcionalidad que la cuadrada que se pretendió diseñar (eso sí, con un pin mas).


Vale, no entendía eso. Como veía 5 pines en la placa, pero cuatro en el esquema, pensé que era otra modificación de última hora. Lo que hacía, era quitar los punetes, y dejarlo sin ellos. Ahora, he hecho lo del puente 1-5, he probado, pero me da un error de "mirroring" o algo por el estilo, y se resetea.


Edito: acabo de mirar las "huellas" de la placa, pero el Pin5 no conecta a nada, por lo tanto, es como no conectar nada. No entiendo bien coma va. Se supone que hacemos X0 a Banco0 y X1 a banco2 en modo Sinclair, pero en modo Amstrad, ¿cómo sería? ¿invertido? O sea, X0 a B2 y X1 a B0... :?:


-- Actualizado 21 Abr 2013, 08:51 --

superfo escribió:## Have you changed the jumpers J13 Between the tests?

Yes, I changed the jumper.
Maybe it relate to the border problem.


Bienvenido, lo primero. :welcome

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon Superfo 128K - Manos a la obra

Mensajepor antoniovillena » 21 Abr 2013, 09:58

superfo escribió:Yes, I changed the jumper.
Maybe it relate to the border problem.


Or maybe you have 2 separate problems. Your "border problem" not only affect the border, also affect to the inner area. It's very strange, only affects to the first third on the screen, swapping the Red and Green components. I think that it's easy to resolve this problem (or maybe) by tracking backwards the video signal.

But the corruption in RAM is a more complex problem. I think that this is the reason because you can't boot with the +2A/+3 ROM. I will try the same test tomorrow to confirm that this problem only affect you.

-- Actualizado 21 Abr 2013, 09:02 --

jepalza escribió:Vale, no entendía eso. Como veía 5 pines en la placa, pero cuatro en el esquema, pensé que era otra modificación de última hora. Lo que hacía, era quitar los punetes, y dejarlo sin ellos. Ahora, he hecho lo del puente 1-5, he probado, pero me da un error de "mirroring" o algo por el estilo, y se resetea.


Perdón, no me he explicado bien. El puente 1-5 debes hacerlo de forma permanente, independientemente de si estás en modo Sinclair o Amstrad. Pero los dos jumpers siempre deben de conectarse, o en una posición o en otra.

  • Posición Sinclair: Jumper 1 en pines 1-2, Jumper 2 en pines 3-4
  • Posición Amstrad: Jumper 1 en pines 2-3, Jumper 2 en pines 4-5

-- Actualizado 21 Abr 2013, 09:08 --

jepalza escribió:Edito: acabo de mirar las "huellas" de la placa, pero el Pin5 no conecta a nada, por lo tanto, es como no conectar nada. No entiendo bien coma va. Se supone que hacemos X0 a Banco0 y X1 a banco2 en modo Sinclair, pero en modo Amstrad, ¿cómo sería? ¿invertido? O sea, X0 a B2 y X1 a B0... :?:


Exacto. Sería el equivalente a un conmutador cruce (DPDT), o al puente que existe en los Spectrums para aceptar ROMs NEC o Hitachi.
Última edición por antoniovillena el 21 Abr 2013, 10:09, editado 1 vez en total.

jepalza

Re: Clon Superfo 128K - Manos a la obra

Mensajepor jepalza » 21 Abr 2013, 10:09

antoniovillena escribió:Perdón, no me he explicado bien. El puente 1-5 debes hacerlo de forma permanente, independientemente de si estás en modo Sinclair o Amstrad. Pero los dos jumpers siempre deben de conectarse, o en una posición o en otra.

  • Posición Sinclair: Jumper 1 en pines 1-2, Jumper 2 en pines 3-4
  • Posición Amstrad: Jumper 1 en pines 2-3, Jumper 2 en pines 4-5


Vale, como no me costaba nada, lo he probado "a voleo" y es lo que comentas. Ya lo he descubierto, resultado: OK en modo Amstrad, sin errores... =D>

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon Superfo 128K - Manos a la obra

Mensajepor antoniovillena » 21 Abr 2013, 10:14

jepalza escribió:Vale, como no me costaba nada, lo he probado "a voleo" y es lo que comentas. Ya lo he descubierto, resultado: OK en modo Amstrad, sin errores... =D>


Es un alivio comprobar que a veces las cosas funcionan. :-({|=

@superfo. Good news, jepalza do the paging tests and it works.

jepalza

Re: Clon Superfo 128K - Manos a la obra

Mensajepor jepalza » 21 Abr 2013, 10:14

antoniovillena escribió:@superfo. Good news, jepalza do the paging tests and it works.

In both modes, Sinclair and Amstrad, are OK.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
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: Clon Superfo 128K - Manos a la obra

Mensajepor mcleod_ideafix » 21 Abr 2013, 10:15

Más pruebas:

He conseguido meter en la RAM y VRAM un snapshot de la segunda parte de la Shock Megademo. La ROM está ligeramente parcheada, para que nada más resetearse el Z80, salte a una zona donde habitualmente sólo hay FF, y en la que ahora hay un pequeño código que carga los registros según los dejó el snapshot, para acto seguido, saltar a la posición de código donde se paró en el momento de hacer el snapshot (formato SNA).

Después de pelearme con la implementación (incompleta) del bus flotante, y que hacía que la rutina de interrupción de IM 2 no se leyera bien del bus de direcciones, tras haberlo arreglado, esto es lo que se puede ver (6 segundos, 300 frames):

(Es casi 1MB de GIF animado: hacer clic en la imagen para verla)

Imagen

Tanto en la imagen de arriba (que es una composición en realidad de tres imágenes) como en la animación, se observa que hay una anomalía hacia el centro de la pantalla. En la composición se puede calcular fácilmente qué columna es.
La columna afectada es la que corresponde a la columna de letras F l G m I ... etc... Contando desde la primera columna, ésta hace la número 16 y se corresponde a los píxeles de coordenadas X desde la 120 a la 127.

Por otra parte, hay que recordar que los datos que se ven en pantalla son los que se han leído de VRAM 8 píxeles antes. DIcho de otra forma: el contador de píxeles que está implementado en el HC4040 está adelantado 8 cuentas respecto de lo que se ve en pantalla: cuando en pantalla se están pintando los píxeles 120 a 127, el HC4040 está contando de 128 a 135.

Y lo malo es que cuando el contador pasa de 127 a 128 hay un megaglitch (cambian 8 bits) que vuelve loco al reloj de la CPU, generando ciclos de bus de escritura desiguales. Lo que está ocurriendo en el momento del glitch es la ejecución de la instrucción PUSH DE. Los dos accesos a memoria para guardar el valor de DE son afectados por sendos glitches.

En la figura he enmarcado entre los dos cursores la ejecución completa de PUSH DE: se lee de memoria: M1 baja indicando un ciclo de búsqueda de instrucción, se lee D5 del bus de datos desde la ROM, y luego hay tres (no dos) ciclos de refresco. Después están los tres ciclos de reloj de la primera escritura (el byte alto de DE, que vale 2C) y luego otros tres (para guardar el byte bajo de DE, que también vale 2C). Esas dos operaciones parece que duran dos ciclos de reloj en lugar de tres, y eso es porque uno de los ciclos es en realidad un glitch que no debería estar ahí.

Imagen

Mirándolo con atención... me da que no es por culpa del cambio de 127 a 128, sino por algo más sutil. Fíjate que el glitch ocurre cuando hay una escritura a VRAM, y dicha escritura hace que ocurra un ciclo de reloj (muy pequeño, casi imperceptible) en la CPU. Eso puede hacer que la escritura tenga lugar, pero no en la dirección deseada, sino en aquella que se está usando en este momento para pintar la pantalla. De aquí podría venir la basurilla que a veces se veía.

Sea como fuere: ¿podeis comprobar si es posible, esta demo en el clon físico y ver si se pasa lo mismo que en la simulación?
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

superfo
Dragon 32
Dragon 32
Mensajes: 18
Registrado: 21 Abr 2013, 09:01
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Nintendo GameBoy

Re: Clon Superfo 128K - Manos a la obra

Mensajepor superfo » 21 Abr 2013, 10:27

antoniovillena escribió:@superfo. Good news, jepalza do the paging tests and it works.


In both modes, Sinclair and Amstrad, are OK.


Great! now only make CF work.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon Superfo 128K - Manos a la obra

Mensajepor antoniovillena » 21 Abr 2013, 10:53

mcleod_ideafix escribió:Sea como fuere: ¿podeis comprobar si es posible, esta demo en el clon físico y ver si se pasa lo mismo que en la simulación?


Claro que sí. Otra cosa más que apunto para hacer la semana que viene. Claro que es posible, el puerto EAR funciona (aunque yo todavía no lo he probado).

Haciendo un análisis del circuito, el glitch aparece porque se reanuda el reloj justo antes de que éste cambie de 0 a 1.

Hay varios retardos:
  • El que produce el ripple counter, llamémoslo Ta o desfase entre las señales HCa y HC0.
  • El que produce el inversor U24E, llamémoslo Tinv.
  • El Thold del biestable U21A.
  • El retardo de la puerta AND U17B, llamémoslo Tand.

Se tiene que cumplir:
Ta<=Tinv+Thold+Tand

Para que no se produzca el glitch. Este fenómeno no ocurre en el clon 48 debido a que entre HCa y HC0 no existe ningún desfase (hay un HC161 que no es ripple counter)

jepalza

Re: Clon Superfo 128K - Manos a la obra

Mensajepor jepalza » 21 Abr 2013, 11:03

superfo escribió:Great! now only make CF work.

At least, in 128k mode. In 48k mode, already works, with any glitches, but, anyway, works. :?
Maybe, error was in ROM version only. ¿old version 48k vs new version 128k?

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon Superfo 128K - Manos a la obra

Mensajepor antoniovillena » 21 Abr 2013, 11:07

De todas formas, viendo las hojas de características del 74HC4040 (contador) y del 74HC04 (inversor) prácticamente podemos descartar que ocurra. El "adelanto" de HCa con respecto a HC0 es de 8ns; sin embargo una puerta inversora tiene un retardo de 7ns, lo que prácticamente "sincroniza" las señales CLK7 y HC0 (a menos que Thold+Tand sean menores de 1ns).


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados