BIN2MOT バイナリファイルをMOTOROLA_Sファイルに変換する

書法

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

SHELLMODE

@記述、!記述、^記述

詳細

バイナリファイルをMOTOROLA_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オプションで指定する。 前者はおおまかに、後者は細かくパックする。

形式指定

MOTOROL_S形式のアドレス空間は当初64kbであったが、 アドレス空間が広くなるに従い、出力形式を拡張し、現在は3種類ある。
アドレス空間データレコードトレーラーレコード
2BYTE0x0000-0xffffS1S9
3BYTE0x000000-0xffffffS2S8
4BYTE0x00000000-0xffffffffS3S7
通常、プログラム開始アドレス指定に使用するトレーラーレコードもアドレス長に対応している。
デフォルトでは、そのレコードが入りきる最小のアドレス長で出力するようになっている。 この方法は、レコード形式が混在するために、受け取る側のソフトにより、対応できない可能性も有る。 そこで、オプション(-S)で使用するレコード形式を指定できる。
一応、オプションで、それぞれの専用のファイルを出力できる。

ヘッダーレコード

ヘッダーレコード(S0)には、慣習的に、8.3形式のファイル名を格納することに なっているが、実質的な意味は無い。デフォルトでは適当な文字列が割り当てられている。
これをオプション指定(-H)で変更できるが、読み取りソフトによっては、 長い名称や漢字の使用などに対応していない可能性がある。 このことから、デフォルトのまま使用するを推奨する。 必要な場合は、8.3形式の英数字で記述する方が良い。

トレーラーレコード

トレーラーレコード(S9S8S7)には、 プログラムの開始番地を格納する。 これはモニターでのロード時などに用いるもので、ROM作成時には意味は無い。
デフォルトでは、出力指定された一番若い番地を格納している。 したがって、レコードのパック指定などを行った場合には、 必ずしも最初の出力レコードと一致するわけではない。
これをオプション指定(-E)で指定できる。

OPTION

-Astart_address,{end_address|+size]
出力領域を指定する。
領域の指定は、次の二つの方法がある。
-Astart_adr,end_adr
終了アドレスは領域の次のアドレス。
-Astart_adr,+size
バイトで数えたサイズを指定する。
出力領域が、内部のイメージ領域を超えたときはエラーとなる。
-Cbytecount
データレコード1行に含める最大のバイト数を指定する。 デフォルトは16で、通常この値で十分である。
-Ehexadr
トレーラーレコードに含めるプログラム開始アドレスを16進数で指定する。 指定を省略すると、出力指定領域の先頭アドレス。
-Fhexnum
パッキングの対象となるバイナリコードを16進数で指定する。 デフォルトは0xFF。
-Hstr
ヘッダーレコードに含める文字列を指定する。通常は不要。 デフォルトは8.3形式の適当な文字列。
-P
パッキング指定。 オプション-fで指定した値を出力に含めないようにする。 大まかにパッキングするだけで最適化はしない。
-PP[num]
より強力なパッキング指定。数字は1-5程度で指定。 デフォルトは2。 指定の数だけパッキング対象コードが現れると、レコードを分割して出力する。
-S[1|2|3}*
アドレス長によって異なるレコード形式の使用の有無を指定する。
-S1
S1S9形式の使用を許可。2バイトアドレス。
-S2
S2S8形式の使用を許可。3バイトアドレス。
-S3
S3S7形式の使用を許可。4バイトアドレス。
-S
全ての形式の使用を許可。
複数の形式の指定も可能である。
-S13
この場合ならば、「S1S9」と 「S3S7」の双方を出力する。 複数の指定をした場合は、適応できる短いアドレスを使用する。 このとき、出力は混在する。
-Ofilename
出力を指定のファイルに切替える。
-V
ファイルで入力した部分だけを出力する。

戻り値

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

用例

参考

バージョン

Ver 1.00初版