Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PICを作ろう ,インテルHEXを読む(3) ~昼休みにまったり進めるプロジェクト~

え~、もう少しインテルHEXファイルを読む話です。Veritakには、そのためのシステムタスクがある話しは昨日書いたけど、自分で書いたものが同じ結果が出るか、とりあえず確認しました。一応OKっぽいです。

:100000000007000030280000000000000000000091
:0E0010000000000000000000000000000000E2
:04006000103E113EFF
:00000001FF

入力データ

@00000000 00 07 00 00 30 28 00 00 00 00 00 00 00 00 00 00
@00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00
@00000060 10 3E 11 3E
出力(莫迦オヤジ版)

Veritakの$convert_hex2ver()は、入力のデータを、nビット単位でまとめて読む機能があります。もともとインテルHEXはバイトオリエンテッドなフォーマットなのですが、確かにこの機能があると便利そうです。PIC16シリーズのコードメモリは14ビットなのですが、HEXファイルからの読み込みを考えて、2007/07/31の記事では8ビット単位の実装にしてあります。(つまり、2ビット無駄にしているということ)
 ということで、$convert_hex2ver()のこの機能をパクることにします。コードはますます汚くなるがしょうがないですね。

同じ入力データで、今度は16ビット単位で読んだ場合の結果は以下のとおり、

@00000000 0700 0000 2830 0000 0000 0000 0000 0000
@00000008 0000 0000 0000 0000 0000 0000 0000
@00000030 3E10 3E11

出力(莫迦オヤジ版、16ビット単位)

@0
0007 0000 3028 0000 0000 0000 0000 0000
@10
0000 0000 0000 0000 0000 0000 0000
@60
103e 113e

出力(Veritak ver3.21Aの$convert_hex2ver()、16ビット単位)

一致しません・・・orz。Veritakのバージョンを3.21Aから、3.38F(2007/8/4現在の最新版)に変えましたが、結果は同じ(2007/8/8追記:Version3.38Gで対応済み。FAQ431)
相違点は以下の2点
 1)16ビット(2バイト)データのLSB,MSBが逆
 2)アドレスが、$convert_hex2ver()の場合は、HEXファイルのアドレスと同じ。

1)は、もともとバイトオリエンテッドなデータを、多バイトで解釈しようとするところに若干ムリがあるように思うが、インテル系のCPUがLitte Endianということを考えると、莫迦オヤジ版の方が自然に思える。
2)は、アドレスはバイトオフセットではなく、ワードオフセットでないとおかしいと思うのだが?たとえば、莫迦オヤジ版の出力の3ワード目(2830)は もともとPIC16の「GOTO 30」という命令であるから、30番地に命令がないとおかしなことになる。

 ということで、そのうちVeritakの開発元に確認をしてみよう...
----
本日の御託
「Little Endian」,「Big Endian」は、複数バイトのデータを表現をする場合に、LSBから順にアドレスの小さい方から並べるか(Little Endian)、MSBから並べるか(Big Endian)を表すJargon。インテル系のMPUとモトローラ系のMPUの性格の違いの一端を表す面白い表現。もともとは、スイフトの「ガリバー旅行記」の卵を割るときに、尖った方から割ることを是とする種族(Litte Endian)と丸い方から割ることを是とする種族(Big Endian)からとった言い方だそうだ。物語では、この些細な違いにおいて二つの種族がいがみ合っていることを、揶揄する内容なのだが、コンピュータの世界でこの表現を使い始めたのはだれなのだろう?



コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/354-a953e1e9
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。