この世の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に書き込みます。