home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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);
- }
-