Accueil > Linux, Programmation > Développer sur PSP en 2020

Développer sur PSP en 2020

30/03/2020 447 Vues Commenter Allez aux commentaires

En 2004, Sony commercialisait la PSP, une console de jeu portable qui, pour un tarif d'environ 200€, possédait des capacités de traitements ( graphiques notamment ) bien supérieures à celles de la concurrence.

Aujourd'hui, il est possible de s'en offrir une d'occasion en déboursant moins de 50€. J'ai donc décidé de m'y intéresser, non pas en temps que console de jeu, mais comme plateforme de développement.

Les sécurités de la console ayant été contournée assez rapidement, la scène du développement amateur a produit de nombreux Homebrew, ainsi que les outils permettant de développer sur la console sans acheter le ( très onéreux ) SDK officiel.

Cet article a pour vocation de résumer mon parcours quant à l'installation logicielle nécessaire.

Installation de l'émulateur PPSPP

La première étape consiste à se doter d'un émulateur capable d'exécuter du code PSP, permettant de valider le fonctionnement du code compilé.

Pour cela j'ai choisi PPSPP, donc le code source est disponible sur github. Les instructions de compilation sous Linux sont décrites ici.

Récupérer une copie du code source et de ses sous-modules

git clone https://github.com/hrydgard/ppsspp.git
git submodule update --init --recursive

Plusieurs front-end sont disponibles, j'ai choisi d'utiliser celui basé sur Qt, principalement pour ma familiarité avec ce framework. Installer les paquets nécessaires :

apt install qt5-qmake qtmultimedia5-dev qttools5-dev-tools qtmultimedia5-dev libqt5opengl5-dev

Lancer la compilation :

cd ppspp
./.sh --qt

Une fois la compilation terminée, l’exécutable se trouve dans le dossier build

Installation de la toolchain

Les scripts permettant l'installation de la toolchain se situent sur le dépot git ici : https://github.com/pspdev/psptoolchain

Les récupérer avec la commande suivante :

git clone https://github.com/pspdev/psptoolchain.git

Se placer dans le dossier ainsi créé :

cd psptoolchain

Exécuter ensuite le premier script, qui se charge de l'installation des dépendances pour Debian et ses dérivés ( 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'installation de la toolchain sans erreurs.

./prepare-debian-ubuntu.sh

Ensuite, exécuter le script d'installation à proprement parler. Celui ci nécessite les droits super utilisateurs, d'où sont appel avec la commande sudo

sudo ./toolchain-sudo.sh

L'installation se déroule ensuite normalement. Sur ma machine, plutôt véloce, celle-ci a duré une bonne demi-heure.

Isolement de la toolchain

L'installation va déposer les fichiers nécessaires dans le répertoire /usr/local/pspdev, et automatiquement modifier les variables d'environnement pour permettre l'appel des bons exécutables lors de la compilation, en modifiant notamment la variable d'environnement PATH. Ce système ne me plaisant guère ( pour des raisons décrites dans l'article précédent ), je vais déplacer l'ensemble de la toolchain dans un dossier séparer, empêcher la modification du PATH, et ajouter un petit script permettant le fonctionnement de la toolchain seulement dans le terminal où il sera appelé.

Déplacer la toolchain dans mon home, et en devenir propriétaire :

sudo mv /usr/local/pspdev ~/

sudo chown -R MON_NOM_DUTILISATEUR ~/pspdev/

Empêcher la modification automatique du PATH au démarrage :

sudo rm /etc/profile.d/psptoolchain.sh

Créer le script permettant de configurer un terminal capable d'utiliser la toolchain :

nano ~/pspdev/setupPspEnv.sh

Y insérer le contenu suivant :

#!/bin/bash
bash --rcfile <(cat ~/.bashrc; echo 'PS1="\e[33;1mpspdev \$\e[0m "' ; echo 'export PATH="#/pspdev/bin:$PATH"' ; echo 'export PSPDEV="~/pspdev/"')

Il suffit ensuite d’exécuter ce fichier pour mettre un place, uniquement dans le terminal actif, les variables d'environnement nécessaires au fonctionnement de la toolchain.

Compilation des examples

La toolchain contient PSPSDK. Il s'agit d'un SDK amateur qui fournissant toutes les fonctions nécessaires aux développement d'une application sur PSP. De nombreux exemples sont disponibles dans le dossier pdpdev/psp/sdk/samples.

Malheureusement, beaucoup ne compilent pas correctement. La commande make produit bien un exécutable EBOOT.PBP lisible par ppspp, mais ceux-ci provoquent souvant le crash de l'émulateur, sans plus d'information qu'un laconique "segmentation fault".

Il s'avère que la LIBC utilisée normalement par le compilateur GCC ne produit pas du code valide en ce qui concerne le traitement des nombres flottant. Il suffit d'ajouter une ligne au Makefile de chaque example ( et plus tard aux Makefile de nos propres projets ) :

...
PSP_EBOOT_TITLE = Reflection Sample
USE_PSPSDK_LIBC = 1
PSPSDK=$(shell psp-config --pspsdk-path
...

Cette ligne spécifie au compilateur d'utiliser la LIBC fournie avec PSPSDK, et non celle fournie avec GCC.

j'ai finalement pu compiler les exemples ( notamment ceux liés à l'unité graphique (GU) de la console, afin de ma familiariser avec sa programmation, comme l'atteste le screenshot suivant :

L'exemple CUBE du PSPSDK

Cet article n'est que le premier pas d'un projet centré autour d'une PSP, qui fera l'objet d'un futur article. En attendant, j'espère que celui-ci vous épargnera les nombreux tâtonnements qui m'ont été nécessaires pour en arriver là !

Categories: Linux, Programmation Tags: ,
  1. Pas encore de commentaire
  1. Pas encore de trackbacks