ich habe mich mal entschieden ein Hello World TuT für die kleinen PSP Devs zu machen
Hab es versuch so Anfänger freundlich wie möglich zu machen aber ihr solltet eine Gewisse C/C++ Kenntnis haben wenn ihr mit der PSP anfangen wollt
Ihr brauch dazu ein normalen Editor (ich benutze immer Dev-C++) und ein PSP SDK sucht euch bei Google eins aus
Als erstes werden wir die Header-Dateien mit
"#include < ... >"
bestimmen. Was Header sind solltet ihr wissen ansonsten schnell weg
So wir werden 2 Header-Dateien verwenden:
Die erste ist "pspkernel.h" diese enthält alle spezifischen Codes der PSP, ohne sie würde unser Programm nicht gehen.
Die nächste Header-Datei ist "pspdebug.h" sie enthält nützliche Funktionen zur Fehlerbeseitigung.
Also fügen wir nun folgendes ein:
#include <pspkernel.h>
#include <pspdebug.h>
Nun werden wir der PSP etwas über das Programm sagen, dies ist nötig, also bitte nicht vergessen . Das was in den Anführungsstrichen steht " ... " ist der Name (aber nicht der, der im XMB angezeit wird).
So fügt nun das ein :
PSP_MODULE_INFO("Hello World", 0,1,1);
So da der Befehl bei der PSP für die Textausgabe "pspDebugScreenPrintf" heißt aber wir das nicht immer schreiben wollen werde wir den Befehl umbenennen in printf (wie man es ja schon vom C für den PC gewöhnt ist).
Der Compiler nimmt also printf als pspDebugScreenprintf auf.
Also definieren wir "printf" durch "pspDebugScreenPrintf" so:
#define printf pspDebugScreenPrintf
Nun der folgende Code ist um einiges Komplizierter aber ihr müsst ihn auch nicht verstehen dennoch werde ich euch ein bisschen erklären.
Dieser Code enthält Funktionen, die in unserem Programm aufgerufen werden. Durch den Code können wir die PSP-Software über die Home-Taste verlassen. Schreibt nun das in eure main.c :
---------------------------------------------------------------------------------------------------
/* 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;
}
---------------------------------------------------------------------------------------------------
So das sollte jeder wissen:
------------------------------
int main() {
------------------------------
So nun werden wir zwei Funktionen mit dazu nehmen und zwar
pspDebugScreenInit() erlaubt uns etwas auf dem Bildschirm auszugeben .
und
SetupCallbacks() erlaubt uns mit der Home-Taste zurück ins XMB zu kommen (ein Callback).
Also schreibt nun das in eure main.c :
----------------------------------------
pspDebugScreenInit();
SetupCallbacks();
----------------------------------------
Erinnert ihr euch noch daran das wir ganz oben pspDebugScreenPrintf in printf umbenannt haben, deswegen können wir nun einfach printf für die Textausgabe verwenden
Der Text der in Anführungsstrichen (" .... ") steht, ist der Text der auf dem PSP Bildschirm ausgegeben wird.
Also übernehmt das in eure main.c :
----------------------------------------------
printf("Hello World\n");
-----------------------------------------------
So nun versetzten wird das Programm noch in einen Pause Modus, weil ohne die Funktion würde das Hello World noch nicht mal 1 sek angezeigt werden und das wollen wir ja nicht.
Also benutzen wir dazu:
----------------------------------------------
sceKernelSleepThread();
Übernehmt das auch in eure main.c
----------------------------------------------
Sollte man verstehen
-----------------------------------------------
return 0;
-----------------------------------------------
Nun noch ein } um die Main Funktion zu beenden:
-----------------------------------------------
}
-----------------------------------------------
So nun hab ihr eure main.c fertig jetzt kommen wir zum Makefile
---------------------------------------------------------------------------------------------------
So nun das Makefile, dass macht nicht anderes als dem Compiler zu sagen wie wir die main.c Kompiliert haben wollen und sagt auch das der Compiler die main.c in ein EBOOT.PBP machen soll :
--------------------------------------------------
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
--------------------------------------------------
( PSP_EBOOT_TITLE = Hello World ) sagt dem Compiler wie der EBOOT.PBP ( im XMB der PSP ) heißen soll.
So das wars jetzt müsst ihr das alles nur noch mit dem PSPSDK Kompilieren und fertig ist euer erstes PSP Programm.
Ich wünsch euch noch viel Spaß bei rum probieren
Diese Datei muss main.c heißen
#include <pspkernel.h>
#include <pspdebug.h>
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\n");
sceKernelSleepThread();
return 0;
}
Das Makefile darf keine Endung haben also darf nicht .txt oder haben.
Macht einfach beim Texteditor Speicher unter den Dateityp auf "Alle Dateien" Und nennt es: Makefile. so habt ihr ein Makefile ohne Datei Endung
Noch was die main.c und das Makefile müssen im selben Ordner liegen
PS: Danke an PSP_Lord er hat mich in 2 kleinen Dingen verbessert
Hoffe es hat euch gefallen
mfg
stehn