Home
Home
Principio Anterior Contenido Próximo Término
Principio - Anterior - Contenido - Próximo - Término
English Deutsch Italiano
English - Deutsch - Italiano

Apéndice D: Circuitos Auxiliares del C64

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
Home Principio Anterior Contenido Próximo Término Top of Page

Fuente: http://www.salto.at/Power64/Documentation/Power64-Leame/AD-Circuitos_Auxil.html
Power64 Homepage: http://www.infinite-loop.at y http://www.salto.at - EMail:
© Roland Lieger, Goethegasse 39, A-2340 Mödling, Austria - Europe
Últiomo Modificación: 29 de Febrero de 2008
Valid HTML 4.01!