CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Petite intro à la programmation PSP

yoshiblanc
yoshiblanc
Niveau 2
15 juin 2009 à 21:48:37

Hellow all \o/

Je viens ici pour vous parler de la programmation PSP (si si), vous expliquer comment ça marche et convertir des personnes à ce domaine ;O

Tout d'abord, comment lancer des programmes non officiels et quelques termes. Pour lancer des programmes non officiels, il faut utiliser un firmware non officiel, et pour expliquer tout ça, je me quote moi même :

"Pour ceux qui ne savent pas, un firmware est bien, comme LoliconGame l'a dit, l'OS de la PSP. C'est tout pleins de fichiers situés dans une mémoire flash de la PSP (le flash0). Mais un firmware est aussi l'ensemble des "logiciels" de la PSP (explorateur d'images, navigateur internet, etc).
Un custom firmware est une version modifiée d'un firmware officiel. Il comporte des modules officiels modifiés mes aussi des modules ajoutés qui permettent par exemple le lancement de jeux non officiels."

C'est clair. Pour installer un custom firmware (que j'abrégerai CFW ou CF), chercher sur google (des trucs comme "Tuto installer Custm Firmware", "Custom Firmware ChickHEN" ou "Kit DDC PSP Tuto" devrait suffir, mais renseignez vous avant de passer à l'action, car il y a des blems avec certains modèles de PSP (PSP2k avec Carte mère TA88-v3 et PSPs3000), donc n'hésitez pas à aller sur un site comme PSPGen).

Maintenant, passons aux quelques termes :
-XMB : Menu de la PSP (où vous voyez les trucs comme Musique, Paramètres, Vidéo et autres)
-Flashs : Les flash, au nombre de 4, sont des mémoires de la PSP contenant diverses informations (il y a les flashs0, 1, 2 et 3 donc)
-Flash0 : Flash contenant les fichiers systèmes de la PSP
-Flash1 : Flash contenant les paramètres de la PSP
-Kit DDC : (ou kit Despertar Del Cementiero) Kit composé d'une MS contenant des fichiers modifiés et d'une batterie modifiée elle aussi permettant d'accéder au Service mode et lancer un menu permettant d'effectuer diverses opérations (Mettre sa PSP en CF/OF, dumper son nand, tester un CF, etc).
-OSK : Clavier virtuel de la PSP

Et on en verra quelques autres plus tard ;)

Maintenant, programmer, en quel langage ?
Le langage utiliser sera le C. Attention, je ne ferai pas de cours de C ! (si vous voulez apprendre le C, allez sur le site du zer0 ;])
Il y a un autre langage utilisé sur PSP, le LUA. Ce langage est considéré comme plus simple que le C mais offrant moins de possibilités.
Et pour finir, il y a l'assembleur (pour architectures MIPS), mais on en aura pas besoin.

Aller, un comparatif entre le langage. Tout d'abord pourquoi pas l'assembleur, le plus facile à dire "ne le prenez pas". Tout d'abord, il est TROP compliqué à utiliser, de deux, il offre moins de possibilités par défaut (par de librairies pour aider :O) et trois, est très très peu utilisé, uniquement pour le reverse (consiste à transformer un fichier déjà compilé en code source en ASM (abréviation de assembleur), ou aussi quelques très très rares bouts de code nécessitant absolument de l'ASM.

Le plus dur maintenant, pourquoi le C et pas le LUA ? Oui, le LUA est plus simple que le C mais (bah oui, y'a un mais ;O):
-Il offre moins de possibilités (pas de lectures de vidéo, mais là, c'est pas indispensable, pas possibilités de créer des fichiers systèmes, des plugins, etc), bien qu'il soit possible d'utiliser des librairies dynamiques (prx sur psp, et si vous ne savez pas ce que c'est, so sous Linux et dll sous Windows), mais qui doivent être développées et C et la méthode est très peu utilisée.
-Trop de Lua tue le Lua : et oui, à force que de nombreux nouveaux devs se lancent dans le LUA et non le C, on revoit de nombreuses fois les mêmes homebrews : shells, dumper d'UMDs,etc
-Et quelques autres.

Le C lui :
-Permet un très grand nombre de possibilités, dont celles cités ci-dessus dans celles que le LUA n'a pas
-Est quand même beaucoup moins compliqué que l'ASM (perso, je trouve pas le C spécialement dur)
-A de nombreuses librairies prêtes, contrairement à l'ASm
-Et d'autres.
Si vous voulez quand mêe faire du LUA, y'a de bons tutos sur DevsGen et XtreamLua

Bon, après cette intro pas bien présentée du tout, on va installer le tout, tout d'abord la méthode pour Linux car c'est la plus simple, puis ensuite Windows.

Donc, méthode Linux :
Tout d'abord, vous devez installer des dépendances (il y en a d'autres je crois, si vous avez donc un bug à la compilation du SDK, prévenez moi)(Merci à Yan2Yan de XtreamLua pour la liste) :
build-essential autoconf automake bison flex patch subversion texinfo wget libncurses5-dev libgmp3-dev libmpfr-dev
Maintenant, on a besoin de variables d'environnement, on va donc les ajouter à votre .bashrc, pour cela, dans un terminal, tapez ceci :
$ echo "export PSPDEV=/usr/local/pspdev" >> ~/.bashrc
$ echo "export PATH=$PATH:$PSPDEV/bin" >> ~/.bashrc
$ source ~/.bashrc
Maintenant, on créer un répertoire pour la programmation PSP, par exemple :
$ mkdir ~/ProgPSP
Maintenant, on ajoute aussi les variables au .bashrc du root :
$ su -
[Tapez votre mot de passe]
$ echo "export PSPDEV=/usr/local/pspdev" >> ~/.bashrc
$ echo "export PATH=$PATH:$PSPDEV/bin" >> ~/.bashrc
$ source ~/.bashrc
Puis on repasse en utilisateur normal :
$ logout
Et on va au répertoire précedemment créé :
$ cd ~/ProgPSP
Vous êtes enfin prêt, on va donc télécharger le code source du SDK (Software Development Kit, sert à développer donc ;O) :
$ svn co svn://svn.ps2dev.org/psp/trunk/psptoolchain
Puis, pour finir, le compiler :
$ cd psptoolchain
$ sudo bash (ou $ su)
$ make
Et c'est bon :O
Maintenant, des librairies aditionnelles, car celles du toolchain sont uniquement celles de base. Pour cela, allez ici : http://wiki.albandu51.fr/doku.php?id=tutorial_n_1_installer_pspdev_avec_presque_toute_les_librairies._windows_linux
Et dans la partie "Windows : Etape I: Téléchargement et Installation de PSPDev et des librairies", téléchargez le pack de libs et décompressez le où vous voulez.
Puis en console, en temps que root, copiez le sur le toolchain déjà installé :
$ cd /dossier/où/l'archive/est/dézippée
$ cp -rf psp/* /usr/local/pspdev/*
Maintenant, tout marche, testez juste si la compilation fonctionne :
$ cd
/usr/local/pspdev/psp/sdk/samples/audio/polyphonic

$ make
Vous avez normalement un fichier EBOOT.PBP créé !

Now, méthode Windows :
Allez ici : http://www.playeradvance.org/forum/showthread.php?t=2172
Et téléchargez l'exécutable qui installe le SDK (le deuxième lien après la parenthèse "(temporaire)").
Et lancez-le :O C'est un installateur normal, donc c'est simple à installer. Par contre, vous DEVEZ l'installer à la racine de votre DD !
Une fenêtre s'ouvre, à la fin. Si ceci s'affiche :
http://hothmoon.free.fr/devpsp/devpsp0.png
C'est bon.
Sinon, lancez cygwin.bat (dans le dossier Cygwin à la racine), et tapez :
mkpasswd -l > /etc/passwd
puis :
mkgroup -l > /etc/group
Ensuite, fermez et relancez, vous devriez avoir ce qui s'affiche sur l'image plus haut.
Maintenant, les libs additionnelles : téléchargez le pack de lis mentionné plus haut et dézippez-le à l'endroit où il le faut (ça fait longtemps que j'ai pas touché à un Windows or machine virtuelle, donc, au hasard, si vous avez un dossier pspdev à la racine, copiez le contenu de l'archive dedans, sinon, cherchez un dossier pspdev dans le dossier dans le dossier Cygwin et décompressez dedans.
Voila, c'est installé \o/

Maintenant, vous êtes parés pour la programmation PSP, je ne compte pas faire un gros tuto tout de suite, pour le moment, je me contente d'une intro.
Créez un dossier pour votre projet, votre premier homebrew, qui sera... un magnifique hello world !!!!
Dedans, créez un fichier main.c. Maintenant, détaillons le contenu :
On commence par les fichiers à inclure :
"#include <pspkernel.h>

  1. include <pspdebug.h>"

Ce sont les includes de base pour la PSP.
On continue :
"PSP_MODULE_INFO("Hello World", 0, 0, 1);"
Cette ligne donne des infos sur votre homebrew : "Hello World" : nom du programme, "0" : mode, ici user, il y a 0x1000 pour le mode kernel qui permet d'utiliser les fonctions système de la PSP, si vous ne comprenez pas, rien de grave ;O, "0" : version majeure de votre homebrew, "1" : version mineure de votre homebrew.

"#define printf pspDebugScreenPrintf"
Ceci est une ligne pour les flemmards, car la fonction pour afficher du texte sur PSP est pspDebugScreenPrintf, cela permet donc de pouvoir taper printf à la place.

"/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
int thid = 0;

thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}

return thid;
}"

Ne vous préoccupez pas de ces fonctions, elles servent à empêcher un freeze de la PSP ;O

"int main()
{"
Le classique main :O

"pspDebugScreenInit();
SetupCallbacks();"
La première ligne permet d'initialiser l'écran, la deuxième est une des fonctions vues plus haut.

"printf("HelloWorld");"
Affiche "HelloWorld" à l'écran.

"sceKernelSleepThread();"
Cela met le programme en pause, sinon il continuerai et arriverai de suite à la fin. (Comme le "system("PAUSE")" obligatoire pour l'IDE Dev C++ sous Windows).

"return 0;
}"
Ai-je besoin d'expliquer ?

Et voila, c'est finit :O
Mais il reste un fichier à faire : le terrible Makefile !
Créez donc un fichier nommé Makefile et ouvrez-le avec un éditeur de texte.
Voici son contenu :
"TARGET = HelloWorld"
TARGET est une variable ne devant pas avoir d'epace, contenant le nom du programme.

"OBJS = main.o"
Contient tout les fichiers devant être compilés avec l'extension .o. Si il y a un fichier .c dans un sous répertoire, faites "TARGET = repertoire/fichier.o" et s'il y a plusieurs fichiers : "TARGET = fichier1.o fichier2.o"

"INCDIR ="
INCDIR est une variable contenant des headers qui ne sont pas situés au même endroit que ceux du SDK. Nous n'en avons pas besoin, donc nous laissons vide.

"CFLAGS = -O2 -G0 -Wall -g"
CFLAGS sont des paramètres en plus pour le compilateur C. -O2 sert à optimiser le code, -Wall sert à indiquer tout les warnings à la compiation et les autres, je sais pas :-°

"LIBDIR =" pareil que INCDIR mais pour les libs (fichiers .a)

"LIBS =" Cette variable indique toutes les libs à utiliser. Chaque lib est un fichier .a. Prenez ce fichier .a, s'il commence par lib, remplacez le par l, ajoutez la suite et rajoutez - devant.
Exemples :
libpng ==> lpng ==> -lpng
oslib ==> osl ==> -osl
Ce qui nous donne :
"LIBS = -lpspgum -lpspgu -lz -lm"

"EXTRA_TARGETS = EBOOT.PBP"
Signifie au compilateur qu'on veut un EBOOT.

"PSP_EBOOT_TITLE = Hello World"
Nom du programme tel qu'il apparaitra dans le XMB

"PSPSDK = $(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

PSPLIBSDIR = $(PSPSDK)/.."
Ne vous posez pas de questions là-dessus :O
Voila, c'est tout.

Pour compiler votre programme, allez sous Linux avec un Terminal et sous Windows avec cygwin.bat dans le répertoire de votre projet (pour les Windowsiens, la commande pour se déplacer de répertoires en répertoires est "cd répertoire" pour aller dans répertoire, "cd rep1/rep2" pour aller dans rep2 situé dans rep1 ou encore "cd .." pour aller dans le répertoire parent, c'est à dire par exemple rep1 si on se trouvait dans rep2) puis tapez "make". Si tout se passe bien, vous aurez un EBOOT.PBP.

Pour l'installer sur votre PSP, c'est simple, connectez la en USB, dans /PSP/GAME, créez un dossier, mettez-y votre EBOOT et lancer. Votre premier homebrew s'affiche devant vos yeux ébahis !

Je continuerai peut-être plus ce tuto, mais en attendant, des sites sur la prog psp : DevsGen, XtreamLUA (y'a des tutos en C malgré le nom), PSP-Programming, PlayerAdvance et d'autres ;O

godrik
godrik
Niveau 30
15 juin 2009 à 22:29:32

Salut,
Merci pour cette explication de comment booter du code homebrew sur psp.

Juste un commentaire sur :
"Le C a de nombreuses librairies prêtes, contrairement à l'ASM"
Si tu as une lib pour le C, elle fonctionnera en assembleur. Un appel de fonction en C, ce n'est jamais qu'une initialisation de la pile et une instruction call.

Cela etant dit, je suis convaincu que ca ne sert a rien d'ecrire de l'assembleur pour PSP. Ou au moins, c'est inutile pour un debutant.

Lapintade
Lapintade
Niveau 30
15 juin 2009 à 23:17:15

Merci pour ce petit topo.

J'ai codé un emulateur sur PSP ( PSPVice : http://perso.numericable.ble.fr/ckckck/C64_PSPVice.html ), en utilisant la methode "cygwin" decrite plus haut.
Pour etre honette, c'est un cauchemard à installer pour celui qui ne connait rien. Il manque toujours quelquechose a cygwin, et c'est assez etrange de devoir compiler toutes les libs du SDK.
Mais une fois que tout est installé, c'est assez simple.
Le plus chiant, c'est de debugger sur la PSP, car contrairement a un PC, on ne peut pas tracer pas a pas (donc faut y aller a coup de printf et tout afficher sur l'ecran, enfin c'est comme cela que j'ai fait).

Coder en assembleur sur PSP cela ne sert a rien en effet, saut pour le copro vectoriel qui se programme uniquement en assembleur. ( http://mrmrice.fx-world.org/vfpu.html )
Ca fait bien longtemps que les compilos C/C++ sont bien optimisé et rende l'écriture directe en assembleur obsolète.

yoshiblanc
yoshiblanc
Niveau 2
16 juin 2009 à 08:27:38

godrik ==> Merci pour l'info car je ne connaissait pas (j'ai jamais fait vraiment d'assembleur, juste lu 2 ou 3 trucs, mais j'ai reçu chez moi récemment le livre "Assembleur x86").

lapintade ==> Oui, je sais, je suis passé par là aussi au début. Avec l'install qui prend des plombes, et finalement, faut réinstaller, avec les erreurs à la compilation. Mais l'exécutable de PlayerAdvance marche très bien pour moi. (Y'a pas que sur PSP que c'est galère, DS aussi, et en plus la PAlib a(vait ?) certaines incompatibilités avec le DevkitARM étout.
Barf, les printf, ça marche :-° (PSPLink fait le debug ou pas ?)
Ah ui, un émulateur ça marche comment ? Ca émule le CPU ?

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment