SSブログ

Sレコード生成プログラム [ColdFire V2]このエントリーを含むはてなブックマーク#

1990557

どんなに時間が経過しても、モトローラの標準バイナリ・フォーマットは、「Sレコード」です。 ダンプを作成するなら、Sレコード生成プログラムは欠かせません。

Sレコードって、何だ

バイナリの情報をテキスト・ファイルに変換するためには、色々な方法があります。 最近では、BASE64というエンコード方法がメール添付ファイルなどで使われています。

マイコンのプログラムの場合、データももちろん重要なのですが、そのデータを配置するアドレスも情報として持っていなくてはなりません。 そのために、インテルが提唱したフォーマットを「HEX」と言い、モトローラが提唱したフォーマットを「Sレコード」と呼んでいます。

Sレコードのフォーマットをちょっとだけ

「Sレコード」は、一行完結のフォーマットで、各行の先頭が"S"という文字で始まっている事から、この名前で呼ばれています。 "S"の次には、"0"から"9"の文字が続き、その行が何をあらわしているのかを示します。

Sレコードのフォーマット
文字 "S" レコードの種別を示す文字 データ長を示す2文字の16進数 2文字の16進数単位で構成されるデータ本体 チェックサム 行末文字

多くの8ビットマイコンの場合、アドレス部分は16ビットです。 この場合、種別"1"を使います。 データ本体の最初の2バイトがアドレスを示します。

一方、ColdFireのように32ビットのアドレスを使用する場合には、種別"3"が使用されます。 この場合、データ本体の最初の4バイトがアドレスを示します。 今回のプログラムの場合には、種別"3"のレコードのみを生成します。

データ長は、データ長部分とデータ本体をあわせた長さをバイト単位で表したものです。

データ本体は、配置すべきアドレスに続いて配置するデータを並べます。

チェックサムは、データ長部分とデータ本体の和の1の補数になっています。 そのため、受信したデータを検証する場合には、データ長からチェックサムまでの和が$FFになることを確認します。

Sレコード生成プログラム

フォーマットを確認したところで、サクッとプログラムを書いてしまいます。

sd(long s, long len){
 long i,n,nBytes=28;
 char cs,d;
 while(len>0){
  n=(len>nBytes)?(nBytes):(len);
  PrStr("S3");PrHexByte(n+5);PrHex(s);
  cs=(n+5)+(s>>24)+(s>>16)+(s>>8)+s;
  for(i=0;i<n;i++){d=*(s+i);PrHexByte(d);cs+=d;}
  PrHexByte(~cs);PrStr("\r\n");
  s+=n;len-=n;
 }
}

この関数は、以前作成したダンプ・リスト生成関数と同じ"m"ファイルに入れておきます。 使用の際には、開始アドレスと長さを指定します。

m::sd(0x400,100)
S32100000400ffffffffffffffff000000000000000000000000ffffffff46fc27007d
S3210000041c2e7c20008000243c4000000006820000000123c24000000041f940109c
S32100000438003f1410028200000001660000084ef9000200002c002e01203c20002c
S3150000045400000680000002214e7b0c05203c0000b3

現状のプログラムでは、一行に表示するバイト数を28バイトにしてあります。 お好みの長さをnBytesに設定してご使用ください。

今日の問題

ところで、「Sレコード」を出して、何に使うのでしょうか?

参考文献

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

nice!(0)  コメント(1)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 1

hamayan

> ところで、「Sレコード」を出して、何に使うのでしょうか?

業を煮やして逆アセンブルとか、クローンとか、、、クローンの必要は無いな。

by hamayan (2008-09-20 23:15) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。