add version : 1.4

This commit is contained in:
Oliver Lehmann 1988-12-09 05:34:33 +00:00
parent 60fee74595
commit 9b0ebd53ee
1 changed files with 172 additions and 0 deletions

View File

@ -0,0 +1,172 @@
/************************************************************************
* *
* pburn - eprom programmer *
* *
* pb1.devud.c : wega p8000/16-bit-teil *
* *
************************************************************************/
#define nit "not interruption, execution of read or write prom, please wait\n"
#define true 1
extern int warning, errflag, error, fd, fd1, cfd, cfd1;
extern char eprombuf[0x4000];
char zei;
int fd2, k;
unsigned lang;
/* read prom ueber "dev/ud" (16-bit/8-bit-schnittstelle p8000)
----------------------------------------------------------- */
readprom(test,tpe,adrepr,lepr,pbufepr)
int tpe;
unsigned adrepr, lepr;
char test;
char *pbufepr;
{
char *bpbufepr;
set_del();
bpbufepr=pbufepr;
header (1,tpe,adrepr,lepr);
if (errflag==true) {res_del(); return;}
read (fd2,&zei,1);
switch (zei) {
case 0: break;
case 1: error=12; printf("\n"); outerr(); close (fd2); res_del(); return;
case 2: error=13; printf("\n"); outerr(); close (fd2); res_del(); return;
}
lang=lepr;
do
{
for (k=64;(lang>0) && (k>0);lang--,k--,bpbufepr++)
read (fd2,bpbufepr,1);
zei='q';
write (fd2, &zei, 1);
}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)
------------------------------------------------------------ */
writeprom (tpe,adrepr,lepr,pbufepr)
int tpe;
unsigned adrepr, lepr;
char *pbufepr;
{
set_del();
header (2,tpe,adrepr,lepr);
if (errflag==true) {res_del(); return;}
lang=lepr;
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);
switch (zei) {
case 0: break;
case 1: error=12; printf("\n"); outerr(); break;
case 2: error=13; printf("\n"); outerr(); break;
}
close (fd2);
res_del();
}
/* output header (read/write; typ prom; begadr prom; laenge prom */
header (rw,tpe,adre,lange)
char rw;
int tpe;
unsigned adre, lange;
{
fd2=open ("/dev/ud",2);
if (fd2==-1) {error=11; printf("\n"); outerr(); return;}
zei='P';
write (fd2,&zei,1); /* P - programmer */
write (fd2,&rw,1); /* read or write */
zei=tpe & 0x00ff;
write (fd2,&zei,1); /* typ prom */
lang=adre;
adre=adre>>8;
adre=adre & 0x00ff;
zei=adre;
write (fd2,&zei,1); /* begadr prom high */
lang=lang & 0x00ff;
zei=lang;
write (fd2,&zei,1); /* low */
lang=lange;
lange=lange>>8;
lange=lange & 0x00ff;
zei=lange;
write (fd2,&zei,1); /* laenge prom high */
lang=lang & 0x00ff;
zei=lang;
write (fd2,&zei,1); /* low */
read (fd2, &zei, 1); /* acknowledge */
}
#include <signal.h>
int del = 0;
int del_pro();
set_del()
{
signal (SIGINT ,del_pro); /* int-signal del-taste einfangen */
signal (SIGHUP ,SIG_IGN); /* weitere signale ignorieren */
signal (SIGQUIT,SIG_IGN);
signal (SIGILL ,SIG_IGN);
signal (SIGTRAP,SIG_IGN);
signal (SIGIOT ,SIG_IGN);
signal (SIGSEGV,SIG_IGN);
signal (SIGSYS ,SIG_IGN);
signal (SIGPIPE,SIG_IGN);
signal (SIGALRM,SIG_IGN);
signal (SIGTERM,SIG_IGN);
}
res_del()
{
signal (SIGINT ,SIG_DFL); /* int-signal del-taste freigeben */
signal (SIGHUP ,SIG_DFL);
signal (SIGQUIT,SIG_DFL);
signal (SIGILL ,SIG_DFL);
signal (SIGTRAP,SIG_DFL);
signal (SIGIOT ,SIG_DFL);
signal (SIGSEGV,SIG_DFL);
signal (SIGSYS ,SIG_DFL);
signal (SIGPIPE,SIG_DFL);
signal (SIGALRM,SIG_DFL);
signal (SIGTERM,SIG_DFL);
if (del==1) {if (cfd==1) close (fd);
if (cfd1==1) close (fd1);
exit (0);}
}
del_pro()
{
signal (SIGINT, SIG_IGN);
del=1;
printf ("%s",nit);
}