BIN2HEX バイナリファイルをINTEL_HEXファイルに変換する

書法

BIN2HEX [ :address| filename ]* [ options ]*

SHELLMODE

@記述、!記述、^記述

詳細

バイナリファイルをINTEL_HEX形式のファイルに変換する。
アドレス及び、ファイル名の記述の順序は有意なので注意を要する。 以降、出現するたびに、次に現れるファイルの先頭アドレスを指定する。
アドレスを指定する前にファイル名が現れた場合はそのファイルの開始アドレスは0となる。 ファイル名もアドレスも省略すると標準入力を扱い、その開始アドレスは0である。
最後にアドレスだけを指定すると、それが、領域の最終アドレスとなる。 (実際は領域の次ぎのアドレスで指定する)

現在は、全てのファイルをメモリに読み込んで処理するので、あまり大きなファイルの取扱は具合が悪い。

領域の指定

入力したファイルから、内部にバイナリイメージを生成するが、 バイナリファイルには、アドレス情報が無いため、 コマンドラインに:hexadrの形式でその開始位置を指定する。
例えば以下のように指定する。
:800 :900 begin.bin :a00 main.bin :c00
上の例では、最初の:800がバイナリイメージの開始領域を表わし、 最後の:c00がバイナリ領域の終了(領域+1)を表わす。 つまり、内部のバイナリ領域は、0x800-0xbffとなる。
begin.binはその中の:900から始まる。 同様にmain.binの開始位置は:a00である。
アドレスは昇順で無ければならず、ファイルは次ぎのアドレスをオーバーライトしてはならない。 上の例ならば、begin.binは0x900から始まるが、必ず、0xa00より前にファイルが終わる必要がある。

出力モード

内部のバイナリイメージのどの部分を出力するかで、三つのモードが有る。

パッキング

ROM書きこみの際などに、ROMの初期イレーズデータは通常0xffであることが多い。 そのため、このデータの出力を抑制するとファイルサイズを小さくすることが出来る。
パッキングの対象のデータはデフォルトでは、0xffであり、-Fで指定できる。
パッキングは、-P-PPオプションで指定する。 前者はおおまかに、後者は細かくパックする。

アドレス指定

INTEL_HEX形式のアドレス空間は通常64kbで有るので、 これを超えた場合にはアドレス修飾レコードを出力する。
アドレス修飾レコードは、セグメント形式とリニア形式の2種類がある。 後者のほうが広いアドレスに対応している。
デフォルトでは、アドレスが小さい場合は、セグメント形式で出力し、 アドレスが大きくなると、リニア形式を出力する。 この方法は、アドレス修飾が混在するために、受け取る側のソフトにより、対応できない可能性も有る。 また、64kb以内の場合には冗長である。
一応、オプションで、それぞれの専用のファイルを出力できる。

OPTION

-Astart_address,{end_address|+size]
出力領域を指定する。
領域の指定は、次の二つの方法がある。
-Astart_adr,end_adr
終了アドレスは領域の次のアドレス。
-Astart_adr,+size
バイトで数えたサイズを指定する。
出力領域が、内部のイメージ領域を超えたときはエラーとなる。
-Cbytecount
データレコード1行に含める最大のバイト数を指定する。 デフォルトは16で、通常この値で十分である。
-Fhexnum
パッキングの対象となるバイナリコードを16進数で指定する。 デフォルトは0xFF。
-P
パッキング指定。 オプション-fで指定した値を出力に含めないようにする。 大まかにパッキングするだけで最適化はしない。
-PP[num]
より強力なパッキング指定。数字は1-5程度で指定。 デフォルトは2。 指定の数だけパッキング対象コードが現れると、レコードを分割して出力する。
-L
16ビットを超えたアドレスに対して出力する上位アドレス指定を 常に、linearアドレスで行う。 この指定をしないと、セグメント指定とリニア指定を随時切替えて行う。
-Ofilename
出力を指定のファイルに切替える。
-V
ファイルで入力した部分だけを出力する。
-Z
最初の64kbに対しては、セグメント指定やリニア指定を出力しない。

戻り値

成功すれば1を返す。それ以外では0

用例

参考

HEX2BIN INTEL_HEXファイルからバイナリファイルを作成する

バージョン

Ver 1.00初版