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: }