サンプルソース


#include <pspdebug.h>

PSP_MODULE_INFO("TEST",0,1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

int end_flag = 0;

int exit_callback(int arg1,int arg2,void *common)
{
end_flag = 1;
return 0;
}
int CallbackThread(SceSize args,void *argp)
{
int cbid = sceKernelCreateCallback("Exit Callback",exit_callback,NULL);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

return 0;
}
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(int argc,char *argv[])
{
setupCallbacks();

pspDebugScreenInit();

while(!end_flag)
{
 pspDebugScreenSetXY(0,0);
 
 pspDebugScreenPrintf("Hello world\n");
}

sceKernelExitGame();

return 0;
}

解説etc...

include

#include <pspkernel.h>
#include <pspdebug.h>
pspDebug〜系の関数を使うために必要なライブラリをインクルードしています。

マクロ

PSP_MODULE_INFO("TEST",0,1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
PSP_MODULE_INFOはこれを忘れるとエラい事になってしまう超重要マクロです。
第一引数はモジュールの名前です。好きなもので結構です。
第二引数は実行モードに関しての値です。
0はユーザーモード(文字表示やその他全般)で、
0x1000はカーネルモード(NANDやFlash領域にアクセス)でモジュールを実行させます。
第三、第四引数はモジュールのバージョンとかなのでそのままで結構です。
PSP_MAIN_THREAD_ATTRは、メインスレッド(main関数を実行するスレッド)の属性を設定し、THREAD_ATTR_USERはユーザーモードでの実行を指定しています。

HOMEボタン監視

int end_flag = 0;

int exit_callback(int arg1,int arg2,void *common)
{
end_flag = 1;
return 0;
}
int CallbackThread(SceSize args,void *argp)
{
int cbid = sceKernelCreateCallback("Exit Callback",exit_callback,NULL);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

return 0;
}
int setupCallbacks(void)
{
int thid = 0;

thid = sceKernelCreateThread("update_thread",CallbackThread,0x11,0xFA0,0,0);

if(thid >= 0)
 sceKernelStartThread(thid,0,0);
 
return thid;
}

pspにはhomeボタンというのがあります。
このボタンは簡単な処理で割り込みを有効にできて
ソフトを終了できるようになっています。
終了ボタンを押して呼び出される関数を指定できます。
それで実際にsceKernelExitGame();が呼び出されると
xmbに戻ります。
実際にはメインスレッドで新しいスレッドを作って
そのスレッドをhomeボタン割り込み専用スレッドにして
割り込み待ちにしておきます。

main関数

setupCallbacks();
上記のHOMEボタン監視スレッドを呼び出す為の関数です。

pspDebugScreenInit();
デバッグ画面を初期化する関数です。デバック関係の処理をする前は必ず呼んだ方が良い関数です。

while(!end_flag)
これはHOMEボタンで表示したメニューでゲームを終了するまでずっとwhile構文内の命令を繰り返す命令です。

pspDebugScreenSetXY(0,0);
デバッグ表示位置を指定する関数です。第一引数はX座標を、第二引数はY座標を指定しています。

pspDebugScreenPrintf("Hello, world!");
画面に文字を表示する関数です。printf関数と使い方は基本同じです。ですが日本語のような2バイト文字は文字化けするので使えません。

sceKernelExitGame();
プログラムを終了しXMBに戻る関数です。
他のサンプルではコールバック関数で、sceKernelExitGame();呼んでるのが多いです。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年04月25日 01:29