Accueil > Dossiers > Les Émulateurs > Débuter avec MAME sur macOS - Partie 7 - Vérification avancée des ROMs

Débuter avec MAME sur macOS - Partie 7 - Vérification avancée des ROMs

mercredi 25 mars 2020, par sky

Maintenant que nous avons vu la base de la vérification des ROMs, rentrons dans le détails. Cet article va vous permettre de comprendre la structure d’une ROM, de savoir comment les "réparer", y compris lorsqu’il y a de petites subtilités.

1/ Composition d’une ROM

Avant de voir comment réparer une ROM, voyons comment celle-ci sont construites. C’est finalement assez simple, puisqu’il s’agit d’un fichier zip. Il s’agit donc d’une archive compressée.

A l’intérieur de cette archive se trouve l’ensemble des éléments de la ROMs. Ils se trouvent tous tout simplement au premier niveau.

Parce que c’était trop simple jusqu’ici, regardons les subtilités relatives aux clones et aux parents. Les fichiers des ROMs s’organisent selon 3 catégories : merged, split merged, et non merged.

  • merged : Toutes les ROMs clones sont regroupées dans la ROM parente. Chaque clone dispose de son propre sous-dossier. Dans l’idéal, les clones ne contiennent que les éléments qui diffèrent de la ROM parente.
  • split merged : C’est un peu le format historique. Chaque ROM parente contient l’ensemble de ses fichiers. Chaque clone, est lui, composé uniquement des éléments qui diffèrent de la ROM parente. Mais le clone dispose de son propre fichier.
  • non merged : Les parents, ainsi que les clones, disposent tous de l’ensemble des fichiers nécessaires à son bon fonctionnement.

Le format "non merged" est pratique lorsque l’on ne souhaite que quelques jeux dans sa collection de MAME, et qu’en tant qu’amateur avisé, on recherche une version particulière de l’un ou l’autre des jeux. Ainsi on ne se pose pas la question de savoir si l’on a bien la bonne ROM parente, etc ...

Cependant dès que l’on souhaite une collection un peu plus grande, ce format peut vite prendre de la place sur les disques car tous les éléments sont dupliqués. Dans ce cas, il est préférable de passer sur le format slip merged. Ainsi, on va économiser beaucoup d’espace disque.

Enfin, avec les années passant, le nombre de ROMs acceptées par MAME se multiplient. Avec près de 40000 jeux supportés, cela peut rapidement faire beaucoup de fichier dans un seul dossier. Si cela ne pose aucun soucis à macOS, pour nous cela peut être compliqué de trouver une ROM. Pour palier un peu à ce soucis, il est préférable d’adopter le format merged.

Mais ne prenez pas peur, si votre collection contient des ROMs aux 3 formats différents, cela fonctionnera aussi. C’est juste ... un peu moins bien rangé. Attention cependant, il peut arriver que l’on possède une version merged et une autre version split d’un même clone. Si je ne me trompe pas, MAME vérifie les deux versions pour récupérer celle considérée comme correct. Attention, en nettoyant les ROMs, de ne pas jeter la bonne version.

Enfin, il existe un 4ème format, qui n’est utilisé que pour les mises à jour de ROMs.

  • diff : ce format, un peu particulier, ne contient que les éléments qui changent entre 2 versions. Cela peut être utile lors d’un changement de version pour mettre à jour sa collection sans télécharger les ROMs complètes. Il faudra cependant les fusionner pour qu’elles fonctionnent. Il existe des outils qui font ce travail, mais le but, ici est de savoir comment le faire manuellement. De plus, n’ayant pas encore testé ces outils, je ne saurai lequel vous conseiller.

2/ Réparer les ROMs

Réparer une ROM consiste à en fusionner plusieurs versions en ne conservant, à chaque fois, que les bons éléments afin d’obtenir une version finale correcte.

Que ce soit, en récupérant une mise à jour de ROMs diff ou à force de chercher les ROMs sur Internet, vous disposerez de plusieurs versions d’un même jeu. Si aucune des versions n’est correcte, il est possible qu’en combinant les éléments des différentes ROMs, vous puissiez arriver à réparer et donc à utiliser la ROM.

Réparer une ROMs à partir de plusieurs versions nécessite un peu de rigueur. En effet, on va disposer de plusieurs fois des mêmes éléments, et il ne faudra pas se tromper, et ne garder que les bons.

La première chose à faire est de trouver les éléments manquants, endommagés ou obsolètes. C’est assez facile car il s’agit de toutes les lignes affichées avant le résultat lorsque l’on effectue un verifyroms, nous l’avions dans la première partie de l’article. Ainsi si teste la ROM sf2cems6b

mame -verifyroms sf2cems6b

et que j’obtiens

sf2cems6b   : ms6_gal20v8a.u104 (343 bytes) - NOT FOUND
romset sf2cems6b [sf2ce] is bad
1 romsets found, 0 were OK.

Il faudra que je trouve le morceau ms6_gal20v8a.u104. Si je dispose d’une autre ROM et que le résultat de la vérification me donne

sf2cems6b   : ms6_gal20v8.u234 (343 bytes) - NOT FOUND
romset sf2cems6b [sf2ce] is bad
1 romsets found, 0 were OK.

Malgré leur similitude dans le nom, il s’agit bien de deux éléments différents. Il suffit de prendre un morceau de l’une pour le mettre dans l’autre ou vice-versa.

Pour cela, il suffit de décompresser les deux fichiers, de copier l’élément en question, puis de recompresser la ROM. La recompression peut se faire avec l’outil intégré à macOS, avec un clic-droit sur le dossier > Compresser.

Il est préférable de mettre de côté les ROMs originales pour deux raisons. La première est que si vous vous trompez, vous disposerez toujours de vos sources. La seconde est qu’à la recompression, macOS ajoutera un "2" à la suite du titre de la ROM, et donc ne sera pas pris en compte par MAME.

Basiquement, je vous invite à créer un dossier dédié à l’édition des ROMs. Cela peut paraitre fastidieux, mais la petite gymnastique que cela nécessite vous limitera dans bon nombre d’erreurs.

3/ Petites subtilités

Maintenant, regardons les petites subtilités qui pourraient vous poser problème.

Lorsqu’une ROM n’est pas fonctionnelle, il faut être très attentif à l’erreur obtenue.

Ainsi, si le résultat de la vérification suivante

mame -verifyroms knightsb2

est

knightsb2   : sound.code.512 (65536 bytes) - NOT FOUND (knights)
romset knightsb2 [knights] is bad
1 romsets found, 0 were OK.

La ROM knightsb2 est un clone de knights, et en regardant la ligne relative au fichier non trouvé, on voit en bout de ligne, qu’entre parenthèse se trouve le nom de la rom parente. Cela veut dire que l’erreur vient du parent, et pas du clone.

Le principe est identique pour les BIOS, ainsi, si la vérification de la ROM neodrift

mame -verifyroms neodrift

nous renvoit l’erreur suivante

neodrift    : sfix.sfix (131072 bytes) - NOT FOUND (neogeo)
romset neodrift [neogeo] is bad
1 romsets found, 0 were OK.

il faudra regarder au niveau du BIOS neogeo.

Regardons un nouveau cas, avec le test suivant :

mame -verifyroms popn1

dont le résultat, chez moi, est

popn1       : 803jaa11 - NOT FOUND
romset popn1 is bad
1 romsets found, 0 were OK.

Vous pouvez récupérer toutes les roms popn1.zip que vous n’aurez jamais l’élément 803jaa11 dedans. Tout simplement parce que le fichier 803jaa11 est un CHD, et qu’il doit se trouver dans le dossier CHD.

Pour corriger ce soucis, il est nécessaire de placer le fichier CHD dans le bon dossier.

4/ Trouver les éléments dans vos ROMs existantes

Voici une petite astuce non négligeable. Parfois, il est possible de corriger une ROM en récupérant l’élément dans une ROM très proche.

Par exemple, reprenant l’exemple précédent

mame -verifyroms sf2cems6b

avec le résultat

sf2cems6b   : ms6_gal20v8.u234 (343 bytes) - NOT FOUND
romset sf2cems6b [sf2ce] is bad
1 romsets found, 0 were OK.

Il suffit de fouiller dans les ROMs adjacentes, pour parfois trouver l’élément, qui se trouve être identique pour les deux.

Ainsi, si je récupère le morceau ms6_gal20v8.u234 dans la ROM sf2cems6a, et que je le place dans sf2cems6b, j’obtiens le résultat escompté :

mame -verifyroms sf2cems6b
romset sf2cems6b [sf2ce] is good
1 romsets found, 1 were OK.

La méthode peut paraitre un peu brute, ici mais il est possible de faire cela avec plus de rigueur et d’efficacité en utilisant les commandes de MAME, et quelques astuces du terminal. Voici une petite marche à suivre.

Premièrement récupérons la liste des composants de notre ROM non fonctionnelle

mame -listroms sf2cems6b

Le résultat est une liste complète

ROMs required for driver "sf2cems6b".
Name                    Size Checksum
ms6b.u0               262144 CRC(b6f3724b) SHA1(aa8eea819fdaf205ca068067a4624715a8cf6c8c)
ms6b.44                  279 CRC(5f05a861) SHA1(26b8cab0e66b596ef54768b2811c1c1939d3135c)
ms6b.u196            1048576 CRC(435153d5) SHA1(3f6f318a9b3def8d62ee576dbaaef623d55c1c64)
ms6b.u10              262144 CRC(c812b7b2) SHA1(23ed0e1bd8b2015b39ad5e452dff0e372df0d5c9)
ms6.u70              1048576 CRC(baa0f81f) SHA1(5e55a5c4ad64be17089670a3d73c1c0d9082351b)
ms6.u68              1048576 CRC(8edff95a) SHA1(8db35c5940dcc1f09f11be26051b2f98445d10e7)
ms6.u69              1048576 CRC(468962b1) SHA1(fdfd2a7cbbcafaa37e972da425446d471e1e1dae)
ms6.u64              1048576 CRC(8165f536) SHA1(8178fe2240c73c7283592aa31dd24aec5bf9429b)
ms6.u19              1048576 CRC(39d763d3) SHA1(a2a0bddecaca6046785ccddfd20b8356a6ec36f0)
ms6.u18              1048576 CRC(2ddfe46e) SHA1(517a76166d387375a75a36b2785de86898bdc777)
ms6.u31               262144 CRC(35486f2d) SHA1(abdcfc73d2d42a7f3523e1a383c1ce5563c4fbd7)
ms6.u29               262144 CRC(e4eca601) SHA1(acee4988f12a037a3b50f3923892fdac65f35805)
ms6.u191               65536 CRC(08f6b60e) SHA1(8258fcaca4ac419312531eec67079b97f471179c)
ms6.u210              262144 CRC(6cfffb11) SHA1(995526183ffd35f92e9096500a3fe6237faaa2dd)
ms6.u133               65536 CRC(13ea1c44) SHA1(5b05fe4c3920e33d94fac5f59e09ff14b3e427fe)
ms6_pal16l8.u173         260 NO GOOD DUMP KNOWN
ms6_pal16l8.u176         260 NO GOOD DUMP KNOWN
ms6_pal16l8.u177         260 NO GOOD DUMP KNOWN
ms6_pal16l8.u178         260 NO GOOD DUMP KNOWN
ms6_pal16l8.u183         260 NO GOOD DUMP KNOWN
ms6_pal16l8.u198         260 NO GOOD DUMP KNOWN
ms6_pal16l8.u218         260 NO GOOD DUMP KNOWN
ms6_pal16l8.u231         260 NO GOOD DUMP KNOWN
ms6_gal16v8.u6           279 NO GOOD DUMP KNOWN
ms6_gal16v8.u95          279 NO GOOD DUMP KNOWN
ms6_gal16v8.u96          279 NO GOOD DUMP KNOWN
ms6_gal16v8.u107         279 NO GOOD DUMP KNOWN
ms6_gal16v8.u125         279 NO GOOD DUMP KNOWN
ms6_gal16v8.u139         279 NO GOOD DUMP KNOWN
ms6_gal16v8.u151         279 NO GOOD DUMP KNOWN
ms6_gal16v8.u245         279 NO GOOD DUMP KNOWN
ms6_gal20v8.u15          343 NO GOOD DUMP KNOWN
ms6_gal20v8.u16          343 NO GOOD DUMP KNOWN
ms6_gal20v8.u20          343 NO GOOD DUMP KNOWN
ms6_gal20v8.u21          343 NO GOOD DUMP KNOWN
ms6_gal20v8.u39          343 NO GOOD DUMP KNOWN
ms6_gal20v8.u40          343 NO GOOD DUMP KNOWN
ms6_gal20v8.u104         343 CRC(67b56d29) SHA1(261ae6e968100d5a9c1ee68ea684bb2b1eef3cf8)
ms6_gal20v8.u131         343 NO GOOD DUMP KNOWN
ms6_gal20v8.u135         343 NO GOOD DUMP KNOWN
ms6_gal20v8.u140         343 NO GOOD DUMP KNOWN
ms6_gal20v8.u232         343 NO GOOD DUMP KNOWN
ms6_gal20v8.u233         343 NO GOOD DUMP KNOWN
ms6_gal20v8.u234             SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)
ms6_gal20v8.u235         343 NO GOOD DUMP KNOWN
ms6_gal22v10.u50         741 CRC(dc665408) SHA1(a7161a03add24a01d547189e9bfaf11474bbe878)
ms6_gal22v10.u134        741 CRC(b66848bb) SHA1(edef02bc7fc0195f56cf815c1b862bee095951c8)

Comme vous pouvez le voir, l’élément ms6_gal20v8.u234 ne dispose pas de taille, ni de CRC, mais elle dispose bien d’un SHA1. Pour rappel, c’est ce SHA1 que MAME compare pour vérifier que les composants de la ROMs sont bien ceux attendus, et sont corrects.

Maintenant utilisons la même commande pour regarder dans sf2cems6a. Vous devriez trouver le fameux élément ms6_gal20v8.u234. S’il dispose d’une taille et d’un CRC, c’est qu’il est bien présent. Si le SHA1 est identique pour les deux, c’est que nous pourrons le copier pour faire fonctionner la ROM défectueuse.

Maintenant, utilisons les fonctionnalités du terminal de macOS pour simplifier la recherche. Avec la commande grep, nous ne sommes plus obligé de récupérer toutes les lignes. Laissons le Mac faire la recherche pour nous. Voici la commande

mame -listroms sf2cems6a | grep ms6_gal20v8.u234

pour information le caractère | se fait avec alt+maj+L. Et voici le résultat

ms6_gal20v8.u234         343 CRC(2c16b7c6) SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)

grep nous a renvoyé uniquement la ligne contenant le texte ms6_gal20v8.u234.

Et par ce que l’on est encore plus fainéant, on ne souhaite pas rechercher dans toutes les ROMs une à une mais laisser faire le Mac ce travail désagréable. Pour cela il suffit d’utiliser le caractère * comme joker. Ce caractère va se substituer à un ou plusieurs caractères dans le nom des ROMs. Ainsi je peux lui faire rechercher dans toutes les ROMs qui commencent par sf2ce.

mame -listroms "sf2ce*" | grep ms6_gal20v8.u234

Noter les doubles apostrophes autour de sf2ce*. Malheureusement, le résultat n’est pas très satisfaisant

ms6_gal20v8.u234         343 CRC(2c16b7c6) SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)
ms6_gal20v8.u234             SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)
ms6_gal20v8.u234         343 CRC(2c16b7c6) SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)

Certes, l’élément a été trouvé mais on ne sait pas dans quelle ROM. On sait cependant que la seconde ligne correspond à notre ROM défectueuse, car l’élément n’y est pas présent.

Améliorons la commande telle que

mame -listroms "sf2ce*" | grep "ms6_gal20v8.u234|driver"

Ainsi on cherche, soit l’élément soit la première ligne de la réponse contenant le mot "driver".

ROMs required for driver "sf2ce".
ROMs required for driver "sf2ceb".
ROMs required for driver "sf2ceblp".
ROMs required for driver "sf2cebltw".
ROMs required for driver "sf2ceds6".
ROMs required for driver "sf2ceea".
ROMs required for driver "sf2ceja".
ROMs required for driver "sf2cejb".
ROMs required for driver "sf2cejc".
ROMs required for driver "sf2cems6a".
ms6_gal20v8.u234         343 CRC(2c16b7c6) SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)
ROMs required for driver "sf2cems6b".
ms6_gal20v8.u234             SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)
ROMs required for driver "sf2cems6c".
ms6_gal20v8.u234         343 CRC(2c16b7c6) SHA1(f73ad0253a861d5306a09b1f97dfce622b19cdcf)
ROMs required for driver "sf2cet".
ROMs required for driver "sf2ceua".
ROMs required for driver "sf2ceub".
ROMs required for driver "sf2ceuc".
ROMs required for driver "sf2ceupl".

Ainsi, on sait dans quelles ROMs la recherche a été effectuée, et dans lesquelles il a été trouvé.

Vous pouvez effectuer les recherches comme bon vous semble, en utilisant le wildcard n’importe ou dans le nom de la ROM, y compris au début ou au milieu du nom.

Il faut juste garder à l’esprit que plus vous élargirez la recherche sur de nombreuses ROMs plus cela prendra du temps. A l’extrème, vous pouvez lancer la recherche sur toutes les ROMs disponibles, mais si vous disposez d’une collection plutôt complète, il faudra compter sur plusieurs minutes voir, plusieurs dizaines de minutes avoir de voir le bout de la commande. De plus, vous obtiendrez la liste complète de vos ROMs parsemée d’un ou deux résultat qu’il faudra retrouver.

Dans le cas précédent, les éléments se trouvaient dans des ROMs quasi identiques. Mais il faut savoir que certains composants sont génériques et se trouvent dans une multitude de ROMs qui n’ont rien à voir les unes avec les autres.

Une fois trouvés, vous pouvez les mettre de côté pour les récupérer à chaque fois que nécessaire. Voici ma petite liste de ces éléments :

  • 317-0034.key
  • 75585130_gal20v8c.ic29
  • ioc1.ic1
  • ioc1.ic7
  • u01508001100b.u20f

Je n’hésiterai pas à mettre cette liste à jour si je tombe sur d’autres composants que l’on retrouve dans plusieurs ROMs.

5/ Vérification multiple

Si vous tenez le coup, voici la dernière étape de notre vérification avancée. Nous allons voir ici comment réaliser des vérifications groupées afin de gagner encore un peu plus de temps.

En lançant la commande suivante

mame -verifyroms

vous allez effectuer la vérification de toutes vos ROMs. Et cela va prendre un certain temps.

Comme les ROMs fonctionnelles ne m’intéressent pas, dans le cas présent, voici une commande modifiée pour ne récupérer que les ROMs défectueuses.

mame -verifyroms | grep 'is bad'

Enfin, comme je ne compte corriger toutes mes ROMs en une fois, et que je ne souhaite pas relancer la commande à chaque fois, je vais enregister le résultat dans un fichier.

mame -verifyroms | grep 'is bad' > verif_roms.txt

Les résultats seront écrits dans le fichier texte verif_roms.txt, dans le dossier courant. Et le seul résultat que vous obtenez dans le terminal est le décompte final qui devrait ressembler à quelque chose comme cela

36691 romsets found, 36601 were OK.

Avec ce résultat, j’ai 90 ROMs qui ne sont plus valides, et que je dois corriger. Je n’ai plus qu’à prendre les ROMs des 90 lignes du fichier pour les vérifier et les corriger une à une. N’oubliez pas de retirer les lignes correspondantes au fur et à mesure, pour ne pas refaire les mêmes vérifications plusieurs fois.

Peut on encore optimiser cela et gagner un peu de temps ? La réponse est oui.

Il y a deux choses à voir dans notre liste. La première est que MAME a tendance à tendance à ne vérifier les bios qu’après les ROMs. Bien souvent, en mettant les BIOS à jour, les ROMs les utilisant re-deviennent fonctionnelles.

Vous le trouverez facilement en fin de fichier. Les ROMs sont testées par ordre alphabétique du nom du fichier, tout comme les BIOS. Ainsi, les BIOS se trouvent après une cassure de l’ordre alphabétique.

Vous pouvez, d’ailleurs, tester toutes les ROMs reliées à un BIOS en même temps, pour gagner du temps. Si par exemple, vous venez de corriger votre BIOS neogeo, vous pouvez tester tous les jeux de votre liste dont la ligne finit par [neogeo].

mame -verifyroms garou mslug mslug2 neodrift

avec comme résultat, si tout se passe bien

romset garou [neogeo] is good
romset mslug [neogeo] is good
romset mslug2 [neogeo] is good
romset neodrift [neogeo] is good
4 romsets found, 4 were OK.

vous pouvez donc retirer les lignes correspondant à ces 4 jeux.

Ensuite, dans le même style, il faut chercher les clones et parents. S’ils sont nombreux à être présents, c’est bien souvent que le parent est défectueux, et le corriger, réparera aussi de nombreux, si ce n’est tous les clones.

Et voilà , vous disposez désormais de toutes les armes pour maintenir votre collection de ROMs MAME.

Un message, un commentaire ?

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

ConnexionS’inscriremot de passe oublié ?