Module de son SNES sur PC



Résumé

A l'intérieur d'un Snes, il y a un module dédié à la production du son. Le module de son est composé d'un processeur (le SPC700), de mémoire (64Kb), d'un dsp et d'un convertisseur digital/analogue. Le cpu principal du Snes communique avec le module de son via 4 ports.

Voici une page(anglaise) avec photos parlant du module: How sound on the SNES works

Les fichiers de musique de Snes en format .spc sont en fait des sauvegarde d'état des composantes du module de son, comme on peut le faire avec le Snes au complet dans zsnes avec F2, mais dans ce cas ci, seulement la memoire du module, les registre du spc700 et du dsp sont sauvegardés. Cela fonctionne car en general, les jeux chargent un programme dans le module de son qui une fois démarré, s'occupe de faire jouer la musique, et de changer de pièce lorsqu'il en recoit l'ordre.

On peux faire jouer des .spc avec un spc player(programme ou plugin). Un spc player n'est qu'un émulateur de Snes simplifié (son seulement). Depuis longtemps j'espérais un jour trouver un moyen de pouvoir faire jouer la musique en utilisant un module de son directement, pour que les pièces soient reproduites de manière parfaitement fidèle à aux originaux. (Bien sur les émulateurs peuvent faire mieux en utilisant de plus hautes fréquences et meilleurs algorithmes de rééchantillonnage et de mixage, mais ici il est question d'authenticité, et il ne faut pas oublier le "Cool factor")

J'ai trouvé la solution sur le site de caitsith2. Il a trouvé le moyen brancher un module de son sur un port parallel, et a fait un petit programme pour uploader des .spc vers le module et les faire jouer.


goto top Retour en haut


Schéma

Voici le plan:
schematic
Et voici un fichier contenant le "pinout" du module de son: APU_pinout.txt

Tout ces fichiers proviennent du fichier APU Interface.zip que vous pouvez télécharger du site de caitsith2.

Si vous construisez ce circuit, contactez moi, j'aimerais avoir des photos à rajouter dans la gallerie d'images.

Pour l'alimentation, vous pouvez utiliser un régulateur lm7805 pour obtenir du 5 volts à partir d'une tension plus élevée. L'alimentation 'Digital VCC' du module de son consomme 62mA en temps normal, et 36mA lorsque le signal reset est bas. L'alimentaion 'Audio VCC' consomme 1.3mA en tout temps.

Un utilisateur m'a rapporté qu'il avait de la misère à faire fonctionner le montage jusqu'a ce qu'il branche le chassis de l'APU au ground. C'est une excellente idée.

goto top Retour en haut


Photos

J'ai assemblé ce projet dans une boite de plastique. Dans la partie de gauche, on peux voire le petit circuit sur lequel est installé le 74ls32 et le db25. Pour la partie de droite, voir l'image suivante.

On peux voir ici le connecteur du module de son (dessoudé d'un Snes), les sorties audio RCA et écouteur 1/4, le led indiquant que le circuit est sous tension, et 2 leds et transistors reflétant l'état des signal read et write du module de son.

Sur les connecteurs rca, j'ai mis de condensateurs de 1uf pour éliminer l'offset DC (environ 1.2 volts si je me rappel correctement) du module de son. La prise d'écouteurs utilise les resistances de 50 ohms du plan d'origine, mais cela ne fonctionne pas bien avec tout les écouteurs. C'est à cause de l'offset DC, mais les petit condensateurs empirentla situation :( Il faudrait rajouter un mini amplificateur...

Une fois le couvercle refermé voici à quoi cette jolie boite à musique ressemble.

goto top Retour en haut


Logiciel

J'ai tout d'abord tenté d'utiliser le logiciel de Caitsith2, mais cela n'a pas fonctionné. Après avoir regardé à quoi ressemblait les signaux avec un oscilloscope, j'ai déduit que l'ordinateur ne laissait pas asser de temps passer pour permettre aux transistions logique de se faire(cela doit dépendre de la conception du port parallel). Heureusement, le code source était disponible, et en rajoutant des delais au bons endroits, tout a bien fonctionné.

L'interface graphique est écrite en VB, le bas niveau en C/C++ dans une dll. J'ai du modifier et recompiler la dll. Si vous avec des erreurs tel que "Error Loading SPC", essayez ma version modifiée après vous être assuré que tout est bien assemblé.

Voici la dll: APU_DLL.dll et voici le fichier source que j'ai modifié: apuplay.c.

Je ne voulais pas être contraint d'utiliser windows pour me servir du module de son, alors après m'être assuré que tout fonctionnait bien, j'ai adapté le code de la dll pour linux (simplement un appel a iopl pour pouvoir faire des in/out sur des ports, et ajout d'un macro pour les in/out), et j'ai réécrit le code VB en C.(ouch..)

Le code source de mon programme est disponible ici:
DateFichierCommentaires
30 Mars 2005 apu_linux-1.03.tar.gz
  • Ajout du support ppdev (accès au port parallel depuis user-space de maniere portable. Pas nécéssaire d'être root)
  • Plugin xmms (avec ppdev seulement)
  • Version en ligne de commande maintenant avec couleur
  • Option -d pour afficher de l'information de deboggage
  • Le 'status line' est maintenant actif par défaut. Désactivable avec l'option -s
  • Le code est maintenant sous license GPL
6 Mars 2005 apu_linux-1.02.tar.gz Cette versoin peut etre compilée avec DJGPP pour faire un exécutable utilisable sous DOS/win9x (ne fonctionne pas avec 2000/NT/XP car ce programme accède directement à des ports d'E/S. Ceci pourra peut-être vous aider: PortTalk - A Windows NT I/O Port Device Driver ).

Voici une version précompilée pour DOS: apuplay.zip (59k)
5 Mars 2005 apu_linux-1.01.tar.gz Cette version n'a aucune différence de fonctionnalités avec la précédente. J'ai seulement clarifié le code servant a charger et adapter le .spc (la partie traduite de VB) en utilsant des #define au lieu de valeurs hexadecimales dans le code, et j'ai rajouté des commentaires expliquant les démarches nécéssaires.
Novembre 2004 apu_linux.tar.gz Un simple outil en ligne de commande qui prends un .spc donné en paramètre et l'upload dans le module de son en utilisant l'adapteur démontré plus haut. Il supporte partiellement les tag ID666, arrete la musique apres le bon temps (le temps du tag ou spécifié), affiche le titre et le temps restant.

goto top Retour en haut


Ensuite

Je n'ai pas encore fini de travailler sur ce projet. Voici quelques idées futures:

goto top Retour en haut


Gallerie

Je destine cette section à contenir des photos de ce projet réalisé par d'autres personnes.

Mai 2005: Christopher Cox m'a fait parvenir 2 images. Il a réalisé ce projet à l'intérieur d'une joyeuse boîte à lunch!



Mars 2006: Jon Batt m'a fait parvenir 4 images:


Janvier 2008: Matthew m'a fait parvenir ces 5 photos:


Il a aussi mis un vidéo sur youtube!

Septembre 2014: Marcin Mrozowski m'a fait parvenir des photos de son lecteur de musique SPC qu'il a réalisé avec Piotr Mrozowski (Le père de Marcin). Le fichier SPC n'est pas chargé dans le module de son via un port parallèle, mais avec un arduino combiné avec un module bluetooth hc-05!


goto top Retour en haut


Musique

Voici l'enregistrement d'une pièce jouée par ce projet: aquatic_ambiance.ogg

Les meilleurs endroits ou l'on peux télécharger des trames sonores de jeux au complet en format .spc sont:
snesmusic.org
L'archive de spc chez zophar.

goto top Retour en haut


Avertissement

Je ne saurais être tenu responsable pour les dommages que la mise en œuvre des instructions présentées sur cette page pourrait causer à votre équipement, à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement. Notez toutefois que les procédures ci-haut ont fonctionné sans aucun problème pour moi.



goto top Retour en haut


Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Copyright © 2002-2017, Raphaël Assénat
Site codé avecSite codé avec vimDernière mise à jour: 17 Novembre 2014 (Lundi)