2025.1.6
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第193回]



●PIC16F1827(6)インテルヘキサファイルのフォーマット

前回の終わり近くのところでインテルヘキサファイルの中身を比較した画像のCONFIGのデータ部分でチェックサムの計算が違っていることに気が付きました。
前回はそのように書いただけで終りましたので、今回はそこを直した上であらためて比較を行ないました。
前回の画像はちょっと小さくて見にくいと感じましたので今回はそこも拡大して表示するようにしました。
それとともに元にしているPIC16F1827のテストプログラムも一部手直ししましたので今回のファイルと前回のファイルは僅かですが中身が異なっているところがあります。
上から4行目中ほどの値が前回はF3ですが今回はF0になっています。
そのためその行のチェックサム値も異なっています。
そのことはチェックサムの計算が違っていることとは別の件です。
前回と今回で値が一箇所異なっていることについては次回以降で説明をするつもりです。

チェックサムは各行の最後にある1バイト(16進数2桁)です。
前回は下から4行目の右側のチェックサム値が左側と異なっていました。
その部分の計算にプログラムミスがありましたのでそこを修正しました。
またその下の行も左側がCONFIGの値2バイトのみの表示であるのに右側では16バイトの表示にしているところが不適切でしたのでそこも修正しました。
私としてはそういうことで全て納得して書いているのですが。
またこういうファイル表示(インテルヘキサフォーマット)についてよくご存知の方でしたら、ああそういうことか、と納得していただけると思うのですが。
しかしよくご存知ではない読者ですと、なんだかよくわからんぞ、何を言っているのだ、ともやもやしたお気持ちになられるかも。
そこでインテルヘキサフォーマットについて簡単に整理しておくことにいたします。
インテルヘキサフォーマットはバイナリデータをASCII文字に置き換えて表現するファイル形式です。
拡張子はHEXですがその中身はTXTと同じASCII文字コードですからメモ帳などで開くことができます。
ごく普通の半角英数のみの文字コードファイルですから232C通信などで送受信することができます。
その特徴からROM WRITERなどのデータファイルとして利用されます。
PIC WRITERのデータファイルもこの形式になります。
そのルールはざっと以下の通りです。
なおここで説明するのはあくまでPIC WRITERに限ったフォーマットです。
一般的なルールとは異なっているかもしれません。

下にその一行を示します。

行の先頭には必ず1桁の文字 : (ASCIIコード3A)があります。
ここでは明示していませんが行の終わりには改行コード(0D0A)があります。
その間にある数値は1バイトを16進数2桁で示しています。
たとえばデータ数10は16進数の10を文字として示したものでファイルの中ではASCII文字コード31と30になっています。
1行のデータは最大16バイトでデータが含まれない特殊な行もあるのでデータ数は00〜10(=16)になります。
図はデータ数が16バイトの場合の例です。
アドレスはその行のデータの先頭が位置するPICのメモリアドレスを示します。
16進数4桁なので0000〜FFFFの64Kバイトのエリアを示すことができます。
アドレスの次には16進数2桁でその行の種別を示します。
通常はその後ろにデータ列が続きます。
00は通常のデータ行です。
01はファイルの終わりを示します。
ここが01の行はアドレスが0000でデータはありません。
04はメモリの上位アドレスを示します。
ここが04の行はその後ろのデータ2バイト(16進数4桁、16ビット)でメモリの上位アドレスを示します。
この行のアドレス(図で:10の次にある4桁の数)も0000です。
この行に続く通常のデータ行は同じ上位アドレスになります。
上位アドレスも16進数4桁なのでメモリアドレスは00000000〜FFFFFFFFの範囲を示すことができます。
PICの場合上位アドレスは実際のアドレスではなくてたとえばCONFIGがあるアドレスを仮想的に示したりします。
最後のチェックサムは16進数2桁です。
その計算は:と改行コードを除き先頭のデータ数〜チェックサム値までの全てを各16進数2桁の値とみなして加算したときの下位2桁が00になるようなチェックサム値を求めます。
上図の場合10+00+10+00+21+…+8C+00+13=XX00になります。
つまりチェックサム値はその前までの加算値の下位2桁を100から引いた値になります。
実際に計算をしてみます。
00は除外できますから
10+10+21+8C+01+8D+01+F0+30+99+22+22+08+8C=3ED
100−ED=13がチェックサム値です。

なお今回や前回など時々2つのファイルの中身を比較するのに使っているアプリケーションについては以前にもどこかで紹介していると思いますが初めての方のために参考までに紹介させていただきます。
超すぐれもので超便利なフリーソフトです。
WinMergeです。
過去記事をググッてみましたらこちら↓で紹介しておりました。
復活!TINY BASIC[第97回]
興味のあります方はぜひ参照なさってください。

PICBASICコンパイラ[第193回]
2025.1.6 upload

前へ
次へ
ホームページトップへ戻る