TELNETでTOPS-20にログイン
2018年1月、歴史的に貴重なDEC社 TOPS-20を使うためにKLH10エミュレーターをLinuxにインストールして、TOPS-20を実行することができました。
KLH10エミュレーターを起動するときにシステム構成設定を記述した klt20.iniファイルを指定します。インストール用のドキュメント(panda-dist/klh10-2.0h/doc/install.txt)を参考にして、どんなシステム構成設定をしているか調べました。
そして、ネットワーク設定を行うことにより、TELNETによりTOPS-20にログインすることができました。
システム構成設定 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=192.168.0.251 ; 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
デバイスの定義は、devdefineで行います。
devdefine <devid> <dev#> <drivername> <optional-parameters>
- <devid> : デバイス識別名
- <dev#> : デバイス番号(8進数)
- <drivername> : エミュレーターのドライバーモジュール
- <optional-parameters> : オプションパラメーター
DTE 設定
DTE(Data Terminal Equipment)は、1個のCTY(Character TYpewriter)をサポートします。
devdef dte0 200 dte master
- 200は、デバイス番号です。
- masterは必須項目で、マスターDTEであることを指定しています。
RH20 Massbusコントローラー 設定
DEC社 PDP-10のKL10プロセッサーを搭載した20xxシリーズは、DEC社が考案した新しい高速I/Oバス Massbusでディスクドライブや磁気テープなどの周辺機器を接続していました。
Massbusを使用するデバイスを定義する前に、まずRH20 Massbusコントローラー(最大8台)を定義します。RH20ドライバーは、RH20コントローラーとそれに関連するデータチャンネルの両方をエミュレートします。
devid | dev# | 意味 |
---|---|---|
rh0 | 540 | Controller #0 |
rh1 | 544 | Controller #1 |
rh2 | 550 | Controller #2 |
rh3 | 554 | Controller #3 |
rh4 | 560 | Controller #4 |
rh5 | 564 | RESERVED for NI20 |
rh6 | 570 | Controller #6 |
rh7 | 574 | Controller #7 |
ネットワークインターフェース(NI20)は、デバイス番号564に対応するMassbusスロット#5に常に取り付けており予約しているので、devdef rh5の定義は不要です。
ここでは、RH20コントローラーを2台(#0と#1)定義します。
devdef rh0 540 rh20 devdef rh1 544 rh20
デバイス 設定
デバイスを定義してRH20コントローラーにバインドします。ひとつのRH20コントローラーに最大8個のユニット(0~7)を接続することができます。
<devid>.<#>で、デバイス識別名とユニット番号を指定します。
ここでは、RP ディスクとTM03 磁気テープを接続します。
devdef dsk0 rh0.0 rp type=rp07 format=dbd9 devdef mta0 rh1.0 tm03 type=tu45
RPディスクを定義します。
devdef dsk0 rh0.0 rp type=rp07 format=dbd9
デバイス識別名 dsk0でRH20コントローラー#0のユニット#0 (rh0.0)に接続します。
「type=」は、ドライブのタイプを指定します。RP04, RP05, RP06, RP07 , RM02, RM03, RM05, RM80 がありますが、RP06とRP07を推奨します。(他のタイプはテストされていないと書いてあります)
「format=」は、 仮想ディスクファイル内の編成を指定します。
- RAW – 最速(8バイトで1ワード、I/O変換なし)
- DBD9 – 最もコンパクト(9バイトで2ワード)
- RARE – 半加工モード
RAWモードは、初期ディスクの内容を完全にゼロに初期化する必要があるため、注意して使用する必要があります。
実際の仮想ディスクファイルの容量は、ドライブタイプとフォーマットにより異なります。
Drive | #Sectors | Pages | RAW Format | DBD9 Format |
---|---|---|---|---|
RP05 | 156,180 | 39,045 | 160 MB | 90 MB |
RP06 | 309,700 | 77,425 | 318 MB | 179 MB |
RP07 | 866,880 | 216,720 | 888 MB | 500 MB |
「devdef dsk0 rh0.0 rp type=rp07 format=dbd9」を指定したので、Linux上に RH20.RP07.1という500MBの実ファイルが対応したわけです。
TM03 磁気テープを定義します。
devdef mta0 rh1.0 tm03 type=tu45
「type=」は、ドライブのタイプを指定します。TU45、TE16、TU77の3種類がありますが、エミュレートされたテープには関係ありません。
ネットワーク デバイス 設定
NI20ドライバーはKLNI/NIA20イーサネットインターフェースをエミュレートします。ホストシステムに実際のイーサネットポートが必要です。イーサネットポートは、KLH10エミュレーター専用かネイティブOS共有の設定をすることができます。
実際のDEC社 SYSTEM-20xxは、デバイス番号564に対応するMassbusスロット#5にネットワークデバイスNI20を接続しています。
devdef ni0 564 ni20 ipaddr=192.168.0.251
ネットワークの設定は、2種類あります。
- 方法1 :【専用インターフェース】2個のイーサネットポートを持ち、ひとつをKLH10エミュレーター専用にします。「DEDIC=TRUE」に設定し、「IFC=xx」でインターフェースを指定します。
- 方法2 :【共有インターフェース】1個のイーサネットポートをネイティブOSと共有にします。「IPADDR=d.d.d.d」を指定します。
[DEDIC=<boolean>]は、TRUEで専用インターフェース、FALSEで共有インターフェースを指定します。
[IFC=<name>]は、ホストシステムの専用ハードウェアイーサネットポートを指定します。
[IPADDR=<d.d.d.d>]は、PDP-10 OSが使用するIPアドレスを指定します。(共有インターフェースでのみ意味があります)
ネイティブ・ホスト デバイス 設定
idlerデバイスは、エミュレーターからのサービスや情報を要求する簡単なAPIとして機能する擬似デバイスです。(実際のPDP-10には存在しません)
devdef idler 700 host
ネットワーク関係の設定
ネットワークドライバー dpni20
Panda TOPS-20 distributionをインストールした $KLH10_HOME ディレクトリー内にネットワークドライバー dpni20があります。ネットワークドライバー dpni20の実行には、ルート権限が必要なので’setuid root’します。
$ ls -l dpni20 -rwxr-xr-x 1 pi pi 210508 12月 29 20:10 dpni20 $ sudo chown root dpni20 $ sudo chmod 4750 dpni20 $ ls -l dpni20 -rwsr-x--- 1 root pi 210508 12月 29 20:10 dpni20 $
setuid属性を付与したので、KLH10エミュレーターがネットワークドライバー dpni20実行するとき、そのファイルの所有者(root)の特権を得ることができます。
TOPS-20 IPアドレス
TOPS-20のIPアドレスを設定します。TOPS-20が稼働するネットワークは、192.168.0.XXX です。KLH10エミュレーターをインストールしたLinux PCのIPアドレスは 192.168.0.250です。その中で走るTOPS-20のIPアドレスは 192.168.0.251とします。TELNETを使用するWindowsPCのIPアドレスは 192.168.0.6です。
OPERATORユーザーでTOPS-20にログインします。システムファイル<SYSTEM>INTERNET.ADDRESSを変更するので、ENABLEコマンドで特権モードになります。
IPアドレスを192.168.0.251に設定します。
@ENABLE $ $EDIT TOPS20:<SYSTEM>INTERNET.ADDRESS.2 $ $TYPE TOPS20:<SYSTEM>INTERNET.ADDRESS.2 IPNI#0,192.168.0.251,PACKET-SIZE:1500,LOGICAL-HOST-MASK:255.0.0.0,DEFAULT,PREFERRED
TELNETでTOPS-20を実行
KLH10エミュレーターを起動して TOPS-20をマルチユーザーモードで起動します。DBUGSWシステムテーブルは「dbugsw/」入力、T1表示、「1」入力します。システム立ち上げの理由は、「new」とします。
WindowsのTera Termから TELNETで IP=192.168.0.251に接続します。
Panda Distribution, PANDA TOPS-20 Monitor 7.1(21733)-4
PANDA TOPS-20 Monitorが応答を返してきました。
OPERATORユーザーでログインしてみます。
@LOGIN (USER) OPERATOR (PASSWORD) ?Request denied by Access Control Facility @
「?アクセス制御機能によって要求が拒否されました」とログインが拒否されました。
KLH10エミュレーターを起動したシステムコンソールで、OPEARORユーザーでログインして新しいPIユーザーを作成します。
ユーザーアカウントの作成方法は、「DEC社 TOPS-20を使う方法 TOPS-20コマンド使用編」に記述した「アカウントの作成」手順を参考にして下さい。
もうひとつのPIユーザーでTELNETからログインしてみます。
@LOGIN (USER) PI (PASSWORD) Job 10 on TTY44 (TCP) 7-Jan-2018 18:01:05 Last interactive login 6-Jan-2018 17:42:43 Last non-interactive login Never @
今度は無事ログインできました。OPERATORユーザーは、ネットワークからのログインを禁止する設定になっているようです。
FINGERコマンドで、ログインユーザーの一覧を見るとPIユーザーが表示されています。
@FINGER User Personal name Job Subsys Idle TTY Console location ??? 1 EXEC 9. 5 System Console PI 10 FINGER 44 [192.168.0.6] @
まとめ
システム構成設定ファイル(klt20.ini)の設定を調べました。
そして、ネットワーク設定を行うことにより、TELNETによりTOPS-20にログインすることができました。FINGERコマンドなどのネットワーク系のコマンドも使用できました。
ネットワーク端末から TOPS-20を使うことができ、本物の DEC社 SYSTEM-20を使用しているような錯覚を覚えました。
Linuxをインストールしたホストマシンは、CPUにインテル Atomプロセッサー Z520 1.33GHzを搭載したメモリ容量1GBのx86 PCです。とても低スペックのPCなので、TELNETを2接続もすると端末応答が悪くなってしまいました。最新のPCでTOPS-20を実行すると、マルチユーザーモードでストレスなく使用できるかもしれませんね。