ここでは各種コントローラの入力データの仕様を掲載しています。なお、DTMファイル内の入力データはすべてビッグエンディアンで格納されています。すなわち、ここで説明しているコントローラーの返すバイト列がそのままのバイトオーダーで記録されます。
GC標準コントローラの入力データは常に8バイトです。
bit |7 6 5 4 3 2 1 0|7 6 5 4 3 2
1 0| 7 - 0 | 7 - 0 | 7 - 0 | 7 - 0 | 7 - 0 | 7 - 0 |
Button|* * * * R L r l|d u Z Y X B A S| LT 7-0| LT 7-0| X 7-0 | Y 7-0
| CX 7-0| CY 7-0|
udlr:十字キーの上下左右
LRトリガー、メインスティック、Cスティックとも8ビットでデータを返します。
スティックの中央は128、LRトリガーの定位は0、最深は255、全押しはLRボタンのフラグを立てることで表現します。
Wiiリモコンは、利用する機能の異なる複数のモードがあり、モードによって入力データのサイズが変わります。
Wiiリモコンのボタンだけを使用します。データ列は以下のようになります。
A1 30 BB BB
BB BBの部分に各ボタンのフラグが返ります。以下のように対応します。
byte | 0 | 1
|
bit |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|
button|* * * + u d r l|H * * - A B 1 2|
udrl:それぞれ十字キーの上下右左。H:ホームボタン。
"*"は、別のデータに利用されていることを表します。
Wiiリモコンのボタンおよび加速度センサだけを使用します。データ列は以下のようになります。
A1 31 BB BB AA AA AA
BB BBの部分に各ボタンのフラグが、AA AA AAの部分に加速度センサの値が返ります。各ボタンのフラグおよび加速度センサの値は以下のように対応します。
byte | 0 | 1
| 2 | 3 | 4 |
bit |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 7 - 0 | 7 - 0 | 7 - 0
|
button|* X1 X0 + u d r l|H Z1 Y1 - A B 1 2|ACC X 9-2|ACC Y 9-2|ACC Z
9-2|
udrl:それぞれ十字キーの上下右左。H:ホームボタン。
加速度センサの値はX,Y,Zとも10ビットですが、Y,Zに関しては9ビット分しかないため最下位ビットは常に0とみなします。
ボタンデータの1バイト目にX加速度の下位2ビット、2バイト目にY,Z加速度の下位2ビット目が格納され、続く3バイトはそれぞれの上位8ビットです。
Wiiリモコンのボタンおよび拡張コントローラを使用します。このモードの拡張コントローラのデータサイズは8バイトです。
A1 32 BB BB EE EE EE EE EE EE EE EE
BB BBの部分に各ボタンのフラグが、EE EE
・・・の部分に拡張コントローラのデータが返ります。
ボタンの対応表はモード30/31を、拡張コントローラの入力仕様はこのページの下部を参照してください。使用しないバイトは0で埋めます。
Wiiリモコンの全機能を使用します。このモードにおいて、IRポインタは12バイトでデータを返します。データ列は以下のようになります。
A1 33 BB BB AA AA AA II II II II II II II II II II II II
BB BBの部分に各ボタンのフラグが、AA AA AAの部分に加速度センサの値が、II II
・・・の部分にIRポインタのデータが返ります。
各ボタンのフラグおよび加速度センサの値の対応はモード31を参照してください。IRカメラのIR12形式のデータバイトの対応は以下の通りです。
byte | 0 | 1 | 2
|
bit | 7 - 0 | 7 - 0 | 7 6 | 5 4 | 3 - 0 |
IR cam|X1 7-0 |Y1 7-0 |Y1 9-8|X1 9-8|Size 1 |
IRカメラは4点の動きを監視して移動量を測定します。実際にはこの後に2,3,4点目のデータが同じ形式で続きます。
X,Y座標は10ビット、サイズデータは4ビットです。
Wiiリモコンのボタンおよび拡張コントローラを使用します。このモードの拡張コントローラのデータサイズは19バイトです。
A1 34 BB BB EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
BB BBの部分に各ボタンのフラグが、EE EE
・・・の部分に拡張コントローラのデータが返ります。
ボタンの対応表はモード30/31を、拡張コントローラの入力仕様はこのページの下部を参照してください。使用しないバイトは0で埋めます。
Wiiリモコンのボタン・加速度センサおよび拡張コントローラを使用します。このモードの拡張コントローラのデータサイズは16バイトです。
A1 35 BB BB AA AA AA EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
BB BBの部分に各ボタンのフラグが、AA AA AAの部分に加速度センサの値が、EE EE
・・・の部分に拡張コントローラのデータが返ります。
各ボタンのフラグおよび加速度センサの値の対応はモード31を、拡張コントローラの入力仕様はこのページの下部を参照してください。使用しないバイトは0で埋めます。
Wiiリモコンのボタン・IRポインタおよび拡張コントローラを使用します。
このモードのIRポインタは10バイトでデータを返します。また拡張コントローラのデータサイズは9バイトです。
A1 36 BB BB II II II II II II II II II II EE EE EE EE EE EE EE EE EE
BB BBの部分に各ボタンのフラグが、II II ・・・の部分にIRカメラの値が、EE EE
・・・の部分に拡張コントローラのデータが返ります。
各ボタンのフラグの対応はモード30/31を、拡張コントローラの入力仕様はこのページの下部を参照してください。使用しないバイトは0で埋めます。
IRカメラのIR10形式のデータバイトの対応は以下の通りです。
byte | 0 | 1 |
2 | 0 | 1 |
bit | 7 - 0 | 7 - 0 | 7 6 | 5 4 | 3 2 | 1 0 | 7 - 0 | 7 - 0 |
IR cam|X1 7-0 |Y1 7-0 |Y1 9-8|X1 9-8|Y2 9-8|X2 9-8|X2 7-0 |Y2 7-0 |
IRカメラは4点の動きを監視して移動量を測定します。実際にはこの後に3,4点目のデータが同じ形式で続きます。
このモードではそれぞれ10ビットの座標データのみを使用し、サイズデータは利用しません。
Wiiリモコンの全機能および拡張コントローラを使用します。
このモードのIRポインタは10バイトでデータを返します。また拡張コントローラのデータサイズは6バイトです。
A1 37 BB BB AA AA AA II II II II II II II II II II EE EE EE EE EE EE
BB BBの部分に各ボタンのフラグが、II II ・・・の部分にIRカメラの値が、EE EE
・・・の部分に拡張コントローラのデータが返ります。
各ボタンのフラグおよび加速度センサの値の対応はモード31を、IRカメラのデータの対応はモード36を、拡張コントローラの入力仕様はこのページの下部を参照してください。
拡張コントローラのデータのみを返します。このモードでの拡張コントローラのデータサイズは21バイトです。
A1 3D EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
拡張コントローラの入力仕様はこのページの下部を参照してください。使用しないバイトは0で埋めます。
Wiiリモコンの全機能を使用します。このモードにおいて、IRポインタは36バイトでデータを返します。また、このモードはモード3Eおよび3Fの2つを併用して成立するインターリーブ・モードです。なお、Dolphinは現段階ではこのモードをサポートしていません。
A1
3E BB BB AA II II II II II II II II II II II II II II II
II II II
A1 3F BB BB AA II II II II II II II II II II II II II II II
II II II
BB BBの部分に各ボタンのフラグおよび加速度センサZの値が、AAの部分に加速度センサX,Yの値が、II II
・・・の部分にIRポインタのデータが返ります。
各ボタンのフラグおよび加速度センサの値の対応は以下の通りです。
Mode 3E
byte | 0 | 1 | 2 |
bit |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 7 - 0 |
button|* Z7 Z6 + u d r l|H Z9 Y8 - A B 1 2|ACC X 9-2|
Mode 3F
byte | 0 | 1 | 2 |
bit |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 7 - 0 |
button|* Z3 Z2 + u d r l|H Z5 Y4 - A B 1 2|ACC Y 9-2|
各加速度センサは8ビットのデータサイズしか持たないため、実際には下位2ビットは0とみなします。10ビットのうちの上位8ビットのみが返されることに注意してください。
ボタンのフラグはモード3E/3Fの両方で一致している必要があります。
IRカメラのIR36形式のデータバイトの対応は以下の通りです。
byte | 0 | 1 | 2
| 3 | 4 | 5 | 6 | 7 | 8 |
bit | 7 - 0 | 7 - 0 | 7 6 | 5 4 | 3 - 0 |7| 6-0 |7| 6-0 |7| 6-0 |7|
6-0 |7-0|7| 6 - 0 |
IR cam|X1 7-0 |Y1 7-0 |Y1 9-8|X1 9-8|Size 1 |0|X1 min|0|Y1 min|0|X1 max|0|Y1
max| 0 |0|Intensity|
IRカメラは4点の動きを監視して移動量を測定します。実際にはこの後に2点目のデータがモード3E側、3,4点目のデータがモード3F側に同じ形式で続きます。
このモードではIR12に加え、Bounding Box情報を追加で利用します。
※ヌンチャクの入力データはDTMファイル上ではインターリーブされているため、この仕様そのままのデータ列ではありません。インターリーブの変換方式も各リビジョンで全く違うようなのであまり参考になりません。
ヌンチャクの入力データは常に6バイトで、ボタン、スティック、加速度センサのすべてのデータを返します。
byte | 0 | 1 | 2 |
3 | 4 | 5 |
bit | 7 - 0 | 7 - 0 | 7 - 0 | 7 - 0 | 7 - 0 | 7 6 | 5 4 | 3 2 |1
0|
Data | X 7-0 | Y 7-0 |AAC X 9-2|AAC Y 9-2|AAC Z
9-2|AZ1-0|AY1-0|AX1-0|C Z|
スティックはX,Y方向ともともに8ビットで中心は128です。
加速度はWiiリモコンと同じくそれぞれ10ビットで、X,Y,Zとも10ビット分のデータ領域を持ちます。
※クラシックコントローラの入力データはDTMファイル上ではインターリーブされているため、この仕様そのままのデータ列ではありません。インターリーブの変換方式も各リビジョンで全く違うようなのであまり参考になりません。
クラシックコントローラの入力データは常に6バイトで、ボタン、スティックすべてのデータを返します。
byte | 0 | 1 |
2 | 3 | 4 | 5 |
bit | 7 6 | 5 - 0 | 7 6 | 5 - 0 | 7 | 6 5 | 4- 0| 7 - 6 | 4 - 0 | 7 6 5 4 3 2
1 0 | 7 6 5 4 3 2 1 0 |
Data |RX4-3| LX5-0 |RX2-1| LY5-0 |RX0|LT4-3|RY4-0| LT2-0 | RT4-0 | l d L - H +
R * | ZL B Y A X ZR r u |
LX,LY:左スティックX,Y RX,RY:右スティックX,Y LT:左トリガー RT:右トリガー
udlr:十字キーの上下左右 LR:LRボタン H:ホームボタン
左スティックはX,Yとも6ビットでデータを返し、中央は32です。右スティックはX,Yとも5ビットでデータを返し、中央は16です。
LRトリガーは5ビットでデータを返し、定位は0、最深は31です。
*は使用しないことを表します。