add version : 2.3

This commit is contained in:
Oliver Lehmann 1989-11-17 08:32:12 +00:00
parent 886d9ee47b
commit 336f7c17fb
1 changed files with 165 additions and 106 deletions

View File

@ -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,18 +121,56 @@ openfile()
fd=open (namef,rmode);
cfd=1;
if (fd==-1) {error=3; outerr(); return;}
nbytes=24;
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==0) {error=8; outerr(); return;}
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=16;
nbytes=16L;
zsegt=s_exec.s_segt;
zhl1=0;
zhl2=0;
boffset=24;
boffset=24L;
do
{
@ -144,7 +186,7 @@ openfile()
segt.sg_bss=bsegt.sg_bss;
segt.sg_atr=bsegt.sg_atr;
segt.sg_unused=bsegt.sg_unused;}}
hoffset=16;
hoffset=16L;
boffset=boffset+hoffset;
if (zhl2==0) {hoffset=bsegt.sg_code;
boffset=boffset+hoffset;
@ -161,7 +203,8 @@ openfile()
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,6 +376,8 @@ unsigned offs;
if (next==false) {
fd1=creat (namef,0755);
if (fd1== -1) {error=3; outerr(); return;}
if (kennB==0)
{ /*behandlung a.out-datei*/
s_exec.s_imsize=0;
segt.sg_code=0;
segt.sg_data=0;
@ -362,6 +416,9 @@ unsigned offs;
offset=40;
}
else /*behandlung binary-datei*/
offset=0;
}
/* next prom */
nbytes=lange1;
@ -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,6 +467,8 @@ unsigned offs;
header_file()
{
if (kennB==0)
{ /*behandlung a.out-datei*/
lseek (fd1, 0L, 0);
nbytes=24;
@ -419,6 +478,6 @@ header_file()
nbytes=16;
n_write=write (fd1,&segt,nbytes);
if (n_write != nbytes) {error=9; outerr(); return;}
}
close (fd1);
}