#include <sys/bios.h>
#include "KSKey.h"

unsigned int g_nKey[KSKEY_STATUS_MAX]; /* 過去のキー状態を保存 */



/*=======================================================*/
/* 現在のKey状態を取得 */
/*=======================================================*/
void KSKeyStatus( void )
{
	int n;

	for( n=0; n<KSKEY_STATUS_MAX; n++ ){
		g_nKey[KSKEY_STATUS_MAX-n] = g_nKey[KSKEY_STATUS_MAX-1-n];
	}

	g_nKey[0] = key_press_check();
}



/*=======================================================*/
/* x軸Key状態を取得 */
/*=======================================================*/
int KSKeyGetX( void )
{
	int KeyX = 0;

	if( (g_nKey[0] & 128) && !(g_nKey[1] & 128) ) KeyX--;
	if( (g_nKey[0] &  32) && !(g_nKey[1] &  32) ) KeyX++;

	return( KeyX );
}



/*=======================================================*/
/* x軸Key状態を設定 */
/*=======================================================*/
int KSKey_SetX( int p_nKey )
{
	g_nKey[1] &= (4095-KEY_LEFT1);	/* X4 = 0 */
	g_nKey[1] &= (4095-KEY_RIGHT1);	/* X2 = 0 */

	switch( p_nKey ){
	case -1:
		g_nKey[0] |= KEY_LEFT1;		/* X4 = 1 */
		break;
	case 0:
		break;
	case 1:
		g_nKey[0] |= KEY_RIGHT1;		/* X2 = 1 */
		break;

	default:
		break;
	}

	return KSKEY_FUNC_TRUE;
}



/*=======================================================*/
/* ボタンの状態を取得 */
/*=======================================================*/
int KSKeyGet( int nKind, int nFlag )
{
	if( nFlag == 0 ){
		if( g_nKey[0] & nKind ){
			return( 1 );
		}else{
			return( 0 );
		}
	}else{
		if( (g_nKey[0] & nKind) && !(g_nKey[1] & nKind) ){
			return( 1 );
		}else{
			return( 0 );
		}
	}
}



/*=======================================================*/
/* ボタンの状態を設定 */
/*=======================================================*/
int KSKey_Set( int p_nKind, int p_nFlag )
{
	g_nKey[0] &= (4095-p_nKind);
	g_nKey[1] &= (4095-p_nKind);
	if( p_nFlag == 1 ) g_nKey[0] |= p_nKind;

	return KSKEY_FUNC_TRUE;
}
