HP 3000

HP 3000シリーズは、ヒューレット・パッカード社が1973年に困難な開発を経てリリースしたミニコンピュータファミリである。最初の機種は性能問題から一旦回収された。このシリーズは最初にタイムシェアリング機能を搭載したオペレーティングシステム(OS)を搭載したミニコンピュータとなることを意図していた。信頼性が高く強力であったため、オフィスコンピュータ的な使われ方が主流であった。初期の機種は大きな筐体であったが、後の機種は机の下に収まる程度となった。
製品寿命はDECのVAXよりも長かった。2001年11月、後継である e3000 シリーズのサポート終了を5年後とすることが発表された。製品の新規販売は2003年までで、サポート終了までの移行期間は今のところ 2008年12月31日までとされている（当初、2006年末とされていたが延長された）。
初期のメモリセグメントと64K制限.
コードとデータは可変長セグメントに格納される。コードはリードオンリーでリエントラントであり、最大 32,760 バイトまで、データは最大 65,528 バイトまでである。MPE はコードセグメントをプログラムファイルから読み込み、セグメント化された共有ライブラリ (SL) ファイルを必要に応じて読み込む。1つのプロセスには最大 256 セグメントまで持たせることができる。
コードセグメントは最大 32KB だが、ルーチン呼び出し時にはセグメント番号とセグメント内のルーチン番号を指定するため、1つのプログラム内に理論上最大 64K 個のルーチンが存在可能であった。当時の16ビットミニコンピュータではアドレス空間が全部で 64K であることが多かった。データセグメントとスタックセグメントは最大64Kであった。共有ライブラリには共有のデータは存在せず、各プロセス専用のデータセグメントを使用する。
システムのプログラミングはALGOL系の言語 SPL で行われるが、インラインアセンブラが利用可能であり、命令セットへの直接アクセスが可能である。HP 3000 の標準端末 HP 2640 シリーズはキャラクタモードだけでなく、フォームからのデータ入力を行うブロックモードをサポートしていた。
Classic と PA-RISC XL.
HP 3000 ファミリは 16ビットの "Classic" と 32ビットの "XL"（後に "IX"）ファミリがあり、後者は1984年にPA-RISCチップの登場とともに追加された。両者にはバイナリ互換性はないが、低速ながらエミュレーションで従来のコードを実行したり、再コンパイルして実行することが可能であった。初期の "Classic" は独自のCISCプロセッサを使用している。PA-RISC を搭載した HP 3000 は1988年ごろから量産されるようになり、1995年までに完全に置換がなされたものの、ユーザーサイトでは従来のマシンがそのまま使われ続けた。
3000 シリーズのオペレーティングシステムは MPE（Multi-Programming Executive）と呼ばれ、その後 MPE-XL となり、さらにPOSIX準拠となってからは MPE-IX と呼ばれた。初期のバージョンには独自のコマンド行インタプリタがあり、階層型ファイルシステムは無い。プログラムをコマンドとして実行するという概念が無く、例えばコンパイラは "run fortran.pub.sys" などと打ち込んで実行される。当時の他のミニコンピュータに比較して、非常に信頼性が高く安定動作するのが特徴であった。
HP 3000 シリーズの成功の一因は、OSの一部として（一部例外はあるが）独自のデータベース管理システム Image（後に TurboIMAGE に改称）を搭載していた点である。これは、OSやハードウェアの違いに関わらずバイナリ互換性を維持しており、1973年のプログラムが2003年のシステム上でも再コンパイルなしで動作する。
市場がUNIXにシフトしていく中、ヒューレット・パッカードは2001年11月、HP 3000 の寿命（サポート期限）を2006年末とすることを発表した（販売は2003年まで）。2006年初め、HPは制限つきでサポートを2年延長することを発表した。これは、独自仕様のミニコンピュータとしては異例の長い製品寿命である。PDP-11とVAXを合わせたよりも長い寿命であるが、OpenVMS は AlphaベースのシステムからIA-64ベースのシステムへとサポートされ続ける予定である。
スタックマシン.
今日、多くの命令セットは汎用レジスタモデルに基づいている。HP 3000 のプロセッサとメモリのアーキテクチャはスタックマシンモデルに基づいている。これはバロース B5000に影響されたと言われている。レジスタ数は少なく（例えば HP 1000 では AX レジスタと BX レジスタの2本だけ）、オペランドは局所変数やリターンアドレスを置くスタックと同じスタックに置かれる。従って、例えば次のようなコードがあったとする。
LOAD AX, 0X0001
LOAD BX, 0X0002
ADD AX, BX
これは次のコードと同じである。
PUSH 0X0001
PUSH 0X0002
ADD
サブルーチン呼び出しの call 命令は固定個の引数しか取れない。そのため、C言語コンパイラの実装は難しかった（実装されなかったわけではない）。
16ビットのマイクロプログラム方式の機種（Series I, II, III, 30, 33, 39, 40, 42, 44, 48, 52, 58, 64, 68, 70, 37, ...）は、16ビットのワード単位のアドレスにバイトアドレス指定を加え、セグメント方式のスタックマシン型命令セットアーキテクチャ (ISA) であった。約 214 種の命令のほとんどは16ビット長である。スタック操作命令は16ビットワードに2つの操作を詰め込むことができ、一部の命令が32ビットである。
CISC実装の変遷は以下の通り。
32ビットモデルは PA-RISC を使っている。PA-RISC のバージョンと機種の対応は以下の通り。