add version : 2.3
This commit is contained in:
parent
72d08178ec
commit
45c1780148
|
|
@ -2,121 +2,258 @@
|
||||||
* *
|
* *
|
||||||
* pburn - eprom programmer *
|
* pburn - eprom programmer *
|
||||||
* *
|
* *
|
||||||
* pb1.devud.c : wega p8000/16-bit-teil *
|
* pb2.devud.c : wega p8000/16-bit-teil *
|
||||||
* *
|
* *
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
#define nit "not interruption, execution of read or write prom, please wait\n"
|
#define nit "\nnot interruption, execution of read or write prom, please wait\n"
|
||||||
#define true 1
|
#define true 1
|
||||||
|
#define false 0
|
||||||
|
|
||||||
extern int warning, errflag, error, fd, fd1, cfd, cfd1;
|
extern int warning, errflag, answer, error, fd, fd1, cfd, cfd1;
|
||||||
extern char eprombuf[0x4000];
|
extern char eprombuf[0xfffe], Vpp, kennS;
|
||||||
|
|
||||||
char zei;
|
char zei, zei1, *pbufepr1, *pbufepr2;
|
||||||
int fd2, k;
|
char erase, vefy, d, e;
|
||||||
unsigned lang;
|
int fd2, k, kffff;
|
||||||
|
long lang, adr, size;
|
||||||
|
|
||||||
|
|
||||||
/* read prom ueber "dev/ud" (16-bit/8-bit-schnittstelle p8000)
|
/* read prom ueber "dev/ud" (16-bit/8-bit-schnittstelle p8000)
|
||||||
----------------------------------------------------------- */
|
----------------------------------------------------------- */
|
||||||
|
|
||||||
readprom(test,tpe,adrepr,lepr,pbufepr)
|
readprom(tpe,adrepr,lepr,pbufepr,padrffff)
|
||||||
int tpe;
|
int tpe;
|
||||||
unsigned adrepr, lepr;
|
long adrepr, lepr;
|
||||||
char test;
|
char *pbufepr, *padrffff;
|
||||||
char *pbufepr;
|
|
||||||
{
|
|
||||||
char *bpbufepr;
|
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
pbufepr1=pbufepr;
|
||||||
|
pbufepr2=pbufepr;
|
||||||
|
adr=adrepr;
|
||||||
|
if (lepr==0x10000L) {lepr--;
|
||||||
|
kffff=1;}
|
||||||
|
else kffff=0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
set_del();
|
set_del();
|
||||||
bpbufepr=pbufepr;
|
if (lepr>0x4000L) size=0x4000L;
|
||||||
header (1,tpe,adrepr,lepr);
|
else size=lepr;
|
||||||
|
|
||||||
|
header (1,tpe,adr,size);
|
||||||
if (errflag==true) {res_del(); return;}
|
if (errflag==true) {res_del(); return;}
|
||||||
read (fd2,&zei,1);
|
read (fd2,&zei,1);
|
||||||
switch (zei) {
|
switch (zei) {
|
||||||
case 0: break;
|
|
||||||
case 1: error=12; printf("\n"); outerr(); close (fd2); res_del(); return;
|
case 1: error=12; printf("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
case 2: error=13; printf("\n"); outerr(); close (fd2); res_del(); return;
|
case 2: error=13; printf("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
}
|
}
|
||||||
lang=lepr;
|
r_devud ();
|
||||||
|
lepr=lepr-0x4000L;
|
||||||
|
adr=adr+0x4000L;
|
||||||
|
close (fd2);
|
||||||
|
res_del();
|
||||||
|
} while (lepr>0);
|
||||||
|
|
||||||
|
/*behandlung adr ffff prom e27512*/
|
||||||
|
if (kffff==1) {pbufepr1=padrffff;
|
||||||
|
pbufepr2=padrffff;
|
||||||
|
lepr=1L;
|
||||||
|
kffff=0;}
|
||||||
|
} while (lepr>0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* uebertragung dev/ud-schnittstelle max. 16-K (0x4000) bloecken
|
||||||
|
------------------------------------------------------------- */
|
||||||
|
|
||||||
|
r_devud ()
|
||||||
|
|
||||||
|
{
|
||||||
|
lang=size;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
for (k=64;(lang>0) && (k>0);lang--,k--,bpbufepr++)
|
for (k=64;(lang>0) && (k>0);lang--,k--,pbufepr1++)
|
||||||
read (fd2,bpbufepr,1);
|
read (fd2,pbufepr1,1);
|
||||||
zei='q';
|
zei='q';
|
||||||
write (fd2, &zei, 1);
|
write (fd2, &zei, 1);
|
||||||
}while (lang>0);
|
}while (lang>0);
|
||||||
|
|
||||||
if (test!= ' ') {for (warning=0;lepr>0;lepr--,pbufepr++)
|
|
||||||
{if (*pbufepr != 0xff) {warning=9;
|
|
||||||
if (test=='t') {outwar(); break;}
|
|
||||||
else break;}}}
|
|
||||||
close (fd2);
|
|
||||||
res_del();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* write prom ueber "dev/ud/ (16-bit/8-bit-schnittstelle p8000)
|
/* write prom ueber "dev/ud/ (16-bit/8-bit-schnittstelle p8000)
|
||||||
------------------------------------------------------------ */
|
------------------------------------------------------------ */
|
||||||
|
|
||||||
writeprom (tpe,adrepr,lepr,pbufepr)
|
writeprom (tpe,adrepr,lepr,pbufepr,padrffff)
|
||||||
int tpe;
|
int tpe;
|
||||||
unsigned adrepr, lepr;
|
long adrepr, lepr;
|
||||||
char *pbufepr;
|
char *pbufepr, *padrffff;
|
||||||
{
|
{
|
||||||
set_del();
|
vefy=0;
|
||||||
header (2,tpe,adrepr,lepr);
|
pbufepr2=pbufepr;
|
||||||
if (errflag==true) {res_del(); return;}
|
adr=adrepr;
|
||||||
lang=lepr;
|
if (lepr==0x10000L) {lepr--;
|
||||||
|
kffff=1;}
|
||||||
|
else kffff=0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
set_del();
|
||||||
|
if (lepr>0x4000L) size=0x4000L;
|
||||||
|
else size=lepr;
|
||||||
|
header (2,tpe,adr,size);
|
||||||
|
if (errflag==true) {res_del(); return;}
|
||||||
|
w_devud ();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
for (k=64;(lang>0) && (k>0);lang--,k--,pbufepr++)
|
|
||||||
write (fd2,pbufepr,1);
|
|
||||||
read (fd2, &zei, 1);
|
|
||||||
}while (lang>0);
|
|
||||||
|
|
||||||
read (fd2,&zei,1);
|
read (fd2,&zei,1);
|
||||||
switch (zei) {
|
switch (zei) {
|
||||||
case 0: break;
|
case 1: error=12; printf("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
case 1: error=12; printf("\n"); outerr(); break;
|
case 2: error=13; printf("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
case 2: error=13; printf("\n"); outerr(); break;
|
case 3: if (kennS==1) warning=16;
|
||||||
|
else warning=15;
|
||||||
|
outwar();
|
||||||
|
vefy=1;
|
||||||
|
if (warning==true) {zei1='n';
|
||||||
|
write (fd2,&zei1,1);
|
||||||
|
close (fd2);
|
||||||
|
res_del();
|
||||||
|
answer=' ';
|
||||||
|
warning=false;
|
||||||
|
return;}
|
||||||
|
else {zei1='y';
|
||||||
|
write (fd2,&zei1,1);
|
||||||
|
break;}
|
||||||
}
|
}
|
||||||
|
}while (zei!=0);
|
||||||
|
|
||||||
|
if (kennS==1) { /* Standard Speed Program Mode */
|
||||||
|
read (fd2,&zei,1);
|
||||||
|
switch (zei) {
|
||||||
|
case 1: error=12; printf ("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
|
case 2: error=13; printf ("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
|
}
|
||||||
|
if (vefy==0) vefy=zei;
|
||||||
|
}
|
||||||
|
lepr=lepr-0x4000L;
|
||||||
|
adr=adr+0x4000L;
|
||||||
|
close (fd2);
|
||||||
|
res_del();
|
||||||
|
} while (lepr>0);
|
||||||
|
|
||||||
|
/*behandlung adr ffff prom e27512*/
|
||||||
|
if (kffff==1) {pbufepr2=padrffff;
|
||||||
|
lepr=1;
|
||||||
|
kffff=0;}
|
||||||
|
} while (lepr>0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*uebertragung dev/ud-schnittstelle von max. 16-K (0x4000) bloecken
|
||||||
|
-----------------------------------------------------------------*/
|
||||||
|
|
||||||
|
w_devud ()
|
||||||
|
{
|
||||||
|
lang=size;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
for (k=64;(lang>0) && (k>0);lang--,k--,pbufepr2++)
|
||||||
|
write (fd2,pbufepr2,1);
|
||||||
|
read (fd2, &zei, 1);
|
||||||
|
}while (lang>0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* erase prom ueber "dev/ud" (16-bit/8-bit-schnittstelle
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
eraseprom (tpe,adrepr,lepr)
|
||||||
|
|
||||||
|
int tpe;
|
||||||
|
long adrepr, lepr;
|
||||||
|
{
|
||||||
|
set_del();
|
||||||
|
header (3,tpe,adrepr,lepr);
|
||||||
|
if (errflag==true) {res_del(); return;}
|
||||||
|
read (fd2,&erase,1);
|
||||||
|
switch (erase) {
|
||||||
|
case 1: error=12; printf ("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
|
case 2: error=13; printf ("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
|
}
|
||||||
|
if (erase!=0) {warning=9; outwar(); close (fd2); res_del(); return;}
|
||||||
|
|
||||||
close (fd2);
|
close (fd2);
|
||||||
res_del();
|
res_del();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* promcrc ueber "dev/ud" (16-bit/8-bit-schnittstelle p8000)
|
||||||
|
--------------------------------------------------------- */
|
||||||
|
|
||||||
/* output header (read/write; typ prom; begadr prom; laenge prom */
|
promcrc (tpe,adrepr,lepr)
|
||||||
|
|
||||||
|
int tpe;
|
||||||
|
long adrepr, lepr;
|
||||||
|
|
||||||
|
{
|
||||||
|
set_del();
|
||||||
|
header (4,tpe,adrepr,lepr);
|
||||||
|
if (errflag==true) {res_del(); return;}
|
||||||
|
read (fd2,&erase,1);
|
||||||
|
switch (erase) {
|
||||||
|
case 1: error=12; printf ("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
|
case 2: error=13; printf ("\n"); outerr(); close (fd2); res_del(); return;
|
||||||
|
}
|
||||||
|
read (fd2,&d,1);
|
||||||
|
read (fd2,&e,1);
|
||||||
|
close (fd2);
|
||||||
|
res_del();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* output header (read/write; typ prom; begadr prom; laenge prom
|
||||||
|
------------------------------------------------------------- */
|
||||||
|
|
||||||
header (rw,tpe,adre,lange)
|
header (rw,tpe,adre,lange)
|
||||||
|
|
||||||
char rw;
|
char rw;
|
||||||
int tpe;
|
int tpe;
|
||||||
unsigned adre, lange;
|
long adre, lange;
|
||||||
{
|
{
|
||||||
fd2=open ("/dev/ud",2);
|
fd2=open ("/dev/ud",2);
|
||||||
if (fd2==-1) {error=11; printf("\n"); outerr(); return;}
|
if (fd2==-1) {error=11; printf("\n"); outerr(); return;}
|
||||||
zei='P';
|
zei='P';
|
||||||
write (fd2,&zei,1); /* P - programmer */
|
write (fd2,&zei,1); /* P - programmer */
|
||||||
|
|
||||||
write (fd2,&rw,1); /* read or write */
|
write (fd2,&rw,1); /* read or write */
|
||||||
|
|
||||||
zei=tpe & 0x00ff;
|
zei=tpe & 0x00ff;
|
||||||
write (fd2,&zei,1); /* typ prom */
|
write (fd2,&zei,1); /* typ prom */
|
||||||
|
|
||||||
lang=adre;
|
lang=adre;
|
||||||
adre=adre>>8;
|
adre=adre>>8;
|
||||||
adre=adre & 0x00ff;
|
adre=adre & 0x00ffL;
|
||||||
zei=adre;
|
zei=adre;
|
||||||
write (fd2,&zei,1); /* begadr prom high */
|
write (fd2,&zei,1); /* begadr prom high */
|
||||||
lang=lang & 0x00ff;
|
lang=lang & 0x00ffL;
|
||||||
zei=lang;
|
zei=lang;
|
||||||
write (fd2,&zei,1); /* low */
|
write (fd2,&zei,1); /* low */
|
||||||
|
|
||||||
lang=lange;
|
lang=lange;
|
||||||
lange=lange>>8;
|
lange=lange>>8;
|
||||||
lange=lange & 0x00ff;
|
lange=lange & 0x00ffL;
|
||||||
zei=lange;
|
zei=lange;
|
||||||
write (fd2,&zei,1); /* laenge prom high */
|
write (fd2,&zei,1); /* laenge prom high */
|
||||||
lang=lang & 0x00ff;
|
lang=lang & 0x00ffL;
|
||||||
zei=lang;
|
zei=lang;
|
||||||
write (fd2,&zei,1); /* low */
|
write (fd2,&zei,1); /* low */
|
||||||
|
write (fd2,&Vpp,1); /* programmierspannung Vpp*/
|
||||||
|
write (fd2,&kennS,1); /* program mode*/
|
||||||
|
|
||||||
read (fd2, &zei, 1); /* acknowledge */
|
read (fd2, &zei, 1); /* acknowledge */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue