KLH10エミュレーターをインストール
2018年1月、歴史的に貴重なDEC社 TOPS-20を使うためにKLH10エミュレーターをLinuxにインストールしました。
KLH10エミュレーターでTOPS-20を実行
KLH10エミュレーターでTOPS-20を実行します。
$KLH10_HOME(/home/pi/MyHome/DECsystem20/binklh)にKLH10エミュレータの実行環境を作成しました。
$ cd $KLH10_HOME $ pwd /home/pi/MyHome/DECsystem20/binklh $ ls README dpni20 flushed klt20.ini tapedd wfconv RH20.RP07.1 dprpxx inst-klt20.ini kn10-kl uexbconv wxtest boot.sav dptm03 klt20 mtboot.sav vdkfmt
$KLH10_HOMEの実行環境で「./klt20」と入力してEnterキーを押し、KLH10エミュレータを実行します。
$ ./klt20 KLH10 V2.0H (MyKL) built Dec 29 2017 20:07:56 Copyright 002 Kenneth L. Harrenstien -- All Rights Reserved. This program comes "AS IS" with ABSOLUTELY NO WARRANTY. Compiled for LINUX on I386 with word model USEHWD Emulated config: CPU: KL10-extend SYS: T20 Pager: KL APRID: 3600 Memory: 8192 pages of 512 words (SHARED) Time interval: SYNCH Base: OSGET Interval default: 60Hz Internal clock: COUNT Other: MCA25 JPC DEBUG PCCACHE EVHINT Devices: DTE RH20 RPXX(DP) TM03(DP) NI20(DP) [MEM: Allocating 8192 pages shared memory, clearing...done] KLH10# ; Define basic device config - one DTE, one disk, one tape KLH10# devdef dte0 200 dte master KLH10# devdef rh0 540 rh20 KLH10# devdef rh1 544 rh20 KLH10# devdef dsk0 rh0.0 rp type=rp07 format=dbd9 KLH10# devdef mta0 rh1.0 tm03 type=tu45 KLH10# KLH10# ; Set Ethernet address KLH10# devdef ni0 564 ni20 ipaddr=10.0.0.51 KLH10# KLH10# ; Define the idle device on 700 KLH10# devdef idler 700 host KLH10# KLH10# ; Set switch register KLH10# set sw=254200,,147 sw: 0,,0 => 254200,,147 KLH10# KLH10# ; Set console lights I/O base register KLH10# ;Uncomment the following line if you have a Panda display. KLH10# ;lights 378 KLH10# KLH10# ; Load disk bootstrap directly KLH10# load boot.sav Using word format "c36"... Loaded "boot.sav": Format: DEC-CSAV Data: 4630, Symwds: 0, Low: 040000, High: 054641, Startaddress: 040000 Entvec: JRST (120 ST: 0, 124 RE: 0, 137 VR: 0,,0) KLH10# KLH10# ; Ready to GO KLH10# [EOF on klt20.ini] KLH10#
KLH10# プロンプトに対して、「go」と入力してEnterキーを押して BOOTプログラムを起動します。
KLH10# go Starting KN10 at loc 040000... BOOT V11.0(315) BOOT>
BOOT/ プロンプトに対して「/e」と入力してEnterキーを押してEDDTを起動します。
BOOT>/e [BOOT: Loading] [OK] EDDT
EDDTで DBUGSWシステムテーブルを設定するために、「dbugsw/」と入力すると T1と表示しますので「2」を入力します。
EDDT dbugsw/ T1 2
値 | 意味 |
---|---|
0 | normal |
1 | debugging (default) |
2 | standalone (no timesharing) |
3 | standalone fast startup |
続けて「147」と入力してESCキーを押します。$を表示しますので「g」と入力して TOPS-20を起動します。147はTOPS-20の通常の開始アドレスです
dbugsw/ T1 2 147$g [TOPS20 mounted] Panda Distribution, PANDA TOPS-20 Monitor 7.1(21733)-4 Internet: Loading host names Date and time is: Friday, 29-December-2017 6:15PM Why reload?
システム立ち上げの理由を聞かれるので、「sa」と入力してEnterキーを押します。
Why reload? sa [System is stand-alone] DDMP: Started
60秒以内に入力しないと、OTHER理由を使用してシステムが起動し続けます。
SA | Stand-Alone |
NE | New |
OT | Other |
CTRL+Cを入力します。
[Caution--System is stand-alone] Panda Distribution, PANDA TOPS-20 Monitor 7.1(21733)-4 This system is for the use of authorized users only. Usage of this system may be monitored and recorded by system personnel. Anyone using this system expressly consents to such monitoring and is advised that if such monitoring reveals possible evidence of criminal activity, system personnel may provide the evidence from such monitoring to law enforcement officials. @
PANDA TOPS-20が起動しました。
TOPS-20にLogin/Logout
loginコマンドでログインします。「login」と入力してESCキーを押します。(USER)と表示してユーザー名の入力となります。ユーザー名に「operator」を入力して、ESCキーを押すと(PASSWORD)と表示してパスワードの入力となります。パスワード「dec-20」を入力します。パスワードはエコーバックされません。
@login (USER) operator (PASSWORD) @
TOPS-20のシェルは、コマンド名や引数の補完機能があります。ESCキー(またはCTRL+F)入力するとコマンド入力をガイドします。
loginコマンドでESCキーを押すと、(USER)や(PASSWORD)などを表示して次に入力する引数をガイドします。また、「log」の次にESCキーを入力すると logIN とコマンド名を補完します。
このようにTOPS-20は、素晴らしいユーザーインターフェースを持ったOSです。
またloginした状態で、「log」の次にESCキーを入力すると logOUT とコマンド名を補完します。
@logIN (USER) operator (PASSWORD) @ @logOUT [Job 0(DET) also logged in under OPERATOR] Killed Job 1, User OPERATOR, TTY5, at dd-mm-yyyy hh:mm:ss
「log」と入力してESCキーを押してlogOUTコマンドを入力したところで、入力ミスに気づいて入力内容を無効にするにはCTRL+Uを入力します。するとXXXを表示して入力行を消去します。
@logOUT XXX @
ターミナルの設定をします。
「ter」と入力してESCキーを押すと terMINAL とコマンド名を補完して引数(FEATURE OR TYPE)をガイドします。「vt100」と入力して、VT100ターミナルを指定します。
@terMINAL (FEATURE OR TYPE) vt100 @
コンソールがビデオターミナルモードになりました。何か入力して、CTRL+Uを入力すると XXX表示ではなく画面上から入力行を取り消します。
TOPS-20に接続する端末は2種類ありました。
- タイプライター型端末(LA120など)
- ビデオ型端末(VT-52など)
タイプライター型端末で操作しているときは、CTRL+U入力でXXXと印字して入力行を取り消します。ビデオ型端末で操作しているときは、CTRL+U入力で画面上から入力行を取り消します。
これらの操作をしていて、大学時代にTOPS-20を使用していたことを思い出しました。初めてのタイムシェアリングシステムに驚いたので、記憶が鮮明に焼き付いていたのかもしれません。
簡単なプログラムの実行
簡単なC言語プログラムを試してみます。EDITコマンドは、Emacsエディタが起動します。大学生のころは、たぶんEmacsなど存在していなかったと思います。EDITコマンドで、ラインエディタが起動しました。
「edit」と入力してESCキーを押してファイル名 hello.c を指定します。プログラムを入力して CTRL+X CTRL+Sで保存して、CTRL-X CTRL+Cで終了します。
@edit (FILE) hello.c
typeコマンドで内容を確認します。
「type」と入力してESCキーを押して ファイル名「 hello.c」 を指定します。
@type (FILE) hello.c #include <stdio.h> int main() { printf("Hello,world."); } @
ディレクトリを確認します。「dir」と入力してESCキーを押してdirECTORYコマンドを入力します。
@dirECTORY (OF FILES) TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.1 Total of 2 pages in 2 files @
HELLO.C.1 というファイルを作成しました。拡張子 .C の次の .1はリビジョン番号です。リビジョン番号は、EDITコマンドでプログラムを修正すると自動的にカウントアップします。
ccコマンドで、hello.c をビルドします。「cc hello.c」と入力します。
@cc hello.c KCC: TEST <OPERATOR>HELLO.PRE.1 <OPERATOR>HELLO.FAI.1 FAIL: HELLO LINK: Loading @
ディレクトリコマンドで確認すると、HELLO.EXEを生成しています。
@dirECTORY (OF FILES) TOPS20:<OPERATOR> FTS.CMD.1 HELLO.C.1 .EXE.1 .REL.1 Total of 69 pages in 4 files @
HELLO.EXE を実行します。「hello」と入力する作成したプログラムが動作しました。
@hello Hello,world. @
TOPS-20のシャットダウン
システムをシャットダウンして停止します。
「ena」と入力してESCキーを押してENABLEコマンドで特権モードに入ります。プロンプトが @ から $ に変わります。
@enaBLE (CAPABILITIES) $
CTRL+Eを入力して、「cease now」と入力します。[Confirm]と表示しますので、Enterキーを入力します。
$ $^Ecease now TOPS20 Will be shut down IMMEDIATELY [Confirm] [Timesharing is over] $ OPERATOR - Wait for the message "Shutdown complete" before entering commands to PARSER. dd-mm-yyyy hh:mm:ss HSYS: Shutdown complete
CTRL+\を入力するとプロンプトが KLH10> となります。
[HALTED: FE interrupt] KLH10>
KLH10> プロンプトに対して「shut」と入力してENTERキーを押すと、KLH10エミュレーターが停止します。
KLH10> shut Continuing KN10 at loc 01063336... **HALTED** $11B>>SWHLT4#/ XCT CHKADR BUGCHK/ 0
CTRL+\を入力すると プロンプトが KLH10> となります。
[HALTED: FE interrupt] KLH10>
KLH10> プロンプトに対して「q」と入力してENTERキーを押します。
[Confirm]と表示しますので Enterキーで応答すると Linuxコマンドラインとなります。
KLH10> q Are you sure you want to quit? [Confirm] Shutting down...Bye!
まとめ
KLH10エミュレーターでTOPS-20を実行することができました。私がTOPS-20を使っていたのは大学3回生の時で1976年ですので、今(2018年)から42年も前のことです。ソフトウェア技術者の道を歩もうと考えていた当時の記憶がよみがえってきて、還暦を過ぎた身に元気がよみがえってきました。
TOPS-20のシェルコマンドなどはほとんど覚えていませんが、幸運なことにインターネットの世界でマニュアルが公開されてます。ネットで調べて、DEC System-20というレトロコンピューティングの世界を楽しみたいと思います。