ありがとうございました。
一段落したらじっくり試させて頂きます。
では。
May.19 '00 M.Sakurai
----- Original Message -----
From: Hosobuchi Noriyuki <hoso@xxxxxxxxxxxx>
To: <h8@xxxxxxx>
Sent: Friday, May 19, 2000 12:16 AM
Subject: [H8-ML(622)] Re:.Sへの変換
> 細渕です。
>
> > で、ライターの会社に問い合わせたところ、このコンパイラーはベースが日立純
正の
> > コンパイラーで、自社(秋月さん)でチェックサムの所だけ変更しているらしい
??
> > ?(その他も変更しているかもしれない)のでうまく転送できないとのこと。
> > 対応策としては、FormatConverterで一度バイナリーに落としてからだと大丈夫
と
> > 言っていたのですが・・・・・さっぱり分かりません。
> > その作業をするのにフリーソフトがあると聞いたのですが・・・。
> > ってことです。
> > 何か分かりますかね???
>
> バイナリーに落さないでチェックサムだけを計算しなおします。
> 短いプログラムので添付します。
> ------8<-------8<-------8<-----ここから-----8<-------8<-------8<------
> /* fixsum.c - c38h の S-record のサムエラーを修正する */
> /* fixsum <infile> <outfile> */
> #include <stdio.h>
> #include <stdlib.h>
>
> #define gethex(x) ((x) > '9' ? ((x) & 0x4f) - 'A' + 10 : (x) - '0')
> #define gethex2(p) (gethex(p[0]) * 16 + gethex(p[1]))
> int main(int argc, char *argv[])
> {
> FILE *in, *out;
> char line[256], *p;
> int sum, size, i;
>
> if (argc != 3){
> printf("fixsum <infile> <outfile>\n");
> exit(1);
> }
>
> if ((in = fopen(argv[1], "rt")) == NULL){
> printf("infile(%s) open error\n", argv[1]);
> exit(1);
> }
>
> if ((out = fopen(argv[2], "wt")) == NULL){
> printf("outfile(%s) open error\n", argv[2]);
> exit(1);
> }
>
> while(fgets(line, sizeof(line), in)){
> if (line[0] != 'S'){
> fputs(line, out);
> continue;
> }
> p = line + 2;
> size = gethex2(p); p += 2;
> sum = size;
> for (i = 0; i < (size - 1); i++){
> sum += gethex2(p);
> p += 2;
> }
> *p = '\0';
> sum = (~sum ) & 0xff;
> fprintf(out, "%s%02X\n", line, sum);
> }
>
> fclose(in);
> fclose(out);
>
> exit(0);
> }
> ------>8------->8------->8-----ここまで----->8------->8------->8------
>
> ---
> 細渕憲行 (hoso@xxxxxxxxxxxx)
> http://www.tt.rim.or.jp/~hoso/
>