前回は4ビットCPUが登場した背景について解説した。今回は世界最初のCPUである、Intelの「4004」の中身について解説しよう。ちなみにワンチップのマイクロプロセッサーをCPUと呼んだのはIntelである。他社の多くはMPU(micro processing unit)と呼んでいた。
4004の構成要素は、大きくALU(論理演算ユニット)、命令デコーダーといくつかのレジスター群から成り立っている。これはCPUとしてはごく一般的な構成だ。CPUの役割は、メモリーからプログラムを読み出し、そのプログラムに従ってなんらかの演算を施し、メモリーに書き込むなどの動作を行う。
具体的には、プログラムの実行位置を格納する「プログラムカウンター」に従って、CPUはメモリーから命令を読み出す。読み出した機械語の命令は、命令デコーダーで解釈されることによって、どの命令かが判別される。この命令に従ってALUが演算を行い、その計算結果を「アキュムレータ」と呼ぶ特別なレジスターに格納する。さらに間接アドレス参照のためにインデックスレジスターなどが使われる。
4004で特徴的なのは、その実装方法だ。4004のピン数はわずか16。最新のCore i7などに適用可能なLGA1156ソケットが、1156ピンであることを考えると、驚異的な少なさと言えるだろう。外部と情報をやり取りするのは、4本の信号線しかない。この4本とほかの制御信号線を組み合わせることで、ある時はデータの入出力に、ある時はアドレスの指定に使っている。
さらにアドレス空間の構成も現代的なメモリー用のアドレス空間とは別に、I/O関連のアドレスを別に備えている。このアドレスの指定にも使う。アドレス空間が小さいという理由もあるだろうが、I/Oへのアクセスとメモリーへのアクセスで別の命令を用意しているのは論理的には冗長である。メインフレームなどのコンピューターと異なり、周辺機器の制御を重視したのだろう。電卓向けという出自を反映したものと考えられる。
またRAMとROMのアドレスが独立している点も特徴的だ。つまり、RAMはあくまでもデータ領域、 ROMはプログラム領域という役割分担が明確になっている。「CM RAM 0/1/2/3」はファミリーLSIのRAMである「4002」のバンクを切り替えるようになっている。ROMから命令を取得する時は、必ず4ビットのアドレス出力を3回実施するので、合計12ビット=4096個のアドレスを指定できる。