国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品
電子工程網
標題:
GAL16V8反匯編源程序(原創)
[打印本頁]
作者:
hotpower
時間:
2009-4-2 23:14
標題:
GAL16V8反匯編源程序(原創)
//菜農
HotPower@126.com
2003.8.21 于雁塔菜地//GAL16V8反匯編源程序JED2ABEL.C
#include
#include
#include
#include
#include
#include
#include
#include
unsigned 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<275;i++){
ch=0;
for(j=0;j<8;j++){
ch>>=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;i<8;i++){
ch<<=1;
if(*str++=='1') ch++;
}
return ch;
}
main(int argc,char *argv[])
{
FILE *fp1,*fp2,*fp3;
unsigned int x,y,z,i,j,k;
unsigned char *filename1,*filename2,*str,*ptr,*ctr,ch,ck;
unsigned char *p1=".jed",*p2=".pld";
unsigned long pccount,address=0,addressx=0;
unsigned char STX=0x02,ETX=0x03;
unsigned int SYN=2192,AC0=2193,XORN=2120;
unsigned char *buffer="Jed2Abel Version 3.01 Copyright (c) 1993,2008 HotPower";
unsigned char fuses[2200];
unsigned char outpins[]={2,1,3,19,4,18,5,17,6,14,7,13,8,12,9,11};//P16V8S
unsigned char outpinc[]={2,1,3,18,4,17,5,16,6,15,7,14,8,13,9,11};//P16V8C
unsigned char outpinr[]={2,19,3,18,4,17,5,16,6,15,7,14,8,13,9,12};//P16V8R
unsigned char *pinname[]={
"P01 ",
"P02 ",
"P03 ",
"P04 ",
"P05 ",
"P06 ",
"P07 ",
"P08 ",
"P09 ",
"GND ",
"P11 ",
"P12 ",
"P13 ",
"P14 ",
"P15 ",
"P16 ",
"P17 ",
"P18 ",
"P19 ",
"VCC "};
unsigned char *outpin;
unsigned int crc0=0,crc1=0;
unsigned int crcs0=0,crcs1=0;
unsigned int fusesum=0;
unsigned int pin;
puts(buffer);
if (argc<2 || argc>3) {
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!!!\r\n");
if(ch==ETX){
printf("OverWrite(Y/N)\n");
ch=getch();
printf("\r\n");
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)\n");
ch=getch();
printf("\r\n");
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);//QF2194
break;
}
}
if(feof(fp1) || fgetc(fp1)!='*' || fusesum!=2194){
printf("No GAL16V8 JedFile!!!\n");
printf("OverWrite(Y/N)\n");
ch=getch();
printf("\r\n");
if(ch=='Y' || ch=='y'){
rewind(fp1);
fusesum=2194;//強行反匯編
}
else{
free(filename1);
free(filename2);
exit(1);
}
}
str=fuses;
for(i=0;i<2200;i++) *str++='0';
ck=0;
while(!feof(fp1)){
ch=fgetc(fp1);
if(ch=='L' && ck==0x0a) break;
ck=ch;
}
while(ch=='L'){
address=ftell(fp1);
pccount=0;
while(!feof(fp1) && (ch=fgetc(fp1))>='0' && ch<='9'){
pccount*=10;
pccount+=ch&0x0f;
}
str=fuses+pccount;
while(ch!='*'){
if(ch=='1' || ch=='0'){
*str++=ch;
pccount++;
}
ch=fgetc(fp1);
}
addressx=ftell(fp1);
while(!feof(fp1) && (ch=fgetc(fp1))!='L' && ch!='C' && ch!='V');
}
while(!feof(fp1) && ch=='V'){
while(!feof(fp1) && (ch=fgetc(fp1))!='*' && (ch=fgetc(fp1))!='\n');
ch=fgetc(fp1);
}
while(!feof(fp1) && ch!='C') ch=fgetc(fp1);
if(ch=='C'){
address=ftell(fp1);
fscanf(fp1,"%04X",&crcs1);
}
str=fuses;
crc1=getfusessum(str);
if(crc1!=crcs1){
printf("FusesData_CRC Error!!!\n");
if(ch=='C'){
printf("OverWrite(Y/N)\n");
ch=getch();
printf("\r\n");
if(ch=='Y' || ch=='y'){
fseek(fp1,address,SEEK_SET);
fprintf(fp1,"%04X",crc1);
}
else{
free(filename1);
free(filename2);
exit(1);
}
}
}
if (argc==2) {
str=filename1;
while (*str!='.') *ptr++=*str++;
*ptr=0;
strcat(filename2,p2);
}
else {
while (*ptr && (*ptr!='.')) ptr++;
if (*ptr==0) strcat(filename2,p2);
else {
ptr++;
printf("Jed2Abel Abelfile:[");
printf(filename2);
printf("] (Y/N)?");
ch=getch();
printf("\r\n");
if (ch=='Y' || ch=='y') {
printf("Jed2Abel Convert (Y/N)?");
ch=getch();
printf("\r\n");
if ((ch&=0x0df) !='Y') {
fclose(fp1);
free(filename1);
free(filename2);
exit(1);
}
}
else {
fclose(fp1);
free(filename1);
free(filename2);
exit(1);
}
}
}
if (_chmod(filename2,1,0x20)==0x20) {
printf("Overwrite existing Abelfile:[");
printf(filename2);
printf("] (Y/N)?");
ch=getch();
printf("\r\n");
if ((ch&0x0df)!='Y') {
fclose(fp1);
free(filename1);
free(filename2);
exit(1);
}
}
if ((fp2=fopen(filename2,"wt"))==NULL) {
printf("Not open Abelfile:[");
printf(filename2);
puts("]");
fclose(fp1);
free(filename1);
free(filename2);
exit(1);
}
for(pin=0;pin<20;pin++){
ctr=pinname[pin];
while(*ctr && *ctr!=' ') ctr++;
*ctr=0;
}
ptr=filename2;
while(*ptr&&*ptr!='.') ptr++;
ctr=ptr;
*ctr++='.';//用戶定義管腳文件默認"*.PIN"
*ctr++='P';
*ctr++='i';
*ctr++='n';
*ctr=0;
if ((fp3=fopen(filename2,"rt"))!=NULL){//用戶定義管腳文件"pldfilename.pin"
while(!feof(fp3)){
while(!feof(fp3) && (ch=fgetc(fp3))!='P');//只認大寫字母P
pin=0;
while(!feof(fp3) && (ch=fgetc(fp3))>='0' && ch<='9'){//只認數字管腳號
pin*=10;
pin+=ch&0x0f;
}
if(ch=='=' && pin>0 && pin<20){//P1=....P20=...
ctr=buffer;
while(!feof(fp3) && (ch=fgetc(fp3))!=';'){//每個管腳定義以分號;結尾
*ctr++=ch;
}
*ctr=0;
*(ctr+8)=0;
if(ch==';'){
ctr=buffer;
strcpy(pinname[pin-1],ctr);//管腳定義名稱 P2=ABC;
...P13=OUT;
...
}
}
}
fclose(fp3);
}
else{
if(fuses[SYN]=='0' && fuses[AC0]=='1'){
strcpy(pinname[0],"Clk");
strcpy(pinname[10],"OE");
}
}
*ptr=0;
ptr=filename2;
str=filename1;
while(*str&&*str!='.') str++;
*str=0;
str=filename1;
printf("Jed2Abel ");
printf(filename1);
printf(" To ");
puts(filename2);
printf("Jed2Abel ConVert start, Please Wait...\r\n\r\n");
rewind(fp2);
fprintf(fp2,"module _%s\n",str);
fprintf(fp2,"\ntitle 'Jed2Abel Version 3.01 Copyright (c) 1993,2008\n");
fprintf(fp2," Jed2Abel JedFile:[%s.Jed]\n",str);
fprintf(fp2," HotPower 1992.11.19'\n\n");
//fuses[SYN]=='0' && fuses[AC0]=='1' P16V8R
//fuses[SYN]=='1' && fuses[AC0]=='1' P16V8C
//fuses[SYN]=='1' && fuses[AC0]=='0' P16V8S
if(fuses[SYN]=='1' && fuses[AC0]=='0'){
fprintf(fp2," %s device 'P16V8S';\"Make JedFusesFile %s.Jed\n",ptr,ptr);
printf(" %s.Jed device 'P16V8S';\n",ptr);
outpin=outpins;
}
else{
if(fuses[SYN]=='1' && fuses[AC0]=='1'){
fprintf(fp2," %s device 'P16V8C';\"Make JedFusesFile %s.Jed\n",ptr,ptr);
printf("%s.Jed device 'P16V8C';\n",ptr);
outpin=outpinc;
}
else{
if(fuses[SYN]=='0' && fuses[AC0]=='1'){
fprintf(fp2," %s device 'P16V8R';\"Make JedFusesFile %s.Jed\n",ptr,ptr);
printf("%s.Jed device 'P16V8R';\n",ptr);
outpin=outpinr;
}
}
}
fprintf(fp2,"\n");
for(pin=0;pin<9;pin++){
if(pin) fprintf(fp2,",");
fprintf(fp2,"%s",pinname[pin]);
}
fprintf(fp2," Pin ");
for(pin=1;pin<10;pin++){
if(pin>1) fprintf(fp2,",");
fprintf(fp2,"%1d",pin);
}
fprintf(fp2,";\n");
for(pin=10;pin<19;pin++){
if(pin>10) fprintf(fp2,",");
fprintf(fp2,"%s",pinname[pin]);
}
fprintf(fp2," Pin ");
for(pin=11;pin<20;pin++){
if(pin>11) fprintf(fp2,",");
fprintf(fp2,"%2d",pin);
}
fprintf(fp2,";\n\n");
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';\n");
}
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';\n");
}
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';\n");
}
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';\n");
}
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';\n");
}
fprintf(fp2,"\nH,L,X,Z,C,P=1,0,.X.,.Z.,.C.,.P.;\n");
fprintf(fp2,"\nequations\n");
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;i<32*8;i++){
if(*ptr++=='0') y++;
else z++;
}
if(z){
for(i=0;i<8;i++){
ptr=str+i*32;
y=0;
z=0;
for(j=0;j<32;j++){
if(*ptr++=='0') y++;
else z++;
}
if(k==0){
if(fuses[2048+x]=='0' && !(i==0 && fuses[AC0]=='1' && fuses[XORN+x]=='1')) fprintf(fp2,"!");
else fprintf(fp2," ");
fprintf(fp2,"%s",pinname[pin]);
}
if(i==0){
if(fuses[AC0]=='1' && fuses[XORN+x]=='1'){
fprintf(fp2,".oe =");
}
else k++;
}
else k++;
if(k==1){
if(fuses[SYN]=='0' && fuses[XORN+x]=='0') fprintf(fp2," :=");
else fprintf(fp2," =");
}
if(y==0){
if(k==0){
fprintf(fp2," 1;\n");
}
}
else{
if(z==0){
if(k==0){
fprintf(fp2," 0;\n");
}
}
else{
if(k>1) fprintf(fp2,"\n #");
ptr=fuses+x*32*8;
ptr+=i*32;
z=0;
for(j=0;j<32;j++){
if(*ptr=='0'){
if(z) fprintf(fp2," &");
if(j&0x01) fprintf(fp2," !");
else fprintf(fp2," ");
y=j>>1;
fprintf(fp2,"%s",pinname[*(outpin+y)-1]);
z++;
}
ptr++;
}
if(k==0) fprintf(fp2,";\n");
}
}
}
if(k>1) fprintf(fp2,";\n");
}
else{
fprintf(fp2,"\"%s =Input Pin\n",pinname[pin]);
}
}
fprintf(fp2,"\nfuses \n");
str=fuses;
ch=getstrhex(str+2056);
//fuses[2056..2063] string
fprintf(fp2," [2056..2063]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",ch);
}
ch=getstrhex(str+2064);
fprintf(fp2," [2064..2071]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",ch);
}
ch=getstrhex(str+2072);
fprintf(fp2," [2072..2079]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",ch);
}
ch=getstrhex(str+2080);
fprintf(fp2," [2080..2087]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",ch);
}
ch=getstrhex(str+2088);
fprintf(fp2," [2088..2095]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",ch);
}
ch=getstrhex(str+2096);
fprintf(fp2," [2096..2103]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",ch);
}
ch=getstrhex(str+2104);
fprintf(fp2," [2104..2111]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",ch);
}
ch=getstrhex(str+2112);
fprintf(fp2," [2112..2119]=");
if(ch==0) fprintf(fp2,"'';\n");
else{
if(ch>=' ') fprintf(fp2,"'%c';\n",ch);
else fprintf(fp2,"^h%02X;\n",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,"\ntest_vectors\"V%04d\n",y++);
fscanf(fp1,"%20c",buffer);
str=buffer;
fprintf(fp2,"([");
z=0;
for(pin=0;pin<19;pin++){
if(*str=='0' || *str=='1' || *str=='C' || *str=='P'){
if(z) fprintf(fp2,",");
fprintf(fp2,"%s",pinname][pin]);
z++;
}
str++;
}
fprintf(fp2,"]->[");
str=buffer;
z=0;
for(pin=0;pin<19;pin++){
if(*str=='H' || *str=='L' || *str=='Z'){
if(z) fprintf(fp2,",");
fprintf(fp2,"%s",pinname][pin]);
z++;
}
str++;
}
fprintf(fp2,"])\n");
str=buffer;
fprintf(fp2," [");
z=0;
for(pin=1;pin<=19;pin++){
if(*str=='0' || *str=='1' || *str=='C' || *str=='P'){
if(z) fprintf(fp2,",");
if(*str=='0') fprintf(fp2," L ");
else{
if(*str=='1') fprintf(fp2," H ");
else fprintf(fp2," %c ",*str);
}
z++;
}
str++;
}
fprintf(fp2,"]->[");
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,"];\n");
while(!feof(fp1) && (ch=fgetc(fp1))!='V');
}
str=filename1;
while(*str&&*str!='.') str++;
*str=0;
str=filename1;
fprintf(fp2,"\nend _%s\n",str);
free(filename1);
free(filename2);
fclose(fp1);
歡迎光臨 電子工程網 (http://m.qingdxww.cn/)
Powered by Discuz! X3.4
主站蜘蛛池模板:
brazzers欧美最新版视频
|
永久免费看bbb
|
中文字幕在线观看亚洲
|
青草综合
|
日本免费看视频
|
亚洲丁香婷婷综合久久六月
|
婷婷色婷婷
|
中国成人在线视频
|
国内精品不卡一区二区三区
|
欧美一级做a爰片免费
|
中国xxxxxx片免费播放
|
亚洲午夜高清
|
色一色在线观看视频网站
|
综合色久
|
怡红院最新免费全部视频
|
国产高清国内精品福利色噜噜
|
性做久久久久免费观看
|
亚洲精品m在线观看
|
欧洲a级片
|
色哟哟在线免费观看
|
在线观看国产情趣免费视频
|
国产麻豆精品人妻无码A片
|
日本人奶水中文影片
|
三级视频网站
|
欧美一区二区不卡视频
|
综合久久久久
|
av色天堂2018在线观看
|
熟女少妇内射日韩亚洲
|
色爱天堂
|
天堂网址
|
一区二区精品在线观看
|
精品国产乱码久久久久久上海公司
|
亚洲 欧美 清纯 校园 另类
|
亚洲欧美日韩伦中文
|
天天拍天天干天天操
|
亚洲成人免费网站
|
国产午夜精品AV一区二区麻豆
|
熟女人妻久久精品AV天堂
|
青草视频在线
|
香蕉狠狠干
|
亚洲无毛片
|