MetalSonic escribió:Tenéis intención de que sea compatible con el software existente para algunos de los sistemas de 8 bits, ya sea spectrum o amstrad o el que sea?
Esto es cosa de que te conteste Radastan, pero entiendo que no, que no es esa la intención. Otra cosa es que por la CPU, disposición de la pantalla, resolución, etc, algunas rutinas que haya escritas para Spectrum o Amstrad puedan ser portadas a este "engendro"

sin mayores problemas. Por ejemplo, la rutina de scroll lateral que se muestra en el video es la misma misma que uso en Spectrum. Las rutinas de scroll vertical, sin embargo, no (menos mal que la disposición de la pantalla hace que esas rutinas sean mucho más cortas de escribir).
-- 09 Oct 2012, 20:41 --
Ya tengo implementado el modo de 2 bits, con 4 niveles de grises. La codificación que estoy empleando es la trivial: 00 = negro, 01 = gris oscuro (33% de luminancia), 10 = gris claro (66% de luminancia), 11 = blanco.
Para no quemar la Spartan con según qué fotos (ehem ehem!

) he optado por usar la foto de este gatito tan mono


- gatito2bpp_1.png (172.6 KiB) Visto 9130 veces
Que después de escalarse a 256x192 y aplicarle una paleta con los 4 tonos de gris mencionados, queda así:

- gatito2bpp_2.png (8.77 KiB) Visto 9130 veces
Este bitmap es el que he codificado de la forma indicada, y lo he metido "a saco" en la VRAM. Como en el caso anterior, al principio, tengo parada a la CPU mientras hago estas primeras pruebas. Al sintetizar el nuevo circuito de video, ha salido esto:

- gatito2bpp_3.jpg (49.41 KiB) Visto 9130 veces
Un zoom de parte de la imagen (es de un monitor 1084) donde se pueden ver los cuatro matices de gris disponibles (y el efecto de las scanlines producidos por ser video progresivo)

- gatito2bpp_4.jpg (92.84 KiB) Visto 9130 veces
A la hora de implementar este circuito en lógica discreta tienes que tener en cuenta una cosa: la fase final del circuito de video, donde el grupo de píxeles leídos de memoria ha de serializarse para obtener un stream de píxeles (la señal de video propiamente dicha), usa habitualmente un registro de desplazamiento. Estos existen en forma de circuito 74XX para desplazar un bit, pero no sé si hay alguna versión que permita desplazar 2 bits o un número arbitrario de bits, en un solo ciclo de reloj.
El problema es que este modo de video de 2bpp, si se implementa de la forma en que he descrito, esto es, usando dos bits contiguos del mismo byte para representar el valor de un pixel (lo que llaman el modo "chunky") necesitará de un circuito que sea capaz de desplazar en un solo ciclo de reloj dos píxeles, y además que sea capaz de ofrecer a su salida dos bits en lugar de uno.
Una solución que se me ocurre para esto es usar dos registros de desplazamiento de 8 bits. Uno de ellos se cargará, a su debido momento, con los bits 7,5,3, y 1 de los 8 bits leídos de memoria (4 píxeles), es decir, los 4 bits más significativos del contenido del registro de desplazamiento serán esos bits que he dicho. Los otros 4 bits no habrá que cargarlos (no llegarán a verse). El otro registro de desplazamiento se cargará en sus 4 bits más significativos con el valor de los bits 6.4.2 y 0 de lo leído desde memoria. La señal de reloj se aplicará a ambos registros a la vez, y la salida de estos dos registros conformarán la señal de video de dos bits que se convertirá después a analógico y se mezclará con la señal de sincronismo.
Estos registros de desplazamiento se cargarán con nueva información leída de memoria cada 4 ciclos de reloj de pixel, en lugar de cada 8, como se hace en el Jupiter ACE y en el Spectrum.