Jeux Vidéo

28
Juil.
2021

Débuter avec MAME sur macOS - Partie 7b - Vérification complète des ROMs

Publié par sky

Nous avions vu, dans la partie 7 de notre série, comment vérifier puis réparer les ROMs de MAME. En particulier, nous avions abordé des solutions pour vérifier l'intégralité de votre collection. Particulièrement efficaces pour trouver les ROMs défectueuses, elles avaient malheureusement leurs limites lorsque l'on souhaite aussi lister les ROMs manquantes.

Dans cette suite, nous allons encore plus loin, en vous donnant une solution, parmi d'autres, permettant de tester sa collection tout en notifiant aussi les ROMs qui manquent à cette dernière.

N'ayant pas trouvé de solution directe pour lister ces ROMs manquantes, j'ai donc imaginé un petit process qui me faire de faire le test, quand je le souhaite. Il y a peut être des solutions plus simples ou plus directes, mais malheureusement, je ne les connais pas. Les commentaires restent disponibles si vous souhaitez partager vos connaissances.

En attendant, voici ma méthode, un peu particulière, peut être pas la plus optimisée, mais qui fonctionne.

 

1/ Récupérer la liste des jeux supportés par MAME

La première étape est récupérer la liste de complète des ROMs supportées par MAME. Et plutôt que de l'afficher dans un terminal, je l'enregistre dans un fichier.

mame -listfull > roms.txt

La commande peut prendre plusieurs secondes pour générer la liste.

Cela devrait vous donner un fichier de plus de 40000 lignes, à l'heure de l'écriture de cette article, et la version 0.233 de MAME, le fichier fait exactement 43555 lignes.

 

2/ Nettoyer la liste

La seconde étape est de nettoyer la liste, car on ne souhaite que la première colonne qui correspond au nom des fichiers des roms, et dont nous nous servons pour faire les vérifications.

Commencez par supprimer la première ligne du fichier, avec un éditeur de texte simple tel que TextEdit. Enregistrez le tout en veillant à conserver un format texte brut (TXT).

Maintenant, il faut nettoyer le fichier, pour n'obtenir que le nom des ROMs situé au début et donc supprimer le titre long placé en fin de ligne.

Voici une commande qui va faire le job en quelques secondes

sed -i '.ori' -e "s/ .*$//" roms.txt

La commande va enlever tout ce qui se trouve à partir du premier espace. Cela tombe bien, le nom des ROMs n'en contiennent jamais. Un fichier roms.txt.ori apparaitra à côté, en tant que sauvegarde du fichier original.

Il serait aussi possible de passer par TextEdit pour formatter le fichier, puis l'ouvrir dans Numbers pour ne récupérer que la première colonne, mais pour être honnête c'est très long, et TextEdit n'apprécie pas la manipulation de fichiers avec autant de lignes, et finit par planter.

 

3/ Transformer en commandes

Maintenant, il s'agit de transformer cette gentille liste anodine, en une liste de commandes redoutables. Voici la nouvelle commande à lancer.

sed -i '.ori2' -Ee "s/^(.*)$/mame -verifyroms \1 2>\&1 | grep -E \"not found|is bad\" >> roms2.txt/" roms.txt

Si vous avez un peu suivi, vous verrez que le fichier intermédiaire est une nouvelle fois sauvegardé.

Le contenu du fichier a bien évolué, et contient désormais plus de 40000 actions.

 

4/ Executer la fichier de commandes

Maintenant que tout est prêt, il n'y a plus qu'à exécuter le fichier, et attendre que le Mac effectue toutes les commandes du fichier.

sh roms.txt

Un fichier roms2.txt va être créé à côté de roms.txt, et se remplira au fur et à mesure de l'avancée dans le script.

Ne soyez pas pressés, et faites cela quand vous avez beaucoup de temps devant vous. Car, comparé à la commande unique de vérification de l'intégrité des ROMs présentes du précédent article, le script devrait prendre beaucoup, beaucoup plus de temps. Prévoyez plusieurs heures, ou de couper le fichier en plusieurs morceaux. L'exécution complète du script a pris plus de 24h sur mon Mac.

Une fois terminé, ouvrez le fichier roms2.txt pour voir la liste des ROMs défectueuses ainsi que celles qui sont manquantes.

 

5/ Alternative verbeuse

Comme indiqué précédemment, l'exécution du script peut être très très longue. Si vous souhaitez savoir où vous en êtes, vous pouvez utilisez la commande suivante

sed -i '.ori2' -Ee "s/^(.*)$/echo \"test de \1...\"; mame -verifyroms \1 2>\&1 | grep -E \"not found|is bad\" >> roms2.txt/" roms.txt

en lieu et place de celle, transformant chaque nom en une commande. Elle ajoute en début de ligne, l'indication de la ROMs qui est en train d'être testée.

 

6/ Explication des commandes

Pour les curieux, qui souhaitent en savoir un peu plus sur les commandes exécutées, voici un peu de détail.

Reprenons la première commande

sed -i '.ori' -e "s/ .*$//" roms.txt

Elle a pour but de remplacer, dans le fichier, toutes les lignes tel que

sf2          "Street Fighter II: The World Warrior (World 910522)"

en

sf2

Elle utilise l'application sed. Cette application permet l'édition automatisée d'un fichier. Elle s'utilise telle que

sed paramètres fichier

Regardons donc plus en détail les paramètres donnés à l'application pour le fichier roms.txt.

Le paramètre -i '.ori' permet de faire un backup du fichier original avant de lancer la commande. Le fichier est créé en ajoutant l'extension indiquée.

Le paramètre -e est la commande que va appliquer sed. Nous lui avons transmis la valeur s/ .*$// qui est la partie la plus complexe. Voici comment il faudrait le lire

substituer/cette_valeur/par_cette_valeur/

Les / sont des séparateurs et le s du début indique que nous faisons une substitution. Ensuite la première valeur est une expression régulière qui indique un espace puis tous les caractères qui suivent, quels qu'ils soient. Enfin la valeur de remplacement est vide, puisque nous souhaitons simplement supprimer la fin de la ligne, après le nom de la ROM.

Voyons désormais la seconde commande, dans sa version longue

sed -i '.ori2' -Ee "s/^(.*)$/echo \"test de \1...\"; mame -verifyroms \1 2>\&1 | grep -E \"not found|is bad\" >> roms2.txt/" roms.txt

Cette dernière a pour but de transformer

sf2

en

echo "test de sf2..."; mame -verifyroms sf2 2>&1 | grep -E "not found|is bad" >> roms2.txt

On retrouve la même structure que dans la première commande, ainsi que le même premier paramètre afin d'éviter que le backup de cette commande n'écrase le précédent.

Vous noterez qu'on a ajouté l'option -E qui indique l'on va utiliser des expressions régulières étendues. Le but ici est de remplacer, sur chaque ligne, le nom de la ROMs par la commande complète à exécuter.

La base ne change pas, le s indique toujours une substitution, et le / reste le séparateur.

Le texte à remplacer est donc ^(.*)$. On retrouve le .* de la première commande qui indique tous les caractères. Entre parenthèse, on spécifie que l'on souhaite capturer cette valeur. Enfin, les ^ et $ indiquent les débuts et fins de ligne, avec cela on s'assure que tout le nom est bien pris en compte, même si je pense qu'ils ne sont pas nécessaires.

La valeur de remplacement est donc notre commande complète, avec quelques altérations. La première l'utilisation de \1, cette valeur indique que l'on souhaite utilisé la référence du premier élément capturé. Le but est donc de récupérer automatiquement la valeur qui se trouvait entre parenthèses dans le texte à remplacer, sans la connaitre puisque pour chaque ligne, il sera différent.

La seconde altération est l'utilisation du caractère devant chaque guillemet. Comme notre paramètre est déjà entouré de guillemets, afin que la commande reste lisible et complète par l'ordinateur, il faut lui indiquer que les guillemets de notre commande mame sont dedans.

Jetons maintenant un oeil, à la commande que nous souhaitons exécuter dans notre fichier

echo "test de sf2..."; mame -verifyroms sf2 2>&1 | grep -E "not found|is bad" >> roms2.txt

Il s'agit en fait de 2 commandes, séparée par un point-virgule. La première est assez simple. Nous demandons simplement l'affichage de

test de sf2...

La seconde va demander à MAME de tester la ROM, ici sf2, puis de renvoyer le résultat dans l'application grep qui, elle, ne renverra que les lignes qui contiennent "not found" ou "is bad" qui sont les marqueurs d'une ROM non trouvée, ou incorrecte.

Enfin, nous demandons d'ajouter ces résultats dans le fichier de notre choix. Comme vous pouvez le voir, contrairement à la commande que nous avions vu dans l'article précédent, nous avons 2 caractères > successif. Un > seul indique d'écraser le fichier puis d'écrire dedans. Deux > indique d'écrire à la suite du fichier.

Et comme nous souhaitons le résultat des 40000 commandes, et pas seulement de la dernière, il est préférable d'ajouter à suite.

Vous avez désormais une technique pour vérifier toutes les ROMs de MAME, dans le cas ou vous souhaitez avoir une collection complète. Evidemment, si vous suivez les mises à jour régulièrement, vous n'aurez pas à le faire souvent.

 
Sommaire de la série
 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer