KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: [TUT] PSP Hello World in C
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community,

ich habe mich mal entschieden ein Hello World TuT für die kleinen PSP Devs zu machen Wink
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 Wink
Ihr brauch dazu ein normalen Editor (ich benutze immer Dev-C++) und ein PSP SDK sucht euch bei Google eins aus Wink


Als erstes werden wir die Header-Dateien mit
"#include < ... >"
bestimmen. Was Header sind solltet ihr wissen ansonsten schnell weg Wink

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:

PHP-Code:
#include <pspkernel.h>
#include <pspdebug.h> 


Nun werden wir der PSP etwas über das Programm sagen, dies ist nötig, also bitte nicht vergessen Wink. 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 :

---------------------------------------------------------------------------------------------------

PHP-Code:
/* Exit callback */
int exit_callback(int arg1int arg2void *common) {
sceKernelExitGame();
return 
0;
}

/* Callback thread */
int CallbackThread(SceSize argsvoid *argp) {
int cbid;

cbid sceKernelCreateCallback("Exit Callback"exit_callbackNULL);
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"CallbackThread0x110xFA000);
if(
thid >= 0) {
sceKernelStartThread(thid00);
}

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 Wink
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 Wink

-----------------------------------------------

return 0;

-----------------------------------------------

Nun noch ein } um die Main Funktion zu beenden:

-----------------------------------------------

}


-----------------------------------------------

So nun hab ihr eure main.c fertig jetzt kommen wir zum Makefile Wink

---------------------------------------------------------------------------------------------------

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 :

--------------------------------------------------

Code:
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 Wink


Ganzer Code von der main.c (anzeigen)

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 Wink

Noch was die main.c und das Makefile müssen im selben Ordner liegen Wink

PS: Danke an PSP_Lord er hat mich in 2 kleinen Dingen verbessert Big Grin

Hoffe es hat euch gefallen Big Grin


mfg

stehn
Gutes Tutorial,
Leicht verstendlich,
nur eins ist komisch:
Wieso hast du die ganzen codes nicht auhc in ne Codebox gesteckt ?

mfg

EmInK123 :
Gutes Tutorial,
Leicht verstendlich,
nur eins ist komisch:
Wieso hast du die ganzen codes nicht auhc in ne Codebox gesteckt ?

mfg


Weil ich die immer so mit Farbe mache kenne das halt so Big Grin

stehn :
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

Falsch, was du da postest! Der Compiler nimmt weder printf als pspDebugScreenprintf auf, noch wird hier irgendein Befehl umbenannt! Schonmal was von Präprozessor gelesen? Anscheinend nicht, lern' erstmal die Grundlagen Wink

Oha mach mal halb lang das hab ich so gelernt -.-
Also muss ich mich halt noch mal Informieren und komisch das bei jeden TuT nur negative kommt -.-

Ich habe das nun so gelernt wenn man das macht der Kompiler dann jedes mal bei printf die Funktion pspDebugScreenPrintf nimmt also sorry muss ich halt noch mal im Inet mich schlau machen.

stehn :
Oha mach mal halb lang das hab ich so gelernt -.-
Also muss ich mich halt noch mal Informieren und komisch das bei jeden TuT nur negative kommt -.-

Ich habe das nun so gelernt wenn man das macht der Kompiler dann jedes mal bei printf die Funktion pspDebugScreenPrintf nimmt also sorry muss ich halt noch mal im Inet mich schlau machen.


Da muss ich dir schon irgendwie rechtgeben. Bei jedem TuT was schlechtes.
Aber Danke jetzt weiß ich was de PSP für befehle braucht.

PS: Ich will noch nicht mit der PSP anfangen ich mach erstmal für den PC weiter. War halt nur meine neugier Big Grin

@stehn
Wir wollen dich hier doch nicht fertig machen. Es gibt genug Hello World Tutorials für die PSP im Netz, jetzt hast du auch noch eins gemacht. Gut, jeder erklärt es vielleicht etwas anders, aber im Endeffekt kommt's auf's selbe hinaus.
Sieh's als Kritik, jeder hat mal klein angefangen. Außerdem will ich nicht, dass du was falsches lernst, deswegen hier noch etwas produktives.
http://www.mikrocontroller.net/articles/C-Pr%C3%A4prozessor
Da ist es sehr gut erklärt Wink
Lg
Wo gibt es Tutorials für PSP C?
Also mit diesen Modulen?
Oder gibt es irgendwo eine Beschreibung für die Header Dateien?

@stehn

Werde ich vielleicht mal ausprobieren.
Aber die IDE einzurichten kakt mich gerade an...

BambiMään :
Wo gibt es Tutorials für PSP C?
Also mit diesen Modulen?
Oder gibt es irgendwo eine Beschreibung für die Header Dateien?


http://psp.jim.sh/pspsdk-doc/
Hier haste ne Doku.

PSP-Hilfe :

BambiMään :
Wo gibt es Tutorials für PSP C?
Also mit diesen Modulen?
Oder gibt es irgendwo eine Beschreibung für die Header Dateien?


http://psp.jim.sh/pspsdk-doc/
Hier haste ne Doku.



Das ist auch Normalerweise beim PSP SDK dabei Wink

was bewirkt das "\n" hinter der ausgabe hello world?

gruschi :
was bewirkt das "\n" hinter der ausgabe hello world?


Zeilenumbruch Wink

Referenz-URLs