東京の居相(いあい)と申します。
H8メーリングリストに参加します。
秋月のAKI−H8を買いました。鉄道模型のコントロールに
使おうと思っています。ステッピングモータを使ってターンテー
ブル(転車台:蒸気機関車の向きを変える)の位置決め制御をし
ようともくろんでいます。
MBTEST.MARをかわきりに少しずつ使い方を勉強して
います。
昔(20年以上も前ですが)、ミニコンなどのアセンブラを何
機種も手掛けたことがありますが、その頃の記憶が甦ってきます。
今はBASICやCなどコーディング作業が効率的に行えるので
楽ではありますが、アセンブラには手作りの楽しみがあるように
思えます。これは真鍮板を切ったりはんだ付けしたりして鉄道模
型を作る趣味にも相通じる所があります。
まあ趣味でやっているので、勝手なことを書きましたが宜しく
お願いします。
手みやげ代わりに、MOTファイルを解析した資料を以下に表示
します。参考にして下さい。(120行ほどです。長文失礼。)
まとめるに当たりH8メールの記述も参考にさせて頂きました。
******************************************************************************
H8/3048用 MOT 形式HEXファイルの書式について
(AKI−H8開発環境 S−recordフォーマット準拠?)
1)ファイルの概要
・このファイルはテキストファイルです。
・内部は、先頭行(ヘッダー)、中間行(機械語コード)、
最終行(スタートアドレス)の3つで構成されています。
・1行の内訳は、先頭2桁の種別コード、中間複数(偶数)桁のデータ、
最後尾2桁のチェックサムとなります。
a.先頭の2桁には、その行のレコード種別を示す英数字のコードが入ります。
b.3桁目以降には、16進表現でアドレスや機械語コードなどが入ります。
c.行末の2桁には、やはり16進表現でチェックサムが入ります。
・なお、1バイトのデータは定法通り、16進2桁で表現しています。
2)チェックサムについて
・各行毎の末尾にはチェックサムが付いています。(最後の2桁)
・MOTファイルのチェックサム計算方法は次の通りです。
a.行毎に3桁目以降のデータ部分から2桁ずつ取り出し、
そのまま16進数とみなして 0x00 から順次引いて行きます。
b.このとき常に16進2桁で計算します。
c.その計算結果(2桁の16進数)がチェックサムです。
・なお、自動作成されたMOTファイルは、当然のことですが
各行とも末尾の2桁がその行のチェックサムになっています。
・従って、MOTファイルをチェックする場合は、
末尾のチェックサムも含めて順に16進2桁の足し算(またはゼロから引き算)を
していくと、どの行も計算結果が必ずゼロになります。
ゼロにならないときは、どこかの桁の値が間違っているというわけです。
具体例:
・例えば、データ中に "A0" という文字があったらこれは、
"A0" をバイナリ形式(アスキーコード)で見た場合の 0x4130
ではなく、そのまま16進数 0xA0 と見なします。
・そこでMOTファイルの或る1行が、"S10801F03034382F46F6" のとき、
最初の2桁のコードを除き、3桁目からチェックサムの直前までの
データ部分について計算(16進2桁の引き算)して行きますと、
0x00-0x08-0x01-0xF0-0x30-0x34-0x38-0x2F-0x46 = 0xF6
となります。この "F6" がチェックサムで、既に書き込まれている
チェックサムと一致していることが分かります。
(パソコンの電卓(関数:16進8bit )で試してみて下さい)
3)フォーマット:(1行1レコード)
1−2桁目:レコード種別(英数字2桁のコードで、その行の意味合いを示す)
先頭行:"S0" .... ヘッダーレコード(ファイル名が入る)
中間行:"S1" .... アドレスを4桁で表示するデータレコード
"S2" .... アドレスを6桁で表示するデータレコード
"S3" .... アドレスを8桁で表示するデータレコード
"S5" .... 特殊レコード(データレコードではない)
最終行:"S7" .... 8桁で表示するスタートアドレスレコード
"S8" .... 6桁で表示するスタートアドレスレコード
"S9" .... 4桁で表示するスタートアドレスレコード
3−4桁目:バイトカウント(16進2桁:チェックサムを含むバイト数)
各 行: 2桁の16進表現で5桁目から行末までのバイト数が入る。
(しつこいようですが、2桁で1バイト)
5桁目から:アドレス(4、6、8桁:16進表現)
先頭行: アドレスとして使わないので8桁目まで "0000" が入る。
中間行: その行に書き込むべき機械語コードデータの
先頭アドレスが入る。
アドレス桁数は、2桁目の指定による。
"S5行": アドレスではなく、このレコード以前に現れた
データレコード("S1","S2","S3")の合計行数が入る。
(2バイト4桁の16進表現)
最終行: プログラムのスタートアドレスが入る。
アドレス桁数は、2桁目の指定による。
9または11、
13桁目以降:データ(16進表現)
先頭行: 9桁目以降に "「ファイル名」" + "MOT" という文字列が
アスキーコードで入る。("MOT" と言う文字なら "4D4F54")
ファイル名が8文字(16桁)に満たないときは、
その分スペース("20")を満たす。
ファイル名が8文字より長いときは、8文字から先を
切り捨てる。
すなわちファイル名の部分は8文字(16桁)固定である。
中間行: アドレスに続き行末のチェックサム2桁の直前まで、
機械語コードデータが16進表現で入る。
(バイトカウント)−(アドレス桁数/2)−(チェックサム桁数/2)
が実際に入る機械語コードデータのバイト数になる。
"S5行": データなし。
最終行: データなし。
末尾の2桁:チェックサム(2桁:16進表現)
各 行: 行毎に計算したチェックサム(2桁)が入る。
4)ファイル名について
AKI-H8 についてくる開発環境では、MOTファイルのファイル名は、
わざわざ名前を指定しない限り、MARファイル(ソースファイル)の
ファイル名が引き継がれることになります。(他の環境でも同じだと思いますが)
この名前が、先頭レコード(ヘッダー)に書き込まれます。
※MBTEST.MOTファイルを修正してチェックしてみましたが、
AKI−H8開発環境の FLASH.EXE では、レコード種別 "S5" がファイル中に存在
しても無視されました。また、チェックサムの値も照合されません。
(共にいい加減な値を入れても通ります。MBTEST自体も正常に動作しました。)
※同じく、FLASH.EXE での、1行の長さの上限については未確認です。
88桁のレコードを作って流して見ましたが、正常に処理されました。
(オリジナルのS−record書式では、上限はCR/LFを含め80桁です。)
1999.10 M.IAI
******************************************************************************
iaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiai
a a
i 居 相 政 充(いあい まさみつ) - Iai, Masamitsu - i
a 日産コンピュータテクノロジー㈱ a
i ニュービジネス事業部 i
a a
i E-Mail Address: mm-iai@xxxxxxxxx i
a a
iaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiai