Los registros del SID

El SID, igual que el VIC y otros chips del C64, consta de una serie de registros. Y programar el SID consiste en leer y escribir valores en esos registros.

Más concretamente, el SID tiene 29 registros. Ocupan desde la dirección $d400 hasta la dirección $d41c, ambas incluidas.

Una curiosidad de estos 29 registros es que 25 de ellos son de sólo escritura, mientras que los otros 4 son de sólo lectura. Normalmente los registros, igual que las posiciones de memoria normales, son de lectura – escritura.

Cuando se escribe sobre un registro de sólo lectura, la escritura no tiene ningún efecto. Análogamente, cuando se lee de un registro de sólo escritura, la lectura no tiene ningún efecto.

Una consecuencia de lo anterior (que la mayoría de los registros del SID sean de sólo escritura) es que se suele trabajar sobre una “imagen” de esos registros, y luego esa imagen se transfiere al SID. Es decir, en vez de escribir directamente sobre los registros del SID, se suele escribir sobre unas posiciones de memoria normales que conforman una copia de trabajo del SID, y luego esa copia se transfiere al SID. Esto no es estrictamente obligatorio, pero se hace así por comodidad.

Lo normal, en todo caso, suele ser empezar por inicializar el SID (los 25 registros de sólo escritura), lo cual se consigue inicializando la imagen y luego transfiriendo la imagen al SID. Véanse los programas de ejemplo al final de esta entrada.

En cualquier caso, los registros del SID son los que siguen, que corresponden a siete registros por cada una de las tres voces, cuatro registros relacionados con los filtros, y cuatro registros adicionales (total 7×3+4+4=29 registros):

REGISTRO DIRECCIÓN FUNCIÓN

-VOZ 1 (SÓLO ESCRITURA)-

FRELO1 $d400 Frecuencia de la nota. Parte menos significativa (low).
FREHI1 $d401 Frecuencia de la nota. Parte más significativa (high).
PWLO1 $d402 Ancho de pulso. Parte menos significativa (low). Sólo cuando la forma de onda es cuadrada.
PWHI1 $d403 Ancho de pulso. Parte más significativa (high). Sólo cuando la forma de onda es cuadrada.
VCREG1 $d404 Bit 0: Gate. Activa (1) / desactiva (0) la nota.

Bit 1: Sincronizar con la voz 3.

Bit 4: Forma de onda triangular.

Bit 5: Forma de onda en rampa.

Bit 6: Forma de onda cuadrada.

Bit 7: Forma de onda ruido.

ATDCY1 $d405 Bits 0, 1, 2 y 3: Decaimiento (decay).

Bits 4, 5, 6 y 7: Ataque (attack).

SUREL1 $d406 Bits 0, 1, 2 y 3: Liberación (release).

Bits 4, 5, 6 y 7: Sostenimiento (sustain).

-VOZ 2 (SÓLO ESCRITURA)-

FRELO2 $d407 Frecuencia de la nota. Parte menos significativa (low).
FREHI2 $d408 Frecuencia de la nota. Parte más significativa (high).
PWLO2 $d409 Ancho de pulso. Parte menos significativa (low). Sólo cuando la forma de onda es cuadrada.
PWHI2 $d40a Ancho de pulso. Parte más significativa (high). Sólo cuando la forma de onda es cuadrada.
VCREG2 $d40b Bit 0: Gate. Activa (1) / desactiva (0) la nota.

Bit 1: Sincronizar con la voz 3.

Bit 4: Forma de onda triangular.

Bit 5: Forma de onda en rampa.

Bit 6: Forma de onda cuadrada.

Bit 7: Forma de onda ruido.

ATDCY2 $d40c Bits 0, 1, 2 y 3: Decaimiento (decay).

Bits 4, 5, 6 y 7: Ataque (attack).

SUREL2 $d40d Bits 0, 1, 2 y 3: Liberación (release).

Bits 4, 5, 6 y 7: Sostenimiento (sustain).

-VOZ 3 (SÓLO ESCRITURA)-

FRELO3 $d40e Frecuencia de la nota. Parte menos significativa (low).
FREHI3 $d40f Frecuencia de la nota. Parte más significativa (high).
PWLO3 $d410 Ancho de pulso. Parte menos significativa (low). Sólo cuando la forma de onda es cuadrada.
PWHI3 $d411 Ancho de pulso. Parte más significativa (high). Sólo cuando la forma de onda es cuadrada.
VCREG3 $d412 Bit 0: Gate. Activa (1) / desactiva (0) la nota.

Bit 1: Sincronizar con la voz 3.

Bit 4: Forma de onda triangular.

Bit 5: Forma de onda en rampa.

Bit 6: Forma de onda cuadrada.

Bit 7: Forma de onda ruido.

ATDCY3 $d413 Bits 0, 1, 2 y 3: Decaimiento (decay).

Bits 4, 5, 6 y 7: Ataque (attack).

SUREL3 $d414 Bits 0, 1, 2 y 3: Liberación (release).

Bits 4, 5, 6 y 7: Sostenimiento (sustain).

-FILTROS (SÓLO ESCRITURA)-

CUTLO $d415 Bits 0, 1 y 2: Bits 0, 1 y 2 de la frecuencia de corte / central.
CUTHI $d416 Bits 0 – 7: Bits 3 – 10 de la frecuencia de corte / central.
RESON $d417 Bits 0, 1 y 2: Voces que pasan por el filtro.

Bits 4, 5, 6 y 7: Efecto de resonancia.

SIGVOL $d418 Bits 0, 1, 2 y 3: Volumen global, desde 0 hasta 15.

Bits 4, 5 y 6: Filtros paso bajo (bit 4=1), paso banda (bit 5=1) y paso alto (bit 6 = 1).

Bit 7: Desconecta la voz 3 de la salida de audio.

-VARIOS (SÓLO LECTURA)-

POTX $d419 Conversor analógico digital X.
POTY $d41a Conversor analógico digital Y.
RANDOM $d41b Salida de la voz 3. Si la forma de onda es ruido, sirve para generar valores aleatorios.
ENV3 $d41c Salida de la “envolvente” ADSR para la voz 3.

La forma habitual de trabajar con estos registros será como sigue (el orden puede cambiar):

  • Configurar el volumen.
  • Configurar la frecuencia de la nota.
  • Configurar la envolvente ADSR.
  • Seleccionar la forma de onda.
  • Activar la nota.
  • Esperar un tiempo (duración de la nota).
  • Desactivar la nota.

Lo anterior se puede hacer para una, dos o tres voces. Todo esto se irá viendo en detalle en las entradas que siguen.


Programa de ejemplo: Prog48

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s