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 | 書き込み専用 | データ表示が「--」 | 出力ポートに書き込み |