2024年11月15日金曜日

必要に迫られて自作したツールソフト(クロスアセンブラ)の紹介(第3回)

 必要に迫られて自作したツールソフトのうちのクロスアセンブラを手直ししました

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のみでオペランドがありませんので当然、エラーが出ています。
その他の行では、「’A’」や「’A」のような書き方が混在していても正しく変換されています。
下から2行目はassist09からの引用ですが、「',」という書き方でも正しく変換されていますので、それを最下行のようにあえて「','」のように書き換える必要がありません。
注意点ですが、FCBのオペランドですので計算結果が$FFを超えた場合の上位桁は無視されます。

ちなみにアークピットさんのX6801では以下のような結果になりました。

X6801による結果


計算結果のオーバーフローに対してはちゃんとwarningが出ています。

書式として「'A'」のように書くことになっていますので、「'A」のような書き方では誤変換してしまうのは当然なのですが、エラーメッセージが出ないので注意が必要です。


今までは6303用や6801用のクロスアセンブラは公開していなかったのですが、先日LILBUGをアセンブルしてみて、それなりに使えることが分かりましたので、公開することにします。修正した4つのクロスアセンブラ(6809AsmWin.exe, 6800AsmWin.exe, 6801AsmWin.exe, 6303AsmWin.exe)をOneDriveに置いておきますので、使用した結果については自己責任ということを承知していただいたうえで、自由にご使用ください。




2 件のコメント:

  1. クロスアセンブラを公開していただきありがとうございます。
    使い勝手も良く、もう無くてはならないツールとして6809AsmWin、6800AsmWin共に使わせていただいてます。
    ところで使っている中で気になった点が二つほどありました。
    ひとつめは、
    FCB ' '
    のように空白をダブルコーテーションで括って記述すると$20ではなく、$00とアセンブルされます。

    ふたつめは、1行に128文字以上記述し、アセンブルすると特にメッセージもなくアセンブラが落ちてしまいます。

    どちらも気を付ければ回避できていますので私としては現状でも気にしませんが、ご報告させていただきます。

    返信削除
    返信
    1. コメントありがとうございます。
      使用されてのご指摘は大変ありがたいです。

      ご指摘の2点ですが、ひとつめについては気が付いておりまして、修正版(6809用はVer2.2、6800用はVer2.1)を作成済みですが、結構大掛かりな変更でしたので、それによるバグが生じる可能性もあるので十分チェックしてからということで、まだ公開しておりませんでした。

      ふたつめはオペランド用のバッファを128バイトに設定しているためだと思いますので多分簡単に修正できます。
      これを修正してから公開いたしますので今しばらくお待ちください。

      削除