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 ポート (メイン)/0x2100-0x2143#p213F]] のビット 6 が使用される 。
[[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 を読むようにする方が、
逆の場合よりも良いだろう。

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS