Me parece codigo un poco complejo como para empezar a experimentar con sonido, porque esta preparado para emitir varios sonidos a la vez y asignar los 3 canales segun los que esten disponibles, como es mas complejo de lo normal puede costar un poco entender como modificarlo.
Convendria hacer unas rutinas propias para generar efectos simples, y en los juegos asignar siempre los mismos canales a los sonidos, por ejemplo los sonidos del protagonista en el canal 1, los de los enemigos en el 2 y 3, podria ser el canal 2 para disparos de los enemigos y el 3 para las explosiones o sonidos de cuando muere alguno.
Como dice riq, vas a tener que usar interrupciones, dispararias algun efecto de sonido "pokeando" alguna direccion con cierto valor, y luego el efecto se reproduciria en paralelo a la ejecucion del juego.
El 6510 tiene dos interrupciones, una IRQ que es enmascarable, es decir que se puede activar o desactivar, y una NMI que siempre se procesa, porque no se puede desactivar.
En el C64 estas interrupciones estan conectadas a varias fuentes que las generan, en el caso de la NMI por ejemplo, la tecla RESTORE la genera directamente, pero tambien puede ser disparada por una de las CIA.
Cuando ocurre una señal de interrupcion, el 6510 termina la ejecucion, coloca el contador de programa en la pila (como si saltara a una subrutina con JSR), coloca el registro de estado en la pila, y luego salta a una direccion especifica para procesar la interrupcion. La IRQ y la NMI tienen direcciones distintas en la ROM, esto esta diseñado asi en el 6510, Commodore en lugar de hacer las rutinas fijas en ROM, lo que hizo fue poner codigo que salta segun vectores de interrupcion almacenados en RAM, de esta manera nosotros podemos alterar esos vectores y hacer que las interrupciones se desvien a nuestras propias rutinas.
Por ejemplo es posible "anular" la tecla RESTORE, cosa que hacen algunos programas como medida de proteccion, haciendo que salte a una rutina propia que no haga mas que retornar inmediatamente, dando la impresion de que se anulo la NMI. Tambien hay juegos que alteran ese vector para que vaya a la pantalla de arranque del juego al presionar RESTORE.
Pero la interrupcion mas util es la IRQ, ya que esta puede habilitarse o deshabilitarse por medio de instrucciones del 6510. La instruccion SEI deshabilita las interrupciones, y CLI las vuelve a habilitar.
Esta interrupcion en el C64 se dispara 50 veces por segundo por medio de un timer que la ROM configura en una de las CIA al arrancar, y tambien tiene un vector con la direccion de la rutina en la ROM que procesa la interrupcion. En el C64 esta rutina se encarga entre otras cosas de leer el teclado, del parpadeo del cursor, y de actualizar la pantalla. La direccion de la rutina es $EA31.
Cuando quieres que algo se ejecute en "multitarea", por ejemplo una rutina para que toque un SID en paralelo con la ejecucion de un juego, lo que tienes que hacer es desviar el vector de interrupcion a la rutina que reproduce el SID. Normalmente las rutinas de reproduccion de SID estan diseñadas para llamarse en la IRQ, por lo que no deberia ser dificil ponerle musica a un juego, solo hay que ver donde se almacena el SID en memoria, inicializar las interrupciones y el SID al arrancar el juego, y despues controlar la reproduccion con las rutinas del propio SID, que suele tener rutinas para comenzar o detener la reproduccion, o seleccionar un numero de tema (si el SID tiene varios).
Lo mas simple en cuanto a sonido seria que en la pantalla de inicio des la opcion de tener musica durante el juego, o efectos de sonido, no creo que sea una buena idea tener ambos simultaneamente porque eso complicaria las cosas. Para poder reproducir efectos mientras suena la musica habria que hackear el reproductor de SID, y eso requiere entender bien su funcionamiento.
Lo que habria que hacer es tener una rutina de generacion de efectos de sonido y el reproductor de SID, y desviar la interrupcion a la rutina que corresponda segun si el usuario selecciono musica o fx. Para no complicar el juego, el programa siempre deberia disparar los efectos de sonido, y la rutina deberia detectar si esta seleccionada la musica o los efectos, si estan los efectos se reproducirian, si esta la musica simplemente se ignoraria, pero no habria que modificar el codigo del juego.
En cuanto a la IRQ, ademas de generarse 50 veces por segundo (cada 20 ms aproximadamente), se puede disparar en determinadas lineas de la imagen, esto es mas comun en juegos porque en el C64 normalmente se dispara en cualquier parte de la pantalla, y el codigo de la interrupcion puede a su vez ser interrumpido por el VIC. En cambio si deshabilitas la generacion de IRQ por timer (que es la que ocurre por defecto) y la reprogramas para que la dispare el VIC en determinada linea de la imagen, puedes asegurarte de que se dispare en un momento en que el VIC no interrumpa la ejecucion, por ejemplo durante el dibujado del borde inferior de la pantalla.
Espero que esto te haya dado una idea sobre de que se tratan las interrupciones, hay mucho mas para ver al respecto.