[ コラム:偶数アドレスと奇数アドレス ]

I/Oアドレスにおいて、なぜ偶数アドレスと奇数アドレスは区別されているのでしょうか?
8086系では、8ビット(1バイト)幅でもアクセス可能とする為、0番地から順に16ビットバスの下位、上位の順で、別々にアドレスを割り当てています。
この、16ビットバスの下位8ビットに割り当てられたアドレスを偶数アドレス(必ず0,2,4,6,8,A,C,E:偶数になる) 、上位8ビットに割り当てられたアドレスを奇数アドレス(必ず1,3,5,7,9,B,D,F:奇数になる)といいます。
8ビット転送命令系で偶数番地をアクセスした時には、16ビットバスの下位8ビットだけが使用され、奇数番地をアクセスした時には、上位8ビットだけが使用されます。16ビット転送命令時を含めた各種データ転送型式を下図に示します。

ところで、CPUをサポートする各種LSIは、8ビットCPU時代のなごりやパッケージの都合(LSIパッケージ端子本数はコストに大きな影響を与えます)から、データバスは8ビットのままです。
この様なLSIの中に2つのポートがある場合、これを偶数、奇数と連続したアドレス(例えば、0000番地と0001番地)に割り当てる事はできるでしょうか?

不可能な事ではありませんが、ハードウエアが、複雑になります。
まず、アクセスに応じてLSIのデータをデータバスの下位にのせるか上位にのせるか切り換えなくてはなりません。
また、CPUは、偶数にアクセスするか、奇数にアクセスするかの区別として、A0信号を出力していますが、同時にBHE(バス・ハイ・イネーブル:バスの上位が有効である事を示す信号)を出力し、バイトアクセスとワードアクセスを区別しています。(図参照)。
従って、A0信号を単純にLSIのアドレス信号に入力する事はできないのです。
以上の理由によって、一般に8ビットデータバスのLSIは、偶数アドレスか奇数アドレスのどちらかだけに連続して割り付けられます(例えば4アドレス必要な場合、0000番地、0002番地、0004番地、0006番地の様に) 。
PC-9801のI/Oポートアドレス表において常に最下位が0(偶数アドレス)か1(奇数アドレス)であるのはこのためです。
本ボードの場合、A/DコンバータLSIは変換結果を12ビットまとめて出力しますから連続アドレスに割り当てる事ができます(16ビット設定) が、他のボードと併用する場合を考え、偶数のみ又は、奇数のみの設定も可能となっています。


なお、本ボードを16ビットアドレスに、設定した時でも、8ビット転送命令で上位と下位を別々に読み出す事が可能です。
機械語プログラム用に16ビットアクセスに設定したボードを、8ビットアクセスしかできないBASICでテストする時など、ジャンパを設定しなおす必要はありません。

戻る