Cソースをコンパイルして無事バイナリイメージ(EXE形式)まではできたのですがボードに転送してメモリ上に配置するとどうも内容がおかしいし、実行しても暴走してしまうという状況が続いていました。バイナリエディタで開いてみると、どうも先頭部分が壊れているようです。
EXEファイルを直接テキストで開いてみると原因が判りました。プログラム内にあるいくつかのメモリブロックが必ずしも順番に並んでいるわけではないようです。以下の例では0x804番地からロードされるメモリブロックが0x800から始まるそれより先にあります。これでは先頭からローディングアドレスを読んで隙間にパディングを入れる変換ではうまくいかない訳です。
こうなったら変換ツールEXE2BINは完全に作り直したほうがよさそう。はじめに充分大きいコードバッファを用意しパディングで埋めておきます。その後、ローディングアドレスから各メモリブロックを流し込んでやればどういう順番で来ても大丈夫です。修正した変換ツールの実行例です。