[PSP] Tutorial 1 :: Hello World!

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [PSP] Tutorial 1 :: Hello World!

      In diesem Tutorial will ich euch zeigen wie man eine einfache Text Ausgabe auf der PSP hinbekommt.
      Aber zuerst etwas Allgemeines =P

      Man kann selbst geschriebene HomeBrews ( so nennt man Programme, Marke EIgenbau, auf der PSP )
      nicht einfach so ausführen. Man muss die PSP flashen. Das heißt sie auf Version 1.5 Downgraden und
      dann eine CFW ( CostumFrimeWare ) aufspielen. Die Offizielle FrimeWare unterstüzt kein HomeBrews
      und Cracked Spiele ( welcher Hersteller will das schon ).
      Nun fragt man sich wie man seine PSP den flashen kann? Das kommt auf die Version und Hardware an.
      Neue Versionen sind schwierigen downzugraden als ältere. Auf dieser Seite findet ihr alles was ihr dazu
      braucht.

      Wenn das aufspielen der CFW geklappt hat und nun anfangen will seine HomeBrews zu coden ( man kann
      auch Cracked PSP-Games spielen aber darum gehts jetzt nicht ) fragt man sich wie mach ich das den nu?
      Ihr müsst erstmal wissen welche Programmier Sprache "benötogt wird". Für die PSP wird LUA, C++ und
      Web Sprachen (JS,HTML,CSS,Flash ) benutzt. Wir interessieren uns aber nur für LUA und C++.
      LUA hat nicht viele Vorteile, eigentlich nur das es sehr schnell zu lernen ist. Im Gegensatz zu C++ ist es
      unflexible und hat nicht viele Möglichkeiten; es ist zu vergleichen mit batch. C++ bietet viel mehr
      Möglichkeiten ist aber schwierigen zu lernen. Wenn man aber mit dem Syntax ( Struktur ) "klar kommt"
      ist es relativ leicht ( aber was ist relativ ? ).
      Da wir uns jetzt für C++ Entschieden haben ( ja haben wir ), brauchen wir erstmal eine Entwicklungs-
      Umgebung ( IDE ). Man kann jeden Editor nehmen, Visual C++ Studios hebt den Syntax hervor und
      rückt automatisch ein, aber der einfach MicroSoft Editor reicht auch. Nachdem ihr euren SRC-Code
      ( Source Code = Quelltext ) geschrieben habt müsst ihr in "Computer Sprache" umwandeln, aber wie
      macht man das? Dank dem Team von PS2DEV ist dies auch möglich. Man muss nun aber cygWIN,
      PSPTOOLCHAIN installieren, da dies aber fast einen Tag dauert, beite ich hier das vorkompilierte
      Paket von PSPDev an. Wie das jetzt alles funktioniert werde ich euch jetzt erklären.

      Schritt 1
      Zuerst müsst ihr euch das vorkompilierte Paket von PSPDev downloaden. Ich hab es hier nochmal
      hochgeladen. Die Installation sollter ihr eigentlich selber hinbekommen ( einfach immer auf weiter ).
      Nun müssen wir erstmal ein SRC-Code schreiben den wir compilieren kann.

      Erstellt eine "main.c" und öffnet diese mit dem Editor oder eurer IDE. Als erstes müssen wir
      die Header-Datein inkludieren mit denen die PSP arbeitet.

      C-Quellcode

      1. #include <pspkernel.h>
      2. #include <pspdebug.h>

      Mit dem Befehlt #include sagen wir dem Compiler er soll die Header-Datei in den <> - Klammern
      in den SRC-Code einbinden. In Header-Datein sind Funktionen definiert, ohne Header gibts auch keine
      Funktionen. Aber was machen überhaupt pspkernel.h und pspdebug.h?
      pspkernel.h ist notwendig für jedes Programm auf der PSP weil es für die PSP spezifische Befehle
      enthällt. pspdebug.h ist wichtig für die Fehler Behebung da es Erorrs an den Bildschirm weitergibt.

      Nun sagen wir der PSP etwas über unser Programm, es läuft zwar auch ohne aber das ist trotzdem
      nicht verkehrt Eigenschaften über das Programm der PSP mit zugeben.

      Quellcode

      1. PSP_MODULE_INFO("Hello World", 0, 1, 1);

      Es ist nicht der Name der angezeigt wird ( das kommt später ) sondern die Versions Nummer und
      System-Name, der für die PSP und dem Programmierer der Übersicht dient.

      Nun kommen wir zu einem SRC-Code Block der für uns nicht relevant ist sonder nur dazu dient, das
      unser Programm beim Start nicht nur 1 Milisekunde geöffnet bleibt sondern solange bist wir es mit
      der HOME-Taste schließen. Es wäre jetzt zu kompliziert zu erklären, deswegen belassen wir es einfach
      dabei das es wie die Header-Datein notwendig zum laufen des Programms ist.

      Quellcode

      1. int exit_callback(int arg1, int arg2, void *common) {
      2. sceKernelExitGame();
      3. return 0;
      4. }
      5. int CallbackThread(SceSize args, void *argp) {
      6. int cbid;
      7. cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
      8. sceKernelRegisterExitCallback(cbid);
      9. sceKernelSleepThreadCB();
      10. return 0;
      11. }
      12. int SetupCallbacks(void) {
      13. int thid = 0;
      14. thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
      15. if(thid >= 0) {
      16. sceKernelStartThread(thid, 0, 0);
      17. }
      18. return thid;
      19. }
      Alles anzeigen

      Da wir das nun haben kommen wir zur Text-Ausgabe. Der eigentlich Befehl bei der PSP ist
      pspDebugScreenPrintf aber da wir Faul sind und kein Bock haben immer diesen langen
      Befehl einzutippen benennen wir in einfach um.

      Quellcode

      1. #define pspDebugScreenPrintf printf

      Immer wenn wir jetzt printf schreiben ersetzt der Compiler es einfach mit pspDebugScreenPrintf
      Das mach den SRC-Code übersichtlicher uns man muss nicht so viel schreiben.

      Jedes C++ - Programm braucht einen Einsprungs Punkt und das ist immer die main() - Funktion.
      Hier fängt das "Sichtbare" - Code erst an. Jetzt schreiben wir in die main()-Funktion unseren
      Text mit Hilfe des printf ( pspDebugScreenPrintf ) - Befehl, aber zuerst braucht die PSP
      noch etwas damit es weiß das jetzt was auf dem Bildschirm soll.

      Quellcode

      1. int main(){
      2. pspDebugScreenInit();
      3. SetupCallbacks();

      Wenn ihr aufgepasst habt sehrt ihr das dies auch Funktionen sind die wir bereits deklariert und
      definiert haben.

      Nun kommt endlich die Ausgabe mit printf, undzwar geben wir einfach "Hello World" aus. Das
      hat sich so eingebürgert das das erste Programm mit Hello World beginnt.

      Quellcode

      1. printf("Hello World");
      2. sceKernelSleepThread();
      3. return 0;
      4. }

      sceKernelSleepThread(); sagt der PSP das das Programm jetzt "einschläft" und nicht einfach
      ausgeht. return 0; ist der Rückgabe-Wert der main() - Funktion. Jede Funktion muss einen Rückgabe
      Wert liefern in diesen Fall einfach 0 weil die main()-Funktion mit dem Integer Datentyp ( int ) deklariert
      wurde. In den Integer passen nur ganze Zahlen. Es gibt auch noch andere Datentyp wie char ( Buchstaben )
      aber das ist jetzt nicht wichtig.

      So das war der ganze SRC-Code. Der Übersicht halber hier noch einmal alles:

      C-Quellcode

      1. #include <pspkernel.h>
      2. #include <pspdebug.h>
      3. PSP_MODULE_INFO("Hello World", 0, 1, 1);
      4. int exit_callback(int arg1, int arg2, void *common) {
      5. sceKernelExitGame();
      6. return 0;
      7. }
      8. int CallbackThread(SceSize args, void *argp) {
      9. int cbid;
      10. cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
      11. sceKernelRegisterExitCallback(cbid);
      12. sceKernelSleepThreadCB();
      13. return 0;
      14. }
      15. int SetupCallbacks(void) {
      16. int thid = 0;
      17. thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
      18. if(thid >= 0) {
      19. sceKernelStartThread(thid, 0, 0);
      20. }
      21. return thid;
      22. }
      23. #define pspDebugScreenPrintf printf
      24. int main(){
      25. pspDebugScreenInit();
      26. SetupCallbacks();
      27. printf("Hello World");
      28. sceKernelSleepThread();
      29. return 0;
      30. }
      Alles anzeigen

      Und was jetzt? So kann die PSP damit noch nichts anfangen, jetzt müssen wir den Code in eine für
      die PSP verständlich Sprache umwandeln ( compilieren ). Aber davor müssen wir noch eine "makefile"
      Datei machen ( ohne Endung ).

      Quellcode

      1. TARGET = hello
      2. OBJS = main.o
      3. CFLAGS = -O2 -G0 -Wall
      4. CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
      5. ASFLAGS = $(CFLAGS)
      6. EXTRA_TARGETS = EBOOT.PBP
      7. PSP_EBOOT_TITLE = Hello World
      8. PSPSDK=$(shell psp-config --pspsdk-path)
      9. include $(PSPSDK)/lib/build.mak
      Alles anzeigen

      Diese müsst ihr für jedes Programm einzelnd machen. Wichtig für euch ust nur PSP_EBOOT_TITLE
      denn das ist der Name der Angezeigt wird. Den Rest müsst ihr so lassen.

      Schritt 2
      Nun können wir es endlich compilieren ( =D ).
      Dazu macht ihr auf den Datenträger einen Ordner Namens "Test" oder "First Programm" oder so etwas
      ähnliches ( es ist nicht wichtig ) und packt dort die "main.c" und die "makefile" Datein rein.
      Nun geht ihr in den CygWIN Ordner und startet die "bash.bat". Diese navigiert automatisch auf "C:\"
      Nun tippt ihr folgendes ein:

      Quellcode

      1. cd "Ordner Name indem ihr die Datein habt"

      Bestätigt das mit ENTER und gebt dann das ein:

      Quellcode

      1. make

      Mit dem Befehl "make" wird der SRC-Code compiliert. Nun ist euer erstes Programm fertig. Ihr müsst nur
      die "EBOOT.PBP" auf euren Speicher Stick der PSP kompieren in "PSP/GAME/Ornder Name" und könnt es
      ausführen. Herzlichen Glückwunsch ihr seid jetzt PSP-Programmier =D

      Falls ihr Fragen habt scheut euch nicht diese zu stellen.
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • [COLOR="DarkOrange"]Ist in C# geschrieben oder? BTW: man muss die PSP nicht erst auf 1.5 downgraden. Ich hab damals sogar mit der aktuellsten Firmware geflasht (5.50 auf 5.00 M33-6). Würde euch jetzt aber lieber die GEN Firmwares empfehlen, die sind besser. B2T: Wenn der Guide nicht geleecht ist, dann nice work.[/COLOR]
    • Ahhh das gute alte PSP SDK^^
      Ich habe auch mal eine Zeit lang an der PSP gecodet (PSP 2K FTW :P)
      Aber dann haben mich die 64 MB Ram so angepisst, das ich wieder an den PC gegangen bin^^
      Finde ich aber gut :-) Nice tut^^

      PS: Nein man muss nicht zurück auf die 1.50. Der 1.50 Kernel ist nur für die Spezial Funktionen der Fat.
      Ich glaube die aktuellste FW mit 1.50 Kernel ist immernoch die 5.00? {Dark Alex is the best}

      Aber "normale" Homebrows , also die auf dem 2.6X bis 5.XX Kern laufen, sind eh die besten :P

      So noch ein paar Tipps für dich :-)
      Ich dachte PS2DEV hatte die ganzen Datein von dem PSP Dev Kit (Link)?!
      Es gibt eine Umgebung für VC++ (Die ich persönlich besser finde^^)
      Original Theard
      SDK
    • So noch ein paar Tipps für dich :-)
      Ich dachte PS2DEV hatte die ganzen Datein von dem PSP Dev Kit (Link)?!
      Es gibt eine Umgebung für VC++ (Die ich persönlich besser finde^^)

      Ich hab das so gelesen das dass PS2DEV Team durch Data-Reserving die Header-Datein
      und bla gefunden haben und dann ist das PSPSDK iwie entstanden.