add version : 2.3
This commit is contained in:
parent
886d9ee47b
commit
336f7c17fb
|
|
@ -2,7 +2,7 @@
|
|||
* *
|
||||
* pburn - prom programmer *
|
||||
* *
|
||||
* pb1.file.c : wega p8000 16-bit-teil *
|
||||
* pb2.file.c : wega p8000 16-bit-teil *
|
||||
* c-quelle *
|
||||
* *
|
||||
************************************************************************/
|
||||
|
|
@ -49,8 +49,8 @@
|
|||
/* identifier file
|
||||
--------------- */
|
||||
extern char namef[50], namee1[20], bre, sect;
|
||||
extern int kenns, kennfo;
|
||||
extern unsigned segnr, begadrf, begadre1, begadre2, entryf, lange1, lange2, langf, prlang;
|
||||
extern int kenns, kennfo, kennB, kennw, kennD;
|
||||
extern long segnr, begadrf, begadre1, begadre2, entryf, lange1, lange2, langf, prlang;
|
||||
extern int answer, next;
|
||||
|
||||
/* identifier error
|
||||
|
|
@ -97,18 +97,22 @@ struct st2
|
|||
struct st2 segt, bsegt;
|
||||
|
||||
int fd,fd1; /* file deskriptor */
|
||||
unsigned nbytes; /* read n bytes */
|
||||
unsigned n_read; /* tatsaechlich gelesene bytes */
|
||||
unsigned n_write; /* tatsaechlich geschriebene bytes */
|
||||
long nbytes; /* read n bytes */
|
||||
long n_read; /* tatsaechlich gelesene bytes */
|
||||
long n_write; /* tatsaechlich geschriebene bytes */
|
||||
int offset256; /* offset/256 */
|
||||
int zsegt, zhl1, zhl2;
|
||||
unsigned adr, len;
|
||||
int zsegt;
|
||||
unsigned zhl1, zhl2;
|
||||
long adr, len;
|
||||
int cfd, cfd1;
|
||||
long aoffset, hoffset, boffset, offset;
|
||||
char progbuf[0x4000];
|
||||
char progbuf[0xfffe]; /*program buffer*/
|
||||
char progffff; /*adr ffff prom e27512 program buffer*/
|
||||
char *peprombuf;
|
||||
char *pprogbuf;
|
||||
char eprombuf[0x4000];
|
||||
char eprombuf[0xfffe]; /*prom buffer*/
|
||||
char epromffff; /*adr ffff prom e27512 prom buffer*/
|
||||
|
||||
/* open filename
|
||||
------------- */
|
||||
|
||||
|
|
@ -117,51 +121,90 @@ openfile()
|
|||
fd=open (namef,rmode);
|
||||
cfd=1;
|
||||
if (fd==-1) {error=3; outerr(); return;}
|
||||
nbytes=24;
|
||||
n_read=read (fd,&s_exec,nbytes);
|
||||
if (n_read!=nbytes||n_read==0) {error=8; outerr(); return;}
|
||||
if (s_exec.s_magic!=S_MAGIC1&&s_exec.s_magic!=S_MAGIC3&&s_exec.s_magic!=S_MAGIC4&&
|
||||
s_exec.s_magic!=N_MAGIC1&&s_exec.s_magic!=N_MAGIC3&&s_exec.s_magic!=N_MAGIC4&&
|
||||
s_exec.s_magic!=X_MAGIC1&&s_exec.s_magic!=X_MAGIC3&&s_exec.s_magic!=X_MAGIC4)
|
||||
{error=5; outerr(); return;}
|
||||
nbytes=16;
|
||||
zsegt=s_exec.s_segt;
|
||||
zhl1=0;
|
||||
zhl2=0;
|
||||
boffset=24;
|
||||
|
||||
do
|
||||
{
|
||||
n_read=read (fd,&bsegt,nbytes);
|
||||
if (n_read!=nbytes||n_read==0) {error=8; outerr(); return;}
|
||||
if (zhl2==0) {if (segnr==bsegt.sg_segno) {zhl2=1;
|
||||
segt.sg_segno=bsegt.sg_segno;
|
||||
segt.sg_coff=bsegt.sg_coff;
|
||||
segt.sg_doff=bsegt.sg_doff;
|
||||
segt.sg_boff=bsegt.sg_boff;
|
||||
segt.sg_code=bsegt.sg_code;
|
||||
segt.sg_data=bsegt.sg_data;
|
||||
segt.sg_bss=bsegt.sg_bss;
|
||||
segt.sg_atr=bsegt.sg_atr;
|
||||
segt.sg_unused=bsegt.sg_unused;}}
|
||||
hoffset=16;
|
||||
boffset=boffset+hoffset;
|
||||
if (zhl2==0) {hoffset=bsegt.sg_code;
|
||||
boffset=boffset+hoffset;
|
||||
hoffset=bsegt.sg_data;
|
||||
boffset=boffset+hoffset;}
|
||||
zsegt=zsegt-16;
|
||||
}while (zsegt!=0);
|
||||
if (zhl2==0) {error=6; outerr(); return;}
|
||||
if (sect=='d') {if (s_exec.s_magic!=S_MAGIC3&&s_exec.s_magic!=N_MAGIC3)
|
||||
{error=7; outerr(); return;}
|
||||
if (kennfo==0) {begadrf=segt.sg_doff;
|
||||
begadrf=begadrf << 8;}}
|
||||
else {if (kennfo==0) {eof=segt.sg_atr & 0x0003;
|
||||
if (eof==2) begadrf=segt.sg_doff;
|
||||
else begadrf=segt.sg_coff;
|
||||
begadrf=begadrf << 8;}}
|
||||
}
|
||||
if (kennB==1)
|
||||
{ /* behandlung binary-dateien (ausfuehrbare dateien)*/
|
||||
nbytes=512L;
|
||||
boffset=0L;
|
||||
do
|
||||
{
|
||||
n_read=read (fd, progbuf, nbytes);
|
||||
if (n_read==-1) {error=8; outerr(); return;}
|
||||
if (n_read==0L) break;
|
||||
boffset=boffset+n_read;
|
||||
}while (n_read!=0L);
|
||||
if (boffset>0xffffL) {warning=13; outwar();}
|
||||
if (kennw==1) s_exec.s_magic=N_MAGIC1;
|
||||
else s_exec.s_magic=X_MAGIC1;
|
||||
s_exec.s_imsize=boffset;
|
||||
s_exec.s_bss=0;
|
||||
s_exec.s_segt=0x10;
|
||||
s_exec.s_syms=0;
|
||||
s_exec.s_entry=0;
|
||||
s_exec.s_flag=0x0001;
|
||||
s_exec.s_codesz=0;
|
||||
s_exec.s_lines=0;
|
||||
|
||||
segt.sg_segno=segnr;
|
||||
segt.sg_coff=0;
|
||||
segt.sg_doff=0;
|
||||
segt.sg_boff=0;
|
||||
segt.sg_bss=0;
|
||||
segt.sg_unused=0;
|
||||
segt.sg_code=boffset;
|
||||
segt.sg_data=0;
|
||||
segt.sg_atr=1;
|
||||
|
||||
boffset=0L;
|
||||
}
|
||||
else { /*behandlung a.out-dateien*/
|
||||
nbytes=24L;
|
||||
n_read=read (fd,&s_exec,nbytes);
|
||||
if (n_read!=nbytes||n_read==0L) {error=8; outerr(); return;}
|
||||
|
||||
if (s_exec.s_magic!=S_MAGIC1&&s_exec.s_magic!=S_MAGIC3&&s_exec.s_magic!=S_MAGIC4&&
|
||||
s_exec.s_magic!=N_MAGIC1&&s_exec.s_magic!=N_MAGIC3&&s_exec.s_magic!=N_MAGIC4&&
|
||||
s_exec.s_magic!=X_MAGIC1&&s_exec.s_magic!=X_MAGIC3&&s_exec.s_magic!=X_MAGIC4)
|
||||
{error=5; outerr(); return;}
|
||||
nbytes=16L;
|
||||
zsegt=s_exec.s_segt;
|
||||
zhl1=0;
|
||||
zhl2=0;
|
||||
boffset=24L;
|
||||
|
||||
do
|
||||
{
|
||||
n_read=read (fd,&bsegt,nbytes);
|
||||
if (n_read!=nbytes||n_read==0) {error=8; outerr(); return;}
|
||||
if (zhl2==0) {if (segnr==bsegt.sg_segno) {zhl2=1;
|
||||
segt.sg_segno=bsegt.sg_segno;
|
||||
segt.sg_coff=bsegt.sg_coff;
|
||||
segt.sg_doff=bsegt.sg_doff;
|
||||
segt.sg_boff=bsegt.sg_boff;
|
||||
segt.sg_code=bsegt.sg_code;
|
||||
segt.sg_data=bsegt.sg_data;
|
||||
segt.sg_bss=bsegt.sg_bss;
|
||||
segt.sg_atr=bsegt.sg_atr;
|
||||
segt.sg_unused=bsegt.sg_unused;}}
|
||||
hoffset=16L;
|
||||
boffset=boffset+hoffset;
|
||||
if (zhl2==0) {hoffset=bsegt.sg_code;
|
||||
boffset=boffset+hoffset;
|
||||
hoffset=bsegt.sg_data;
|
||||
boffset=boffset+hoffset;}
|
||||
zsegt=zsegt-16;
|
||||
}while (zsegt!=0);
|
||||
if (zhl2==0) {error=6; outerr(); return;}
|
||||
if (sect=='d') {if (s_exec.s_magic!=S_MAGIC3&&s_exec.s_magic!=N_MAGIC3)
|
||||
{error=7; outerr(); return;}
|
||||
if (kennfo==0) {begadrf=segt.sg_doff;
|
||||
begadrf=begadrf << 8;}}
|
||||
else {if (kennfo==0) {eof=segt.sg_atr & 0x0003;
|
||||
if (eof==2) begadrf=segt.sg_doff;
|
||||
else begadrf=segt.sg_coff;
|
||||
begadrf=begadrf << 8;}}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* read file
|
||||
|
|
@ -170,8 +213,8 @@ openfile()
|
|||
readfile ()
|
||||
{
|
||||
int bwarning, beof;
|
||||
for (zhl2=0;zhl2<0x4000;zhl2++) progbuf[zhl2]=0xff;
|
||||
for (zhl2=0;zhl2<0x4000;zhl2++) eprombuf[zhl2]=0xff;
|
||||
for (zhl2=0;zhl2<langf;zhl2++) progbuf[zhl2]=0xff;
|
||||
for (zhl2=0;zhl2<langf;zhl2++) eprombuf[zhl2]=0xff;
|
||||
bwarning=true, beof=true;
|
||||
offset=boffset;
|
||||
if (s_exec.s_magic==X_MAGIC3||s_exec.s_magic==N_MAGIC3||s_exec.s_magic==S_MAGIC3)
|
||||
|
|
@ -209,7 +252,10 @@ else /* executable and overlay */
|
|||
switch (bre)
|
||||
{
|
||||
case 's': zhl1=1; break;
|
||||
case 'h': zhl1=2; nbytes=nbytes/2; break;
|
||||
case 'h': zhl1=2;
|
||||
if ((nbytes % 2) > 0) nbytes=nbytes/2+1;
|
||||
else nbytes=nbytes/2;
|
||||
break;
|
||||
case 'l': zhl1=2; nbytes=nbytes/2; peprombuf++; break;
|
||||
}
|
||||
for (;nbytes>0;pprogbuf++,peprombuf=peprombuf+zhl1,nbytes--)
|
||||
|
|
@ -234,7 +280,10 @@ else /* executable and overlay */
|
|||
switch (bre)
|
||||
{
|
||||
case 's': zhl1=1; break;
|
||||
case 'h': zhl1=2; nbytes=nbytes/2; break;
|
||||
case 'h': zhl1=2;
|
||||
if ((nbytes % 2) > 0) nbytes=nbytes/2+1;
|
||||
else nbytes=nbytes/2;
|
||||
break;
|
||||
case 'l': zhl1=2; nbytes=nbytes/2; peprombuf++; break;
|
||||
}
|
||||
for (;nbytes>0;pprogbuf++,peprombuf=peprombuf+zhl1,nbytes--)
|
||||
|
|
@ -253,7 +302,10 @@ else /* executable and overlay */
|
|||
switch (bre)
|
||||
{
|
||||
case 's': zhl1=1; break;
|
||||
case 'h': zhl1=2; nbytes=nbytes/2; break;
|
||||
case 'h': zhl1=2;
|
||||
if ((nbytes % 2) > 0) nbytes=nbytes/2+1;
|
||||
else nbytes=nbytes/2;
|
||||
break;
|
||||
case 'l': zhl1=2; nbytes=nbytes/2; peprombuf++; break;
|
||||
}
|
||||
for (;nbytes>0;pprogbuf++,peprombuf=peprombuf+zhl1,nbytes--)
|
||||
|
|
@ -312,7 +364,7 @@ sfile()
|
|||
|
||||
promfile()
|
||||
{
|
||||
unsigned offs;
|
||||
long offs;
|
||||
|
||||
if (next==false) {
|
||||
fd1=open (namef,wmode);
|
||||
|
|
@ -324,43 +376,48 @@ unsigned offs;
|
|||
if (next==false) {
|
||||
fd1=creat (namef,0755);
|
||||
if (fd1== -1) {error=3; outerr(); return;}
|
||||
s_exec.s_imsize=0;
|
||||
segt.sg_code=0;
|
||||
segt.sg_data=0;
|
||||
segt.sg_atr=0;
|
||||
s_exec.s_bss=0;
|
||||
s_exec.s_segt=0x10;
|
||||
s_exec.s_syms=0;
|
||||
s_exec.s_entry=entryf & 0x0000ffff;
|
||||
s_exec.s_flag=0x0001;
|
||||
s_exec.s_codesz=0;
|
||||
s_exec.s_lines=0;
|
||||
if (kennB==0)
|
||||
{ /*behandlung a.out-datei*/
|
||||
s_exec.s_imsize=0;
|
||||
segt.sg_code=0;
|
||||
segt.sg_data=0;
|
||||
segt.sg_atr=0;
|
||||
s_exec.s_bss=0;
|
||||
s_exec.s_segt=0x10;
|
||||
s_exec.s_syms=0;
|
||||
s_exec.s_entry=entryf & 0x0000ffff;
|
||||
s_exec.s_flag=0x0001;
|
||||
s_exec.s_codesz=0;
|
||||
s_exec.s_lines=0;
|
||||
|
||||
segt.sg_segno=segnr;
|
||||
segt.sg_atr=0;
|
||||
offs=begadrf;
|
||||
offs=offs >> 8;
|
||||
offset256=begadrf & 0xff00;
|
||||
if ((begadrf & 0x00ff) > 0) {offs++; offset256=offset256+0x0100;
|
||||
if (sect=='i') {warning=7; outwar();}
|
||||
else {warning=8; outwar();}}
|
||||
if (sect=='i') {segt.sg_coff=offs & 0x00ff; segt.sg_doff=0;
|
||||
segt.sg_atr=segt.sg_atr | 0x0001;
|
||||
if (bre=='s') s_exec.s_magic=X_MAGIC1;
|
||||
else {if (kenns==0) s_exec.s_magic=N_MAGIC1;
|
||||
else s_exec.s_magic=S_MAGIC1;}}
|
||||
else {segt.sg_doff=offs & 0x00ff; segt.sg_coff=0;
|
||||
segt.sg_atr=segt.sg_atr | 0x0002;
|
||||
if (bre=='s') s_exec.s_magic=X_MAGIC3;
|
||||
else {if (kenns==0) s_exec.s_magic=N_MAGIC3;
|
||||
else s_exec.s_magic=S_MAGIC3;}}
|
||||
if (begadrf>0) {if (sect=='i') segt.sg_atr=segt.sg_atr | 0x0010;
|
||||
else segt.sg_atr=segt.sg_atr | 0x0020;}
|
||||
segt.sg_boff=0;
|
||||
segt.sg_bss=0;
|
||||
segt.sg_unused=0;
|
||||
segt.sg_segno=segnr;
|
||||
segt.sg_atr=0;
|
||||
offs=begadrf;
|
||||
offs=offs >> 8;
|
||||
offset256=begadrf & 0xff00;
|
||||
if ((begadrf & 0x00ff) > 0) {offs++; offset256=offset256+0x0100;
|
||||
if (sect=='i') {warning=7; outwar();}
|
||||
else {warning=8; outwar();}}
|
||||
if (sect=='i') {segt.sg_coff=offs & 0x00ff; segt.sg_doff=0;
|
||||
segt.sg_atr=segt.sg_atr | 0x0001;
|
||||
if (bre=='s') s_exec.s_magic=X_MAGIC1;
|
||||
else {if (kenns==0) s_exec.s_magic=N_MAGIC1;
|
||||
else s_exec.s_magic=S_MAGIC1;}}
|
||||
else {segt.sg_doff=offs & 0x00ff; segt.sg_coff=0;
|
||||
segt.sg_atr=segt.sg_atr | 0x0002;
|
||||
if (bre=='s') s_exec.s_magic=X_MAGIC3;
|
||||
else {if (kenns==0) s_exec.s_magic=N_MAGIC3;
|
||||
else s_exec.s_magic=S_MAGIC3;}}
|
||||
if (begadrf>0) {if (sect=='i') segt.sg_atr=segt.sg_atr | 0x0010;
|
||||
else segt.sg_atr=segt.sg_atr | 0x0020;}
|
||||
segt.sg_boff=0;
|
||||
segt.sg_bss=0;
|
||||
segt.sg_unused=0;
|
||||
|
||||
offset=40;
|
||||
offset=40;
|
||||
}
|
||||
else /*behandlung binary-datei*/
|
||||
offset=0;
|
||||
}
|
||||
/* next prom */
|
||||
|
||||
|
|
@ -369,12 +426,12 @@ unsigned offs;
|
|||
switch (bre)
|
||||
{
|
||||
case 's': hoffset=prlang; zhl1=1;
|
||||
for (zhl2=0;zhl2<0x4000;zhl2++)
|
||||
for (zhl2=0;zhl2<langf;zhl2++)
|
||||
eprombuf[zhl2]=0xff;
|
||||
peprombuf= &eprombuf[begadre1];
|
||||
break;
|
||||
case 'l': lange2=prlang; zhl1=2;
|
||||
for (zhl2=0;zhl2<0x4000;zhl2++)
|
||||
for (zhl2=0;zhl2<langf;zhl2++)
|
||||
eprombuf[zhl2]=0xff;
|
||||
peprombuf= &eprombuf[begadre2];
|
||||
peprombuf++;
|
||||
|
|
@ -410,15 +467,17 @@ unsigned offs;
|
|||
|
||||
header_file()
|
||||
{
|
||||
lseek (fd1, 0L, 0);
|
||||
if (kennB==0)
|
||||
{ /*behandlung a.out-datei*/
|
||||
lseek (fd1, 0L, 0);
|
||||
|
||||
nbytes=24;
|
||||
n_write=write (fd1,&s_exec,nbytes);
|
||||
if (n_write != nbytes) {error=9; outerr(); return;}
|
||||
|
||||
nbytes=16;
|
||||
n_write=write (fd1,&segt,nbytes);
|
||||
if (n_write != nbytes) {error=9; outerr(); return;}
|
||||
nbytes=24;
|
||||
n_write=write (fd1,&s_exec,nbytes);
|
||||
if (n_write != nbytes) {error=9; outerr(); return;}
|
||||
|
||||
nbytes=16;
|
||||
n_write=write (fd1,&segt,nbytes);
|
||||
if (n_write != nbytes) {error=9; outerr(); return;}
|
||||
}
|
||||
close (fd1);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue