
2026/03/29 1:23
回路レベルで実装したPDP‑11/34エミュレーター
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
要点をすべて組み合わせたもの:
要約
PDP‑11/34A(1976)の回路レベルエミュレーターが、図面・マイクロコード・論理キャプチャを逆解析しCコードに落とし込むことで構築されました。エミュレーターはすべてのハードウェア要素を実装しています。
- CPU コア –
は Bitsavers Verilog と物理ダンプから派生した 512×48 ビットバイポーラ PROM 配列を保持し、ucode_rom.h
には命令デコード、ALU 関数選択、トラップ/サービス優先度、条件コードロジック用の ROM が含まれます。データパスエンジン(combo_roms.h
)は C 演算子を使用して各サイクルごとに 1 マイクロワードをステップし、74S181 ビットスライス ALU(4 スライス、16 ビット)を完全にモデル化します。kd11ea.c - メモリ –
はカーネル/ユーザーアドレス空間、3 つの 74S283 アダーによる 18 ビットリロケーション、16 の PAR/PDR ペア、および SR0/SR2 abort レジスタとフリーズロジックを実装します。mmu.c - クロック –
は E106 ディレイライン(TAP 30/90/120 フィードバック、TRAN INH バス待ち)をモデル化し、短周期 180 ns と長周期 240 ns を生成します。clockgen.c
はシミュレーション時間を実際のウォールクロックと同期させます。clock.c - 割り込み –
は BR4–BR7 優先度キューを扱う仲裁機構を提供し、UNIBUS のデイジーチェーン授与順序を近似します。int.c - バス – すべてのデバイスは UNIBUS バックプレーンに接続され、アドレスデコード、タイミング、およびバスサイクルを処理します。
周辺機器として、M9301 ブートカード、DL11 シリアルカード、KW11 ラインクロック、プログラマコンソール(フロントパネルスイッチ/インジケーター)、RK05/RL01/RL02 ディスクドライブ(ハイレベル)、テープリーダー、および stdio/TCP/PTTY モードを備えた VT100 ターミナルがエミュレートされています。
このエミュレーターは元の図面と PROM ダンプに対して検証されました。コンソールインタフェース(
Ctrl‑E)によるマイクロコード・命令レベルデバッグ、WebAssembly で実装されたフォトリアリスティックなプログラマコンソール GUI(Ctrl‑P)、および実時間クロック周波数(5 555 556 Hz)で 102 の CPU 信号をトレースするロジックアナライザ(Ctrl‑L)といったデバッグツールが、ROM とタイミングのバグ検出・修正に不可欠でした。
今後の計画としては、WebAssembly を介してウェブ上でエミュレーターを公開し、プログラマコンソールへのフォトリアリスティック GUI 要素を追加し、リアルタイムメモリ検査やブレークポイントサポートなどのデバッグ機能を拡張することが挙げられます。結果として得られた正確なソフトウェアモデルは、研究者・教育者・ホビイストが 1970 年代の CPU アーキテクチャを学習し、レガシーシステムを保存し、ハードウェア‐イン‐ザ‐ループ テスティングや逆解析ツールに影響を与える可能性があります。
本文
ll/34 – PDP‑11/34A用回路レベルエミュレーター(1976)
ll/34 は、PDP‑11/34A の実機の回路図・マイクロコード・論理キャプチャを逆解析して作成した仮想CPUを走らせる回路レベルエミュレーターです。もともとは、実際のCPUのデジタル複製として信号レベルでのトラブルシューティングを支援するために設計されました。
仮想 KD11‑EA CPU は基本的に回路図を C に翻訳し、ROM テーブルへの参照で構成されています。すべての組合せ論理 ROM は逆解析済みで、クロックジェネレータは正確にモデリングされています。ゲートレベル Verilog よりも回路レベル(ROM 真理値表+組合せ論理)を選択した理由は、ハードウェアのバグを再現しつつプログラム実行が十分高速であるためです。
エミュレート対象機器
- UNIBUS バックプレーン – タイミング・信号ともに正確
- KD11‑EA CPU – 回路レベル
- M9301 ブートカード – 元のブート&診断 ROM
- DL11 シリアルカード – タイミング正確
- KW11 ラインクロック – 50/60 Hz
- プログラマコンソール – CPU トラブルシューティング用メンテナンスモード付き
- RK05 ドライブ – RK11 コントローラの高レベルエミュレーション
- RL01 / RL02 ドライブ – RL11 コントローラの高レベルエミュレーション
- テープリーダー
- VT100 ターミナル – stdio、TCP ポートまたは PTY モード
アーキテクチャ
すべてのデバイスは UNIBUS バックプレーン(
unibus.c)に接続され、アドレスデコード・タイミング・バスサイクルを担当します。内部的には CPU は次のような構成です。
| ファイル | 説明 |
|---|---|
| 512×48‑bit のマイクロコードストア(ビポーラ PROM)。Bitsavers Verilog とダンプに基づく。各マイクロワードは ALU、スクラッチパッド、バスインタフェース、分岐を一サイクルで制御します。 |
| 組合せ論理 ROM(E51–E83, E107)、IR デコード(E59/E60/E63/E69/E70/E71/E74)、ALU ファンクション選択(E61/E82/E83)、トラップ/サービス優先度(E52/E53)と条件コードロジック(E68/E107)。すべて回路図・論理キャプチャから再構成。オープンコレクタ ROM は MPC バスへワイヤーOR で接続されます。 |
| データパスエンジン。マイクロコードを一ワードずつ実行し、基本的な 74xx ゲートは C の論理演算子(, , 等)でシミュレート。74S181 ビットスライス ALU は完全にモデリング(4 スライス、16‑ビット)。 |
| メモリ管理:カーネル/ユーザーアドレス空間、18‑bit リロケーション(3×74S283 アダー)、16 PAR/PDR ペア、SR0/SR2 abort レジスタとフリーズロジック。 |
| E106 ディレイラインをモデリングしたクロックジェネレータ(TAP 30/90/120 フィードバック、TRAN INH バス待ち)。短周期:180 ns;長周期:240 ns;バストランスファーは SSYN が戻るまで伸びます。 |
| 実時間ペース調整。シミュレータ時間を実際のウォールクロックと同期させます。 |
| 割り込み仲裁器。BR4–BR7 の優先度キューで UNIBUS のデイジーチェーン授与順序を近似します。 |
インタフェース
プログラマコンソール(Ctrl‑P)
PDP‑11/34A のフロントパネルスイッチとインジケータをエミュレート。CPU が停止している時(電源投入、HALT 命令、Ctrl‑P)にアクティブになり、以下が可能です。
- バス初期化
- CPU ブート
- コードの単ステップ
- 任意アドレスでデータの閲覧/書き込み
- エミュレーター終了
フロントエンドはエンジンから切り離されており、WebAssembly 版ではフォトリアリスティックなパネル GUI も利用できます。
デバッグコンソール(Ctrl‑E)
マイクロコードレベルと命令レベルの両方で対話型デバッガ。
| コマンド | 動作 |
|---|---|
| n 個のマイクロインストラクションを単ステップし、完全状態ダンプ(MPC, ALU, バス, レジスタ)を表示 |
| PC ブレークポイント設定(八進数)。 でリスト。 で削除 |
| 実行再開 |
| 命令逆アセンブル |
| メモリダンプ(八進数) |
| MMU 状態表示(カーネル+ユーザー PAR/PDR、現在モードをマーク) |
| レジスタダンプ |
ロジックアナライザ(Ctrl‑L)
開発時に信号をトレースしデータパスを調査するための実装。仮想・実機両方でトラブルシューティングに有効です。
- プローブ:主要 CPU 信号 102 ポイントが物理チップピン(
)へマッピングされ、DEC スキーマ K1‑5 から K2‑9 と一致。論理エイリアス(MPC, ALU_OUT, IR, PSW 等)が提供されます。KD1:Exx:pin - サンプルレート:実時間 CPU クロック(5 555 556 Hz)で 180 ns 解像度。設定可能なディバイダーにより長いキャプチャウィンドウを確保。
- キャプチャバッファ:最大 64 K サンプルのリングバッファ。任意信号でトリガ、プリ/ポスト比率調整、CSV エクスポート機能付き。
ロジックキャプチャは、複雑なマルチプレクシングパスを図示・デバッグするためにプロジェクト全体で広く利用されました。
サンプルプログラム
ll/34 にはいくつかのプログラムとシステムが付属しています。
- ゲームオブライフ
- V6 UNIX
- RT‑11 V4(元のテトリス付き)
- ATTN/11 – 自己注意機構を備えた小型トレーニング可能 Transformer
ビルド方法
make
C11 コンパイラが必要で、他に依存関係はありません。以下環境で警告なしでコンパイル確認済みです。
- Linux(x86_64 & aarch64) → musl と glibc
- macOS(aarch64)
- NetBSD 10(aarch64)
フォトリアリスティック GUI を備えたスタンドアロン WebAssembly バージョンは https://dbrll.github.io/ll‑34 にて公開されています。