Table des matières

Notes diverses

Cette page contient des notes diverses, qui se retrouveront probablement intégrées à d'autres pages ultérieurement.

Projet émulateur portable

Un super lien, avec plein de ressources utiles, et à jour : https://weekendengineer.wordpress.com/2014/09/08/setting-up-gameboy-advance-for-retropie/ Second lien intéressant, avec pas mal d'infos : http://blog.petrockblock.com/forums/topic/updated-for-2-3-step-by-step-guide/

L'objectif de ce projet est de fabriquer une console portable rétro-gaming. Pour cela, nous utiliserons de l'émulation, sur un Raspberry Pi. Le choix du Raspberry pi est justifié par son faible coût, l'énorme communauté, la compacité et la faible consommation. Pour ne rien gâcher, j'ai l'habitude de réaliser des projets dessus. Pour l'instant je développe sur un Raspberry pi B+, mais la question se posera par la suite de la carte à utiliser. En effet, le Raspberry pi A+ est significativement plus compact, et consomme nettement moins que les autres. Pour une console compacte, ce sera donc un choix intéressant, puisque nous gagnons en volume, mais aussi en autonomie à batterie constante. En contrepartie, on passe a 256 Mio de ram contre 512 pour le B+, et un port USB contre quatre et un port ethernet pour le B+. Cela ne devrait pas poser de problèmes pour une console portable. D'un autre côté, pour une consommation légèrement supérieure à celle d'un B+, il y a le Raspberry pi 2 B, qui intègre un CPU arm v7 à quatre cœurs à 900Mhz avec 1 Gio de RAM contre un CPU arm v6 à un cœur à 700Mhz et 512 Mio de ram. D'après les premiers tests, ce modèle est nettement plus puissant, et permet d'émuler de façon confortable la Playstation 1 ou la Nintendo 64, contrairement au Raspberry Pi B+ qui était un peu juste pour ces plateformes.

Activation des sauvegardes d'état

Pour activer les sauvegardes d'état, il faut faire quelques manipulations: https://weekendengineer.wordpress.com/2014/09/05/retropie-adding-game-roms-bios-files-and-enabling-save-states/ Je dois encore vérifier si tout fonctionne à ce niveau.

Activation des touches de menu sur la manette

On trouvera ici des conseils de configuration, ainsi que des explications sur l'ajout de touches spéciales sur la manette pour commander le système. Ainsi, la touche select deviendra une touche “hotkey”, qui lorsque maintenue, modifie le comportement des autres touches, pour ajouter de nouvelles fonctions sans perdre de touches. Les infos sont ici : http://blog.petrockblock.com/forums/topic/updated-for-2-3-step-by-step-guide/

En pratique, pour pouvoir quitter l'émulateur (retroarch) sans avoir à appuyer sur echap sur un clavier, il faudra ajouter ceci au fichier de configuration (/opt/retropie/configs/all/retroarch.cfg) :

input_enable_hotkey_btn = "8"
input_exit_emulator_btn = "9"

Dans mon cas, la touche select est la 8, et start la 9. Du coup maintenir select, puis appuyer sur start revient au menu principal, quand on est dans retroarch.

De même, on peut ajouter le fait de sauvegarder une savestate, ou d'en charger une :

input_save_state_btn = "5"
input_load_state_btn = "4"

Ici, maintenir select puis appuyer sur L1 chargera la savestate, tandis que R1 la chargera.

Il est également possible de régler le volume sonore depuis la manette :

input_volume_up_axis = "-1"
input_volume_down_axis = "+1"

Si on ajoute ces lignes au fichier retroarch.cfg, alors le fait de maintenir select, puis d'appuyer sur la fleche du haut ou du bas de la croix directionnelle augmentera ou diminuera le volume sonore.

Réalisation - prototype 1

La première étape est de faire fonctionner le système d'émulation sur le Raspberry pi.

Installation de RetroPie

J'ai utilisé RetroPie, qui s'appuie sur EmulationStation. Voici le guide d'installation sur lequel je me suis basé : Installation de RetroPie sur un Raspberry Pi

Voici un autre tutoriel, que j'ai utilisé, et qui est plus détaillé, contenant des informations à jour sur la configuration post-installation : http://www.raspberrypi.org/forums/viewtopic.php?f=78&t=85041 Cette suite logicielle permet d'installer tout ce qui est nécessaire pour émuler un grand nombre de consoles retro-gaming. Plusieurs solutions pour l'installer :

  1. Télécharger une image pré-configurée (la plus facile);
  2. Installer depuis une Raspbian.

J'ai retenu la seconde solution, car j'avais déjà un système configuré. En pratique, c'est un peu long, mais assez simple. Tout d'abord, il faut mettre la liste des paquets du système :

sudo apt-get update

On vérifiera alors que les paquets git et dialog soient installés :

sudo apt-get install git dialog

On récupère alors l'installeur :

git clone --depth=0 https://github.com/petrockblog/RetroPie-Setup

Une fois ceci fait, on obtient un répertoire RetroPie-Setup, dans lequel on se rend avant de rendre le script exécutable, puis de l'exécuter :

cd RetroPie-Setup
chmod a+x retropie_setup.sh
sudo ./retropie_setup.sh

Au bout d'un moment, on obtient un menu proposant divers choix. Deux options nous intéressent ici : installer les binaires, la solution la plus rapide des deux, ou compiler depuis les sources, ce qui sera bien plus long (16-17h), mais permettra d'avoir la toute dernière version. Pour ma part j'ai installé les binaires.

Au bout d'un moment, l'installation se termine, et on peut utiliser le système d'émulation.

Pour ma part, j'ai configuré le système afin que l'interface graphique ne se lance pas automatiquement. Je me logue donc, avant de lancer la suite logicielle via la commande suivante :

emulationstation

A ce stade, un clavier sera utile, pour se déplacer dans les menus. Si on branche une manette USB, le logiciel proposera de configurer celle ci. Dans le cas contraire, il suffira d'appuyer sur la touche espace pour activer le menu qui permet entre autres de configurer les manettes. Attention toutefois, ce menu permet de configurer la manette pour permettre de contrôler le menu général, mais ne permet pas de configurer les boutons pour les jeux, dans les émulateurs.

Configuration des émulateurs

Super Nintento

L'emulateur snes utilisé par défaut est à priori RetroArch. Voici la page wiki vers le fichier de configuration : https://github.com/petrockblog/RetroPie-Setup/wiki/RetroArch-Configuration La documentation présente sur ce site n'est pas à jour pour le moment, et indique que le fichier de configuation se trouve dans votre /home/pi Or, ce n'est plus le cas, il faut maintenant chercher dans /opt/retropie/emulators/. Du coup, pour pouvoir configurer la manette pour la SNES, avec retroarch, il faut faire :

cd /opt/retropie/emulators/retroarch
./retroarch-joyconfig

Nous pourrons ainsi visualiser les commandes, et voir à l'écran le fichier généré. C'est l'occasion d'essayer divers réglages, sans réellement enregistrer la configuration. Une fois ceci fait, il est alors possible d'utiliser la même commande pour générer le fichier de configuration, et de rajouter ceci à la fin du fichier de configuration de retroarch :

sudo ./retroarch-joyconfig -p 1 -j 0 -t 3 >> /opt/retropie/configs/all/retroarch.cfg

L'option -p 1 permet de spécifier qu'on configure le joueur 1, et le -j 0 indique qu'on utilisera pour cela la première manette branchée, la 0. Enfin, l'option -t 3 indique qu'au bout de 3 secondes, on passera à l'assignation de la commande suivante. C'est utile si votre manette ne dispose pas de toutes les touches, cela permet d'ignorer certaines des assignations.

Le double chevron (») indique qu'on ajoute la sortie de cette commande au fichier de configuration indiqué après. On peut de même vérifier le résultat de la commande, voire modifier les réglages enregistrés en faisant ceci :

sudo nano /opt/retropie/configs/all/retroarch.cfg

Attention à ne pas exécuter plusieurs fois la configuration comme indiqué précédemment, car cela ajouterait à chaque fois un bloc de commandes. Après la première fois, il faudra soit effacer les lignes correspondantes, puis relancer la commande, soit modifier directement le fichier de configuration.

Megadrive (Genesis)

L'emulateur de Megadrive est probablement Retroarch, car la configuration de celui ci est également appliquée pour les jeux de Megadrive (Genesis).

NES

De même, ici, c'est Retroarch qui s'occupe de l'émulation NES, donc la configuration des manettes est utilisée ici. Sur NES on aura uniquement la croix directionnelle, les boutons start, select, A et B.

Game Boy Advance

L'émulateur game boy advance ne démarre pas pour le moment, car il réclame un fichier de bios de gba. J'ai trouvé ou télécher des fichiers de bios : http://www.emuparadise.me/biosfiles/bios.html Ce lien pourrait servir pour d'autres émulateurs.

L'émulateur de game boy advance est gpsp, et son répertoire est

/opt/retropie/emulators/gpsp

Il faut donc copier le fichier gba_bios.bin dans le répertoire partagé BIOS (/home/pi/RetroPie/BIOS/) On pourra ensuite copier ce fichier dans le répertoire adéquat :

sudo cp /home/pi/RetroPie/BIOS/gba_bios.bin /opt/retropie/emulators/gpsp/raspberrypi/

Si on lance maintenant emulationstation, on peut lancer des jeux de gba (bien sur il faut avoir copié les roms dans le répertoire partagé roms/gba).

Pour ouvrir le menu de l'émulateur, il faudra appuyer sur la touche F10 du clavier, ce qui nous permettra de configurer la manette. Pour la première configuration, il faudra donc un clavier, mais ça n'est pas nécessaire par la suite. Il suffit de suivre les indications à l'écran. A noter que par défaut, la dernière option permet d'activer un raccourci vers le menu de l'émulateur, avec select + gâchette droite. On peut alors se déplacer dans le menu sans clavier, et également quitter l'émulateur et ainsi revenir au menu principal.

Le fichier de configuration des touches se trouve à l'emplacement suivant :

/opt/retropie/emulators/gpsp/raspberrypi/keys.txt

Voici un lien vers le site qui m'a permis de faire fonctionner l'émulateur de game boy advance : https://weekendengineer.wordpress.com/2014/09/08/setting-up-gameboy-advance-for-retropie/

(il y a plein d'autres choses utiles et intéressantes!)

Neo-Geo

Par défaut, si on lance un jeu neogeo, il y a un chargement, puis un écran noir.

J'ai réussi à lancer un jeu, pour l'instant la manette n'est pas configurée. Voici la procédure :

  1. Copier neogeo.zip dans le partage roms/neogeo-gngeopi
  2. copier les roms dans le même partage.

=Configuration de la manette= Pour la configuration de la manette, il faut trouver le fichier de configuration de gngeo. Pour ma version, il se trouve dans le répertoire home, dans un sous dossier .gngeo, dans le fichier gngeorc.

pour se rendre dans ce répertoire, puis modifier le fichier, on pourra procéder comme suit :

cd ~/.gngeo/
nano gngeorc

Voici mon fichier :

gngeorc
p1control A=J0B1,B=J0B0,C=J0B2,D=J0B3,START=J0B9,COIN=J0B5,UP=J0a1,DOWN=J0a1,LEFT=J0A0,RIGHT=J0A0,MENU=J0B8
p2control A=J1B1,B=J1B0,C=J1B2,D=J1B3,START=J1B9,COIN=J1B5,UP=J1a1,DOWN=J1a1,LEFT=J1A0,RIGHT=J1A0,MENU=J1B8

Le principe du fichier est relativement simple. J0 correspond au joypad (manette) 0, J1 au joypad 1, etc. B0 correspond au bouton 0, B1 au bouton1, etc. Donc A=J0B0 indique que le bouton A de la neogeo est le bouton 0 du joypad 0. Dans mon cas, les boutons sont physiquement numérotés de 1 à 10, donc je réutilise ce nombre auquel je soustrais 1.

Pour les directions, ma manette à une croix directionnelle, avec deux axes. Du coup, il existe l'axe 0 et l'axe 1. Par essais, j'ai déterminé que l'axe 0 correspond à l'axe gauche-droite, et l'axe 1 correspond à l'axe haut-bas.

J'ai donc mis UP=J0a1 et DOWN=J0a1, car les deux sont sur le même axe. Si l'axe est inversé, alors on pourra mettre le a en majuscule, comme je l'ai fait pour gauche et droite : LEFT=J0A0 et RIGHT=J0A0.

Kxxx correspond ici à la touche xxx du clavier, il faudra probablement trouver le code ascii de la touche correspondante.

Pour déterminer les touches du joypad, on peut utiliser jstest, qui s'installe comme suit :

sudo apt-get install joystick

On l'exécutera par la commande suivante :

jstest /dev/input/js0

Cette commande affichera les sorties du joypad 0, on pourra utiliser js1 pour le 1 et ainsi de suite.

J'ai trouvé ce fichier de configuration commenté qui donne quelques détails : http://sheasilverman.com/rpi/gngeorc

Le bouton MENU permet d'afficher un menu de configuration de l'émulateur, et permet de quitter celui ci et revenir à emulationstation.

Au cas où, voici le fichier par défaut que j'avais :

gngeorc
p1control A=K122,B=K120,C=K97,D=K115,START=K49,COIN=K51,UP=K273,DOWN=K274,LEFT=K276,RIGHT=K275,MENU=K27
p2control A=K108,B=K59,C=K111,D=K112,START=K50,COIN=K52,UP=K264,DOWN=K261,LEFT=K260,RIGHT=K262,MENU=K27

Une page expliquant un peu la configuration de gngeo : https://github.com/petrockblog/RetroPie-Setup/wiki/GnGeo-Pi Pour l'instant, je ne suis pas parvenu à faire fonctionner l'autre émulateur NeoGeo, et j'ignore les différences. Voici une piste : http://blog.petrockblock.com/forums/topic/neo-geo-not-working-black-screen-only/

Configuration de Retroarch

Retroarch est un émulateur multi-systèmes qui sert notamment pour la NES, la Master System, la Super Nintendo et la Megadrive. Une bonne configuration de celui ci permettra donc de profiter de réglages optimisés pour chacun de ces systèmes.

Voici ce que j'ai ajouté en fin de mon fichier de configuration :

retroarch_addon.cfg
input_enable_hotkey = nul
input_player1_joypad_index = "0"
input_player1_b_btn = "1"
input_player1_y_btn = "0"
input_player1_select_btn = "8"
input_player1_start_btn = "9"
input_player1_up_axis = "-1"
input_player1_down_axis = "+1"
input_player1_left_axis = "-0"
input_player1_right_axis = "+0"
input_player1_a_btn = "2"
input_player1_x_btn = "3"
input_player1_l_btn = "4"
input_player1_r_btn = "5"
input_player1_l2_btn = "6"
input_player1_r2_btn = "7"
 
input_enable_hotkey = nul
input_player2_joypad_index = "1"
input_player2_b_btn = "1"
input_player2_y_btn = "0"
input_player2_select_btn = "8"
input_player2_start_btn = "9"
input_player2_up_axis = "-1"
input_player2_down_axis = "+1"
input_player2_left_axis = "-0"
input_player2_right_axis = "+0"
input_player2_a_btn = "2"
input_player2_x_btn = "3"
input_player2_l_btn = "4"
input_player2_r_btn = "5"
input_player2_l2_btn = "6"
input_player2_r2_btn = "7"
 
input_enable_hotkey_btn = "8"
input_exit_emulator_btn = "9"
input_save_state_btn = "5"
input_load_state_btn = "4"
input_volume_up_axis = "-1"
input_volume_down_axis = "+1"