solve that.
--- a/TODO Sun Mar 12 02:25:28 2017 +0000
+++ b/TODO Sun Mar 12 03:28:24 2017 +0000
@@ -27,6 +27,5 @@
--------------------------------------------------------------------------------
1. implement EEPROM verify for pic24.
-2. implement verify for pic14.
-3. fix hex parser buffer overruns.
+2. fix hex parser buffer overruns.
666. find other things to put in this TODO list.
--- a/pic14.c Sun Mar 12 02:25:28 2017 +0000
+++ b/pic14.c Sun Mar 12 03:28:24 2017 +0000
@@ -99,12 +99,14 @@
static int
pic14_memcmp(uint16_t *s1, uint8_t *s2, uint32_t n)
{
- uint32_t i = 0;
+ uint32_t i, wordout, wordin;
- while (i < n) {
- if ((uint8_t)s1[i] != s2[i])
+ for (i = 0; i < n; i += 2) {
+ wordin = (s2[i]) | (s2[i + 1] << 8);
+ wordout = (s1[i] & 0xFF) | ((s1[i + 1] & 0xFF) << 8);
+ wordout &= 0x3FFF;
+ if (wordin != wordout)
return -1;
- ++i;
}
return 0;
@@ -128,7 +130,7 @@
program->datasize = 1; /* CHECKSUM */
programChecksum(0);
if (doCommand(PROGRAM_SIZE, 1) < 0)
- return -1;
+ return -2;
return 0;
}
@@ -141,10 +143,8 @@
static int
pic14_verify_row(uint16_t *flash, uint32_t address)
{
-#if 1
- printf("%s() UNIMPLEMENTED\n", __func__);
-#else
program_t *program = (program_t *)&easy.buffer[0]; /* COMMAND */
+ uint32_t faddress = (address << 1);
program->command = COMMAND_FLASH_READ;
program->addru = (address & 0xFF0000) >> 16;
@@ -154,11 +154,11 @@
programChecksum(0);
if (doCommand(PROGRAM_SIZE, 1 + PIC14_WORDS2BYTES(easy.writesize)) < 0)
return -1;
- if (pic14_memcmp(&flash[address], easy.buffer, easy.writesize) == 0) {
+ if (pic14_memcmp(&flash[faddress], easy.buffer, PIC14_WORDS2BYTES(easy.writesize)) == 0) {
fprintf(stdout, " VERIFY OK\n");
} else
fprintf(stderr, " VERIFY ERROR\n");
-#endif
+
return 0;
}