あなたCPUなんか創ってどうするのかしら?! 第1章 第2節

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

2019/4/14
技術書典6
池袋サンシャインシティ 文化会館ビル2F 展示ホールD「う11」

第1章 第2節 I/OポートおよびI/O命令の削除

TD4EX4ではTD4EX3と同様にI/Oポートをデータバスに転用し、そこにRAMを接続します。そのためCPU本体からはI/Oポートが無くなり、入出力機能はI/Oユニット内のテンキー入力ポートと7セグメントLED出力ポートに変更となります。

これは一般的なCPUと全く同じ構成です。

第1章 第2節 第1項 なぜI/Oポートが不要なのか

TD4EX4の本体からI/Oポートを削除したのには理由があります。

邪魔だからです。

そもそも一般的なCPUはI/Oポートを内蔵していません。例えばZ80にはI/O命令はありますが、I/Oポートはありません。Z80 PIOのようなI/OポートはCPUの外部に存在し、バスによってCPUに接続されるのが普通です。TD4EX4もその構成に従います。

例外が2つほど。

インテルの4004には1ビットの入力ポートがあります。左図のTestと書かれたピンがそれです。これはプリンタ制御回路とのタイミング調整のために用意されたポートで、割り込みの代用だそうです。

図3 Intel 4004のピン配置
図3 Intel 4004のピン配置

4004はトランジスタ数削減のために割り込み機能が無く、その代わりとして、この1ビットの入力ポートが存在します。従ってこれを入力ポートと呼ぶのは適切とは言えないでしょう。

もう一つの例外は同じくインテルの8085です。こちらは1ビットの入力ポートと出力ポートが1個ずつあります。左図のSIDとSODというピンがそれです。

図4 Intel 8085のピン配置
図4 Intel 8085のピン配置

8085には4004とは違って割り込み機能がありますので、これらの入出力ポートは割り込みの代用ではなく、正真正銘のI/Oポートです。しかし普通であれば入出力には8255Aなどのパラレルインターフェイスを使えば良い筈なので、この2個の入出力ポートが何のために存在しているのかは不明です。

なお、Atmel社のAVRシリーズやMicrochip社のPICシリーズのような組み込み系のCPUにもI/Oポートが内蔵されているように見えますが、それらはROMやRAMやI/OポートをCPUと一緒にワンチップ化したものであり、チップの内部ではCPUが独立した回路として存在します。CPUの内部にI/Oポートが組み込まれている訳では無いので、構造としてはZ80等の普通のCPUと同じです。

第1章 第2節 第2項 I/O命令は必要か?

筆者は6809からアセンブラの勉強を始めた人間なので、I/O命令を使わないメモリマップドI/Oには慣れています。しかしZ80や8086からアセンブラを始めた人にはI/O命令を使って入出力を行うのが普通でしょう。ではTD4EX4にI/O命令は必要でしょうか?

TD4の場合、CPU本体にI/Oポートが内蔵されている上、RAMも存在しません。そのためメモリマップドI/Oを使うことは出来ませんでした。I/Oポートへのアクセスは専用のI/O命令で行うしかなかったのです。

ところがTD4EX4ではRAMが存在し、バスも存在します。そのためI/OポートをメモリマップドI/Oにして、I/O命令を削除しても全く問題ありません。

そこで筆者はI/O命令を不採用としました。

TD4EX4でI/O命令を採用しない理由は、IC数の削減ももちろんありますが、最大の理由は命令数そのものの削減です。次節で述べますが、TD4EX4には事実上8種類の命令しか搭載できないため、I/O命令を採用する余裕がありません。そのため、筆者的にこだわりのないI/O命令は不採用にしました。