I/O領域のアクセス

WOBモニタでI/O領域(アドレス3000~3999)をアクセスする場合、通常のメモリ領域とは少し異なる動作となります。

アクセス単位

メモリアドレス データ
3032 00
3033 00
3034 00
3035 50

例で説明します。ディスプレイの明るさ(輝度)を制御するポートはメモリアドレスの3032番地です。3032 Addr Set としても「00」が読み出されるだけで輝度(0~75、デフォルトでは50)は出てきません。Read Incr を3回押して3035番地を表示して初めて「50」という輝度らしき数値が見えます。

I/O領域は1つのポートで4バイト分(10進8桁分)の長さがあるため、輝度データは00000050すなわち50ということになります。ここまでは特に異なる動作ということではありません。

このポートに別の数値、たとえば70という数を書いて輝度を上げたいと思ったとします。3035番地に70を Write Incr すればいいのでは?それでもOKです。実際に輝度が上がります。

では先頭の3032番地に70書き込んだらどうなるのか。70000050を書き込むことになりはしないか。実はこの場合も3035番地に70を書いたのと同じ動作になるようにしてあります。もう少し正確に言えば、3032番地から4バイト分の連続した領域に4バイト分の数字を同時に書き込んでいるのです。このポートの場合は3032~3035番地のどこを指定しても「3032番地から4バイト分」と解釈されます。つまり、3032番地に70を書くと、3032番地からの4バイト分の領域に00000070を書いたことになるのです。

また、Write Incr 後のアドレスは通常は+1されて次のアドレスを示しますが、この場合は3032番地から+4されて3036番地となります。

書き込み専用ポート

I/O領域の表中、「アクセスタイプ」の列を見ると、「R」、「R/W」、「W」という3つのタイプがあるのがわかります。それぞれ「読み出し専用」、「読み書き可」、「書き込み専用」なのですが、WOBモニタでの動作の違いをまとめると下記のとおりとなります。

アクセスタイプ 意味 ディスプレイ表示 データ書き込み時の動作
R 読み出し専用 通常のメモリと同じ 書き込みを無視
R/W 読み書き可 通常のメモリと同じ 出力ポートに書き込み
W 書き込み専用 データ表示が「--」 出力ポートに書き込み