Por supuesto esta tarde lo probaré y os grabaré las demos funcionando en mi Vic20, aunque en los videos de youtube se ve claramente como la pantalla inicial es un Vic20.
De todas formas, me he estado documentando un poco más y os cuento como funciona el asunto.
El Vic20 lleva un chip dedicado llamado VIC-I (Video Interface Chip), que se ocupa de las operaciones de entrada salida. Este chip es el antecesor del VIC-II que monta el C64 y proviene de una consola de commodore que no se vendió nada. De hecho, el Vic20 se diseñó para dar salida a los chips de RAM sobrantes de la fabricación de un modelo antiguo de commodore PET y a los chip sobrantes VIC de esta consola.
Dicho chip se encarga de liberar al 6502 de algunas funciones como la gestión de la imagen, el sonido, joystick, lapiz óptico etc.
Evidentemente la función más importante son los gráficos.
En cuanto a la gestión de la RAM, el VIC usa tres areas de memoria:
- Video RAM
- Colour RAM
- Character RAM/ROM
Video RAM
En un Vic20 sin expandir este chip se reserva las posiciones $1E00-$1FFF, pero si hay más memoria RAM el sistema mueve esta área a $1000-$11FF.
Colour RAM
Como su nombre indica sirve para asignar los colores a los caracteres y se situa en $9600-$97ff en un VIC20 sin ampliar y en $9400-$95ff en un VIC20 ampliado, aprovechando sólo los 4 bits inferiores de cada byte!!!, 3 bits para el color y un cuarto bit para seleccionar el modo multicolor.
Siguiendo la tónica reinante en su diseño, programar los gráficos del Vic20 es totalmente de locos.
No posee ningún modo gráfico, ya que no cabría en los 512 bytes que tiene reservados para la memoria de vídeo + 512 bytes para la colour RAM, en lugar de ello se redefinian los caracteres al vuelo, permitiendo de esa manera una "Alta resolución" de 184*176 con 8 colores por caracter tal y como ocurría en el Spectrum.
La explicación de las pantallas que hemos visto, es que existe un modo multicolor, asignando el bit 4 del color que corresponda a cada caracter. Cuando asignamos ese bit 4 activamos el modo multicolor que lo que hace es agrupar los píxeles de ese caracter de dos en dos de la siguiente manera:
00 = screen color
01 = border color
10 = character color
11 = auxiliary color
De esta manera se pueden alcanzar hasta 4 colores por caracter reduciendo a la mitad la resolución, por lo que el modo multicolor soportaría una resolución de 92x176 píxeles, todo ello redefiniendo caracteres al vuelo.
Es decir que en este modo, cada pareja de píxeles horizontal representa un valor de 2 bits que indica el color combinando los valores del caracter, del borde, del fondo y del color auxiliar.
El screen color y el auxiliary color hay 16 colores posibles:
0 - 0000 Black
1 - 0001 White
2 - 0010 Red
3 - 0011 Cyan
4 - 0100 Purple
5 - 0101 Green
6 - 0110 Blue
7 - 0111 Yellow
8 - 1000 Orange
9 - 1001 Light orange
10 - 1010 Pink
11 - 1011 Light cyan
12 - 1100 Light purple
13 - 1101 Light green
14 - 1110 Light blue
15 - 1111 Light yellow
Para el character color y el border color hay 8 colores posibles:
0 - 000 Black
1 - 001 White
2 - 010 Red
3 - 011 Cyan
4 - 100 Purple
5 - 101 Green
6 - 110 Blue
7 - 111 Yellow
Por lo que al final tenemos la posibilidad de seleccionar 4 colores de entre los 16 posibles por cada cuadro de 4x8.
Como veis es factible pero una auténtica locura, por lo que es alucinante que los juegos que he visto funcionen tan bien.
Referencias:
http://tinyvga.com/6561
http://www.atarimagazines.com/compute/i ... he_VIC.php