まずはじめに、皆様にごめんなさいを言わねばならない。それは、前に公開した 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が動作するだろうと至極楽観的な考えで作業を始めた。 なお、入手したパッケージに含まれるファイルは以下の通り。
パッチの当て方の予想は、
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!
セコメントをする