adding spi01 example.

This commit is contained in:
dwelch67
2014-04-08 09:56:31 -04:00
parent 378efabd89
commit 90c69e37c1
7 changed files with 542 additions and 43 deletions

193
spi01/dumphex.c Normal file
View File

@@ -0,0 +1,193 @@
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//-------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//-------------------------------------------------------------------
unsigned char mem[0x10000];
#define ROMMASK 0x00FFFF
unsigned short rom[ROMMASK+1];
FILE *fpout;
unsigned char gstring[80];
unsigned char newline[1024];
//-----------------------------------------------------------------------------
int readhex ( FILE *fp )
{
//unsigned int errors;
unsigned int addhigh;
unsigned int add;
unsigned int ra;
//unsigned int rb;
//unsigned int pages;
//unsigned int page;
unsigned int line;
unsigned char checksum;
unsigned int len;
unsigned int maxadd;
unsigned char t;
addhigh=0;
memset(rom,0x55,sizeof(rom));
line=0;
while(fgets(newline,sizeof(newline)-1,fp))
{
line++;
//printf("%s",newline);
if(newline[0]!=':')
{
printf("Syntax error <%u> no colon\n",line);
continue;
}
gstring[0]=newline[1];
gstring[1]=newline[2];
gstring[2]=0;
len=strtoul(gstring,NULL,16);
checksum=0;
for(ra=0;ra<(len+5);ra++)
{
gstring[0]=newline[(ra<<1)+1];
gstring[1]=newline[(ra<<1)+2];
gstring[2]=0;
checksum+=(unsigned char)strtoul(gstring,NULL,16);
}
if(checksum)
{
printf("checksum error <%u>\n",line);
}
gstring[0]=newline[3];
gstring[1]=newline[4];
gstring[2]=newline[5];
gstring[3]=newline[6];
gstring[4]=0;
add=strtoul(gstring,NULL,16);
add|=addhigh;
if(add>0x80000)
{
printf("address too big 0x%04X\n",add);
return(1);
}
if(len&1)
{
printf("length odd\n");
return(1);
}
gstring[0]=newline[7];
gstring[1]=newline[8];
gstring[2]=0;
t=(unsigned char)strtoul(gstring,NULL,16);
//;llaaaattdddddd
//01234567890
switch(t)
{
default:
printf("UNKOWN type %02X <%u>\n",t,line);
break;
case 0x00:
len>>=1;
for(ra=0;ra<len;ra++)
{
if(add>maxadd) maxadd=add;
gstring[0]=newline[(ra<<2)+9+2];
gstring[1]=newline[(ra<<2)+9+3];
gstring[2]=newline[(ra<<2)+9+0];
gstring[3]=newline[(ra<<2)+9+1];
gstring[4]=0;
rom[add>>1]=(unsigned short)strtoul(gstring,NULL,16);
fprintf(fpout," 0x%04X, //%08X\n",rom[add>>1],add>>1);
add+=2;
}
break;
case 0x01:
printf("End of data\n");
break;
case 0x02:
gstring[0]=newline[9];
gstring[1]=newline[10];
gstring[2]=newline[11];
gstring[3]=newline[12];
gstring[4]=0;
addhigh=strtoul(gstring,NULL,16);
addhigh<<=16;
printf("addhigh %08X\n",addhigh);
break;
}
}
//printf("%u lines processed\n",line);
//printf("%08X\n",maxadd);
//if(maxadd&0x7F)
//{
//maxadd+=0x80;
//maxadd&=0xFFFFFF80;
//printf("%08X\n",maxadd);
//}
//for(ra=0;ra<maxadd;ra+=2)
//{
//printf("0x%04X: 0x%04X\n",ra,rom[ra>>1]);
//}
return(0);
}
//-------------------------------------------------------------------
int main ( int argc, char *argv[] )
{
FILE *fp;
//unsigned int ra;
if(argc<2)
{
printf("hex file not specified\n");
return(1);
}
fp=fopen(argv[1],"rt");
if(fp==NULL)
{
printf("error opening file [%s]\n",argv[1]);
return(1);
}
fpout=fopen("blinker.h","wt");
if(fpout==NULL) return(1);
fprintf(fpout,"\nconst unsigned short rom[0x80]=\n{\n");
if(readhex(fp)) return(1);
fprintf(fpout,"};\n\n");
fclose(fpout);
return(0);
}
//-------------------------------------------------------------------
//-------------------------------------------------------------------