KLH10エミュレーターの起動と停止
2018年1月、歴史的に貴重なDEC社 TOPS-20を使うためにKLH10エミュレーターをLinuxにインストールして、TOPS-20を実行することができました。
しかし、KLH10エミュレーターの起動は、難解なコマンドを入力する必要があります。なかなか覚えることができず、ブログを見ながら操作していました。
ターミナルエミュレーターTera Termのマクロを使用して、簡単に起動や停止することができました。
ターミナルエミュレーターTera Term
KLH10エミュレーターは、Linux PCにインストールしています。Windows PCからLinux PCにアクセスするときに、定番のターミナルエミュレーターTera Termをよく使います。
Tera Termはオープンソース・ソフトウェアとして開発しており、Tera Term Home Pageからダウンロードすることができます。
Tera Termは、ビデオ表示端末のデファクトスタンダードであるVT100などの動作をエミュレートします。SSHプロトコルでLinuxにログインします。
「DEC社 TOPS-20を使う方法 KLH10エミュレーター実行編」に従って、KLH10エミュレーターを起動してTOPS20を起動することができます。
Tera Termは、強力なマクロ機能を搭載しています。マクロ言語 “Tera Term Language (TTL)” により、Tera Term を制御してオートログインなどの機能を実現することができます。また、「○○を受信したら□□を送信する」ということが簡単に実現できます。
このマクロ言語を記述して、KLH10エミュレーターの難解な起動方法を簡単に実現したいと思います。
Tera Term マクロ
以下の三つのマクロを作成しました。
- autologin_ssh.ttl : SSHプロトコルによる自動ログイン
- tops20_exec.ttl : KLH10エミュレーター(TOPS20)起動
- 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マクロを指定します。
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を簡単に起動/停止することができます。