home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / sys / dev / mem.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-03  |  1.2 KB  |  71 lines

  1. #
  2. /*
  3.  */
  4.  
  5. /*
  6.  *    Memory special file
  7.  *    minor device 0 is physical memory
  8.  *    minor device 1 is kernel memory
  9.  *    minor device 2 is EOF/RATHOLE
  10.  */
  11.  
  12. #include "../h/param.h"
  13. #include "../h/dir.h"
  14. #include "../h/user.h"
  15. #include "../h/conf.h"
  16. #include "../h/seg.h"
  17.  
  18. mmread(dev)
  19. {
  20.     register c, bn, on;
  21.     int a, d;
  22.  
  23.     if(minor(dev) == 2)
  24.         return;
  25.     do {
  26.         bn = u.u_offset >> 6;
  27.         on = u.u_offset & 077;
  28.         a = UISA->r[0];
  29.         d = UISD->r[0];
  30.         spl7();
  31.         UISA->r[0] = bn;
  32.         UISD->r[0] = 077406;
  33.         if(minor(dev) == 1)
  34.             UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177);
  35.         if ((c = fuibyte((caddr_t)on)) < 0)
  36.             u.u_error = ENXIO;
  37.         UISA->r[0] = a;
  38.         UISD->r[0] = d;
  39.         spl0();
  40.     } while(u.u_error==0 && passc(c)>=0);
  41. }
  42.  
  43. mmwrite(dev)
  44. {
  45.     register c, bn, on;
  46.     int a, d;
  47.  
  48.     if(minor(dev) == 2) {
  49.         u.u_count = 0;
  50.         return;
  51.     }
  52.     for(;;) {
  53.         bn = u.u_offset >> 6;
  54.         on = u.u_offset & 077;
  55.         if ((c=cpass())<0 || u.u_error!=0)
  56.             break;
  57.         a = UISA->r[0];
  58.         d = UISD->r[0];
  59.         spl7();
  60.         UISA->r[0] = bn;
  61.         UISD->r[0] = 077406;
  62.         if(minor(dev) == 1)
  63.             UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177);
  64.         if (suibyte((caddr_t)on, c) < 0)
  65.             u.u_error = ENXIO;
  66.         UISA->r[0] = a;
  67.         UISD->r[0] = d;
  68.         spl0();
  69.     }
  70. }
  71.