El CIA2 es un chip idéntico al CIA1. Por tanto, tiene los mismos registros que el CIA1, pero ubicados en una zona de memoria más alta ($dd00 – $dd0f):
REGISTRO | DIRECCIÓN | FUNCIÓN |
CI2PRA | $dd00 | Puerto de datos A. |
CI2PRB | $dd01 | Puerto de datos B. |
C2DDRA | $dd02 | Registro de dirección de datos A:
Bit 0…7 = 0: entrada. Bit 0…7 = 1: salida. |
C2DDRB | $dd03 | Registro de dirección de datos B:
Bit 0…7 = 0: entrada. Bit 0…7 = 1: salida. |
TI2ALO | $dd04 | Contador A. Parte menos significativa (low). |
TI2AHI | $dd05 | Contador A. Parte más significativa (high). |
TI2BLO | $dd06 | Contador B. Parte menos significativa (low). |
TI2BHI | $dd07 | Contador B. Parte más significativa (high). |
TO2TEN | $dd08 | Time of day. Décimas de segundo. |
TO2SEC | $dd09 | Time of day. Segundos. |
TO2MIN | $dd0a | Time of day. Minutos. |
TO2HRS | $dd0b | Time of day. Horas. |
CI2SDR | $dd0c | Envío y recepción de datos en modo serie por el puerto de usuario. |
CI2ICR | $dd0d | Registro de control de interrupciones. |
CI2CRA | $dd0e | Registro de control del contador A. |
CI2CRB | $dd0f | Registro de control del contador B. |
Las principales diferencias entre el CIA2 y el CIA1 son los dispositivos a los que da acceso y las interrupciones.
Respecto a los dispositivos, el CIA2 da acceso al puerto serie y al puerto de usuario. El puerto serie es un puerto que funciona bit a bit (en serie) y al que típicamente se conecta la unidad de disco 1541. El puerto de usuario, por el contrario, es un puerto que funciona en paralelo, es decir, permite intercambiar bits de ocho en ocho.
Respecto a las interrupciones, el pin de interrupciones del CIA1 está conectado al pin IRQ del 6510, lo que significa que sus interrupciones son enmascarables con la instrucción “sei”. Sin embargo, el pin de interrupciones del CIA2 está conectado al pin NMI del 6510, lo que significa que sus interrupciones son no enmascarables (non-maskable interrupts).
Los detalles sobre cómo utilizar los registros CI2PRA y CI2PRB y resto de registros asociados para realizar E/S por el puerto serie y al puerto de usuario quedan fuera del alcance de este blog, al menos de momento. Pero pueden consultarse estos detalles en el libro “Mapping the Commodore 64”, en sus páginas 186 y siguientes.
Hola.
Un uso muy importante del CIA2, concretamente de su registro CI2PRA = $dd00, es elegir el banco de 16K direccionado por el VIC.
En función de los valores de los bits 0 y 1 de este registro, el banco direccionado es:
%00 => $c000 – $ffff
%01 => $8000 – $bfff
%10 => $4000 – $7fff
%11 => $0000 – $3fff (valor por defecto)
Esto puede verse en la página 189 del libro “Mapping the Commodore 64”.
Un saludo, HVSW.
Me gustaMe gusta