DEC社 TOPS-20を使う方法 エミュレーター簡単起動/停止編

TOPS-20を簡単に起動/停止

TOPS-20を簡単に起動/停止

KLH10エミュレーターの起動と停止

2018年1月、歴史的に貴重なDEC社 TOPS-20を使うためにKLH10エミュレーターをLinuxにインストールして、TOPS-20を実行することができました。

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

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

しかし、KLH10エミュレーターの起動は、難解なコマンドを入力する必要があります。なかなか覚えることができず、ブログを見ながら操作していました。

ターミナルエミュレーターTera Termのマクロを使用して、簡単に起動や停止することができました。

ターミナルエミュレーターTera Term

KLH10エミュレーターは、Linux PCにインストールしています。Windows PCからLinux PCにアクセスするときに、定番のターミナルエミュレーターTera Termをよく使います。

端末エミュレーターでWindowsからLinuxへ

端末エミュレーターでWindowsからLinuxへ

Tera Termはオープンソース・ソフトウェアとして開発しており、Tera Term Home Pageからダウンロードすることができます。

Tera Term端末エミュレーター

Tera Term端末エミュレーター

Tera Termは、ビデオ表示端末のデファクトスタンダードであるVT100などの動作をエミュレートします。SSHプロトコルでLinuxにログインします。

Linux 起動

Linux 起動

DEC社 TOPS-20を使う方法 KLH10エミュレーター実行編」に従って、KLH10エミュレーターを起動してTOPS20を起動することができます。

PANDA TOPS-20 起動

PANDA TOPS-20 起動

Tera Termは、強力なマクロ機能を搭載しています。マクロ言語 “Tera Term Language (TTL)” により、Tera Term を制御してオートログインなどの機能を実現することができます。また、「○○を受信したら□□を送信する」ということが簡単に実現できます。

このマクロ言語を記述して、KLH10エミュレーターの難解な起動方法を簡単に実現したいと思います。

Tera Term マクロ

以下の三つのマクロを作成しました。

  1. autologin_ssh.ttl : SSHプロトコルによる自動ログイン
  2. tops20_exec.ttl : KLH10エミュレーター(TOPS20)起動
  3. tops20_halt.ttl : KLH10エミュレーター(TOPS20)停止
作成したマクロ

作成したマクロ

拡張子 .ttl をttpmacro.exe (Tera Term Macro Interpreter)に関連付けを行います。Tera Termをインストールするときのセットアップでも指定できます。

自動ログインは、autologin_ssh.ttlをタブルクリックするとマクロインタプリターが起動してマクロが走りログインします。

その後、Tera Term ターミナルのコントロール(O)-マクロ(M)からtops20_exec.ttlマクロを指定することにより、TOPS20を起動します。TOPS20を停止するときは、tops20_halt.ttlマクロを指定します。

Tera Term コントール → マクロ

Tera Term コントール → マクロ

SSHで自動ログイン

Tera Termをインストールしたディレクトリに、マクロ言語のサンプルが入っています。「ssh2login.ttl」をベースにして、SSHプロトコルによる自動ログインマクロを作成します。

; Auto Login Linux
; File: autologin_ssh.ttl
; Update: 2018/01/05

username = 'pi'                    ; Login User
hostname = 'Linux(TOPS-20) OS '
ipaddr   = '192.168.0.250'         ; Login Host IP Address

logdir = 'w:\'                     ; Log Direcory

str_prompt_linux = '^USER@(.)*:(.)*\s\$'
strreplace str_prompt_linux 1 'USER' username

timeout = 30  ; タイムアウトを30秒に設定


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Linux Login
;
msg_pwd = 'Enter password for '
strconcat msg_pwd hostname
strconcat msg_pwd ' User '
strconcat msg_pwd username
passwordbox msg_pwd 'Get password'
pwd = inputstr

str_cmd = ipaddr
strconcat str_cmd ':22 /ssh /auth=password /user='
strconcat str_cmd username
strconcat str_cmd ' /passwd='
strconcat str_cmd pwd

connect str_cmd

;;;;;;;;;;;;;;;;; Auto Log Record
; 
filepath = logdir
getdate datetime '%Y%m%d-%H%M%S'
strconcat filepath datetime
strconcat filepath '_'
strconcat filepath username
strconcat filepath '@'
strconcat filepath ipaddr
strconcat filepath '.txt'
logopen filepath 0 1

waitregex str_prompt_linux     ;;            Wait prompt

end

変数 username にログインユーザーを設定します。
パスワードは、ダイアログボックスから入力します。

username = ‘pi’ ; Login User

変数 ipaddr にホストのIPアドレスを設定します。

ipaddr = ‘192.168.0.250’ ; Login Host IP Address

変数 logdir にログを保存するディレクトリを設定します。

logdir = ‘w:\’ ; Log Direcory


ホストへの自動ログインと同時に、ログ記録を開始します。

ログファイル名は、「YYYYMMDD-hhmmss_User@xxx.xxx.xxx.xxx.txt」です。xxx.xxx.xxx.xxxは、IPアドレスです。


waitregexマクロは、正規表現文字列を含む行を待つマクロです。

waitregex str_prompt_linux ;; Wait prompt

以下のような Linuxプロンプトを待っています。環境変数PS1などを変更して、プロンプトを変えた場合は正規表現文字列も変更してください。

pi@Onkyo:~ $
pi@Onkyo:~/MyHome/DECsystem20/binklh $

変数は str_prompt_linux は、 ‘^pi@(.)*:(.)*\s\$’ を指定しています。

正規表現

正規表現

TOPS-20簡単起動

Tera Term ターミナルのコントロール(O)-マクロ(M)からtops20_exec.ttlマクロを起動してください。

KLH10エミュレーターを起動して、TOPS20モニタをブートします。TOPS20のコマンドプロンプト「@」が表示されたら、ログインして使用してください。

; DEC TOPS-20 Exec
; File: tops20_exec.ttl
; Update: 2018/01/05


timeout = 30  ; タイムアウトを30秒に設定

username = 'pi'                    ; Login User
str_prompt_linux = '^USER@(.)*:(.)*\s\$'
strreplace str_prompt_linux 1 'USER' username


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KLH10 Exec
;
sendln 'cd $KLH10_HOME'
waitregex str_prompt_linux     ;;            Wait prompt

sendln './klt20'
wait  'KLH10#'

sendln 'go'
wait   'BOOT>'

sendln '/e'
wait   'EDDT'

send   'dbugsw/'
wait   'T1'
sendln '2'
send   '147'
send   $1B        ; ESC
send   'g'

wait   'Why reload?'
sendln 'sa'
wait   'DDMP: Started'

pause  5
send   $03        ; CRTL+C

wait   '@'
sendln 'terminal vt100'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KLH10 Exec OK
; 
end

TOPS-20簡単停止

Tera Term ターミナルのコントロール(O)-マクロ(M)からtops20_halt.ttlマクロを起動してください。

TOPS20モニタをシャットダウンして、KLH10エミュレーターが停止します。

このマクロは、ログインした状態で使用してください。ログインせずにこのマクロを使用すると、「Please execute macro after LOGIN」というメッセージを表示します。

; DEC TOPS-20 Halt
; File: tops20_halt.ttl
; Update: 2018/01/05


timeout = 30  ; タイムアウトを30秒に設定

send   $15             ; CTRL+U

send   'LOG'
send   $1B             ; ESC
wait   'IN (USER)'  'OUT'
if result=1 goto L_LOGIN
if result=2 goto L_LOGOUT
end

:L_LOGIN    ;  @login
messagebox 'Please execute macro after LOGIN' 'Message'
end

:L_LOGOUT   ;  @logout
send   $15             ; CTRL+U

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KLH10 Halt
;
sendln ''
wait  '@'

sendln 'ENABLE '
wait   '$'

send   $05             ; CTRL+E
sendln 'cease now'
wait   '[Confirm]'
sendln ''
pause 5

send   $1C             ; CTRL+\
wait   'KLH10>'

sendln 'shut'
pause 5

send   $1C             ; CTRL+\
wait   'KLH10>'

sendln 'q'
wait   '[Confirm]'
sendln ''

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KLH10 Halt OK
; 
end

ログインしているか確認するために、次のようなマクロを書いています。

send ‘LOG’
send $1B ; ESC
wait ‘IN (USER)’ ‘OUT’
if result=1 goto L_LOGIN
if result=2 goto L_LOGOUT

「wait ‘○’ ‘□’」は、○文字列か□文字列を待ちます。

  • ○のときはシステム変数result=1
  • □のときはシステム変数result=2

「LOG」と入力してESCキーを入力します。

  • 「IN (USER)」が補完されれば、ログインしていない状態です
  • 「OUT」が補完されれば、ログインしている状態です

まとめ

Tera Term マクロ言語は、簡単に書くことができました。
このマクロにより、TOPS20を簡単に起動/停止することができます。