DEC社 TOPS-20を使う方法 KLH10エミュレーター実行編

DEC System-20

DEC System-20


【2023/12 追記】AMAZONから『超マシン復活 #1 ~ #5』を出版しました。


KLH10エミュレーターをインストール

2018年1月、歴史的に貴重なDEC社 TOPS-20を使うためにKLH10エミュレーターをLinuxにインストールしました。

DEC社 TOPS-20を使う方法 KLH10エミュレーター導入編

KLH10エミュレーターでTOPS-20を実行

KLH10エミュレーターでTOPS-20を実行します。

$KLH10_HOME(/home/pi/MyHome/DECsystem20/binklh)にKLH10エミュレータの実行環境を作成しました。

PANDAディレクトリ構成

PANDAディレクトリ構成

$ 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エミュレーター

$ ./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が起動しました。

PANDA TOPS-20

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というレトロコンピューティングの世界を楽しみたいと思います。