MSX Datapack wiki化計画

Appendix A.5 拡張I/Oポート

 A.5.1 概要

 従来のMSXの仕様では、I/Oポートの00H〜3FHまでをユーザー領域、40H〜FFHを周辺機器用として割り当てていました。しかし、将来I/Oポートを希望する周辺機器すべてに別々の番地を割り当てることが不可能になると予想されます。
 そこで、40H〜4FHまでのI/Oアドレスに割り当てられたデバイスは、選択されたときだけアクセスできるような構造にして、この領域を複数のデバイスが共用できるようにします。
 40H番地にデバイスの種類を表す特定のデータが書き込まれているときのみ、そのデバイスが40H〜4FHのI/Oポートを使います。40H番地に別のデータが書き込まれると、そのデバイスはI/Oポートの使用を中止して、バスバッファをCPUから切り離します(データバスからのリード動作は禁止しなくてもかまいません)。

 A.5.2 ハードウェア例


図A.9 拡張I/Oポートに接続するデバイス

 I/Oポートの40H番地に書き込まれた値が、そのデバイスのデバイスIDと一致すれば、CPUのバスにデバイスを接続します。デバイスIDが異なれば、CPUのバスからデバイスを切り離します。初期状態では、デバイスは切り離されています。
 すでにデバイスが有効になっているときに、CPUが40H番地を読むと、デバイスIDの反転したデータを返します。これは、例えば割り込みで動作するプログラムが使用中のデバイスを知るために必要です。

 A.5.3 デバイスID

 デバイスIDには、0〜255までの数値を割り当てることができます。しかし、デバイスIDの反転を読んで、デバイスの有無を検出するときの都合で、0と255は使用しません。1〜127までは、拡張BIOSコールと同様にメーカーIDとして割り当てます。128から254までは、デバイスの種類に応じた番号を割り当てます。
 原則として、特定の機種だけで使われる内蔵デバイスにはメーカーIDを、複数の機種に接続可能なデバイスにはデバイスの種類の番号を使います。
 また、Z80CPUはI/O空間に16ビットアドレスを持っているので、将来さらに拡張が考えられるIDでは、上位8ビットもデコードして、16ビットでアクセスすることを推奨します。特に、メーカーIDで接続される装置は、16ビットでアクセスすることで、各IDごとのアドレス空間を256倍にすることができ、将来の拡張に耐えることになります。

表A.2 拡張I/OポートのメーカーID

メーカーIDメーカー名
1アスキー
2キヤノン
3カシオ計算機
4富士通
5富士通ゼネラル
6日立製作所
7京セラ
8松下電器産業
9三菱電機
10日本電気
11ヤマハ
12日本ビクター
13フィリップス
14パイオニア
15三洋電機
16シャープ
17ソニー
18スペクトラビデオ
19東芝
20ミツミ電機
21テレマティカ
22グラディエンテ
23シャープドブラジル
24GOLD STAR
25DEAWOO
26Samsung
27
予約
127