2018年9月15日土曜日

FLEX9にコマンド履歴機能を追加

FLEX9にコマンド履歴(ヒストリー)機能を追加しました


FLEXは単純なOSの割には言語やユーティリティも充実していて使いやすいと思っていますが、もちろん不満も色々あります。
その一つがコマンドヒストリー機能がないことです。プログラムを作成する中で、何度も同じようなコマンドの入力を繰り返すのは苦痛でもあります。特にアセンブラの場合は繰り返し頻度が特に高いので、ストレスが溜まります。

繰り返し入力を少しでも軽減するために、アセンブラやMicroCによるプログラム開発の場合に使うMAKEA.CMDやMAKEC.CMDを作成して使用しています。


MAKEA.CMDの使用例



MAKEC.CMDの使用例

いずれもシステム(ASMB.CMD, MC09.CMDなど)がドライブ0に、対象ファイルがドライブ1にあると決め打ちしていますが、それなりに役に立ちます。
参考までに、それぞれのメイクファイル(MKFILEA.TXT, MKFILEC.TXT)の内容を下に示します。&1や&の位置に、対象ファイル名が読み込まれて実行されます。


メイクファイルの中身

しかし、このような特定の場合以外ではどうしてもヒストリー機能が必要です。

FLEXのコマンド入力をフックしてヒストリー機能を実現する


FLEXのソースを読むと、$CE2Bからがコマンド入力ルーチンなのですが、バックスペース(BS)位しか編集機能がありません。そこで、ここをフックして自作のコマンド入力ルーチンに置き換えます。
自作の入力ルーチンの置き場所ですが、$CC2B,2CのMemory Endの値を入力ルーチンのサイズの分だけ小さくしてシステムに使われない領域を作り、そこに置きます。
このようにして作成したのがSET_LIN.CMDです。


SET_LIN.CMDを常駐させる

コマンド入力待ちの状態でSET_LINと入力すると常駐し、もう一度SET_LINと入力すると常駐が解除されます。
編集機能としては、
 Ctrl-A  ヒストリー呼び出し。(履歴機能)
      コマンド入力途中では、その位置以降を呼び出す。(補完機能)
 Ctrl-E  カーソル位置以降を消去。
 ↑    コマンド文字列の先頭にジャンプ。
 ↓    コマンド文字列の最後尾にジャンプ。
 ←    一文字左に移動。
 →    一文字右に移動。
 BS    カーソル位置の左の一文字を削除。
 DEL   カーソル位置の一文字を削除。
 CR    編集終了。入力文字列をコマンドとして処理する。
があります。
直前のコマンドしか呼び出せないなど、ヒストリー機能としてはWindowsに慣れている私たちから見ると不十分ですが、これでも随分とストレスが軽減されます。

制作に関して


実は、FM77AV40SXでFLEX9やOS-9Level2を使っていた頃に、OS-9のヒストリー機能をFLEXでも実現すべく簡単なSET_LIN.CMDを作成して使用していました。(上記の機能のCtrl-Aの補完機能や↑,↓機能のないもの)
これでもOS-9の超単純なヒストリー機能よりも使いやすいものでした。
FM77のBIOSやSubSystemを用いて機能を実現したため、当然、矢印キーが使えましたので、今回制作するにあたっても、是非矢印キーによる処理を実現したかったのですが、ここで最も苦労しました。

TeraTermでの画面制御にエスケープシーケンスを用いているのですが、矢印キーを扱おうとすると$1B,$5B,$41(↑キー)のような3文字を扱うことになります。また、テンキー部のキーも全て3文字となるので、その扱いもプログラムで処理しなければなりませんでした。(矢印キーのみ3文字扱いでも仕方がないとして、その他は単純に1文字扱いできないものでしょうか?)
プログラムサイズもFM77での430バイト程度に対して、BIOSやSubSystemの編集機能もプログラムで実現しなければならないため1Kバイト位と倍以上になってしまいました。

もうしばらく使い続けて不具合がないことを確認してから公開する予定です。


6809基板と6802基板を一体化して

6809/6802両用基板を作りました


6809基板と6802基板が完成したので、これらを二段重ねして電源コードとシリアル端子2個を差し替えて使用していました。


上が6802基板、下が6809基板


しかし、これは結構面倒ですし、プロフィールに書きましたように、元々は6802と6809を切り替えられるようにした自作コンピュータを最近まで使用していましたので、6809と6802をスイッチで切り替えて使える両用基板を製作することにしました。
できたのがこれです。


6809/6802両用基板の第1作

今までのようなFusionPCBの10㎝×10㎝の格安基板にはとても収まらず、15cm×13㎝の大きさになりました。(基板だけでなく送料も高かった...)

間違いがありますが、とりあえず修正前の回路図を載せておきます。
(修正後のものは修正基板と一緒に載せます)

修正前の回路図(間違いあり)


動いていた自作コンピュータの回路を元にしたのですが、改良(?)した部分がまずかったのか6809と6802の切り替えがうまくいかず、あれこれと変更してようやく動作するようになりました。しかし...

基板裏の修正の様子

こんなに修正する必要がありました。また、ゲートICも一つ不要となってしまいました。

これで、スイッチで6809と6802を選択してリセットボタンを押すとモニタも連動して切り替わりますので、随分と使いやすくなりました。

さらに改良・追加基板を製作


拡張コネクタも用意しましたし、HD63B40も追加したのでASSIST09のトレースコマンドも使えるようになり、これでOKとしても良かったのですが、せっかくIC1個分のスペースが空きましたし、これにPIA(6821)を載せればシングルボードコンピュータとしては完成形になるのにと思えてきたので、もう一度基板を製作することにしました。
10㎝×10㎝基板2枚に分割できないかと試みたのですが、片方だけでも動作するようにはとてもできず、結局同じサイズの基板になりました。(現在発注中...)

(独り言:ゲートICにはソケットを使わない主義なので、この基板でもゲートICは直付けです。新しい基板が完成したら、この基板は不要になってしまう...勿体ない...さらに同じ基板がまだ4枚もある...ああ勿体ない...)