ありがとうございました。 一段落したらじっくり試させて頂きます。 では。 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/ >