KINGx - Das inoffizielle PlayStation Forum & News Portal
[TuT, Update] Hello World in C - Druckversion

+- KINGx - Das inoffizielle PlayStation Forum & News Portal (http://www.kingx.de/forum)
+-- Forum:    PS Vita / PSP (/forumdisplay.php?fid=1)
+--- Forum: Homebrew (/forumdisplay.php?fid=8)
+---- Forum: Development (/forumdisplay.php?fid=34)
+----- Forum: Dev-Tutorials (/forumdisplay.php?fid=59)
+----- Thema: [TuT, Update] Hello World in C (/showthread.php?tid=28686)


[TuT, Update] Hello World in C - Unbekannt - 12.12.2010 10:28

Vorwort
Da mein anderes Tutorial falsch erklärt wurde, habe ich hier ein Update des altens, der ja geschloßen wurde. Hier ist alles benutzerfreundlich erklärt und die Anwendung lässt sich auch ausführen. James_Cutter hat es getestet.

_____________________________________
Konditionen
_____________________________________

Fangen wir an...


Installierung der Entwicklungs Umgebung
    Zuerst downloaden und installieren wir die Entwicklungs Umgebung, also das PSP SDK. Danach macht ihr das gleiche mit Dev-C++.


Projekt erstellen
    Nachdem wir alles installiert und Dev-C++ initalisiert haben, sehen wir bei Dev-C++ ein graues, wenig eindrucksvolles Feld, damit sich das ändert, gehen wir auf File > New > Project...

    .
    Nun erscheint ein Fenster, dort wählen wir Empty-Project aus und geben unten den Namen eures Programms aus, in diesem Fall, PSP HelloWorld. Aber bevor ihr auf "OK" klickt, wählt ihr bei der Checkbox "C Project". Nun fragt Dev-C++ uns ab, wo wir unser Projektmappe

    speichern, hierfür erstellen wir uns einen Ordner, nennen ihn beliebig um, ich habe ihn z.B hwPSP genannt (helloworldPSP). Nun speichert ihr die Datei ab. Zunächst sehen wir wieder das "graue Feld", jetzt erstellen wir uns unseren leeren Script über File > New> Source File. Zum Schluß laden wir von oben die pspcallbacks.h und die makefile herunter und verschieben sie in den Ordner.


Ab ans coden...
    Jetzt wird gecodet! Im leeren "Source File" schreiben wir als erstes welche Dateien eingebunden werden. Wenn die Dateien nicht engebunden werden, kann es zu Fehler kommen, da der Compiler ohne die Dateien manche Befehle nicht kennt (z.B printf).

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


    Die in den Gänsefüßchen stehende Header-File, ist die pspcallbacks.h, diese wir vorhin in den Ordner verschoben haben. Die Gänsefüßchen bedeuten dass die zueinbindende Datei sich im Ordner des selben Projekts befinden. Die in den Kleiner-/Größerzeichen ("<" und ">") stehenden Dateien befinden sich im $PATH. Zur Erläuterung von pspcallbacks.h, später mehr.

    PHP-Code:
    #define printf pspDebugScreenPrintf 


    Mit "#define" werden Befehle definiert. Da pspDebugScreenPrintf lang ist, kann man anstatt das, printf nehmen. Also printf wird von pspDebugScreenPrintf definiert.

    Nun schreiben wir int main(), dies ist die Hauptfunktion. Praktisch die Einleitung.

    PHP-Code:
    int main() {
    // Hier steht die Anweisung


    zwichen den geschweiften Klammern stehen immer eine Anweisung, damit auch jetzt Anweisungen hinkommen schreiben wir erst drei Funktionen.

    PHP-Code:
    int main() {
     
    pspDebugScreenInit();
        
    pspDebugScreenClear();
        
    SetupCallbacks();
    // ....



    Erklärung

      Mit der Funktion pspDebugScreenInit() wird uns erlaubt etwas auf dem Bildschirm auszugeben. Mit pspDebugScreenClear() wird der Bildschirm bereinigt. Nun kommt die Erklärung zur Header-Datei, "pspcallbacks.h": Die ist dazu dar, das wir die "SetupCallbacks"-Funktion nutzten können, man muss die Datei nicht inkludieren, aber sonst müsste man den Code einwenig umständlicher schreiben Wink. Also SetupCallbacks() erlaubt es, ein Callback zu machen, also die Home-Taste kann genutzt werden.

    Nun streiten wir zur Tat und lassen Hello World auf dem Bildschirm der PSP drucken.

    PHP-Code:
    printf("Hello World\n");
    sceKernelSleepThread(); 


    printf ist der definierte Befehl um etwas auf dem Bildschirm der PSP "drucken" zu können. Das \n steht hierbei für einen Zeilenumbruch nach Hello World, "\n" ist ein Escape-Code Wink.

    Nun schreiben wir return 0 für den Rückabewert und schließen die Anweisungen mit einer geschweiften Klammer.

    PHP-Code:
    return 0



    Ganzer Code:

    Spoiler: (anzeigen)
    Nun speichern wir den ganzen Code als "main.c" ab.

Compilieren und Erstellen
    Nun compilieren wir unser kleines PSP Programm, in dem wir die CMD öffnen (Start > Suchen > CMD). Nun kopieren wir den Pfad unseres Projekt-Ordners, in meinem Fall C:\Dev-Cpp\psphw2. Nun geben wir cd ein und fügen (mit rechter Maustaste ins Kontextmenü und auf Einfügen) den Pfad zum Projekt ein, Beispiel:

    cd C:\Dev-Cpp\psphw2


    und bestätigen mit Eingabe.



    Nun sollte man im Pfad des Projektes sein. Nun compilieren und erstellen die Datei, indem man "make" eingibt.



    Was ich noch sagen kann, ihr seid fertig, nun müsstet ihr eine Eboot im Ordner vorfinden, diesen könnt ihr mit dem PBPUnpacker editieren.

    Nochmal großes Danke an James_Cutter der die Homebrew getestet hat.

Umlaute in C

Auch in C gibt es Umlaute. Umlaute werden als Sonderzeichen gewertet und können über Hexadezimal geschrieben werden.

ä : \x84
ö : \x94
ü : \x81
Ä : \x8E
Ö : \x99
Ü : \x9A
ß : \xE1

PHP-Code:
//Äußerung
 
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspcallbacks.h>
 
#define printf pspDebugScreenPrintf
 
PSP_MODULE_INFO("aeusserung",0,1,1);
 
int main() {
    
pspDebugScreenInit();
    
pspDebugScreenClear();
    
SetupCallbacks();
    
printf("Dies ist eine \x84u\xE1erung...\n");
    
sceKernelSleepThread();
    return 
0;


Ausgabe: Dies ist eine Äußerung...


@Mods: Dieser Thread existiert ja schon, deswegen möchte ich das der andere gelöscht wird oder so, oder das ich ihn bearbeiten kann.


RE: [TuT, Update] Hello World in C - EvoKing - 15.12.2010 15:47

was kann man den mit dem PBP unpacker noch editieren?


RE: [TuT, Update] Hello World in C - Rroia - 15.12.2010 16:11

Ich will ja nicht kleinlich wirken, aber du hast am Anfang ein paar Begriffe falsch benutz.

Zitat:
Konditionen
  • PSP mit CFW/HEN/HBL
  • Einen Compiler (wir nehmen Dev-C++
  • Entwicklungsumgebung / Compiler
    • Header-Datei: pspcallback.h
    • Makefile


Du hast geschrieben das Dev-C++ der Compiler wäre, und das PSP-SDK die Entwicklungsumgebung. Richtig wäre aber, dass Dev-C++ die Entwicklungsumgebung ist und das SDK nur Zusatz sind um die Funktionen der PSP nutzen zu können. Der "echte" Compiler ist wahrscheinlich g++ und wird mit Dev-C++ mitinstalliert.

Sonst ist aber glaub ich alles richtig


RE: [TuT, Update] Hello World in C - Unbekannt - 15.12.2010 17:31

Der Compiler ist g++ ^^ stimmt


RE: [TuT, Update] Hello World in C - -blue7 - 15.12.2010 18:38

Unbekannt :
Der ist glaubich schon in Windows einprogrammiert durch die Makefile kann er die "SDK"-Dateien nutzen und eine Output-Datei erstellen.

Der Compiler ist nicht einprogrammiert in Windows, sondern wird mit dem Dec-C++ installiert. Die Makefile sagt dem Compiler nur, wie er die Output-Datei zu erstellen hat.


RE: [TuT, Update] Hello World in C - pspbricker - 15.12.2010 18:40

pspbricker :
Mit deiner Erklärung für die Einrichtung von von einem PSP Compiler liegst du komplett falsch. Der Compiler würde höchstens eine Binary für den PC erzeugen. Bitte zu den richten Tutorials verlinken, als in der Welt zu verbreiten, dass man für die PSP mit einer Header Datei Eboots erstellen kann Link http://pspking.de/toolchain.html

Daran hat sich nichts geändert.

Zitat:
Naja, in Dev-C++ ist ein Compiler integriert. Der Compiler ist psp gcc und wird durch die Makefile genutzt. Der ist glaubich schon in Windows einprogrammiert durch die Makefile kann er die "SDK"-Dateien nutzen und eine Output-Datei erstellen.

Aua.