En esta sección se relacionan las direcciones de los registros de los circuitos auxiliares del C64. Está dirigida a los interesados en programación, que quieran analizar programas de C64 escritos por otros, o bien componer los suyos propios. Si sólo quiere jugar a su juego favorito de C64, no tiene que preocuparse por los detalles aquí expuestos.
D.1 Controlador de Vídeo VIC 6567 - D000-D02E
D000: Coordenada X del sprite nº 0 (bits 7…0, el bit 8 se almacena en D010)
D001: Coordenada Y del sprite nº 0 (bits 7…0)
El ángulo superior izquierdo de la pantalla tiene las coordenadas x:24 y:50.
D002/D003: igual que D000/D001, para el sprite nº 1
D004/D005: igual que D000/D001, para el sprite nº 2
D006…D00F: igual que D000/D001, para los sprites nº 3 a 7
D010: Bits mayores de las coordenadas X
Un bit por cada sprite (bit 0 para sprite nº 0, bit 1 para sprite nº 1…)
D011: Registro de mando 1
Bit 7: Bit 8 para D012
Bit 6: 1: Modo extenso de texto en colores
Bit 5: 0: Modo de texto ~ 1: Modo de mapa de bits
Bit 4: 0: Deshabilitar pantalla ~ 1: Habilitar pantalla
Bit 3: 0: 24 renglones p/pantalla ~ 1: 25 renglones p/pantalla
Bits 2…0: Desplazamiento vertical de la pantalla
D012: Lectura: nº de línea de trazado instantánea (bits 7…0, el bit 8 se encuentra en D011)
Escritura: nº de línea que origina una interrupción del trazador
D013: Coordenada X del lápiz óptico
D014: Coordenada Y del lápiz óptico
D015: Activación de sprites (bit 0 para sprite nº 0, bit 1 para
sprite nº 1…)
D016: Registro de mando 2
Bits 7…5: No se usan
Bit 4: 1: Modo multicolor
Bit 3: 0: 38 caracteres p/columna ~ 1: 40 caracteres p/columna
Bits 2…0: Desplazamiento horizontal de la pantalla
D017: Duplicado de la anchura de los sprites
Un bit por cada sprite (bit 0 para sprite nº 0, bit 1 para
sprite nº 1…)
D018: Registro de dirección de vídeo
Bits 7…4: bits 13…10 de la dirección de la RAM de vídeo
(VideoRAM).
Bits 3…1: bits 13…11 de la dirección de la RAM de caracteres
en el modo de texto (CaracterRAM).
Bit 3: bit 13 de la dirección del mapa de bits en el modo de mapa de bits.
Bit 0: no se usa
Los bits 15…14 de ambos valores se almacenan (invertidos) en DD00 (CIA2).
Los bits menores (9/10…0) valen siempre cero.
D019: Registro de interrupción pendiente
Bit 7: 1: Al menos una interrupción pendiente
Bits 6…4: No se usan
Bit 3: 1: Interrupción pendiente del lápiz óptico
Bit 2: 1: Interrupción pendiente de colisión entre sprites
Bit 1: 1: Interrupción pendiente de colisión entre sprite
y fondo
Bit 0: 1: Interrupción pendiente de trazado
D01A: Registro de filtro de interrupciones
Bits 7…4: No se usan
Bit 3: 1: Habilitar interrupciones del lápiz óptico
Bit 2: 1: Habilitar interrupciones de colisión entre sprites
(v. D01E)
Bit 1: 1: Habilitar interrupciones de colisión entre sprites
y fondo (v. D01E)
Bit 0: 1: Habilitar interrupciones de trazado
D01B: Prioridad entre sprites y fondo
Un bit por cada sprite (bit 0 para sprite nº 0, bit 1 para
sprite nº 1…)
0: El sprite está 'delante' del fondo
1: El sprite está 'detrás' del fondo
D01C: Sprite multicolor (bit 0 para sprite nº 0, bit 1 para
sprite nº 1…)
D01D: Duplicado de la altura de los sprites
Un bit por cada sprite (bit 0 para sprite nº 0, bit 1 para
sprite nº 1…)
D01E: Detección de colisiones entre sprites
Un bit por cada sprite (bit 0 para sprite nº 0, bit 1 para
sprite nº 1…)
D01F: Detección de colisiones entre sprite y fondo
Un bit por cada sprite (bit 0 para sprite nº 0, bit 1 para
sprite nº 1…)
D020: Color del marco
Todos los registros de color usan solamente los bits 0…3;
los bits 7…4 se ignoran
D021: Color de fondo
D022: Color de fondo nº 1 para modos multicolor y extenso
D023: Color de fondo nº 2 para modos multicolor y extenso
D024: Color de fondo nº 3 para modos multicolor y extenso
D025: Color del sprite nº 0 para sprites multicolor
D026: Color del sprite nº 1 para sprites multicolor
D027: Color del sprite nº 0
D028: Color del sprite nº 1
D029…D02E: Color de sprites nº 2…7
Los punteros de los sprites se almacenan en VideoRAM+03F8…03FF; los bits 13…6 en un byte para cada sprite. Los bits 15…14 se almacenan (invertidos) en los bits 1…0 de DD00. Los bits 5…0 valen siempre cero.
D.2 Interfaz de Sonido SID 6581 - D400-D41C
D400: Oscilador nº 1: Ajuste de frecuencia: bits 7…0
D401: Oscilador nº 1: Ajuste de frecuencia: bits 15…8
Para obtener el valor de la frecuencia en base al valor de ajuste de
frecuencia, multiplique éste por (tasa del reloj de sistema ÷ 2^24)
D402: Oscilador nº 1: Intervalo de pulsación para onda cuadrada:
bits 7…0
D403: Oscilador nº 1: Intervalo de pulsación para onda cuadrada:
bits 11…8
D404: Mando del oscilador nº 1
Bits 7…4: Definen la forma de onda. Sólo puede elegirse
una forma de onda a la vez. (¡Sin combinaciones!)
Bit 7: Ruido
Bit 6: Cuadrada
Bit 5: Serrada
Bit 4: Triangular
Bit 3: Bit de prueba - 1: Trabar oscilador
Bit 2: Modulación de sonido metálico
Bit 1: Sincronización
Bit 0: Compuerta: Activa el oscilador
Mudanza de 0 a 1: inicia el ciclo de
Ataque-Decaimiento-Sostenimiento
Mudanza de 1 a 0: inicia la fase de Relajación
D405: Oscilador nº 1: Forma de la envolvente
Bits 7…4: Velocidad de ataque
Bits 3…0: Velocidad de decaimiento
D406: Oscilador nº 1: Forma de la envolvente
Bits 7…4: Nivel de sostenimiento
Bits 3…0: Velocidad de relajación
D407…D40D: igual que D400…D406, para el oscilador nº 2
D40E…D414: igual que D400…D406, para el oscilador nº 3
D415: Mando de la frecuencia de filtro: bits 2…0
D416: Mando de la frecuencia de filtro: bits 10…3
Para obtener el valor de la frecuencia de filtro en base al
valor del mando de la frecuencia de filtro, multiplique éste
por 5,8 y súmele 30 Hz.
D417: Mando del filtro y la resonancia
Bits 7…4: Intensidad de resonancia
Bit 3: 1: habilitar filtrado de señal externa
Bit 2: 1: habilitar filtrado del oscilador nº 3
Bit 1: 1: habilitar filtrado del oscilador nº 2
Bit 0: 1: habilitar filtrado del oscilador nº 1
D418: Mando del filtro y el volumen
Bit 7: 1: Silenciar oscilador nº 3
Bit 6: 1: El filtro actúa como filtro de paso alto
Bit 5: 1: El filtro actúa como filtro pasabanda
Bit 4: 1: El filtro actúa como filtro de paso bajo
Bit 3…0: Volumen
D419: Posición del potenciómetro 1
D41A: Posición del potenciómetro 2
D41B: Valor instantáneo de la onda del oscilador nº 3
D41C: Valor instantáneo de la envolvente del oscilador nº 3
D.3 Adaptador de Interfaz Compleja CIA 6526 CIA1: DC00-DC0F / CIA2: DD00-DD0F
Dx00: Registro de datos del puerto A
Dx01: Registro de datos del puerto B
Dx02: Registro de dirección de datos del puerto A
(0: Entrada ~ 1: Salida)
Dx03: Registro de dirección de datos del puerto B
(0: Entrada ~ 1: Salida)
Dx04: Temporizador A, bits 7…0
Lectura: valor instantáneo del temporizador A
Escritura: valor a cargar en el próximo ciclo del
temporizador A
Dx05: Temporizador A, bits 15…0
Lectura: valor instantáneo del temporizador A
Escritura: valor a cargar en el próximo ciclo del
temporizador A
Dx06: Temporizador B, bits 7…0
Dx07: Temporizador B, bits 15…8
Dx08: Décimas de segundo del reloj y la alarma
Lectura: Décimas de segundo del reloj en notación BCD
(bits 3…0)
Escritura y bit 7 del registro de mando B = 0:
Poner los décimas de segundo del reloj
Escritura y bit 7 del registro de mando B = 1:
Poner los décimas de segundo de la hora de la alarma
Dx09: Segundos del reloj y la alarma
Igual modo de acceso que DC08
Dx0A: Minutos del reloj y la alarma (notación BCD)
Igual modo de acceso que DC08
Dx0B: Horas del reloj y la alarma (notación BCD)
Bit 7: 0: AM ~ 1: PM
Igual modo de acceso que DC08
La lectura de DC0B detiene el reloj
La lectura de DC08 vuelve a activarlo
Dx0C: Registro de datos en serie
Dx0D: Registro de mando de interrupciones
Bit 7: Lectura: Al menos una fuente de interrupción está
pendiente
Escritura:
0: Por cada bit apagar el bit de filtro
correspondiente. Los otros bits quedan intactos.
1: Por cada bit apagar encender el bit de filtro
correspondiente. Los otros bits quedan intactos.
Bits 6…5: No se usan (siempre 0)
Bit 4: Señal de la patilla FLAG
Bit 3: Registro de datos en serie lleno o vacío
Bit 2: La hora es la señalada por la alarma
Bit 1: Agotamiento del temporizador B
Bit 0: Agotamiento del temporizador A
La lectura del registro de mando de interrupciones apaga
todos los bits.
Dx0E: Registro de mando A
Bit 7: Frecuencia del disparador del reloj: 0: 60 Hz ~ 1: 50 Hz
Bit 6: Dirección de datos en serie: 0: Entrada ~ 1: Salida
Bit 5: Fuente de activación del temporizador A:
0: Reloj del sistema 1: Patilla CNT
Bit 4: 1: Forzar carga del temporizador A
Bit 3: 0: Reiniciar automáticamente la cuenta regresiva del
temporizador A
1: El temporizador A se detiene al terminar la cuenta
regresiva
Bit 2: 0: Cada agotamiento del temporizador A activa la patilla
PB6 por un ciclo de reloj
1: Cada agotamiento del temporizador A conmuta la
patilla PB6
Bit 1: El agotamiento del temporizador A se indica con la
patilla PB6
Bit 0: Activación del temporizador A: 1: En curso ~ 0: Detenido
Dx0F: Registro de mando B
Bit 7: 0: Poner la hora del reloj
1: Poner la hora de la alarma
Bits 6…5: Fuente de activación del temporizador B
00: Reloj del sistema
01: Patilla CNT
10: Agotamiento del temp. A
11: Agotamiento del temp. A si CNT=1
Bits 4…0: Igual que DC0E para el temporizador B y la
patilla PB7
DC00: CIA1, puerto A
Bits 7…0: Selección de fila del teclado
Bits 7…6: Selección de potenciómetro (sólo un bit puede
estar activado)
Bit 4: Joystick nº 2 Disparo
Bit 3: Joystick nº 2 Derecha
Bit 2: Joystick nº 2 Izquierda
Bit 1: Joystick nº 2 Abajo
Bit 0: Joystick nº 2 Arriba
DC01: CIA1, puerto B
Bits 7…0: Resultado de la columna del teclado
Bit 4: Joystick nº 1 Disparo
Bit 3: Joystick nº 1 Derecha
Bit 2: Joystick nº 1 Izquierda
Bit 1: Joystick nº 1 Abajo
Bit 0: Joystick nº 1 Arriba
DC0D: CIA1, Registro de mando de interrupciones
Bit 4 (patilla FLAG): Entrada de datos por cinta
DD00: CIA2, puerto A
Bit 7: Bus IEC: Entrada DATA
Bit 6: Bus IEC: Entrada CLOCK
Bit 5: Bus IEC: Salida DATA
Bit 4: Bus IEC: Entrada CLOCK
Bit 3: Bus IEC: Salida ATN
Bit 2: RS232: TXD (sólo con cartucho RS232)
Bit 1…0: Bits de orden alto (15…14) de la dirección de
vídeo (invertidos)
DD01: CIA2, puerto B (only with RS232 Cartridge)
Bit 7: RS232: DSR (Equipo de datos preparado)
Bit 6: RS232: CTS (Listo para enviar)
Bit 4: RS232: DCD (Detección de portadora de datos)
Bit 3: RS232: RI (Indicador de campanilla)
Bit 2: RS232: DTR (Terminal de datos preparada)
Bit 1: RS232: RTS (Petición de envío)
Bit 0: RS232: RXD (Recepción de datos)
DD0D: CIA2, registro de mando de interrupciones
Bit 4 (patilla FLAG): RS232: RXD (sólo con cartucho RS232)
D.4 Puerto de la CPU 6510
0000: Registro de dirección de datos: 0: Entrada ~ 1: Salida
0001: Registro de datos del puerto de la CPU
Bits 7…6: No se utilizan
Bit 5: Cinta: Accionamiento del motor (invertido)
Bit 4: Cinta: Botón de reproducción
Bit 3: Salida de datos
Bits 2…0: Configuración de memoria
Lectura: $A000-BFFF $D000-DFFF $E000-FFFF
000: RAM RAM RAM
001: RAM ROM RAM
010: RAM ROM ROM
011: ROM ROM ROM
100: RAM RAM RAM
101: RAM E/S RAM
110: RAM E/S ROM
111: ROM E/S ROM
Escritura: $A000-BFFF $D000-DFFF $E000-FFFF
0xx: RAM RAM RAM
100: RAM RAM RAM
101: RAM E/S RAM
11x: RAM E/S RAM