lunes, 4 de abril de 2011

Entrelazando que es gerundio - Amstrad CPC

Mi modesta aportación a "Batman Forever"
Mucho tiempo ha pasado desde mi última publicación. Y muchas cosas han acontecido en el mundillo cepeceril. Cosas que han revolucionado el panorama demoscene retro y ha meneado unos cuantos cimientos. Me refiero a la demo para Amstrad CPC denominada "Batman Forever". Producción en la que he tenido el gusto de participar aportando una pantallita (y otra que al final fue desechada) junto a Rhino (gran programador) y su equipo y que no ha pasado desapercibida.

Ganadora de la pasada "ForeverC 2011", demo del año en "Pouet.net"... En fin... 

Primera imagen que hice para "Batman Forever".
Al final fue desestimada a favor de "Joker Vs Batman"
Para los que no los conozcan, me refiero al grupo "Batman Group", "sceners" amigueros que le han echado un par de huevos al asunto y han abierto los ojos de muchísima gente en cuanto a la potencia real del Amstrad CPC y lo mal aprovechado que ha estado siempre. Y tiene cojones el asunto que hayan sido un grupo destacado en la programación de demos para Commodore Amiga, los que hayan abierto las puertas hacia el cielo de nuestra plataforma y que haya inundado de envidia (alguna sana y otras no tanto) a más de uno.

Pero ya se han escrito ríos de tínta al respecto (incluso hay una entrevista circulando ya, en inglés y otra está al caer) y no es el tema que nos ocupa en esta ocasión.

Así que felicito al grupo "Batman Group" (y a mí mismo por mi modesta aportación) y paso a otros asuntos. Por donde iba... ejem... a sí... EL ENTRELAZADO leches.

Este tipo tiene cara de cabreo... Y mucha resolución.
¿Alguien no sabe lo que es el entrelazado? Resumiéndolo, diremos que es la última tontería aplicada al Amstrad CPC que me pone palote, jajajajajaja. Pero veamos por qué tanto palotismo.

Muchos os habéis dado cuenta que los televisores y los monitores de ordenador tienen muchas cosas en común. Entre esas cosas que comparten se encuentra la capacidad de mostrarnos "animaciones" o secuencias animadas... Vamos, que se mueven cosas en la pantalla. Esta sensación de movimiento viene determinada por el transcurrir de imágenes estáticas, una tras otra, a gran velocidad (en el caso Europeo o sistema PAL, 50 veces por segundo). En un solo segundo, la pantalla de nuestro monitor (o del televisor) bombardea nuestra retina 50 veces con 50 imágenes distintas, que colocadas una tras otra en el transcurso del tiempo generan la sensación de que "algo se mueve suavemente" ante nosotros.

Estamos en CRYSIS... De verdad, que es un Amstrad CPC.
¿Aún no os lo creéis?
Cada una de estas imágenes es lo que se denomina "frame" o "cuadro" en castizo. Por lo tanto, se suele decir que la imagen de televisión nos llega a 50 fps (frames per second - cuadros por segundo) o que se refresca a 50 hz (50 ciclos por segundo). Algún día os explicaré por qué los emuladores que usamos en nuestras PeCeras actuales no muestran las imágenes tan suaves y fluidas como el ordenador original (los antiguos equipos muestran la imagen a 50 hz mientras que los monitores VGA actuales a 60 hz como mínimo).

Ya sé que es un tema denso, así que no me voy a extender más... Hay amplia información por ahí mucho más detallada al respecto.

Teniendo esto más o menos claro, tenemos que entender otro concepto nuevo: SCANLINE. A modo muy simple, una imagen está dividida en líneas horizontales, una sobre otra, como si de ladrillos que componen una pared se tratase. Estos scanlines tienen una duración (ancho) determinado y el total de scanlines superpuestos conforman el frame (cuadro). Repito que lo he simplificado muchísimo, pero ahora lo entenderéis mejor.

¿No os mola esta pilingui a todo color?
El Amstrad CPC, en su modo de pantalla "Mode 1", tiene una resolución de 384x272 píxeles como máximo visibles. Para que lo entendáis, eso significa que un frame o cuadro, está compuesto por 272 scanlines de altura y cada scanline tiene 384 píxeles de ancho. Repito que es algo más completo que esto, pero así lo entenderéis perfectamente.

Pues el ENTRELAZADO sirve, entre otras cosas, para simular un aumento de la resolución. En el caso que nos trae, pasaríamos de 384x272 píxeles a 384x544 píxeles.¿Cómo? Pues si cada frame tiene 272 scanlines de altura como hemos dicho antes, pues lo que se hace es dividir la imagen de origen de mayor resolución (544 scanlines) en dos partes o frames. En el primer frame pondremos los scanlines impares y en el segundo frame los scanlines pares. El inteligente lector pensará entonces que algo falla aquí, pues si empleamos 2 frames para representar una sola imagen, estamos reduciendo la tasa de refresco a 25 fps (en lugar de 50 fps). Y tiene toda la razón. Los modos entrelazados aumentan la resolución a cambio de reducir la tasa de refresco a la mitad, lo cual genera un ligero parpadeo en la imagen (por reducir a la mitad el número de imágenes por segundo que llega hasta nuestros ojos).

Venga, más cerquita, que no se diga...
Pero a pesar del ligero parpadeo, usado con astucia, puede generar verdaderas maravillas en sistemas limitados en color y resolución (como el Amstrad CPC). 

Una de las características del chip de vídeo del Amstrad (el famoso CRTC) es la capacidad de generar un entrelazado automático que no requiere de mantenimiento por parte del procesador. Si bien es una característica a explorar, pues esta capacidad aparentemente difiere entre distintas revisiones de CRTC. En nuestro caso, hemos hecho las pruebas con un CRTC0 (el que tiene mi Amstrad CPC6128). Habría que hacer pruebas para el resto de versiones de CRTC (1,2, preASIC y ASIC); todo se andará.

El modo entrelazado "automático" se consigue en el CPC toqueteando el registro 8 (R8) del CRTC. Por supuesto, que no todo iban a ser ventajas. Además del problema del "parpadeo", en el caso del Amstrad CPC, implica tener 2 copias de la misma imagen (una con las scanlines pares y otra con las impares) en memoria. Como hablamos de una imagen en Overscan (pantalla completa), cada frame requiere de 25.5Kbytes de RAM, que al ser una imagen entrelazada se multiplica por 2, lo que nos deja que mostrar una imagen de este tipo a pantalla completa en el Amstrad CPC requiere de 51Kbytes de RAM, osea, casi toda la RAM disponible en el primer banco de memoria (64Kbytes)...

Scarlett, ven a mí cariñín.
Pero bueno, considerando el resultado, merece la pena. Además de las imágenes que acompañan al artículo, os dejo un vídeo para que veáis que aquí no hay ni trampa ni cartón.

Las muestras que veis usan una resolución entrelazada de 384x544 pixeles (que voy a bautizar 544i, jejejeje) y únicamente 4 colores (los que permite el Mode 1 del Amstrad CPC). Sin embargo, gracias al entrelazado y el efecto "mezcla" entre imágenes y eligiendo cuidadosamente esos 4 colores, da la sensación de que tenemos una imagen de muchísimos más... ¿O alguno de vosotros es capaz de asegurarme que en esas imágenes sólo hay 4 colores? Yo os lo prometo, que sólo hay 4.

Si es que para el que aún no se haya enterado, el CPC es mucho CPC. Y tener una paleta de colores "viva" (o saturada) y la mayor resolución de pantalla en el mundo de los 8 bits (en modo entrelazado llega a los 768x544 píxeles, casi 800x600!!!!) tiene sus ventajas.

Juzgad vosotros mismos.

Un saludo fieras y hasta pronto.

8 comentarios:

  1. Great DaD.
    Now, a "gray scale" image using Mode 2 (768x544) !!! ;)

    A true PAL Overscan is 768x576.
    Can you handle it for no border on flat CRT TV or LCD panels ?

    ResponderEliminar
  2. HiToTO! Here you are a Mode 2 768x544 screen: https://lh5.googleusercontent.com/_u2ca ... 011366.jpg

    You can see my full photo gallery with mode 1 and mode 2 samples (768x544) here:
    https://picasaweb.google.com/dadcezgs/N ... rs384x544#

    Thanks for comments guys!!!

    Cheers

    ResponderEliminar
  3. Hi PulkoMandy. This Saturday we celebrate "Retro Encounter" in Madrid. We are preparing an image viewer for the event, so next week we'll have a DSK available for download. :D

    Cheers.

    ResponderEliminar
  4. Well, TotO, when we will get a LCD TV, we will test the limits of the overscan, but using CRT TVs and using the regular maximum overscan of 272 pixels (544 interlace), the TV lose a few scanlines in the top and in the bottom of the TV.

    And we need test the deinterlace in LCD TVs, too. Although the pictures of this post are PAL, we have tested in NTSC mode, too and the interlace fx is more easy for the eyes in it.

    ResponderEliminar
  5. Hi SyX,
    It's the same problem on Amiga using interlaced display.
    60Hz refresh rate reduce a bit the flickering, but not enough.
    Vertival light and dark pixels proximity produce this effect. (try using 0 to 13 colors)
    Chance, on a LCD TV the picture is scan doubled and you don't have this problem. (but you can see the "dithering")

    Thanks DaD for the link ! ;)

    ResponderEliminar
  6. Of course TotO, i had a tool in my A1200 that put a copperlist with colours not too distant to reduce the flicker when i was using an interlace workbench.

    These pictures doesn't flicker much because DaDman has choosen a great palette, but using during a long time make the eyes tired :P

    It's better in NTSC (tested) and i hope totally stable on a LCD TV (and of course, the dithering how you said, will be visible) and maybe in a green monitor because they are slower, jejeje.

    It looks nice too in the emulator when i am using the same refresh rate of my lcd, but

    ResponderEliminar
  7. https://www.youtube.com/watch?v=zsjTpFR0oYQ

    hope you love sam coupe stuff as it can run zx spectrum at the full 6MHz

    ResponderEliminar