ROM化ファイルについて
一般的にマイコンを動作させるプログラムをファームウェアーと読んでいます。
ファームウェアーは最終的に ROM に焼き付けることで動作させます。
ROM にデータを焼き付ける( ROM化 )には ROM ライタと呼ばれる機械を用います。
ROM ライタは指定アドレスに指定データを書き込む作業を行なえます。
指定データに指定アドレスを定義しているファイルには
モトローラSフォーマット形式もしくはインテルHEXフォーマット形式が有名です。
ロムライタではこれらのファイルを読み込むことで ROM 化 処理を行っています。
xeditではこれらのファイルを出力することが出来ます。
- モトローラSフォーマット解析
- インテルHEXフォーマット解析
レコードの構成
モトローラSフォーマットは複数のレコード形式から成り立ちます。
ファイルはプレーンテキストで1レコードは1行です。(改行でレコード端)
以下のサンプルは複数のレコードから形成されたSフォーマットの中身です。
(スペースで区切りを分かり易くしています。)
S0 0E 0000 73616D706C652020202020 CF
S2 14 000000 92ED73CEE943A2EFB87E3B89FEB2D26D 85
S2 14 000010 965AC3175EF077E199BBE27692E95088 6C
S2 14 000020 83DD62C6B4CA5308E78180CDF48728E8 2A
S2 14 000030 B16B70761456AA139CE4D64EEC32695A 0D
S2 14 000040 BA394E06E75A2BEEEF39E5F384CF66EA 67
S2 14 000050 76BB9E91D6D9C7C75B16EEFC0483AFE6 87
S2 14 000060 FFA84075CA1AB10A985071E4F6B215DA BC
S2 14 000070 AEF35550ECA157649FFA31682202A995 59
S2 14 000080 1CD23EFDA5336DC2AA6B2D869257BC22 AC
S2 14 000090 21BA9D9B9DD5E2523038A77A8ED7DFCF 06
S2 14 0000A0 D7605385BFCCE77FEC351FC2A0E7E329 B6
S2 14 0000B0 97B97F5A339EEEF8D677581B8F2BD9FD 0B
S2 14 0000C0 FAFA84F6610EA8AA2753518167891257 57
S2 14 0000D0 D8980275F42305C0595F4D316F262085 E8
S2 14 0000E0 4B47DB36D32137A92370CBA93066D214 11
S2 14 0000F0 ABFE2FD4298DAE1180998DA574EF3BD1 20
S8 04 000000 FB
レコードには以下の種類が存在します。
各レコードとも形式は以下のようになっています。
| 名称 |
サイズ |
意味 |
| レコード形式 |
2 文字 |
レコードの種類を示すコード |
| バイトカウント |
2 文字 |
ロードアドレスからチェックサムの前までのバイト数 |
| ロードアドレス |
2*n 文字 |
書き込み対象となる先頭アドレス |
| データ |
2*n 文字 |
書き込みデータ |
| チェックサム |
2 文字 |
バイトカウントからチェックサムの前までのデータ値をバイト単位に加算した結果の1の補数 |
ヘッダレコード
ヘッダーレコードはフォーマットの先頭を示し、
以下のような形式でファイル名が格納されています。
S0 0E 0000 73616D706C652020202020 CF
| 名称 | 値 |
|---|
| レコード形式 | S0 |
| バイトカウント | 0E |
| ロードアドレス | 0000 |
| データ | 73616D706C652020202020 |
| チェックサム | CF |
ヘッダレコードのロードアドレスは 0000 を指定します。
また、データ部には「7.3」形式のファイル名を格納します。
この場合、[sample ] となっています。
データレコード
データレコードには3タイプあり、レコード形式 S1,S2,S3 として区別します。
レコード形式によりロードアドレスのサイズが変わります。
S1 xx 0000 xxxxxxxxxxxxxxxxxxxxxx xx
S2 xx 000000 xxxxxxxxxxxxxxxxxxxxxx xx
S3 xx 00000000 xxxxxxxxxxxxxxxxxxxxxx xx
| レコード形式 | ロードアドレスサイズ |
|---|
| S1 | 4 文字(2byteアドレス) |
| S2 | 6 文字(3byteアドレス) |
| S3 | 8 文字(4byteアドレス) |
エンドレコード
エンドレコードには3タイプあり、レコード形式 S9,S8,S7 として区別します。
レコード形式によりエントリーアドレスのサイズが変わります。
エントリーアドレスはプログラム開始番地として利用する場合に指定します。
データ部は何も定義しません。よってサイズ部は必然的に決定されます。
S9 03 0000 xx
S8 04 000000 xx
S7 05 00000000 xx
インテルHEXフォーマットも複数のレコード形式から成り立ちます。
ファイルはプレーンテキストで1レコードは1行です。(改行でレコード端)
以下のサンプルは複数のレコードから形成されたインテルHEXフォーマットの中身です。
(スペースで区切りを分かり易くしています。)
:10 0000 00 92ED73CEE943A2EFB87E3B89FEB2D26D 8A
:10 0010 00 965AC3175EF077E199BBE27692E95088 71
:10 0020 00 83DD62C6B4CA5308E78180CDF48728E8 2F
:10 0030 00 B16B70761456AA139CE4D64EEC32695A 12
:10 0040 00 BA394E06E75A2BEEEF39E5F384CF66EA 6C
:10 0050 00 76BB9E91D6D9C7C75B16EEFC0483AFE6 8C
:10 0060 00 FFA84075CA1AB10A985071E4F6B215DA C1
:10 0070 00 AEF35550ECA157649FFA31682202A995 5E
:10 0080 00 1CD23EFDA5336DC2AA6B2D869257BC22 B1
:10 0090 00 21BA9D9B9DD5E2523038A77A8ED7DFCF 0B
:10 00A0 00 D7605385BFCCE77FEC351FC2A0E7E329 BB
:10 00B0 00 97B97F5A339EEEF8D677581B8F2BD9FD 10
:10 00C0 00 FAFA84F6610EA8AA2753518167891257 5C
:10 00D0 00 D8980275F42305C0595F4D316F262085 ED
:10 00E0 00 4B47DB36D32137A92370CBA93066D214 16
:10 00F0 00 ABFE2FD4298DAE1180998DA574EF3BD1 25
:00 0000 01 FF
レコードには以下の種類が存在します。
| 名称 | コード |
| データレコード | 00 |
| エンドレコード | 01 |
| 拡張レコード | 02 |
| エントリアドレスレコード | 03 |
データレコード
データレコード形式は以下のようになっています。
:BBAAAATTxxxxxxSS
| 名称 |
サイズ |
意味 |
| 開始 |
1 byte |
レコード開始を示すコード ':' |
| バイトカウント(BB) |
2 文字 |
データ部のバイトカウントを示す |
| ロードアドレス(AAAA) |
4 文字 |
書き込み対象となる先頭アドレス |
| レコードタイプ(TT) |
2 文字 |
'00' 固定 |
| データ |
2*n 文字 |
書き込みデータ |
| チェックサム(SS) |
2 文字 |
バイトカウントからチェックサムの前までのデータ値をバイト単位に加算した結果の2の補数 |
拡張レコード
このレコードの後にくるデータレコードはロードアドレスが拡張されます。
拡張後のロードアドレスは EEEE * 0x10 が加算された値になります。
:BBAAAATTEEEESS
| 名称 |
サイズ |
意味 |
| 開始 |
1 byte |
レコード開始を示すコード ':' |
| バイトカウント(BB) |
2 文字 |
データ部のバイトカウントを示す '02' 固定 |
| ロードアドレス(AAAA) |
4 文字 |
書き込み対象となる先頭アドレス '0000' 固定 |
| レコードタイプ(TT) |
2 文字 |
'02' 固定 |
| データ(EEEE) |
4 文字(2byteアドレス) |
書き込みデータ |
| チェックサム(SS) |
2 文字 |
バイトカウントからチェックサムの前までのデータ値をバイト単位に加算した結果の2の補数 |
エンドレコード
エンドレコードでファイルの末尾を示します。
:00000001FF
[トップページ]