PDP-11

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire
PDP-11/40 2台のDECtape装置が見える

PDP-11 は、ディジタル・イクイップメント・コーポレーション(DEC)が1970年代から1980年代に販売した16ビットミニコンピュータシリーズ。PDP-11 は DECのPDPシリーズPDP-8コンピュータの後継である。革新的機能をいくつか持ち、従来よりもプログラミングが容易になっていた。プログラマには好感を持たれていたが、PDP-11 の後継である 32ビット拡張のVAXに市場を奪われていった。その後、その市場のほとんどはIBM PCApple IIなどのパーソナルコンピュータサン・マイクロシステムズなどのワークステーションに奪われたのである。

目次

PDP-11シリーズの特徴

命令セット

プログラマがPDP-11を好むのは、その直交性の高い命令セットによって命令の種類とメモリアクセス方法を分けて考えることができるからである。任意のメモリアクセス方法(アドレッシングモード)を任意の命令に使用でき、他の命令セットのように例外事項を覚えておく必要がない。

PDP-11の命令セットアーキテクチャはC言語の構文に影響を与えている。レジスタインクリメントやデクリメントを行うアドレッシングモードが C言語での --i とか i++ といった形式に対応している。もし ij もレジスタ変数なら、*(--i) = *(j++) といった式は1個の機械語命令にコンパイルできる。単精度倍精度浮動小数点数の演算の命令コードが同じであったため、初期のC言語では単精度の操作が省略されていた。

論理的には、アドレッシングモードと命令セットによってベースが提供されていると言える。2オペランド命令は、2つの6ビットフィールドでオペランドを指定し(3ビットがレジスタ指定で、3ビットがアドレッシングモード指定)、4ビットで命令コードを指定する。1オペランド命令は、6ビットでオペランドを指定し、10ビットで命令コードを指定する。どの命令でもオペランド指定フィールドには任意のアドレッシングモードを指定できる。8本のレジスタ(0番から7番まで)で、7本のレジスタは任意の用途に使用可能だが、6番のレジスタはいくつかの命令ではスタックポインタとして認識され、7番のレジスタはプログラムカウンタである。プログラムカウンタがプログラマから見えているという発明とアドレッシングモードの組合せで、絶対アドレス指定と相対アドレス指定が可能となった。

16ビットワードリトルエンディアンで格納され、最下位桁バイトが先になる。32ビットワードは特殊なエンディアン形式になっている(上位16ビットが先だが、16ビットワード内は先述の通りリトルエンディアン)。PDP-11が非常に一般化したため、この形式を PDPエンディアン と呼ぶことがある。

I/O専用バスの無い構成

他の初期のコンピュータとの大きな違いとして、PDP-11 が入出力専用バスを持たないことが挙げられる。PDP-11 は Unibus というメモリバスしか持たない。入出力機器はメモリ空間にマッピングされ、特殊な I/O (入出力) 命令を必要としない。割り込みシステムはなるべく単純になるよう設計され、割り込みシーケンスでイベントを逃さないことを保証している。デバイスが割り込みを発生する場合、4本の優先度ラインのいずれかをアサートする。プロセッサは優先度毎の割り込みデイジーチェインに応答する(デイジーチェインはイベントを順番に並べる一種の論理回路である。最初の論理ゲートが最初に処理される。デイジーチェインはその優先度でのデバイス間の優先順位に従って設定される)。

PDP-11の設計では、この割り込み応答順はデバイスが物理的にCPUに近い順番になっている。CPUが応答すると、デバイスはそのベクターアドレスをバスに出力する。これは4バイトのメモリブロックのアドレスである。CPUはステータスレジスタとプログラムカウンタをベクターテーブルからロードする。このときのステータスレジスタの値は割り込みを不可とするようになっている。プログラムカウンタにロードされるアドレスは割り込みハンドラのスタートアドレスである。割り込みハンドラがデバイスに関する処理を行い、その過程で割り込んできたデバイスの割り込み信号を再設定する。最後に特殊なRTI(Return From Interrupt)命令でCPUが割り込まれた箇所に戻る(戻ったところが低優先度の割り込みの処理中の場合もある)。このような処理によって割り込みを受け付けそこなうことを防いでいる。未処理の割り込みはどの段階であってもそのまま存在していて、次のサイクルで処理可能である。割り込み処理が間違って起動されるとCPUはタイムアウトとなり、特殊な擬似割り込みを発生してユーザーに対してハードウェア故障を警告する。

大量生産のための設計

PDP-11は工場でそれなりに熟練した労働者が生産できるよう設計された。あらゆる観点から個々の工程の危険性を低減している。ワイヤラッピング式のバックプレーンを使用し、プリント基板をバックプレーン上のコネクタに差し込むようになっている。バックプレーン上のコネクタ同士はワイヤラッピングで接続される。ワイヤの被覆を剥いだ銅線が端子に食い込むことで密着する。このコネクタ部分は電話の交換機などとよく似ている。

LSI-11

LSI-11は大規模集積回路を使用した最初のPDP-11である。CPUウェスタン・デジタル製の4個のLSIチップ(MPC-1600チップセット)で構成される。Unibusによく似たQ-busを使用。大きな違いは Q-bus のアドレスバスとデータバスが物理的には同じ線を共有していることである(マルチプレクサ)。I/Oデバイスのアドレッシングも若干異なり、22ビットの物理アドレス(Unibusでは 18ビット)とブロック転送モード(Unibusにはない)がある。

CPUのマイクロコードには直接RS-232C端末と通信できるデバッガが組み込まれている。マイクロコードはコンピュータの心臓部とも言うべき制御装置の一部であり、それにデバッガが組み込まれているというのは革新的であった。制御装置が機能しなければコンピュータではない。このデバッガはコンピュータのレジスタを調べたり、メモリや入出力機器を調べるのに使われた。従って、CPUが機能しない場合でもコンピュータの内部状態を調査して修理することが可能であった。この内蔵デバッガによって出費が抑えられ、スイッチとライトが並ぶ制御パネルを不要なものにしたのである(当時、起動できないコンピュータにデータを入力する手段として制御パネルがあった)。

マイクロコードには汎用ブートストラップ(とPower On Self Test)が含まれ、DEC製の全てのディスクドライブを使用可能であった。

これら2つの発明はコンピュータが動作中は使われない。ハードディスクからブートできないとき、フロッピーからのブートを試すとか、全く起動しないときデバッガを使うといった使い方になる。

PDP-11の衰退

基本設計は非常に優れていて、最新技術も次々に取り入れていった。しかし、最終的に16ビットアーキテクチャではどうがんばっても超えられない限界が見えてきた。一部機種では物理アドレス空間を拡張したが、全てのプログラムは16ビットの仮想アドレス空間(64Kバイト)に制限されていた。1980年代にメモリチップが低価格化していったが、PDP-11上のソフトウェアは大容量メモリを簡単には使えなかった。

DECがPDP-11の後継としたVAX(Virtual Address Extension; PDP-11の仮想アドレス拡張)はこのような問題に対応したが、当初はハイエンドタイムシェアリング市場をターゲットとした。インテル8086などはセグメント方式による拡張で16ビットのアドレス空間を超え、32ビット化などという大層なことをしなくても 1Mバイトまでのメモリを扱えた。これは成長過程にあった IBM PC 互換機市場には十分だったが、80286が登場する前に1Mバイトの限界が問題となってきた。80286はセグメントアドレス空間を拡大し、80386では32ビットのリニアなアドレス空間がサポートされたのである。

技術者がより大きなアドレス空間をサポートするアーキテクチャに移っていったころ、MC68020Intel 80386のような32ビットマイクロプロセッサが登場してきた。量産効果でこれらのマイクロプロセッサは低価格化し、PDP-11はコスト面でも太刀打ちできなくなった。PDP-11ベースのパーソナルコンピュータ DEC Professional などの試みも失敗に終わった。

DEC はPDP-11シリーズを1997年に終結させた。PDP-11のデザインとオペレーティングシステムのライセンスは Mentec 社に売却された(LSI-11ボードを Q-bus およびパソコン用に製造する会社)。

なお、Mentec社のサイトによれば、ライセンスを取得したのは1994年となっている。

1990年代末までにDECを初めとするミニコンピュータ業界は壊滅し、UNIXWindowsサーバに取って代わられたのである。

アーキテクチャ詳細

以下の情報はDECのPDP-11 Processor Handbookにある。(ゴードン・ベル1969 editionを参照)

汎用レジスタのアドレッシングモード

(R は汎用レジスタで 0 から 7 まで。(R) はレジスタの内容を意味する)

0. レジスタ - レジスタの値を使用: OPR R ; R がオペランドそのもの
1. レジスタ間接 - レジスタがオペランドのメモリアドレスを保持: OPR (R) ; R はアドレス
2. 自動インクリメント: OPR (R)+ ; R はアドレス、命令実行後 (R) をインクリメント
3. 自動間接インクリメント: OPR @(R)+ ; R はアドレスのアドレス、命令実行後 (R) に 2 を加算
4. 自動デクリメント: OPR -(R) ; 命令実行前に (R) をデクリメント、R はアドレス
5. 自動間接デクリメント: OPR @-(R) ; 命令実行前に (R) から 2 を減算、R はアドレスのアドレス
6. インデックス: OPR X(R) ; (R)+X がアドレス、Xは命令の次のワード
7. インデックス間接: OPR @X(R) ; (R)+X がアドレスのアドレス

プログラムカウンタのアドレッシングモード

プログラムカウンタ(PC)も汎用レジスタとして扱うことができ、以下のようなアドレッシングモードが使用できる:

2. イミディエート: OPR #N ; オペランドは命令内にある
3. 絶対: OPR @#A ; 絶対アドレスが命令内にある
6. 相対: OPR A ; PC+2+A がアドレス、PC+2 が新たなPCの値
7. 間接相対: OPR @A ; PC+2+A がアドレスのアドレス、PC+2 が新たなPCの値

PDP-11 命令

  • 1オペランド命令 - OP-code で命令の種別を指定し、その後の部分でオペランドを指定する。
15 6 5 3 2 0
OP-Code Mode Register
    • CLR (クリア), COM (1の補数), INC (インクリメント), DEC (デクリメント), NEG (2の補数による符号反転), TST (テスト), ASR (算術右シフト), ASL (算術左シフト), ROR (右ローテート), ROL (左ローテート), SWAB (スワップバイト), ADC (キャリー付き加算), SBC (キャリー付き減算), SXT (符号拡張).
  • 2オペランド命令 - 先頭部分で命令の種別を指定し、残りの部分で2つのオペランドを指定する。
15 12 11 9 8 6 5 3 2 0
OP-Code Mode Register Mode Register
    • MOV (転送), ADD, SUB (減算), BIT (ビットテスト), BIC (ビットクリア), BIS (ビットセット), XOR (排他的OR).
  • プログラム制御命令 - 先頭部分で命令の種別を指定し、後半部分をターゲットアドレスの指定に使用する。
15 8 7 0
OP-Code Offset
    • BR (無条件分岐), BNE (ゼロでないとき分岐), BEQ (ゼロのとき分岐), BPL (正のとき分岐), BMI (負のとき分岐), BVC (オーバフローでないとき分岐), BVS (オーバフローのとき分岐), BCC (キャリーがないとき分岐), BCS (キャリーがあるとき分岐).
    • BLE ( <= 0 のとき分岐), BGE ( >= 0 のとき分岐), BLT ( < 0 のとき分岐), BGT ( > 0 のとき分岐) (符号付比較).
    • BLO (小さいとき分岐), BHI (大きいとき分岐), BLOS (小さいか等しいとき分岐), BHIS (大きいか等しいとき分岐) (符号無し比較).
    • SOB (レジスタから1を引き、0でなければ分岐).
  • ジャンプとサブルーチン命令
    • JMP (ジャンプ), JSR (サブルーチンジャンプ), RTS (サブルーチンからの戻り).
    • EMT (エミュレータトラップ), TRAP, BPT (ブレークポイントトラップ), IOT (入出力トラップ), RTI & RTT (割り込みから戻る).
  • その他の命令
    • HALT, WAIT (割り込み待ち), RESET (UNIBUSをリセット), MTPD (前のデータ空間に転送), MTPI (前の命令空間に転送), MFPD (前のデータ空間から転送), MFPI (前の命令空間から転送), MTPS (プロセッサステータスワードに転送), MFPS (プロセッサステータスワードから転送).
  • 条件コード命令
    • CLC, CLV, CLZ, CLN, CCC (対応する条件コードをクリア), SEC, SEV, SEZ, SEN, SCC (対応する条件コードをセット).
    • プロセッサステータスワード(PSW)には以下の4つの条件コードがある
      • N 負値であることを示す
      • Z ゼロであることを示す
      • V オーバーフローが発生したことを示す
      • C キャリーが発生したことを示す
  • 拡張命令セット("Extended Instruction Set", EIS)。新しいプロセッサでは標準サポート
    • MUL, DIV 整数乗除算
    • ASH, ASHC レジスタまたはレジスタペアの算術シフト。シフトするビット数が正なら左へシフトし、負なら右へシフトする。
  • 浮動小数点命令セット("Floating Instruction Set", FIS)。11/35, 11/40, 11/03 ではオプション。
    • FADD, FSUB, FMUL, FDIV 単精度のみ。レジスタオペランドの示すスタックを対象とする。
  • 浮動小数点プロセッサ("Floating Point Processor", FPP)。11/45 およびその後の機種でのオプション。
    • 単精度または倍精度についての全ての浮動小数点演算。どちらになるかは浮動小数点ステータスレジスタ内のビット設定による。
    • 単精度浮動小数点数の形式は IEEE 754以前のものだが、符号ビット、8ビット指数、23ビット仮数となっている。
  • ビジネス命令セット(Commercial Instruction Set, CIS)。11/23 と 11/24 ではマイクロコードによるオプション、11/44では追加モジュール、11/74では一部バージョンでサポート。
    • 各種文字列命令と十進命令で COBOL と Dibol をサポート

アセンブリ言語によるプログラミング例

PDP-11で使用された紙テープ

RT-11で動作するPDP-11マクロアセンブラによる "Hello, world!"プログラムである:

        .TITLE  HELLO WORLD
        .MCALL  .TTYOUT,.EXIT
HELLO:: MOV     #MSG,R1 ;STARTING ADDRESS OF STRING
1$:     MOVB    (R1)+,R0 ;FETCH NEXT CHARACTER
        BEQ     DONE    ;IF ZERO, EXIT LOOP
        .TTYOUT         ;OTHERWISE PRINT IT
        BR      1$      ;REPEAT LOOP
DONE:   .EXIT

MSG:    .ASCIZ /Hello, world!/
        .END    HELLO

このプログラムファイル名をHELLO.MACとしたとき、アセンブルしてリンクして実行するときのコンソールの表示は以下のようになる:

.MACRO HELLO
ERRORS DETECTED:  0

.LINK HELLO

.R HELLO
Hello, world!
.

(RT-11のコマンドプロンプトは "." である)

MACRO-11のコードのもっと複雑な例としては、Kevin Murrellの KPUN.MAC や Farba Research の JULIAN ルーチンがある。その他のPDP-11用コードのライブラリとして MetalabTrailing Edge アーカイブがある。

これらのコードをPDP-11エミュレータで実行してみることもできる。Bob Supnik の SIMH はPDP-11だけでなく各種アーキテクチャをエミュレートでき、それらアーキテクチャのオペレーティングシステムのソフトウェアキットを含む(RT-11もある)。

PDP-11 の機種

PDP-11プロセッサはI/Oバスの種類などでいくつかのグループに分類される。いずれのグループも各機種にはOEM版とエンドユーザー版がある。

Unibus 機種

以下の機種は主要バスとして Unibus を使用:

  • PDP-11(後に PDP-11/20 に改名), PDP-11/15 -- 最初の機種。マイクロプログラム方式でないプロセッサを使用。Jim O'Loughlin が設計
  • PDP-11/35, 11/40 -- /20 のマイクロプログラム方式の後継。Jim O'Loughlin が設計チームを率いた。
  • PDP-11/45, 11/50, 11/55 -- 磁気コアメモリと同時に半導体メモリを使用可能とした高速なマイクロプログラム方式プロセッサ
  • PDP-11/70 -- 11/45 のアーキテクチャを物理メモリ 4Mバイトまで拡大し、専用メモリバスを装備し、2Kバイトのキャッシュメモリを備え、Massbus で 高速I/Oデバイスを接続。
  • PDP-11/05, 11/10 -- 11/20のコスト低減版
  • PDP-11/34, 11/04 -- 11/35と11/05のコスト低減版。PDP-11/09と11/39の機種名はDEC内部文書にあるが、商品化されなかった。PDP-11/34 のコンセプトは Bob Armstrong によるもの
  • PDP-11/44 -- 11/34 に標準でキャッシュメモリ浮動小数点ユニットを装備したもの。このマシンには洗練されたシリアル・コンソールを装備し、4MBの物理メモリをサポート。設計チームは John Sofio が率いた。
  • PDP-11/60 -- ユーザーが書き込み可能なマイクロプログラム記憶装置を持つ PDP-11。Jim O'Loughlin が率いる別のチームの設計
  • PDP-11/24 -- Unibus使用のPDP-11で初のVLSI版 PDP-11. Fonz-11(F11)チップセットを使用
  • PDP-11/84 -- VLSI Jaws-11(J11) チップセットを使用
  • PDP-11/94 - J11ベースで 11/84 よりも高速

Q-bus 機種

以下の機種は主要バスとして Q-bus を使用:

  • PDP-11/03 (LSI-11/03) -- 最初のLSI版 PDP-11。ウェスタン・デジタル社のチップセットを使用
  • PDP-11/23 -- 第2世代のLSI (F-11) を使用。初期のユニットのメモリ容量は 248Kバイトだが、後に 4Mバイトまでサポートするようになった。
  • PDP-11/23+/MicroPDP-11/23 -- プロセッサカード上の機能を強化した 11/23
  • MicroPDP-11/73 -- 第3世代LSI版 PDP。Jaws-11(J-11) チップセットを使用
  • MicroPDP-11/53 -- オンボードメモリを持つ低速版 11/73
  • MicroPDP-11/83 -- PMI(private memory interconnect)を使った高速版 11/73
  • MicroPDP-11/93 -- さらに高速。Q-bus を使用した最後の PDP-11
  • Mentec M100 -- Mentec社が再設計した 11/93.J-11チップセットを 19.66MHz で駆動し、4個のオンボード・シリアルポート、1~4Mバイトのオンボードメモリ、オプションのFPUがある。
  • Mentec M11 -- プロセッサアップグレードボード。Mentec による PDP-11マイクロコードの最新実装で、テキサス・インスツルメンツの TI 8832 ALU と TI 8818 マイクロシーケンサを使用。
  • Quickware QED-993 --高性能 PDP-11/93 プロセッサアップグレードボード

標準以外のバスを採用した機種

  • PDT-11/110
  • PDT-11/130
  • PDT-11/150

PDTシリーズは「スマート(賢い)端末」としてマーケティングされたデスクトップシステムである。/110 と /130 はVT100端末と同じ筐体であった。

  • PRO-325
  • PRO-350
  • PRO-380

DEC Professional シリーズは IBM808880286 ベースの初期のパーソナルコンピュータに対抗しようとしたデスクトップ機である。5インチフロッピーディスクドライブを装備し、325 以外はハードディスクも装備していた。CPU は LSI-11 で、RSX-11M+ にメニューシステムを追加した P/OS が動作した。既存のPDP-11とのソフトウェア互換を意図的に阻害したため、(DEC以外の人々に予想された通り)市場では全く振るわなかった。

実際には商品化されなかった機種

  • PDP-11/27 -- 主要I/Oバスとして VAXBIバス(VAX用32ビットバス)を使った Jaws-11 と呼ばれる実装
  • PDP-11/68 -- 物理メモリ4MバイトをサポートするPDP-11/60の後継
  • PDP-11/74 -- PDP-11/70をマルチプロセッサ化したもの。最大4個のプロセッサを相互接続し、ケーブルの取り回しが非常に難しくなった。また、ビジネス向きの命令セット拡張も行われている。いくつかのプロトタイプが組み立てられ、少なくとも2台のマルチプロセッサシステムがユーザーサイトでベータテストを受けたが、公式には出荷されることはなかった。4プロセッサシステムは RSX-11 オペレーティングシステム開発チームがテストし、シングルプロセッサ機は開発チーム全体のタイムシェアリング環境として使われた。11/74は32ビット機 VAX 11/780 と同時期に計画された。11/780よりも高性能だったために中止になったと噂されることもある。販促部門がPDP-11の高性能機が登場するとVAXの売り上げに影響すると判断したというわけである。しかし、実際にはフィールドでの保守の問題が大きかったのだという説もある。いずれにしてもDECはPDP-11ユーザー全部をVAXに移行させることはできなかった。その原因は性能ではなく、PDP-11のリアルタイム性の良さにある。

特殊バージョン

  • GT40 -- PDP-11/05をベースとしたベクターグラフィック端末
  • GT44 -- PDP-11/40をベースとしたベクターグラフィック端末
  • H-11 -- LSI-11/03の Heathkit社 OEM版
  • VT103 -- LSI-11をホストとするバックプレーン内蔵のVT100端末
  • VT173 -- PDP-11/03をベースとしたハイエンド端末
  • MINC-11 -- PDP-11/03 または 11/23 をベースとした実験用システム
  • C.mmp -- カーネギーメロン大学によるマルチプロセッサシステム

クローン

PDP-11は非常に人気があったため、鉄のカーテンの向こう側で無許可のクローンが何種類か製造された。一部はDECのPDP-11とピン互換があり、周辺機器やシステムソフトウェアを流用することができた。以下のような機種が知られている:

オペレーティングシステム

PDP-11では以下のようなオペレーティングシステム(OS)が使用可能であった。

DEC製:

サードパーティ:

外部リンク

特記しているもの以外は英文

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net