Como ya hemos comentado anteriormente, el C64 tiene dos CIAs, el CIA1 y el CIA2. Ambos sirven para que el microprocesador 6510 se comunique con dispositivos periféricos conectados al C64. Además, también tienen funciones de temporización.
En particular, el CIA1 conecta al microprocesador 6510 con el teclado y joysticks o paddles conectados a los puertos de control. Todos ellos son periféricos de entrada.
Para conseguir esto el CIA1 dispone de los siguientes registros:
REGISTRO | DIRECCIÓN | FUNCIÓN |
CIAPRA | $dc00 | Puerto de datos A. |
CIAPRB | $dc01 | Puerto de datos B. |
CIDDRA | $dc02 | Registro de dirección de datos A:
Bit 0…7 = 0: entrada. Bit 0…7 = 1: salida. |
CIDDRB | $dc03 | Registro de dirección de datos B:
Bit 0…7 = 0: entrada. Bit 0…7 = 1: salida. |
TIMALO | $dc04 | Contador A. Parte menos significativa (low). |
TIMAHI | $dc05 | Contador A. Parte más significativa (high). |
TIMBLO | $dc06 | Contador B. Parte menos significativa (low). |
TIMBHI | $dc07 | Contador B. Parte más significativa (high). |
TODTEN | $dc08 | Time of day. Décimas de segundo. |
TODSEC | $dc09 | Time of day. Segundos. |
TODMIN | $dc0a | Time of day. Minutos. |
TODHRS | $dc0b | Time of day. Horas. |
CIASDR | $dc0c | Envío y recepción de datos en modo serie por el puerto de usuario. |
CIAICR | $dc0d | Registro de control de interrupciones. |
CIACRA | $dc0e | Registro de control del contador A. |
CIACRB | $dc0f | Registro de control del contador B. |
Los “puertos de datos” (CIAPRA y CIAPRB) son los registros o posiciones de memoria a través de los que el microprocesador recibe o envía los datos. No se debe confundir este significado de la palabra puerto (como posición de memoria) con el significado de puerto como conexión o interfaz física.
Los “registros de dirección de datos” (CIDDRA y CIDDRB) sirven para indicar si los puertos correspondientes van a funcionar como puerto de entrada o puerto de salida. Además, esta configuración funciona bit a bit, es decir:
- Si el bit X de CIDDRA vale 0, entonces el bit X de CIAPRA funcionará de entrada.
- Si el bit X de CIDDRA vale 1, entonces el bit X de CIAPRA funcionará de salida.
- Si el bit Y de CIDDRB vale 0, entonces el bit Y de CIAPRB funcionará de entrada.
- Si el bit Y de CIDDRB vale 1, entonces el bit Y de CIAPRB funcionará de salida.
Los registros dedicados a la temporización se verán en detalle más adelante. De momento, baste decir que básicamente son contadores que permiten medir intervalos de tiempo. Como hay dos contadores (A y B), se puede usar uno, el otro, o ambos concatenados. Además, el CIA1 puede generar interrupciones IRQ cuando los contadores llegan a un determinado valor, o de forma periódica, como las interrupciones que se generan 60 veces por segundo para leer el teclado.