「コントローラ」の編集履歴(バックアップ)一覧はこちら
「コントローラ」(2017/02/20 (月) 16:56:23) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
2つのコントローラポートと、底面に1つの拡張端子がある。
コントローラポートに繋ぐものとして次のような種類がある。
-[[ジョイパッド>#i435e246]]
-[[マルチタップ>#a36d3ed6]] (MP5) コントローラを追加で4つまで繋げられるようにする
-[[2 ボタンマウス>#be46b6b5]]
-[[スーパースコープ>#i4e03d51]] (バズーカの形のガンコントローラ)
-[[ガンコントローラ>#o393b389]] (Justifiers)
***コントローラポート [#ha03d31a]
&ref(port.png,nolink);
注 : 図は海外版のものかもしれません。
ここに書かれている情報を元にしてコントローラポートに繋ぐ
ハードウェアを作ろうとしないでください。
1: +5v (power)
2: Clock
3: Latch
4: Data1
5: Data2
6: IOBit
7: Ground
何も接続されていない時は、Data1, Data2 の読み込みデータが 0 になる。
***ジョイパッド [#i435e246]
ジョイパッド (普通のコントローラ) は、 Data1 から 16ビットのデータを返す。
ラッチされる度に順番はクリアされる(?)
byetUDLRaxlr0000
b/y/a/x/l/r はボタンの記号と同じ。
'e' はセレクト、 't' はスタート。
U/D/L/R は十字キー。
普通のコントローラでは、十字キーの上と下、左と右は同時に押せなくなっている。
いくつかのゲームでは、これらの組み合わせで同時に押した場合、
クラッシュするか、動作がおかしくなる。
Data2, IOBit は接続されていない。
***マウス [#be46b6b5]
マウスは、Data1 から 32ビットのデータを返す。
00000000rlss0001 YyyyyyyyXxxxxxxx
l/r はマウスのボタンを表す。
'ss' はスピードビットで、ラッチがアクティブになっていた間のクロック数を mod 3 して返す。
Y/X は方向ビット。セットされていたら上または左。
yyyyyyy/xxxxxxx はその方向への距離。
Data2, IOBit はたぶん接続されていない。
***スーパースコープ [#i4e03d51]
スーパースコープは Data1 から 8 ビットのデータを返す。
データ列 :
fctp00on
'f' は Fire、 'c' は Cursor、 't' は Turbo、
'p' は Pause、 'o' は Offscreen、'n' は Noise を指す。
スーパースコープには 2 つのモードがある。
***ガンコントローラ (Justifiers) [#o393b389]
Justifier は Data1 から 48 ビットのデータを返す。
32 ビットのデータの後に 16 個の 1 を返す。
しかし、これは何か分からない。
データの順番 :
0000000000001110 01010101TtSsl000 1111111111111111
T/t はプレイヤー 1 / 2 のトリガーの状態を表す。
S/s はプレイヤー 1 / 2 のスタートボタンの状態を表す。
'l' は、どちらの銃が IOBit に接続されているのかを表し、
1 は銃 1 を、 0 は 銃 2 を指す。
'l' は、銃 2 が接続されていない時は反転する。
IOBit は スーパースコープのように使う。
しかし、2 個の銃が 1 つのポートに接続され、
どちらの銃が IOBit に接続されているかは
Latch の度に変更される。
Justifier は Latch の前にトリガーが引かれるのを待たない。
電子銃が検知される度に Latch される。
Justifier がスクリーンに向いているか向いていないかを決定するために
[[0x213F>IO ポート (メイン)/0x213F]] のビット 6 が使用される 。
Data2 はたぶん接続されていないが、確実なことは分からない。
***マルチタップ (MP5) [#a36d3ed6]
MP5 をSNESのコントローラポート (通常、ポート 2) に接続し、
4 つのコントローラをそこに接続することができる (2 ~ 5)。
IOBit が 1 の場合、Clock はパッド 2 と 3 を通る。
Data1 はパッド 2 の Data1 へ、
Data2 はパッド 3 の Data1 へそれぞれ接続される。
IOBit が 0 の場合、パッド 4 と 5 を使う。
どちらの場合も、Latch は全てのポートに通される。
たぶん、 IOBit は全てに通されることはない。
Clock は IOBit で選択されたところにのみ信号を通す。
最初の 2 つのパッドのみ読み込むことができ
(自動ジョイパッド読み込みもそのようにする)、
IOBit を切り替えた時に他のパッドを手動で読み込むことができる。
たくさんのゲームで、3 人より多くのプレーヤーの処理の時に
このようなことが行われている。
MP5 はポート 1 にも接続することができるが、
IOBit のセット用に、 [[0x4201>IO ポート (メイン)/0x4200-0x421F#p4201]] のビット 6 をビット 7 の代わりに
使用する必要があり、ポート 1 のレジスタを
ポート 2 の代わりに使用する必要もある。
2 つの MP5 を使用すると、8 人用のゲームを作ることもできる。
Latch がアクティブな時、Data2 からは 1 が、 Data1 からは 0 が読み込まれる。
MP5 の存在を検出するためにこの動作が使われることがある。
MP5 によって、この動作がオーバーライドされる。
IOBit が 0 から 1 に移行する場合、MP5 がすぐに反応しない。
2 と 3 を読んでから、4 と 5 を読むようにする方が、
逆の場合よりも良いだろう。
2つのコントローラポートと、底面に1つの拡張端子がある。
コントローラポートに繋ぐものとして次のような種類がある。
-[[ジョイパッド>#i435e246]]
-[[マルチタップ>#a36d3ed6]] (MP5) コントローラを追加で4つまで繋げられるようにする
-[[2 ボタンマウス>#be46b6b5]]
-[[スーパースコープ>#i4e03d51]] (バズーカの形のガンコントローラ)
-[[ガンコントローラ>#o393b389]] (Justifiers)
***コントローラポート [#ha03d31a]
#ref(port.png);
注 : 図は海外版のものかもしれません。
ここに書かれている情報を元にしてコントローラポートに繋ぐ
ハードウェアを作ろうとしないでください。
1: +5v (power)
2: Clock
3: Latch
4: Data1
5: Data2
6: IOBit
7: Ground
何も接続されていない時は、Data1, Data2 の読み込みデータが 0 になる。
***ジョイパッド [#i435e246]
ジョイパッド (普通のコントローラ) は、 Data1 から 16ビットのデータを返す。
ラッチされる度に順番はクリアされる(?)
byetUDLRaxlr0000
b/y/a/x/l/r はボタンの記号と同じ。
'e' はセレクト、 't' はスタート。
U/D/L/R は十字キー。
普通のコントローラでは、十字キーの上と下、左と右は同時に押せなくなっている。
いくつかのゲームでは、これらの組み合わせで同時に押した場合、
クラッシュするか、動作がおかしくなる。
Data2, IOBit は接続されていない。
***マウス [#be46b6b5]
マウスは、Data1 から 32ビットのデータを返す。
00000000rlss0001 YyyyyyyyXxxxxxxx
l/r はマウスのボタンを表す。
'ss' はスピードビットで、ラッチがアクティブになっていた間のクロック数を mod 3 して返す。
Y/X は方向ビット。セットされていたら上または左。
yyyyyyy/xxxxxxx はその方向への距離。
Data2, IOBit はたぶん接続されていない。
***スーパースコープ [#i4e03d51]
スーパースコープは Data1 から 8 ビットのデータを返す。
データ列 :
fctp00on
'f' は Fire、 'c' は Cursor、 't' は Turbo、
'p' は Pause、 'o' は Offscreen、'n' は Noise を指す。
スーパースコープには 2 つのモードがある。
***ガンコントローラ (Justifiers) [#o393b389]
Justifier は Data1 から 48 ビットのデータを返す。
32 ビットのデータの後に 16 個の 1 を返す。
しかし、これは何か分からない。
データの順番 :
0000000000001110 01010101TtSsl000 1111111111111111
T/t はプレイヤー 1 / 2 のトリガーの状態を表す。
S/s はプレイヤー 1 / 2 のスタートボタンの状態を表す。
'l' は、どちらの銃が IOBit に接続されているのかを表し、
1 は銃 1 を、 0 は 銃 2 を指す。
'l' は、銃 2 が接続されていない時は反転する。
IOBit は スーパースコープのように使う。
しかし、2 個の銃が 1 つのポートに接続され、
どちらの銃が IOBit に接続されているかは
Latch の度に変更される。
Justifier は Latch の前にトリガーが引かれるのを待たない。
電子銃が検知される度に Latch される。
Justifier がスクリーンに向いているか向いていないかを決定するために
[[0x213F>IO ポート (メイン)/0x213F]] のビット 6 が使用される 。
Data2 はたぶん接続されていないが、確実なことは分からない。
***マルチタップ (MP5) [#a36d3ed6]
MP5 をSNESのコントローラポート (通常、ポート 2) に接続し、
4 つのコントローラをそこに接続することができる (2 ~ 5)。
IOBit が 1 の場合、Clock はパッド 2 と 3 を通る。
Data1 はパッド 2 の Data1 へ、
Data2 はパッド 3 の Data1 へそれぞれ接続される。
IOBit が 0 の場合、パッド 4 と 5 を使う。
どちらの場合も、Latch は全てのポートに通される。
たぶん、 IOBit は全てに通されることはない。
Clock は IOBit で選択されたところにのみ信号を通す。
最初の 2 つのパッドのみ読み込むことができ
(自動ジョイパッド読み込みもそのようにする)、
IOBit を切り替えた時に他のパッドを手動で読み込むことができる。
たくさんのゲームで、3 人より多くのプレーヤーの処理の時に
このようなことが行われている。
MP5 はポート 1 にも接続することができるが、
IOBit のセット用に、 [[0x4201>IO ポート (メイン)/0x4200-0x421F#p4201]] のビット 6 をビット 7 の代わりに
使用する必要があり、ポート 1 のレジスタを
ポート 2 の代わりに使用する必要もある。
2 つの MP5 を使用すると、8 人用のゲームを作ることもできる。
Latch がアクティブな時、Data2 からは 1 が、 Data1 からは 0 が読み込まれる。
MP5 の存在を検出するためにこの動作が使われることがある。
MP5 によって、この動作がオーバーライドされる。
IOBit が 0 から 1 に移行する場合、MP5 がすぐに反応しない。
2 と 3 を読んでから、4 と 5 を読むようにする方が、
逆の場合よりも良いだろう。