\documentclass[a4paper, oneside, 10pt]{article}
\usepackage[french]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[unicode]{hyperref}
\usepackage{listings}
\date{\today}
\title{}
\author{Audrey Robinel}
\begin{document}

\maketitle
\tableofcontents



\part{\texorpdfstring{Notes diverses}{Notes diverses}}
\label{sec:notes_diverses}


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

\part{\texorpdfstring{Projet émulateur portable}{Projet emulateur portable}}
\label{sec:projet_emulateur_portable}


Un super lien, avec plein de ressources utiles, et à jour :
\url{https://weekendengineer.wordpress.com/2014/09/08/setting-up-gameboy-advance-for-retropie/}
Second lien intéressant, avec pas mal d'infos : \url{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.

\section{\texorpdfstring{Activation des sauvegardes d'état}{Activation des sauvegardes detat}}
\label{sec:activation_des_sauvegardes_detat}


Pour activer les sauvegardes d'état, il faut faire quelques manipulations:
\url{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.

\section{\texorpdfstring{Activation des touches de menu sur la manette}{Activation des touches de menu sur la manette}}
\label{sec: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 : 
\url{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) :\lstset{frame=single, language=bash}
\begin{lstlisting}

input_enable_hotkey_btn = "8"
input_exit_emulator_btn = "9"
\end{lstlisting}



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 : \lstset{frame=single, language=bash}
\begin{lstlisting}

input_save_state_btn = "5"
input_load_state_btn = "4"
\end{lstlisting}



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 : \lstset{frame=single, language=bash}
\begin{lstlisting}

input_volume_up_axis = "-1"
input_volume_down_axis = "+1"
\end{lstlisting}



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.

\section{\texorpdfstring{Réalisation - prototype 1}{Realisation  prototype 1}}
\label{sec:realisation__prototype_1}


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

\subsection{\texorpdfstring{Installation de RetroPie}{Installation de RetroPie}}
\label{sec:installation_de_retropie}


J'ai utilisé RetroPie, qui s'appuie sur EmulationStation. Voici le guide d'installation sur lequel je me suis basé :
\href{http://emulationstation.org/gettingstarted.html\#install_rpi_retropie}{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 :
\url{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 :
\begin{enumerate}
  \item Télécharger une image pré-configurée (la plus facile);
  \item Installer depuis une Raspbian.
\end{enumerate}


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 : \lstset{frame=single, language=bash}
\begin{lstlisting}

sudo apt-get update
\end{lstlisting}



On vérifiera alors que les paquets git et dialog soient installés :\lstset{frame=single, language=bash}
\begin{lstlisting}

sudo apt-get install git dialog
\end{lstlisting}



On récupère alors l'installeur : \lstset{frame=single}
\begin{lstlisting}

git clone --depth=0 https://github.com/petrockblog/RetroPie-Setup
\end{lstlisting}



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 : \lstset{frame=single, language=bash}
\begin{lstlisting}

cd RetroPie-Setup
chmod a+x retropie_setup.sh
sudo ./retropie_setup.sh
\end{lstlisting}



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 :\lstset{frame=single, language=bash}
\begin{lstlisting}

emulationstation
\end{lstlisting}



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.

\subsection{\texorpdfstring{Configuration des émulateurs}{Configuration des emulateurs}}
\label{sec:configuration_des_emulateurs}


\subsubsection{\texorpdfstring{Super Nintento}{Super Nintento}}
\label{sec:super_nintento}


L'emulateur snes utilisé par défaut est à priori RetroArch. Voici la page wiki vers le fichier de configuration : \url{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 :\lstset{frame=single, language=bash}
\begin{lstlisting}

cd /opt/retropie/emulators/retroarch
./retroarch-joyconfig
\end{lstlisting}



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 :\lstset{frame=single, language=bash}
\begin{lstlisting}

sudo ./retroarch-joyconfig -p 1 -j 0 -t 3 >> /opt/retropie/configs/all/retroarch.cfg
\end{lstlisting}



L'option \emph{-p 1} permet de spécifier qu'on configure le joueur 1, et le \emph{-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 (\textgreater \textgreater ) 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 :\lstset{frame=single, language=bash}
\begin{lstlisting}

sudo nano /opt/retropie/configs/all/retroarch.cfg
\end{lstlisting}



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.

\subsubsection{\texorpdfstring{Megadrive (Genesis)}{Megadrive Genesis}}
\label{sec: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).

\subsubsection{\texorpdfstring{NES}{NES}}
\label{sec: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.

\subsubsection{\texorpdfstring{Game Boy Advance}{Game Boy Advance}}
\label{sec: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 : 
\url{http://www.emuparadise.me/biosfiles/bios.html}
Ce lien pourrait servir pour d'autres émulateurs.

L'émulateur de game boy advance est \textbf{gpsp}, et son répertoire est \lstset{frame=single}
\begin{lstlisting}
/opt/retropie/emulators/gpsp\end{lstlisting}



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 : \lstset{frame=single, language=bash}
\begin{lstlisting}
sudo cp /home/pi/RetroPie/BIOS/gba_bios.bin /opt/retropie/emulators/gpsp/raspberrypi/\end{lstlisting}



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 : \lstset{frame=single, language=bash}
\begin{lstlisting}
/opt/retropie/emulators/gpsp/raspberrypi/keys.txt\end{lstlisting}



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

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

\subsubsection{\texorpdfstring{Neo-Geo}{NeoGeo}}
\label{sec:neogeo}


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 :
\begin{enumerate}
  \item Télécharger la rom NeoGeo (par exemple ici : \url{http://www.emuparadise.me/M.A.M.E._-_Multiple_Arcade_Machine_Emulator_ROMs/Neo-Geo/15030-download} )
  \item Copier neogeo.zip dans le partage roms/neogeo-gngeopi
  \item copier les roms dans le même partage.
\end{enumerate}


=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 : \lstset{frame=single, language=bash}
\begin{lstlisting}

cd ~/.gngeo/
nano gngeorc
\end{lstlisting}



Voici mon fichier : \lstset{frame=single, language=bash, title=gngeorc}
\begin{lstlisting}

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
\end{lstlisting}



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 \emph{UP=J0a1} et \emph{DOWN=J0a1}, car les deux sont sur le même axe. Si l'axe est inversé, alors on pourra mettre le \emph{a} en majuscule, comme je l'ai fait pour gauche et droite : \emph{LEFT=J0A0} et \emph{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 : \lstset{frame=single, language=bash}
\begin{lstlisting}
sudo apt-get install joystick\end{lstlisting}



On l'exécutera par la commande suivante :\lstset{frame=single, language=bash}
\begin{lstlisting}
jstest /dev/input/js0\end{lstlisting}



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 : 
\url{http://sheasilverman.com/rpi/gngeorc}

Le bouton \emph{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 :\lstset{frame=single, language=bash, title=gngeorc}
\begin{lstlisting}

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
\end{lstlisting}



Une page expliquant un peu la configuration de gngeo : 
\url{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 :
\url{http://blog.petrockblock.com/forums/topic/neo-geo-not-working-black-screen-only/}

\subsection{\texorpdfstring{Configuration de Retroarch}{Configuration de Retroarch}}
\label{sec: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 : \lstset{frame=single, language=bash, title=retroarch\_addon.cfg}
\begin{lstlisting}


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"
\end{lstlisting}



\end{document}
