この世のCPUを食べ尽くすのだ! 第2章 第5節

~あんたCPUなんか創ってどうするのよ?! Vol.3~

2018/10/8
技術書典5 け39

第2章 第5節 CPUとI/Oユニットの接続方法

第3節で述べたようにRAMはCS端子とWE端子によって制御しますが、このうちCS端子はCPUからは直接制御される訳ではありません。なぜならCPUから入出力回路にアクセスする場合があるからです。

TD4EX3はメモリマップドI/Oを採用しますが、これはCPUから見るとRAMとI/Oポートが平等に見えます。アドレスバスは4ビットなのでアドレス空間は16語ですが、このうちどこがRAMでどこがテンキーでどこがLEDなのかをCPUでは判断できません。これは入出力回路の設計者が決めることであって、CPUは関知しないからです。

そのためCPUとI/Oユニットの間では以下の信号で送受信を制御します。

READ信号
I/Oユニットに対するデータ送信要求です。負論理なので送信要求時には0にします。
RAMからデータを読み出すのかテンキーからの入力を行うのかは、アドレスバスに指定された値によってI/Oユニットが判断します。アドレスバスが0~Dの場合はRAMからデータを読み出してCPUに送信し、アドレスバスがEの場合にはテンキーからの入力を行ってCPUに送信します。そして値がFの場合には何もしません。
WRITE信号
I/Oユニットに対するデータ受信要求です。これも負論理なので受信要求時には0にします。
READ信号と同様にアドレスバスによって受信対象が指定され、アドレスバスが0~Dの場合はRAMにデータを書き込みます。アドレスバスがEの場合にはテンキーおよびLEDに対するデータ出力を、そしてアドレスバスがFの場合にはLED番号の指定となります。

CPUがIN命令を実行すると、命令コードの下位4ビットがアドレスとしてアドレスバスに出力され、READ信号が0になります。そしてI/OユニットはRAMまたはテンキーからデータを読み出し、データバスに出力します。

CPUがOUT命令を実行すると、IN命令と同様に下位4ビットがアドレスバスに出力され、データバスにはデータが出力され、そしてWRITE信号が0になります。そしてI/OユニットはデータをRAMまたはテンキーまたはLEDに書き込みます。