Voila le tuto tant attendu de vous tous a savoir comment programmer sur PSP.Avant j'etais comme vous,j'etais curieux de voir comment des programmeurs arrivaient a faire des homebrews.J'ai donc voulu apprendre a programmer sur PSP et j'ai été décu de voir qu'il n'y a pas beaucoup de sites faisant référence a la programmation sur PSP.Je me suis donc decidé a faire ce tuto pour vous peut etre le seul et unique en francais. Une chose importante tout de meme.La programmation sur psp peut se faire en C/C++.Attention! je ne vais pas vous apprendre a programmer en C mais la demarche a suivre pour mettre vos propres programmes sur votre PSP et quelques fonctions spécifiques.Si vous voulez apprendre le C/C++ (et ce serai un bon début) allez jeter un oeil sur
le site du zéro.Ce site est tres bien fait et vous connaitrez le C en peu de temps.Voila pour la pub.
Ce qu'il vous faut : - cygwin
- psptoolchain
- beaucoup de patience (environ 3-4 heures suivant le PC)
- des connaissances en C
Ce qui va paraitre par la suite peut sembler etre complique mais je vais y aller pas a pas et si vous suivez toutes les demarches ca devrait aller.
Allez! maintenant on y va PARTIE 1 : configuration et installation
Commencez d'abord par télécharger cygwin.ce logiciel est un émulateur Linux pour windows.Il cree un environnement linux simulé sur votre Windows comme si vous etiez dans un vrai systeme Unix.
Lancez
setup.exe cliquez a chaque fois sur
suivant jusqu'a avoir une liste de serveurs.

Choisissez un serveur.Il est preferable de choisir un serveur francais pour que le telechargement se fasse plus vite.Moi j'ai choisi le serveur
ftp://mirror.cist.fr comme vous pouvez le voir sur l'image.Ensuite cliquez sur suivant.Ensuite vous devez choisir les paquetages que vous voulez installer.Je vous conseille de tous les prendre.Cliquez donc sur le rond avec les fleches a cote de
All.Attendez une ou deux secondes et vous devriez voir apparaitre
install sur tout les paquetages.

Cliquez ensuite sur
suivant et l'installation commence.Allez regarder la télé en attendant car ca prend du temps (1H chez moi avec ADSL). Si vous avez un routeur ADSL je vous conseille vivement de vous connecter avec un cable ethernet pour aller plus vite.
Une fois le téléchargement terminé ouvrez le fichier
cygwin.bat (C:/cygwin/cygwin.bat).Attendez quelques secondes et vous devriez voir apparaitre une fenetre noire (shell) dans laquelle est ecrit
VotreNom@NomOrdinateur ~ $ 
Vous pouvez maintenant refermer la fenetre.Votre environnement a ete configuré avec succes.
Maintenant il faut télécharger
psptoolchain.Ce logiciel est le plus important.C'est la clé pour programmer sur PSP il configure tout ce dont nous avons besoin depuis les fichier .h jusqu'aux librairies.Il configure egalement le compilateur pour générer à la fin le fameux
EBOOT.PBP lisible que sur la PSP.Telecharger-le
ici.Surtout ne le decompressez pas encore!Nous allons le faire via la console Linux tout à l'heure.Copiez donc
psptoolchain.tar dans C:/cigwin/Home/VotreNom/ ensuite ouvrez le shell (C:/cigwin/cigwin.bat).
Tapez
ls dans le shell.Cette commande permet d'avoir le contenu du repertoire courant (comme dir sur DOS).Vous avez donc une liste de fichier dont
psptoolchain.tar.Tapez
tar xvzf psptoolchain.tar (c'est pour le decompresser).

Une fois termine vous voyez desormais le prompt (le $) faites
cd psptoolchain pour entrer dans le repertoire cree.Puis
./toolchain.sh (si c'est ecrit permission denied faites
chmod a+r toolchain mais normalement on n'a pas a le faire).

Maintenant il va falloir etre patient voir tres patient puisque la compilation peut durer plusieurs heures (chez moi 2).Donc soyez patient. Apres vous serez satisfait du résultat, je vous le promet.
Ouf! c'est terminé.Une derniere petite chose et la partie 1 sera finie un peu de patience.
Ouvrez un editeur de texte (n'importe lequel wordpad par exemple).Faites Fichier->Ouvrir et allez cherchez cygwin.bat (C:/cigwin/cigwin.bat).Voila le contenu du fichier :
@echo off
C:
chdir C:\cygwin\bin
bash --login -i
Ajoutez les lignes suivantes :
@echo off
C:
chdir C:\cygwin\bin
set path=%path%;C:/cygwin/usr/local/pspdev/bin
set PSPSDK=C:/cygwin/usr/local/pspdev
bash --login -i
Faites Enregistrer.Sans cette modification CYGWIN n'aurai pas pu trouver PSPSDK cree par toolchain.C'est-a-dire que vous n'auriez pas pu compiler votre programme dans un futur proche.
Voila, la partie 1 est maintenant terminée.Dans la seconde partie vous allez creer votre premier programme et le visualiser sur votre PSP. Que du bonheur.
PARTIE 2 : Votre premier programme (Hello world!) Nous voila enfin à la partie la plus interessante puisque nous allons créer notre premier programme, le fameux
Hello world!.Une fois compilé Ce programme va permettre d'afficher à l'écran de votre PSP "
Hello world".Je vous apprendrez aussi dans cette partie a utiliser le logiciel
PBPUnpacker permettant entre autre d'inserer un icone et une jolie image sur votre PSP avant que vous demarrez le jeux.
Avant de commencer nous allons créer un dossier
Projets dans votre environnement de developpement dans lequel il y aura tout vos programmes.
Ouvrez
cygwin.bat et tapez
mkdir Projet .mkdir est une commande Unix permettant de créer un repertoire.Maintenant votre nouveau repertoire est crée nous pourrons desormais travailler dedans.
Nous allons maintenant écrire le code du programme dans un éditeur de texte.Vous pouvez utiliser celui que vous voulez.Personnellement j'utilise notepad++ (vous pouvez le telecharger
ici).
Creez donc un nouveau fichier nommé
main.c On va commencez le code en écrivant des commentaires.Les commentaire sont facultatifs, mais je vous conseille de les utiliser afin de mieux comprendre le code si vous devez le relire plus tard.dans un commentaire vous y marquez ce que vous voulez.Pour commenter un ligne il faut utiliser le double slash "
//" et pour commenter plusieurs lignes il faut utiliser "
/* votre commentaire ici sur plusieurs lignes */".
Vous pouvez donc commencer a écrire le code suivant dans votre fichier
main.c //Hello world
/*
Ce programme à été crée par Toto le 21/03/06
Affichage de la chaine "hello world!"
/*
Maintenant nous devons inclure des fichiers d'en-tete.Ce sont des fichies .h qui permettent au compilateur de copier le code dans le fichier.Ainsi quand le compilateur voit une ligne du genre
#include <stdio.h> il remplacera
stdio.h par le code contenu dans ce fichier.Enfin ca, vous devez deja le savoir si vous connaissez le C.Bon passons.
Nous auronss donc besoin de deux librairies
pspkernel.h et
pspdebug.A quoi servent-ils?
pspkernel,comme vous pouvez le devinez inclu le code du noyau de votre PSP.C'est une librairie qu'il faudra utiliser a chaque fois que vous creez un programme.Elle permet d'utiliser des fonctions specifiques de votre PSP.
pspdebug contient des fonctions permettant de debugger votre programme en cas d'erreur de compilation.Un debogeur permet de mieux cerner une erreur lorsque le compilateur en declare une.Il vaut mieux aussi utiliser cette librairie dans tout vos programmes.
Donc ajoutez ces lignes a votre code:
#include<pspkernel.h>
#include<pspdebug.h>
Ensuite il faut ajouter une ligne supplementaires:
PSP_MODULE_INFO ("Hello world",0,1,1);
Je vous le dis tout de suite, cette fonction n'est pas obligatoire.Il n'y aura pas d'erreur de compilation si vous ne la mettez pas.C'est juste pour faire "classe".Le premier argument de la fonction est le titre du programme, ce ne sera pas le titre qui sera affiché sur votre PSP.Nous verrons ca plus tard.Les trois autres paramètres sont un peu compliqué a voux expliquer pour le moment, mais faites moi mettez ceux-la.
Nous allons maintenant utliser une fonction tres importante dans tout langage de programmation, a savoir la fonction
printf.Vous la connaissez tous, cette fonction permet d'afficher du texte à l'écran.C'est drole, c'est justement le but de notre programme.
Il faut savoir que sur psp la fonction
printf est remplacé par
pspDebugScreenPrintf (ouf!!).Imaginez un peu.Ecrire ca a chaque fois.Moi personnellement je ne peux pas (eh oui! je suis un feneant).Je vais donc utiliser un
#define.Ajoutez ceci a votre code:
#define printf pspDebugScreenPrintf
Maintenant, a chaque fois que le compilateur verra le mot
printf, il sera automatiquement remplace par
pspDebugScreenPrintf.
Bon,autant vous le dire tout de suite, j'ai une bonne et un mauvaise nouvelle.Je commence par quoi?la mauvaise?OK allons-y.la mauvaise est qu'il va y avoir beaucoup de code compliqué à ecrire.La bonne nouvelle est qu'il y a pas besoin de chercher a comprendre.C'est du code qu'il faut ecrire dans tout vos programmes.Il est primordial!!.Le voici:
/* 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;
}
Nous allons maintenant définir la fonction principale.La fonction
main que vous connaissez tous.
int main() {
Nous allons rajouter deux nouvelles fonctions
pspDebugScreenInit(); qui sert a initialiser l'ecran de votre psp et
SetupCallbacks(); Ces deux fonctions sont aussi a mettre dans tout vos programmes PSP.
int main()
{
pspDebugScreenInit();
SetupCallbacks();
On peux maintenant ajouter le fonction qui nous interesse:
printf("Hello World!");
Ajoutons aussi cette fonction:
scrKernelSleepThread();
Si vous ne déclarez pas cette fonction la PSP affichera "
Hello World!" puis s'arretera aussitot.Cette fonction met en "pause" votre PSP.
main doit retourner un entier donc on ajoute:
return 0;
}
Et voila le code est fini (enfin!).Toutes ces lignes pour juste deux mots qui seront affiché a l'écran.En fait la seul chose qui nous interesse dans le code c'est
prinf("Hello World!") le reste n'est que du "copier-coller" à ajouter dans tout vos programmes quelqu'ils soient.
Voici le code en entier:
//Hello world
/*
Ce programme à été crée par Toto le 21/03/06
Affichage de la chaine "hello world!"
/*
#include
#include
PSP_MODULE_INFO ("Hello world",0,1,1);
#define printf pspDebugScreenPrintf
/* 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;
}
int main()
{
pspDebugScreenInit();
SetupCallbacks();
printf("Hello World!");
scrKernelSleepThread();
return 0;
}
enregistrer ce fichier
main.c dans
C:\cygwin\home\VotreNom\projet\ Maintenant, il nous faut générer un Makefile.Un Makefile est un fichier qui va demander au compilateur comment compiler notre programme.
Il faut creer un nouveau fichier texte nommé
Makefile sans extension (ex: .txt).Le nom du fichier est juste
Makefile point.
inserez-y le code suivant:
TARGET = hello
OBJS = main.o
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Hello World
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Sauvegarder ce fichier au meme endroit ou se trouve voter fichier
main.c , dans
C:\cigwin\home\VotreNom\projet\ Le dossier
projet contient donc deux fichiers
main.c et
Makefile.
Nous allons maintenant compiler notre programme.Normalement si vous n'avez pas fait d'erreurs un fichier
EBOOT.PBP sera crée, et la vous aurez gagné.
Ouvrez le shell (C:\cigwin\cigwin.bat)
Entrez dans votre dossier projet en tapant
"cd projet" et compilez votre programme en tapant
"make".Si tout c'est bien passé vous devriez avoir un fichier
EBOOT.PBP.faites
"ls" pour verifier.
Ce n'est pas encore tout a fait terminé, il faut maintenant copier ce fichier sur votre PSP en utilisant le logiciel
PBPUnpacker.Il y a un tutorial
ici pour savoir comment l'utiliser.
Voila, la partie2 est terminee.J'imagine la joie (ou la deception si ca marche pas) de voir votre programme tourner sur votre petite console.Vous ne pensiez pas pouvoir le faire hein?Bon je l'avoue c'est assez restreint pour le moment.C'est vrai que afficher une phrase a l'ecran n'est pas ce qu'il y a de mieux, mais c'est un debut.Il faut bien débuter non?
La partie3 sera plus interessante puisque vous allez creer un jeux.eh oui vous m'avez bien compris, un JEU!!(en mode texte bien sur pour le moment). Et en plus vous allez pouvoir utiliser le joystick.C'est pas génial ca?