キーパッドの同時押しサンプル。


よくある L+R+SELECT+START みたいな
ソフトウェアリセットを実現したくてググってみたけど
ピンポイントなコードが見つけられなかったので書いてみた。
毎度思うがどうも俺は検索がヘタらしいので。


押されてる状態の L+R+SELECT+START を知るだけなら
keysHeld() で欲しいキーが全て押されてる時としても良いんだけど
それでは同時押し成立中がまるまる対象になって色々と不味いなあと。


という訳で同時押し成立の瞬間のみを取得するようなものを書いた。


短いコードのくせに凄く時間食った。
何でもないようなコードは多少スムーズに書けるつもりでいたが。
入り組んだビット操作はまだ苦手の範疇な模様。


キーパッドの同時押しサンプル

/*---------------------------------------------------------------------------------

	software reset (L + R + SELECT + START) sample.
	
	Version 0.01
	Sep 06, 2009
	
	(C)2009 REGEKATSU
	http://akiba.geocities.jp/consolehomebrewprogramming/

---------------------------------------------------------------------------------*/

#include <nds.h>
#include <stdio.h>

//---------------------------------------------------------------------------------
int main(void){
//---------------------------------------------------------------------------------
	
	//keypads var
	uint32 keypads;
	
	consoleDemoInit();
	
	while(1){
		
		swiWaitForVBlank();
		
		scanKeys();
		
		//softwareReset
		if(keysDown() & (KEY_L | KEY_R | KEY_SELECT | KEY_START)){
			
			keypads = keysDown() | keysHeld();
			keypads = keypads & (KEY_L | KEY_R | KEY_SELECT | KEY_START);
			
			if(keypads == (KEY_L | KEY_R | KEY_SELECT | KEY_START)){
				//同時押し成立の瞬間に実行したい処理をここに記述する
				printf("%08X\n", keypads);
			}
			
		}
		
	}
	
}

//---------------------------------------------------------------------------------