PDP-11 DCJ11 CPUでMINI-UNIXを動かしてみました

PDP-11

本記事はPDP-11の命令セットを持つDCJ11(Jaws)CPUを動作させるためにRyo Mukaiさんが開発したTangNanoDCJ11MEMを使用しています。GitHubで公開されています。

PDP-11 CPUでMINI-UNIXを動かしたい

前回はPDP-11 DCJ11 CPUでUNIX v6を動かしてみましたが、TangNanoDCJ11MEMで実装されているメモリ容量ではUNIX v6の本格的な利用は難しいことがわかりました。そこでMMUを使用せず56KBのメモリでも動作するらしいMINI-UNIXを動かすことにチャレンジしてみました。まずはsimhで動かして評価したうえで、問題がなさそうであれば、TangNanoDCJ11MEMで動作させてみます。

MINI-UNIXとは

MINI-UNIXはMMUを搭載しないローエンドのPDP-11/05などに書き直されたUNIX v6の派生版です。UNIX v6の一部の機能が外されているものの、大部分のUNIX v6の機能が使え、56KBのメモリで動作するとのことです。

調べてみたところ、以下のサイトでsimh環境へのインストール方法がまとまっているようで、simhでどのようなものであるかの確認ができそうです。

Mini-UNIX

シミュレーション環境でのMINI-UNIXの起動

UNIX v6の時と同様に歴史的なコンピュータのシミュレーション環境であるsimhを使います。この上でMINI-UNIXを起動し、56KBのメモリでどこまで動くのかを確認したのちに、作成したディスクイメージをTangNanoDCJ11MEMのmicroSDカードに書き込んで本物のPDP-11 CPUで動かします。

simhのインストール

simhはUbuntuであればパッケージが提供されていますのでaptコマンドで簡単にインストールできます。

そのほかの環境の場合はsimhの公式サイトで確認してください。

必要なファイルの入手

MINI-UNIXのサイトから必要なファイルをダウンロードします。最低限以下の2つのファイルがあればsimh環境でのMINI-UNIXの起動ができます。

  • munix-tap.zip – MINI-UNIXのインストールテープ
  • munix-initfiles.zip – simh用のコンフィグレーションファイル

ダウンロードしたファイルはunzipで展開しておきます。

インストールテープからブートしてディスクイメージを作成する

インストール用のsimhコンフィグファイルを確認してみます。

ダウンロードしたMINI-UNIXのインストールテープはtm0にattachされます。rk0~rk2はディスクイメージにattachされますが最初は中身は空の状態です。dep命令で100000番地からメモリに書き込みを行っていますが、これはインストールテープからbootstrapを読み込むプログラムのようです。参考までに逆アセンブルリストを以下に示します。テープドライバのレジスタを操作していることがわかります。

インストール用のsimhのコンフィグファイルを使い、Mini-UNIXのサイトの説明にしたがってインストールしていきます。

このようにsystem.dskにデータが書き込まれていればテープからのコピーは完了です。

システムディスクから起動する

システムディスクの作成が完了したら、simhの環境でMINI-UNIXを起動してみます。起動用に提供されているコンフィグレーションファイルpdp11.iniを示します。PDP-11/20のメモリ64KBで各ディスクイメージをattachしている単純なものです。

pdp11.iniはデフォルトのファイル名ですので、pdp11と起動すれば自動的に読み込まれます。参考のため起動から終了までの実行例を示します。

C言語でHello Worldを動かしてみる

UNIX v6では動かなかったC言語をMINI-UNIXで動かしてみます。手順はUNIX v6の時と同じです。

問題なくHello Worldが表示されました。

カーネルのセルフビルド

simh環境ではカーネルのセルフビルドを行うこともできます。カーネルのソースは/usr/sysの下にありますので、ここに用意されているrunスクリプトをshで実行するとカーネルがビルドされます。なお、いきなり /rkmx, /rpmx, /hpmxのカーネルファイルが上書きされますので十分注意してください。

TangNanoDCJ11MEMでのMINI-UNIXの起動

いよいよTangNanoDCJ11MEMでMINI-UNIXを起動してみます。動作環境はGitHubのunix-v6と同じですのでGitHubのリポジトリを確認してください。

TangNanoDCJ11MEM/applications/unix-v6 at main · ryomuk/TangNanoDCJ11MEM
Memory system and UART implemented on Tang Nano 20K for DEC DCJ11 PDP-11 Processor - ryomuk/TangNanoDCJ11MEM

microSDカードの作成

simh環境ではsystem.dsk, source.dsk, doc.dskというディスクイメージができているはずです。これらをmicroSDカードに書き込みます。TangNanoDCJ11MEMで実装されているRKディスクドライバの仕様に合わせて書き込めば、アプリケーションからはmicroSDカードがディスクに見えます。このあたりはGitHubのunix-v6の説明にも記載されていますので、そちらも確認してください。

以下は書き込みのための手順です。

microSDカードに書き込むときのデバイス名(この例では/dev/sdb)は必ずmicroSDカードであるかを確認してください。間違えてハードディスクやSSDを壊してしまうと取り返しがつきません。

MINI-UNIXの起動

UNIX-v6用に準備したTangNanoDCJ11MEMに先ほど作成したmicroSDカードを取り付けて174000番地のBootstrap loaderを実行し、カーネルのファイル名である rkmx を入力すればMINI-UNIXが起動します。ターミナルの設定は115200bpsにしてください。PDP11GUIのターミナルも使えます。

特に問題なく動作しているようです。

C言語でHello Worldを動かしてみる

TangNanoDCJ11MEMのUNIX v6では動かせなかったC言語が動作するかを確認してみます。

問題なく動作することが確認できました。

カーネルのセルフビルド

カーネルのセルフビルドを試してみたのですが、simh環境とは異なりコンパイル中に大量のエラーが出て、最終的にはHALTになりました。こちらは原因調査中です。→TangNanoDCJ11MEM Rev.2で解決しました。

MINI-UNIXを使ってみる

UNIX v6との違いと使用感

まだ本格的に使ってはいないのですが、気づいた点をあげておきます。、

  • bootの時のファイル名ですが、mxでも良さそう。rkmxと同じものがmxとして存在します。
  • unix v6に比べると、ややもっさりした動きに見えます。制限された環境なのでやむを得ないようです。
  • 一部の命令は下位CPUでも動くようにエミュレーションしているそうです。→ここを外すと速くなるかも。
  • パイプは存在しないので、シェルのパイプはファイルで代用している。→便利なので無いよりはまし。
  • simh環境ではカーネルのセルフビルドを行うことができますが、TangNanoDCJ11MEMではビルド中にエラーが発生します。この原因は調査中です。→TangNanoDCJ11MEM Rev.2で解決しました。
  • MINI-UNIXの十分なdocumentは用意されているようですが、まだ目を通せていないので何かあれば追記します。

source.dsk, doc.dskをattachしてみる

simhで作成した環境ではsource.dsk, doc.dskのディスクが空の状態です。MINI-UNIXのウェブサイトに掲載されていますが、ディスクイメージが発見されたそうなので、それをattachしてmountしてみます。

ディスクイメージがまとまっているzipファイル名はmunixrks.zipです。これをダウンロードしてunzipし、microSDカードを再作成しました。

新しく作ったmicroSDカードで起動してmountしてみます。mountコマンドは/etc/mountです。マウントポイントは/mntがありましたので、そこを使いました。なお、ディスクデバイスが2つしか作成されていなかったので、3つのディスクを接続するときはmknodが必要のようです。(まだ未確認)

今回はsource.dskを/mntにmountしてみました。

これでディスクのmountができることも確認できました。

まとめ

TangNanoDCJ11MEMでMINI-UNIXを使うことができましたが、カーネルのセルフビルドなどまだ動かない部分もありますので、引き続き調べてみようと思います。また、MINI-UNIXは完全なUNIX v6というわけではありませんので、いずれはUNIX v6を動かせるような環境を準備できればと考えています。

20250915追記:PDP-11 DCJ11 CPUでMini-UNIXを動かしてみました(TangNanoDCJ11MEM Rev.2版)もご覧ください。

タイトルとURLをコピーしました