PDP-8の源流
omiokone
CPLDP-8の製作過程でPDP-8のアーキテクチャに興味を持ち、影響を与えたと考えられる機種について調べた。ネット上や雑誌の古い機種に関する話はデタラメが多いが、筆者は全て当時のマニュアルを読んでいるので、技術的な部分は信用して頂いてよい。
PDP-5
PDP-8の前身であるPDP-5は8と比較して
- プログラムカウンタとしてメモリの0番地を使用(PDP-8はレジスタを持つ)
- 上により割り込みの開始番地が1番地(PDP-8は0番地)
- マイクロ命令で一部の命令の組み合わせができない
と違いはわずかである。PDP-8発売当初はFORTRANコンパイラなどPDP-5のソフトを利用していて、両者は同じ機種の違うモデルとも言える。以下では特に断らない限りPDP-5も含めPDP-8と呼ぶこととする。
PDP-5は2の補数の使用とMIT L-1に基づくlink(carry)bitにより倍長演算を効率よくできる(注)。これを含む特徴の多くは既に18bit機PDP-4で見られる。ただし没になった12bit制御装置DC-12も含めるとPDP-4と5は並行してアーキテクチャの検討が進んだと考えられる。
(注) 1950年代、もっぱら計算用途のため40bitぐらいの語長が普通で、多倍長演算自体が不要。たいていはoverflowだけでcarryフラグがなかった。また負数表現は1の補数も多かった。

PDP-5とDEC System Module (DECカタログより)
DECは論理回路モジュールを製造販売していて、ICがないか非常に高価だった時代、ディジタル装置の製作に使われていた。PDP-5はこのような標準モジュールで作られた。
原子炉の計測制御装置の開発依頼に対し、DECが制御方法の変更に柔軟に対応できる小型計算機を提案しPDP-5となった。この辺は電卓LSIの開発でIntel4004が生まれたのと似ている。
TX-0
TX-0はMITで1950年代後半に作られた18bit機。その目的は本格的なトランジスタ計算機を開発するための回路方式と大容量メモリのテストだった。命令は全て1ワードで16bitのアドレス指定をもつのは、アキュムレータのメモリへのストア、アキュムレータへの加算、アキュムレータのMSBによる条件分岐の3つしかない。もう1つの命令は下位16bitがそれぞれアキュムレータの操作や入出力の意味を持ち、それらを組み合わせるPDP-8のマイクロコード命令に相当するもの。基本的なメモリからのロードがなく、アキュムレータのクリアと加算で代用する。これはEDSACと同じ方式だが、EDSACの場合ストアが次のロードに備えてクリアするかで2種類あり命令数の削減になっていない。アキュムレータまわりの回路を簡略化する目的であろう。
TX-0もPDP-8も減算命令を持たず補数を作って加算し複数命令を要する。実際には純粋に減算が必要な場合は少なく、よく使う定数との比較では定数のほうを補数で用意すればよい。

TX-0 (MIT Memorandum 6M-4789-1 より)
TX-0はその後TX-2製作のためメモリを8Kワードに減らされ、命令数の多い"普通の"アーキテクチャに改造されて使われた。
CDC160
CDC160は大型機CDC1604を効率よく使うためのI/Oプロセッサとして開発されたが、12bit 1アキュムレータの簡易な機種それ自体に市場があることを示した。
当時はメモリを節約するため文字を英大文字と数字、記号に限り6bitで格納し6の倍数ワード長が普通だった。8の倍数が普及するのはIBMが1964年にSystem/360で8bitバイトにして以降である。6の倍数、1ワード命令で実用を考慮すると12bitが最小となる。親機のCDC1604が48bitで4倍なのも都合がよい。
CDC160は命令コードが6bit、アドレス指定部は6bitで4096ワードに足りない。これは全メモリを指定するのに十分なワード長のある従来の機種にない悩みとなる。CDC160は以下のアドレスモードを持つ。
- 上位6bitを0で埋めてデータとする
- メモリの先頭64ワードを指定
- プログラムカウンタ前方相対
- プログラムカウンタ後方相対
2と3は間接指定もできる。PDP-8では2つのモードに間接指定の計4種ある。PDP-8で2に相当するのはzero pageアドレスで、7bitのアドレス指定部で128ワードを直接扱える。アキュムレータしかないCDC160やPDP-8でメモリをレジスタのように使えるのは重要で、特にPDP-8では特定の8ワードを間接指定に使うと自動インクリメントされインデクスレジスタとしての便宜を図っている。
PDP-8は相対ではなく、プログラムカウンタの上位5bitとアドレス指定7bitを組み合わせる。128ワード境界を意識する必要があるが、実際には相対アドレスと比べそれほど不便ではない。

CDC160 (160 Computer Programming Manual より)
操作パネルの表示を一般的な2進表示でなく投影型数値表示器による8進表示としているのが、この時代のCDC機の特徴。
CDC160は大型機の付属品に過ぎなかったが、これ自体に需要があるのが分かり、単体のCDC160Aが作られた。
LINC
LINCは生体電気信号の計測処理など実験用途に作られ、これも12bit 1アキュムレータである。LINCで10bitのアドレス指定を持つ命令はSTC ADD JMPの3つのみでTX-0と似ている。ただし間接アドレスでは15ワードしかインデクスに利用できないが多数の命令を持つ。
LINCのSTC命令はアキュムレータをストア後自動的にクリアする。PDP-8ではさらに条件分岐命令でもビットを立てることで同時にクリアできる。これらによりロード命令なしでもプログラムステップ数が増えないようくふうされている。ただ実際にプログラムを書くと、継続して値を使いたい場合にストア後再ロードが必要だし、分岐やサブルーチンでアキュムレータの状態を意識しておく必要があり、ソフト作成に手間をかけられる時代の産物だと感じる。
LINCのJMP命令では例えば100番地にあるJMP 200を実行すると200番地へジャンプするのと同時に0番地にJMP 101のコードが格納される。これはサブルーチンからのリターンとして使われる。PDP-8ではさらに次項で述べる方式となった。

LINC (DECカタログより)
ディスプレイやキーボード、ランダムアクセス可能なテープ装置を備え、パーソナルコンピュータの原型と言える。
LINCは最初TX-0と同じMITのLincoln Laboratoryで設計され、多くの研究者がDECの論理モジュールを使いLINCを"自作"した。その後DECで製品化され、さらにPDP-8と合体し両方のソフトを動かせるLINC-8やPDP-12が作られた。
JMSとISZ
1950年代の多くの機種は特別な命令なしでサブルーチンを実行していた。例えば呼び出し側は戻り番地を知っているので決められた場所にそれを格納しておけば、間接ジャンプでリターンできる。これをPDP-8の個別命令で行うと最低でも4ワード使いアキュムレータの退避も必要で、共通の処理をサブルーチン化してプログラムを小さくする効果が薄れる。PDP-8のJMS命令では指定アドレスは戻り番地の格納用で、ここにプログラムカウンタの値を入れて実際のサブルーチンはその次の番地から始まる。この方法は特別なリターン命令が不要でハードも簡略、再帰呼び出しとROM化を考えなければ理想的である。
ISZ命令は指定メモリを+1して値が0なら次の命令をスキップするもので、ループ実行に多用される。これも個別命令で作ると最低で4ワード使いやはりアキュムレータの退避が必要。
PDP-8はよく最小命令セットと表現されるが、ロードや減算を削ってまで、よく使う操作は積極的に複合命令化している。当時メモリは貴重でPDP-5の最小構成は1Kワードだった。PDP-8でも本体価格の約半分はメモリで、少ないステップ数でプログラムが書けることがハードのコンパクト化と並んで重要だった。アーキテクチャの決定は前述の各機種の実際のプログラムを解析して最適化したと想像される。
PDP-8のその後
PDP-8のアーキテクチャはそれまでの小型計算機をよく研究して、より洗練してコンパクトにまとめたと感じる。1970年代前半のマイクロプロセッサと比べても回路規模は小さいがFORTRANなど高級言語が走るほど強力である。
1960年代終わりになるとICが安くなり、同じ価格帯でより高度な利用の要求が出てきた。PDP-8で不足なものを列挙すると
- 複数の汎用レジスタ(メモリアクセスを減らして高速化にもつながる)
- 広いアドレス空間
- スタック
- 強力な割り込み(PDP-8は1レベルしかない)
- リアルタイム処理に十分な速度(I/Oも含む)
- バイト(8bit)処理
- ROM化
これらを解決する形でPDP-11が設計された。PDP-8もより低価格で強化されたPDP-8/Eなどが、それまで高価でコンピュータを使えなかったさまざまな用途を開拓した。ただし命令実行速度などの基本性能は初代から最後のPDP-8/Aまでほとんど変わらない。高性能の要求にはPDP-11などで応えて、PDP-8では技術の進歩を価格に振り向けるのがDECの戦略だったと思われる。
参考文献
これらのマニュアルはbitsaversで入手できる。
Programmed Data Processor-5 Handbook, 1964 Digital Equipment Corporation
Memorandum 6M-4789-1 A Functional Description of the TX-0 Computer, 1958 MIT Lincoln Laboratory
160 Computer Programming Manual, 1960 Control Data Corporation
Computer Engineering, A DEC View of Hardware System Design DEC製品と関連する機種の歴史の技術的な詳しい解説。
スミソニアン博物館によるGordon Bellのインタビュー