PDP-11
PDP-11のエンディアンは独特であった。16ビットワードはリトルエンディアンで格納される。すなわち下位バイトがアドレスの小さいほうに格納される。32ビットワードを構成する2個の16ビットワードは、ビッグエンディアンで格納される。すなわち上位16ビットワードがアドレスの小さいほうに格納される。ここで、各16ビットワード内は前述のようにリトルエンディアンである。PDP-11が非常に一般化したため、この形式を PDPエンディアン と呼ぶことがある。
このようなミドルエンディアンにまつわる問題を「NUXI問題」と言う。これは UNIX という文字列をPDPエンディアンの順序で並べ替えたものに由来する。UNIX を他機種に移植した際、最初の起動メッセージ(しばしば、本格的な初期化に入る前、最小限のブートが完了したことを示すため、短い文字列を出力することがある)として「UNIX」ではなく「NUXI」と出力されたことがあった、と言われている。
(なお、コンピュータ中のデータの並べ方について「エンディアン」という語を使う提案は1980年になされたものであるため、初期のPDP-11についてエンディアンという語を使うのは後付けということになる)
PDP-11/35、11/40、11/03 でのオプション。 FADD、FSUB、FMUL、FDIV - 単精度のみ。レジスタオペランドの指すスタック上の浮動小数点数を対象とする。
GT40 - PDP-11/05をベースとしたベクターグラフィック端末
GT42 - PDP-11/10をベースとしたベクターグラフィック端末
GT44 - PDP-11/40をベースとしたベクターグラフィック端末
GT62 - PDP-11/34aをベースとしたベクターグラフィック端末
H-11 - LSI-11/03の Heathkit社 OEM版
VT20 - PDP-11/05ベースのテキスト端末(ダイレクトマップ方式)で、テキスト編集と組版用
VT71 - LSI-11/03ベースのテキスト端末(ダイレクトマップ方式)で、テキスト編集と組版用
VT103 - LSI-11を搭載したバックプレーン内蔵のVT100端末
VT173 - PDP-11/03をベースとしたハイエンド端末。ホストからシリアル接続で編集ソフトウェアをダウンロードして使用できる。出版社などで使われた。
MINC-11 -- PDP-11/03 または 11/23 をベースとした実験用システム。11/23ベースのものは MINC-23 として販売されたが、MINC-11からMINC-23へのフィールドアップグレードが可能だった。命令セットが微妙に変更されており、MINC-23用ソフトウェアは11/23では動作できないことがあった。後期モデルでは互換性を確保していた。
C.mmp -- カーネギーメロン大学によるマルチプロセッサシステム
PDP-11のアドレスは16ビットであり、64KBまでのアドレス範囲を指定できる。PDP-11からVAXに移行するころ、8ビットのバイトと16進表記が一般的になっていたが、PDP-11では八進表記が普通で、搭載メモリ容量はワード数で表記されるのが普通だった。したがって、基本論理アドレス空間は32Kワードだが、上位4Kワード(アドレス 160000 から 177777 まで)は周辺機器のレジスタのマッピング用に予約されており、メモリはマッピングされない。したがって、初期のPDP-11の最大メモリ容量は28Kワードだった。
この制約に対して、以下のような技法が使われた。
後期のPDP-11では、仮想記憶をサポートするメモリ管理ユニットが使われた。物理アドレスは18ビットまたは22ビットに拡張され、256KBまたは4MBのメモリを扱えるようになったが、1つの論理アドレス空間は16ビット(32Kワード)に制限されたままだった。
PDP-11/45をはじめとする機種では、命令用論理空間(32Kワード)とデータ用論理空間(32Kワード)を設定可能とした。初期のUNIXなどはこの機能を使っていた。
例えば Modula-2 の実装では、実行環境が論理空間を8kBのページに分割して制御し、ユーザーからは隠蔽した形でバンク切り換えのような操作を行っていた(外部リンク参照)。
それでも、C言語はPDP-11で実装する際にPDP-11の持つ細かい利点を活用しており、そのために後のプロセッサの設計に影響を与えた可能性はある。
論理的には、アドレッシングモードと命令セットによってベースが提供されていると言える。2オペランド命令は、2つの6ビットフィールドでオペランドを指定し(3ビットがレジスタ指定で、3ビットがアドレッシングモード指定)、4ビットで命令コードを指定する。1オペランド命令は、6ビットでオペランドを指定し、10ビットで命令コードを指定する。どの命令でもオペランド指定フィールドには任意のアドレッシングモードを指定できる。8本のレジスタ(0番から7番まで)で、7本のレジスタは任意の用途に使用可能だが、6番のレジスタはいくつかの命令ではスタックポインタとして認識され、7番のレジスタはプログラムカウンタである。プログラムカウンタがプログラマから見えているという発明とアドレッシングモードの組合せで、絶対アドレス指定と相対アドレス指定が可能となった。アドレッシングモードとしては、レジスタ、即値、絶対アドレス指定、相対アドレス指定、間接アドレス指定、インデックス付きアドレッシングがあり、さらにレジスタの自動インクリメント/自動デクリメント(バイト操作なら1、ワード操作なら2)を指定できる。相対アドレス指定を使えば、機械語プログラムを位置独立にできる。
PDP-11/45およびその後の多くの機種でのオプション。 単精度または倍精度についての全ての浮動小数点演算。どちらになるかは浮動小数点ステータスレジスタ内のビット設定による。 単精度浮動小数点数の形式は IEEE 754 以前のものだが、符号ビット、8ビット指数、23ビット仮数(けち表現)となっている。