/* * Simple filter to convert a binary file (stdin) to motorola * s-records on stdout. Generates s-records from address zero, * so supply an offset to the load command on the target board. */ #include main() { unsigned char ibuf[32], *ip; char obuf[100], *op; int addr = 0; unsigned char sum; int cnt; while (cnt = fread (ibuf, 1, 32, stdin)) { sum = cnt+4; sum += (unsigned char)addr; sum += (unsigned char)(addr >> 8); sum += (unsigned char)(addr >> 16); op = obuf; ip = ibuf; op += sprintf (op, "S2%02X%06X", cnt+4, addr); addr += cnt; while (cnt--) { sum += *ip; op += sprintf (op, "%02X", *ip++); } sprintf (op, "%02X", (unsigned char)~sum); puts (obuf); } }