必要に迫られて自作したツールソフトのうちのクロスアセンブラを手直ししました
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に置いておきますので、使用した結果については自己責任ということを承知していただいたうえで、自由にご使用ください。