Este artículo necesita citas adicionales para su verificación . ( marzo de 2023 ) |
El VIC-II ( Video Interface Chip II ), conocido específicamente como MOS Technology 6567/6566/8562/8564 ( versiones NTSC ), 6569/8565/8566 ( PAL ), es el microchip encargado de generar señales de video Y/C (combinadas con video compuesto en el modulador de RF ) y señales de refresco de DRAM en las computadoras hogareñas Commodore 64 y Commodore 128 .
El VIC-II, sucesor del MOS Technology VIC original utilizado en el VIC-20 , fue uno de los chips personalizados clave en el Commodore 64 (el otro era el chip de sonido MOS Technology 6581 ).
El chip VIC-II fue diseñado principalmente por Albert Charpentier y Charles Winterble [1] en MOS Technology, Inc. como sucesor del MOS Technology 6560 "VIC" . El equipo de MOS Technology no había logrado producir dos chips gráficos llamados MOS Technology 6562 para la computadora Commodore TOI y MOS Technology 6564 para la Color PET, debido a limitaciones de velocidad de la memoria. [2]
Para construir el VIC-II, Charpentier y Winterble realizaron un estudio de mercado de los ordenadores domésticos y los videojuegos actuales , enumerando las características actuales y las características que querían tener en el VIC-II. La idea de añadir sprites surgió del ordenador TI-99/4A y su coprocesador gráfico TMS9918 . La idea de soportar la detección de colisiones surgió de Mattel Intellivision . El Atari 800 también fue explorado en busca de las características deseadas, en particular el modo de mapa de bits, que era un objetivo deseado por el equipo de MOS ya que todos los principales rivales de ordenadores domésticos de Commodore tenían gráficos de mapa de bits mientras que el VIC-20 sólo tenía caracteres redefinibles. [3] [4] Aproximadamente 3/4 de la superficie del chip se utiliza para la funcionalidad de sprites. [5]
El diseño del chip se diseñó en parte utilizando herramientas de automatización de diseño electrónico de Applicon (ahora parte de UGS Corp. ) y en parte de forma manual sobre papel vitela . El diseño se depuró en parte mediante la fabricación de chips que contenían pequeños subconjuntos del diseño, que luego podían probarse por separado. Esto fue fácil ya que MOS Technology tenía su laboratorio de investigación y desarrollo y su planta de semiconductores en la misma ubicación. El lote inicial de chips de prueba resultó casi completamente funcional, con solo un sprite defectuoso. [6] El chip se desarrolló en tecnología de 5 micrómetros. [3]
El trabajo en el VIC-II se completó en noviembre de 1981, mientras que Robert Yannes trabajaba simultáneamente en el chip SID . Ambos chips, al igual que el Commodore 64 , se terminaron a tiempo para la feria Consumer Electronics Show, el primer fin de semana de enero de 1982. [7]
Algunos de los modos gráficos del 64 son realmente extraños y no tienen análogos en Atari o Apple, como la capacidad de cambiar el color de los personajes en función de la pantalla. Eso nos dio una gran capacidad de color que no se había explotado.
— Craig Nelson de Epyx, 1986 [8]
Tenga en cuenta que las direcciones de registro que aparecen a continuación se indican tal como las ve la CPU en un C64. Para obtener los números de registro como se indican normalmente en las hojas de datos (es decir, comenzando con 0), se debe omitir el "D0" inicial.
El VIC-II se programa manipulando sus 47 registros de control (frente a los 16 del VIC), cuya memoria está asignada al rango $D000 – $D02E en el espacio de direcciones del C64. De todos estos registros, 34 se ocupan exclusivamente del control de sprites (los sprites se denominan MOB, de "Movable Object Blocks", bloques de objetos móviles) en la documentación del VIC-II). Al igual que su predecesor, el VIC-II maneja la entrada de datos mediante un lápiz óptico y, con la ayuda de la ROM de caracteres estándar del C64, proporcionó el conjunto de caracteres PETSCII original de 1977 en una pantalla de dimensiones similares a las de la serie PET de 40 columnas .
Al recargar los registros de control del VIC-II a través de un código de máquina conectado a la rutina de interrupción de trama (la interrupción de línea de escaneo), se puede programar el chip para generar significativamente más de 8 sprites concurrentes (un proceso conocido como multiplexación de sprites ) y, en general, otorgar a cada porción de la pantalla definida por el programa diferentes propiedades de desplazamiento, resolución y color. La limitación del hardware de 8 sprites por línea de escaneo se puede aumentar aún más permitiendo que los sprites parpadeen rápidamente. El dominio de la interrupción de trama es esencial para liberar las capacidades del VIC-II. Muchas demostraciones y algunos juegos posteriores establecerían un "paso de bloqueo" fijo entre la CPU y el VIC-II para que los registros del VIC pudieran manipularse exactamente en el momento adecuado.
El C64 se entregaba con el conjunto de caracteres PETSCII en una ROM de 4k, pero, al igual que el VIC-20 anterior, los datos reales de los caracteres se leían desde la memoria en una ubicación específica. Esta ubicación es uno de los registros VIC-II, que permitía a los programadores construir sus propios conjuntos de caracteres colocando los datos apropiados en la memoria; cada carácter es una cuadrícula de 8x8, un byte representa 8 bits horizontalmente, por lo que se requieren 8 bytes para un solo carácter y, por lo tanto, el conjunto completo de 256 caracteres utiliza un total de 2048 bytes. En teoría, se pueden utilizar hasta ocho conjuntos de caracteres si se llenaran los 16k de memoria de video. [9] : 363
Además de los conjuntos de caracteres, el VIC-II también utiliza 1000 bytes para almacenar las 25 líneas de 40 caracteres por línea, un byte para cada carácter, que en la configuración predeterminada de encendido se encuentra en $400 - $7E8 . [9] : 117–119 Se accede a la RAM de color como bits 8 a 11 de la matriz de video; [10] en el 64 y 128, se encuentra en el espacio de E/S en $D800 - $DBFF y no se puede mover de esa ubicación. Contiene los valores para el color 1 (color 3 en modo multicolor) de cada carácter.
La ROM de caracteres está asignada a dos de las cuatro "ventanas" del VIC-II, en $1000 - $1FFF y $9000 - $9FFF , aunque la CPU no puede verla allí (la ROM de caracteres puede cambiarse a $D000 - $DFFF , donde es visible para la CPU, pero no para el VIC-II). Por lo tanto, los datos gráficos o los buffers de video no se pueden colocar en $1000 - $1FFF o $9000 - $9FFF porque el VIC-II verá la ROM de caracteres allí en su lugar. Debido a que estas áreas de RAM no podían ser utilizadas por el chip gráfico del VIC-II, se usaban con frecuencia para música/efectos de sonido (el chip SID). El C64 tiene la capacidad de tener RAM y ROM en la misma dirección en la memoria, pero la CPU "vería" una y el chip VIC-II "vería" la otra.
En el modo de caracteres de alta resolución predeterminado, el primer plano de cada carácter se puede configurar individualmente en la RAM de color. En el modo de caracteres multicolor, el color 3 se limita a los primeros ocho valores de color posibles; el cuarto bit se utiliza entonces como un indicador que indica si este carácter se va a mostrar en alta resolución o multicolor, lo que permite mezclar ambos tipos en una pantalla. [9] : 460–462 Los colores 1 y 2 se configuran mediante los registros en $D022 y $D023 y son globales para todos los caracteres. [9] : 373
Si se utiliza el modo de color de fondo extendido, los dos bits superiores del código de carácter se utilizan para seleccionar uno de los cuatro registros de color de fondo. Esto permite cuatro colores de fondo diferentes en la pantalla, pero a costa de permitir solo 64 caracteres diferentes en lugar de 256. Debido a que esto es limitante, los juegos rara vez lo utilizan.
Añadir un modo de mapa de bits direccionable en todos los puntos era uno de los objetivos principales del equipo de diseño de Commodore, ya que el VIC-I carecía de dicha característica. Sin embargo, para utilizar la menor cantidad posible de circuitos adicionales, lo organizaron de la misma manera que el modo de caracteres, es decir, mosaicos de 8x8 y 4x8. Los gráficos de mapa de bits requieren una página de 8k para los datos de píxeles y cada byte corresponde a una fila de ocho o cuatro píxeles. El siguiente byte es la fila que está debajo y después de la octava fila, se vuelve a la parte superior del siguiente mosaico.
En mapas de bits de alta resolución, la RAM de pantalla se utiliza para almacenar los colores de primer plano y de fondo de cada mosaico (parte superior e inferior de cada byte). Este es el único modo VIC-II que no hace uso de la RAM de color en $D800 ni del registro de color de fondo en $D021 .
El modo de mapa de bits multicolor permite tres colores por mosaico (el cuarto es el color de fondo, tal como se establece en $D021 ). Los colores 1 y 2 se seleccionan mediante los bits de la RAM de pantalla (igual que los mapas de bits de alta resolución) y el tercero proviene de la RAM de color.
A pesar del alto nivel de detalle de color y las capacidades de direccionamiento de todos los puntos del modo de mapa de bits, generalmente no es práctico para los gráficos del juego debido a que requiere una gran cantidad de recursos del sistema (8k para los datos de píxeles más muchos más ciclos de CPU para modificar cada mosaico) y normalmente no se puede desplazar. Por lo tanto, se ve más comúnmente en el cargador y, a veces, en las pantallas de título.
Los sprites de VIC-II son monocromos de 24x21 o multicolores de 12x21. Al igual que los gráficos de personajes, estos últimos tienen un color individual para cada sprite y dos globales. VIC-II tiene ocho sprites, cada uno de los cuales utiliza 64 bytes de memoria para almacenarse pero, con ciertas limitaciones, puede mostrar muchos más. La multiplexación de sprites es un método común para obtener más de ocho en pantalla (aunque todavía hay un máximo de ocho por línea de escaneo). El contador de líneas de escaneo de VIC-II puede consultarse hasta que se alcance el punto deseado en la pantalla, o se puede programar una interrupción de trama para que se active en una determinada línea de escaneo, después de lo cual el programa cambia rápidamente las coordenadas del sprite. Este método puede dar como resultado muchos sprites adicionales en pantalla a la vez, a menudo para un total de 16 a 24 o más. Sin embargo, para una demostración, el límite es considerablemente más flexible.
En teoría, el número máximo de sprites diferentes visibles al mismo tiempo es 256 (suponiendo que se llenó toda la página de 16k del VIC-II). Se los direcciona utilizando un número de bloque para referirse a cada patrón de sprite en la memoria comenzando con 0 y llegando hasta 255 ($FF) dependiendo de su posición en la página de video. (Si se utiliza el segundo banco de video (numerado como 0 1 2 y 3), el Bloque 0 se referiría al sprite almacenado en $4000 y el Bloque 255 estaría en $7FC0 ).
Cada sprite puede tener el doble de tamaño vertical, horizontal o ambos. Esto no aumenta la resolución del sprite (sigue teniendo 24 píxeles de ancho y 21 de alto), pero cada píxel tendrá el doble de ancho y/o el doble de alto.
Debido a que el registro de posición horizontal de cada sprite es de un byte y está limitado a un valor máximo de 255, por sí solo no puede cubrir los 320 píxeles del área de pantalla del VIC-II, por lo que un registro adicional llamado Indicador de byte más significativo proporciona un noveno bit de posición para todos los sprites.
$D01E y $D01F contienen los registros de fondo y de colisión entre sprites. El primero rara vez se utiliza porque no puede proporcionar información sobre el objeto de fondo específico que toca el sprite.
$D01B contiene el registro de prioridad Sprite To Background, que se utiliza para determinar si un sprite se mueve detrás o delante de los gráficos de fondo. Cuando un sprite entra en el mismo espacio que otro sprite, los de menor número siempre pasarán por encima de los de mayor número.
Para desplazarse por una pantalla de caracteres, el VIC-II se configura en modo de 38 columnas y/o 24 líneas a través de los registros $D011 y $D016 . Esto crea un búfer fuera de pantalla donde se coloca la fila de caracteres que se va a desplazar. Al ajustar los bits de desplazamiento en los registros mencionados anteriormente, se puede mover una fila en la pantalla y luego repetirla a menos que se coloque una nueva fila en el búfer. La RAM de color se desplaza simultáneamente con la RAM de pantalla y funciona de la misma manera.
El desplazamiento en VIC-II es una tarea relativamente complicada que consume mucha CPU, aunque no es raro que los programadores de juegos de C64 hagan trampas diseñando gráficos de modo que la RAM de color pueda permanecer estática. Otro truco estándar es usar una sección de la pantalla (quizás las 4 o 5 filas de caracteres de la parte inferior o superior) como área de estado del juego para mostrar la puntuación, las vidas, etc., lo que reduce la cantidad de desplazamiento que se debe realizar. Finalmente, a menudo es necesario usar la técnica de "doble búfer" para evitar el desgarro de la pantalla. Se reservan dos bloques de 1k de RAM de pantalla; uno se muestra mientras se escribe en otro, luego, durante vblank, se intercambian rápidamente mediante la manipulación de los registros de VIC-II. Desafortunadamente, esto no se puede hacer con RAM de color.
En las últimas etapas de la vida comercial del C64, se descubrió un exploit conocido como VSP (Posicionamiento de pantalla variable) que implicaba la manipulación de los bits de control en $D011 para producir un desplazamiento rápido con un costo de ciclo de CPU mucho menor que los registros de desplazamiento estándar, sin embargo, requería una codificación cuidadosa y precisa y no funcionaba de manera confiable en algunas revisiones de VIC-II; también se puede usar solo para el desplazamiento horizontal. Se usa notablemente en Mayhem in Monsterland .
La utilización de interrupciones de trama es una parte esencial de la programación de juegos de C64. En el estado predeterminado de encendido de la computadora, el primer chip CIA de MOS Technology genera una interrupción enmascarable (IRQ) 60 veces por segundo (ya sea NTSC o PAL, esto no está relacionado con la actualización de video) que envía la CPU al controlador IRQ del núcleo en $EA31 . El controlador reconoce la IRQ de la CIA, actualiza el reloj, escanea el teclado y hace parpadear el cursor en BASIC.
Los juegos normalmente desactivan la interrupción de la CIA y, en su lugar, configuran el VIC-II para generar interrupciones cuando se alcanza una línea de escaneo específica, lo que es necesario para el desplazamiento en pantalla dividida y la reproducción de música. El juego reasigna el vector IRQ en $0314 / $0315 a su controlador de trama, que realiza estas funciones y luego, opcionalmente, ejecuta una instrucción JMP $EA31 para devolver el control al núcleo.
Algunos juegos utilizan solo una IRQ; sin embargo, las IRQ encadenadas son más comunes y mejoran la estabilidad del programa. En esta configuración, la IRQ se reasigna a la segunda rutina y así sucesivamente para cada una hasta que la última la restablezca a la dirección de la primera IRQ. Cuando se utilizan IRQ encadenadas, solo se necesita una instrucción JMP $EA31 en la cadena y las otras se pueden finalizar con JMP $EA81 , que simplemente va al final del controlador del núcleo. Además, no es raro que los juegos cambien el núcleo y utilicen su propio controlador de IRQ en su lugar. La NMI se puede utilizar para un hilo de interrupción adicional, aunque pueden producirse efectos secundarios indeseables al presionar accidentalmente la tecla Restaurar, ya que activa una NMI si se presiona.
El VIC-II también puede generar una interrupción de trama a partir de los registros de colisión, pero esta función rara vez se utiliza ya que proporciona información insuficiente al programa en la mayoría de los casos.
El VIC-II tiene un bus de direcciones de 14 bits y puede usar cualquiera de los cuatro segmentos de 16k del espacio de memoria del C64 para datos de video. Para manejar esto, dos bits de dirección adicionales son aportados por bits de puerto de CIA. $0000 - $3FFF es el valor predeterminado de encendido. El segundo segmento ( $4000 – $7FFF ) es típicamente la mejor opción para programar desde BASIC ya que es el único segmento que es RAM completamente libre sin ROM o registros de E/S mapeados en él. El cuarto segmento ( $C000 – $FFFF ) también es una buena opción siempre que se use lenguaje de máquina, ya que las ROM del núcleo deben estar deshabilitadas para obtener acceso de lectura por parte de la CPU, y evita tener código de programa y datos discontinuos que resultarían del uso de $4000 - $7FFF . Tenga en cuenta que los datos gráficos se pueden almacenar libremente debajo de la ROM BASIC en $A000 - $BFFF , la ROM del núcleo en $E000 - $FFFF o los registros de E/S y la RAM de color en $D000 – $DFFF , ya que el VIC-II solo ve RAM, independientemente de cómo se ajuste el mapeo de memoria de la CPU; la ROM de caracteres es visible solo en el primer y tercer segmento, por lo tanto, si se usa el segmento dos o cuatro, el programador debe proporcionar sus propios datos de caracteres. La RAM de pantalla, la página de mapa de bits, los sprites y los conjuntos de caracteres deben ocupar la misma ventana de segmento (siempre que los bits CIA no se cambien mediante una interrupción de línea de escaneo). Los últimos seis bytes de la memoria del sistema ( $FFFA - $FFFF ) contienen los vectores IRQ, NMI y de reinicio, por lo que si se usa la parte superior de la memoria para almacenar un conjunto de caracteres o datos de sprites, y la ROM DEL KERNAL se cambia revelando la RAM debajo a la CPU, será necesario sacrificar un carácter o sprite para evitar sobrescribir los vectores.
El VIC-II tiene 47 registros de lectura/escritura que se enumeran a continuación:
Registro | Hexadecimal | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Descripción |
---|---|---|---|---|---|---|---|---|---|---|
0 | D000 | M0X | Sprite de coordenadas X 0 | |||||||
1 | D001 | M0Y | Sprite de coordenada Y 0 | |||||||
2 | D002 | M1X | Sprite 1 de coordenadas X | |||||||
3 | D003 | M1Y | Sprite 1 de coordenada Y | |||||||
4 | D004 | M2X | Sprite 2 de coordenadas X | |||||||
5 | D005 | M2Y | Sprite 2 de coordenadas Y | |||||||
6 | D006 | M3X | Sprite 3 de coordenadas X | |||||||
7 | D007 | M3Y | Sprite de coordenadas Y 3 | |||||||
8 | D008 | M4X | Sprite de coordenadas X 4 | |||||||
9 | D009 | M4Y | Sprite de coordenadas Y 4 | |||||||
10 | D00A | M5X | Sprite de coordenadas X 5 | |||||||
11 | D00B | M5Y | Sprite de coordenadas Y 5 | |||||||
12 | D00C | M6X | Sprite de coordenadas X 6 | |||||||
13 | D00D | M6Y | Sprite de coordenadas Y 6 | |||||||
14 | D00E | M7X | Sprite de coordenadas X 7 | |||||||
15 | D00F | M7Y | Sprite de coordenadas Y 7 | |||||||
16 | D010 | M7x8 | M6X8 | M5X8 | M4X8 | M3X8 | M2X8 | M1X8 | M0X8 | MSB de coordenadas X |
17 | D011 | RST8 | Módulo de gestión del ciclo de vida | BMM | GUARIDA | RSEL | Desplazarse | Registro de control 1 | ||
18 | D012 | Primera vez | Contador de trama | |||||||
19 | D013 | LPX | Lápiz óptico X | |||||||
20 | D014 | LPY | Lápiz óptico Y | |||||||
21 | D015 | M7E | M6E | M5E | M4E | M3E | M2E | M1E | M0E | Sprite habilitado |
22 | D016 | — | — | RES | MCM | CEL | Desplazamiento X | Registro de control 2 | ||
23 | D017 | M7YE | M6YE | M5YE | M4YE | M3YE | M2YE | M1YE | M0YE | Expansión de Sprite Y |
24 | D018 | VM13 | VM12 | VM11 | VM10 | CB13 | CB12 | CB11 | — | Punteros de memoria |
25 | D019 | IRQ | — | — | — | Programa de Licencias Laborales (ILP) | MMC Internacional | Banco Mundial | Primero | Registro de interrupciones |
26 | D01A | — | — | — | — | PEL | EMMC | EMBC | ANTE TODO | Interrupción habilitada |
27 | D01B | M7DP | M6DP | M5DP | M4DP | M3DP | M2DP | M1DP | M0DP | Prioridad de datos de sprites |
28 | D01C | M7MC | M6MC | M5MC | M4MC | M3MC | M2MC | M1MC | M0MC | Sprite multicolor |
29 | D01D | M7XE | M6XE | M5XE | M4XE | M3XE | M2XE | M1XE | M0XE | Expansión Sprite X |
30 | D01E | M7M | M6M | M5M | M4M | M3M | M2M | M1M | Mamá | Colisión de sprites |
31 | D01F | M7D | M6D | M5D | M4D | M3D | M2D | M1D | Modificado para requisitos particulares | Colisión de datos de sprites |
32 | D020 | — | — | — | — | CE | Color del borde | |||
33 | D021 | — | — | — | — | B0C | Color de fondo 0 | |||
34 | D022 | — | — | — | — | B1C | Color de fondo 1 | |||
35 | D023 | — | — | — | — | De empresa a consumidor | Color de fondo 2 | |||
36 | D024 | — | — | — | — | B3C | Color de fondo 3 | |||
37 | D025 | — | — | — | — | MM0 | Sprite multicolor 0 | |||
38 | D026 | — | — | — | — | MM1 | Sprite multicolor 1 | |||
39 | D027 | — | — | — | — | M0C | Sprite de color 0 | |||
40 | D028 | — | — | — | — | M1C | Sprite de color 1 | |||
41 | D029 | — | — | — | — | M2C | Sprite de color 2 | |||
42 | D02A | — | — | — | — | M3C | Sprite de color 3 | |||
43 | D02B | — | — | — | — | M4C | Sprite de color 4 | |||
44 | D02C | — | — | — | — | M5C | Sprite de color 5 | |||
45 | D02D | — | — | — | — | M6C | Sprite de color 6 | |||
46 | D02E | — | — | — | — | M7C | Sprite de color 7 |
En el modo de caracteres multicolor (160×200 píxeles, que es el que utilizan la mayoría de los juegos), los caracteres tienen 4×8 píxeles (los caracteres siguen siendo aproximadamente cuadrados, ya que los píxeles tienen el doble de ancho) y 4 colores de 16 colores. Tres de los colores son los mismos para toda la pantalla (el color de fondo, los registros multicolor 1 y multicolor 2), mientras que el color restante se puede configurar individualmente para cada área de 4×8 píxeles, tal y como se define en la memoria RAM de color. Los sprites en modo multicolor (12×21 píxeles) tienen tres colores más la transparencia: dos colores compartidos entre todos los sprites y uno individual. Los artistas eligen colores compartidos de forma que la combinación con colores individuales produzca una impresión colorida. Algunos juegos vuelven a cargar los colores compartidos durante la interrupción de la trama; por ejemplo, el área submarina del juego Turrican II (que era verticalmente distinta) tiene colores diferentes. Otros, como Summer Games de Epyx y Basketball Sam & Ed de COMPUTE!'s Gazette , superponen dos sprites de alta resolución para permitir que se utilicen dos colores de primer plano sin sacrificar la resolución horizontal [1]. Por supuesto, esta técnica reduce la cantidad de sprites disponibles a la mitad.
En los C64 PAL , la línea de retardo PAL del monitor o televisor que promedia el tono de color , pero no el brillo, de líneas de pantalla consecutivas se puede utilizar para crear siete colores no estándar alternando líneas de pantalla que muestran dos colores de brillo idéntico. Hay siete pares de colores de este tipo en el chip VIC. [11]
El equipo del C64 no dedicó mucho tiempo a calcular matemáticamente la paleta de 16 colores. Robert Yannes, que participó en el desarrollo del VIC-II, dijo:
Me temo que no se puso tanto esfuerzo en la selección de colores como se cree. Como teníamos un control total sobre el tono, la saturación y la luminancia, elegimos los colores que nos gustaban. Sin embargo, para ahorrar espacio en el chip, muchos de los colores eran simplemente el lado opuesto de la rueda de colores de los que elegimos. Esto nos permitió reutilizar los valores de resistencia existentes, en lugar de tener un conjunto completamente único para cada color. [12]
Las primeras versiones del VIC-II utilizadas en los PAL C64 tienen una paleta de colores diferente a la de las revisiones posteriores. [13]
La paleta completa de dieciséis colores se genera en función de variaciones de señales YPbPr como se muestra a continuación:
Número — nombre | Y | Pb (relativo) | Pr (relativo) |
---|---|---|---|
0 — negro | 0 | 0 | 0 |
1 — blanco | 1 | 0 | 0 |
2 — rojo | 0,3125 | -0,3826834 | 0,9238795 |
3 — cian | 0,625 | 0,3826834 | -0,9238795 |
4 — morado | 0,375 | 0,7071068 | 0,7071068 |
5 — verde | 0,5 | -0,7071068 | -0,7071068 |
6 — azul | 0,25 | 1 | 0 |
7 — amarillo | 0,75 | -1 | 0 |
8 — naranja | 0,375 | -0,7071068 | 0,7071068 |
9 — marrón | 0,25 | -0,9238795 | 0,3826834 |
10 — rojo claro | 0,5 | -0,3826834 | 0,9238795 |
11 — gris oscuro | 0,3125 | 0 | 0 |
12 — gris medio | 0,46875 | 0 | 0 |
13 — verde claro | 0,75 | -0,7071068 | -0,7071068 |
14 — azul claro | 0,46875 | 1 | 0 |
15 — gris claro | 0,625 | 0 | 0 |
El VIC-IIe 8564/8566 del Commodore 128 utiliza 48 pines en lugar de 40, ya que produce más señales, entre ellas el reloj para la CPU Zilog Z80 adicional de esa computadora. También tiene dos registros adicionales. Uno de los registros adicionales es para acceder al teclado numérico agregado y otras teclas adicionales de esa computadora; esta función se agregó al VIC simplemente porque resultó ser el lugar más fácil en la computadora para agregar los tres pines de salida adicionales necesarios. El otro registro adicional es para alternar entre un reloj de sistema de 1 MHz y 2 MHz; a la velocidad más alta, la salida de video del VIC-II simplemente muestra cada segundo byte en el código como un patrón de bits de color negro en la pantalla, lo que sugiere el uso del modo de 80 columnas del C128 a esa velocidad (a través del chip RGB 8563 VDC ). De manera no oficial, los dos registros adicionales también están disponibles en el modo C64 del C128, lo que permite cierto uso de las teclas adicionales, así como la ejecución a doble velocidad y sin video de código limitado por la CPU (como cálculos numéricos intensivos) en programas C64 hechos por uno mismo. [14] Los registros adicionales también son una fuente de incompatibilidad menor entre el modo C64 del C128 y un C64 real: algunos programas C64 más antiguos escribieron inadvertidamente en el modo C64.Bit de conmutación de 2 MHz , que no haría nada en absoluto en un C64 real, pero que daría como resultado una pantalla defectuosa en un C128 en modo C64.
El VIC-IIe tiene la capacidad poco conocida de crear un conjunto adicional de colores manipulando los registros de una manera específica que pone la señal de color fuera de fase con lo que otras partes del chip consideran que está. [ cita requerida ] Esta capacidad se demostró en la demostración "Risen from Oblivion". [15] Desafortunadamente, no funciona en todos los monitores: los colores correctos se confirman en los monitores CRT Commodore y sus equivalentes.
Gracias al comportamiento específico del bit de prueba del VIC-IIe, es además capaz de producir una imagen entrelazada real con una resolución de 320×400 (modo de contraste) y 160×400 (modo multicolor). [16]
Commodore realizó muchas modificaciones al VIC-II durante su vida útil. El primer número de la Gazette de Compute!, en julio de 1983, informó que ya se habían realizado ocho desde el lanzamiento del Commodore 64 a mediados de 1982. [17]
La primera revisión del VIC-II se utilizó en máquinas fabricadas durante 1982 y principios de 1983; tenía una carcasa de cerámica por razones térmicas y generaba 64 relojes de color NTSC por línea. Estos chips tampoco emitían señales de croma y luminancia separadas. Las revisiones posteriores tenían una carcasa de plástico de menor costo y 65 relojes de color por línea (para NTSC, 63 para PAL), así como croma y luminancia separados, lo que permitió una forma temprana de S-video. Se realizaron varias revisiones principalmente con el interés de mejorar la calidad de salida de video, que era deficiente en las primeras unidades, y eliminar un error que causaba que aparecieran píxeles aleatorios en la pantalla (algunos juegos tempranos explotaron esto intencionalmente para efectos gráficos que, en consecuencia, no funcionaron en los C64 posteriores). Los 64 relojes de color en el VIC-II inicial se hicieron con la intención de permitir el color de artefacto NTSC en modo de mapa de bits de alta resolución como lo hicieron las computadoras Atari de 8 bits, pero esa idea se abandonó rápidamente.
Debido a que, por razones de costo, era necesario cambiar a una carcasa de plástico, el sobrecalentamiento tendía a ser un problema con el VIC-II. Esto se debía a varias razones, entre ellas, la alta densidad de la matriz en relación con el proceso utilizado y su alta velocidad interna (8 MHz). Commodore intentó una solución improvisada para esto utilizando el protector de RF de aluminio como disipador de calor (en máquinas NTSC; las máquinas PAL se vendían en países con estándares de interferencia de RF menos restrictivos que los Estados Unidos y, por lo tanto, solo usaban cartón aluminizado), sin embargo, no fue del todo eficaz para prevenir el sobrecalentamiento y el fallo del chip.
El 85xx VIC-II utilizado en los C64C se fabricó con el proceso HMOS de 3,5 μm más moderno y requiere solo un riel de alimentación de 5 V en lugar de los rieles duales de 12 V y 5 V del 65xx VIC-II. Estos chips funcionan significativamente más fríos y no sufren los problemas de sobrecalentamiento que afectan al 65xx VIC-II.
Existen varias revisiones del 6569: 6569R1 (normalmente bañado en oro), 6569R3, 6569R4 y 6569R5. La versión más común del 8565 es la 8565R2.