れーすのエグゼ流星Blog

エグゼとゲームと雑記

エグゼ解析したりゲーム作ったりいろいろ。

GBAプログラミング 5日目

取り組んだ内容

Tutorial.6 キー入力とデバッグ
http://akkera102.sakura.ne.jp/gbadev/index.php?tutorial.6

やってみたこと

1.上 下 右 左 Bボタンのキー入力、同時入力の受け取りをVisualBoyAdvanceのloggingを用いて確認してみる

f:id:rai17321:20180606160308j:plain

#include "lib/gba.h"

//---------------------------------------------------------------------------
void WaitForVsync(void)
{
	while(*(vu16*)0x4000006 >= 160) {};
	while(*(vu16*)0x4000006 <  160) {};
}
//---------------------------------------------------------------------------
int main(void)
{
	// モード設定なし

	u32 x = 0;

	for(;;)
	{
		WaitForVsync();

		if( !(REG_KEYINPUT & KEY_UP)  ) TRACEOUT("上ボタン\n");
		if( !(REG_KEYINPUT & KEY_DOWN)) TRACEOUT("下ボタン\n");
		if (!(REG_KEYINPUT & KEY_LEFT)) TRACEOUT("左ボタン\n");
		if (!(REG_KEYINPUT & KEY_RIGHT)) TRACEOUT("右ボタン\n");

		//if (!(REG_KEYINPUT & KEY_UP & KEY_DOWN)) TRACEOUT("上と下\n");
		//if (!(REG_KEYINPUT & KEYIRQ_OR & KEY_RIGHT)) TRACEOUT("テスト\n");

		if( !(REG_KEYINPUT & KEY_A)   ) TRACEOUT("%d回押したよ\n", x++);
	}
}

考察

コメントアウトした部分の動作がうまくいかなかった。
&条件なので上と下を押さないと動作しないはずが、常に動作してしまっている。
KEYIRQ_ORとかを使うみたいなんだけど、使い方がよくわからなかった。

GBAには標準でリセット(A & B & SELECT & START)機能があるので、実装はできるはず。