Qu'est-ce que vspcplay
Basé sur le code d'émulation APU de snes9x, vspcplay est un lecteur de fichier .spc offrant
une représentation visuelle et coloréee de la mémoire, du volume, gain et fréquence des canaux ainsi
que la possibilité d'inspecter le contenu de la mémoire simplement en déplaçant la souris au
dessus de la surface.
Interface principale:
vspcplay utilise la librairie SDL pour l'affichage. La surface de visualisation de la mémoire
occupe presque tout l'espace (512 par 512 pixels) et offre un menu très simple au bas de l'écran.
Visualisation mémoire:
L'élément principal de vspcplay est la surface de visualisation de la mémoire. Le premier pixel
dans le coin supérieur gauche corresponds à l'adresse $0000, et celui dans le coin opposé dans
le coin inférieur droit représente le dernier octet à l'adresse $ffff. Les accès en lecture
sont identifiés en bleu, l'écriture en vert, l'exécution en rouge. L'intensité des pixels accédés
diminue avec le temps mais sans disparaître complètement, laissant ainsi une empreinte.
Hexdump:
En déplaçant le pointeur au dessus de la surface mémoire, un bloc de 128 octets débutant à l'adresse
sous le pointeur est affiché. Il est possible de verouiller/dévérouiller l'adresse en cliquant. Les
valeurs hex sont colorés en vers de la même manière que la surface mémoire, mais en version plus intense
pour faciliter la lecture.
Pitch dots:
La hauteur des notes est représentée par les petits points se déplaçant latéralement.
Les barres de volume:
Chaque canal possède un volume gauche et droite. Il y a aussi un gain, permettant des effets
d'enveloppe. La longueur des barres dépends de l'intensité du son.
Nouveau dans la version 1.4: Les canaux peuvent être déactivés à l'aide des touches 1-8 du clavier.
La touche 0 permet d'activer/déactiver tous les canaux d'un coup.
Outil de ports:
Cet outil simple permet de jouer avec les valeurs des 4 ports de communication par lesquels la
SNES contrôle le module de son. Dans certains jeux, cela permet de reproduire des effets sonores,
dans d'autres, cela permet de changer la pièces jouée.
Appuyez sur les boutons + et - pour changer la valeur du port, ou utilisez la roulette. Les changements
seront immédiatement visibles dans l'espace mémoire de l'APU aux adresses $f4 à $f7.
Utilisation des ports
J'ai expérimenté avec les ports pour certains jeux.
Game | Files | Usage |
Legend of Zelda 3 | loz3-*.spc |
Choix de musique: La valeur du port $f4 sélectionne la musique.
Effets sonores: Values in ports $f6 and $f7 plays sound effects.
The value in port $f5 controls how the rain sounds. When set to $ff the
rain stops.
|
Pilotwings | ptws-*.spc |
Choix de musique: La valeur du port $f4 sélectione la musique, mais seulement
pour les .spc correspondant à l'écran titre ou aux menus. Sinon un son de moteur sera
reproduit.
Effets sonores: Les ports $f5 et $f7 permettent d'émettre des effets sonores.
Le port $f6 contrôle le son du moteur de l'avion.
|
Super Mario World | smw-*.spc |
Choix de musique: Le valeurs entre $0 et $1D dans le port $f6 contrôlent
quelle musique sera jouée. Une valeur de $ff cause un fade out de la pièce courante.
Effets sonores: Les valeurs dans le port $f4 et $f6 génèrent divers effets sonores.
Une valeur de 1 dans le port $f5 reproduit l'effet sonore d'un saut.
Dépêchez vous!: Une valeur de $ff dans le port $f4 fera jouer la courte musique
indiquant qu'il reste peu de temps, après quoi le rythme de la pièce actuelle sera
accéléré.
|
Sim City | sc-*.spc |
Choix de musique: Valeurs entre $01 et $13 dans le port $f4.
Effets sonores: Le port $f6 controôle les effects sonores correspondant aux actions du joueur (placement de segments de route, de zones, etc)
Le port $f7 est utilisé pour d'autres effets sonores, tels que les bruits d'avion et de désastres.
Autre:Changer la valeur du port $f5 fait cesser la musique, mais les effets sonores demeurent fonctionnels.
|
Donkey Kong Country 1 | dkc-*.spc |
Sélection d'un effet sonore par le port $f5. Ensuite, le son est émis à chaque changement du port $f4.
Seuls 7 bits semblent être considérés pour les effets sonores (donc le sone $81 est le même que le son $01).
Les valeurs $ff à $7f semble avoir un usage différent. Si une valeur de $fd ou $fc est présente dans le registre $f5 au moment où $f4 change, la vitesse de la musique augmente.
J'ai tenté de compiler une liste des différents effets sonores.
dkc1.html
|
Donkey Kong Country 2 (Diddy's Kong Quest) | dkq-*.spc |
Effets sonores: Lorsque $f4 change, la valeur du port $f5 (de $00 à $76) détermine l'effet à jouer.
|
Donkey Kong Country 3 (Dixie Kong's Double Trouble | dkdt-*.spc |
Effets sonores: Lorsque $f4 change, la valeur du port $f5 (de $00 à $60) détermine l'effet à jouer.
|
Super mario kart | smk-*.spc |
Effets sonores: Certaines valeurs dans le port $f5 permettent de reproduire certains effets sonores.
Le hauteur du son du moteur est contrôlée par des valeurs de $0 à $7f dans le port $f6. (Aucun son si 0).
La valeur du port $f7 contrôle le son et l'équilibrage gauche/droite des karts circulant à proximité.
Other: Faire passer la valeur du port $f4 de $00 à $ff génère un son de pause, après quoi la musique
continue de jouer à un volume réduit.
|
Historique
En décembre 2004, j'ai suivi les schémas de caitsith2
(
la page en question ici)
pour brancher l'APU (Audio Processing Unit) d'un SNES sur un PC via le port parallèle. Le but
était de faire jouer des fichiers .spc (fichiers de musique SNES) sur le module de son retiré d'une
console SNES.
J'ai créé une page à propos de ce projet:
Module de son SNES sur PC).
Les fichiers .SPC sont en fait une représentation complète (save state) de l'état du CPU et de la mémoire
du module de son du SNES, le spc700. Cela fonctionne très bien, mais comme il faut télécharger 64kB de mémoire
vers l'APU via le port parallèle, il faut environ 5 secondes avant que la musique commence...
Il me semblait probable que la plupart des pièces musicales n'utilisent qu'une fraction de la mémoire.
Par exemple, une partie de la mémoire est sans doute occupée par les effets sonores, et peut-être
même des intruments inutilisés. Une pièce n'utilisant que 50% de la mémoire pourrait donc être
téléchargée deux fois plus rapidement!
La question était donc, mais comment savoir quelles parties de la mémoire ne sont pas nécessaires...
Le format .SPC n'est d'aucune aide, puisqu'il ne s'agit que d'une image de la mémoire
et de l'état du CPU. (voir
spc_file_format.txt pour plus de détails).
J'ai pensé qu'une manière d'arriver à savoir quelles parties de la mémoire sont nécessaires serait
de modifier un émulateur afin de noter les accès mémoire.
Je me suis basé sur le code source d'un plugin xmms (lui même basé sur snes9x) pour créé un petit
outil permettant d'enregistrer les accès mémoire. Je savais que snes9x n'était peut-être pas le meilleur
émulateur, mais c'était le seul qui n'était pas écrit en assembleur dont le code source était
disponible, et je voulais pouvoir utiliser cet outil sur le workstation Sparc que j'utilisais à l'époque.
J'ai décidé de représenter la mémoire en blocs de 256 octets. Lorsqu'une lecture survient dans un bloc
donné, celui-ci est marqué comme étant utilisé.
J'ai eu l'idée de représenter visuellement la mémoire en tant qu'un bloc de 256x256 pixels (65536 pixels)
employant un code de coleur pour les lecteurs, écritures, et exécution de code. J'ai adoré le résultat
et n'ai pas pu m'empêcher d'ajouter les barres de volumes, des indicateurs d'intensité ainsi qu'un outil
pour expérimenter avec les ports. (Le CPU principal de la SNES communique avec le CPU du module de son
par 4 ports)
Téléchargement
Version 1.4 22 juillet 2022 (Vendredi) |
---|
- Ajout d'une option pour créé un fichier .wav (--waveout)
- Ajout d'options pour déactiver/activer certains canaux (--mute et --unmute en ligne de commande)
- Contrôle par le clavier (1-8 pour activer/déactiver des canaux, 0 pour activeré/déactiver tous les canaux, N/P pour avancer/reculer d'un fichier, R pour recommencer, et ESC pour quitter)
- Corrige plusieurs bugs de buffer overflows et warnings de compilation...
|
Fichier(s): vspcplay-1.4.tar.gz (79.1 KB)
|
Version 1.3 2 novembre 2005 (Mercredi) |
---|
- Added the --apply_mask_block command line option which applies the mask to the file (fills unused 256 bytes blocks) with a pattern.
- Added the --filler command line option which is used to specify the filler byte for the --apply_mask_block option. Default is $00
Also, a tool to apply mask files to spc files has been added to the utils/ subdir. |
Fichier(s): vspcplay-1.3.tar.gz (54.5 KB)
|
Version 1.2 8 juillet 2005 (Vendredi) |
---|
- Added --status_line command line option (displays a status line in the terminal).
- Reads in the sample directory were not reported (Resulting in unusable masks)
|
Fichier(s): vspcplay-1.2.tar.gz (65.2 KB)
|
Version 1.1 18 juin 2005 (Samedi) |
---|
- Added --extra_time (Play x seconds longer than tag time) and --nice (try to reduce CPU used by graphics) command line options and win32 support (with a GUI frontend!!).
|
Fichier(s): vspcplay-1.1.tar.gz (72.2 KB)
vspcplay_win32.rar (710 KB)
|
Version 1.0 9 juin 2005 (Jeudi) |
---|
Initial release |
Fichier(s): vspcplay-1.0.tar.gz (50.5 KB)
|
Ce projet est aussi disponible sur GitHub!Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet,
vous pouvez
m'écrire ou utiliser le dépôt GitHub:
https://github.com/raphnet/vspcplay