# MOS Technology VIC-II

El VIC-II (Video Interface Chip II), específicamente conocido como el MOS Technology 6567/8562/8564 (versiones NTSC), 6569/8565/8566 (PAL), es el microchip que genera las señales de vídeo Y/C (combinado en vídeo compuesto en el modulador RF) y las señales de refresco de la DRAM en las computadoras domésticas Commodore 64 y C128.
Sucediendo al original MOS VIC (usado en el VIC-20), el VIC-II fue uno de los dos chips principalmente responsables del éxito del C64 (el otro chip era el 6581 SID).

## Historia de desarrollo

El chip VIC-II fue diseñado principalmente por Al Charpentier y Charles Winterble en MOS Technology, Inc. como un sucesor del MOS Technology 6560 "VIC". El equipo en MOS Technology había fallado previamente al producir dos chips gráficos llamados MOS Technology 6562para la computadora Commodore TOI, y el MOS Technology 6564 para el Color PET, debido a las limitaciones de velocidad de la memoria.
Para construir el VIC-II, Charpentier y Winterble hicieron una encuesta de mercado de las presentes computadoras domésticas y videojuegos, listando las características presentes en ese momento y qué características se querían tener en el VIC-II. La idea de añadir sprites vino de la computadora Texas Instruments TI-99/4A y su TMS9918 coprocesador gráfico. La idea de soportar la detección de colisiones vino de la Mattel Intellivision. La Atari 800 fue también minado para encontrar características deseadas. Sobre 3/4 de la superficie del chip es usada para la funcionalidad de sprites.
El chip fue parcialmente diseñado usando herramientas de automatización de diseño electrónico de Applicon (ahora parte de Siemens PLM Software) y parcialmente diseñado manualmente en papel vegetal o de calco. El diseño fue parcialmente depurado fabricando chips que contenían pequeños subconjuntos del diseño, los cuales podían ser probados por separado. Esto fue fácil debido a que MOS Techonology tenía tanto su laboratorio de investigación y desarrollo como su planta de semiconductores en la misma ubicación. El chip fue desarrollado en tecnología de 5 micrómetros.
El trabajo en el VIC-II fue completado en noviembre de 1981 mientras Robert Yannes estaba simultáneamente trabajando en el chip SID. Ambos chips, como el Commodore 64, fueron finalizados a tiempo para el Consumer Electronics Show en el primer fin de semana de enero de 1982.

## Características del VIC-II

* Espacio de direcciones de 16 kB para la memoria de pantalla, caracteres y sprites
* Resolución de vídeo de 320 × 200 píxeles (160 × 200 en modo multicolor)
* Resolución de texto de 40 × 25 caracteres
* Tres modos de pantalla de caracteres y dos de mapa de bits
* 16 colores
* Manejo concurrente de 8 sprites por línea de exploración, cada uno de 24 × 21 píxeles (12 × 21 en multicolor)
* Interrupción raster (ver detalles más abajo)
* Scroll suavizado
* Refrescamiento de memoria RAM independiente y dinámico
* Bus mastering para un estilo del bus de sistema del 6502: La CPU y el VIC-II accediendo al bus durante mitades alternas del ciclo de reloj (el VIC-II detiene a la CPU cuando necesita ciclos extra)

## Detalles técnicos

Nótese que abajo, las direcciones de los registros están indicadas como las ve la CPU en un C64. Para obtener los números de registro como se dan usualmente en las hojas de datos (p.e., comenzando con 0), el "D0" inicial debe ser omitido.

### Registros

El VIC-II tiene 47 registros de lectura/escritura listados 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 | | | | Coordenada X del Sprite 0 |
| 1 | D001 | | | | | M0Y | | | | Coordenada Y del Sprite 0 |
| 2 | D002 | | | | | M1X | | | | Coordenada X del Sprite 1 |
| 3 | D003 | | | | | M1Y | | | | Coordenada Y del Sprite 1 |
| 4 | D004 | | | | | M2X | | | | Coordenada X del Sprite 2 |
| 5 | D005 | | | | | M2Y | | | | Coordenada Y del Sprite 2 |
| 6 | D006 | | | | | M3X | | | | Coordenada X del Sprite 3 |
| 7 | D007 | | | | | M3Y | | | | Coordenada Y del Sprite 3 |
| 8 | D008 | | | | | M4X | | | | Coordenada X del Sprite 4 |
| 9 | D009 | | | | | M4Y | | | | Coordenada Y del Sprite 4 |
| 10 | D00A | | | | | M5X | | | | Coordenada X del Sprite 5 |
| 11 | D00B | | | | | M5Y | | | | Coordenada Y del Sprite 5 |
| 12 | D00C | | | | | M6X | | | | Coordenada X del Sprite 6 |
| 13 | D00D | | | | | M6Y | | | | Coordenada Y del Sprite 6 |
| 14 | D00E | | | | | M7X | | | | Coordenada X del Sprite 7 |
| 15 | D00F | | | | | M7Y | | | | Coordenada Y del Sprite 7 |
| 16 | D010 | M7X8 | M6X8 | M5X8 | M4X8 | M3X8 | M2X8 | M1X8 | M0X8 | MSBs de las coordenadas X |
| 17 | D011 | RST8 | ECM | BMM | DEN | RSEL | | YSCROLL | | Registro de control 1 |
| 18 | D012 | | | | RASTER | | | | | Contador raster |
| 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 activado |
| 22 | D016 | - | - | RES | MCM | CSEL | | XSCROLL | | Registro de control 2 |
| 23 | D017 | M7YE | M6YE | M5YE | M4YE | M3YE | M2YE | M1YE | M0YE | Sprite Y expansión |
| 24 | D018 | VM13 | VM12 | VM11 | VM10 | CB13 | CB12 | CB11 | - | Punteros de memoria |
| 25 | D019 | IRQ | - | - | - | ILP | IMMC | IMBC | IRST | Registro de interrupción |
| 26 | D01A | - | - | - | - | ELP | EMMC | EMBC | ERST | Interrupción activada |
| 27 | D01B | M7DP | M6DP | M5DP | M4DP | M3DP | M2DP | M1DP | M0DP | Prioridad de datos del sprite |
| 28 | D01C | M7MC | M6MC | M5MC | M4MC | M3MC | M2MC | M1MC | M0MC | Sprite multicolor |
| 29 | D01D | M7XE | M6XE | M5XE | M4XE | M3XE | M2XE | M1XE | M0XE | Expansión X del sprite |
| 30 | D01E | M7M | M6M | M5M | M4M | M3M | M2M | M1M | M0M | Colisión sprite-sprite |
| 31 | D01F | M7D | M6D | M5D | M4D | M3D | M2D | M1D | M0D | Colisión sprite-datos |
| 32 | D020 | - | - | - | - | | EC | | | Color de borde |
| 33 | D021 | - | - | - | - | | B0C | | | Color de fondo 0 |
| 34 | D022 | - | - | - | - | | B1C | | | Color de fondo 1 |
| 35 | D023 | - | - | - | - | | B2C | | | 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 | | | Color del sprite 0 |
| 40 | D028 | - | - | - | - | | M1C | | | Color del sprite 1 |
| 41 | D029 | - | - | - | - | | M2C | | | Color del sprite 2 |
| 42 | D02A | - | - | - | - | | M3C | | | Color del sprite 3 |
| 43 | D02B | - | - | - | - | | M4C | | | Color del sprite 4 |
| 44 | D02C | - | - | - | - | | M5C | | | Color del sprite 5 |
| 45 | D02D | - | - | - | - | | M6C | | | Color del sprite 6 |
| 46 | D02E | - | - | - | - | | M7C | | | Color del sprite 7 |