今ではx86、x64とも呼ばれるマイクロプロセッサのアーキテクチャの始まりは、1972年の8008というマイクロプロセッサである。この8008をベースに、汎用コンピュータとして作られたのが8080である。この8080から本格的なマイクロコンピュータの開発が始まったといってもいいだろう。
8080と8008には、バイナリレベルの互換性はないが、アセンブラソースレベルでの互換性を持てるように、レジスタの名前や用途が決められた。8080を成功モデルとして、後継の16ビットプロセッサ8086でも、汎用レジスタの類似しており、それは、64ビット CPUでも継承されている(図01)。
インテルの最初のマイクロプロセッサ4004は、1969年に日本のビジコン社の依頼で開発が始まり、1971年にインテルが自社製品として発表した。8008も同じく、外部の会社から製造を委託され、1969年に開発が始まり、4004と8008は並行して開発されていた。
1969年、CTC(Computer Terminal Corporation)社は、Datapoint 2200と呼ばれる次世代製品に利用するCPUのLSI化を、インテルとTI(Texas Instruments)に依頼した。TIはTMX-1795、インテルは1201という社内名称で開発を開始する。最初にサンプルを製造したのはTIだった。しかし、TMX-1795は、CTC社の要求条件を満たさなかったため採用されなかった。
CTC社は、LSIの開発が遅れたため、TTLを使ってプロセッサを設計した。前世代機であるDatapoint 3300の発熱問題は、電源をスイッチング電源にすることで解決したため、あえて、性能が劣るLSIを使って低消費電力化を行う必要はないと考えた。
CTC社は、インテルに製造を委託した1201の知的財産権を譲渡する代わりに、5万ドルの契約金を相殺させることにした。
インテルは、1201を自社製品として外販することを想定しており、1970年10月25日のElectronic Design誌にCTC社のDatapoint 2200(1970年6月に発表済みだが出荷は1971年)向けに開発中のマイクロプロセッサについて記事が掲載された。
Datapoint 2200のアーキテクチャとは?
Datapoint 2200には、初期のV1、改良型のV2、2つのアーキテクチャがある。このうち、インテルの8008のベースになったのはV1のほうだ。あいにくとDatapoint 2200V1のレジスタ構成図は入手できなかったが、アーキテクチャを記述したCTC社の文書(図02)は入手できた。
-

図02: Datapoint 2200V1のレジスタ構成に関する文書。アキュムレータAと汎用レジスタB、C、D、EおよびH、Lレジスタ、プログラムカウンタPなどの記述がある
DATAPOINT CORPORATION Datapoint 2200 REFERENCE MANUALより引用
演算を行うアキュムレータAと汎用レジスタとしてB、C、D、E、H、Lの7つの8ビットレジスタがあり、このうちHとLは組み合わせて16ビットレジスタMとして扱え、メモリアドレスの指定に利用できる。スタックは、ハードウェアでCPU内に置かれ15段(幅は13ビット)あった(8008では14ビットで7段)。Datapoint 2200V1では、プログラムカウンタは、13ビット(メインメモリ空間は8キロバイト)である。プログラムカウンタとハードウェアスタックの幅が同じで、原則、スタックには、CALL命令や割り込み発生時に戻りアドレスが記録されるのみで、汎用レジスタの退避先には利用できない。
図には入れてないが、フラグは、C(キャリー)、Z(ゼロ)、S(サイン)、P(パリティ)の4つである。これらは、演算結果で設定されるのみで、プログラムから設定することはできず、条件付き命令(ジャンプ、コール、リターン)の挙動がフラグ状態により決まる。
8008は、このアーキテクチャをわずかに改良し、DIP 16ピンだったパッケージをDIP 18ピンとして製造された。これはSEIKO S-500という「プログラム関数電卓」に採用された。資料によっては、8008はS-500を開発した精工舎とインテルで共同開発したといった記述があるが、なんらかのフィードバックが精工舎からインテルにあり、これに対応した可能性もある。8008を使ったマイクロコンピュータシステムはいくつか開発されたことはわかっている。しかし、8008の仕様では、制限が大きく、たとえば、メモリ空間が最大16キロバイトに制限されている、割り込み関連の回路を外部に持つ必要がある。スタックが戻りアドレス専用で、汎用レジスタの退避先に利用できないといった問題があった。今から見れば、命令が不十分でプログラミングがしにくく、メモリ空間の大きさなどが制限になって、複雑なソフトウェアを作るのには向いていない。
こうした問題を解決したのが1974年の8080である。8080では、スタックをメインメモリに置き、スタックポインタで管理するなど「近代的」なCPUの仕様が取り込まれた。スタックには、CALL命令などの戻りアドレスだけでなく、汎用レジスタの値も待避できるようにした。こうして、サブルーチンにスタックを介して引数を渡すことやスタック上にローカル変数を置くことも可能になった。
汎用レジスタもBC、DEを対にして16ビットレジスタとして扱えるようにする、メモリ空間は、16ビット(64キロバイト)になった。また、さまざまな演算命令を追加し、一部の処理はAレジスタ以外にも適用可能とした。また、機械語のビットパターンは8008と互換性がない。
しかし、レジスタのネーミングは、8008のものを踏襲し、レジスタの構造も大きく変わらない。これは、8008用に書かれたアセンブラソースコードをそのまま利用できるようにするためだ。そのための最低条件は、アセンブラニモニック上で、元のプロセッサの命令を、機械的に新しいプロセッサの命令に対応させられることだ。
1974年あたりから、インテルの4004の成功を知った半導体メーカーがマイクロプロセッサ製品を投入しはじめた。MotorolaのMC6800、MOS Technologyの6502やZilogのZ80などだ。特に1976年に発表されたZ80は出荷が始まると、多くのマイクロコンピュータ、ホームコンピュータに採用された。
8008アーキテクチャの元になったDatapoint 2200も機能を拡張し命令数を追加し、汎用性を向上させたV2アーキテクチャを開発している。このV2で特徴的なのは、「Alpha Mode」と「Beta Mode」の2つのモードがあり、それぞれにアキュムレータと汎用レジスタ、演算フラグがあることだ(図03)。これは、Z80のいわゆる「裏レジスタ」を彷彿とさせる。スタックはCPUに内蔵されていたが、16ビットとなり、レジスタの待避にも利用できるようになった。
-

図03 Datapoint 2200V2では、ALPHA MODEとBETA MODEの2つがあり、両方にレジスタA~E、H、Lがある。ALPHA MODEとBETA MODEは、命令で切り替えることが可能
DATAPOINT CORPORATION Datapoint 2200 REFERENCE MANUALより引用
さらに1978年には、インテルは16ビット CPUである8086を発表する。8086でも、88080とのアセンブラソースコードレベルの互換が維持された。メモリ空間を16ビットから20ビットに拡大するためにセグメントレジスタが追加され、16ビットの汎用レジスタ(8080のレジスタペアと同じ)と組み合わせて20ビットのメモリアドレスを生成した。
また、8086では、2本のインデックスレジスタ(SI、DI)が追加されているが、これは、Z80のインデックスレジスタIX、IYと同じ。このため、Z80用のアセンブラソースコードは機械的に変換することで8086でも利用できた。MS-DOSの初期のバージョンには、そのための変換ソフトウェアTrans.comが付属していた。
今回のタイトルネタは、1967年のテレビドラマ「ウルトラセブン」の第3エピソード「湖のひみつ」から。当時は気がつかなかったが「湖」は漢字なのに「ひみつ」と開いているのは、字面のバランスを考えたためか。

