Ah, entonces en este caso es lo mismo usar un SID ya hecho o la salida del goattracker.
No uso CC65 por lo que no puedo indicarte la sintaxis exacta para incluir o linkear la musica. Pero si lo pasos a seguir para reproducir musica.
(Presupongo que el linker se hace cargo de relocalizar el codigo C a un lugar adecuado para que no interfiera con codigo en assembler)
Usando el SidPlay2W cargas el SID que quieres usar y luego seleccionas File->Properties... y anotas las direcciones que aparecen (Load Range, Init Address y Play Address)
Load Range puede que no lo necesites ya que el linker se debe hacer cargo de esto.
Init Address es la rutina que debes llamar al principio para inicializar el reproductor.
Y Play Address es la direccion que tienes que llamar periodicamente para que la musica suene.
Estas direcciones son especificas de cada SID, y dependen de que editor si uso para crear la musica.
Luego de tener las direcciones usas File->Convert... para convertir el archivo .SID en .DAT (Seleccionando "C64Data (.DAT)" donde dice "Save to type").
Este archivo .DAT resultante es el que usaras para linkear al programa en C.
En tu programa debes hacer 2 cosas:
en un main() llamar a la init address:
__asm__( "jsr init_address" );
Luego tienes que hacer tu propia rutina de interrupción se ejecute 50 o 60 veces por segundo, dentro de la cual tienes que llamar a play_address
por ejemplo, creas un nuevo archivo irq.s conteniendo lo siguiente:
.export _setup_irq
_setup_irq:
sei
lda #<irq
ldx #>irq
sta $314
sta $315
cli
rts
irq:
jsr play_address
rti
Y en tu programa en C, cuando quieres que se comience a reproducir la música llamas a setup_irq:
setup_irq();
Luego al momento de compilar, linkeas tu programa en C, el irq.s y el .DAT
Y eso es todo, la música sonará de fondo sin interrumpir el programa principal.