Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
jmichault committed Mar 19, 2019
1 parent 7c1d85d commit d8ca5ff
Show file tree
Hide file tree
Showing 11 changed files with 1,428 additions and 0 deletions.
767 changes: 767 additions & 0 deletions CCDebugger.c

Large diffs are not rendered by default.

121 changes: 121 additions & 0 deletions CCDebugger.h
@@ -0,0 +1,121 @@

#ifndef CCDEBUGGER_H
#define CCDEBUGGER_H

#define CC_ERROR_NONE 0
#define CC_ERROR_NOT_ACTIVE 1
#define CC_ERROR_NOT_DEBUGGING 2
#define CC_ERROR_NOT_WIRED 3


int cc_init( int pinRST, int pinDC, int pinDD );
void cc_delay( unsigned char d );

uint8_t cc_error();

////////////////////////////
// High-Level interaction
////////////////////////////
void cc_setActive( uint8_t on );

/**
* Enter debug mode
*/
uint8_t cc_enter();

/**
* Exit from debug mode
*/
uint8_t cc_exit();

/**
* Execute a CPU instructuion
*/
uint8_t cc_exec( uint8_t oc0 );
uint8_t cc_execi( uint8_t oc0, unsigned short c0 );
uint8_t cc_exec2( uint8_t oc0, uint8_t oc1 );
uint8_t cc_exec3( uint8_t oc0, uint8_t oc1, uint8_t oc2 );

/**
* Return chip ID
*/
unsigned short cc_getChipID();

/**
* Return PC
*/
unsigned short cc_getPC();

/**
* Return debug status
*/
uint8_t cc_getStatus();

/**
* resume program exec
*/
uint8_t cc_resume();

/**
* halt program exec
*/
uint8_t cc_halt();

/**
* Step a single instruction
*/
uint8_t cc_step();

/**
* Get debug configuration
*/
uint8_t cc_getConfig();

/**
* Set debug configuration
*/
uint8_t cc_setConfig( uint8_t config );

/**
* Massive erasure on the chip
*/
uint8_t cc_chipErase();

////////////////////////////
// Low-level interaction
////////////////////////////

/**
* Write to the debugger
*/
uint8_t cc_write( uint8_t data );

/**
* Wait until we are ready to read & Switch to read mode
*/
uint8_t cc_switchRead( uint8_t maxWaitCycles );

/**
* Switch to write mode
*/
uint8_t cc_switchWrite();

/**
* Read from the debugger
*/
uint8_t cc_read();

/**
* Update the debug instruction table
*/
uint8_t cc_updateInstructionTable( uint8_t newTable[16] );

/**
* Get the instruction table version
*/
uint8_t cc_getInstructionTableVersion();



#endif

23 changes: 23 additions & 0 deletions Makefile
@@ -0,0 +1,23 @@
LDLIBS=-lwiringPi
CFLAGS=-g
LDFLAGS=-g

all: cc_chipid cc_read cc_write cc_erase

cc_erase : cc_erase.o CCDebugger.o
gcc $(LDFLAGS) -o $@ $^ $(LDLIBS)

cc_write : cc_write.o CCDebugger.o
gcc $(LDFLAGS) -o $@ $^ $(LDLIBS)

cc_read : cc_read.o CCDebugger.o
gcc $(LDFLAGS) -o $@ $^ $(LDLIBS)

cc_chipid : cc_chipid.o CCDebugger.o
gcc $(LDFLAGS) -o $@ $^ $(LDLIBS)

cc_chipid.o : cc_chipid.c CCDebugger.h
gcc $(CFLAGS) -c $*.c

CCDebugger.o : CCDebugger.c CCDebugger.h
gcc $(CFLAGS) -c $*.c
Binary file added cc_chipid
Binary file not shown.
37 changes: 37 additions & 0 deletions cc_chipid.c
@@ -0,0 +1,37 @@
/***********************************************************************
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 <https://www.gnu.org/licenses/>.
*************************************************************************/

#include <wiringPi.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdint.h>

#include "CCDebugger.h"

int main()
{
// initialize GPIO and debugger
cc_init(24,27,28);
// enter debug mode
cc_enter();
// get ChipID :
uint16_t res;
res = cc_getChipID();
printf(" ID = %04x.\n",res);
cc_setActive(false);
}
Binary file added cc_erase
Binary file not shown.
41 changes: 41 additions & 0 deletions cc_erase.c
@@ -0,0 +1,41 @@
/***********************************************************************
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 <https://www.gnu.org/licenses/>.
*************************************************************************/

#include <wiringPi.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdint.h>

#include "CCDebugger.h"

int main()
{
// initialize GPIO and debugger
cc_init(24,27,28);
// enter debug mode
cc_enter();
// get ChipID :
uint16_t res;
res = cc_getChipID();
printf(" ID = %04x.\n",res);
// erase flash
res = cc_chipErase();
printf(" erase result = %04x.\n",res);
cc_setActive(false);

}
Binary file added cc_read
Binary file not shown.
107 changes: 107 additions & 0 deletions cc_read.c
@@ -0,0 +1,107 @@
/***********************************************************************
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 <https://www.gnu.org/licenses/>.
*************************************************************************/

#include <wiringPi.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdint.h>

#include "CCDebugger.h"

void writeHexLine(FILE * fic,uint8_t *buf, int len,int offset)
{
int i=0;
for(i=0 ; i<len ; i++)
if(buf[i] != 0xff) break;
if(i==len) return;
int sum=len+(offset&0xff)+((offset>>8)&0xff);
fprintf(fic,":%02X%04X00",len,offset);
for(int i=0 ; i<len;i++)
{
fprintf(fic,"%02X",buf[i]);
sum += buf[i];
}
fprintf(fic,"%02X\n",(-sum)&0xff);
}

uint8_t buf1[1024];
uint8_t buf2[1024];

void read1k(int bank,uint16_t offset,uint8_t * buf)
{
// get FMAP
uint8_t res = cc_exec2(0xE5, 0xC7);
// select bank
res = (res & 0xF8) | (bank & 0x07);
res = cc_exec3(0x75, 0xC7, res); // MOV direct,#data
// Setup DPTR
cc_execi( 0x90, 0x8000+offset ); // MOV DPTR,#data16
for(int i=0 ; i<1024 ;i++)
{
res = cc_exec ( 0xE0 ); // MOVX A,@DPTR
buf[i] = res;
res = cc_exec ( 0xA3 ); // INC DPTR
}
}

int main(int argc,char **argv)
{
if( argc <2 ) { fprintf(stderr,"usage : %s outfile\n",argv[0]); exit(1); }
FILE * ficout = fopen(argv[1],"w");
if(!ficout) { fprintf(stderr," Can't open file %s.\n",argv[1]); exit(1); }
// initialize GPIO ports
cc_init(24,27,28);
// 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;
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);
} 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(ficout,":00000001FF\n");
// exit from debug
cc_setActive(false);
fclose(ficout);

}
Binary file added cc_write
Binary file not shown.

0 comments on commit d8ca5ff

Please sign in to comment.