# /* */ /* * Memory special file * minor device 0 is physical memory * minor device 1 is kernel data space memory * minor device 2 is EOF/RATHOLE * minor device 3 is kernel instruction space memory */ #include "../defines.h" #include "../param.h" #include "../user.h" #include "../conf.h" #include "../seg.h" #ifdef _1170 | _1145 #define KISA 0172340 #endif mmread(dev) { register c, bn, on; int a, d; if(dev.d_minor == 2) return; do { bn = u.u_offset >> 6; on = u.u_offset & 077; /* fix000 */ a = UISA->r[0]; d = UISD->r[0]; spl7(); UISA->r[0] = bn; UISD->r[0] = 077406; if(dev.d_minor == 1) UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177); #ifdef _1170 | _1145 else if(dev.d_minor == 3) UISA->r[0] = KISA->r[(bn>>7)&07] + (bn & 0177); #endif c = fuibyte(on); if(u.u_error) /* fix025 fix037 */ u.u_error = ENXIO; /* fix025 */ UISA->r[0] = a; UISD->r[0] = d; spl0(); } while(u.u_error==0 && passc(c)>=0); } mmwrite(dev) { register c, bn, on; int a, d; if(dev.d_minor == 2) { c = u.u_count; u.u_count = 0; u.u_base =+ c; u.u_offset =+ c.unsignd; /* fix000 */ return; } for(;;) { bn = u.u_offset >> 6; on = u.u_offset & 077; /* fix000 */ if ((c=cpass())<0 || u.u_error!=0) break; a = UISA->r[0]; d = UISD->r[0]; spl7(); UISA->r[0] = bn; UISD->r[0] = 077406; if(dev.d_minor == 1) UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177); #ifdef _1170 | _1145 else if(dev.d_minor == 3) UISA->r[0] = KISA->r[(bn>>7)&07] + (bn & 0177); #endif if(suibyte(on,c) < 0) /* fix025 */ u.u_error = ENXIO; /* fix025 */ UISA->r[0] = a; UISD->r[0] = d; spl0(); } }