MSX Datapack wiki化計画

Appendix A.5 拡張I/Oポートの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{include unfinished_page}}

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[A.4 I/Oマップ|Appendix A.4 I/O マップ]]                                          ,{BSIZE:0|RIGHT}[[A.6 スーパーインポーズ|Appendix A.6 スーパーインポーズ]]                        →

!!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 ハードウェア例

{{svg 図A.9.svg}}
'''図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'''
,{t},{BSIZE:2 0}
,{c UD},{BSIZE:2 0 1 0}
,{c S8},{SIZE:80}
,{c S10},{SIZE:120}
,{c NO},{BSIZE:0}
,{c},{UD|S10},{UD|SIZE:400}
,メーカーID,メーカー名
,{c},{NO},{NO}
,1,アスキー
,2,キヤノン
,3,カシオ計算機
,4,富士通
,5,富士通ゼネラル
,6,日立製作所
,7,京セラ
,8,松下電器産業
,9,三菱電機
,10,日本電気
,11,ヤマハ
,12,日本ビクター
,13,フィリップス
,14,パイオニア
,15,三洋電機
,16,シャープ
,17,ソニー
,18,スペクトラビデオ
,19,東芝
,20,ミツミ電機
,21,テレマティカ
,22,グラディエンテ
,23,シャープドブラジル
,24,GOLD STAR
,25,DEAWOO
,26,Samsung
,27,
,〜,予約
,127,

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[A.4 I/Oマップ|Appendix A.4 I/O マップ]]                                          ,{BSIZE:0|RIGHT}[[A.6 スーパーインポーズ|Appendix A.6 スーパーインポーズ]]                        →