El ZX-UNO tiene un modo de resolución de 512x192, que no es más que el heredado del viejo Timex TC2048 y similares. Es el denominado modo hi-res. Tiene otro que es el hi-colour, pero de ese hablaremos en otro momento.
El modo de 512x192 usa un total de 12288 bytes en el banco 5 de RAM (la página habitual para el video en el Spectrum 128K). Como el ZX-UNO implementa el hardware del 128K, resulta que tenemos otra página de video situado en el banco 7.
Hay un efecto muy conocido y usado en las demos, sobre todo en las que vienen de Europa del éste, llamado gigascreen, que consiste en cambiar de página de video en cada retrazo vertical. En el Spectrum la interrupción del retrazo vertical ocurre en cada campo de video, así que cambiando los contenidos de lo que se ve en pantalla estamos presentando dos campos diferentes al televisor (hablaré de televisor, pero quiero decir televisor, monitor, tarjeta de captura de video, .... , lo que useis).
Dependiendo de como procese el televisor esta señal con campos con diferente información, se puede uno encontrar las siguientes situaciones:
1. Que el televisor sólo muestre uno de los dos campos, ignorando completamente el otro.
2. Que el televisor muestre los dos campos alternativamente en las mismas posiciones, originando un parpadeo más o menos ostensible según el contenido de la pantalla
3. Que el televisor haga un desentrelazado inteligente consistente en mezclar los contenidos de ambos campos para una misma scanline, resultando una línea con colores mezcla de cada campo original (por ejemplo, en un campo un scanline es amarillo y en el otro rojo, saldría naranja)
4. Que el televisor haga un desentrelazado inteligente consistente en poner el scanline de uno de los campos justo debajo del mismo scanline pero del otro campo
Las teles LCD baratitas y con una pantalla pequeña (7'' o así) suelen optar por la opción 1. Las teles CRT y algunas LCD optan por la 2. Las teles LCD/plasma de mayor tamaño o con un procesador de entrada más sofisticado pueden optar bien por la 3 o por la 4, o incluso dejar elegir al usuario. Si se usa como sistema de visualización una tarjeta de captura de video y un programa tal como DScaler para Windows, se pueden experimentar todas estas opciones.
Pues bien: aprovechando que precisamente las teles LCD/plasma suelen optar por alguno de los dos últimos métodos, sobre todo el 4, es posible obtener, con un tiempo de ocupación de CPU ridículo, una pantalla con una resolución real efectiva de 512x384 usando dos páginas de video de 12288 bytes cada una. Un buclecito conmuta de una página a otra. La conmutación tiene esta pinta:
Código: Seleccionar todo
LD BC,$7FFD
LD A,(23388)
XOR 8
LD (23388),A
OUT (C),A
La variable del sistema BANK_M (23388) debe contener siempre una copia del valor escrito en el puerto de conmutación de bancos $7FFD. Si se está en modo 48K, es conveniente inicializar esa variable con un POKE 23388,16 para evitar cuelgues imprevistos.
Este modo de video sólo usa dos colores: fondo y primer plano, definidos en el puerto de escritura $FF. En realidad el par de colores disponible es siempre un color + su complementario. Es decir, si se elige el negro, el otro color es blanco. Si se elige amarillo, el otro es azul. Si celeste, rojo, y así sucesivamente. El color de fondo (paper) tambíén se establece para el borde. Esto es una característica del Timex. No es algo que nos hayamos inventado para el ZX-UNO.
El programa que presento es una pequeña utilidad para la línea de comandos que puede leer una lista de ficheros PNG que hayan sido creados a una resolución de 512x384 y tengan dos colores (aunque el fichero debe grabarse con color en 24 bits). Los ficheros leidos se convierten a "gigascreen" y se van engarzando en un fichero TZX que incluye el cargador del slideshow. Para poder usar el fichero resultante en el ZX-UNO se requiere convertir el TZX a TAP. Para ello son muy aconsejables las ZX Modules: http://www.zx-modules.de/ En concreto, la utilidad ZX BlockEditor. Con ella, simplemente se carga el TZX y se vuelve a grabar, eligiendo el formato "Simple tape file" (TAP). Si hay mensajes diciendo que hay bloques que no se convertirán, se ignoran.
Una cosa a tener en cuenta: el Spectrum no sabe (en el ZX-UNO podríamos solucionar esto sin problemas) qué campo se está dibujando en pantalla, por lo que a la hora de presentar la información de los dos bancos, hay un 50% de posibilidades de que los campos se muestren en el orden incorrecto, resultando en una pantalla con líneas intercambiadas entre sí. Para solucionar esto, el visro de 512x384 tiene una tecla, la 's' para intercambiar el contenido de los campos y ordenarlos de forma correcta en pantalla.
La utilidad junto con algunas pantallas se ofrece a continuación. También estaré en el repositorio, pero como este fin de semana el servidor está caido, no puedo acceder a él, así que pongo los ficheros por descarga directa al final de este post.
Para los no poseedores de un ZX-UNO, pueden hacerse una idea de cómo se verían estas pantallas usando un emulador que emule el Timex TC2048. Que yo sepa, SpecEmu, Fuse y EightyOne. Eso sí: no verán el modo de 512x384, sino 512x192. César incorporó algunas cosas del ZX-UNO en el ZesarUX, pero no sé si los modos Timex en concreto están ahí.
Y para los que sencillamente no tengan ganas de andarse con modos raros de pantalla y sólo quieren ver cómo quedaría, aquí va un collage con todas las pantallas de la demo:
Además de animar al personal a que haga sus slideshows, también quería pedir a los poseedores de un ZX-UNO que prueben la demo adjunta en sus televisores, y así comprueben qué tipo de desentrelazado hace. Las pantallas, sobre todo las dos primeras, permiten comprobar qué tal se comporta la señal de video generada por el ZX-UNO a altas frecuencias, dado que en algunos casos (por ejemplo la segunda pantalla con las barras verticales) la señal generada será la de mayor frecuencia posible. Si usais el ZX-UNO en RGB además de en video compuesto, mirad si hay mucha diferencia de nitidez en un caso o en otro.
Mirad también con atención la tercera imagen, la de la chica con el pelo negro. En la esquina izquierda superior e inferior hay dos pequeños textos que sólo pueden leerse correctamente a 512x384. El primero dice, precisamente "512x384". El otro es el logo de la persona/empresa que ha hecho la imagen, y debería leerse "Seven Heaven".
Una de las cosas que tengo que cambiar en el diseño de la ULA del ZX-UNO es el generador de sincronismos, para que saque una señal PAL entrelazada en lugar de (o además de) progresiva. Cuando eso ocurra volveré a pedir que hagais esta prueba a ver si los que ven peor la demo la ven mejor con el nuevo generador de sincronismos.
AVISO: dado que el contenido visual de esta demo puede provocar parpadeos en toda la pantalla, se desaconseja usar esta utilidad en presencia de usuarios con epilepsia.
Gracias
