キー入力

今まではただ表示させるだけでしたが今度はそれを操作してみましょう。

まずstartup.sに記述を追加してください

STUB_START "sceCtrl",0x40010000,0x00030005
STUB_FUNC 0x6a2774f3,sceCtrlInit
STUB_FUNC 0x1f4011e6,sceCtrlSetAnalogMode
STUB_FUNC 0x1f803938,sceCtrlRead
STUB_END


ファイルの下の方に似たような記述があるのでその下にでも追加してください。
正確にはどうかわかりませんがどうやら関数のアドレスを直接指定して
呼べるようにしたもののようです。
STUB_START "sceCtrl",0x40010000,0x00030005
sceCtrl系命令の
STUB_FUNC 0x6a2774f3,sceCtrlInit
0x6a2774f3アドレスの命令をsceCtrlInitと定義する。
と言う意味のようです。
実際にsceCtrlInitをCtrlInitと名前を変えても問題はありません。

どうやら現在この方法により直接アドレス指定でPSPの機能を
呼び出して使用しているようですね。
さすがに新規に命令を探すのは専門の方にお任せして
こちらは使うことだけに集中したいと思います(^^;ってかわかりません。

キー値取得命令での格納用の構造体も用意しておきましょう

typedef struct _ctrl_data
{
 unsigned long frame;
 unsigned long buttons;
 unsigned char analog[4];
 unsigned long unused;
} ctrl_data_t;


一括して読み込まれますので取得後これを参照してください。

各キーの値は以下のようになっています。
#define CTRL_SQUARE 0x8000
#define CTRL_TRIANGLE 0x1000
#define CTRL_CIRCLE 0x2000
#define CTRL_CROSS 0x4000
#define CTRL_UP 0x0010
#define CTRL_DOWN 0x0040
#define CTRL_LEFT 0x0080
#define CTRL_RIGHT 0x0020
#define CTRL_START 0x0008
#define CTRL_SELECT 0x0001
#define CTRL_LTRIGGER 0x0100
#define CTRL_RTRIGGER 0x0200

define定義しておくとわかりやすく呼べますね。
そして実際の取得命令の呼び出しは,まずプログラム実行後
各種の初期化処理の中に

sceCtrlInit(0);
 sceCtrlSetAnalogMode(0);


を混ぜてください。
前述の通り定義してある関数です。これでキー入力の初期化を行います。
名前を変えた方は当然変えた名前で記述してください。

キー入力値を取得したい場面で
 sceCtrlRead(paddata, 1);

を呼び出してください。
これでpaddataにキー値が代入されます。

後は
if (paddata.buttons & CTRL_START){
 //スタートキーを押した時の処理
}


等のように記述すればOKです。