2019年3月11日月曜日

6809用、6802用モニタプログラムの改良

6809用、6802用モニタプログラムを改良しました


ROMにはASSIST09やMIKBUG2も入れてありますが、私の場合はそれらよりも自作のモニタを使うことの方が多いようです。入出力がターミナル仕様だから使いにくいからというわけではなく、ASSIST09をフルキーボードとVideo-RAMで使用したりもしていましたが、やはり、自分で作ったものの方が愛着もあり、使いやすいということなのでしょうか。

ということで、6809でも6802でも自作のものをメインに使っていましたが、今まで使用していたモニタは、30年以上前に6802システムで自作フルキーボードと自作Video-RAMを使用していた時代のものをシリアル入出力に変更してちょっと手直ししただけのものでしたので、ワークエリアにも無駄が多いですし、機能面でも不足しています。

ということで、思い切ってここでモニタを改良することとしました。

改良の目標とした点


(1)6809と6802とでの操作性を統一する
・デュアルボードでは頻繁に6809と6802とを切り替えて使用するので、操作性が異なると非常に使いにくいので。

(2)使い勝手を良くする
・1文字のコマンドを入力してからパラメータを入力するのではなく、一度にまとめて入力できるようにする。(対話形式は、慣れるとうっとうしいだけ。)
・パラメータの入力時、何桁の数値を入れても最後の4桁(アドレス値の場合)、2桁(データ値の場合)のみを有効値として取り込む。(ASSIST09と同様の機能で結構便利。)

(3)機能を追加する
・BreakPointを設定可能にする。ASSIST09のように8個もいらないとは思いますが、1個ぐらいあった方が、やっぱり便利なようですので。ただし、SWIのコードに置き換えますのでRAM領域にしか設定できません。
・Dumpコマンドに16バイト毎のチェックサムを追加する。これに伴い、指定アドレスが切りの良い値でない場合でも、その通りの範囲で表示されるようにする。(実はこれが最も時間がかかった部分です。CS表示のためには必要でした。)

ASSIT09の場合

6809MONの場合

1行表示の場合も正常です

苦労した点


今までのモニタは、6802用に作成したものを6809に移植したものでしたが、今回はまず6809で作成し、それを6802用に書き換えるという順序で作成しました。
単なる命令の置き換えで困ることはそうありませんでしたが、同等命令のフラグの違いには結構苦労させられました。特に、6800のCPXと6809のCMPXのフラグの違いには悩まされました。
また、6809や6802のシングルボードでは異常がないのに、6809/6802デュアルボードでは6800FLEXの起動にのみ失敗することがありました。いったん起動してしまえば、その後は正常に動作し続けるので、ハードには問題がなく、モニタに実装しているFLEX起動コマンドを疑い、あれこれ手直しをしてみましたが、結局、ソフトではなくハードの問題だという結論に達して、現在は09/02切替部分について検討中です。(これに2か月以上かかりました。)

改訂版モニタVer6.1が出来上がりました


ということで、モニタは改訂版ということでVer6とし、半月ほど使用しながら手直しをしてVer6.1が出来上がりました。

使用するROMの容量とモニタの配置

ROMとしては27128の16KBで良いのですが、27256や27512を使用する場合は上記のように配置します。これで、自作モニタとASSIST09やMIKBUG2とを切り替えられます。

モニタとしてはこの程度の機能があれば良いのかなと思います。もうこれ以上機能拡張をする予定はありませんので、OneDriveにソースと共に上げておきます。

また、FLEXを動作させる際の仮想ドライブシステムであるFlexDrvWin.exeも手直しをしました。ReadコマンドとWriteコマンドの受信方法に改良を加えたのと、各自の環境に合わせるために、同じディレクトリに置いたiniファイルを起動時に読んで、その値(ポート番号、ボーレート、ハンドシェーク、ウィンドウ位置)を設定できるようにしました。
私の環境用のiniファイルFlexDrvWin.iniと共にOneDriveに上げておきます。なお、これはVisualStudio2013Communityでビルドしましたので、そのランタイムが必要かもしれません。