CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

I/Oへのバイトアクセス

イメージ 1

8ビット幅のI/Oをアクセスするプログラムを書いていると
どうも腑に落ちない点がありました。
8個のLEDがつながっているパラレル出力ポート74HC564はデータバスの下位D0-D7が接続されています。
ポートのアドレスは0xE00000-0xE3FFFFのイメージがあるのでどこでも可ですが、
とりあえず先頭番地にデータ(例えば0x55)を出力するには

move.b 0x55,0xE00000

となり、これで実際にLEDが点灯します。
でもこの場合バス上の有効なデータはブリッジを通してD8-D15に乗っているんじゃないかと。
ただし実際に使われたデータはD0-D7の方なわけです。

問題なのは偶数番地に対して出力したデータが8ビット下位ポートに書けたことで、
これはパラレル出力ポートのチップセレクトに/LDSを含めていなかったからでした。
CPLDを変更してチップセレクトに下位(奇数アドレス)データバイト有効を示す/LDSで
ANDを取ったところ

move.b 0x55,0xE00000 ではアクセスできなくなり

move.b 0x55,0xE00001 と奇数番地へのアクセスで出力できるようになったのでこれが正解です。

0でなく1から始まるというのが少し気持ちが悪いですが、インテルアーキテクチャに毒されている
からかもしれません。