diff --git a/WEGA/src/cmd/pburn/pb.cmdline.c b/WEGA/src/cmd/pburn/pb.cmdline.c new file mode 100644 index 0000000..3663855 --- /dev/null +++ b/WEGA/src/cmd/pburn/pb.cmdline.c @@ -0,0 +1,488 @@ +/**************************************************************** +* * +* pburn - eprom programmer * +* * +* pb1.cmdline.c : wega p8000/16-bit-teil * +* * +****************************************************************/ + + +#include + +#define of1 "filename [-w] [-D] [-os hex] : " +#define of2 "filename [-w] [-D] [-ose hex]: " +#define op1 "promtype [-ol hex] : " +#define op2 "promtype : " +#define des " destination " +#define sou " source " + +#define true 1 +#define false 0 + +#define rdy "\nready to " +#define rpr "\007program:\n" +#define rli "list:\n" +#define rte "crc:\n" +#define rby "bytemode:\n" +#define rfi "file:\n" +#define rco "\007copy:\n" +#define eprom "promtyp " +#define fle "file :" +#define start "start" +#define end "end" +#define segment "segment" +#define entry "entry" +#define byte " byte" +#define lob " low byte" +#define hib " high byte" + +#define err1 "invalid options\n" +#define err2 "multiple defined\n" +#define err3 "can't open file\n" +#define err4 "end of file\n" +#define err5 "not valid object file\n" +#define err6 "segment not found in file\n" +#define err7 "file not separate I & D\n" +#define err8 "file read error\n" +#define err9 "file write error\n" +#define err10 "bytemode prom e2708 not possible\n" +#define err11 "break 'dev/ud' (16-bit/8-bit)\n" +#define err12 "invalid prom type\n" +#define err13 "\007short-circuit prom\n" + +#define war1 "specified address range contains no code\n" +#define war2 "specified address range contains no data\n" +#define war3 "specified address range contains no code or data\n" +#define war4 "break byte-oriented files\n" +#define war5 "break word-oriented files\n" +#define war6 "file already exist\n" +#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 war11 "set address to 0x0000 and set length to 0x0400 for prom e2708\n" +#define war12 "end of segment address\n" + +extern int command, qflag, errflag, answer, mofy, offset256; +extern char cmdbuf[100]; + +/* global vereinbarungen */ + +int error; /* identifier error */ +int warning; /* identifier warnings */ +int eofseg; /* end of segment */ + +/* identifier file + --------------- */ +char namef[80]; /* file name */ +char bre; /* break wordorientierte files + s-standard (byteorientiert) + l-low byte + h-high byte */ +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 */ + +/* identifier eprom + ---------------- */ +char namee1[20], namee2[20]; /* eprom name */ +int tpe1, tpe2; /* type eprom + 0-e2708 + 1-e2716 + 7-e2732 + 8-e2732a + 9-e2764 */ +unsigned begadre1, begadre2; /* begin-adr. eprom */ +unsigned lange1, lange2; /* laenge eprom */ + + +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"; + + +/* ausgabe "filename [options]:" + ----------------------------- */ + +outoptf() +{ if (command=='p') printf ("%s",of1); + else printf ("%s",of2); +} + +/* ausgabe "epromtype [options]:" + ------------------------------ */ + +outopte() +{ + if (command=='b') printf ("%s",op2); + else printf ("%s",op1); +} + + +/* eingabe filename [options]: " . . . " + ----------------------------------------- */ + +int kennfo,kennfe,kennw,kennD,kenns; +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; + 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; + do + { + do { + for (;*ptr==' ';ptr++); + 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') {if (kennw==0) {kennw=1;bre='l';} + else {error=2;outerr();return;} + } + if (*ptr=='D') {if (kennD==0) {kennD=1;sect='d';} + else {error=2;outerr();return;} + } + if (*ptr=='o') {if (kennfo==0) {pint= &begadrf;kennfo=1;} + else {error=2;outerr();return;} + } + if (*ptr=='s') {if (kenns==0) {pint= &segnr;kenns=1;} + else {error=2;outerr();return;} + } + if (*ptr=='e') {if (kennfe==0) {pint= &entryf;kennfe=1;} + else {error=2;outerr();return;} + } + ptr++; + } while (*(ptr-1)=='w'||*(ptr-1)=='D'); + if (*ptr!=' ') {error=1;outerr();return;} + for (;*ptr==' ';ptr++); + if (*ptr=='\0') {error=1;outerr();return;} + sscanf (ptr,"%x",pint); + for (;*ptr!=' '&&*ptr!='\0';ptr++); + }while (*ptr==' '); +} + + + +/* plausibilitaetspruefung eingabe file [options] + ---------------------------------------------- */ +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) + {error=1;outerr();return;}} + if (segnr>=0x80) {error=1; outerr(); return;} +} + + + +/* eingabe epromtype [options]: " . . . " + ----------------------------------------- */ +int kenneo,kennel; +inopte() +{ + begadre1=lange1=0; + qflag=errflag=false; + kenneo=kennel=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",namee1); + for (;*ptr!=' '&&*ptr!='\0';ptr++); + if (*ptr=='\0') {plpepr(); return;} + 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') {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;} + } + ptr++; + if (*ptr!=' ') {error=1; outerr(); return;} + for (;*ptr==' ';ptr++); + if (*ptr=='\0') {error=1; outerr(); return;} + sscanf (ptr,"%x",pint); + for (;*ptr!=' '&&*ptr!='\0';ptr++); + }while (*ptr==' '); + plpepr(); +} + + +/* plausibilitaetstest eingabe epromtype [options]: ? + --------------------------------------------------------- */ + +plpepr() +{ +int i, j; +char *vptr; + j=0; + do + { 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; + } + }while (i!=0 || *ptr != '\0'); + if (tpe1==7) {warning=10; outwar(); + if (warning==true) {printf ("\n"); errflag=true; return;}} + if (command=='b' && tpe1==0) {error=10; outerr(); return;} + 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 (command=='b') {if (kenneo==1||kennel==1) + {error=1; outerr(); return;}} + bbegadrf=begadrf; bbegadre1=begadre1; + blangf=langf; blange1=lange1; bbre=bre; +} + +/* ausgabe "ready: . . . " (program,test,list) + ------------------------------------------- */ + +ready() +{ +unsigned ende, endf; + + do + { + 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; + endf=begadrf+langf; + ende=begadre1+lange1; + if (ende>prlang) + {lange1=prlang-begadre1; + if (bre=='s') endf=begadrf+lange1; + else endf=begadrf+lange1+lange1; + langf=endf-begadrf; + ende=lange1+begadre1;}} + else { + if (answer==' '||answer=='l'||answer=='m'||answer=='t') + {ende=begadre1+lange1; endf=begadrf+langf;} + else {mofy=false; + bbre=bre; + switch (bre) + { + case 's': break; + case 'l': bre='h'; break; + case 'h': bre='l'; break; + } + bbegadrf=begadrf; bbegadre1=begadre1; + blangf=langf; blange1=lange1; + if (bre!='h') {begadrf=begadrf+langf; + begadre1=begadre1+lange1; + if (begadre1>=prlang) {begadre1=0; + lange1=prlang; + if (bre=='s') langf=lange1; + else langf=lange1+lange1;}} + + endf=begadrf+langf; + ende=begadre1+lange1; + if (ende>prlang) + {lange1=prlang-begadre1; + if (bre=='s') endf=begadrf+lange1; + else endf=begadrf+lange1+lange1; + langf=endf-begadrf; + ende=lange1+begadre1;} + } + if (command=='p') + {if (endf