懐かしのワードマスターをCP/Mシミュレータで使う

はじめに

2017年5月、Altair 8800 simulatorを使用して懐かしいCP/Mを使うことができました。

CP/Mにはワードマスターという優れたフルスクリーン・エディタがあり、1983年にCP/Mで開発したときワードマスターを使用して素晴らしいと感じました。

Altair 8800 simulatorのCP/MのA:ドライブをみるとワードマスター(WM.COM)がありました。実行すると、端末のエスケープシーケンスが合わないためか画面表示が正常に動作しませんでした。

ワードマスター動作せず

ワードマスター動作せず

ドキュメントを読んで調べたら、SIOの割り付けを変更してVT100互換ターミナルで使用するとワードマスターが使用できるようです。

ワードマスターを使う

ドキュメントのSIOの説明に下記のような記述がありました。

4.2  The Serial I/O Card (2SIO)

ATTACH SIO 23 
Console IO goes via a Telnet connection on port 23 (often requires root privileges, you can also use another port and use telnet with this port)

DETACH SIO
Console IO goes via the regular SIMH console

SIOの設定で、コンソールIOをTelnet接続ポート23経由にすることができます。

cpm2 コマンドファイルをコピーして、cpm2sioを作成します。bootの直前に「attach sio 23」を入れます。

d tracks[0-7] 254
attach dsk0 cpm2.dsk
attach dsk1 app.dsk
attach hdsk0 i.dsk
;demo how to use other disk formats in CP/M 2
;it will mount as drive J:
attach hdsk1 appleiicpm.dsk
set hdsk1 format=apple-d2
set cpu 64k
set cpu noitrap
set cpu z80
set cpu altairrom
set cpu nonbanked
reset cpu
set sio ansi
set sio nosleep
attach sio 23
boot dsk

シミュレータコマンドで、「do cpm2sio」としてコマンドファイルを実行します。

Altairシミュレータ SIO attach

Altairシミュレータ SIO attach

Listening on port 23 (socket 316)

コンソールIOが、ポート23の待ちとなりました。

VT100互換のターミナルとして、Tera Termを使用します。端末サイズ設定を80×24とします。

TeraTerm 設定

TeraTerm 設定

Tera TermのTelnetで「127.0.0.1」に接続します。

TeraTerm Telnet接続

TeraTerm Telnet接続

 

Altairシミュレータ TeraTerm接続

Altairシミュレータ TeraTerm接続

Tera TermコンソールにCP/M起動メッセージが表示されました。

wmを実行します。

wm I:TEST.TXT

CTRL+Jで、HELP画面を表示します。CTRL+J入力することにより4つのヘルプ画面を順次表示します。

 

スクリーン・エディタについて

私が大学でコンピュータを使い出した1974年ころ、ソースコードの入力はパンチカードや紙テープの時代でした。その当時のソースコードの修正は、パンチカードの入れ替えや紙テープの切り貼りでとても労力がかかりました。

あれから40年、今ではソースコードの修正はとても簡単に行えるようになりました。Visual Studio や Eclipse などの統合開発環境や秀丸エディタなど、ソースコードをスクリーンに表示して編集できるのが普通になっています。1990年代ごろには、MS-DOSを使用した開発でMifesやvzなどのスクリーン・エディタを使っていました。

さて、スクリーン・エディタの元祖はいつ頃に生まれたのでしょうか?
世界初のスクリーンエディタと呼ばれる unixのviは、1978年ごろに生まれたそうです。また、CP/Mのワードマスター(wm)は、1978年ごろにMicroPro International社から発売したそうです。

私がワードマスターを実際に使用したのは1983年でした。そのとき、ソースコードの修正が簡単にできる時代がやっと来たのだと思いました。というのは、私もスクリーン・エディタという構想をもっていたからです。偶然ですが、スクリーン・エディタの元祖と時を同じくして1979年ごろ、画面でソースコードを上下にスクロールして、上から下へ下から上へと自由に眺めるように見ることができたら素晴らしいと考えていました。そして、TK-80トレーニングキットを拡張した自分のマイコンでスクリーン・エディタの試作をしていました。

ソースコードの修正に苦労していた私は、これからのソフトウェア技術者はソフトウェアツールで武装して開発効率を向上することが必要であると考えていました。1979年に「スクリーン・エディタについて」という原稿を書いてCSK技術発表会に応募しました。書類審査を通過して、1980年3月8日にCSK技術発表会で試作機を持ち込んで、デモンストレーションしながら発表しました。そして、第12期技術発表会で最優秀賞を受賞しました。

ワードマスターのコマンド

ワードマスタは、下記の2つのモードを持ちます。

  • ビデオモード : 画面で編集するモード
  • コマンドモード : コマンドを入力するモード

ビデオモードは、ダイヤモンドカーソルで直感的に上下左右にカーソルを移動できました。CTRLキーを押しながらダイヤモンドの形に並んだ E(上)-D(右)-X(下)-S(左)キーを入力すると、カーソルの移動ができました。

ダイヤモンドカーソル

ダイヤモンドカーソル

ESCキーを入力すると、プロンプト「*」を表示してコマンドモードに移行します。コマンドモードは、CP/M標準エディタのedとほぼ互換があります。Vコマンドでビデオモードに移行します。

ビデオモード

ビデオモードの主なキー入力を示します。

  • CTRL+S カーソル移動 左 文字
  • CTRL+D カーソル移動 右 文字
  • CTRL+E カーソル移動 上 行
  • CTRL+X カーソル移動 下 行
  • CTRL+A カーソル移動 左 単語
  • CTRL+F カーソル移動 右 単語
  • CTRL+B カーソル移動 左右 行
  • CTRL+W 前の1行スクリーン
  • CTRL+Z 次の1行スクリーン
  • CTRL+R 前ページスクリーン
  • CTRL+C 次ページスクリーン
  • CTRL+O 挿入モード ON/OFF
  • CTRL+G 削除 文字
  • CTRL+\ 削除 単語 左
  • CTRL+T 削除 単語 右
  • CTRL+U 削除 行 左
  • CTRL+K 削除 行 右
  • CTRL+Y 削除 行 全体
  • CTRL+I TAB挿入
  • CTRL+N CRLF挿入
  • ESC コマンドモードへ移行

コマンドモード

コマンドモードの主なコマンドを示します。nは、数字であり省略すると1となります。

  • V : ビデオモードへ
  • O : 編集前のファイルに戻す
  • E : 編集終了
  • Q : 破棄終了 (QUIT)
  • ±nC : 移動 ± n 文字
  • ±nL : 移動 ± n 行
  • ±nT : TYPE ± n 行
  • ±nP : TYPE ± n ページ
  • ±B : 移動 ファイル (+:先頭、-:最終)
  • ±nD :  削除 n 文字 (+:右、-:左)
  • ±nK : 削除 n 行 (+:下、-:上)
  • ±n : 移動 ± n 行 、TYPE 1行 (CTRL+Jは、1と同様)
  • nI文字列^Z : 文字列を挿入
  • I : 挿入モード (ESC OR CTRL+Z でモード終了)
  • nFキー列 : 検索(バッファ内) n番目のキー列
  • nNキー列 : 検索(全ファイル) n番目のキー列
  • nSキー列^Z文字列 : 置換(バッファ内) キー列を文字列に置換し、n回繰り返し
  • nRキー列^Z文字列 : 置換(全ファイル) キー列を文字列に置換し、n回繰り返し
  • nQP : n行をQバッファに移動、ファイルから削除
  • n/QP : n行をQバッファに追加、ファイルから削除
  • nQG : Qバッファからn回コピー
  • nQT : Qバッファをn回タイプ
  • nQK : Qバッファをクリア

 

最後に

Altair 8800 simulatorを使用してCP/Mで、懐かしのワードマスターが動作しました。
ダイヤモンドカーソルは直感的な操作で、数十年も昔に使っていたのになんとなく手が覚えている感覚がありました。たぶん手が覚えていたのでは無く、覚える必要も無く直感的に操作できるということなんだろうと思います。

さて、CP/M開発環境が整ったので8080アセンブラでも書いてみましょうかね。