Solo falta que a lo largo del año incluyas música y efectos InGame
Desde el 2010, primero me meti a los Gráficos, luego al Basic, luego al Ensamblador y tengo que reconocer que el tema de la Musica es mi gran carencia hoy en dia,..también te digo que llevo cinco años pidiendo ayuda o mini listados en Ensamblador y todavia estoy esperando respuesta, por desgracia no podre tener esas cosas en Kabura,..sí habrá Efectos pero sencillos aunque abundantes, ya no me da tiempo al tema del Music in game porque sino se retrasaría mucho el Estreno ya que eso me llevaría un estudio detallado de todos los libros relacionados con Musica y Sonido en Boomjack Commodore (http://www.bombjack.org/commodore/)..
Pero prometo que para el siguiente proyecto (que nos gustaría estrenar tambien en 2016) el tema de la Music in game y super efectos será lo primero a aprender, porque tarde o temprano tras graficos y ensamblador algun dia tendre que "tocar" el sonido.
No me enrollo mas y me vuelvo al Claustro.
Habría que diferenciar entre generar música o sonido desde programa y reproducir un fichero SID donde ya tenemos una melodía generada con algún player.
Esto último (reproducir un fichero SID) es muy sencillo, mucho más de lo que parece. Yo aprendí con Lobo y me sorprendí de lo fácil que resulta.
Antes de nada hay que entender lo que es un SID, no es únicamente un fichero que contiene información de la melodía, sino que también tiene una rutina reproductora embebida, es decir, no tenemos que programar un player que lo reproduzca sino simplemente llamar a esa rutina de forma periódica. Como podéis imaginar, para llamar a esa rutina usaremos las interrupciones.
Antes de nada usemos un programa tipo sidplay2 para abrir un SID a nuestra elección, por ejemplo, la música del prisionero compuesta por Baron Ashler:
Filename: ThePrisonerSFX.sid
Data size: 2711 bytes
File type: PlaySID one-file format (PSID)
File status: No errors
Name: The Prisoner
Author: Ron Grainer
Released: Arranged by Baron Ashler
Load range: $1000-$1A96
Init address: $1000
Play address: $1003
Number of songs: 1
Default song: 1
SID model: 6581
Clock speed: PAL
Reloc region: Auto
De ahí sacamos tres datos fundamentales para poder reproducir nuestro SID, el
Load Range (donde debemos cargarlo), el
Init address (dirección que hay que llamar para inicializar el SID) y el
Play address (donde está la rutina que lo reproduce).
Vamos ahora a picar unas cuantas líneas de código (yo programo en KickAss):
.pc = $1000
.import c64 "musica.dat"
con esto lo que estoy haciendo es cargar el fichero SID a partir de la dirección $1000 de memoria (porqué esa dirección? pues por la información que nos proporciona el propio SID, recordad el Load Range).
lda #$00 // numero de pista
jsr $1000 // init music
sei
lda #<irq1
sta $0314
lda #>irq1
sta $0315
asl $d019
lda #$7b
sta $dc0d
lda #$81
sta $d01a
lda #$80
sta $d012
cli
con esta parte lo que estoy haciendo es seleccionar la primera pista del SID (si tuviera varias) y a continuación llamar (saltar) a la posición $1000 que es donde se encuentra la rutina de inicialización del SID (recordad la Init address).
Posteriormente estoy preparando la rutina raster que se encargará de llamar periódicamente al player embebido en el SID.
irq1:
asl $d019
jsr $1003 // play music
pla
tay
pla
tax
pla
rti
y con esta rutina raster (que llama a la dirección $1003 donde está el player, recordad la Play address) reproduzco el SID. Fácil verdad?
Lo he contado todo rápido y muy resumido pero espero que se entienda.