|
|
researchv10 Norman
/*
* DR-11C interface
* The routines in this driver are not called through the normal
* device interface. Instead, they are available for other device
* drivers to use to send arbitrary information out on a DR-11C.
*/
#include "sys/param.h"
#include "sys/ubaddr.h"
/* number of output bits available in a DR -- must be a power of 2 */
#define DRWIDTH 16
/* DRWIDTH is 2**DRSHIFT */
#define DRSHIFT 4
extern int drcnt;
extern struct ubaddr draddr[];
extern caddr_t drreg[];
struct drreg {
u_short drcsr, drout, drin;
};
/* set bit n of the dr-11 complex to v */
drsetbit (n, v)
register int n;
register int v;
{
register struct drreg *drptr;
register int i;
i = n>>DRSHIFT;
if (i < 0 || i >= drcnt)
return;
if ((drptr = (struct drreg *)drreg[i]) == NULL) {
if ((drptr = (struct drreg *)ubaddr(&draddr[i])) == NULL
|| ubbadaddr(draddr[i].ubno, &drptr->drout, sizeof(short))) {
printf("drbit dr11 %d absent\n", i);
return;
}
drreg[i] = (caddr_t)drptr;
}
i = 1 << (n & (DRWIDTH - 1));
if (v)
drptr->drout |= i;
else
drptr->drout &= ~i;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.