細渕です。 > で、ライターの会社に問い合わせたところ、このコンパイラーはベースが日立純正の > コンパイラーで、自社(秋月さん)でチェックサムの所だけ変更しているらしい?? > ?(その他も変更しているかもしれない)のでうまく転送できないとのこと。 > 対応策としては、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/