home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 500 / 471 / rccl144 < prev    next >
Text File  |  1987-03-02  |  2KB  |  89 lines

  1. /*
  2.  * MAC  Version 2.0           Author :  Vincent Hayward
  3.  *                                      School of Electrical Engineering
  4.  *                                      Purdue University
  5.  *      Dir     : sys
  6.  *      File    : dr11.c
  7.  *      Remarks : drives the fifo interface
  8.  *      Usage   : make install
  9.  */
  10.  
  11. #include "../h/which.h"
  12. #include "../h/fifoio.h"
  13.  
  14. /*
  15.  * Called from LSI-11 clock inter routine..
  16.  * ib is a pointer for input buffer (short)
  17.  * ob is a pointer for output buffer (short)
  18.  * first word of buffers is word count;
  19.  * this routine
  20.  * 1) Interrupts VAX.
  21.  * 2) writes ob to it (16 bit words)
  22.  * 3) reads words back from vax to "ib".
  23.  * 4) returns -1 for error
  24.  */
  25.  
  26. dr11(ib, ob)
  27. struct fifobuf *ib, *ob;
  28. {
  29.     register struct drcdevice *dp;
  30.     register short wc;
  31.     register short *bp;
  32.  
  33.     dp = DRC_ADDR;
  34.  
  35.     /*
  36.      * Check FIFO empty
  37.      */
  38.     if ((dp->drccsr & FIFO_EMPTY) == 0) {
  39.         return(-1);
  40.     }
  41.  
  42.     /*
  43.      * write obwc words to VAX from ob.
  44.      */
  45.     bp = ob->data;
  46.     dp->drcbuf = wc = ob->wc;
  47.     while (wc--) {
  48.         dp->drcbuf = *bp++;
  49.     }
  50.  
  51.     /*
  52.      * set VAX interrupt
  53.      */
  54.     dp->drccsr = DRC_INT;
  55.  
  56.     /*
  57.      * Let VAX drain FIFO
  58.      */
  59.     while ((dp->drccsr & FIFO_EMPTY) == 0)
  60.         ;
  61.  
  62.     /*
  63.      * Provide timing before retesting
  64.      */
  65.     for (wc = 100; wc--; )
  66.         ;
  67.  
  68.     /*
  69.      * Wait for VAX start filling FIFO
  70.      */
  71.     while (dp->drccsr & FIFO_EMPTY)
  72.         ;
  73.     /*
  74.      * read words from the VAX
  75.      */
  76.     bp = ib->data;
  77.     ib->wc = wc = dp->drcbuf;
  78.     while (wc--) {
  79.         *bp++ = dp->drcbuf;
  80.     }
  81.     /*
  82.      * Check FIFO empty
  83.      */
  84.     if ((dp->drccsr & FIFO_EMPTY) == 0) {
  85.         return(-2);
  86.     }
  87.     return(0);
  88. }
  89.