では実際にプログラムを作ってみましょう!
初めは Hello World を画面に表示させるというのが慣習ですので作ってみます。

プロジェクトの作成とビルド

  1. プロジェクトの作成 のとおりにプロジェクトを作成します。
    「ソリューションのディレクトリを作成」のチェックを外しておきましょう。
  2. ソリューションが作成されたら「ソリューション エクスプローラー」でプロジェクトを右クリックして、「追加(D)」→「新しい項目(W)...」を選択します。
  3. 出てきたウィンドウで「C++ ファイル (.cpp)」を選び、ファイル名に「main.c」と入力します。
    ファイルが作成されますので以下の枠内の内容をコピーして保存します。
#include <pspkernel.h>
#include <pspdebug.h>

PSP_MODULE_INFO("Hello World", PSP_MODULE_USER, 1, 1);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);

int main(int argc, char *argv[])
{
    pspDebugScreenInit();
    pspDebugScreenSetXY(0, 0);
    pspDebugScreenPrintf("Hello World!!");

    return 0;
}
  1. 続いて Makefile の作成 で作成した Makefile をプロジェクトフォルダー1にコピーします。
  2. ソリューションを保存して「ビルド」をクリックします。

下部の「出力」でビルドが正常に完了したのを確認すると、プロジェクトフォルダー1EBOOT.PBP が出力されているはずです。

転送

  1. PC でメモリースティックを開いて「PSP」→「GAME」と開きます。
  2. 適当な名前のフォルダーを半角英数字(UPDATE 以外)で作成し、生成された EBOOT.PBP をその中にコピーします。

起動

  1. PSP を起動して XMB の「ゲーム」を開きます。
  2. Makefile で指定したタイトルのゲームを一覧から選択して起動します。
  3. 画面に以下のように黒地に白文字で Hello World!! と表示されれば成功です。
    HOME ボタンのための処理を書いていないので、電源を切って終了します。

programming psp helloworld screenshot

まとめ

PSP のプログラムを作るときは、プロジェクトを作成してから Makefile とソースコードを記述していきます。コンパイラーはこの Makefile がないとコンパイルやリンクの作業を行うことができません。

また、今回のプログラムはデバッグスクリーンという機能で文字の表示を行いました。この機能は日本語の表示には対応していませんが、デバッグ用途での文字列出力には便利に使用することができます。 CFW ではプラグインの設定画面などでも頻繁に使用されている機能です。

API リファレンス

PSP_MODULE_INFO(
    const char [27] name, 
    unsigned short attributes, 
    unsigned char major_version, 
    unsigned char minor_version
);
モジュールの情報について指定します。必須です。
  • name-プログラムの名前(半角英数字)
  • attributes-実行モード
  • major_version-メジャー・バージョン
  • minor_version-マイナー・バージョン
実行モードには次の定数が定義されています。
  • PSP_MODULE_KERNEL (0x1000) - カーネルモード
  • PSP_MODULE_USER (0) - ユーザーモード
PSP_MAIN_THREAD_ATTR(unsigned int attr);
メインスレッドの種類を指定します。
  • attr-メインスレッドの種類。
スレッドの種類には次の定数が定義されています。
  • PSP_THREAD_ATTR_VFPU - VFPU(ベクトル演算を行うための FPU)へのアクセスを有効化
  • PSP_THREAD_ATTR_USER - ユーザーモード
  • PSP_THREAD_ATTR_USBWLAN - USB/無線 LAN の API を有効化
  • PSP_THREAD_ATTR_VSH - VSH の API を有効化
  • PSP_THREAD_ATTR_SCRATCH_SRAM - スクラッチパッドメモリーを使用(Ver 1.0 では使用不可)
  • PSP_THREAD_ATTR_NO_FILLSTACK - スタックの 0xFF クリアを無効化
  • PSP_THREAD_ATTR_CLEAR_STACK - スレッド削除時にスタックをクリア
  • 0 - カーネルモード
void pspDebugScreenInit(void);
デバッグスクリーン機能を初期化します。
void pspDebugScreenSetXY(int x, int y);
デバッグスクリーンの座標を指定します。
  • x-出力する横位置。単位は文字で、0文字目からスタート。
  • y-出力する縦位置。単位は文字で、0行目からスタート。
void pspDebugScreenPrintf(const char *fmt, ...);
デバッグスクリーンで文字を出力します。
  • fmt-出力する書式指定付文字列(半角英数字)。printf と同様。
void pspDebugScreenClear(void);
デバッグスクリーンをクリアします。

脚注


  1. 通常は「ドキュメント」→「Visual Studio 2017」→「Projects」→「プロジェクト名」になります