# PAD_Read

## 構文

  `#include <nitro/pad.h>`
  u16`PAD_Read( void );`

## 引数

なし。

## 返り値

現在のキー情報です。

十字キー上下、十字キー左右同時押下といった禁則入力に対しては、
前者は十字キー上、後者は十字キー左だけが押されている状態になるようにフィルタをかけています。

## 説明

キーやボタンの押下情報を取得します。
キーやボタンの情報は以下の値の論理和となります。

値(定義) | 状態 | 値(数値)
--- | --- | ---
PAD_BUTTON_A | Aボタンを押している | 0x0001
PAD_BUTTON_B | Bボタンを押している | 0x0002
PAD_BUTTON_SELECT | SELECTボタンを押している | 0x0004
PAD_BUTTON_START | STARTボタンを押している | 0x0008
PAD_KEY_RIGHT | 十字キー右を押している | 0x0010
PAD_KEY_LEFT | 十字キー左を押している | 0x0020
PAD_KEY_UP | 十字キー上を押している | 0x0040
PAD_KEY_DOWN | 十字キー下を押している | 0x0080
PAD_BUTTON_R | Rボタンを押している | 0x0100
PAD_BUTTON_L | Lボタンを押している | 0x0200
PAD_BUTTON_X | Xボタンを押している | 0x0400
PAD_BUTTON_Y | Yボタンを押している | 0x0800
PAD_BUTTON_DEBUG | DEBUGボタンを押している | 0x2000

X, Y ボタンは、ARM7 が汎用ポートを調べそれを共有領域に書くことで ARM9 から読むことが出来ます。従って、ARM7 の読み込みモジュールが動作していない場合は X, Y ボタンは読み込めません。
ボタン ( PAD_BUTTON_〜 ) のすべての和として、PAD_BUTTON_MASK が、キー ( PAD_KEY_〜 ) のすべての和として、PAD_PLUS_KEY_MASK が定義されています。さらにボタン、キーすべての和として、 PAD_ALL_MASK が定義されています。
ARM7 が読み込む X, Y ボタンと DEBUG ボタンの和は PAD_RCNTPORT_MASK として定義されています。それ以外のボタン・キーの和は PAD_KEYPORT_MASK として定義されています。

ビット | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---

D
E
B
U
G

N
/
A

Y

X

L

R

D
O
W
N

U
P

L
E
F
T

R
I
G
H
T

S
T
A
R
T

S
E
L
E
C
T

B

A

VALUE

PAD_BUTTON_MASK | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0x2F0F
PAD_PLUS_KEY_MASK | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0x00F0
PAD_ALL_MASK | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x2FFF
PAD_RCNPORT_MASK | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x2C00
PAD_KEYPORT_MASK | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x03FF

###
例

> `u16 padData = PAD_Read();
> if ( padData & PAD_BUTTON_A )
> {
> OS_Printf( "you're pushing A-BUTTON\n" );
> }
> if ( padData & PAD_PLUS_KEY_MASK )
> {
> OS_Printf( "you're pushing any PLUS-KEY\n" );
> }`

本関数 `PAD_Read()` は、内部的には、IO レジスタの KEYINPUT を読み込み、ARM7が取り込んだ汎用ポートRCNT レジスタからの値を合わせ、キー・ボタンのマスク PAD_ALL_MASK をかけたものを返しています。

###
DEBUGボタンについて

DEBUG ボタンは、開発用途でアプリケーションが自由に使用できるボタンとして用意されています。IS-NITRO-DEBUGGER では、デバッガに接続されている DS の電源ボタンがDEBUGボタンになっています。(電源ボタンとしては利きません)

IS-TWL-DEBUGGER でもデバッガに接続されている TWL の本体の電源ボタンが DEBUG ボタンになっていますが、こちらの電源ボタンは実際に電源ボタンとして機能するようになっていますので、IS-NITRO-DEBUGGER とは用途が少々異なります。

## 参照

`PAD_DetectFold`

## 履歴

2008/04/16 禁則入力フィルタについての記述を追加
2004/08/06 参照から PAD_SetIrq, PAD_ClearIrq を削除
2004/04/13 DEBUGボタン追加
2004/02/19 X,Y ボタン追加
2003/12/01 初版