{"id":1388,"date":"2020-03-30T01:54:52","date_gmt":"2020-03-29T23:54:52","guid":{"rendered":"http:\/\/pila.fr\/wordpress\/?p=1388"},"modified":"2020-03-30T10:25:32","modified_gmt":"2020-03-30T08:25:32","slug":"developper-sur-psp-en-2020","status":"publish","type":"post","link":"https:\/\/pila.fr\/wordpress\/archives\/1388","title":{"rendered":"D\u00e9velopper sur PSP en 2020"},"content":{"rendered":"\n<p>En 2004, Sony commercialisait la PSP, une console de jeu portable qui, pour un tarif d&rsquo;environ 200\u20ac, poss\u00e9dait des capacit\u00e9s de traitements ( graphiques notamment ) bien sup\u00e9rieures \u00e0 celles de la concurrence.<\/p>\n\n\n\n<p>Aujourd&rsquo;hui, il est possible de s&rsquo;en offrir une d&rsquo;occasion en d\u00e9boursant moins de 50\u20ac. J&rsquo;ai donc d\u00e9cid\u00e9 de m&rsquo;y int\u00e9resser, non pas en temps que console de jeu, mais comme plateforme de d\u00e9veloppement.<\/p>\n\n\n\n<p>Les s\u00e9curit\u00e9s de la console ayant \u00e9t\u00e9 contourn\u00e9e assez rapidement, la sc\u00e8ne du d\u00e9veloppement amateur a produit de nombreux Homebrew, ainsi que les outils permettant de d\u00e9velopper sur la console sans acheter le ( tr\u00e8s on\u00e9reux ) SDK officiel.<\/p>\n\n\n\n<p>Cet article a pour vocation de r\u00e9sumer mon parcours quant \u00e0 l&rsquo;installation logicielle n\u00e9cessaire.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">Installation de l&rsquo;\u00e9mulateur PPSPP<\/h3>\n\n\n\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 se doter d&rsquo;un \u00e9mulateur capable d&rsquo;ex\u00e9cuter du code PSP, permettant de valider le fonctionnement du code compil\u00e9.<\/p>\n\n\n\n<p>Pour cela j&rsquo;ai choisi PPSPP, donc le code source est disponible sur <a href=\"https:\/\/github.com\/hrydgard\/ppsspp\">github<\/a>. Les instructions de compilation sous Linux sont d\u00e9crites <a href=\"https:\/\/github.com\/hrydgard\/ppsspp\/wiki\/Build-instructions\">ici.<\/a><\/p>\n\n\n\n<p>R\u00e9cup\u00e9rer une copie du code source et de ses sous-modules <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">git clone https:\/\/github.com\/hrydgard\/ppsspp.git<br>git submodule update --init --recursive<\/pre>\n\n\n\n<p>Plusieurs front-end sont disponibles, j&rsquo;ai choisi d&rsquo;utiliser celui bas\u00e9 sur Qt, principalement pour ma familiarit\u00e9 avec ce framework. Installer les paquets n\u00e9cessaires  : <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">apt install qt5-qmake qtmultimedia5-dev qttools5-dev-tools qtmultimedia5-dev libqt5opengl5-dev<\/pre>\n\n\n\n<p>Lancer la compilation :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd ppspp<br>.\/.sh --qt<\/pre>\n\n\n\n<p>Une fois la compilation termin\u00e9e, l\u2019ex\u00e9cutable se trouve dans le dossier build<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installation de la toolchain<\/h3>\n\n\n\n<p>Les scripts permettant l&rsquo;installation de la toolchain se situent sur le d\u00e9pot git ici : <a href=\"https:\/\/github.com\/pspdev\/psptoolchain\">https:\/\/github.com\/pspdev\/psptoolchain<\/a><\/p>\n\n\n\n<p>Les r\u00e9cup\u00e9rer avec la commande suivante  :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">git clone https:\/\/github.com\/pspdev\/psptoolchain.git<\/pre>\n\n\n\n<p style=\"text-align:left\">Se placer dans le dossier ainsi cr\u00e9\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd psptoolchain<\/pre>\n\n\n\n<p>Ex\u00e9cuter ensuite le premier script, qui se charge de l&rsquo;installation des d\u00e9pendances pour Debian et ses d\u00e9riv\u00e9s ( Ubuntu et Linux Mint notamment ). Ce script va notamment remplacer le lien symbolique \/bin\/sh pointant vers le logiciel DASH, par un nouveau lien symbolique pointant vers BASH, DASH ne permettant pas de mener l&rsquo;installation de la toolchain sans erreurs.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/prepare-debian-ubuntu.sh<\/pre>\n\n\n\n<p>Ensuite, ex\u00e9cuter le script d&rsquo;installation \u00e0 proprement parler. Celui ci n\u00e9cessite les droits super utilisateurs, d&rsquo;o\u00f9 sont appel avec la commande sudo <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo .\/toolchain-sudo.sh<\/pre>\n\n\n\n<p>L&rsquo;installation se d\u00e9roule ensuite normalement. Sur ma machine, plut\u00f4t v\u00e9loce, celle-ci a dur\u00e9 une bonne demi-heure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Isolement de la toolchain<br><\/h3>\n\n\n\n<p>L&rsquo;installation va d\u00e9poser les fichiers n\u00e9cessaires dans le r\u00e9pertoire \/usr\/local\/pspdev, et automatiquement modifier les variables d&rsquo;environnement pour permettre l&rsquo;appel des bons ex\u00e9cutables lors de la compilation, en modifiant notamment la variable d&rsquo;environnement PATH. Ce syst\u00e8me ne me plaisant gu\u00e8re ( pour des raisons d\u00e9crites dans <a href=\"http:\/\/pila.fr\/wordpress\/?p=1376\">l&rsquo;article pr\u00e9c\u00e9dent<\/a> ), je vais d\u00e9placer l&rsquo;ensemble de la toolchain dans un dossier s\u00e9parer, emp\u00eacher la modification du PATH, et ajouter un petit script permettant le fonctionnement de la toolchain seulement dans le terminal o\u00f9 il sera appel\u00e9.<\/p>\n\n\n\n<p>D\u00e9placer la toolchain dans mon home, et en devenir propri\u00e9taire :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mv \/usr\/local\/pspdev ~\/<br><br>sudo chown -R MON_NOM_DUTILISATEUR ~\/pspdev\/<\/pre>\n\n\n\n<p>Emp\u00eacher la modification automatique du PATH au d\u00e9marrage  : <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo rm \/etc\/profile.d\/psptoolchain.sh<br><\/pre>\n\n\n\n<p>Cr\u00e9er le script permettant de configurer un terminal capable d&rsquo;utiliser la toolchain :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano ~\/pspdev\/setupPspEnv.sh<\/pre>\n\n\n\n<p>Y ins\u00e9rer le contenu suivant :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash<br>bash --rcfile &lt;(cat ~\/.bashrc; echo 'PS1=\"\\e[33;1mpspdev \\$\\e[0m \"' ; echo 'export PATH=\"#\/pspdev\/bin:$PATH\"' ; echo 'export PSPDEV=\"~\/pspdev\/\"')<\/pre>\n\n\n\n<p>Il suffit ensuite d\u2019ex\u00e9cuter ce fichier pour mettre un place, uniquement dans le terminal actif, les variables d&rsquo;environnement n\u00e9cessaires au fonctionnement de la toolchain.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compilation des examples<\/h3>\n\n\n\n<p>La toolchain contient PSPSDK. Il s&rsquo;agit d&rsquo;un SDK amateur qui fournissant toutes les fonctions n\u00e9cessaires aux d\u00e9veloppement d&rsquo;une application sur PSP. De nombreux exemples sont disponibles dans le dossier pdpdev\/psp\/sdk\/samples.<\/p>\n\n\n\n<p>Malheureusement, beaucoup ne compilent pas correctement. La commande make produit bien un ex\u00e9cutable EBOOT.PBP lisible par ppspp, mais ceux-ci provoquent souvant le crash de l&rsquo;\u00e9mulateur, sans plus d&rsquo;information qu&rsquo;un laconique \u00ab\u00a0segmentation fault\u00a0\u00bb.<\/p>\n\n\n\n<p>Il s&rsquo;av\u00e8re que la LIBC utilis\u00e9e normalement par le compilateur GCC ne produit pas du code valide en ce qui concerne le traitement des nombres flottant. Il suffit d&rsquo;ajouter une ligne au Makefile de chaque example ( et plus tard aux Makefile de nos propres projets ) : <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">...<br>PSP_EBOOT_TITLE = Reflection Sample<br><strong>USE_PSPSDK_LIBC = 1<\/strong><br>PSPSDK=$(shell psp-config --pspsdk-path<br>...<\/pre>\n\n\n\n<p>Cette ligne sp\u00e9cifie au compilateur d&rsquo;utiliser la LIBC fournie avec PSPSDK, et non celle fournie avec GCC.<\/p>\n\n\n\n<p>j&rsquo;ai finalement pu compiler les exemples ( notamment ceux li\u00e9s \u00e0 l&rsquo;unit\u00e9 graphique (GU) de la console, afin de ma familiariser avec sa programmation, comme l&rsquo;atteste le screenshot suivant :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"544\" src=\"http:\/\/pila.fr\/wordpress\/wp-content\/uploads\/EBOO00649_00001.jpg\" alt=\"\" class=\"wp-image-1392\" srcset=\"https:\/\/pila.fr\/wordpress\/wp-content\/uploads\/EBOO00649_00001.jpg 960w, https:\/\/pila.fr\/wordpress\/wp-content\/uploads\/EBOO00649_00001-300x170.jpg 300w, https:\/\/pila.fr\/wordpress\/wp-content\/uploads\/EBOO00649_00001-768x435.jpg 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><figcaption>L&rsquo;exemple CUBE du PSPSDK<\/figcaption><\/figure>\n\n\n\n<p>Cet article n&rsquo;est que le premier pas d&rsquo;un projet centr\u00e9 autour d&rsquo;une PSP, qui fera l&rsquo;objet d&rsquo;un futur article. En attendant, j&rsquo;esp\u00e8re que celui-ci vous \u00e9pargnera les nombreux t\u00e2tonnements qui m&rsquo;ont \u00e9t\u00e9 n\u00e9cessaires pour en arriver l\u00e0 !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En 2004, Sony commercialisait la PSP, une console de jeu portable qui, pour un tarif d&rsquo;environ 200\u20ac, poss\u00e9dait des capacit\u00e9s de traitements ( graphiques notamment ) bien sup\u00e9rieures \u00e0 celles de la concurrence. Aujourd&rsquo;hui, il est possible de s&rsquo;en offrir une d&rsquo;occasion en d\u00e9boursant moins de 50\u20ac. J&rsquo;ai donc d\u00e9cid\u00e9 de m&rsquo;y int\u00e9resser, non pas &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/pila.fr\/wordpress\/archives\/1388\">Lire la suite<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69,8],"tags":[164,163],"class_list":["post-1388","post","type-post","status-publish","format-standard","hentry","category-linux-2","category-prog","tag-homebrew","tag-psp","item-wrap"],"_links":{"self":[{"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/posts\/1388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/comments?post=1388"}],"version-history":[{"count":6,"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/posts\/1388\/revisions"}],"predecessor-version":[{"id":1396,"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/posts\/1388\/revisions\/1396"}],"wp:attachment":[{"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/media?parent=1388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/categories?post=1388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pila.fr\/wordpress\/wp-json\/wp\/v2\/tags?post=1388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}