東京の居相(いあい)と申します。 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