diff cp2102/intel_hex_out.c @ 53:d4d3531d342a

cp2102-read-eeprom program written, compiles
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 11 Sep 2023 18:49:07 +0000
parents
children 842cff427588
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cp2102/intel_hex_out.c	Mon Sep 11 18:49:07 2023 +0000
@@ -0,0 +1,45 @@
+/*
+ * This module implements a function for writing out the same Intel HEX
+ * format as used by cp210x-program-1.0, the Python-language tool from 2014.
+ */
+
+#include <sys/types.h>
+#include <string.h>
+#include <strings.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "cp210x_defs.h"
+
+void
+intel_hex_out(eeprom, outf)
+	u_char *eeprom;
+	FILE *outf;
+{
+	unsigned linecnt, bytecnt;
+	unsigned addr;
+	u_char *sp;
+	u_char record[21], *dp, csum;
+
+	sp = eeprom;
+	addr = EEPROM_START_ADDR;
+	for (linecnt = 0; linecnt < 64; linecnt++) {
+		dp = record;
+		*dp++ = 0x10;
+		*dp++ = addr >> 8;
+		*dp++ = addr;
+		*dp++ = 0x00;
+		for (bytecnt = 0; bytecnt < 16; bytecnt++)
+			*dp++ = *sp++;
+		csum = 0;
+		for (bytecnt = 0; bytecnt < 20; bytecnt++)
+			csum = record[bytecnt];
+		csum = 0x100 - csum;
+		record[20] = csum;
+		putc(':', outf);
+		for (bytecnt = 0; bytecnt < 21; bytecnt++)
+			fprintf(outf, "%02X", record[bytecnt]);
+		putc('\n', outf);
+		addr += 16;
+	}
+	fputs(":00000001FF\n", outf);
+}