2021年9月1日水曜日

必要に迫られて自作したアセンブラ等のツールソフトの紹介

 6809用のクロスアセンブラやクロス逆アセンブラなどを紹介します

【10月2日追記】6800・6809逆アセンブラの修正版を10月2日にアップしました。

私は主に6809のプログラムを作成して楽しんでいますが、その中で必要に迫られて作成したいくつかのプログラムを紹介します。

基本的にWindows上でソースを作成し、自作したクロスアセンブラでアセンブルした後、生成されたバイナリを6809SBCなどの実機に転送して実行するという手順を踏んでいますので、必要なものは

(1)クロスアセンブラ、クロス逆アセンブラ

(2)実機への転送ツール

(3)ファイル形式の変換ツール

というわけで、10年ほどのあいだに6800用と6809用ののクロスアセンブラ、クロス逆アセンブラなどを制作してきました。(その他にも必要に応じて6801用、6303用のクロスアセンブラも作りました。)

プログラムのうちのいくつかは今までのブログで紹介してきましたが、その後もあれこれと修正を加えているものがありますので、ここでまとめて紹介します。

紹介するものは

(1)アセンブラ・逆アセンブラ

 6809クロスアセンブラ 6809AsmWin.exe とクロス逆アセンブラ 6809DasmWin.exe 

 6800クロスアセンブラ 6800AsmWin.exe とクロス逆アセンブラ 6800DasmWin.exe

(2)転送ツール

 転送ツールとして良く使用するのは仮想ドライブ構築ソフトです。それぞれのDOS(?)に合わせて4種類制作しています。

 Flex9用のFlexDrvWin.exe

 OS-9用のOS9DrvWin.exe

 F-BASIC3.0用のFBasDrvWin.exe

 CP/M-80用のCpmDrvWinFT.exeとCpmDrvWinRS.exe

(3)その他のツールソフト

 フロッピィディスクイメージの形式を変換するソフトとして CvtDskD77.exe

 バイナリファイルをBin, Hex, Mot形式に変換するソフト CvtMotHexBin.exe

以上のソフトのうち、CvtMotHexBin.exe以外はすべてVC++2019でビルドしています。


各ソフトの簡単な説明を加えておきます。

(1)クロスアセンブラ

 ファイルを選択して「アセンブル実行」ボタンを押すだけですが、エラーだけを表示する機能やワーニング表示を止める機能などがあります。結果の保存形式はLST, BIN, MOT, HEXがあります。特長としてはローカルラベル機能があります。この機能を有効にすると、例えばLOOPのようなよく使われるラベルを複数箇所で宣言できます。


6809クロスアセンブラ


(2)クロス逆アセンブラ
 元ファイルとしてはBINだけでなくMOT, HEXファイルも読み込めます。右端の「スタートアドレス」はBINでは$0000ですが、MOT, HEXの場合はその先頭アドレスが表示されます。「オフセットアドレス」は、逆アセンブルする先頭アドレスを移動させる場合に用います。先頭アドレスはスタートアドレスとオフセットアドレスの和になります。
ラベルはL_1234のようなアドレスの頭に「L_」がついた形になります。
特徴と言えるのは、データエリアと推測される個所を「スキップアドレス範囲」として指定することで、その範囲がFCBまたはFCCという疑似命令として扱われることです。どちらになるかは、範囲の先頭バイトが$20~$7Fの場合にはFCCに、それ以外の場合はFCBになります。(安直な区分けですが...)
保存形式はASMとLSTですが、ASMファイルはそのままアセンブラにかけることができる形式です。


6809クロス逆アセンブラ


(3)仮想ドライブ構築ソフト
 最初に制作したFlex9用を下に示します。ドライブ0~3にディスクイメージファイルを設定すればその内容が左下のボックス中に一覧表示されます。イメージファイル形式ですがD77(D88)形式だけでなくDSK形式(単純にセクタデータを順番に並べたもの)も読み込めます。このボックスにファイルをドラッグ&ドロップすればイメージファイル中に書き込まれます。ボックス中のファイルをマウスの左ボタンで選択して右ボタンでメニューを表示させることで、「読み出し」、「削除」、「名称変更」ができます。全ファイルを一気に読みだす場合はメニューの「編集」→「全ファイル読み出し」を用います。



FlexDrvWin.exe

 
 6809SBCやFM-7等のマイコン・パソコンとの間の通信経路を用意すればマイコン・パソコンから普通のドライブと同様に読み書きできます。下図は6809SBCのFlex9から読み出している例です。モニタのFLEXコマンドでFlex9を起動し、Flex9のCATコマンドを実行しています。上図の右のボックスはSBCから送られているコマンドをR/W,Drv,Trk,Sct形式で表示しています。


6809SBCとの通信の様子


他のソフトの例として、CpmDrvWin.exeの画面を下に示します。
表示・操作面はすべて同じようですが、内部ではもちろん、それぞれのFMS(ファイルマネージメントシステム)に合わせて処理されています。


CpmDrvWin.exe


(4)ファイル形式変換ソフト
(4-1)ディスクイメージファイル変換ソフト
 普段はディスクイメージファイルの中を見やすいDSKファイルを使うことが多いのですが、XM7やGOTEKのためにはD77形式に変換する必要があります。今まではそれぞれのDOS用に制作したコンソールソフトを使用していたのですが、不便なので全DOSに対応したフォームソフトを制作しました。トラック数が40か80かは自動判別しますのでどちらでも使えます。



D77, DSK, DAT間変換ソフト


(4-2)バイナリファイル変換ソフト
 Bin, Hex, Motファイル間の変換ソフトです。さらにFlex9のバイナリ形式にも変換できます。


Bin, Hex, Mot間変換ソフト


 以上のソフトは、必要に迫られてここ10年ぐらいの間に制作したもので、特にアセンブラや逆アセンブラは標準的な構造など全く知らないのに自己流で作ったものですが、自分にとっては結構役に立っています。(たまに動作がおかしいと思った時などには他のアセンブラなどの結果と比較することがありますが、現在の版では問題がないと思っています。)

一応、6800用ではMikbug9, Mikbug20, TL1, TinyBasic(電大版)などがアセンブルできることを確認してあります。GAMEⅢでは1文字を「'」ではなく「"」で囲むという標準ではない書き方が多数ありますのでそれを修正(#”A”→#'A')する必要がありました。

6809用ではASSIST09のリストのミス(CPX→CMPX)と4箇所の#'(sp)を#'(sp)'のようにスペース後の「'」を追加することでアセンブルできました。

これらをOneDriveに上げておきますので、もし使用してみて動作がおかしいということがありましたらご一報いただけると有難いです。

【10月2日追記】6800/6809逆アセンブラの修正版を10月2日にアップしました。