DEBIAN + MAME + ARCADE BOX = MAMECAB
I. NOTE
Ce document commencé en Mars 2011 décrit l'installation de ma MAMECab avec:
- Un PC qui servira à faire tourner la borne en remplacement de la carte mère d'origine,
- Le système Debian (Squeeze 6.0.0) avec le minimum nécessaire (pas de bureau par exemple)
- La compilation de MAME depuis les sources (0.142)
- L'installation du front-end Wah!Cade (0.99pre8)
- Une borne d'arcade d'occasion (CAPCOM Three Wonders),
- Quelques tweaks et l'interface avec les différentes entrées/sorties de la borne (iPac, monnayeur, etc.)
II. PRÉPARATIFS
J'ai choisi la distribution Debian Squeeze (stable à ce jour en version 6.0.0) depuis la page officielle Debian : - sélectionner la version "Network installation" (Netinst) si vous avez accès à Internet lors de votre installation de la MAMECab,
- autrement prendre l'image pour une installation complète (plus longue à télécharger mais contenant tous les paquets nécessaires à l'installation).
Au besoin, passer par le BIOS de votre carte mère pour faire booter le PC sur le CDROM avant le disque-dur.
III. SYSTÈME DE BASE
L'installation "classique" est détaillée ci-dessous en client DHCP, avec formatage du disque entier et en une unique partition, avec création du compte utilisateur "puckman". Si vous avez besoin d'éclaircissements au cours de l'installation du système, n'hésitez pas à consulter le manuel d'aide officiel. J'ai marqué les points importants en gras ci-dessous:

Accueil lors du boot sur le CDROM d'installation de Debian 6.0.0 Squeeze: j'ai choisi l'installation en mode console

Choix de la langue

Situation géographique



Chargement des composants et détection du réseau: je n'ai pas utilisé d'adresse IP fixe mais vous pouvez en spécifier une.

Choix du nom de la borne: notez-le bien si vous êtes en réseau.

Entrez le nom de domaine local

Saisie du mot de passe "root": ne l'oubliez pas!

Choix de l'utilisateur, je l'ai appelé "puckman": retenez son nom si vous en choisissez un autre.

Saisie de son mot de passe


J'ai choisi le partitionnement du disque entier: toutes les données du disque seront effacées!

Je n'ai qu'un disque à sélectionner

J'ai simplement choisi une unique partition pour le système et les données utilisateur


Attention, pas de retour en arrière une fois le disque formaté!


Choisir un dépôt de paquets proche de votre lieu géographique



J'ai choisi le "Serveur de fichiers" pour permettre l'accès à des dossiers locaux depuis un poste distant (pour la copie des ROMs par exemple), le "Serveur SSH" pour la maintenance à distance (le clavier ne sera pas nécessaire sur la borne) et les "Utilitaires standard du système" pour bénéficier d'un minimum d'outils. On démarre une borne minimaliste mais faut pas exagérer :-)
Idem pour les gestionnaires de bureau, point de KDE ni GNOME: nous nous contenterons simplement du serveur graphique X.

Installation des paquets

Choix du groupe de travail pour le partage de fichier avec Samba (installé avec NFS suite au choix du "Serveur de fichiers"). Mettez celui approprié à votre réseau si vous disposez de plusieurs postes connectés.

Installation du chargeur de démarrage GRUB

Fin de l'installation

Retirer le CDROM avant le re-démarrage

Reboot

Moment émouvant du premier boot ;-)

Bienvenue!
Pour simplifier les choses dans la suite mon installation, j'utilise une connexion distante par SSH depuis un poste de travail, libre à vous de continuer sur la machine locale.
Pour établir une connexion SSH distante, il faut récupérer l'adresse IP de la borne (passez cette étape si vous avez spécifié une IP fixe):
- il faut se connecter en tant qu'usager "root" et saisir le mot de passe que vous avez bien noté lors de l'installation,
- taper ifconfig pour obtenir l'adresse IP de la machine sur le réseau. Ici 192.168.100.233, à remplacer par la vôtre dans la suite du document.

IV. CONNEXION DISTANTE
Sur mon poste de travail GNU/Linux "kanumera", je peux dès lors me connecter via SSH sur la borne "mamecab" (à l'adresse récupérée ci-dessus) avec la commande "ssh utilisateur@machine":
ludo@kanumera:~$ ssh root@192.168.100.223 The authenticity of host '192.168.100.223 (192.168.100.223)' can't be established. RSA key fingerprint is f9:ed:b1:36:8a:dd:bd:e6:6d:5c:38:42:0e:5a:d5:c0. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.100.223' (RSA) to the list of known hosts. root@192.168.100.223's password: Linux mamecab 2.6.32-5-686 #1 SMP Tue Mar 8 21:36:00 UTC 2011 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Mar 22 15:48:24 2011 /usr/bin/xauth: creating new authority file /root/.Xauthority root@mamecab:~#

V. PARTAGE DE FICHIERS
Activons ensuite le partage de fichiers via SAMBA avec authentification obligatoire afin de permettre plus tard la copie de fichiers depuis un portable par exemple. Pour cela je commence par une copie de sauvegarde du fichier de configuration original:
root@mamecab:~# cp /etc/samba/smb.conf /etc/samba/smb.conf_orig
Puis j'édite ce fichier:
root@mamecab:~# pico /etc/samba/smb.conf
Dé-commenter la ligne n°102 (enlever le "#") en s'y rendant avec le raccourci CTRL+_ :
/etc/samba/smb.conf (line 96)
- ####### Authentication #######
- # "security = user" is always a good idea. This will require a Unix account
- # in this server for every user accessing the server. See
- # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html
- # in the samba-doc package for details.
- # security = user
modifié en:
/etc/samba/smb.conf (line 102)
- security = user
Et passer le partage des dossiers utilisateurs en mode lecture/écriture (ligne 242) :
/etc/samba/smb.conf (line 234)
- #======================= Share Definitions =======================
- [homes]
- comment = Home Directories
- browseable = no
- # By default, the home directories are exported read-only. Change the
- # next parameter to 'no' if you want to be able to write to them.
- read only = yes
modifié:
/etc/samba/smb.conf (line 242)
- read only = no
Puis CTRL+X pour fermer l'éditeur "pico".
Répondre "O" à la question de l'éditeur: "Sauver l'espace modifié (RÉPONDRE « Non » EFFACERA LES CHANGEMENTS) ?", et ENTRÉE pour valider le nom du fichier. Nous voilà revenus au prompt.
Demander à SAMBA de recharger sa configuration:
root@mamecab:~# /etc/init.d/samba reload Reloading /etc/samba/smb.conf: smbd only.
Et ajouter notre compte utilisateur "puckman" (choisi lors de l'installation du système) aux comptes autorisés à se connecter via SAMBA (il sera demandé de saisir deux fois le mot de passe sans qu'il s'affiche à l'écran) :
root@mamecab:~# smbpasswd -a puckman New SMB password: Retype new SMB password: Added user puckman.
Et voilà! Je peux me connecter au dossier de l'utilisateur "puckman" sur la machine "mamecab" (192.168.100.223) depuis le réseau (qui peut être un PC ou un boîtier multimédia par exemple). Nous y mettrons MAME et tous les fichiers nécessaires à son fonctionnement.
Ici, je fais le test depuis la propre borne (pas très utile... mais ça permet de tester le bon fonctionnement du partage réseau SAMBA) :
root@mamecab:~# smbclient -U puckman //localhost/puckman Enter puckman's password: Domain=[LUDOMATIC] OS=[Unix] Server=[Samba 3.5.6] smb: \> dir . D 0 Tue Mar 22 12:06:45 2011 .. D 0 Tue Mar 22 12:04:34 2011 .bash_logout H 220 Tue Mar 22 12:04:34 2011 .bashrc H 3184 Tue Mar 22 12:04:34 2011 .bash_history H 23 Tue Mar 22 12:06:45 2011 .profile H 675 Tue Mar 22 12:04:34 2011 61026 blocks of size 65536. 43188 blocks available smb: \> exit
ou depuis le poste de travail:
VI. MAME
VI.a Préparation des outils
Avant d'installer MAME ou même les outil dont nous aurons besoin pour la suite, il faut mettre à jour la liste des paquets Debian avec la commande aptitude update. Pensez à faire cette mise à jour régulièrement avant d'installer de nouveaux paquets:
root@mamecab:~# aptitude update Atteint http://ftp.nc.debian.org squeeze Release.gpg [...] Atteint http://security.debian.org squeeze/updates/main Sources Prendre : 3 http://security.debian.org squeeze/updates/main i386 Packages [68,8 kB] 108 ko téléchargés en 2s (43,8 ko/s)
Une fois la liste des paquets disponibles à jour, passons à leur installation:- unzip et unrar-free pour décompresser les fichier des sources MAME et autres archives,
- build-essential pour compiler depuis les sources le binaire MAME,
- libsdl1.2debian et son paquet de développement libsdl1.2-dev car la version MAME pour Linux utilise la librairie SDL (affichage vidéo, périphériques de contrôle, son, etc.),
- libsdl-ttf2.0-0 et libsdl-ttf2.0-dev pour permettre à la librairie SDL d'utiliser les polices TrueType,
- libexpat1 et libexpat1-dev pour permettre à MAME de parcourir les fichiers XML,
- zlib1g et zlib1g-dev afin que MAME décompresse les fichiers zippés,
- libxinerama1 et libxinerama-dev pour l'affichage et la gestion des écrans multiples,
- libgconf2-4 et libgconf2-dev permettant à MAME de gérer les préférences des applications,
- libgtk2.0-0 et libgtk2.0-dev permettant d'utiliser l'interface GTK+.
En une ligne de commande:
root@mamecab:~# aptitude install unzip unrar-free build-essential libsdl1.2debian libsdl1.2-dev libsdl-ttf2.0-0 libsdl-ttf2.0-dev libexpat1 libexpat1-dev zlib1g zlib1g-dev libxinerama1 libxinerama-dev libgconf2-4 libgconf2-dev libgtk2.0-0 libgtk2.0-dev
Les NOUVEAUX paquets suivants vont être installés :
autopoint{a} binutils{a} build-essential bzip2{a} cpp{a} cpp-4.4{a}
[...]
xtrans-dev{a} zlib1g-dev
0 paquets mis à jour, 200 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 103 Mo d'archives. Après dépaquetage, 298 Mo seront utilisés.
Voulez-vous continuer ? [Y/n/?] y
Prendre : 1 http://ftp.nc.debian.org/debian/ squeeze/main x11proto-core-dev all 7.0.16-1 [92,2 kB]
Prendre : 2 http://ftp.nc.debian.org/debian/ squeeze/main libice-dev i386 2:1.0.6-2 [58,5 kB]
[...]
Paramétrage de g++ (4:4.4.5-1) ...
update-alternatives: utilisation de « /usr/bin/g++ » pour fournir « /usr/bin/c++ » (c++) en mode automatique.
Paramétrage de build-essential (11.5) ...N'ayant plus de tâches administratives à effectuer pour le moment, il faut quitter l'accès super-utilisateur et se connecter avec l'utilisateur puckman. On peut effectuer une nouvelle connexion depuis la machine de bureau:
ludo@kanumera:~$ ssh puckman@192.168.100.223 puckman@192.168.100.223's password: Linux mamecab 2.6.32-5-686 #1 SMP Tue Mar 8 21:36:00 UTC 2011 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. /usr/bin/xauth: creating new authority file /home/puckman/.Xauthority puckman@mamecab:~$
ou alors passer à l'utilisateur puckman depuis le super-utilisateur root:
root@mamecab:~# su - puckman puckman@mamecab:~$
Oui, on arrive enfin à la partie MAME :)
VI.b Récupération des sources MAME
Préparer un nouveau dossier de travail, nous y mettrons les sources:
puckman@mamecab:~$ mkdir sources puckman@mamecab:~$ cd sources puckman@mamecab:~/sources$
Les sources de MAME sont disponibles sur http://mamedev.org (site officiel). Je conseille de travailler avec les sources stables "release" plutôt que les "updates" intermédiaires qui sont des versions de développement. Il faut récupérer le lien du fichier ZIP depuis la page http://mamedev.org/release.html, pour ma part la version actuelle est la 0.142 http://mamedev.org/downloader.php?file=releases/mame0142s.zip :
puckman@mamecab:~/sources$ wget -U "Mozilla (wiki.ludomatic.fr)" "http://mamedev.org/downloader.php?file=releases/mame0142s.zip" -O mame0142s.zip --2011-04-11 08:01:43-- http://mamedev.org/downloader.php?file=releases/mame0142s.zip Résolution de mamedev.org... 67.210.100.31 Connexion vers mamedev.org|67.210.100.31|:80...connecté. requête HTTP transmise, en attente de la réponse...302 Found Emplacement: http://mamedev.thiswebhost.com/releases/mame0142s.zip [suivant] --2011-04-11 08:01:43-- http://mamedev.thiswebhost.com/releases/mame0142s.zip Résolution de mamedev.thiswebhost.com... 67.225.136.222 Connexion vers mamedev.thiswebhost.com|67.225.136.222|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 17657289 (17M) [application/zip] Sauvegarde en : «mame0142s.zip» 100%[===================================================================================================================================>] 17 657 289 154K/s ds 2m 16s 2011-04-11 08:04:02 (127 KB/s) - «mame0142s.zip» sauvegardé [17657289/17657289]
On décompresse le fichier ZIP téléchargé:
puckman@mamecab:~/sources$ ls mame0142s.zip puckman@mamecab:~/sources$ unzip mame0142s.zip Archive: mame0142s.zip inflating: mame.zip puckman@mamecab:~/sources$ ls mame0142s.zip mame.zip
Le fichier mame0142s.zip contient en fait à nouveau un fichier ZIP mame.zip. Nous décompressons ce nouveau fichier dans un dossier nommé mame0142 pour bien séparer les choses:
puckman@mamecab:~/sources$ unzip mame.zip -d mame0142 Archive: mame.zip creating: mame0142/docs/ extracting: mame0142/docs/config.txt extracting: mame0142/docs/license.txt extracting: mame0142/docs/mame.txt [...] extracting: mame0142/src/version.c extracting: mame0142/whatsnew.txt puckman@mamecab:~/sources$ ls mame0142 mame0142s.zip mame.zip
Tout s'est bien déroulé, rendez-vous dans le dossier mame0142 avant de passer à la suite:
puckman@mamecab:~/sources$ cd mame0142 puckman@mamecab:~/sources/mame0142$ ls docs hash makefile src whatsnew.txt

VI.c Construction du binaire
Note 1: Je lance un make clean quand cela est possible pour nettoyer toute trace d'une précédente compilation.
Note 2: Au lieu de la commande make seule, vous pouvez utiliser make -j3 pour profiter pleinement de votre processeur multi-coeurs lors de la compilation :)
Le dossier mame0141 contient maintenant les sources MAME 0.141 avec un fichier makefile qui va permettre à l'ensemble des utilitaires de fonctionner de concert pour produire l'exécutable mame avec différentes options selon votre système. N'hésitez pas à consulter le contenu du fichier makefile si vous en avez envie!Note 2: Au lieu de la commande make seule, vous pouvez utiliser make -j3 pour profiter pleinement de votre processeur multi-coeurs lors de la compilation :)
puckman@mamecab:~/sources/mame0142$ make clean Deleting object tree obj/sdl/mame... Deleting mame... Deleting testkeys romcmp chdman jedutil unidasm ldresample ldverify regrep srcclean src2html split ...
Lancer simplement make pour produire le binaire et ne restez pas le nez collé devant la compilation car elle va prendre un bon moment! Je vous propose de lire la FAQ MAME en attendant. Si si, elle regorge d'informations très utiles écrites par les mains même des développeurs MAME :-)
puckman@mamecab:~/sources/mame0142$ make mkdir -p obj/sdl/mame mkdir -p obj/sdl/mame/build mkdir -p obj/sdl/mame/emu/audio mkdir -p obj/sdl/mame/emu/cpu [ (...)^99999 ] Compiling src/emu/cpu/z8/z8dasm.c... Compiling src/emu/cpu/superfx/sfx_dasm.c... Archiving obj/sdl/mame/libdasm.a... Linking mame...
Tadaam, nous voilà avec un bel exécutable mame dans notre dossier source/mame0142/:
puckman@mamecab:~/sources/mame0142$ ls docs hash makefile mame obj src whatsnew.txt
Pour éviter de tout mélanger, nous laisserons les sources de côté et copierons le binaire mame dans un dossier /home/puckman/mame/. Nous y placerons également la configuration de MAME, les ROMs, snapshots, sauvegardes, etc., bref ce sera le dossier principal de MAME:
puckman@mamecab:~/sources/mame0142$ mkdir /home/puckman/mame/ puckman@mamecab:~/sources/mame0142$ cp ./mame /home/puckman/mame/ puckman@mamecab:~/sources/mame0142$ cd /home/puckman/mame/ puckman@mamecab:~/mame$ ls mame
À partir de maintenant, nous travaillerons donc dans le dossier /home/puckman/mame ou /home/nom_utilisateur/mame selon votre installation.

VI.d Configuration
Commençons par générer le fichier XML contenant l'ensemble des ROMs utilisables par cette unique version 0.142 (patience, cela peut prendre un peu de temps):
puckman@mamecab:~/mame$ ./mame -listxml > mameinfo.xml puckman@mamecab:~/mame$ ls mame mameinfo.xml
Par défaut, le clavier anglais est pris en charge. Comme il faut utiliser par exemple les touches 1 et 5 au dessus des lettres (pas celle du pavé numérique) pour le bouton "START" et les "CREDITS" du joueur 1, nous devons utiliser un mappage de touches correspondant au clavier français. Copions les fichiers de configuration du clavier depuis dossier des sources MAME vers le dossier keymaps:
puckman@mamecab:~/mame$ cp -vr /home/puckman/sources/mame0141/src/osd/sdl/keymaps ./ « /home/puckman/sources/mame0141/src/osd/sdl/keymaps » -> « ./keymaps » « /home/puckman/sources/mame0141/src/osd/sdl/keymaps/km_it.txt » -> « ./keymaps/km_it.txt » « /home/puckman/sources/mame0141/src/osd/sdl/keymaps/km-be.txt » -> « ./keymaps/km-be.txt » « /home/puckman/sources/mame0141/src/osd/sdl/keymaps/km-ch.txt » -> « ./keymaps/km-ch.txt » « /home/puckman/sources/mame0141/src/osd/sdl/keymaps/km-de.txt » -> « ./keymaps/km-de.txt » « /home/puckman/sources/mame0141/src/osd/sdl/keymaps/km-fr-OSX.txt » -> « ./keymaps/km-fr-OSX.txt » « /home/puckman/sources/mame0141/src/osd/sdl/keymaps/km-fr.txt » -> « ./keymaps/km-fr.txt » puckman@mamecab:~/mame$ ls keymaps km-be.txt km-ch.txt km-de.txt km-fr-OSX.txt km-fr.txt km_it.txt
Générons ensuite le fichier de configuration mame.ini:
puckman@mamecab:~/mame$ ./mame -createconfig puckman@mamecab:~/mame$ ls mame mameinfo.xml mame.ini
Et éditons-le afin de vérifier au minimum le chemin des ROMs, le mode vidéo et de définir le clavier français:
puckman@mamecab:~/mame$ pico mame.ini
Les ROMs seront donc par défaut recherchées dans le dossier roms d'où est exécuté MAME. Nous le créerons dans le prochain chapitre :
mame.ini (line 9)
- #
- # CORE SEARCH PATH OPTIONS
- #
- rompath roms
Et la vidéo est gérée par la couche logicielle, sans prise en charge d'accélération OpenGL (très bien pour un premier lancement!):
mame.ini (line 163)
- #
- # VIDEO OPTIONS
- #
- video soft
Activons les code clavier spécifiques pour passer le clavier en français:
mame.ini (line 245)
- #
- # SDL KEYBOARD MAPPING
- #
- keymap 1
- keymap_file keymaps/km-fr.txt
Je passerai la variable keymap à 0 plus bas dans le document une fois nos premiers test effectués. Cela sera beaucoup plus simple car le clavier n'est pas nécessaire au fonctionnement "normal" de la mamecab et les outils fonctionnent tous avec des codes de touches anglaises par défaut. Mais conservons notre clavier en français pour le moment.

VI.e Les ROMs
Nous y voilà, commençons par créer le dossier des ROMs comme paramétré dans le fichier de configuration mame.ini vu ci-dessus:
puckman@mamecab:~/mame$ mkdir roms puckman@mamecab:~/mame$ ls mame mameinfo.xml mame.ini roms
Quelques éditeurs ont libéré les droits de leurs jeux d'arcade pour une utilisation non commerciale. Grâce à ces bonnes initiatives nous allons pouvoir lancer nos premiers jeux!
La plupart de ces ROMs sont tout simplement regroupées dans la section "roms" du site officiel de MAME. Récupérons par exemple l'excellent Teeter Torture (Exidy) et Gridlee (Videa) depuis le dossier roms:
puckman@mamecab:~/mame$ cd roms puckman@mamecab:~/mame/roms$ wget -U "Mozilla (wiki.ludomatic.fr)" "http://mamedev.org/roms/teetert/teetert.zip" --2011-03-25 08:37:52-- http://mamedev.org/roms/teetert/teetert.zip Résolution de mamedev.org... 67.210.100.31 Connexion vers mamedev.org|67.210.100.31|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 24907 (24K) [application/zip] Sauvegarde en : «teetert.zip» 100%[=============================================================================>] 24 907 14,3K/s ds 1,7s 2011-03-25 08:37:55 (14,3 KB/s) - «teetert.zip» sauvegardé [24907/24907] puckman@mamecab:~/mame/roms$ wget -U "Mozilla (wiki.ludomatic.fr)" "http://mamedev.org/roms/gridlee/gridlee.zip" --2011-03-25 08:38:24-- http://mamedev.org/roms/gridlee/gridlee.zip Résolution de mamedev.org... 67.210.100.31 Connexion vers mamedev.org|67.210.100.31|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 26154 (26K) [application/zip] Sauvegarde en : «gridlee.zip» 100%[=============================================================================>] 26 154 24,8K/s ds 1,0s 2011-03-25 08:38:26 (24,8 KB/s) - «gridlee.zip» sauvegardé [26154/26154]
D'autres ROMs sont directement fournies par les éditeurs eux-mêmes tel Gaelco avec le mythique World Rally que nous allons ajouter à notre liste:
puckman@mamecab:~/mame/roms$ wget -U "Mozilla (wiki.ludomatic.fr)" "http://www.gaelco.es/wrally/descarga.php" -O wrally.zip --2011-03-29 08:08:32-- http://www.gaelco.es/wrally/descarga.php Résolution de www.gaelco.es... 88.198.70.46 Connexion vers www.gaelco.es|88.198.70.46|:80...connecté. requête HTTP transmise, en attente de la réponse...302 Found Emplacement: http://www.gaelco.com/wrally/wrally.zip [suivant] --2011-03-29 08:08:32-- http://www.gaelco.com/wrally/wrally.zip Résolution de www.gaelco.com... 88.198.70.46 Réutilisation de la connexion existante vers www.gaelco.es:80. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 2168934 (2,1M) [application/zip] Sauvegarde en : «wrally.zip» 100%[=========================================================>] 2 168 934 880K/s ds 2,4s 2011-03-29 08:08:35 (880 KB/s) - «wrally.zip» sauvegardé [2168934/2168934]
Attention à bien conserver le nom exact des fichiers ZIP, ces noms seront utilisés par MAME pour identifier les ROMs.
Vérifions que les ROMs sont bien là et quittons le dossier roms sans décompresser les ZIP, MAME va s'en charger à la volée lors du lancement du jeu:
puckman@mamecab:~/mame/roms$ ls gridlee.zip teetert.zip wrally.zip puckman@mamecab:~/mame/roms$ cd .. puckman@mamecab:~/mame$ ls mame mameinfo.xml mame.ini roms
VII. SERVEUR X
VII.a Installation
Il est nécessaire d'installer un serveur graphique minimal appelé génériquement "serveur X" (et plus spécifiquement "X.org") sans pour autant charger barre des tâches et autres menus pris en charge par des gestionnaires de bureau comme KDE, GNOME, Xfce, Enlightenment, etc. Cette installation s'effectue comme habituellement via le compte root, donc il faut au préalable passer en mode "super-utilisateur" avec la commande su - (le mot de passe pour l'utilisateur root ne sera pas affiché lors de la saisie):
puckman@mamecab:~/mame$ su - Mot de passe :
Une fois connecté avec le compte root, il suffit d'installer tout simplement le paquet xorg qui fournira entre autres:
- xserver-xorg-core, le serveur X "X.Org"
- xfonts-... fournissant des jeux de police par défaut
- xterm pour avoir un terminal graphique
- xinit qui fourni le lanceur de session graphique startx
- x11-xserver-utils regroupant de nombreux utilitaires pour X
root@mamecab:~# aptitude install xorg
Les NOUVEAUX paquets suivants vont être installés :
libfs6{a} libutempter0{a} libxcb-atom1{a} libxv1{a} libxxf86dga1{a} x11-apps{a} x11-session-utils{a} x11-utils{a} x11-xfs-utils{a} x11-xserver-utils{a} xbitmaps{a} xfonts-100dpi{a} xfonts-75dpi{a} xfonts-scalable{a} xinit{a} xorg xorg-docs-core{a} xterm{a}
0 paquets mis à jour, 18 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 9 604 ko d'archives. Après dépaquetage, 16,3 Mo seront utilisés.
Voulez-vous continuer ? [Y/n/?] y
Prendre : 1 http://ftp.nc.debian.org/debian/ squeeze/main x11-apps i386 7.5+5 [656 kB]
[...]
update-alternatives: utilisation de « /usr/bin/lxterm » pour fournir « /usr/bin/x-terminal-emulator » (x-terminal-emulator) en mode automatique.
Paramétrage de xorg (1:7.5+8) ...
Traitement des actions différées (« triggers ») pour « menu »...Une fois le serveur X installé, n'oublions surtout pas de quitter le compte root avec la commande exit:
root@mamecab:~# exit logout puckman@mamecab:~/mame$
Note sur la prise en charge d'OpenGL: selon que vous ayez une carte graphique ATI, NVidia ou Intel et que vous choisissiez les pilotes libres ou propriétaires il vous faudra installer et configurer différents éléments que je vous laisse le soin de découvrir sur l'excellent Wiki DEBIAN consacré à ce sujet, Autrement vous ne pourrez pas bénéficier de l'accélération graphique 3D. MAME est toutefois utilisable sous environnement X avec le mode vidéo "soft" comme nous allons le voir ci-dessous :)
VII.b Premier lancement MAME
Attention, nous somme repassé sous le compte "puckman", et non "root" utilisé le temps de l'installation des paquets
MAME se lance évidemment sous environnement graphique mais comme nous l'avons évoqué plus haut, pas de menus, de bureau et encore moins d'explorateur de fichiers sur notre mamecab from scratch. Il faut donc spécifier dans un petit fichier quels programmes seront lancés au démarrage de la session graphique. Ce fichier se nomme .xsession et est à placer dans le dossier du compte utilisateur /home/puckman:puckman@mamecab:~/mame$ pico /home/puckman/.xsession
Notez qu'une fois le programme à lancer avec .xsession terminé, la session graphique s'arrête et vous reviendrez au prompt de la console.
Nous pourrons de spécifier:- la résolution de l'écran (ex: 640x480, 800x600, etc. à votre guise),
- la suppression de l'écran de veille (activé par défaut au bout de 10 minutes),
- le type de clavier ("en", "fr", etc.),
- le programme à lancer, ce sera xterm pour le moment, une console graphique.
# Resolution de l'ecran
xrandr -s 800x600
# Clavier anglais
setxkbmap -layout us
# Suppression de l'ecran de veille (ecran noir)
xset s off
# Suppression de la gestion d'energie (extinction moniteur)
xset -dpms
# Lancement du programme
xterm
# Pour mémoire, la session graphique se termine automatiquement une fois le programme quitté.
xrandr -s 800x600
# Clavier anglais
setxkbmap -layout us
# Suppression de l'ecran de veille (ecran noir)
xset s off
# Suppression de la gestion d'energie (extinction moniteur)
xset -dpms
# Lancement du programme
xterm
# Pour mémoire, la session graphique se termine automatiquement une fois le programme quitté.
Comme la plupart des fichiers de configuration sous linux, le caractère " # " sert à commenter tout ce qui suit sur la ligne. Vous pouvez par exemple laisser active la gestion d'énergie pour sauver la planète en commentant la ligne:
# Suppression de la gestion d'energie (extinction moniteur)
#xset -dpms
#xset -dpms
Ok, CTRL+X pour fermer l'éditeur "pico", répondre "O" pour sauvegarder et ENTRÉE pour valider le nom du fichier. Nous voilà revenus au prompt.
Ceux qui ont suivi jusque là l'ont bien mérité, il est temps de lancer MAME!
Nous allons donc exécuter la commande manuelle startx pour lancer notre environnement graphique (oui, on aura même un curseur de souris) puis mame une fois au prompt du terminal xterm:
puckman@mamecab:~/mame$ startx
Cliquer avec la souris sur la ligne de texte si vous ne pouvez rien écrire, le focus n'est alors pas sur le terminal.
Vous devez être sous environnement graphique maintenant, mais dans un terminal X, le fameux xterm installé précédemment. Je sais ce que vous devez vous dire: "3 heures d'installation et de configuration pour me retrouver en ligne de commande sur un pauvre terminal graphique..." mais tout ce travail effectué va payer car il est temps de lancer notre émulateur préféré (roulement de tambour...): puckman@mamecab:~/mame$ ./mame

Bienvenue sur MAME! Vous devriez obtenir l'interface d'accueil avec le choix des jeux qu'il a trouvé.
Vous pouvez utiliser les flèches HAUT/BAS, ENTREE pour lancer le jeu et ECHAP pour quitter.

Avertissement. Vous pouvez le passer en saisissant o puis k ou les flèches GAUCHE puis DROITE.

Les informations sur l'émulation audio, CPU et vidéo. Remarquez la résolution 256x256 en 60Hz.

Notre PREMIER JEU MAME, woohoo!!

Il n'y a pas que le boulot dans la vie! je vous laisse un moment de détente avec X et la vidéo soft...
ECHAP pour quitter.
Il est également possible de lancer directement un jeu sans passer par le menu de MAME. Pour cela il faut spécifier le nom de l'archive ZIP sans l'extension, par exemple:
puckman@mamecab:~/mame$ ./mame teetert
Ou encore le fichier ZIP:
puckman@mamecab:~/mame$ ./mame /home/puckman/roms/wrally.zip
VII.c Mais pourquoi n'y a t'il aucun son?
Car aucun serveur de son n'est installé! Réparons cet oubli :-)
Toujours depuis le terminal graphique xterm, il faut commencer par se connecter avec le compte "super-utilisateur" puis installer le paquet alsa-utils qui ajoutera automatiquement alsa-base et linux-sound-base:
puckman@mamecab:~/mame$ su -
Mot de passe :
root@mamecab:~# aptitude install alsa-utils
Les NOUVEAUX paquets suivants vont être installés :
alsa-base{a} alsa-utils linux-sound-base{a}
0 paquets mis à jour, 3 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 0 o/1 443 ko d'archives. Après dépaquetage, 2 675 ko seront utilisés.
Voulez-vous continuer ? [Y/n/?] yUne fois le paquet installé, il faut quitter le compte root avec la commande exit:
root@mamecab:~# exit logout puckman@mamecab:~/mame$
Réglons à présent les niveaux sonores grâce à la commande alsamixer:
puckman@mamecab:~/mame$ alsamixer
Montez au moins les niveaux "Master" et "PCM" en vérifiant bien de ne pas mettre "Mute" sur ces canaux. Utilisez GAUCHE et DROITE pour vous déplacer, HAUT et BAS pour modifier le volume, la touche m pour mettre le son en sourdine (MM) on pas (OO), et ÉCHAP pour quitter alsamixer et revenir à la console une fois que tout est ok. La sauvegarde est automatique.
┌────────────────────[AlsaMixer v1.0.16 (Press Escape to quit)]────────────────────┐ │ Card: HDA Intel │ │ Chip: Realtek ALC888 │ │ View: [Playback] Capture All │ │ Item: Master [dB gain=0.00] │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ │▒▒│ │▒▒│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒│ │▒▒│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒│ │▒▒│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ │ │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ > │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │▒▒│ │ │ │ │ │ │ ├──┤ ┌──┐ └──┘ ├──┤ ├──┤ └──┘ ├──┤ ├──┤ │ │ │OO│ │OO│ │OO│ │OO│ │MM│ │MM│ │ │ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ │ │ 100 100<>100 84<>84 81<>81 67<>67 0<>0 0 │ │ < Master > Headphon PCM Front Front Mi Front Mi Surround Center │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘
Branchez l'ampli et faites vrombir le moteur!!!
puckman@mamecab:~/mame$ ./mame wrally
Bon, le jeu est sympa mais faudrait finir l'installation! Quitter le terminal xterm avec la commande exit. Cela aura pour effet de terminer la session graphique et vous renvoyer sur la console:
puckman@mamecab:~/mame$ exit
VIII. EXTRAS
Avant de passer à l'installation du front-end, il est nécessaire d'obtenir quelques fichiers dont il aura besoin. Il est obligatoire d'avoir mis en place les fichiers catver.ini et mameinfo.xml avant d'installer Wahcade. Les autres fichiers de cette section "Extras" sont simplement recommandés pour agrémenter l'interface.
VIII.a Catégories
Le fichier des catégories catver.ini est un des fichiers clés permettant au front-end de gérer les ROMs. Procédons à la récupération de l'archive ZIP le contenant dans un dossier temporaire /tmp:
puckman@mamecab:~/mame$ cd /tmp puckman@mamecab:/tmp$ wget "http://www.progettoemma.net/public/ccount/click.php?id=6" -O catver.zip --2011-03-25 14:38:55-- http://www.progettoemma.net/public/ccount/click.php?id=6 Résolution de www.progettoemma.net... 62.149.130.187 Connexion vers www.progettoemma.net|62.149.130.187|:80...connecté. requête HTTP transmise, en attente de la réponse...302 Moved Temporarily Emplacement: http://www.progettoemma.net/public/cat/catveren.zip [suivant] --2011-03-25 14:38:56-- http://www.progettoemma.net/public/cat/catveren.zip Réutilisation de la connexion existante vers www.progettoemma.net:80. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 106438 (104K) [application/x-zip-compressed] Sauvegarde en : «catver.zip» 100%[=============================================================================>] 106 438 19,7K/s ds 5,3s 2011-03-25 14:39:02 (19,7 KB/s) - «catver.zip» sauvegardé [106438/106438]
On extrait de l'archive le fichier catver.ini que l'on copie dans le dossier MAME. Attention, on va en profiter pour renommer le fichier en lettres minuscules, la casse est très importante!
puckman@mamecab:/tmp$ unzip catver.zip Archive: catver.zip inflating: Catver.ini inflating: leggimi.txt inflating: readme.txt puckman@mamecab:/tmp$ mv Catver.ini ~/mame/catver.ini

VIII.b Historique
Récupérons le fichier history.dat contenant les informations à présenter sur le jeu en cours. Nous devrons télécharger un fichier ZIP dans le dossier temporaire et déplacer le fichier extrait dans le dossier de MAME:
puckman@mamecab:/tmp$ wget "http://www.arcade-history.com/dats/mamehistory141.zip" --2011-03-25 19:27:42-- http://www.arcade-history.com/dats/mamehistory141.zip Résolution de www.arcade-history.com... 84.16.84.51 Connexion vers www.arcade-history.com|84.16.84.51|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 2583551 (2,5M) [application/zip] Sauvegarde en : «mamehistory141.zip» 100%[========================================================>] 2 583 551 63,9K/s ds 32s 2011-03-25 19:28:14 (78,6 KB/s) - «mamehistory141.zip» sauvegardé [2583551/2583551] puckman@mamecab:/tmp$ unzip mamehistory141.zip Archive: mamehistory141.zip inflating: history.dat inflating: readhist.txt puckman@mamecab:/tmp$ mv history.dat ~/mame/
VIII.c Illustrations
Nous aurons principalement besoin de 3 dossiers d'illustrations: les captures d'écrans (snapshots), les bandeaux lumineux (marquees) et les panneaux de contrôle (control panels). Ces éléments se présentent sous la forme d'image JPEG à placer dans les dossiers ~/mame/snaps pour les "snapshots", ~/mame/marquees pour les "marquees" et ~/mame/cpanel pour les "control panels".
Vous trouverez ce qu'il faut sur la page de Mr Do's Arcade concernant les "control panels" et "marquees". Le téléchargement peut se faire comme précédemment via wget puis la décompression par unzip ou alors via le poste de bureautique et avec un transfert des fichiers sur le réseau, à vous de voir.
Idem pour les "snapshots" disponibles sur Progetto Snaps.
Derniers conseils : Veillez à bien utiliser les fichiers correspondant à votre version de MAME (les ROMs sont continuellement modifiées, supprimées, ajoutées, etc. d'une version à l'autre) et à bien décompresser les images dans les dossiers ~/mame/snaps, ~/mame/marquees et ~/mame/cpanel.
todo: artworks (décorations additionnelles durant une partie)
VIII.d Contrôleurs
edit: une version plus récente du fichier controls.ini se trouve sur http://controls.arcadecontrols.com/controls/controls_dat.php. Merci à zeflasher pour l'info!
Je n'ai pu trouver que la version 0.111 du fichier controls.ini qui décrit les contrôleurs affectés à chaque jeu. Comme il ne s'agit pas d'une archive mais directement du fichier à télécharger, nous pouvons le faire directement depuis le dossier de MAME:
puckman@mamecab:/tmp$ cd ~/mame puckman@mamecab:~/mame$ wget "http://dl.maximumpc.com/galleries/mame/controls.ini" --2011-03-25 21:59:08-- http://dl.maximumpc.com/galleries/mame/controls.ini Résolution de dl.maximumpc.com... 60.254.175.41, 60.254.175.42 Connexion vers dl.maximumpc.com|60.254.175.41|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 496585 (485K) [text/plain] Sauvegarde en : «controls.ini» 100%[========================================================>] 496 585 129K/s ds 3,8s 2011-03-25 21:59:12 (129 KB/s) - «controls.ini» sauvegardé [496585/496585] puckman@mamecab:~/mame$ ls catver.ini cfg controls.ini history.dat mame mameinfo.xml mame.ini nvram roms
IX. WAH!CADE
Bien que MAME seul soit parfaitement capable de lancer les jeux depuis sa propre liste, il est préférable d'utiliser un "front-end". Son travail est de vous montrer les jeux disponibles avec captures d'écrans, animations vidéo, catégories, tri et divers filtres. Certains vont même jusqu'à gérer différents émulateurs à la fois (MAME, ZSnes, Gens, etc.), un mode Juke Box, des skins, etc. Bref, dans le souci de toujours bien séparer les choses, je vous propose d'installer le front-end Wah!Cade, version libre de MAMEWah. Vous trouverez quelques captures d'écran ici.IX.a Installation
Wah!cade fournit gracieusement un paquet d'installation pour Debian. Nous devons toutefois installer au préalable les librairies Python nécessaires au fonctionnement de Wah!cade en tant que "super-utilisateur" root:
puckman@mamecab:~/mame$ su -
Mot de passe :
root@mamecab:~# aptitude install python-gtk2 python-chardet python-imaging python-glade2 python-gst0.10 python-pygame
Les NOUVEAUX paquets suivants vont être installés :
libblas3gf{a} libffi5{a} libgfortran3{a} libglade2-0{a} libgstreamer-plugins-base0.10-0{a} libgstreamer0.10-0{a}
liblapack3gf{a} liblcms1{a} libmikmod2{a} libpython2.6{a} libsdl-image1.2{a} libsdl-mixer1.2{a} libsmpeg0{a}
libvorbisfile3{a} python-cairo{a} python-chardet python-glade2 python-gobject{a} python-gst0.10 python-gtk2
python-imaging python-libxml2{a} python-numpy{a} python-pygame ttf-freefont{a}
0 paquets mis à jour, 25 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 15,9 Mo d'archives. Après dépaquetage, 46,9 Mo seront utilisés.
Voulez-vous continuer ? [Y/n/?] y
Prendre : 1 http://ftp.nc.debian.org/debian/ squeeze/main libgfortran3 i386 4.4.5-8 [238 kB]
Prendre : 2 http://ftp.nc.debian.org/debian/ squeeze/main libblas3gf i386 1.2-8 [211 kB]
[...]Passons à Wah!cade: la version actuelle de Wah!cade que je vais télécharger est la "0.99pre8". Vérifiez la version disponible sur la page de téléchargement et adaptez au besoin:
root@mamecab:~# wget -c "http://www.anti-particle.com/projects/wahcade/wahcade_0.99pre8_all.deb" --2011-03-25 11:11:09-- http://www.anti-particle.com/projects/wahcade/wahcade_0.99pre8_all.deb Résolution de www.anti-particle.com... 83.170.91.181 Connexion vers www.anti-particle.com|83.170.91.181|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 859782 (840K) [text/plain] Sauvegarde en : «wahcade_0.99pre8_all.deb» 100%[=============================================================================>] 859 782 97,3K/s ds 12s 2011-03-25 11:21:29 (73,0 KB/s) - «wahcade_0.99pre8_all.deb» sauvegardé [859782/859782]
L'installation se déroule très rapidement en spécifiant manuellement le paquet que l'on vient de télécharger:
root@mamecab:~# dpkg -i wahcade_0.99pre8_all.deb Sélection du paquet wahcade précédemment désélectionné. (Lecture de la base de données... 49679 fichiers et répertoires déjà installés.) Dépaquetage de wahcade (à partir de wahcade_0.99pre8_all.deb) ... Paramétrage de wahcade (0.99pre8) ...
Une fois le paquet installé, n'oublions surtout pas de supprimer le paquet d'installation et surtout quitter le compte root avec la commande exit:
root@mamecab:~# rm -f wahcade_0.99pre8_all.deb root@mamecab:~# exit logout puckman@mamecab:~/mame$
IX.b Configuration
La configuration peut se faire dans l'environnement graphique. Lançons à nouveau le serveur X manuellement (rappel: et le terminal xterm défini dans le fichier .xsession):
puckman@mamecab:~/mame$ startx
Vous devez être sous environnement graphique dans le terminal X xterm. Continuons avec wahcade-setup:
puckman@mamecab:~/mame$ wahcade-setup
La fenêtre se lance mais sans bordures ni titre de fenêtre. Pas de panique, c'est normal car on n'a pas installé de gestionnaire de fenêtre (KDE, GNOME, etc.) mais qui en a besoin sur une borne? Je vous ai mis les capture d'écran ci-dessous avec les champs à vérifier:

Dans l'onglet "Wah!Cade", changer le layout pour correspondre à la résolution de l'interface graphique: "retro_black_640x480"

Cliquez sur l'onglet "Emulators", puis dans la zone de saisie "Application" il faut renseigner le chemin vers le
binaire MAME. Vous pouvez saisir /home/puckman/mame/mame ou plus simplement utiliser le
raccourci "~" qui pointe automatiquement vers le dossier de votre utilisateur courant, à savoir
"/home/puckman/" dans notre cas, ce qui donne en version courte ~/mame/mame.
Plus bas dans "List Generation" saisir le chemin vers les ROMs ~/mame/roms/

Toujours dans l'onglet "Emulators", dans la section "Artwork", renseignez dans l'ordre les chemins vers
les captures d'écran ~/mame/snap, les panneaux de contrôle ~/mame/cpanel puis les
bandeaux lumineux ~/mame/marquees. Vous devriez avoir créé ces dossiers dans la partie précédente "VIII.c Illustrations".

Passer ensuite sur l'onglet "M.A.M.E. Only" et faites travailler vos petits doigts agiles:
~/mame/mameinfo.xml pour le fichier XML, ~/mame/catver.ini pour les catégories,
~/mame/history.dat pour l'historique des jeux puis ~/mame/controls.ini pour les contrôleurs.

Attention, pour passer à la suite, il faut avoir généré le fichier "mameinfo.xml" (voir partie "VI.d Configuration").
Sauvons tout d'abord tout cela par le menu File et Enregistrer, puis cliquez sur le bouton "Setup Filters..." et patientez un long moment (un peu moins que le temps de la compilation de MAME tout de même!).

Quelques longs moments plus tard, vous obtiendrez une fenêtre avec la liste des ROMs et les différents filtres utilisables sous Wahcade. Cliquez sur "Fermer" pour sortir de la liste des filtres. Si vous obtenez une erreur, vous avez une version qui contient un bug corrigé dans la section ci-dessous!
Puis quitter Wahcade par le menu File et Quitter.
IX.c Bug "Keyboard" (optionnel)
Lors de la génération du filtre, mon Wahcade s'est planté autour d'une déclaration de keyboard dans le fichier filters.py:

Traceback (most recent call last): File "/usr/local/share/games/wahcade/win_filter.py", line 245, in on_cboLists_changed self.load_filter() File "/usr/local/share/games/wahcade/win_filter.py", line 261, in load_filter self.create_initial_filter() File "/usr/local/share/games/wahcade/win_filter.py", line 314, in create_initial_filter self.dlgwait_pulse) File "/usr/local/share/games/wahcade/filters.py", line 369, in create_initial_filter gd = mi.next() File "/usr/local/share/games/wahcade/filters.py", line 271, in get_xml_game_item d['controller_type'] = _controllers[ctrl.attrib['type']] KeyError: 'keyboard'
Si vous n'avez rencontré aucune erreur lors de la génération du filtre, rendez-vous directement au chapitre suivant: Test de Wahcade!
Il y a en fait un bug dans ma version! Si vous avez exactement la même erreur, il faut la corriger en attendant que le paquet soit mis à jour en amont. Aucun problème pour nous puisque l'erreur est identifié et les sources disponibles, Open Source power :-) Allons-y, commençons par nous rendre dans le dossier des sources /usr/local/share/games/wahcade/:
puckman@mamecab:~/mame$ cd /usr/local/share/games/wahcade/
Faire la copie de sauvegarde du fichier original avant toute modification:
puckman@mamecab:/usr/local/share/games/wahcade$ cp -v filters.py filters.py_orig « filters.py » -> « filters.py_orig »
Éditons le fichier filters.py
puckman@mamecab:/usr/local/share/games/wahcade$ pico filters.py
Pour y insérer la déclaration du clavier au niveau de la variable gérant les contrôleurs (ligne 89 avec CTRL+_) entre Pedal et None. Nous en profiterons pour ajouter d'autres contrôleurs tels "keypad", "doublejoy" ou "hanafuda" par exemple. Le bloc avant la modification:
filters.py (line 74)
- _controllers = {
- 'joy2way': u'2-Way Joystick',
- 'vjoy2way': u'Vertical 2-Way Joystick',
- 'joy4way': u'4-Way Joystick',
- 'joy8way': u'8-Way Joystick',
- 'stick': u'Analogue Joystick (or ~270\xb0 Wheel)',
- 'doublejoy2way': u'Double 2-Way Joysticks',
- 'vdoublejoy2way': u'Double Vertical 2-Way Joysticks',
- 'doublejoy4way': u'Double 4-Way Joysticks',
- 'doublejoy8way': u'Double 8-Way Joysticks',
- 'lightgun': u'Light-Gun',
- 'paddle': u'Paddle (or ~270\xb0 Wheel)',
- 'dial': u'Spinner (or 360\xb0 Wheel)',
- 'trackball': u'Trackball',
- 'pedal': u'Pedal',
- '': u'None'}
Et après modification, les 3 lignes concernées:
filters.py (line 88)
- 'pedal': u'Pedal',
- 'joy': u'Joystick',
- 'gambling': u'Gambling',
- 'mahjong': u'Mahjong',
- 'doublejoy': u'Double Joystick',
- 'keypad': u'Keypad',
- 'mouse': u'Mouse',
- 'positional': u'Positional',
- 'hanafuda': u'Hanafuda',
- 'keyboard': u'Keyboard',
- '': u'None'}
Puis CTRL+X pour fermer l'éditeur "pico". Répondre "O" pour sauvegarder et ENTRÉE pour valider le nom du fichier. Nous voilà revenus au prompt.
Une fois le correctif appliqué, nous pouvons revenir à notre dossier mame:
puckman@mamecab:/usr/local/share/games/wahcade$ cd ~/mame puckman@mamecab:~/mame$
N'oubliez pas de retourner par la case wahcade-setup (partie précédente) et la génération du filtre qui a échoué. Une fois fait, passons au lancement de Wahcade!
IX.d Test de Wahcade
C'est le moment de tester notre front-end! Toujours dans la session graphique sous xterm utilisé pour lancer wahcade-setup, nous lancerons cette fois wahcade:
puckman@mamecab:~/mame$ wahcade
Note sur le clavier: Pour exécuter la ROM choisie, Wahcade utilise la touche START du joueur 1, soit la touche 1 (pas la touche du pavé numérique) depuis un clavier configuré en anglais. Si vous travaillez sur un clavier français par exemple, vous enverrez la lettre & et non pas 1... Or, maintenant que Wahcade est correctement configuré, nous n'aurons plus à saisir de texte dans l'environnement graphique. Je vous conseille donc de mettre keymap à 0 (zéro) dans le fichier mame.ini et de dé-commenter la ligne setxkbmap -layout us dans le fichier .xsession pour travailler naturellement sur un clavier anglais dans l'environnement graphique, Wahcade et MAME. Je considérerai par la suite que vous avez basculé votre clavier en anglais sous X.

Vous pouvez alors sélectionner la ROM souhaitée et MAME sera lancé directement.
Comme sous MAME, utilisez la touche ÉCHAP pour quitter le front-end.
Après avoir quitté Wahcade, nous devons sortir de l'environnement X avec la commande exit:
puckman@mamecab:~/mame$ exit
IX.e Wahcade par défaut
Éditer simplement le fichier .xsession dans le dossier du compte puckman pour remplacer le lancement de xterm par wahcade:
puckman@mamecab:~/mame$ pico ~/.xsession
# Resolution de l'ecran
xrandr -s 800x600
# Clavier anglais
setxkbmap -layout us
# Suppression de l'ecran de veille (ecran noir)
xset s off
# Suppression de la gestion d'energie (extinction moniteur)
xset -dpms
# Lancement du programme
wahcade
# Pour mémoire, la session graphique se termine automatiquement une fois le programme quitté.
xrandr -s 800x600
# Clavier anglais
setxkbmap -layout us
# Suppression de l'ecran de veille (ecran noir)
xset s off
# Suppression de la gestion d'energie (extinction moniteur)
xset -dpms
# Lancement du programme
wahcade
# Pour mémoire, la session graphique se termine automatiquement une fois le programme quitté.
Puis CTRL+X pour fermer l'éditeur "pico". Répondre "O" pour sauvegarder et ENTRÉE pour valider le nom du fichier. Nous voilà revenus au prompt, prêts à fignoler l'installation aux petits oignons.
X. DÉMARRAGE & ARRÊT
J'ai une bonne nouvelle, les "briques" sont prêtes! Debian Squeeze, X, MAME, Wahcade, les ROMs, les illustrations, etc. sont installés et il ne reste maintenant plus qu'à imbriquer ces éléments pour en faire un ensemble cohérent. Voici en ordre les différents points auxquels nous feront référence pour la fin du tuto:
- La borne démarre par un switch (bouton ou autre),
- Le système d'exploitation se lance jusqu'au login,
- Le login va automatiquement lancer la session ("puckman"),
- L'ouverture de session "puckman" démarre le serveur X,
- Le démarrage du serveur X lance le front-end Wahcade,
- L'utilisateur a la main (lancement de plusieurs jeux avec MAME) et quitte Wahcade,
- La session graphique s'arrête automatiquement,
- La main est rendue à la console qui arrête le système.
Je vous laisse gérer le point #1 en utilisant un bouton pression intégré à la borne ou par exemple le switch du monnayeur pour mettre sous tension la machine. Le lancement de votre Debian Squeeze (point #2) se fera dans la foulée et vous mènera jusqu'au login. Là, nous arrivons déjà au point #3 explicité ci-dessous.
X.a Login automatique (point #3)
Comme je vous sent plutôt à l'aise jusque là, on va écrire et compiler un programme en C qui nous permettra de nous connecter automatiquement au boot de la mamecab.
Commençons par créer un dossier ~/bin contenant les binaires autre que MAME et rendons -nous à l'intérieur:
puckman@mamecab:~/mame$ mkdir /home/puckman/bin puckman@mamecab:~/mame$ cd /home/puckman/bin puckman@mamecab:~/bin$
Créez le fichier ~/bin/autolog.c avec pico:
puckman@mamecab:~/bin$ pico autolog.c
Écrivez (ou mieux, copiez-collez) ce bout de code dans autolog.c
autolog.c
#include <unistd.h>
int main()
{
execlp( "/bin/login", "login", "-f", "puckman", 0 );
}
int main()
{
execlp( "/bin/login", "login", "-f", "puckman", 0 );
}
Puis CTRL+X pour fermer l'éditeur "pico". Répondre "O" pour sauvegarder et ENTRÉE pour valider le nom du fichier. Nous voilà revenus au prompt.
Hop, passage par le compilateur cc:
puckman@mamecab:~/bin$ ls autolog.c puckman@mamecab:~/bin$ cc autolog.c -o autolog puckman@mamecab:~/bin$ ls autolog autolog.c
Le binaire /home/puckman/bin/autolog est maintenant prêt, simple non?
Reste à demander au système de l'utiliser au démarrage sur le tty1 (console #1). Pour cela passer en "super-utilisateur" et éditer le fichier /etc/inittab après en avoir fait une copie de secours:
puckman@mamecab:~/bin$ su - Mot de passe : root@mamecab:~# cp /etc/inittab /etc/inittab_orig root@mamecab:~# pico /etc/inittab
Aller à la ligne n°54 (CTRL + _) où vous remplacerez ceci:
1:2345:respawn:/sbin/getty 38400 tty1
par
1:2345:respawn:/sbin/agetty -n -l /home/puckman/bin/autolog 38400 tty1
ATTENTION À BIEN RELIRE LES MODIFICATIONS! Il s'agit d'un des fichiers qui gère la console donc gare aux fôtes de frappe (notez par exemple qu'on utilise "agetty" au lieu de "getty").
Pour terminer, quitter le compte "super-utilisateur".
root@mamecab:~# exit logout puckman@mamecab:~/bin$
X.b Démarrage automatique de la session X (point #4)
Lors de la connexion au système, le fichier .profile du compte utilisateur est lancé. Il suffit alors d'y placer le lancement de notre session graphique.
Éditer le fichier /home/puckman/.profile (penser à faire une copie de secours au cas où!)
puckman@mamecab:~/bin$ pico ~/.profile
...et ajouter à la fin les commandes suivantes:
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then
# Lancement de l'interface graphique...
startx
# Arrêt de la machine une fois la session graphique terminée
sudo shutdown -h now
fi
# Lancement de l'interface graphique...
startx
# Arrêt de la machine une fois la session graphique terminée
sudo shutdown -h now
fi
Il faut permettre à l'utilisateur "puckman" d'éteindre la machine via l'utilitaire sudo. Pour cela, éditer le fichier /etc/sudoers avec le compte "super-utilisateur" :
puckman@mamecab:~/bin$ su - Mot de passe : root@mamecab:~# pico /etc/sudoers
...et ajouter à la fin du fichier la ligne suivante:
# Autorisation pour le compte "puckman" d'utiliser la commande "shutdown" sans mot de passe puckman ALL=(ALL) NOPASSWD: /sbin/shutdown
X.c Paramétrage X11 et lancement Wahcade (point #5)
Ce point a été réalisé, c.f. Premier lancement MAME
À partir d'ici tout a été passé en revue et votre MAMECAB doit booter et lancer automatiquement Wahcade et vous pouvez lancer vos jeux. Lorsque vous quittez le front-end, la session graphique se coupe et la borne s'éteint. Bonnes parties endiablées!
XI. LIENS UTILES
Si vous avez besoin d'informations plus détaillées ou si vous êtes simplement dans l'impasse à un moment donné, voici la liste des sites dont je me suis servi pour ce tuto et ma mamecab:
Logiciel:MAME
Wah!cade
Centralisation:
MAME World (LA liste des sites MAME)
MAWS (Moteur de recherche des ROMS)
Ressources:
MAME Testers (Bugs)
Arcade History
Arcade Museum
TAFA (Flyers)
MAME Cheats
Pleasuredome (Torrent tracker MAME, MESS,...)
Forum:
Linux MAME Forum (SDL)
Dev:
Guru's ROM dump news
Arbee's WIP Emporium
Matériel:
Ultimarc (Grande Bretagne)
OZ Stick (Australie)