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