ホーム   »  スポンサー広告  »  スポンサーサイト   »  PSPプログラミング  »  第3弾 : Hello world!を弄る

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

第3弾 : Hello world!を弄る

今回はHello world!を弄ってどうなるのか検証してみます。
前回出した課題の答えもここで解説します。
まず、課題の方ですね。

変数の表示main関数の引数の表示 です。
やってない人は、速攻でやってみて下さい。
C言語の基礎が分かっているなら出来るはず。



やりましたか?



では、ソースコードです。

int main( int argc, char *argv[] )
{
setupCallbacks();
pspDebugScreenInit();

while( end_flag != 1 )
{
pspDebugScreenSetXY( 0, 0 );
pspDebugScreenPrintf( "Hello world!\n"
"end_flag = %d\n"
"argc = %d\n"
"argv[0] = %s\n"
,
end_flag, argc, argv[0]
);
}
sceKernelExitGame();
return 0;
}


今回弄るのはmain関数のみです。他は前回のソースコードと変わりません。
そしたら!_mk.batを実行しビルドしてください。
問題が無ければPSPに転送して実行してみましょう。

え? 二行目以降がチラつくって?

はい、その通りです。
これは画面への描写タイミングがずれるか、または描写が遅すぎる場合に起こります。
今回はタイミングのずれなので、垂直同期処理を加えることで解決します。

ヘッダーファイルを新たに追加(インクルード)してください。
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>
太文字の一行を追加です。

そしてmain関数は…

int main( int argc, char *argv[] )
{
setupCallbacks();
pspDebugScreenInit();

while( end_flag != 1 )
{
pspDebugScreenSetXY( 0, 0 );
pspDebugScreenPrintf( "Hello world!\n"
"end_flag = %d\n"
"argc = %d\n"
"argv[0] = %s\n"
,
end_flag, argc, argv[0]
);
sceDisplayWaitVblankStart();
}
sceKernelExitGame();
return 0;
}


と変更して下さい。変更箇所は太文字部分です。
それして、!_mk.batを実行、生成されたEBOOT.PBPを PSP/GAME/HelloWorld に保存し、XMBから実行して見ましょう。

これでチラつかない筈ですね。

HelloWorld3

さて、ここでPSPの画面をみるとargv[0]に気になる文字列がありますね。

これって、EBOOT.PBPのフルパスじゃない?

と思った人、大正解。
WindowsやLinux系でのC言語のようにmain関数の引数には実行ファイルの絶対パスが渡されるのです。
このパスを取得すると、何が出来るかはあなた次第です。


次は、そうですね‥‥
印字位置の変更ですね。
pspDebugScreenSetXY関数へ渡すパラメータを x=0, y=0 から x=1, y=1 にしてみましょう。

HelloWorld3_1
この通り一行目が空行になり、二行目先頭が空白に、三行目からはずれていないことが解りますね。


今回はここまで!
次回は、何しようかな‥‥
スポンサーサイト
Comment
Trackback
Trackback URL
Comment Form
管理者にだけ表示を許可する
Twitter...A

estuibal=Y.K < > Reload

検索フォーム
RSSリンクの表示
リンク
QRコード
QR
ブロとも申請フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。