文章分类

当前位置:首页>技术文章>GAL16V8反汇编源程序

GAL16V8反汇编源程序

GAL16V8 反汇编源程序(HotPower 原创) HotPower@126.com//GAL16V8 反汇编源程序 JED2ABEL.C#include#include#include#include#include#include#include#includeunsigned int getfusessum(unsigned char *str);unsigned int getfusessum(unsigned char *str){unsigned char ch;unsigned int fusessum=0;unsigned int i,j;for(i=0;i>=1;if(*str++==\'1\') ch|=0x80;}fusessum+=ch;}return fusessum;}unsigned char getstrhex(unsigned char *str);unsigned char getstrhex(unsigned char *str){unsigned char ch=0;unsigned int i;for(i=0;i3) {puts("Syntax: Jed2Abel Jedfilename[.JED] [Abelfilename][.PLD]");exit(1);}filename1=(unsigned char*)calloc(64,sizeof(char));filename2=(unsigned char*)calloc(64,sizeof(char));str=argv[1];ptr=(argc==3) ?

argv[2] : filename2;strcpy(filename1,str);strcpy(filename2,ptr);str=filename1;ptr=filename2;strlwr(str);strlwr(ptr);if(islower(*str)) *str^=0x20;if(islower(*str)) *ptr^=0x20;while (*str && (*str!

=\'.\')) str++;if (*str!=\'.\') strcat(filename1,p1);if ((fp1=fopen(filename1,"rb+"))==NULL) {printf("Not found Jedfile:[");printf(filename1);puts("]");free(filename1);free(filename2);exit(1);}while(!

feof(fp1) && (ch=fgetc(fp1))!=STX);if(ch!=STX){free(filename1);free(filename2);exit(1);}crc0=ch;while(!feof(fp1) && (ch=fgetc(fp1))!=ETX) crc0+=ch;crc0+=ch;if(ch==ETX){address=ftell(fp1);fscanf(fp1,"%04X",&crcs0);}if(crc0!

=crcs0){//CRC 出错 printf("MoveData_CRC Error!!!\ \ ");if(ch==ETX){printf("OverWrite(Y/N)\ ");ch=getch();printf("\ \ ");if(ch==\'Y\' || ch==\'y\'){fseek(fp1,address,SEEK_SET);fprintf(fp1,"%04X",crc0);//强行改写 CRC 错误!

}else{free(filename1);free(filename2);exit(1);}}else{printf("OverWrite(Y/N)\ ");ch=getch();printf("\ \ ");if(ch==\'Y\' || ch==\'y\'){fseek(fp1,address,SEEK_SET);fprintf(fp1,"%04X",crc0);//强行改写 CRC 错误!

}else{free(filename1);free(filename2);exit(1);}}}rewind(fp1);while(!feof(fp1)){while(!feof(fp1) && fgetc(fp1)!=\'Q\');if(!feof(fp1) && fgetc(fp1)==\'F\'){fscanf(fp1,"%04d",&fusesum);//QF2194break;}}if(feof(fp1) || fgetc(fp1)!

=\'*\' || fusesum!=2194){printf("No GAL16V8 JedFile!!!\ ");printf("OverWrite(Y/N)\ ");ch=getch();printf("\ \ ");if(ch==\'Y\' || ch==\'y\'){rewind(fp1);fusesum=2194;//强行反汇编}else{free(filename1);free(filename2);exit(1);}}str=fuses;for(i=0;i=\'0\' && ch=\'0\' && ch0 && pin1) fprintf(fp2,",");fprintf(fp2,"%1d",pin);}fprintf(fp2,";\ ");for(pin=10;pin10) fprintf(fp2,",");fprintf(fp2,"%s",pinname[pin]);}fprintf(fp2," Pin ");for(pin=11;pin11) fprintf(fp2,",");fprintf(fp2,"%2d",pin);}fprintf(fp2,";\ \ ");y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'reg,pin\';\ ");}y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(!

(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\')) y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(!(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\')){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'com\';\ ");}y=0;for(x=0,pin=18;pin>=11;x++,pin--){//fuses[2048..2055]=1 pos;//fuses[2048..2055]=0 neg;if(fuses[2048+x]==\'1\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[2048+x]==\'1\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'pos\';\ ");}y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(fuses[2048+x]==\'0\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[2048+x]==\'0\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'neg\';\ ");}y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(fuses[AC0]==\'1\' && fuses[XORN+x]==\'1\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[AC0]==\'1\' && fuses[XORN+x]==\'1\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'eqn\';\ ");}fprintf(fp2,"\ H,L,X,Z,C,P=1,0,.X.,.Z.,.C.,.P.;\ ");fprintf(fp2,"\ equations\ ");for(x=0,pin=18;pin>=11;x++,pin--){str=fuses+x*32*8;ptr=str;y=0;z=0;k=0;for(i=0;i1) fprintf(fp2,"\ #");ptr=fuses+x*32*8;ptr+=i*32;z=0;for(j=0;j>1;fprintf(fp2,"%s",pinname[*(outpin+y)-1]);z++;}ptr++;}if(k==0) fprintf(fp2,";\ ");}}}if(k>1) fprintf(fp2,";\ ");}else{fprintf(fp2,"\\"%s =Input Pin\ ",pinname[pin]);}}fprintf(fp2,"\ fuses \ ");str=fuses;ch=getstrhex(str+2056);//fuses[2056..2063] stringfprintf(fp2," [2056..2063]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2064);fprintf(fp2," [2064..2071]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2072);fprintf(fp2," [2072..2079]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2080);fprintf(fp2," [2080..2087]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2088);fprintf(fp2," [2088..2095]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2096);fprintf(fp2," [2096..2103]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2104);fprintf(fp2," [2104..2111]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2112);fprintf(fp2," [2112..2119]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}fseek(fp1,addressx,SEEK_SET);while(!

feof(fp1) && (ch=fgetc(fp1))!=\'V\');y=1;*(buffer+20)=0;while(!feof(fp1) && ch==\'V\'){fscanf(fp1,"%04d",&pccount);while(!feof(fp1) && (ch=fgetc(fp1))!=\' \');fprintf(fp2,"\ test_vectors\\"V%04d\ ",y++);fscanf(fp1,"%20c",buffer);str=buffer;fprintf(fp2,"([");z=0;for(pin=0;pin[");str=buffer;z=0;for(pin=0;pin[");str=buffer;z=0;for(pin=1;pin>=1;if(*str++==\'1\') ch|=0x80;}fusessum+=ch;}return fusessum;}unsigned char getstrhex(unsigned char *str);unsigned char getstrhex(unsigned char *str){unsigned char ch=0;unsigned int i;for(i=0;i3) {puts("Syntax: Jed2Abel Jedfilename[.JED] [Abelfilename][.PLD]");exit(1);}filename1=(unsigned char*)calloc(64,sizeof(char));filename2=(unsigned char*)calloc(64,sizeof(char));str=argv[1];ptr=(argc==3) ?

argv[2] : filename2;strcpy(filename1,str);strcpy(filename2,ptr);str=filename1;ptr=filename2;strlwr(str);strlwr(ptr);if(islower(*str)) *str^=0x20;if(islower(*str)) *ptr^=0x20;while (*str && (*str!

=\'.\')) str++;if (*str!=\'.\') strcat(filename1,p1);if ((fp1=fopen(filename1,"rb+"))==NULL) {printf("Not found Jedfile:[");printf(filename1);puts("]");free(filename1);free(filename2);exit(1);}while(!

feof(fp1) && (ch=fgetc(fp1))!=STX);if(ch!=STX){free(filename1);free(filename2);exit(1);}crc0=ch;while(!feof(fp1) && (ch=fgetc(fp1))!=ETX) crc0+=ch;crc0+=ch;if(ch==ETX){address=ftell(fp1);fscanf(fp1,"%04X",&crcs0);}if(crc0!

=crcs0){//CRC 出错 printf("MoveData_CRC Error!!!\ \ ");if(ch==ETX){printf("OverWrite(Y/N)\ ");ch=getch();printf("\ \ ");if(ch==\'Y\' || ch==\'y\'){fseek(fp1,address,SEEK_SET);fprintf(fp1,"%04X",crc0);//强行改写 CRC 错误!

}else{free(filename1);free(filename2);exit(1);}}else{printf("OverWrite(Y/N)\ ");ch=getch();printf("\ \ ");if(ch==\'Y\' || ch==\'y\'){fseek(fp1,address,SEEK_SET);fprintf(fp1,"%04X",crc0);//强行改写 CRC 错误!

}else{free(filename1);free(filename2);exit(1);}}}rewind(fp1);while(!feof(fp1)){while(!feof(fp1) && fgetc(fp1)!=\'Q\');if(!feof(fp1) && fgetc(fp1)==\'F\'){fscanf(fp1,"%04d",&fusesum);//QF2194break;}}if(feof(fp1) || fgetc(fp1)!

=\'*\' || fusesum!=2194){printf("No GAL16V8 JedFile!!!\ ");printf("OverWrite(Y/N)\ ");ch=getch();printf("\ \ ");if(ch==\'Y\' || ch==\'y\'){rewind(fp1);fusesum=2194;//强行反汇编}else{free(filename1);free(filename2);exit(1);}}str=fuses;for(i=0;i=\'0\' && ch=\'0\' && ch0 && pin1) fprintf(fp2,",");fprintf(fp2,"%1d",pin);}fprintf(fp2,";\ ");for(pin=10;pin10) fprintf(fp2,",");fprintf(fp2,"%s",pinname[pin]);}fprintf(fp2," Pin ");for(pin=11;pin11) fprintf(fp2,",");fprintf(fp2,"%2d",pin);}fprintf(fp2,";\ \ ");y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'reg,pin\';\ ");}y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(!

(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\')) y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(!(fuses[SYN]==\'0\' && fuses[XORN+x]==\'0\')){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'com\';\ ");}y=0;for(x=0,pin=18;pin>=11;x++,pin--){//fuses[2048..2055]=1 pos;//fuses[2048..2055]=0 neg;if(fuses[2048+x]==\'1\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[2048+x]==\'1\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'pos\';\ ");}y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(fuses[2048+x]==\'0\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[2048+x]==\'0\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'neg\';\ ");}y=0;for(x=0,pin=19;pin>=12;x++,pin--){if(fuses[AC0]==\'1\' && fuses[XORN+x]==\'1\') y++;}if(y){for(x=0,pin=18;pin>=11;x++,pin--){if(fuses[AC0]==\'1\' && fuses[XORN+x]==\'1\'){fprintf(fp2,"%s",pinname[pin]);if(--y) fprintf(fp2,",");}}fprintf(fp2," istype \'eqn\';\ ");}fprintf(fp2,"\ H,L,X,Z,C,P=1,0,.X.,.Z.,.C.,.P.;\ ");fprintf(fp2,"\ equations\ ");for(x=0,pin=18;pin>=11;x++,pin--){str=fuses+x*32*8;ptr=str;y=0;z=0;k=0;for(i=0;i1) fprintf(fp2,"\ #");ptr=fuses+x*32*8;ptr+=i*32;z=0;for(j=0;j>1;fprintf(fp2,"%s",pinname[*(outpin+y)-1]);z++;}ptr++;}if(k==0) fprintf(fp2,";\ ");}}}if(k>1) fprintf(fp2,";\ ");}else{fprintf(fp2,"\\"%s =Input Pin\ ",pinname[pin]);}}fprintf(fp2,"\ fuses \ ");str=fuses;ch=getstrhex(str+2056);//fuses[2056..2063] stringfprintf(fp2," [2056..2063]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2064);fprintf(fp2," [2064..2071]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2072);fprintf(fp2," [2072..2079]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2080);fprintf(fp2," [2080..2087]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2088);fprintf(fp2," [2088..2095]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2096);fprintf(fp2," [2096..2103]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2104);fprintf(fp2," [2104..2111]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}ch=getstrhex(str+2112);fprintf(fp2," [2112..2119]=");if(ch==0) fprintf(fp2,"\'\';\ ");else{if(ch>=\' \') fprintf(fp2,"\'%c\';\ ",ch);else fprintf(fp2,"^h%02X;\ ",ch);}fseek(fp1,addressx,SEEK_SET);while(!

feof(fp1) && (ch=fgetc(fp1))!=\'V\');y=1;*(buffer+20)=0;while(!feof(fp1) && ch==\'V\'){fscanf(fp1,"%04d",&pccount);while(!feof(fp1) && (ch=fgetc(fp1))!=\' \');fprintf(fp2,"\ test_vectors\\"V%04d\ ",y++);fscanf(fp1,"%20c",buffer);str=buffer;fprintf(fp2,"([");z=0;for(pin=0;pin[");str=buffer;z=0;for(pin=0;pin[");str=buffer;z=0;for(pin=1;pin<=19;pin++){if(*str==\'H\' || *str==\'L\' || *str==\'Z\'){if(z) fprintf(fp2,",");fprintf(fp2," %c ",*str);z++;}str++;}fprintf(fp2,"];\ ");while(!

feof(fp1) && (ch=fgetc(fp1))!=\'V\');}str=filename1;while(*str&&*str!=\'.\') str++;*str=0;str=filename1;fprintf(fp2,"\ end _%s\ ",str);free(filename1);free(filename2);fclose(fp1);fclose(fp2);puts("\ \ \ \ Jed2Abel Convert complete!");return;}


© 星光电子技术工作室 2021 All Rights Reserved.
如有任何问题、建议、业务、合作,请联系手机/微信:13713820066