lundi 6 mars 2006

libspc : c'est partis !

Et oui, étant donné que la libmodplug est finie, je commençais à m'ennuyer.
Suite à un topic sur le forum de PureBasic, je me suis dit que ce serait sympas de l'aider :)
Et me voila partis à la recherche de la meilleur librairie de reproduction des SPC.
Mais qu'est ce qu'un SPC ? C'est tout simplement le format de fichier produits par la ... Super Nintendo ! Oui oui, celle la même, celle qui a fait chavirer le coeur de nombreux adolescents prépubères dont je faisait partis.
Enfin, format, pas vraiement, car pour lire ces fichiers, il faut carrément émuler le processeur de la snes (un 65c816) et le processeur sonore de la console, le fameux SPC700, une merveille de technologie aussi merveilleuse que dure à émuler.
Ma quête m'a dont menée à SNES APU, une lib codée à 90% en assembleur x86 (logique) et disposant d'une petite API quelque peu bizzare à mon gout.
J'ai donc repris le codebase de libmodplug pour y intégrer cette librairie et me suis confronté à pas mal de problèmes de compilation, essentiellement dûs à des sauts trop loin pour le compilateur nasm. (un simple "near" suffit à régler cela)
Mais même apres ça, ça ne voulais pas linker à cause de fonctions non résolues : en effet, l'API ASM exportait les fonctions avec un underscore alors que l'API C n'en voulait pas.
J'ai passé pas mal de temps à vouloir recoder toute la librairie pour supporter nasm jusqu'au moment où je m'aperçois ... que cela a déja été fait :-p
Un coup de flag -DSTDCALL dans la lib et dans le préprocessus de compilation de l'API C pour exporter en STDCALL et c'en était fini de tous ces traquas.
Prochaine étape : implémenter, grosso modo, l'api pour lire correctement une musique, une fois ceci fait, faire en sorte de gérer plusieurs instances de lecture comme pour la libmodplug.

Aucun commentaire: