Ce billet présente l'installation des logiciels MAME et Attract Mode sur une mini borde d'arcade Picade. La carte mère utilisée sur la borne est une Raspberry Pi 5 et le système installé sur la carte est le Raspberry Pi OS dans sa version Lite sans Bureau. LA dernière version de ce système est téléchargeable ici.
La borne d'arcade doit être entièrement montée et toutes les connexions faites, Joystick, bouton, haut-parleur et écran.
Lors de l'installation du système, la Pi 5 doit être alimentée directement et non par le Picade X Hat.
L'installation du système Pi OS Lite passe par la procédure standard proposée par Raspberry en qui utilise le Pi Imager. Je recommande l'activation du Wi-Fi et de SSH avec le Pi Imager qui permettra ainsi de se connecter directement au système à distance avec SSH.
Une fois le système installé et mis à jour, il faut procéder à l'installation des utilitaires et librairies nécessaires à l'installation et au fonctionnement de tous les logiciels.
La plupart des logiciels qu'il faudra compiler devront être téléchargés depuis leur dépôt GitHub ou GitLab. Il faut donc installer git.
sudo apt install git
Afin de fonctionner, la borne Picade utilise un joystick, des boutons, un haut parleur et un écran dédié qui doivent être connectés au Pi 5. Pimoroni a conçu pour cela le Picade X Hat qui se connecte aux ports GPIO du Pi 5. Le joystick, le boutons et le haut-parleur se connectent sur cette carte. L'écran se connecte directement sur le premier port HDMI situé à côté de la prise d'alimentation du Pi 5.
Pimoroni a développé une version spécifique du pilote de la Picade X Hat pour le Pi 5. Mais il faut le télécharger, le compiler, l'installer et l'activer.
Le téléchargement, la compilation et l'installation se font avec les commande suivantes.
git clone https://github.com/pimoroni/picade-hat -b feature/pi5
cd picade-hat
make
sudo make install
La commande make génère le fichier Device Tree Blob Overlay (DTBO) à partir du fichier Device Tree Source (DTS) en utilisation la commande Device Tree Compiler (DTC).
dtc -I dts -O dtb -o picade.dtbo picade.dts
La commande install copie le fichier dtbo dans le répertoire des configurations matériel.
cp picade.dtbo /boot/firmware/overlays/
Il faut ensuite indiquer au noyau Linux du Raspberry de charger cette configuration matérielle en éditant le fichier de configuration du système.
sudo nano /boot/firmware/config.txt
Il faut ajouter le chargement de l'overlay dans la section [ALL] du fichier.
...
[all]
dtoverlay=picade
...
Une fois le système redémarré, vous pouvez contrôler que l'utilsiation du joystick et des boutons sont bien pris en compte.
thd --dump /dev/input/event*
En appuyant sur le premier bouton vous obtiendrez
EV_KEY KEY_LEFTCTRL 1 /dev/input/event0
# KEY_LEFTCTRL 1 command
EV_KEY KEY_LEFTCTRL 0 /dev/input/event0
# KEY_LEFTCTRL 0 command
En mettant le joystick vers le haut puis en le relachant
EV_KEY KEY_UP 1 /dev/input/event0
# KEY_UP 1 command
EV_KEY KEY_UP 0 /dev/input/event0
# KEY_UP 0 command
Dans ce cas on peut voire que les évènements sont rattchés à input0.
En listant les matériels on peut connaitre quel est est l'input qui gère les GPIO.
ls -l /dev/input/by-path
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-107c701400.hdmi-event -> ../event4
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-107c706400.hdmi-event -> ../event6
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-gpio_keys-event -> ../event0
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-pwr_button-event -> ../event1
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-xhci-hcd.1-usb-0:2.1:1.0-event-kbd -> ../event2
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-xhci-hcd.1-usb-0:2.1:1.1-event -> ../event3
On peut voir dans ce cas que les gpio sont gérés par event0.
Par défaut, le fichier dts assigne les actions du joystick et des boutons au GPIO et évènements du clavier suivants:
| Action | Code Clavier | GPIO | Touche clavier |
|---|---|---|---|
| Up | 103 | 12 | Flèche haut |
| Down | 108 | 6 | Flèche bas |
| Left | 105 | 20 | Flèche gauche |
| Right | 106 | 16 | Flèche droite |
| Button 1 | 29 | 5 | Contrôle gauche |
| Button 2 | 56 | 11 | Alt |
| Button 3 | 57 | 8 | Espace |
| Button 4 | 42 | 25 | Majuscule |
| Button 5 | 44 | 9 | Z |
| Button 6 | 45 | 10 | X |
| Enter | 28 | 27 | Entrée |
| Escape | 1 | 22 | Éhappement |
| Start | 23 | 23 | 5 |
| Coin | 24 | 24 | 1 |
| Power | 116 | 17 | Power |
La liste de brochage du GPIO pour le Picade X Hat est consultable ici.
La correspondance entre les touches du clavier et les codes envoyés est consultable ici
Si vous décidez d'alimenter le Pi 5 via le HAT, il ne pourra pas détecter l'alimentation officielle du Pi 5 et savoir qu'elle peut délivrer 5 ampères et l'indiquer au système. Il indiquera donc au système que vous avez une alimentation de 3A et le Pi 5 réagira en coséquence. L'écran du Picade scintillera mais n'afficera rien. Pour régler ce problème, il faut indiquer au système que vous avez une capacité de 5,0 ampères en éditant de le fichier de configuratin du système.
sudo nano /boot/firmware/config.txt
Il faut y ajouter l'option qui indique que l'on peut recevoir plus de 3A dans la section [ALL] du fichier.
...
usb_max_current_enable=1
...
Il faut ensuite indiquer que votre alimentation délivre bien 5 ampères en modifiant le fichier de configuration de l'eeprom.
sudo rpi-eeprom-config --edit
Il faut y ajouter le paramètre PSU_MAX_CURRENT (PSU=Powser Supply Unit) et indiquer que votre alimentation délivre 5000 milliampères soit 5 ampères.
...
PSU_MAX_CURRENT=5000
...
Par défaut avec le système Pi OS Lite installé sur un Raspberry Pi 5, la carte son fonctionne mais ne dispose d'aucun système de Contrôle. il est impossible, par exemple, de définir le niveau du contrôle sonor avec alsamixer.
Pour régler le problème il faut configurer Alsa (Advanced Linux Sound Architecture) en créant un fichier de configuration.
Le fichier de configuration asound.conf est livré dans le repo Git du Picade X Hat pour Raspberry Pi 5. Il faut juste le copier à partir du répertoire où il a été cloné.
sudo cp ~/picade-hat/etc/asound.conf /etc/
Il faut ensuite redémarrer la Picade et tester que le son fonctionne. Ce test est très important car il va initialiser le système Alsa.
speaker-test -c 1 -t wav
une fois que le test a été réalisé avec succès, alsamixer fonctionne bien et il est possible de contrôler le volume du son.
alsamixer

La Picade ne dispose de bouton dédié au contrôle du niveau sonore. il faut donc gérer ce contrôle à partir des autres boutons et en exécutant des lignes de commande.
L'utilitaire amixer permet de contrôller le niveau sonor par ligne de commande. l'application alsamixer indique que le qu'il n'y a qu'un seul controlleur de son et que son nom est PCM.
Pour augmenter le volume du son de 5% il faut alors exécuter la cammande.
amixer set PCM 5%+
Pour diminuer le volume du son de 5% il faut exécuter la cammande.
amixer set PCM 5%-
Afin d'exécuter ces commandes de contrôle du son à partir du joystick ou des boutons de la Picade, il faut déjà déterminer la combination que l'on souhaite utiliser pour augmenter ou diminuer le volume du son. J'ai choisi pour augmenter le niveau "Joystick haut + Bouton 6" et pour le baisser "Joystick bas + Bouton 6".
Avec la commande thd on identifie les codes clavier associés à ces actions.
| Action | Code claiver |
|---|---|
| Joystick haut | KEY_UP |
| Joystick bas | KEY_DOWN |
| Bouton 6 | KEY_X |
L'association de l'action à la commande se fait avec l'outil triggerhappy.
sudo apt install triggerhappy
On ajoute ensuite un fichier de configuration à triggerhappy.
sudo nano /etc/triggerhappy/triggers.d/audio.conf
KEY_UP+KEY_X 1 /usr/bin/amixer set PCM 5%+
KEY_DOWN+KEY_X 1 /usr/bin/amixer set PCM 5%-
On édite ensuite le service triggerhappy.
sudo systemctl edit triggerhappy.service --force --full
Et on modifie l'identifiant de l'utilisateur qui va exécuter la commande exécutée par le service par pi.
[Unit]
Description=triggerhappy global hotkey daemon
After=local-fs.target
[Service]
Type=notify
ExecStart=/usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user pi --deviceglob /dev/input/event*
[Install]
WantedBy=multi-user.target
Il faut enfin redémarrer le service.
sudo systemctl restart triggerhappy.service
On peut alors vérifier que le contrôle du volume se fait bien en relançant alsamixer et en exécutant la combinaison Joystick plus boutton. Vous verrez alors le niveau sonore monter et descendre.
Lors du démarrage d'un Raspberry, de nombreux messages et informations s'affichent sur l'écran avant que le système n'affiche le prompt de la ligne de commande.
La suppression d'une grande partie de ces informations et de ces messages se fait en modifiant les paramètres de démarrage du noyau du fichier cmdline.txt.
sudo nano /boot/firmware/cmdline.txt
Rajouter à la fin de la ligne de commande les paramètres
... logo.nologo quiet vt.global_cursor_default=0
logo.nologo supprime l'affichage des "framboises" en haut de l'écran.quiet supprime les messages liées au démarrages des services.vt.global_cursor_default=0 Supprime le clignotement du curseur du prompt de la ligne de commande.La suppression du message d'acceuil se fait en ajout le fichier en ajoutant le fichier 'hushlogin`à la racine du dossier utilisateur.
touch ~/.hushlogin
une fois la phase de démarrage d'un Raspberry terminé, le système vous demandera un compte d'authentification et son mot de passe. Pour que le système se connecte automatiquement au compte choisi il faut modifier le fichier de configuration du terminal.
sudo systemctl edit getty@.service
Cette commande crée automatiquement un fichier de remplacement de la configuration du service getty à l'emplacement:
/etc/systemd/system/getty@.service.d/override.conf
Ce fichier commence avec les lignes suivantes :
### Editing /etc/systemd/system/getty@.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file
### Lines below this comment will be discarded
...
Il faut ajouter dans l'espace réservé les lignes suivantes.
[Service]
ExecStart=
ExecStart=-/usr/sbin/agetty --skip-login --nonewline --noissue --autologin pi --noclear %I $TERM