Arduino pro mini上でFlashForthを使ってマルチタスクの実験をしたが、hexファイルの書き込みでインストールしている。
しかしやはりソースからアセンブルしたい。 (FlashForthのアセンブル(2)よりの続き)
なぜかビルドした結果のHexファイルと付属のHexが一致しない。
なにが起きているのか確認するため、MAPLABの逆アセンブラを使ってみる。
File > Import > Hex/ELFで該当のHexファイルを読み込み、Windows > Target memory views > Program Memory
出来た結果はファイルに出せる
ビルドしたHexファイルと、付属しているHexファイルを逆アセンブルしてdiffした。
しかし逆アセンブルした結果が1行目から変。本来JMPは4バイト命令のはずだが。 MAPLABのバグか?
JMPは4バイトなので、後ろのADD R21, R5などはおかしい。
無いよりましだけど、あまりあてにならない。(FlashForthを調べるどころではないなあ)
[5]それでもあれやこれや調べると、ff-xc8.asmの以下の「call FETCH」を「rcall FETCH」としてビルドすれば、付属のHexファイルと一致することがわかった。
===ff-xc8.asm 3014行より ここの call FETCHを rcall FETCHに変更========
F_LFA_FETCH:
call FETCH ; c-addr nfa
cbr FLAGS2, (1<<fFIND)
findi2:
sbiw tosl, 0 ; c-addr nfa
brne findi1
rjmp findi3
============
これで安心して遊べる。
※コメント投稿者のブログIDはブログ作成者のみに通知されます