El SID fue un chip muy avanzado para su época. Ya hemos comentado sus características: tres voces independientes, varias formas de onda, filtros, etc. Esto hizo que la música del C64, típicamente la de sus juegos, fuera superior a la de sus competidores. Y no sólo eso, también fue superior a la de algunos equipos que vinieron después, como los primeros PCs, que apenas tenían un altavoz interno con capacidad para emitir algunos pitidos.
Todo esto hizo que hubiera auténticos forofos de la música del C64. Y algunos llegan hasta hoy, ya que hay varias iniciativas en Internet para recopilar y conservar música del C64. Algunos, incluso, hacen “remixes” de piezas SID (ver http://remix.kwed.org/ o https://www.remix64.com/). Para mi gusto esto último ya es demasiado… 🙂
Una de las iniciativas más destacadas es High Voltage SID Collection, que es una página web y base de datos de ficheros SID. Esta página permite descargar la colección completa (más de 50.000 títulos), buscar piezas en función de sus metadatos (ej. título, autor, año de publicación, etc.) y descargarlas en formato SID, descargar reproductores SID, visitar páginas relacionadas con el C64, etc.
Un fichero SID es un fichero que, curiosamente, no sólo contiene la información musical de la pieza que hemos visto en entradas anteriores (ej. octavas, notas, duraciones, volúmenes, etc.) Además, contiene código máquina del C64 para inicializar el SID y reproducir la pieza.
Por tanto, hay dos formas principales de reproducir un fichero SID:
- Cargándolo en un reproductor multimedia, por ejemplo, de PC o MAC, con capacidad de reproducir ficheros SID. Algunos reproductores tienen esta capacidad de forma nativa, y otros requieren algún tipo de plug-in. Hay muchos ejemplos de reproductores bajo la sección “SID PLAYERS” de HVSC.
- Incluyéndolo en algún programa en ensamblador, por ejemplo, con la directiva “incbin” de CBM prg Studio. Habrá que incluir el fichero en la dirección indicada (en el caso de arriba $7000), inicializar el SID con la dirección indicada (en el caso de arriba con «jsr $7c30»), y reproducir la pieza también con la dirección indicada (en el caso de arriba con «jsr $7c33»).
A continuación, un ejemplo de reproducción con TinySID:
Respecto a la segunda opción, la de incluir un fichero SID en un programa en ensamblador, hay que tener en cuenta que, en función del diseño del programa, la ubicación en memoria del fichero SID podría no resultar adecuada. Para tales situaciones, hay programas que permiten modificar el fichero SID para moverlo a otra posición de memoria. Es el caso de Sidreloc.
Utilizando ficheros SID descargados resulta realmente fácil añadir música y efectos a nuestros programas en ensamblador. Esto puede verse en el programa de ejemplo.
Y a partir de ahora, entrada/salida…
Programa de ejemplo: Prog54
Buenas!
He probado el ejemplo, funciona perfectamente! 🙂
A modo de anécdota:
Al principio no conseguía que funcionase. Cargaba en el CBM Studio los dos archivos .asm y luego compilaba, pero mi error era que compilaba el PROGRAM, en vez del PROYECT. Por lo que no me incluía ni el include del SID ni tampoco añadía al compilado el propio SID.
Finalmente, me di cuenta de mi error y compilando el PROYECTO entero, el programa funcionaba.
Lo bonito del ejemplo, es que reproduce el SID en segundo plano, devolviendo el control al BASIC.
Realicé otras pruebas con otros SID en diferentes posiciones de memoria. Sin utilizar el «Sidreloc», únicamente cambiando las direcciones de memoria en el programa. Y el resultado fue satisfactorio.
Me ha surgido algún problema cargando los SID en direcciones de memoria extrañas, reportando desde el BASIC el Out o Memory, que no me permitía ejecutar luego programas desde el BASIC, pero eso probablemente ha sido por probar a lo loco sin comprobar si estaba pisando alguna zona reservada.
Muy contento con este ejemplo, porque es la primera vez que reproduzco un SID de esta manera.
Ahora con calma, tengo que averiguar porque otros ejemplos que empleaba, no me funcionaban y el tuyo si. XD
Ahora, a buscarle una aplicación.
Gracias y un saludo!
Me gustaMe gusta
Hola, Jeff.
Me alegro de que te haya gustado el ejemplo.
Sí, en general habrá que ensamblar el proyecto completo, no sólo el fichero que se está visualizando en cada momento.
Respecto al ejemplo, devuelve el control al BASIC porque la reproducción de la música se apoya en interrupciones, y el programa principal en código máquina hace un «rts», es decir, termina ordenadamente.
Un saludo.
Me gustaMe gusta