「kzload」というファイルは、ELF形式というフォーマット。
クロスコンパイルや動的リンクなどに、対応するためにより良い形式を模索してELF(Executable and Linking Format)が作られたとのこと。
ELF形式の詳細は以下を参照。
http://caspar.hazymoon.jp/OpenBSD/annex/elf.html

さらに周辺知識を増やすにはこの本が評判良さそう。
http://www.amazon.co.jp/Binary-Hacks-%E2%80%95%E3%83%8F%E3%83%83%E3%82%AB%E3%83%BC%E7%A7%98%E4%BC%9D%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF100%E9%81%B8-%E9%AB%98%E6%9E%97-%E5%93%B2/dp/4873112885/ref=sr_11_1?ie=UTF8&qid=1232959949&sr=11-1



h8writeはこのELF形式フォーマットは扱えないという(なんか面倒)。

そもそもh8writeでなにやるんだっけというと、H8/3069Fマイコン・ボードのフラッシュROMにファームウェアの書き込み実施。
ハードについてしっかり押さえたうえでh8writeは作られたのだろう。
http://mes.sourceforge.jp/h8/h8write.c


それじゃどうすればいいのっていうと、h8writeを使わないで他のツールを使うという展開ではなく、ELF形式フォーマットをモトローラSレコード・フォーマットというかなり長い名前のフォーマットへの変換をするとのこと。


モトローラSレコード・フォーマットを突っ込んで知りたければここを参照。
http://www.geocities.jp/chako_ratta/micon/s_format.html
「データの書き込み位置をアドレスで指定」というのがキーワードのようなのでマイコンにプログラムを書き込む位置を定義してあげる必要がありその情報を定義したファイルが必要なのだろう。
ELF形式にはフォーマットにはデータの書き込み位置をアドレスで指定するための情報はないのだろうか?


作業としては、objcopyというコマンドを利用してモトローラSレコード・フォーマットへと変換完了。(Makefile中に定義済)
objcopy -O srec kzload kzload.mot




他にもフラッシュROMにファームウェアを書き込むためのフォーマットがあるでしょと浮かんだ方にはここを参照するのがよさそう。
http://www.pastelmagic.com/tips/hexform/hexform.html
(要約)
各社いろいろなものがあったが、大御所はやはりインテルHEX形式とモトローラSレコード形式の二つ。他にもあるけども、この二つを押さえておけばだいたい不自由しないと思う。

なんかいろいろあるようだけど、他のファームウエアに書き込むためのフォーマットではだめなのかなぁ。。


本やサイトからいろいろ推測してみましたが、そもそも本を書いた筆者はどのような試行錯誤を重ねていたのかサイトから伺うことができました。(つづく)