add version : 2.3

This commit is contained in:
Oliver Lehmann 1989-11-20 10:59:08 +00:00
parent 45c1780148
commit ffc49bb459
1 changed files with 210 additions and 86 deletions

View File

@ -2,17 +2,19 @@
* *
* pburn - eprom programmer *
* *
* pb1.cmdline.c : wega p8000/16-bit-teil *
* pb2.cmdline.c : wega p8000/16-bit-teil *
* *
****************************************************************/
#include <stdio.h>
#define of1 "filename [-w] [-D] [-os hex] : "
#define of2 "filename [-w] [-D] [-ose hex]: "
#define of1 "filename [-w] [-D] [-B] [-os hex] : "
#define of2 "filename [-w] [-D] [-B] [-ose hex]: "
#define op1 "promtype [-ol hex] : "
#define op2 "promtype : "
#define op3 "promtype [-ol hex] [-V volt] [-S] : "
#define op4 "promtype [-V volt] [-S] : "
#define des " destination "
#define sou " source "
@ -20,12 +22,18 @@
#define false 0
#define rdy "\nready to "
#define rpr "\007program:\n"
#define vpp1 "25 V)"
#define vpp2 "21 V)"
#define vpp3 "12.5 V)"
#define vpp4 "free V)"
#define rph "(High Speed Program Mode Vpp="
#define rps "(Standard Speed Program Mode Vpp="
#define rpr "\007program "
#define rli "list:\n"
#define rte "crc:\n"
#define rby "bytemode:\n"
#define rby "bytemode "
#define rfi "file:\n"
#define rco "\007copy:\n"
#define rco "\007copy "
#define eprom "promtyp "
#define fle "file :"
#define start "start"
@ -59,12 +67,16 @@
#define war7 "code top or bottom rounded to 0x"
#define war8 "data top or bottom rounded to 0x"
#define war9 "prom not erased\n"
#define war10 "is prom really 2732, not 2732a ?\n"
#define war10 "is prom really "
#define war11 "set address to 0x0000 and set length to 0x0400 for prom e2708\n"
#define war12 "end of segment address\n"
#define war13 "segment overlay\n"
#define war14 "display program error's Vcc=5 V\n"
#define war15 "program error Vcc=6 V\n"
#define war16 "program error Vcc=5 V\n"
extern int command, qflag, errflag, answer, mofy, offset256;
extern char cmdbuf[100];
extern char cmdbuf[100], board;
/* global vereinbarungen */
@ -83,10 +95,10 @@ char bbre; /* back bre */
char sect; /* i/d-files
d-data
i-code */
unsigned segnr; /* segment number */
unsigned begadrf; /* begin-adr. file */
unsigned langf; /* laenge file */
unsigned entryf; /* entry-address file */
long segnr; /* segment number */
long begadrf; /* begin-adr. file */
long langf; /* laenge file */
long entryf; /* entry-address file */
/* identifier eprom
---------------- */
@ -96,22 +108,38 @@ int tpe1, tpe2; /* type eprom
1-e2716
7-e2732
8-e2732a
9-e2764 */
unsigned begadre1, begadre2; /* begin-adr. eprom */
unsigned lange1, lange2; /* laenge eprom */
9-e2764
10-e2764a
11-e27128
12-e27128a
13-e27256
15-e27512*/
long begadre1, begadre2; /* begin-adr. eprom */
long lange1, lange2; /* laenge eprom */
char Vpp; /* programmierspannung Vpp
1-25 V
2-21 V
3-12.5 V
4-free V*/
long V;
char bufopt[100];
char *ptr;
unsigned *pint;
unsigned prlang;
unsigned bbegadrf, bbegadre1, blangf, blange1;
char e2708[] ="e2708";
char e2716[] ="e2716";
char e2732[] ="e2732";
char e2764[] ="e2764";
char e2732a[]="e2732a";
long *pint;
long prlang;
long bbegadrf, bbegadre1, blangf, blange1;
char e0[] ="e2708";
char e1[] ="e2716";
char e7[] ="e2732";
char e8[] ="e2732a";
char e9[] ="e2764";
char e10[]="e2764a";
char e11[]="e27128";
char e12[]="e27128a";
char e13[]="e27256";
char e15[]="e27512";
/* ausgabe "filename [options]:"
----------------------------- */
@ -130,25 +158,31 @@ outopte()
else printf ("%s",op1);
}
outopte1()
{
if (command=='b') printf ("%s",op4);
else printf ("%s",op3);
}
/* eingabe filename [options]: " . . . "
----------------------------------------- */
int kennfo,kennfe,kennw,kennD,kenns;
int kennfo,kennfe,kennw,kennD,kenns,kennB;
inoptf()
{
bre='s';sect='i';segnr=begadrf=entryf=0;
qflag=false;
errflag=false;
bre='s';sect='i';segnr=0;begadrf=0;
kennw=0;kennD=0;kennfo=0;kenns=0;kennfe=0;
kennw=0;kennD=0;kennfo=0;kenns=0;kennfe=0,kennB=0;
gets(bufopt);
for (ptr=bufopt;*ptr==' ';ptr++);
if (*ptr=='\0'||*ptr=='-') {error=1; outerr(); return;}
if (*ptr=='q') {qflag=true;return;}
sscanf (ptr,"%s",namef);
for (;*ptr!=' '&&*ptr!='\0';ptr++);
if (*ptr=='\0') return;
if (*ptr=='\0') {plpfil(); return;}
do
{
do {
@ -156,7 +190,7 @@ inoptf()
if (*ptr=='\0') {plpfil(); return;}
if (*ptr!='-') {error=1; outerr(); return;}
ptr++;
if (*ptr!='w'&&*ptr!='D'&&*ptr!='o'&&*ptr!='s'&&*ptr!='e') {error=1;outerr();return;}
if (*ptr!='w'&&*ptr!='D'&&*ptr!='o'&&*ptr!='s'&&*ptr!='e'&&*ptr!='B') {error=1;outerr();return;}
if (*ptr=='w') {if (kennw==0) {kennw=1;bre='l';}
else {error=2;outerr();return;}
}
@ -172,14 +206,18 @@ inoptf()
if (*ptr=='e') {if (kennfe==0) {pint= &entryf;kennfe=1;}
else {error=2;outerr();return;}
}
if (*ptr=='B') {if (kennB==0) kennB=1;
else {error=2;outerr();return;}
}
ptr++;
} while (*(ptr-1)=='w'||*(ptr-1)=='D');
} while (*(ptr-1)=='w'||*(ptr-1)=='D'||*(ptr-1)=='B');
if (*ptr!=' ') {error=1;outerr();return;}
for (;*ptr==' ';ptr++);
if (*ptr=='\0') {error=1;outerr();return;}
sscanf (ptr,"%x",pint);
sscanf (ptr,"%X",pint);
for (;*ptr!=' '&&*ptr!='\0';ptr++);
}while (*ptr==' ');
plpfil();
}
@ -190,21 +228,28 @@ plpfil()
{
if (command!='f') {if (kennfe==1) {error=1;outerr();return;}}
else if (command=='b')
{if (kennfe==1||kennfo==1||kennD==1||kenns==1||kennw==1)
{if (kennfe==1||kennfo==1||kennD==1||kenns==1||kennw==1||kennB==1)
{error=1;outerr();return;}}
if (segnr>=0x80) {error=1; outerr(); return;}
if (command=='f')
{langf=lange1;
if (bre!='s') {langf=langf+langf;
if (langf>0xffffL) {langf=0xffffL;
lange1=langf/2;}}}
}
/* eingabe epromtype [options]: " . . . "
----------------------------------------- */
int kenneo,kennel;
int kenneo,kennel,kennV;
char kennS;
inopte()
{
begadre1=lange1=0;
qflag=errflag=false;
kenneo=kennel=0;
kenneo=kennel=kennV=0;
kennS=0;
gets(bufopt);
for (ptr=bufopt;*ptr==' ';ptr++);
if (*ptr=='\0'||*ptr=='-') {error=1; outerr(); return;}
@ -212,23 +257,32 @@ inopte()
sscanf (ptr,"%s",namee1);
for (;*ptr!=' '&&*ptr!='\0';ptr++);
if (*ptr=='\0') {plpepr(); return;}
do
{
do {
for (;*ptr==' ';ptr++);
if (*ptr=='\0') {plpepr();return;}
if (*ptr!='-') {error=1; outerr(); return;}
ptr++;
if (*ptr!='o'&&*ptr!='l') {error=1; outerr(); return;}
if (*ptr!='o'&&*ptr!='l'&&*ptr!='V'&&*ptr!='S') {error=1; outerr(); return;}
if (*ptr=='o') {if (kenneo==0) {pint= &begadre1; kenneo=1;}
else {error=2; outerr(); return;}
}
if (*ptr=='l') {if (kennel==0) {pint= &lange1; kennel=1;}
else {error=2; outerr(); return;}
}
if (*ptr=='V') {if (kennV==0) {pint= &V; kennV=1;}
else {error=2; outerr(); return;}
}
if (*ptr=='S') {if (kennS==0) kennS=1;
else {error=2; outerr(); return;}
}
ptr++;
} while (*(ptr-1)=='S');
if (*ptr!=' ') {error=1; outerr(); return;}
for (;*ptr==' ';ptr++);
if (*ptr=='\0') {error=1; outerr(); return;}
sscanf (ptr,"%x",pint);
sscanf (ptr,"%X",pint);
for (;*ptr!=' '&&*ptr!='\0';ptr++);
}while (*ptr==' ');
plpepr();
@ -247,41 +301,100 @@ char *vptr;
{ j++;
ptr=namee1;
switch (j) {
case 1: for (prlang=0x400,tpe1=0,vptr=e2708,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 2: for (prlang=0x800,tpe1=1,vptr=e2716,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 3: for (prlang=0x1000,tpe1=8,vptr=e2732a,i=6;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 4: for (prlang=0x1000,tpe1=7,vptr=e2732,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 5: for (prlang=0x2000,tpe1=9,vptr=e2764,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 6: i=0; error=1; outerr(); return;
case 1: for (prlang=0x400,tpe1=0,vptr=e0,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 2: for (prlang=0x800,tpe1=1,vptr=e1,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 3: for (prlang=0x1000,tpe1=7,vptr=e7,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 4: for (prlang=0x1000,tpe1=8,vptr=e8,i=6;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 5: for (prlang=0x2000,tpe1=9,vptr=e9,i=5;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 6: for (prlang=0x2000,tpe1=10,vptr=e10,i=6;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 7: for (prlang=0x4000,tpe1=11,vptr=e11,i=6;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 8: for (prlang=0x4000,tpe1=12,vptr=e12,i=7;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 9: for (prlang=0x8000,tpe1=13,vptr=e13,i=6;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 10: for (prlang=0x10000,tpe1=15,vptr=e15,i=6;*ptr==*vptr&&i>0;ptr++,vptr++,i--); break;
case 11: i=0; error=1; outerr(); return;
}
}while (i!=0 || *ptr != '\0');
if (tpe1==7) {warning=10; outwar();
if (board=='1') {if (tpe1>9) {error=12; outerr(); return;}}
if ((tpe1==7||tpe1==9||tpe1==11) && (command=='p'||command=='c'||command=='b'))
{warning=10; outwar();
if (warning==true) {printf ("\n"); errflag=true; return;}}
if (command=='b' && tpe1==0) {error=10; outerr(); return;}
if (command=='b' && tpe1==0) {error=10;
outerr();
return;}
if (board=='1') {if (kennS==1||kennV==1) {error=1; outerr(); return;}
kennS=1;}
/* ermittlung programmierspannung Vpp*/
if (kennV==1) {
if (V==0x25L) Vpp=1;
else if (V==0x21L) Vpp=2;
else if (V==0x12L) Vpp=3;
else if (V==0x0fL) Vpp=4;
else {error=1; outerr(); return;}
}
else {
if (tpe1==0 || tpe1==1 || tpe1==7) Vpp=1;
else if (tpe1==8 || tpe1==9 || tpe1==11) Vpp=2;
else if (tpe1==10 || tpe1==12 || tpe1==13 || tpe1==15) Vpp=3;
}
if ((command=='p' && tpe1==0) && (begadre1 != 0L || prlang != 0x400L))
{warning=11;
outwar();
begadre1=0L;
lange1=0x400L;}
if (begadre1>=prlang) {error=1; outerr(); return;}
if ((begadre1+lange1)>prlang) {error=1; outerr(); return;}
if (lange1==0) lange1=prlang-begadre1;
if (command=='p' && tpe1==0 && (begadre1 != 0 || lange1 != 0x400))
{warning=11; outwar();
begadre1=0; lange1=0x400;}
langf=lange1;
if (bre!='s') langf=langf+langf;
if (begadre1+lange1>prlang) {error=1; outerr(); return;}
if (lange1==0L) lange1=prlang-begadre1;
if (command=='p')
{langf=lange1;
if (bre!='s') {langf=langf+langf;
if (langf>0xffffL) {langf=0xffffL;
lange1=langf/2;}}}
if (command=='b') {if (kenneo==1||kennel==1)
{error=1; outerr(); return;}}
bbegadrf=begadrf; bbegadre1=begadre1;
blangf=langf; blange1=lange1; bbre=bre;
}
/* ausgabe ready to program...... ; ready to copy ......
-----------------------------------------------------*/
out_rpc()
{
if (board=='2')
{
if (kennS==0) printf ("%s",rph);
else printf ("%s",rps);
if (Vpp==1) printf ("%s",vpp1);
else if (Vpp==2) printf ("%s",vpp2);
else if (Vpp==3) printf ("%s",vpp3);
else printf ("%s",vpp4);
}
printf (":\n");
}
/* ausgabe "ready: . . . " (program,test,list)
------------------------------------------- */
ready()
{
unsigned ende, endf;
long ende, endf;
do
{
if (eofseg==1 && (answer=='y' || answer=='s')) {qflag=true; return;}
if (eofseg==1 && (answer=='y' || answer =='s')) {qflag=true; return;}
if (answer=='r') {begadrf=bbegadrf; begadre1=bbegadre1;
langf=blangf; lange1=blange1; bre=bbre;
mofy=false;
@ -323,31 +436,34 @@ unsigned ende, endf;
ende=lange1+begadre1;}
}
if (command=='p')
{if (endf<begadrf) {langf=0xffff - begadrf;
{if (endf>0xffffL) {langf=0xffffL - begadrf;
if (bre != 's') lange1=langf/2;
else lange1=langf;
endf=begadrf+langf;
ende=begadre1+lange1;}
if (endf==0xffff && bre != 'l')
if (endf==0xffffL && bre!='l')
{eofseg=1;
warning=12;
outwar();}}
}
do
{
printf ("%s",rdy);
switch (command) {
case 'p': printf ("%s",rpr); break;
case 'p': printf ("%s",rpr);
out_rpc();
break;
case 'l': printf ("%s",rli); break;
case 't': printf ("%s",rte); break;}
if (command=='p') {
printf ("%s %s %s %s %x %s %x %s %x",sou,fle,namef,segment,segnr,start,begadrf,end,(endf-1));
printf ("%s %s %s %s %X %s %X %s %X",sou,fle,namef,segment,segnr,start,begadrf,end,(endf-1));
if (bre=='l') printf ("%s \n",lob);
else if (bre=='h') printf ("%s \n",hib);
else printf ("%s \n",byte);
printf ("%s %s: %s %s %x %s %x %s",des,eprom,namee1,start,begadre1,end,(ende-1),byte);}
else printf ("%s %s: %s %s %x %s %x %s",sou,eprom,namee1,start,begadre1,end,(ende-1),byte);
printf ("%s %s: %s %s %X %s %X %s",des,eprom,namee1,start,begadre1,end,(ende-1),byte);}
else printf ("%s %s: %s %s %X %s %X %s",sou,eprom,namee1,start,begadre1,end,(ende-1),byte);
if (command=='p') printf (" ?(y/r/s/m/v/l/t/q)");
else printf (" ?(y/r/s/q)");
@ -372,48 +488,50 @@ unsigned ende, endf;
}
/* ausgabe "ready to ........" (bytemode, file, copy)
-------------------------------------------------- */
ready1()
{
unsigned ende1, ende2, endf;
long ende1, ende2, endf;
if (eofseg==1) {qflag=true; return;}
langf=prlang;
if (bre != 's') langf=langf+langf;
ende1=begadre1+lange1; ende2=begadre2+lange2;
if (command=='f' && answer=='y') {if (bre == 's') begadrf=begadrf+langf;}
if (command=='f') {endf=begadrf+langf;
if (endf<begadrf) {lange1=0xffff - begadrf;
lange1=lange1+1;
eofseg=1;
warning=12; outwar();
endf=begadrf+lange1;
if (endf>0xffffL) {langf=0xffffL - begadrf;
if (bre != 's') lange1=langf/2;
else lange1=langf;
endf=begadrf+langf;
ende1=begadre1+lange1;}
if (endf==0xffffL) {eofseg=1;
warning=12;
outwar();}
}
do
{printf ("%s",rdy);
if (command=='b') {printf ("%s",rby);
out_rpc();
printf ("%s %s: %s",sou,eprom,namee1);
printf (" ?(y/q)");}
else if (command=='f') {printf ("%s",rfi);
printf ("%s %s: %s %s %x %s %x %s",sou,eprom,namee1,start,begadre1,end,(ende1-1),byte);
printf ("%s %s: %s %s %X %s %X %s",sou,eprom,namee1,start,begadre1,end,(ende1-1),byte);
switch (bre)
{
case 's': printf ("\n"); break;
case 'l': printf (" low_addess\n"); break;
case 'l': printf (" low_address\n"); break;
case 'h': printf (" high_address\n"); break;
}
printf ("%s %s %s %s %x %s %x %s %x %s %x",des,fle,namef,segment,segnr,entry,entryf,start,begadrf,end,(endf-1));
printf ("%s %s %s %s %X %s %X %s %X %s %X",des,fle,namef,segment,segnr,entry,entryf,start,begadrf,end,(endf-1));
printf (" ?(y/m/l/q)");}
else if (command=='c') {printf ("%s",rco);
printf ("%s %s: %s %s %x %s %x %s\n",sou,eprom,namee1,start,begadre1,end,(ende1-1),byte);
printf ("%s %s: %s %s %x %s %x %s",des,eprom,namee2,start,begadre2,end,(ende2-1),byte);
out_rpc();
printf ("%s %s: %s %s %X %s %X %s\n",sou,eprom,namee1,start,begadre1,end,(ende1-1),byte);
printf ("%s %s: %s %s %X %s %X %s",des,eprom,namee2,start,begadre2,end,(ende2-1),byte);
printf (" ?(y/l/m/v/r/q)");}
gets (cmdbuf);
if (cmdbuf[1]!='\0') answer='w';
@ -429,6 +547,8 @@ unsigned ende1, ende2, endf;
default : answer='w';
}
}while (answer=='w');
}
@ -474,9 +594,13 @@ int c;
case 7: printf ("%s%x\n",war7,offset256); warning=false; return;
case 8: printf ("%s%x\n",war8,offset256); warning=false; return;
case 9: printf ("%s",war9); break;
case 10: printf ("%s",war10); break;
case 10: printf ("%s%s, not %sa ?\n",war10,namee1,namee1); break;
case 11: printf ("%s",war11); warning=false; return;
case 12: printf ("%s",war12); warning=false; return;
case 13: printf ("%s",war13); warning=false; return;
case 14: printf ("%s",war14); break;
case 15: printf ("%s",war15); break;
case 16: printf ("%s",war16); break;
}
printf ("\007continue ?");
gets (cmdbuf);