home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
500
/
471
/
rccl144
< prev
next >
Wrap
Text File
|
1987-03-02
|
2KB
|
89 lines
/*
* MAC Version 2.0 Author : Vincent Hayward
* School of Electrical Engineering
* Purdue University
* Dir : sys
* File : dr11.c
* Remarks : drives the fifo interface
* Usage : make install
*/
#include "../h/which.h"
#include "../h/fifoio.h"
/*
* Called from LSI-11 clock inter routine..
* ib is a pointer for input buffer (short)
* ob is a pointer for output buffer (short)
* first word of buffers is word count;
* this routine
* 1) Interrupts VAX.
* 2) writes ob to it (16 bit words)
* 3) reads words back from vax to "ib".
* 4) returns -1 for error
*/
dr11(ib, ob)
struct fifobuf *ib, *ob;
{
register struct drcdevice *dp;
register short wc;
register short *bp;
dp = DRC_ADDR;
/*
* Check FIFO empty
*/
if ((dp->drccsr & FIFO_EMPTY) == 0) {
return(-1);
}
/*
* write obwc words to VAX from ob.
*/
bp = ob->data;
dp->drcbuf = wc = ob->wc;
while (wc--) {
dp->drcbuf = *bp++;
}
/*
* set VAX interrupt
*/
dp->drccsr = DRC_INT;
/*
* Let VAX drain FIFO
*/
while ((dp->drccsr & FIFO_EMPTY) == 0)
;
/*
* Provide timing before retesting
*/
for (wc = 100; wc--; )
;
/*
* Wait for VAX start filling FIFO
*/
while (dp->drccsr & FIFO_EMPTY)
;
/*
* read words from the VAX
*/
bp = ib->data;
ib->wc = wc = dp->drcbuf;
while (wc--) {
*bp++ = dp->drcbuf;
}
/*
* Check FIFO empty
*/
if ((dp->drccsr & FIFO_EMPTY) == 0) {
return(-2);
}
return(0);
}