Para obtener
cada melodía, se recurre a la utilización
de cuatro tablas cargadas en memoria de programa
mediante la instrucción RETLW.
Las dos primeras tablas contienen
la dirección de memoria en donde se ubica
el principio de la melodía. Como las direcciones
contienen 10 bits, es necesario dos tablas independientes
con el valor del byte de mayor peso y el byte de
menor peso. La forma de hacerlo automático
y sin tener que recurrir a cálculos de direcciones
es poner las siglas M1 a M16 y los operandos de
compilación HIGH y LOW. El compilador calcula
automáticamente los valores de los punteros
a devolver reemplazando las constantes por las direcciones
sin importar a dónde apunten las constantes
M1 a M16.
Esto permite agregar notas extra
a una melodía, sin importar cuales son las
direcciones de los punteros. Estas dos tablas se
denominan T_HI y T_LO.
Para saber cuántas notas
tiene cada melodía se recurre a una tercer
tabla, llamada T_AUX. Esta tabla contiene la resta
de los punteros de inicio de la melodía y
el inicio de la melodía siguiente. Esta diferencia
la calcula el compilador y queda la cantidad de
notas a tocar durante la melodía.
Las notas y los tiempos se ubican
dentro del mismo byte en una tabla que contiene
todas las notas musicales de todas las melodías.
El formato de las notas y tiempos se muestra en
la figura 2.
Los bits <3:0> representan
a la nota musical sin importar cuál escala
sea. El cuarto bit encendido indica que se trata
de una nota de quinta escala. Los bits <7:5>
representan el tiempo de la nota.
Cada nota ya está configurada
como constante EQU al principio del programa. Por
ejemplo si queremos tocar una nota LA negra de quinta,
lo codificamos de la siguiente manera:
retlw NE+A5
Que equivale a:
retlw b’01111010’
La mayoría de las melodías
no necesita más de dos octavas para ser reproducida.
En el caso de necesitarse más notas, puede
modificarse el programa eliminando la bandera QUINTA
y haciendo una tabla con 32 notas seguidas, la cual
abarcaría has ta 3 octavas (tener en cuenta
que ocupa más memoria de programa).
La otra forma es más complicada
y necesita trasladar todas las notas de la melodía
de manera que se ubiquen dentro |