|
|
|
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.
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.
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
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)
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
Fuente: http://www.infinite-loop.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 |