回路レベルでPDP-11/34を再現するエミュレータが登場——トランジスタ単位でレトロコンピュータを蘇らせる試み

元記事を読む
キュレーターコメント

命令セットではなく「回路そのもの」を再現するという発想が痺れる。低レイヤー好き・コンピュータアーキテクチャを深掘りしたいエンジニアに強くおすすめしたい一品。

概要

「エミュレータ」と聞くと、多くのエンジニアはCPU命令セットを再現するソフトウェアを思い浮かべるだろう。しかし今回紹介する ll-34 は、次元が違う。1970年代のDEC製ミニコンピュータ PDP-11/34 を、論理ゲートや回路レベルで忠実にシミュレートするという、マニア心をくすぐる野心作だ。

PDP-11/34とは何者か

PDP-11 シリーズはDEC(Digital Equipment Corporation)が1970年代に製造したミニコンピュータで、当時の大学・研究機関・産業界を席巻した歴史的名機だ。その中でも PDP-11/34 は1975年に登場したモデルで、16ビットアーキテクチャを採用し、UnixやC言語の発展に大きく貢献したプラットフォームでもある。

  • 16ビットアドレス空間(64KB)
  • レジスタ直交設計(R0〜R7、汎用性の高いISA)
  • UNIBUS接続による周辺機器拡張
  • 当時のOS(RT-11, RSX-11, Unix V6など)が動作

現代のx86やARMの設計思想にも影響を与えたとされ、コンピュータアーキテクチャを学ぶ上で今でも参照される存在だ。

「回路レベル」エミュレーションとは何が違うのか

通常の命令セットエミュレータ(ISAエミュレータ)は「MOV R0, R1 という命令が来たらレジスタをコピーする」という抽象的なレベルで動作する。一方、回路レベルエミュレータは論理ゲート・フリップフロップ・バス信号の電気的ふるまいまでシミュレートする。

具体的な違いを整理すると:

  • ISAエミュ: 命令→動作のマッピングで高速・高レベル
  • マイクロコードエミュ: マイクロ命令単位で内部ステートを再現
  • 回路レベルエミュ(ll-34): 実際のゲート遅延・バスタイミング・ウェイトステートまで再現

回路レベルで動かすことで、タイミングバグやハードウェア依存の挙動まで忠実に再現できる。これは単なるソフトウェア互換性を超え、物理的なハードウェアの「複製」に近い。

GitHubリポジトリの構成と試し方

リポジトリは github.com/dbrll/ll-34 で公開されている。

git clone https://github.com/dbrll/ll-34.git
cd ll-34
# ビルド・実行手順はREADMEを参照

コードはC言語ベースで書かれており、回路の各コンポーネントがモジュール化されている。実際のPDP-11/34のチップセット(例:DC302 microsequencerAM2901 ALUスライス)の動作を対応するコードで表現するアプローチだ。

このようなプロジェクトを動かすには:

  • 元のROMイメージ(著作権確認が必要)
  • Linux/macOS環境(GCC or Clang)
  • デバッグ用のシリアルターミナル(ptys経由)

なぜ今、こういうプロジェクトが面白いのか

ll-34のようなプロジェクトが登場する背景には、Visual 6502icestudio など、オープンソースのハードウェア検証文化の成熟がある。FPGAを使わずソフトウェアで回路を再現することで、「実機がなくても回路設計を学べる」環境が整いつつある。

また、コンピュータ考古学という視点でも価値は大きい。PDP-11のアーキテクチャを学ぶことは、現代のOSやコンパイラの設計原理を理解することに直結する。Harvard/MITのCS教育でも未だにPDP-11が参照されるのはそのためだ。

レトロコンピュータ・低レイヤー開発・コンピュータアーキテクチャに興味があるエンジニアなら、このリポジトリをcloneして眺めるだけでも発見があるはずだ。「ゲートとレジスタから現代CPUの祖先を理解する」——そんな贅沢な学習体験が、オープンソースで手に入る時代になった。