必要に迫られて自作したツールソフトのうちのクロスアセンブラを手直ししました
4月25日のブログ「必要に迫られて自作したアセンブラ等のツールソフトの紹介(第2回)」で紹介しましたソフトのうちのクロスアセンブラのバグを修正しましたので、公開します。
修正したバグはFCB疑似命令のオペランドの解釈部です。ごく普通の書き方をしていればよいのですが、時に、式の解釈を間違えたりする場合があったのです。
例えば、10月10日のブログ「自作の6809SBCにOS-9を移植する試み(その1 SBCの製作)」にも書きましたように、assist09をアセンブルした際に誤変換が発生したのですが、それはFCBのオペランドとして「'A」と「'A'」の両方の書式に対応するように修正したために発生したバグでした。
FCB疑似命令の解釈ルーチンは6809用、6800用、6801用、6303用の全てのクロスアセンブラに共通ですので、この際、まとめて修正することにしました。
この解釈ルーチンは、最初は単純な書式のみに対応したものを作成し、必要に応じて徐々に拡張してきたものでしたが、ちょっと複雑な形のオペランドはどうしても式として解釈する必要があります。現在のものの拡張では括弧を含めた式にも対応させるのは無理と感じましたので、思い切って全面的に書き換えることとしました。
以前、ちょっとした電卓プログラム的なものを作成したことがありましたので、それを手直しして使うことにしました。式中に「$AB」のような16進数や「’C」のような文字コードが入っても大丈夫で、もちろん括弧も使えます。
修正したクロスアセンブラによる結果
6303AsmWin.exeによるアセンブル中の画面を示します。FCB疑似命令の処理ルーチンは他のアセンブラ全てに共通ですので、全く同じ結果になります。
6303AsmWin.exeでアセンブル |
テストデータ |
アセンブル結果です。
6303AsmWinによる結果 |
0014行はFCBのみでオペランドがありませんので当然、エラーが出ています。
ちなみにアークピットさんのX6801では以下のような結果になりました。
X6801による結果 |
書式として「'A'」のように書くことになっていますので、「'A」のような書き方では誤変換してしまうのは当然なのですが、エラーメッセージが出ないので注意が必要です。
今までは6303用や6801用のクロスアセンブラは公開していなかったのですが、先日LILBUGをアセンブルしてみて、それなりに使えることが分かりましたので、公開することにします。修正した4つのクロスアセンブラ(6809AsmWin.exe, 6800AsmWin.exe, 6801AsmWin.exe, 6303AsmWin.exe)をOneDriveに置いておきますので、使用した結果については自己責任ということを承知していただいたうえで、自由にご使用ください。
クロスアセンブラを公開していただきありがとうございます。
返信削除使い勝手も良く、もう無くてはならないツールとして6809AsmWin、6800AsmWin共に使わせていただいてます。
ところで使っている中で気になった点が二つほどありました。
ひとつめは、
FCB ' '
のように空白をダブルコーテーションで括って記述すると$20ではなく、$00とアセンブルされます。
ふたつめは、1行に128文字以上記述し、アセンブルすると特にメッセージもなくアセンブラが落ちてしまいます。
どちらも気を付ければ回避できていますので私としては現状でも気にしませんが、ご報告させていただきます。
コメントありがとうございます。
削除使用されてのご指摘は大変ありがたいです。
ご指摘の2点ですが、ひとつめについては気が付いておりまして、修正版(6809用はVer2.2、6800用はVer2.1)を作成済みですが、結構大掛かりな変更でしたので、それによるバグが生じる可能性もあるので十分チェックしてからということで、まだ公開しておりませんでした。
ふたつめはオペランド用のバッファを128バイトに設定しているためだと思いますので多分簡単に修正できます。
これを修正してから公開いたしますので今しばらくお待ちください。