Pi Desktop X86でTOPS-20
2018年1月、歴史的に貴重なDEC社 TOPS-20を使うためにKLH10エミュレーターをLinuxにインストールしました。
KLH10エミュレータのソースコードをLinuxOSでビルドします。LinuxOSであれば比較的簡単にビルドできます。
私の手持ちのLinuxマシンから、Raspberry Pi Desktop X86(DEBIAN STRETCH)をインストールしたPC(CPU:Atom Z520)を選びました。Raspberry Pi Desktop X86は、ラズベリーパイ用OSのRaspbianと同じ環境のx86 PC用のOSです。
今回は、x86 PCを使用しましたが Raspberry Pi2でもDEC社 TOPS-20は動作します。
「れがしーなOS達ラズベリーパイで試す DEC社 TOPS-20」という本は、DEC社 TOPS-20をRaspberry Piで実行する方法について書いてあります。
DEC社 TOPS-20とは
TOPS-20はDEC社 System-20用のOSで、私が大学生のときに使用していた素晴らしいOSです。
DEC社といえば、1970年代に人気となった16ビットミニコンPDP-11を知っている技術者が多いかと思います。
DEC社 System-20は、36ビットメインフレームのタイムシェアリング機 PDP-10 の系列です。KL10とかのプロセッサ名について調べてみました。
プロセッサ | モデル |
---|---|
KA10 | |
KI10 | 10xx |
KL10 Model-A | 10xx : DEC System-10 TOPS-10 20xx : DEC System-20 TOPS-20 |
KL10 Model-B | 2060 : DEC System-10 TOPS-10 2060 : DEC System-20 TOPS-20 v4.1 |
KS10 Model-A | 2020 |
10xx/20xxモデルの両方でTOPS-10/TOPS-20のオペレーティングシステムが実行できます。同じKL10プロセッサでも2060で仮想アドレス空間に関する命令セットを変更したので、Model-A と Model-B は全く別のCPUとなります。TOPS-20 v4.1以降は、Model B プロセッサでだけ動作します。
1976年に京都産業大学が導入したコンピュータは、DEC社のSystem-20(DEC-2040)でした。翌年には、さらに上位のSystem-20(DEC-2050)にリプレースしました。私が大学生のときに使った TOPS-20は、KL10プロセッサ Model-Aを搭載していたわけです。
シミュレーターについて
TOPS-20を使用するためのシミュレーターについて調べてみるといくつか候補がありました。
simh マルチシステムシミュレーター
まず定評あるsimhシミュレーターがあります。
simhは 「The Computer History Simulation Project」が開発しているWindows向けシミュレーターです。シミュレーターでCP/Mを実行したときに使用しました。
simh implements simulators for:
Digital Equipment Corporation
PDP-1, PDP-4, PDP-7, PDP-8, PDP-9, PDP-10, PDP-11, PDP-15, VAX
PDP-10も動作します。
しかし、「れがしーなOS達ラズベリーパイで試す DEC社 TOPS-20」という本に気になることが書いてありました。
今までの本では simhシミュレーターを使っていましたが、最新のTOPS-20 v7.0が動かないため、今回は Kenneth L.Harrenstien氏のKLH10(KL10BおよびKS10プロセッサをエミュレート)というエミュレータを利用します。
どうやらsimhは、KS10プロセッサ Model-Aをシミュレートしているようです。従って、TOPS-20 v4.1以降(最新は v7.0)を走らせることはできないということみたいです。
KLH10エミュレータ
KLH10エミュレータというのがあります。
TOPS-20 Operating Systemの説明の中で紹介しています。
For TOPS-20 enthusiasts, the best emulator is called KLH10, written by Ken Harrenstien (now at google). It’s an amazing piece of software, accurately reproducing not only the KL10 processor but also several of the complicated DEC I/O devices, including the dpni20 Network Interface Card. Unfortunately, the KLH10 emulator currently runs only on UNIX systems (Ken ported it to many flavors of UNIX, incl. Linux) but not on Windows.
(中略)・・・
Using this KLH10 emulator, Mark Crispin created the Panda TOPS-20 distribution, another milestone. This distribution provides an easy way to run your own full-blown TOPS-20 system, including TELNET logins, at speeds many times the original DEC hardware. I also added the Panda Display Panel for the KLH10 emulator.
【要約】
TOPS-20愛好家のために、Ken Harrenstien(現在google)によって書かれた最高のエミュレータはKLH10と呼ばれています。エミュレータは、KL10プロセッサだけでなく、dpni20ネットワークインターフェイスカードを含む複雑なDEC I/Oデバイスのいくつかを正確に再現する素晴らしいソフトウェアです。 残念ながら、KLH10エミュレータは現在、UNIXシステムでだけ動作しています(KenはLinuxを含む多くのUNIX製品に移植しましたが、Windowsでは使用できません)。
(中略)・・・
このKLH10エミュレータを使用して、Mark Crispinは別のマイルストーンであるPanda TOPS-20ディストリビューションを作成しました。 このディストリビューションは、元のDECハードウェアの何倍もの速度で、TELNETログインを含む本格的なTOPS-20システムを簡単に実行する方法を提供します。 また、KLH10エミュレータ用のPanda Display Panelも追加しました。
ここで紹介している Mark Crispin氏の Panda TOPS-20 distributionが良さそうです。先の「れがしーなOS達ラズベリーパイで試す DEC社 TOPS-20」という本でも、Panda TOPS-20 distribution を利用しています。
古代の冒険: Ten over Pi
ネットを検索するとThe Ancient Bits adventure: Ten over Piという面白い記事を見つけました。
Raspberry PiでTOPS-20システムを実行する方法についての記事です。
The Ancient Bits adventure : Retrocomputing and systems simulation fun
Simulating a KL10 system
Our good friend simh is not a good option to run TOPS-20. The reason is simh emulates a Decsystem-10, based on the KS-10 CPU. The KS-10 was a scaled down version of the “big” PDP-10 machines. It is posible to run TOPS-20 in a KS-10, but it is limited to the 4.something version. The last TOPS-20 version, the one we will want to run, is 7.1. Nevertheless, the real reason we will not want to use simh is the lack of the NI20 networking interface, necessary to plug the simulated machine into the network, either internet, decnet or both. Fortunately, there is another simulator we can use: Ken Harrenstien’s KLH10.
KLH10 has not been enhanced for some time. The newest version you can get, as far as I know, comes with a full image of TOPS-20, ready to be used. This is the work of Mark Crispin, and can be found also here. Unfortunately, the package contains binaries just for Linux over intel processors. Since we want to use a Raspberry, which is ARM-based, we will have to compile KLH from sources.
【要約】
古代の冒険:レトロコンピューティングとシステムシミュレーションの楽しみKL10システムのシミュレーション
私たちの良い友達 simhはTOPS-20を実行する良い選択肢ではありません。理由は、simhはKS-10 CPUに基づいてDEC System-10をエミュレートしているからです。KS-10は、大きなPDP-10マシンの縮小版でした。KS-10でTOPS-20を走らせることは可能ですが、それはバージョン4.?に限られています。
最後に実行したいTOPS-20バージョンは7.1です。それにもかかわらず、私たちがsimhを使いたくない本当の理由は、シミュレーションされたマシンをinternet、decnetまたはその両方に接続するために必要なNI20ネットワーキングインターフェイスの欠如です。幸運なことに、Ken HarrenstienのKLH10という別のシミュレーターがあります。KLH10はしばらくの間拡張されていません。あなたが得ることができる最新のバージョンは、私が知る限りTOPS-20の完全なイメージが用意されています。これはMark Crispinの作品であり、ここでも見ることができます。残念ながら、このパッケージには、IntelプロセッサのLinux用のバイナリーしか入っていません。ARMベースのRaspberryを使用したいので、ソースからKLHをコンパイルする必要があります。
simhシミュレーターではなく、Ken HarrenstienのKLH10 PDP-10 エミュレータを勧めています。
その他、Compiling KLH10にも、KLH10のビルド方法について記述があります。
Panda TOPS-20 distribution
KLH10エミュレータを使用して作成した Panda TOPS-20 distributionには、以下が含まれています。
- complete klh10-2.0h sources
- prebuilt klh10-2.0h binaries for Linux on Intel
- prebuilt TOPS-20 filesystem with complete sources
KLH10エミュレータ用のPanda Display Panelという コンソールディスプレイが用意され、ランプが点滅してアドレスやプログラムデータの動きを見ることができるそうです。
Panda TOPS-20 distributionのダウンロード
Panda TOPS-20 distributionのKLH10エミュレータをインストールすることにしました。
この distributionは、KLH10をベースとしてTOPS-20やオプションソフトをインストールしたディスク・イメージをまとめたものです。
Panda TOPS-20 distribution をダウンロードして展開します。
/home/MyHome ディレクトリに DECsystem20というディレクトリを作成してダウンロードして panda-dist.tar.gz を展開します。
$ cd MyHome/ $ mkdir DECsystem20 $ cd DECsystem20/ $ wget http://panda.trailing-edge.com/panda-dist.tar.gz ・・・ $ tar zxvf panda-dist.tar.gz panda-dist/ panda-dist/README ・・・ $ ls -l drwxr-xr-x 3 pi pi 4096 11月 23 2005 panda-dist -rw-r--r-- 1 pi pi 221145391 6月 24 2006 panda-dist.tar.gz $
tree コマンドでディレクトリ構造を確認します。
$ tree --charset X -d . `-- panda-dist `-- klh10-2.0h |-- bld | |-- fbppc | |-- fbx86 | |-- lnx86 | |-- lnxarm | |-- lnxppc | |-- nbaxp | |-- nbx86 | |-- osfaxp | `-- solsparc |-- contrib | |-- backwr | |-- read20 | `-- supdup |-- doc |-- run | |-- dfkfb | |-- klnic | |-- klt10 | |-- klt20 | |-- ksits | | `-- pubits | | |-- adm | | `-- doc | |-- kst10 | `-- kst20 `-- src 29 directories
panda-dist/klh10-2.0h/bld/ に複数プラットフォーム用のビルド環境を用意しています。例えば、lnx86は86アーキテクチャのLinuxOS用であり、lnxarmはarmアーキテクチャのLinuxOS用です。
panda-dist/klh10-2.0h/bld/ ディレクトリをもう少し調べてみます。
$ tree --charset X panda-dist/klh10-2.0h/bld/ panda-dist/klh10-2.0h/bld/ |-- fbppc | |-- 00build | `-- Makefile -> ../../src/Mk-fbppc.mk |-- fbx86 | |-- 00build | `-- Makefile -> ../../src/Mk-fbx86.mk |-- lnx86 | |-- 00build | `-- Makefile -> ../../src/Mk-lnx86.mk |-- lnxarm | |-- 00build | `-- Makefile -> ../../src/Mk-lnxarm.mk |-- lnxppc | |-- 00build | `-- Makefile -> ../../src/Mk-lnxppc.mk |-- nbaxp | |-- 00build | `-- Makefile -> ../../src/Mk-nbaxp.mk |-- nbx86 | |-- 00build | `-- Makefile -> ../../src/Mk-nbx86.mk |-- osfaxp | |-- 00build | `-- Makefile -> ../../src/Mk-osfaxp.mk `-- solsparc |-- 00build `-- Makefile -> ../../src/Mk-solsparc.mk 9 directories, 18 files
Makefile は、/src 以下の Mk-xxxx.mk (xxxxはビルド環境)へのリンクとなっています。
KLH10エミュレータについて
ドキュメントの概要(panda-dist/klh10-2.0h/doc/Intro.txt)にKLH10エミュレータについて書いてあります。
“KLH10” is an emulator for the PDP-10 series of machines from Digital Equipment Corporation. The most important thing to know is that this is a MACHINE emulator. It emulates a specific PDP-10 CPU and all necessary I/O devices, running a site’s existing operating system (monitor) binary without change — which then runs user-mode application programs just as if they were on a real PDP-10. Even floating-point results are bit-identical.
The KLH10 emulator is extremely portable and flexible — it is written in ANSI C so that it can be ported to new platforms quickly, and new “virtual hardware” can readily be added. The following describes the currently supported versions:
【要約】
「KLH10」はDigital Equipment CorporationのPDP-10シリーズのマシンのエミュレータです。知るべき最も重要なことは、これがマシンエミュレータであることです。これは、特定のPDP-10 CPUと必要なすべてのI/Oデバイスをエミュレートして、サイトの既存のオペレーティングシステム(モニタ)バイナリを変更せずに実行し、実際のPDP-10のようにユーザーモードのアプリケーションプログラムを実行します。浮動小数点の結果でさえ、ビットは同一です。KLH10エミュレータは非常に移植性と柔軟性が高く、新しいプラットフォームに素早く移植できるようにANSI Cで書かれており、新しい「仮想ハードウェア」を簡単に追加できます。現在サポートされているバージョンについて以下に説明します。
Emulation Target: KL
CPU | KL10B with extended addressing |
Memory | 4MW MF20 (22 bits – 8192 pages of 512 words) |
Microcode | v.442 (supports final versions of TOPS-10 or TOPS-20) |
Devices available: | DTE – one CTY RH20 – up to 8 (7 if using a NI20) Disk – 8 RP06 or RP07 drives per RH20 Tape – 8 TM02/3 formatters per RH20, with one TU45/TU77 each Network – one NI20 (KLNI/NIA20) ethernet interface |
KL10 Model-B プロセッサをエミュレートし、TOPS-10/TOPS-20の最終版をサポートしています。
Emulation Target: KS
CPU | KS10 |
Memory | 512KW (19 bits – 1024 pages of 512 words) |
Microcode | ITS v.262 (supports final version of KS10 ITS) DEC v.130 (supports final versions of KS TOPS-10/20) |
Devices available: | FE – one CTY RH11 – up to 2 Disk – 8 RP06 or RP07 drives per RH11 Tape – 8 TM02/3 formatters per RH11, with one TU45/TU77 each Network – one “ACC LH-DH” IMP interface (ITS only) |
KS10プロセッサをエミュレートし、ITSとKS TOPS-10/20の最終版をサポートしています。
ITS(Incompatible Timesharing System)は、マサチューセッツ工科大学(MIT)で開発されたPDP-10のタイムシェアリングオペレーティングシステムの1つです。
KLH10エミュレータのビルド
インストールするPCは、CPU Atom Z520を搭載しています。
panda-dist/klh10-2.0h/bld ディレクトリにAtomアーキテクチャのLinuxOS用ビルド環境(lnxatom)を作成します。x86アーキテクチャのLinuxOS用ビルド環境(lnx86)をベースとしますので、一式をコピーします。
Makefileを修正しますので、差分を比較できるように元のMakefileをMakefile.orgで保存します。
$ pwd /home/pi/MyHome/DECsystem20/panda-dist/klh10-2.0h/bld $ ls fbppc fbx86 lnx86 lnxarm lnxppc nbaxp nbx86 osfaxp solsparc $ mkdir lnxatom $ cp lnx86/* lnxatom $ ls lnxatom 00build Makefile $ cd lnxatom $ cp Makefile Makefile.org $ ls 00build Makefile Makefile.org
Makefile に次のような記述があります。
# Source definitions CENVFLAGS = -DCENV_CPU_I386=1 -DCENV_SYS_LINUX=1 -DKLH10_DEV_LITES=1 \ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
記号定数の意味をソースコードから調べます。
- CENV_CPU_I386=1 : (klh10s.h) CPUの種類をIntel 386/486と指定
- CENV_CPU_ARM=1 : (klh10s.h) CPUの種類をARMと指定
- CENV_SYS_LINUX=1 : (cenv.h) OSの種類をLinuxと指定
- KLH10_DEV_LITES=1 : (dvlites.c) パラレルポートに接続した Panda Display表示コード
- _FILE_OFFSET_BITS=64 : (cenv.h) 64-bit file操作を使用
- _LARGEFILE_SOURCE : (cenv.h) fseeko() 関数など64-bit型
Makefile を修正します。
私のPCはPanda Displayを接続していないので、KLH10_DEV_LITES=0に変更します。
$ diff Makefile Makefile.org 30c30 < CENVFLAGS = -DCENV_CPU_I386=1 -DCENV_SYS_LINUX=1 -DKLH10_DEV_LITES=0 \ --- > CENVFLAGS = -DCENV_CPU_I386=1 -DCENV_SYS_LINUX=1 -DKLH10_DEV_LITES=1 \
panda-dist/klh10-2.0h/src のMakefileを修正します。
Makefileを修正しますので、差分を比較できるように元のMakefileをMakefile.orgで保存します。
$ pwd /home/pi/MyHome/DECsystem20/panda-dist/klh10-2.0h/src $ cp Makefile.mk Makefile.mk.org
記号定数の意味をソースコードから調べます。
- KLH10_CTYIO_INT=? : デバイスのI/Oチェック方法 1=割り込み駆動方式, 0=ポーリング方式
- KLH10_ITIME_SYNCH=1 : INTERVAL TIME CLOCK カウンタ同期
- KLH10_ITIME_INTRP=1 : INTERVAL TIME CLOCK 割り込み駆動
高性能コンピュータがKLH10の非同期メカニズムを破壊するようなので、デバイスI/O方式を変更するために Makefile.mk を修正します。
(The Ancient Bits adventureの情報 )
INTERVAL TIME CLOCKを割り込み駆動(KLH10_RTIME_INTRP)からカウンタ同期(KLH10_ITIME_SYNCH)に変更します。
KLH10_CTYIO_INT を1→0に変更して、デバイスのI/Oチェック方法をポーリング方式とします。
$ diff Makefile.mk Makefile.mk.org 357,358c357,358 < -DKLH10_ITIME_SYNCH=1 \ < -DKLH10_CTYIO_INT=0 \ --- > -DKLH10_ITIME_INTRP=1 \ > -DKLH10_CTYIO_INT=1 \
KLH10エミュレータのインストール
インストール用のドキュメント(panda-dist/klh10-2.0h/doc/install.txt)を参考にしてインストールします。
実行形式を保存する DECsystem20/binklh ディレクトリを作成して、環境変数 $KLH10_HOME に設定します。
$ pwd /home/pi/MyHome/DECsystem20 $ mkdir binklh $ export KLH10_HOME=~/MyHome/DECsystem20/binklh $ echo $KLH10_HOME /home/pi/MyHome/DECsystem20/binklh
AtomアーキテクチャのLinuxOS用ビルド環境(lnxatom)に移動します。
$ pwd /home/pi/MyHome/DECsystem20/panda-dist/klh10-2.0h/bld/lnxatom $ ls 00build Makefile Makefile.org
「make base-kl」と入力してビルドします。
$ make base-kl ・・・
「make install」と入力して、$KLH10_HOMEに実行形式をインストールします。
$ make install ・・・ Copying binaries into /home/pi/MyHome/DECsystem20/binklh ・・・
panda-dist/klh10-2.0h/run ディレクトリに各OSの実行環境があります。
$KLH10_HOMEにPDP-10ソフトウェアのTOPS-20(klt20)をインストールします。
$ cd panda-dist/klh10-2.0h/run $ ls dfkfb klnic klt10 klt20 ksits kst10 kst20 $ cd klt20 $ pwd /home/pi/MyHome/DECsystem20/panda-dist/klh10-2.0h/run/klt20 $ cp -p * $KLH10_HOME
panda-dist ディレクトリにTOPS-20のサンプルがあるので$KLH10_HOMEにコピーします。
$ pwd /home/pi/MyHome/DECsystem20/panda-dist $ cp klt20 $KLH10_HOME $ cp klt20.ini $KLH10_HOME
klt20 の内容を確認すると、klt20.iniの環境を設定して kn10-klを起動しています。
$ cat klt20 #!/bin/sh exec ./kn10-kl klt20.ini
klt20.ini の内容を確認します。
$ cat klt20.ini ; Define basic device config - one DTE, one disk, one tape devdef dte0 200 dte master devdef rh0 540 rh20 devdef rh1 544 rh20 devdef dsk0 rh0.0 rp type=rp07 format=dbd9 devdef mta0 rh1.0 tm03 type=tu45 ; Set Ethernet address devdef ni0 564 ni20 ipaddr=10.0.0.51 ; Define the idle device on 700 devdef idler 700 host ; Set switch register set sw=254200,,147 ; Set console lights I/O base register ;Uncomment the following line if you have a Panda display. ;lights 378 ; Load disk bootstrap directly load boot.sav ; Ready to GO
panda-dist ディレクトリにTOPS-20のハードディスクイメージ(RH20.RP07.1)があります。
約500MBと大きいですが、$KLH10_HOMEにコピーします。
$ pwd /home/pi/MyHome/DECsystem20/panda-dist $ cp RH20.RP07.1 $KLH10_HOME
まとめ
$KLH10_HOME(/home/pi/MyHome/DECsystem20/binklh)にKLH10エミュレータの実行環境ができました。
TOPS-20実行方法は、次のブログに書きます。お楽しみに!