Une NES à la MOD

janvier 18, 2019

C'est toujours agréable de ressortir une vieille console pour se faire une quête sur un jeu légendaire, ou faire découvrir l'histoire à nos enfants. Une des consoles de prédilection pour ce plaisir est la Nintendo NES. Mais si vous en avez une, vous savez que l'affichage est moche sur nos télévisions modernes et comme il est difficile de faire marcher les jeux sans que ce fichu témoin ne se mette à clignoter (la faute aux connecteurs qui se salissent et s'oxydent).

Il existe pleins de solutions d'émulation sur smartphone ou PC, mais le gameplay n'est pas le même. On ne retrouve pas la simplicité de la console que l'on branche et qui marche immédiatement, ni le plaisir du pad rectangulaire. Alors oui, il y a depuis quelques temps la "NES classic". J'aime beaucoup cette console de substitution, mais je me suis lancée dans un projet encore plus proche de l'originale tout en ayant les avantages du modernisme. Et c'est moi qui l'aurait fait, là !!!

Allons-y pour cet article un peu technique (c'est le moins que l'on puisse dire). Il sert de base pour construire une NES, mais il pourra être repris en grande partie pour tout projet d'une console différente mais partageant les mêmes objectifs.

Une Nintendo NES moddée avec un Raspberry PI faisant tourner Zelda

1. Préambule

Le projet qui est décrit dans cet article est techniquement assez complexe, il nécessite des compétences de soudure, de bricolage et d'informatique. Si ce projet vous semble trop complexe, il y a quand même 2 alternatives de qualité :

  • La NES classic fabriquée par Nintendo. Cette console est de qualité, les jeux fonctionnent très bien et on retrouve un gameplay proche de l'originale, car les manettes sont parfaites. Le seul petit reproche, est que le ratio d'affichage n'est pas bien adapté aux télévisions modernes.
  • La réalisation d'une fausse "NES classic" en se basant sur le boîtier "NESPi Case +". Il faut bien prendre ce boîtier et pas d'autres mauvaises copies. En effet, ce boîtier gère l'alimentation et le déport des ports pour arriver à un rendu proche de l'originale. J'ai fait un  projet avec ce boîtier (peut-être ferais-je un article) et je suis bluffée. Par contre, il faut le compléter par des bons pads USB. A mon avis, les plus proches des originaux sont les Retrolink.

Mais si vous n'avez pas peur, partons pour le projet NES à la MOD.

2. Le cahier des charges

La console doit être au plus proche de l'originale en terme de design, de prise en main et de robustesse. Un enfant doit pouvoir l'utiliser sans que l'on ait peur qu'il casse une configuration ou qu'il plante la machine.

En fait, on trouve des tonnes et des tonnes de tutoriels sur le web qui expliquent comment transformer un Raspberry PI en console de jeux. Mais, ils ne font pratiquement qu'installer un système d'exploitation et mettre la carte dans un boîtier basique. Au premier menu activé par erreur, ou au débranchement imprévu de la console, et hop le truc est planté. Et rien ne m'énerve plus qu'un gosse que l'on met devant une console et qui revient 2 minutes plus tard en ayant tout planté.

Nathalie Ciel étrangle Yoshi

Donc, voilà les exigences auxquelles la console devra répondre :

  • Être basée sur un vrai boîtier de Nintendo NES.
  • Utiliser les pads d'origine.
  • Être compatible HDMI et réutiliser l'emplacement de la sortie vidéo de la console. L'affichage doit se faire simplement sur une télévision HD moderne.
  • Être alimentée par une alimentation moderne (USB) et réutiliser l'emplacement d'origine de la prise.
  • Permettre d'utiliser le bouton "Power" comme à l'origine, sans crainte d'un plantage du système.
  • Permettre de quitter un jeu en actionnant le bouton "Reset".
  • Fonctionner avec un système d'exploitation durci pour éviter des manipulations par erreur. Un enfant de 5 ans doit pouvoir l'utiliser.
  • Se concentrer sur ce qu'elle fait de mieux : Jouer à des jeux NES. Il n'est pas question d'avoir 2000 jeux de 10 types de console avec des pads inadaptés. On doit retrouver le gameplay d'origine.

Donc finalement, ça va être encore un projet à base de Raspberry PI 3, mais l'objectif est d'avoir un résultat à la hauteur de l'original.

Ça sera donc un projet d'émulation, mais ne comptez par sur moi pour vous fournir les ROMs, et si vous en avez, je vous préconise d'avoir les cartouches d'origine (ce qui est mon cas).

A mon avis, on apprécie plus d'avoir 10 jeux que l'on explore à fond, que 1000 jeux que l'on ne lance même pas et que l'on ne connaît pas. Surtout sur NES, les jeux ne sont pas très beaux (par rapport aux consoles modernes), donc il est important de s'investir pour apprécier un jeu. N'avons-nous pas de magnifiques souvenirs de notre enfance sur les quelques jeux que nous avions ? Nous prenions le temps de les explorer, car nous n'avions que ceux-là.

3. Le matériel

J'ai pas mal galéré pour trouver le matériel permettant une bonne intégration dans le boîtier sans l’abîmer. Je vais donc vous faire part du résultat de mes recherches, mais aussi des erreurs dans lesquelles je suis tombée. Toutefois, tout ce matériel peut être adapté en fonction de vos connaissances et de ce que vous avez sous la main.

  • Le boîtier : Un boîtier de Nintendo NES. N'ayant pas eu le courage de démonter une NES fonctionnelle, j'en ai trouvé une sur un site de petites annonces qui ne fonctionnait pas.
  • Pads : 2 manettes NES d'origine.
  • La carte mère : J'ai choisi le Raspberry PI 3 avec une "micro sd card" de 32Go. C'est presque un standard avec une documentation très fournie.
  • Contrôle de l'alimentation : Il en existe plusieurs, mais j'ai choisi un modèle Mausberry permettant de choisir son bouton. Cette carte permet d’éteindre proprement le Raspberry et ainsi éviter la corruption de la "sd card". J'ai utilisé cette carte de contrôle dans 2 projets, et elle fonctionne très bien.
  • Conversion des manettes NES vers USB : L'objectif est de récupérer les broches des prises originales pour qu'elles fonctionnent avec des pads non modifiés. Donc, il faut une carte qui va transformer les signaux des pads Nintendo vers de l'USB (Il existe des solutions utilisant le GPIO, mais le fonctionnement me semble complexe et pas compatible avec toutes les versions de pad). Donc, pour assurer cette fonction, j'ai choisi la carte NES to USB de Raphnet. J'aime beaucoup le travail de cette personne, mais cette carte commence à poser des problèmes de compatibilités avec les OS récents et elle m'a demandé beaucoup de travail pour avoir une configuration parfaite (j'expliquerai plus loin). Il y a une alternative à essayer et qui est conseillée par Retropie (l'OS que j'ai choisi), c'est le GamepadBlock qui est en vente en Europe ici.
  • Connectique USB : Une petite rallonge micro usb (mâle d'un côté et femelle de l'autre côté).
  • Connectique HDMI : Une petite rallonge HDMI (mâle d'un côté et femelle de l'autre côté).
  • Plaque de plexiglas : Pour rassembler tous les composants dans le boîtier, tout en réutilisant les fixations existantes, j'ai utilisé une plaque en plexiglas.
  • Pieds de fixation : Pour fixer les cartes sur le plexiglas, j'ai utilisé des petits boulons et des rondelles. Mais avec du recul, il est préférable d'utiliser des pieds de fixation qui sont biens adaptés à ça.
  • Des fils avec une prise femelle pour se brancher de façon sûre sur les ports GPIO. Voici un exemple.
  • Un fer à souder avec de l’étain.
  • Un peu de quincaillerie, mais là, j'ai récupéré ce que j'avais sous la main. La suite du tutoriel montrera les éventuels besoins.
  • Alimentation : La console nécessitera une alimentation d'au moins 2.5 A.

4. Le montage mécanique

Concernant le montage mécanique, plutôt que de grandes explications, je vais donner les photos du montage. Mais voici quelques petites précisions :

  • J'ai coupé le plexiglas pour qu'il fasse la taille de la carte mère d'origine.
  • Le plexiglas se fixe ensuite dans le fond du boîtier sur les fixations de la carte mère. Il suffit de le poser sur les plots, puis de repérer par transparence l'emplacement des trous et enfin de percer.
  • Le RP3 et la carte d'interface NES/USB sont fixés par des boulons avec des rondelles pour assurer un espace suffisant. Mais des pieds pour plaque électronique seraient mieux.
  • Par chance, les trous d'origine vers l'extérieur pour les prises d'alimentation et vidéo sont à la hauteur du plexiglas. J'ai donc fixé les embouts des rallonges USB et HDMI en face des trous d'origine avec des boulons et des plaques de renfort.
  • Le RP3 est fixé de façon à exposer les ports USB en face de la trappe permettant de mettre les cartouches. De ce fait, il suffit d'ouvrir la trappe pour accéder aux ports USB et réseau (génial pour la maintenance).
  • J'ai fixé aussi 2 boutons (rouge et bleu) en face de la trappe pour qu'ils puissent servir ultérieurement. Un de ces boutons (le rouge) sert à activer le hard reset si la console plante (mais ça n'arrive jamais). Et l'autre est là au cas où, mais je n'y ai pas encore trouvé de fonction.
  • J'ai dessoudée la plaque électronique derrière les prises des manettes, car elle n'est plus utile.

Fixation des cartes sur le plexiglas pour la Nintendo NES

Fixation des rallonges d'alimentation et vidéo en face des trous d'origine de la Nintendo NES

Vue globale des composants fixés dans la Nintendo NES (avec le Raspberry PI au centre)

Vue de l'alimentation et du HDMI à l'extérieur du boitier

 

5. Les branchements

L'alimentation électrique de la LED et celle des boutons n'étant pas la même, j'ai préféré séparer les circuits qui étaient connectés à l'origine sur la plaquette des boutons de commande. En conséquence, j'ai fait une incision sur la plaquette de la NES pour isoler la masse du bouton "Reset" (borne 3 de la plaquette NES) et le + de la led.

Modification de la plaquette power/reset/led de la Nintendo NES

Modification de la plaquette power/reset/led de la Nintendo NES

Voici des explications concernant les bornes du matériel d'origine de la NES :

  • Broche 3 de la plaquette power/reset/led (bouton "Reset") vers broche 15 du RPI (GPIO 22).
  • Broche 1 du bouton supplémentaire bleu vers broche 13 du RPI (GPIO 27).
  • Broche 2 du bouton supplémentaire bleu vers broche 9 du GPIO (GND).
  • Broche 4 de la plaquette power/reset/led (masse du bouton "Reset") vers broche 9 du GPIO (GND).
  • Broche 5 de la plaquette power/reset/led (masse de la led) vers broche 9 du GPIO (GND).
  • Trou créé sur la plaquette power/reset/led (+ de la led) vers la broche "Led 3v" de l'alimentation Mausberry.
  • Broche 1 du bouton rouge (hard reset) vers la broche RST+ de l'alimentation Mausberry.
  • Broche 2 du bouton rouge (hard reset) vers la broche GND/RST de l'alimentation Mausberry.
  • Broche 1 de la plaquette power/reset/led (bouton "power" de la nes) vers broche SW gauche de l'alimentation Mausberry.
  • Broche 2 de la plaquette power/reset/led (bouton "power" de la nes) vers broche SW droite de l'alimentation Mausberry.

 

Voici des explications concernant les bornes de l'alimentation Mausberry :

  • Broche "Out" vers le pin 16 du RPI (GPIO 23)
  • Broche "IN" sur le pin 18 du RPI (GPIO 24)
  • Broche "Led 3v" vers le + de la LED de la NES (trou créé).
  • Broche "RST+" vers le bouton rouge (broche 1)
  • Broche "GND/RST" vers le bouton rouge (broche 2)
  • Broche SW (gauche) vers la bouton power de la nes (broche 1 de la plaquette power/reset/led)
  • Broche SW (droite) vers la bouton power de la nes (broche 2 de la plaquette power/reset/led)

Concernant le branchement de l'adaptateur NES/USB de Raphnet vers les ports de la console, c'est ultra simple. L'adaptateur a les trous positionnés comme les ports. En cas de doute, il y a de la documentation ici.

Une fois tout ça connecté et bien soudé, voici le résultat :

Ensemble du cablage connecté dans la Nintendo NES. Le Raspberry PI est prêt à fonctionner.

6. Le soft

Finalement c'est cette partie qui a été la plus compliquée et la plus longue. Je vais donc détailler tous les éléments que j'ai mis en œuvre pour arriver à une solution robuste.

Le tutoriel explique ce qui a été installé et paramétré pour durcir le système d'exploitation.

Une fois le système d'exploitation installé, les opérations d'installation et de configuration sont réalisables par 3 moyens :

  • Directement depuis le Raspberry avec un clavier USB et un joypad.
  • Depuis un autre PC en se connectant avec SSH : ssh pi@retropie (mot de passe : raspberry).
  • Pour certaines opérations, depuis un autre PC, via Samba qui est activé par défaut sur Retropie.

Pour les 2 derniers, il faut relier le RP3 au réseau.

6.1. Installation du système d'exploitation

J'ai choisi le système Retropie qui est celui qui me semble le plus souple pour faire ce type de projet. Mais si vous connaissez une autre solution, n'hésitez pas.

La récupération de Retropie se fait ici.

J'ai pris la version 4.3 pour des raisons de compatibilité avec la carte d'interface NES/USB Raphnet (j'expliquerai plus loin). Mais si vous n'avez pas cette carte, alors prenez la dernière version (4.4 à la date de rédaction de cet article).

Pour écrire l'image récupérée sur une sd-card, j'ai utilisé la commande shell suivante (sous Linux), mais si vous avez Windows, il existe des utilitaires qui font ça très bien (enfin, je n'ai jamais essayé, mais il y a plein de tutos sur Internet).

gunzip -c ./retropie-4.3-rpi2_rpi3.img.gz | sudo dd of=/dev/sdxx

Avec "sdxx" correspondant au périphérique de votre sd-card. Pour trouver ce périphérique, il suffit de la monter et d'utiliser la commande "df".

L'écriture de la sd-card va prendre 3 ou 4 minutes.

6.2. Premier démarrage

Pour démarrer, il suffit d'appuyer sur le bouton "Power" de la NES.

Au premier démarrage, Retropie va commencer par vous demander de configurer vos pads. Il suffit de le faire pour le premier. Il ne faut configurer que les directions, A, B, start et select. Pour tous les autres boutons, il faut les ignorer (en appuyant sur n'importe quel bouton pendant 2 secondes). Il faut aussi ignorer la "hotkey", car nous utiliserons les boutons de la console pour contrôler la sortie des jeux.

Ensuite, il faut activer SSH. Pour cela, allez dans "Retropie", puis "raspi-config" puis "Interfaces Options".

Enfin, configurez les informations de localisation correspondant à votre langue et votre clavier (c'est quand même pratique). Allez faire ça dans "Retropie", puis "raspi-config" puis "Internationalisation Options".

6.3 Bandes noires

Si vous avec des bandes noires autour de votre écran et que votre écran n'est pas complètement exploité, alors il faut modifier le fichier /boot/config.txt pour décommenter la ligne disable_overscan=1.

En SSH, j'utilise la commande sudo nano /boot/config.txt

Puis je reboote.

6.4. Activation de la carte de contrôle de l'alimentation

Pour pouvoir exploiter le redémarrage avec la carte de contrôle, suivez le manuel de votre carte. Dans le cas de la Mausberry, la documentation se trouve ici.

En me connectant en SSH, je lance les commandes suivantes

sudo wget http://files.mausberrycircuits.com/setup.sh

sudo bash setup.sh

sudo reboot

Et là, après le démarrage, ça commence à prendre forme : Le bouton "Power" de la NES permet de démarrer le RPI3, mais aussi de l'arrêter proprement.

6.5. Activation du bouton "Reset" et des boutons branchés sur le GPIO

Pour pouvoir exploiter les boutons branchés sur le port GPIO, il est nécessaire d'installer Retrogame qui permet de simuler une touche clavier à partir d'une entrée GPIO. La procédure décrite ici permet de gagner du temps.

En résumé (avec SSH) :

  1. Récupérer le script d'installation dans votre répertoire personnel : curl https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/retrogame.sh >retrogame.sh
  2. Lancer le script d'installation : sudo bash retrogame.sh
  3. Choisir 2
  4. Éditer le fichier /boot/retrogame.cfg. Commenter toutes les lignes et rajouter les lignes correspondant à vos besoins. Me concernant, j'ai mis les lignes suivantes
    ESC        22
    RIGHTALT   27
    • La 1ère ligne spécifie que la borne GPIO 22 est associée à la touche Escape. Cette borne est reliée au bouton "Reset" de la NES. De ce fait, ce bouton permettra de sortir des jeux, car la touche ESC est configurée par défaut pour sortir de l'émulateur. Aucune autre configuration ne sera nécessaire.
    • La 2ème ligne concerne le bouton bleu supplémentaire. Il n'est actuellement pas utilisé.

6.6. Choix du thème

Vous pouvez choisir le thème qui vous convient le mieux. Pour cela

  1. Allez dans "Retropie" puis "ES THEME".
  2. Installez les thèmes qui vous plaisent, et quitter l'écran d'installation pour retourner sur "Emulation Station".
  3. Activer le thème en appuyant sur le bouton "START" de votre pad, puis choisir "UI SETTINGS" et enfin le menu "THEME SET"

J'ai choisi le thème "CLEAN-LOOK" qui va bien avec le style "NES". Mais vous êtes libres de prendre un autre thème.

6.7. Installation des ROMs

Pour installer les ROMs, le plus facile est de faire ça depuis un PC avec SAMBA.

Copiez les ROMs dans le répertoire dédié à la console. Pour la NES c'est dans smb://retropie/roms/nes/ (ou /home/pi/RetroPie/roms/nes/ directement sur le RP3).

Récupérer les images (j'utilise les jaquettes) associées à chaque jeux :

  • En utilisant le scraper dans l'interface d'EmulationStation. Le manuel est disponible ici.
  • Ou à la main dans le répertoire associé à la console : Pour la NES c'est dans smb://retropie/configs/all/emulationstation/downloaded_images/nes/ (ou /opt/retropie/configs/all/emulationstation/downloaded_images/nes/ directement sur le RP3). 

Le scraper a initialisé la liste des jeux, mais si vous voulez enrichir les données, la liste se trouve dans le répertoire dédié : Pour la NES c'est dans smb://retropie/configs/all/emulationstation/gamelists/nes/ (ou  /home/pi/.emulationstation/gamelists/nes directement sur le RP3).

6.8. Optionnel : Recompilation du noyaux pour l'interface USB Raphnet

Linux a une maladie avec les pads USB : Lorsqu'il y a 2 pads connectés, il se mélange les pinceaux et parfois ils s'inversent, ou le 2ème se trouve dans une position par défaut qui fait défiler les menus (en haut à gauche).
Tout ça a très bien été corrigé dans les dernières versions du kernel. Et avec Retropie 4.4, tout fonctionne parfaitement sans la moindre intervention technique (Linux vient de rentrer dans le 21ème siècle).
Avec mon interface "Raphnet", tout fonctionne parfaitement. MAIS pour une raison obscure, sur tous les émulateurs, et seulement sur le jeu "Super Mario Bros", le pad 1 n'est pas détecté tant qu'un bouton du pad 2 n'a pas été pressé. C'est fou, c'est juste sur le jeu le plus populaire. Je me suis donc arrachée les cheveux pour trouver une solution propre.

Nathalie Ciel s'arrache les cheveux en configurant les pads de la Nintendo NES.

Après 1 semaine de recherche, je suis arrivée à trouver une solution un peu complexe : Il faut revenir à un kernel plus ancien (4.10) qui ne fonctionne que sur Retropie jusqu'à 4.3. Puis sur ce kernel, il faut appliquer un patch fourni par Raphnet et recompiler le kernel. En espérant que ce petit bug sera corrigé dans les versions à venir de Retropie, je vous montre comment sortir de l'ornière en se basant sur des procédures trouvées ici et ici .

  1. En SSH, se connecter sur le RP3 : ssh pi@retropie (mot de passe : raspberry)
  2. sudo apt-get install git bc
  3. git clone --depth=1 --branch rpi-4.10.y https://github.com/raspberrypi/linux
  4. wget www.raphnet-tech.com/support/retropie/usbhid_iostart.diff
  5. wget www.raphnet-tech.com/support/retropie/usbhid_start_before_connect.diff
  6. wget www.raphnet-tech.com/support/retropie/jsdev_initial_value.diff
  7. cd linux
  8. patch -p1 < ../usbhid_iostart.diff
  9. patch -p1 < ../usbhid_start_before_connect.diff
  10. patch -p1 < ../jsdev_initial_value.diff
  11. KERNEL=kernel7
  12. make bcm2709_defconfig
  13. make -j4 zImage modules dtbs
  14. sudo make modules_install
  15. sudo cp arch/arm/boot/dts/*.dtb /boot/
  16. sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
  17. sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
  18. sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

La compilation prend approximativement 2h sur un RPI3. Bon courage si vous avez ce malheureux problème.

6.9. Ratio de l'écran

Faire tourner les jeux NES en 16/9ème est un peu moche, car la déformation est trop importante. Mais d'un autre côté, rester en 4/3 sur nos écrans modernes fait perdre beaucoup de surface. Donc, j'aime bien l'intermédiaire.

Autre élément : sans un minimum de filtre, les pixels de la NES semblent énormes et très anguleux. Je préfère ne pas mettre de filtre évolué qui dégraderait les performances. Mais l'usage de l'option "video_smooth" de retroarch apporte un mieux évident et ne dégrade pas trop les performances.

Afin d'arriver à mettre tout ça en place, je modifie la configuration de "retroarch" seulement pour l'émulation de la NES (si vous avez un autre émulateur, à vous d'adapter). Pour ça, je modifie le fichier smb://retropie/configs/nes/retroarch.cfg (ou /opt/retropie/configs/nes/retroarch.cfg directement sur le RP3) pour y rajouter les lignes suivantes :

video_aspect_ratio = "1.600000"
video_smooth = "true"
aspect_ratio_index = "19"

Si ce ratio ou le filtre ne conviennent pas, vous trouverez de l'information sur les pages suivantes : ici et ici.

6.10. Splashscreen

Pour faire plus propre au démarrage, il vaut mieux un bon splashscreen. J'ai préparé celui-ci qui doit être posé dans le répertoire dédié : smb://retropie/splashscreens/ (ou /home/pi/RetroPie/splashscreens directement sur le RP3). Puis il faut le choisir dans le menu "Retropie" puis "Splash Screens".

Un bon petit jeu sur la nouvelle console


Lorsque la console fonctionnera devant votre télé, il y a de grandes chances pour qu'elle ne soit pas connectée au réseau (une NES en réseau !!! ). Toutefois, sans réseau l'OS va chercher plusieurs fois à ce connecter. Ceci ralentit le boot et affiche des messages d'erreur. Pour enlever ce problème il faut lancer l'outil raspi-config (sudo raspi-config depuis le RP3 ou en SSH), puis prendre le menu "boot options" et le menu "wait network" pour spécifier de ne pas attendre. Ceci ne bloque pas le réseau, mais il faut que la connexion marche du premier coup.

6.11. Sécuriser le démarrage des jeux

Pour accélérer le démarrage des jeux et éviter qu'un enfant rentre par erreur dans le menu de choix de l'émulateur, je préconise de bloquer le menu "runcommand". Pour ça, il faut éditer le fichier de configuration smb://retropie/configs/all/runcommand.cfg (ou /opt/retropie/configs/all/runcommand.cfg depuis le RP3 ). Puis modifier les 2 variables suivantes pour les positionner aux valeurs que je vous donne :

disable_menu = "1"
image_delay = "0"

Pour supprimer l'affichage du nom des gamepads au démarrage de l'émulateur (c'est moche), il faut changer la variable "video_font_enable" du fichier smb://retropie/configs/all/retroarch.cfg (ou /opt/retropie/configs/all/retroarch.cfg depuis le RP3). Il faut décommenter la ligne et mettre la valeur "false" :

video_font_enable = false

6.12. Sécuriser EmulationStation

Je pense qu'il faut absolument éviter que lors du choix d'un jeu, un utilisateur (c'est les pires ceux-là) rentre dans un menu de configuration. Pour éviter ça, je bloque tous les menus dans EmulationStation.

6.12.1. Enlever le menu de configuration du système.

En SSH, ouvrir le fichier de configuration des systèmes avec la commande "sudo nano /etc/emulationstation/es_systems.cfg" et commenter le menu "retropie" comme ci-dessous :

</system>
<!--  <system>
    <name>retropie</name>
    <fullname>RetroPie</fullname>
    <path>/home/pi/RetroPie/retropiemenu</path>
    <extension>.rp .sh</extension>
    <command>sudo /home/pi/RetroPie-Setup/retropie_packages.sh retropiemenu launch %ROM% &lt;/dev/tty &gt;/dev/tty</command>
    <platform/>
    <theme>retropie</theme>
  </system>-->
  <system>

 

6.12.2. Désactiver les boutons "start" et "select"

Dans EmulationStation pour éviter qu'un enfant rentre dans un menu, il faut éditer le fichier smb://retropie/configs/all/emulationstation/es_input.cfg (ou /opt/retropie/configs/all/emulationstation/es_input.cfg depuis le RP3) pour commenter les 2 boutons :

<!--<input name="start" type="button" id="4" value="1"/>-->
<!--<input name="select" type="button" id="5" value="1"/>-->

 

6.13. Sécuriser le système de fichiers

Comme vous le savez, les sd-cards posent des problèmes de fiabilité sur les RPI, car elles s'usent si on écrit trop et le système de fichiers peut être corrompu en cas d'arrêt de la machine pendant une écriture. Ces risques sont déjà biens couverts par la carte de contrôle de l'alimentation que nous avons ajouté. Mais on peut encore être plus sûr en limitant au maximum les écritures sur la carte.

Ce chapitre est indispensable si vous n'avez pas installé de carte de contrôle de l'alimentation. Dans le cadre de mon projet, c'est pour assurer un maximum de sécurité.

A noter : cette étape va rendre le système de fichiers en lecture seule. Si vous avez besoin de sauvegarder des données dans des émulateurs plus évolués que ceux de NES, alors il faudra faire un paramétrage plus précis.

6.13.1. Logs et fichiers temporaires en RAM

Cette étape consiste à mettre les fichiers temporaires et les logs en RAM plutôt que sur le système de fichiers de la sd-card. Ils seront perdus à l'arrêt de la machine, mais est-ce important pour une console ? NON

Pour cela, rajoutez les 2 lignes suivantes dans le fichier /etc/fstab :

tmpfs /tmp tmpfs defaults,noatime,nosuid,size=10m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=10m 0 0

6.13.2. Désactiver le SWAP

Pour faire de l'émulation NES, il n'y a pas trop besoin de RAM. Autant désactiver le swap.

Pour ça, lancer les commandes suivantes depuis votre RP3 ou en SSH :

sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove

Redémarrer et vérifier que le swap est bien désactivé avec la commande "free -m" qui doit afficher 0 pour le swap :

             total       used       free     shared    buffers     cached
Mem:           438         59        378          0          9         27
-/+ buffers/cache:         22        416
Swap:            0          0          0

6.13.3. Passer le système de fichiers en lecture seule

Etape 1 : Pour rendre le système de fichiers en lecture seule, il faut rajouter l'option "ro" sur / et /boot dans /etc/fstab. Exemple :

PARTUUID=5728b712-01  /boot           vfat    defaults,noatime,ro     0       2
PARTUUID=5728b712-02  /               ext4    defaults,noatime,ro  0       1

Etape 2 : Pour éviter de voir les messages d'erreur d'EmulationStation qui n'arrive pas à écrire dans le fichier de log (config non modifiable) :
Il faut modifier le fichier /opt/retropie/configs/all/autostart.sh pour remplacer

emulationstation #auto

par

emulationstation 2>/dev/null #auto


Etape 3 : Samba ne fonctionne pas correctement en lecture seule. Autant le désactiver avec l'outil de configuration de Retropie : "sudo /home/pi/RetroPie-Setup/retropie_setup.sh"

Etape 4 : Redémarrer

Remarque : Si nécessaire, pour passer provisoirement en mode rw pour faire des modifs (on arrive jamais à faire tout OK du premier coup), on se connecte en SSH et on lance la commande "sudo mount -o remount,rw /"

6.14. Sauvegarde du travail

Ouf, on a fini. Le travail pour en arriver là a été long. Je peux vous préconiser de sauvegarder votre carte après avoir vérifié que tout fonctionne correctement. Pour faire ça :

  1. Arrêter la console
  2. Récupérer la sd-card et insérez la dans un PC
  3. Sauvegarder la carte. Sous Linux, je fais ça avec la commande "sudo dd if=/dev/sdxx | gzip -9 > retropie-sauvegarde.img.gz". En rempaçant "sdxx" par le fichier de votre carte (même procédure qu'à l'écriture).
  4. Remettre la carte dans la console.
  5. Fermer le boitier et JOUEZ.

Un bon petit jeu sur la nouvelle console Nintendo NES avec Raspberry PI

7. Conclusion

Voilà un article qui était un peu long et très technique. Mais le résultat correspond à mes attentes. J'ai maintenant une vraie NES qui peut tourner des heures sans planter, même avec des enfants qui changent les jeux et qui l'éteignent sans surveillance. Je retrouve même des sensations que je n'avais qu'avec l'originale.

Alors oui, les puristes pourront critiquer cette transformation, mais du moment où je ne vois pas la différence et que je peux jouer à des madeleines de Proust sans m'occuper du moindre problème technique, c'est un succès.

En espérant que ce projet pourra servir à d'autres.

A bientôt

Travail terminé, Mario Bros est pendu par une manette de Nintendo NES.