Inicio retro Artículo

El sonido del MSX: cómo generar música con el chip AY-3-8910

El sonido del MSX: cómo generar música con el chip AY-3-8910

Tres canales, ocho octavas, ruido blanco y un carácter metálico inconfundible. El chip AY-3-8910 no era el más potente de los 80, pero tenía personalidad. De él salieron las melodías de Knightmare, Penguin Adventure y Metal Gear. En este tutorial aprendes a programar música y efectos desde BASIC.

Por qué el AY-3-8910 es especial

  • Tres voces independientes con forma de onda cuadrada.
  • Canal de ruido programable para percusión o efectos.
  • Control de volumen por canal (16 niveles).
  • Sonido crudo, directo, sin filtros.

Paso 1: Acceder al chip desde BASIC

El MSX no tiene comandos BASIC nativos para el sonido más allá del PLAY. Pero podemos usar POKE para escribir directamente en los registros del AY-3-8910. Las direcciones son:

' Puerto de selección de registro: &HA0
' Puerto de datos: &HA1

Para escribir en un registro R con valor V:

OUT &HA0, R
OUT &HA1, V

Paso 2: Los registros importantes

El AY tiene 16 registros (0-15). Los básicos:

  • R0, R1: Frecuencia canal A (tono fino y grueso).
  • R2, R3: Frecuencia canal B.
  • R4, R5: Frecuencia canal C.
  • R6: Control de ruido.
  • R7: Mixer (activa/desactiva canales y ruido).
  • R8, R9, R10: Volumen canales A, B, C (0-15).

Paso 3: Activar un canal

Vamos a hacer sonar la nota LA (440 Hz) en el canal A. Primero, calculamos la frecuencia que entiende el chip:

' Frecuencia deseada: 440 Hz
' Reloj del AY: 1.789772 MHz (en MSX)
' Divisor = reloj / (16 * frecuencia) - 1
' Divisor ≈ 254
' En hexadecimal: &HFE

OUT &HA0, 0    ' Registro 0 (tono fino canal A)
OUT &HA1, &HFE ' Valor bajo

OUT &HA0, 1    ' Registro 1 (tono grueso canal A)
OUT &HA1, 0    ' Valor alto

OUT &HA0, 7    ' Registro 7 (mixer)
OUT &HA1, &H3E ' Activar canal A

OUT &HA0, 8    ' Registro 8 (volumen A)
OUT &HA1, 15   ' Volumen máximo

Si todo va bien, oirás un LA constante.

Paso 4: Un programa para tocar notas

Crea este programa en BASIC. Define las frecuencias de las notas y un pequeño bucle:

10 ' TABLA DE NOTAS
20 DATA 0,0, 0,0 ' Silencio
30 DATA &HEC,0   ' DO
40 DATA &HD5,0   ' RE
50 DATA &HC1,0   ' MI
60 DATA &HAF,0   ' FA
70 DATA &H9F,0   ' SOL
80 DATA &H91,0   ' LA
90 DATA &H84,0   ' SI
100 DATA &H79,0  ' DO (siguiente octava)

110 ' LEER TABLA
120 DIM N(8,1)
130 FOR I=0 TO 8
140 READ N(I,0), N(I,1)
150 NEXT I

160 ' FUNCION PARA TOCAR NOTA
170 DEF FNPLAY(NOTA)
180 OUT &HA0,0: OUT &HA1,N(NOTA,0)
190 OUT &HA0,1: OUT &HA1,N(NOTA,1)
200 OUT &HA0,7: OUT &HA1,&H3E
210 OUT &HA0,8: OUT &HA1,15
220 RETURN

230 ' ESCALA ASCENDENTE
240 FOR I=1 TO 8
250 GOSUB FNPLAY(I)
260 FOR T=1 TO 500: NEXT T
270 NEXT I
280 OUT &HA0,8: OUT &HA1,0

Paso 5: Efectos con ruido

El canal de ruido es perfecto para disparos o explosiones:

' ACTIVAR RUIDO EN CANAL A
OUT &HA0,6      ' Registro 6 (frecuencia ruido)
OUT &HA1,10     ' Valor (menor = más agudo)

OUT &HA0,7      ' Mixer
OUT &HA1, &H36  ' Activar ruido canal A

OUT &HA0,8      ' Volumen A
OUT &HA1,12     ' Fuerte

' Esperar y apagar
FOR T=1 TO 200: NEXT T
OUT &HA0,8: OUT &HA1,0

Primera composición

Con estos mimbres puedes programar melodías simples. El truco está en los tiempos: usa bucles FOR para las duraciones. Los músicos de los 80 hacían esto a mano, nota a nota, sin secuenciadores.

Mantenimiento

Guarda tus programas. En 20 años, cuando vuelvas a leerlos, sonarán igual. El AY-3-8910 no envejece.

Tres canales, mil recuerdos. El MSX no necesitaba más.

#MSX #AY38910 #ChipMusic #ProgramaciónRetro #Sonido8bits

Tiempo de lectura estimado: 7 minutos
780 palabras
Volver al inicio Volver atrás