I/Oポート
概要
メガドライブには3つのI/Oポートがあり、
ハードウェア的には3つとも同じ機能が実装されています。
- I/Oポート1 - 1Pコントローラ端子 (9ピンのD-SUBに類似したオスコネクタ)
- I/Oポート2 - 2Pコントローラ端子 (9ピンのD-SUBに類似したオスコネクタ)
- I/Oポート3 - Ext端子 (9ピンのD-SUBに類似したメスコネクタ)
※この項はI/Oポート全般についての説明なので、
ジョイパッドやマウス等のI/Oポートに接続された各デバイスの具体的な読み取り方については、
それぞれの項を参照して下さい。
※Ext端子とはメガCDを接続する拡張バスの事では無く、
MD1の背面に存在する端子です。
この端子に接続するアクセサリとしてメガモデムがあります。
MD2にはこの端子は存在しません。
尚、I/Oポート3のみメスコネクタですが、3ポートともピンアサインは同じです。
I/Oポートに接続されるデバイス
ジョイパッド以外に接続されるコントローラ及びデバイスとして下記が存在します。
- モデム(Ext端子)
- プリンタ
- マウス
- メガアンサーのリモコン
- 光線銃
I/Oポートのピンアサイン
各I/Oポートは9ピン端子で、D0〜D6 までの7本の入出力ピンがあります。
5.+5V | 9.D5 |
4.D3 | 8.GND |
3.D2 | 7.D6 |
2.D1 | 6.D4 |
1.D0 |
またD0〜D7ピンには、下記の別名が存在します。
5.+5V | 9.D5 = TR |
4.D3 = RIGHT | 8.GND |
3.D2 = LEFT | 7.D6 = TH |
2.D1 = DOWN | 6.D4 = TL |
1.D0 = UP |
D0〜D6ピンの機能
これら7本(7bit)の入出力ピンは全て汎用デジタル入出力ピンとして使用出来ます。
汎用デジタル入出力ピンとして使用する際、ピン1本毎に入力か出力かを選択可能
です。またD5はシリアルデータ受信ピンとして、D4はシリアルデータ送信ピンとして
も使用出来ます。シリアル通信速度は送受信共に300bps〜4800bps、受信エラー検出
機能があります。
各I/Oポートに関するアドレス
これらのアドレスにアクセスする際はZ80をHALTして下さい。
アドレス | シンボル | 説明 |
0xA10003 | DATA | 各ピンの入出力データ (I/Oポート1) |
0xA10005 | DATA | 各ピンの入出力データ (I/Oポート2) |
0xA10007 | DATA | 各ピンの入出力データ (I/Oポート3) |
0xA10009 | CTRL | 各ピンの入出力方向コントロール (I/Oポート1) |
0xA1000B | CTRL | 各ピンの入出力方向コントロール (I/Oポート2) |
0xA1000D | CTRL | 各ピンの入出力方向コントロール (I/Oポート3) |
0xA1000F | TxDATA | シリアル送信データ (I/Oポート1) |
0xA10011 | RxDATA | シリアル受信データ (I/Oポート1) |
0xA10013 | S-CTRL | シリアルコントロール (I/Oポート1) |
0xA10015 | TxDATA | シリアル送信データ (I/Oポート2) |
0xA10017 | RxDATA | シリアル受信データ (I/Oポート2) |
0xA10019 | S-CTRL | シリアルコントロール (I/Oポート2) |
0xA1001B | TxDATA | シリアル送信データ (I/Oポート3) |
0xA1001D | RxDATA | シリアル受信データ (I/Oポート3) |
0xA1001F | S-CTRL | シリアルコントロール (I/Oポート3) |
制御方法
各入出力ピンが入力か出力かを設定する為に、CTRLアドレスに下記の値を書き込みます。
I/Oポートに接続したデバイスがTHピン割り込みを行う場合は、割り込みの準備を終えてからINTを1にします。
(コナミの光線銃で利用されていた様です)
bit 7 6 5 4 3 2 1 0 INT PC6 PC5 PC4 PC3 PC2 PC1 PC0 INT THピン割り込み, 0 = 有効, 1 = 無効 PCx 各ピンの入出力方向, 0 = 入力, 1 = 出力
次にS-CTRLアドレスに下記の値を書き込みます。
S-CTRLはシリアル通信に関する設定なので、シリアル通信機能を使わない場合は
S-CTRLに0x00を書き込むだけで良いです。
RERR, RRDY, TFUL は読み取り専用なので、S-CTRLに値を書き込む時は
これらのビットは1でも0でも構いません。
bit 7 6 5 4 3 2 1 0 BPS1 BPS0 SIN SOUT RINT RERR RRDY TFUL 書き込みビット BPSx ボーレート, 0 = 4800bps, 1 = 2400bps, 2 = 1200bps, 3 = 300bps SIN シリアル受信モード, 0 = 無効, 1 = 有効(D5ピンがシリアルデータ受信ピンになる) SOUT シリアル送信モード, 0 = 無効, 1 = 有効(D4ピンがシリアルデータ送信ピンになる) RINT 受信割り込み, 0 = 無効, 1 = 有効 読み取りビット RERR 受信エラー, 0 = 正常, 1 = 受信失敗 RRDY 受信データの状態, 1 = 受信待機中 TFUL 送信データの状態, 0 = 送信可能, 1 = 送信中
汎用デジタル入力ピンに設定したピンの入力状態を読むにはDATAアドレスの該当ビットを読み込み、 汎用デジタル出力ピンに設定したピンの出力状態を設定するにはDATAアドレスの該当ビットを書き込みます。
bit 7 6 5 4 3 2 1 0 - D6 D5 D4 D3 D2 D1 D0 書き込みビット (出力に設定したピン) Dx 各ピンの出力, 0 = Low(GND), 1 = High(+5V) 読み取りビット (入力に設定したピン) Dx 各ピンの入力, 0 = Low(GND), 1 = High(+5V)
ハードウェア
TRピンとTHピンは330Ωの抵抗、次にEMIフィルターを通してI/Oコントローラーに繋がっています。
その他のピンはEMIフィルターを通してIOコントローラーに繋がっています。
この事から、I/Oポートに接続するハードウェアを自作する際は、
TRピンとTHピン以外を出力にしない方が良いでしょう。
もしTRピンとTHピン以外も出力にしたいのなら、
自作ハードウェアが繋がっている事を認識する為のシーケンスを用意して、
パッドやマウス等が繋がれて無い事が確認出来てから出力にして下さい。