/***********************************************************************
Copyright © 2019 Jean Michault.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include "CCDebugger.h"
void writeHexLine(FILE * fic,uint8_t *buf, int len,int offset)
{
int i=0;
for(i=0 ; i>8)&0xff);
fprintf(fic,":%02X%04X00",len,offset);
for(int i=0 ; i= argc ) { helpo(); exit(1); }
FILE * ficout = fopen(argv[optind],"w");
if(!ficout) { fprintf(stderr," Can't open file %s.\n",argv[optind]); exit(1); }
// initialize GPIO ports
cc_init(rePin,dcPin,ddPin);
if(setMult>0) cc_setmult(setMult);
// enter debug mode
cc_enter();
// get ChipID :
uint16_t ID;
ID = cc_getChipID();
printf(" ID = %04x.\n",ID);
uint16_t offset=0;
uint8_t bank=0;
int progress=1;
// int nbread=0;
for( bank=0 ; bank<8 ; bank++)
{
printf(".");fflush(stdout);
if(! (bank&1))
{
uint8_t sum=2+4+(bank/2);
fprintf(ficout,":02000004%04X%02X\n",bank/2,(-sum)&255 );
}
offset=0;
int len=0;
uint8_t buf[17];
for ( uint16_t i=0 ; i<32 ; i++ )
{
do
{
read1k(bank,i*1024, buf1);
read1k(bank,i*1024, buf2);
// nbread++;
//if(memcmp(buf1,buf2,1024))
// {printf("x");fflush(stdout);}
} while(memcmp(buf1,buf2,1024));
for(uint16_t j=0 ; j<64 ; j++)
writeHexLine(ficout,buf1+j*16, 16,(bank&1)*32*1024+ i*1024+j*16);
printf("\r reading %dk/256k",progress++);fflush(stdout);
}
}
// fprintf(stderr,"nbread=%d\n",nbread);
fprintf(ficout,":00000001FF\n");
// exit from debug
cc_setActive(false);
// reboot
cc_reset();
fclose(ficout);
}