Interioridades del sistema de video del QL

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Interioridades del sistema de video del QL

Mensaje por mcleod_ideafix » Mié Jun 20, 2012 7:33 am

Esto viene del hilo "soñando despierto"...

mcleod_ideafix escribió:Ahora hay que mover esos gráficos: el 68008 va a 7.5MHz, sí, pero hay que ver cúanto se come la contención (que en el QL, al haber sólamente un banco, afectará a toda la memoria).

Matizo: aunque hay dos bancos de memoria, con su CAS independiente, tanto el bus de direcciones de ambos bancos como el bus de datos están unidos, así que a todos los efectos, hay un único banco de memoria, y todo él es memoria contenida (desde $20000 hasta $5FFFF). Toda expansión de memoria a partir de $60000 es memoria no contenida. Esto hay que tenerlo en cuenta porque, al menos el QL básico, no lo percibiremos con una velocidad de 7.5MHz, sino menos (en el peor de los casos, la velocidad percibida será de unos 3MHz). Esto se verá más claro en un momento.

mcleod_ideafix escribió:Necesito un poquiiiiito de tiempo para hacer mis pruebas, a ver a qué llego... :)

Bueno, pues ya he hecho algunas medidas. Clic para ampliar.

Imagen

NOTA: el dibujo son en realidad dos gráficos independientes. En la parte superior se representa una línea de video con sus temporizaciones medidas en microsegundos y en ciclos de reloj del reloj de pixel. El valor que no está entre paréntesis corresponde a un reloj de pixel de 5 MHz, y el que está entre paréntesis, a un reloj de 10 MHz (que por lo que he visto después, es lo más probable).
En la parte inferior se muestra un detalle de lo que sería el comienzo de una línea de video, desde que termina el pulso de sincronismo horizontal, hasta que comienzan a pintarse unos cuántos píxeles (en modo 8). Aquí se detalla el mecanismo de acceso a la VRAM por parte de la ULA 1, y cómo estos accesos provocan contienda en la CPU.

Estas son mis conclusiones (preliminares):

- El QL da una señal de video en formato PAL, progresiva, y (importante) legal y compatible. Es decir, existen pulsos de pre y post ecualización en el sincronismo de cuadro, tal y como se espera en una señal PAL. Eso sí: no hay campo par e impar. Es una señal PAL progresiva. En un monitor que no haga desentrelazado inteligente aparecerán "scanlines".

- El reloj maestro, externo a la ULA 1, es de 15MHz. De aquí se generan dos relojes internos: uno de 10MHz dividiendo el reloj maestro entre 1.5 y otro de 7.5MHz, dividiendo entre 2.

- El reloj de pixel básico es el de 10MHz. Este se emplea para la temporización de varias señales de acceso al banco contenido. En el dibujo aparece como reloj base uno de 5MHz, que es el que correspondería al modo 8. De todas formas, estoy seguro de que internamente usa siempre 10MHz y sólo al pintar píxeles es cuando tiene en cuenta si ha de hacerlo cada uno o dos ciclos de reloj (de 10MHz). Si he puesto ese es simplemente para ilustrar la cantidad de ciclos de reloj de pixel que dura cada porción de la señal de video. Entre paréntesis están los valores correspondientes a un reloj de 10MHz.

- El acceso a VRAM para generar la imagen, como se ve, consta de una ráfaga de 4 lecturas en direcciones consecutivas (en el Spectrum son 4 accesos también, pero consecutivos dos a dos, es decir, dos ráfagas de dos lecturas cada una). Con esto se leen 32 bits. En modo 8 dan para pintar 16 píxeles. En modo 4 dan para pintar 32 píxeles. El tiempo en que se tardan en pintar 16 píxeles en modo 8, o 32 píxeles en modo 4, es el mismo, así que el patrón de acceso a memoria es el mismo independientemente del modo de video en el que estemos.

- La señal VDA detiene al procesador mientras la ULA 1 está accediendo a la memoria de video. En el dibujo se puede ver por tanto el patrón de contención de CPU. VDA es activa a nivel alto, es decir, el procesador se para cuando VDA=1. El reloj del procesador nunca se para. Como se ve, durante los 51.2us que dura una línea de pantalla, el procesador está parado 10 de cada 16 ciclos del reloj de pixel de 10MHz. Esto es, está activo durante el 37.5% del tiempo total (en el Spectrum está parado en 12 de cada 16 ciclos del reloj de pixel de la ULA). De ahí (de este 37.5%) es de donde viene la velocidad percibida de la CPU durante los tramos de tiempo donde exista contienda.

- Existe una interrupción por retrazo vertical, que se produce al terminar el tren de pulsos de pre ecualización y comenzar el tren de pulsos de sincronismo vertical. Desde que se dispara la interrupción hasta que comienza a dibujarse de nuevo la pantalla pasan unos 3 ms. Durante ese tiempo (unos 22500 ciclos de reloj de CPU), el acceso a memoria no produce contención.

- El formato de la señal de video es como sigue:
28 líneas de overscan superior. Estas líneas no contienen información de video. La línea 29 comienza, en la mayoría de los monitores (de tubo) en un área que aún no es visible (comienza a verse información a partir de la línea 32 de video, que se corresponde con la línea 3 de píxeles)
256 líneas con información de video. En cada una, la información válida de píxeles dura unos 51.2us, lo que significa que dicha información ocupa practicamente toda la pantalla, perdiéndose a izquierda y derecha. La cantidad de píxeles perdidos dependerá del monitor.
28 líneas de overscan inferior, incluyendo aquí el intervalo de ecualización, sincronismo vertical, etc.
En total, 312 líneas, con 320 (modo 8) o 640 (modo 4) píxeles cada una (incluyendo el intervalo de hblanking)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Interioridades del sistema de video del QL

Mensaje por radastan » Mié Jun 20, 2012 10:50 am

mcleod_ideafix escribió:- Existe una interrupción por retrazo vertical, que se produce al terminar el tren de pulsos de pre ecualización y comenzar el tren de pulsos de sincronismo vertical. Desde que se dispara la interrupción hasta que comienza a dibujarse de nuevo la pantalla pasan unos 3 ms. Durante ese tiempo (unos 22500 ciclos de reloj de CPU), el acceso a memoria no produce contención.


Es decir, tenemos dos ciclos claramente diferenciados de acceso a memoria, en uno de ellos la CPU va a tope.

Esto es muy importante, ya que según lo que sea crítico en nuestro programa/juego deberíamos ejecutarlo durante el tiempo de no contención. ¿me equivoco?

22500 ciclos de reloj dan para muchas instrucciones, lo suyo sería realizar el volcado a pantalla en el retrazo y de arriba a abajo, así no tenemos efecto "fliker" y podemos generar la pantalla por delante del trazado de la pantalla, teniendo tiempo para gestionar el teclado, movimiento, etc, antes del siguiente retrazo.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Responder

¿Quién está conectado?

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