PDP-11 DCJ11 CPUでMini-UNIXを動かしてみました(TangNanoDCJ11MEM Rev.2版)

PDP-11

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

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

1年前にPDP-11 DCJ11 CPUでMini-UNIXを動かしてみましたという記事を掲載しましたが、最近PDP-11 DCJ11 CPU界隈にアップデートがありました。なんと上位モデルのFPGAボードであるTang Console 138Kを使用して256KB RAMを実装しUNIX V6をPDP-11 DCJ11 CPUで動かすTangConsoleDCJ11MEMという試みです。それと同時にTangNanoDCJ11MEMもRev.2となり動作が安定したようです。これらのアップデートの詳細についてはGitHubでご確認ください。

GitHub - ryomuk/TangConsoleDCJ11MEM: DEC DCJ11 processor test board using memory systems and peripherals implemented on Tang Console 138K.
DEC DCJ11 processor test board using memory systems and peripherals implemented on Tang Console 138K. - ryomuk/TangConso...
GitHub - ryomuk/TangNanoDCJ11MEM: Memory system and UART implemented on Tang Nano 20K for DEC DCJ11 PDP-11 Processor
Memory system and UART implemented on Tang Nano 20K for DEC DCJ11 PDP-11 Processor - ryomuk/TangNanoDCJ11MEM

ここでは私が持っているTangNanoDCJ11MEM Rev.1.1をRev.2にアップデートしたうえで、TangNanoDCJ11MEMのメモリ容量に適しているMini-UNIXがどこまで動作するかを確認してみました。Rev.1では残念ながらまだ不安定なところがあり、カーネルのセルフビルドを正常に行うことができませんでしたが、Rev.2ではどうなるかを追試します。

TangNanoDCJ11MEM Rev.2にアップデート

TangNanoDCJ11MEMをRev.2.にアップデートするのは以下のステップだけなので非常に簡単です。

  • Rev.1で行ったパターンカットおよびジャンパーは変更無し。
  • シリアルRXとCLK2を33Ωのダンピング抵抗を挟んで接続する。
  • ファームウェアをRev.2用に書き換える。

ハードウェアの修正

まずはハードウェアの修正です。私の場合は手元に33Ωの抵抗が無かったので手持ちの1Ω+10Ω+22Ωを接続して33Ωにしました。

この抵抗をシリアルRXのピンヘッダの根元にはんだ付けし、空中配線でDCJ11 CPUのCLK2のピンソケットに差し込みました。

再びジャンパー線を接続しTangNanoDCJ11MEM Rev.2のハードウェアが完成しました。

ファームウェアのアップデート

Rev.2のファームウェアはGitHubのapplications.rev2のツリーにTangNanoDCJ11MEM_project.fsというファイル名で登録されていますので、前回の記事と同じ手順でTangNano 20Kに書き込みます。

Ubuntu22.04でopenFPGALoaderで書き込んだ時の画面です。このようにEraseされたあとWriteが終了すれば完了です。

なお、私の場合はTangNano 20Kの開発環境であるGOWINでソースからビットストリームを再生成しopenFPGALoaderでTangNano 20Kに書き込みました。

Mini-UNIXを起動してみる

まずはMini-UNIXのファイルシステムが書き込まれたmicroSDカードを準備します。前回の記事の手順のようにsimhで作成したファイルシステムをmicroSDカードに書き込みます。

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

コンソールはTangNano 20KのUSBシリアルを使用します。Teratermでは以下の設定にします。

ポートはお使いのPC環境で異なりますので確認してください。なお、PDP11GUIのターミナルも使えます。

TangNano 20Kに作成したmicroSDカードを取り付けて174000番地のBootstrap loaderを実行し、RKディスク用のカーネルのファイル名である rkmx を入力すればMini-UNIXが起動します。

問題なく起動できました。ここまではRev.1でも動作は確認できています。

Mini-UNIXのカーネルをビルドしてみる

前回はMini-UNIXのカーネルをビルドしようとしたら途中でエラーとなってしまいどうしてもビルドができませんでした。今回のRev.2ではどうでしょうか。

カーネルのソースは/usr/sysの下にあります。ここに用意されているrunスクリプトをshで実行するとカーネルがビルドされます。なおビルドにより/rkmx, /rpmx, /hpmxのカーネルファイルが上書きされますので、現在のカーネルをコピーしてバックアップしておくことをお勧めします。

特に問題なくビルドが完了しました。かかった時間は約8分でした。ルートディレクトリにあるカーネルも書き換わっているようでファイルの日時が変わっています。

このカーネルを使用してブートしてみます。

問題なくブートができました。これで好きなだけカーネルをいじることができます。

まとめ

TangNanoDCJ11MEMはメモリ空間が小さいという制限はありますが、Unix v1やMini-UNIXなどのメモリが少なくても動作するソフトウェアの利用ができます。過去のPDP-11の資産もある程度は動かせますし、過去の記事で紹介したPDP11GUIを使うと強力なデバック機能を使いながら、実際のPDP-11の動きを知ることができます。他にもsimhという優れたシミュレーターもありますが、やはり本物のCPUを動かすのは一味違います。

ここまできたらやはりフルセットのUnix V6をDCJ11 CPUで動かしてみたいので、準備ができたらTangConsoleDCJ11MEMにもチャレンジしてみたいと思います。

PDP-11 DCJ11 CPUを楽しませていただき、開発者のRyo Mukaiさんに感謝します。

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