セガタップ
- 公開日: 2020/07/27
- 更新日: 2020/10/10
概要
1993年4月(日本国内)に登場したメガドライブ用のマルチプレイヤー用コントローラ分配器。コントローラ端子1つに付き4つのコントローラを接続できるようにするものである。日本では「セガタップ」(型番HAA-2652)、北米では"Team Player"(型番MK-1654)、欧州では"4-Player Adaptor"(型番MK-1654-50)という名前で販売された[1]。分配器本体には、A〜D、MULTIを選択するスライドスイッチがついており、スイッチがA〜Dを指している状態ではコントローラ切替器としても使える。
北米及び欧州ではケーブルが二本ついている後期バージョンがある(型番は北米がMK-1647、欧州がMK-1647-44)。後期バージョンは4 Way Play[2]というサードパーティー製の分配器と互換性をもたせたものである[3]。
ハードウェア特性
以下の説明では、前期版のみのモードを「セガモード」、後期版で追加された4 Way Play互換モードを「EAモード」とする。セガモードについてはRaphael Assenat氏による説明を、EAモードについてはHugues Johnson氏による説明 を参考にしている。メガドライブ本体に差し込む端子のピンアウトは以下の通り。
pin# |
Sega Mode |
EA Mode (Controller 2) |
---|---|---|
1 |
Data Bit 0 (in) |
Command Bit 0 (out) |
2 |
Data Bit 1 (in) |
Command Bit 1 (out) |
3 |
Data Bit 2 (in) |
Command Bit 2 (out) |
4 |
Data Bit 3 (in) |
Command Bit 3 (out) |
5 |
VCC |
|
6 |
Data Ready (in) |
Command Bit 4 (out) |
7 |
Scan Start/End (out) |
Command Bit 6 (out) |
8 |
GND |
|
9 |
Clock (out) |
Command Bit 5 (out) |
読み取り手順
セガモード
セガモードでの読み取り手順は以下の通り。
コントローラ端子のピン7と9を出力に、ピン1〜4、6を入力に設定する
ピン7と9をHレベルにする
ピン7をLレベルにする
ピン9をLレベルにする
ピン6がLレベルになるまで待つ
ピン1〜4を読み取る
ピン9をHレベルにする
必要な回数だけ4.〜7.を繰り返す
ピン7をHレベルにする。この時点で4端子につながったコントローラの状態が得られる
再度コントローラの状態を得るには、2.〜9.を再び繰り返す
得られるデータのフォーマットは以下の通り
8 bit |
4bit x 4 |
0, 8, or 12bit x 4 |
---|---|---|
$FF(fixed) |
Controller Type |
Status of Each Controller |
コントローラータイプは、各端子につながっているコントローラの種類を指す。$Eなら6ボタンコントローラ、$Fなら標準コントローラ、$0ならコントローラの接続なし。つまり、セガモードで使えるコントローラは6ボタンコントローラか標準コントローラのみである。コントローラ切替器として使う場合はこの制限はなく、マウスなども接続可能である。
コントローラのステータスは、以下の通り。コントローラが標準コントローラの場合は3回目のデータ送信は省略される。コントローラがつながっていなければデータ送信そのものが省略される。例えば6ボタンコントローラが2つ、標準コントローラが1つ接続される場合は、コントローラのステータスは32ビット(送信8回)となる。
Transfer Order |
BIT |
|||
---|---|---|---|---|
3 |
2 |
1 |
0 |
|
1 |
UP |
DOWN |
RIGHT |
LEFT |
2 |
Button B |
Button C |
Button A |
START Button |
3 |
Button Z |
Button Y |
Button X |
MODE Button |
EAモード
EAモードでの読み取り手順は以下の通り。
コントローラ1端子の入出力指定を、「ピン7のみ出力、それ以外は入力」にする
コントローラ2端子の入出力指定を、「ピン1、2、7を出力、それ以外を入力」にする
コントローラ2に$7Cを出力[4]
コントローラ2端子の入出力指定を、「全てのピンを出力」にする
コントローラ2端子に$7Cを出力
コントローラ2端子に読み取るコントローラを指定[5]
コントローラ1端子を使って、6.で指定したコントローラの読み取りを行う
2.の設定だと$72と等価では?とも思うが参照サイトにそう書いてあるし、サンプルコードもそうなっているので
コントローラ1なら$0C、コントローラ2なら$1C、コントローラ3なら$2C、コントローラ4なら$3Cをコントローラ2端子に書き込み