2021年11月17日水曜日

6502の逆アセンブラを制作する(その3)

 6502の逆アセンブラを制作する過程の紹介の続きです


W65C816ボード


制作過程(6)--- pass2

pass2では再びデータの先頭から1文字ずつ読みながらアセンブルリストを作成し、ListリストとAssembleリストボックスに書き込んでいきます。その書式は次のようです。
Listリストボックスには
 行番号 アドレス オペコード オペランド ラベル ニーモニック オペランド
Assembleリストボックスには
 ラベル ニーモニック オペランド (アセンブラプログラムにかけられる形式です。)

そのアドレスにラベルがついている場合はラベルも表示し、オペランドがアドレスである場合は即値をラベルに置き換えて表示します。
該当する命令がない場合はオペコードを ?-xx- のように表示し、ニーモニック欄はそのアスキーコードを'a'のように表示します。

【ここまでの結果】 ... 06Coding-pass2

制作過程(7)

作成された逆アセンブルリストを保存します。
ListリストはLSTファイルとして、AssembleリストはASMファイルとして保存します。

【ここまでの結果】 ... 07Coding-savefile

制作過程(8)

最後に細部の見直しをして完成です。

【11月18日追加】下の2ファイルは適宜見直して差し替えることがあります。

【完成版】 ... 08Coding-complete  

完成版の中の実行ファイルのみ ... 6502DAsmWin

最後に

10年ほど前に制作した6800用の逆アセンブラの制作過程をほとんど忘れてしまっていたので、それを復習するためもあって今回、6502の逆アセンブラの制作に取り組んでみました。
自分の場合は、ソースが公開されていてもあまりに長いとなかなか読み切れないことが多いので、いくつかに分割して紹介してみましたがどうだったでしょうか。

手持ちに6502のバイナリがないので十分に動作確認ができてはいないのですが、とりあえずelectrelicさんのUniversal Monitor 6502版が正常に逆アセンブルできることは確認してあります。

6502の命令コードの解釈やその他の誤り・勘違いなどがありましたらお知らせいただけるとありがたいです。






 

2 件のコメント:

  1. 一週間に1回は訪問してますが今週は時間が空きました。御存知のように
    6502のコードは十分に持ってますし同様な操作なら「6809DAsmWin」も
    便利に使わってるので「6502DAsmWin」を使ってみます。直に慣れるか
    否かは判りませんが楽しみです。お疲れ様でした。

    返信削除
    返信
    1. コメントありがとうございます。
      これで多少は6502の命令コードとアドレッシングモードについての知識が得られましたので、次はいよいよアセンブラの作成に取り組もうと思っていますが、他にもやりたいことがいくつかありますので、完成はいつになりますやら。

      削除