WordMaster 動かしてみた2018年10月20日 21:24

まずはじめに、皆様にごめんなさいを言わねばならない。それは、前に公開した STRLIB.RELのESCAPEモジュールにバグがありました。ごめんなさい。サンプルで作ったプログラムでは、 何事もないように動いてしまいうまい具合にできたと思っていました。 修正版と差し替えました。これです STRLIB.ZIP

さて、本題。TRN-8のプログラムはCP/M付属のEDで書いてきた。そんなに長いプログラムを書くことがなかったし、 必要最低限の機能が備わっているので特段の不自由を感じてはいなかったが、でも、やはり楽をしたい。

CP/Mには非常に多くのテキストエディターが存在するが、その中でもWordMasterが一番人気ではないだろうか。 現代はよくした物で過去の遺産を引き継いで保管してくださる方々が沢山いる。CP/M関連では The *HUMONGOUS* CP/M Software Archivesからたどると、歴史的遺産が手に入る。WordMasterは、 そこからThe Retrocomputing Archiveをたどって、 CP/M Text Editors and Word Processorsページで入手した。

入手したパッケージには、インストーラーとかコンフィグレーターが無く、その代わりアセンブラーで書かれた5本の サンプルコードが付属していた。これを手本に自分の環境"ANSIターミナル"に合わせてカスタマイズ(改造)し、パッチを当てれば、 WordMasterが動作するだろうと至極楽観的な考えで作業を始めた。 なお、入手したパッケージに含まれるファイルは以下の通り。

  • BEE.ASM -- BEEHIVE 150 (CROMEMCO 3100)用にカスタマイズされたファイル(これをカスタマイズした)
  • H89.ASM -- HEATH H89 または H19 TERMINAL用にカスタマイズされたファイル
  • HAZ.ASM -- HAZELTINE 1500用にカスタマイズされたファイル
  • LSI.ASM -- ADM3-A、SOROC-IQ/120 と IMSAI VIO用にカスタマイズされたファイル
  • SOL.ASM -- PTCO-SOL用にカスタマイズされたファイル
  • WM.COM --- WordMaster本体
  • WM.HLP --- ヘルプファイル
  • WMH89.COM -- たぶんH89.ASMでカスタマイズされたWordMaster
  • WM-SOROC9.COM -- たぶんSOL.ASMでカスタマイズされたWordMaster

パッチの当て方の予想は、

1:パッチ用のASMファイルを作りASMでアセンブルして、HEXファイルを作る。

2:DDTでWordMasterを読み込む。

3:アセンブル済みのパッチを上書きする。

4:メモリー上にできあがったWordMasterをSAVEでファイルに落とす。

と見当をつけた。

まずは、パッチファイルの確認。全てのパッチファイルには本体からコールされたり、変数領域として 参照されるところがある。これらのアドレスは固定である。パッチを作成する上で埋め込むことのできる コードの領域が制限される。ひとまず、全てのパッチファイルをアセンブルしてみた。 案の定、それらのアドレスが出てきた。

1:画面コントロール用ロジックが、2つ。これをカスタマイズする。

2:動作環境のパラメーターを入れておく変数領域。コメントをよく読んで、設定値を入れる。

画面コントロール用ロジックは、画面消去ロジックとカーソル位置コントロール ロジックである。適当に拡張用のメモリースペースがあり楽ちんと考えていたが、はまってしまった。

画面クリアロジックは、2Byte余り。とりあえずNOPでつぶす。

カーソル位置ロジックは一時変数領域も含めて48Byteオーバー。スペア用の領域を使い切っても、 33Byteオーバーしてしまう。

最初のパッチ:ANSI0000.ASM)

パッチ第二弾:ANSI0001.ASM)

どうした物かとソースファイルを眺めてたら、下記のようなコメントを発見。

          ; **** MODIFYABLE CONSTANTS *****

          ;PBEGMEM POINTS TO BEGINNING OF MEMORY TO USE
          ;FOR EDIT BUFFER AND SCRATCHPAD. IF SPACE IS NEEDED
          ;FOR PATCHES, PUT THEM WHERE THIS POINTS AND
          ;INCREASE THIS POINTER. REMEMBER TO USE A LARGE
          ;ENOUGH "SAVE" COMMAND!
編集用バッファ領域をちょこっともらって解決できそう。やってみる。テスト版パッチファイルは ANSI0002.ASM

作業手順は以下の通り。想定の範囲内であった。

          
          C>A:DDT
          DDT VERS 2.2
          -IWM.COM
          -R
          NEXT  PC
          2700 0100
          -IANSI0002.HEX
          -R
          NEXT  PC
          29EE 0000
          -G0
          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          C>SAVE 41 WMANSI.COM
          C>DIR WMANSI.COM
          C: WMANSI   COM
          C>

動作確認。先頭の写真の通りWordMasterが動いた。実はまだ動作がおかしい。最下段の行の表示が、 うまくスクロールしてくれない。これはパッチファイル中、画面行数の設定値を調整し解決した。

パッチファイルの最終版は ANSI.ASM。 ご興味がありましたらご参照ください。

これで、CP/Mの開発環境が10年ぐらい進歩したと思う。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://kida.asablo.jp/blog/2018/10/20/8978952/tb