ラベル Monitor の投稿を表示しています。 すべての投稿を表示
ラベル Monitor の投稿を表示しています。 すべての投稿を表示

2019年5月23日木曜日

SBC6303に自作6802ボードのモニタープログラムを移植

SBC6303に自作6802ボードのモニタープログラムを移植しました


しばらく前にSBC6303を製作していじっていたのですが、LILBUGがどうも手になじまず、結局、使い慣れている6802/6809ボード用のモニターを移植することにしました。
モニターのサイズが4KByteありますので、SBC6303ボードとBLボードを接続して32KByteのRAMを増設する必要があります。

6801系の命令は6800系の命令より拡張されており、特にXのPUSH,PULLとCPXのフラグ対応が有難い拡張で、プログラムがかなり組みやすくなっています。
Windows上でアセンブルしてできたMotorola S-formatのファイルをSDに書き込んでセットし、Arduino Proのリセットボタンを押すとSD内のファイル一覧が表示されます。
そこでSBC6303ボードのリセットボタンを押すとファイルが表示順に起動します。下の画像では、最初にLILBUGが起動し、さらにリセットボタンを押すことで6303MONが起動しています。

起動画面とコマンドリスト

コマンドリストは画像の通りです。私の自作ボード用のモニターとの違いはLoad,Saveコマンドです。
機能を同等にしたかったのですが、内蔵シリアルインターフェースが一つしかないのでLoad,Save機能は同等にできません。やむを得ず、LoadはTeraTermのファイル送信機能を利用することとし、Saveは画面にMotorolaのS-formatで表示し、それを画面からコピペでWindowsに保存することとしました。(従って、SaveではなくPunchコマンドです。)
コマンド入力ラインではASSIST09と同様に、アドレスは何桁入力しても最後の4桁のみが有効で、データでは最後の2桁のみが有効です。

Loadコマンドは、L(Retern)と入力した後、TeraTermの「ファイル送信」でLoadしたいファイルを指定します。
なお、Loadコマンドでは、9600baudは遅いので、TeraTermの送信遅延を下の画像のように設定する必要があります。


Loadコマンドの設定

Load中は、S-formatファイルの各行の先頭アドレスが表示されますので、どこまで読み込んでいるかが分かります。最後に実行アドレスが(あれば)表示されます。


Loadコマンド

Punchコマンドでは、Pに続いて開始アドレスと終了アドレスを入力します。実行アドレスは入力してもしなくても構いません。下の画像のように画面にS-format形式で表示されますので、これをコピペしてWindows上で名前を付けて保存します。

Punchコマンド

最後に


6801系のプログラムは6800よりもかなり組みやすくて良いのですが、ベースページの$00から$14までをCPUが使っているので、アプリケーションでの使用が制限されてしまうのが残念です。これさえなければ、6802を捨てて移行できるのに。。。

移植にあたっては、結構引っかかることが多く、アセンブルしては走らせて、結果を見ては修正を繰り返しました。最初はEP-ROMを1ダースほど並べて焼いては取り付けて実行・修正を繰り返していましたが、途中でSDに書き込めばよいと気づいてからは、かなり効率が上がりました。それにしても、SD中のファイルをリセットで順に起動するというVintagechipsさんのアイディアには感心しますね。
(なお、アセンブラですがツールは全て自作するという方針を一時棚上げにして、arcpitさんのX6801を使用させていただきました。感謝です。)

出来上がったSBC6303用のモニタープログラムのソースとS-formatをOneDriveに上げておきます。S-formatファイルをそのままSDに書き込めば動作します。ソースをつけておきますので、より使い易いように改造も可能です。

これで、6800,6809,6303で共通した操作性で扱うことができます。
また、Leo_yumesichiさんがSBC6800,SBC6809に移植されたので、68系のSBCで同じ操作性のモニターが動くことになりました。(使われる方がどれだけあるのかは疑問ですが。。。)

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でビルドしましたので、そのランタイムが必要かもしれません。