必要に迫られて自作したアセンブラ等のツールソフトの紹介(第2回)です
【11月15日追記】クロスアセンブラ(6809用、6800用)の修正版を11月15日のブログ「必要に迫られて自作したツールソフト(クロスアセンブラ)の紹介(第3回)」にアップしましたので、そちらの方を参照ください。また、6801用、6303用も同時に公開しました。
【5月23日追記】コメントでご指摘いただいた点を改善した6809AsmWin.exeと6800AsmWin.exeを公開しました。末尾を参照ください。
【4月30日追記】コメントでご指摘いただいた点を改善中です。かなり大幅に書き換えましたので、他の箇所でバグが発生していないかチェック中です。チェックが済みましたら改めて、6809AsmWin.exeと6800AsmWin.exeを公開する予定です。
2021年9月1日のブログ「必要に迫られて自作したアセンブラ等のツールソフトの紹介」https://www.blogger.com/blog/post/edit/1662007451717538019/137356729684879777
で私が日常使用しているいくつかの自作ソフトを紹介して公開しましたが、その後、必要に応じて修正を重ねてきましたので、ここで改めて最新のバージョンを紹介することにしました。
(1)クロスアセンブラ
・6809クロスアセンブラ 6809AsmWin.exe
・6800クロスアセンブラ 6800AsmWin.exe
クロスアセンブラの主な修正点はFCB疑似命令のオペランド処理の改善です。
「'A',-'B'」や「'A,-'B」のような両書式に対応しました。また、カンマ「,」やスペース「 」もそのまま「','」や「',」の形で使用できます。ただし、文末にカンマやスペースが来る場合は誤変換が生じる場合がありますので、「','」のように閉じの「'」をつける必要があります。
(2)クロス逆アセンブラ
・6809クロス逆アセンブラ 6809DasmWin.exe
・6800クロス逆アセンブラ 6800DasmWin.exe
逆アセンブラの修正点は、データ部をスキップさせる場合の範囲指定処理の改善です。
(3)転送ツール
転送ツールとして良く使用するのは仮想ドライブ構築ソフトです。それぞれのDOS(?)に合わせて4種類制作しています。
・Flex9用のFlexDrvWin.exe
・OS-9用のOS9DrvWin.exe
・F-BASIC3.0用のFBasDrvWin.exe
・CP/M-80用のCpmDrvWin.exe
主な修正点は、扱えるファイル書式を.D77、.DSKに加えて、各セクタの先頭に16バイトのセクタデータを付加した.DAT形式に対応したことと、パソコンとの通信にRS232Cに加えてFT245高速通信カードに対応したことです。
(4)ツールソフト
・CnvTxtTl1Src.exe
Windows機で作成したTL/1やGAMEのプログラムをTL/1形式やGAME形式に変換するソフト
・CvtMotHexBin.exe
バイナリファイルをBin, Hex, Mot形式に変換するソフト
・CvtDskD77.exe
フロッピィディスクイメージの形式を変換するソフト
その他として、
(5)FT245高速通信カードを用いたFM-7とWindows機との間の高速通信ソフト
・ディスクコピープログラム(F-BASIC3.0用、OS-9用、FLEX用、CP/M用)
・ファイルコピープログラム(F-BASIC3.0用、OS-9用、FLEX用、CP/M用)
がありますが、その都度ブログで報告していますのでそれらをご参照ください。
各ソフトを画像で紹介しておきます。
(1)クロスアセンブラ
アセンブルしたいファイルを「ファイル名」ボックスにドラッグ&ドロップして「アセンブル実行」ボタンを押します。
6809AsmWin.exe |
6800AsmWin.exe |
アセンブルしたいバイナリファイルを「ファイル名」ボックスにドラッグ&ドロップし、「オプション」メニュー中の「オフセット指定」でスタートアドレスを設定してから「逆アセンブル実行」ボタンを押します。
バイナリファイル中にデータ範囲があるようなら、その範囲を推定して「オプション」メニュー中の「スキップ範囲追加」で設定します。
Os9DrvWin.exe |
CpmDrvWin.exe |
FlexDrvWin.exe |
CnvTxtTl1Src.exe |
CvtMotHexBin.exe |
CvtDskD77.exe |
これらをまとめてOneDriveに上げておきますので、もし使用されてみて動作がおかしいということがありましたらご一報いただけると有難いです。
(前回もこのような文を書いておきましたが、特に連絡をいただけることはありませんでしたので、恐らく使用されてみた方はいらっしゃらないのだとは思いますが、自分自身の試みの記録を兼ねてブログにアップしました。)
取り敢えず気付いた点として、
返信削除fccの文字列をシングルコーテーションで括るとアセンブルエラーは出ないが文字列が展開されずbinからも抜けてしまい、正しくアセンブルするにはダブルコーテーションで括る必要があること。
また、ダブルコーテーションで括ってもbinは正しいけどlstとしては文字列が展開されないこと。
が気になりました。
使用されてのコメントを初めていただきました。yanatakさまありがとうございます。
返信削除仕様として、FCCの文字列は「/」か「"」で括ることを標準にしており、「'」で括った場合はFCBと同様に1文字だけを読むことにしております。FCCの文字列を「'」で括るという書き方は一般的ではないと思うのですがいかがでしょうか。
また、「"」で括った場合の結果としてbinは正しいがlistには展開されない理由ですが、文字列が長い場合の処理としては複数行に展開せざるを得ないのですが、そのための複雑な処理をサボっておりまして、常にアセンブルリストには先頭の1文字のみを表示するようにしているためです。正しく変換されたかどうかはバイナリリストの方で確認はできるのですが、確かにアセンブルリストの方では分かりにくいので、改善すべき点だと思っております。ありがとうございました。
回答ありがとうございます。
返信削除「'」で括るのは一般的ではなかったのですね。
6800アセンブラ・シミュレータ、6809アセンブラ・シミュレータ添付のAssemblerではなんとなく使って通っていたので気付きませんでした。
WindowsベースのAssemblerとして結構使いやすいのでこれからも使ってみたいと思います。
公開していただきありがとうごさいます。
そもそもアセンブラの仕様や構造も良く分からずに作っておりまして、自分の判断で勝手に仕様を決めている部分もありますので、他の方のご指摘はとてもありがたいです。これからもご指摘をよろしくお願いいたします。
削除改善していただき、ありがとうございました。
返信削除fccの文字列を「'」で括る対応のみならず、listにすべて展開されるようにしてくださったので、binに出力しなくても画面で即assemble結果が確認できるので非常に助かります。
私自身も不便だと感じていたのですが、手直しが面倒でそのままになっていました。
削除ご指摘をいただいたおかげでプログラムを改善できました。ありがとうございました。
他にもバグ等が見つかりましたらぜひご連絡ください。よろしくお願いいたします。