9000: # 9001: /* 9002: */ 9003: 9004: /* 9005: * Memory special file 9006: * minor device 0 is physical memory 9007: * minor device 1 is kernel memory 9008: * minor device 2 is EOF/RATHOLE 9009: */ 9010: 9011: #include "../param.h" 9012: #include "../user.h" 9013: #include "../conf.h" 9014: #include "../seg.h" 9015: 9016: mmread(dev) 9017: { 9018: register c, bn, on; 9019: int a, d; 9020: 9021: if(dev.d_minor == 2) 9022: return; 9023: do { 9024: bn = lshift(u.u_offset, -6); 9025: on = u.u_offset[1] & 077; 9026: a = UISA->r[0]; 9027: d = UISD->r[0]; 9028: spl7(); 9029: UISA->r[0] = bn; 9030: UISD->r[0] = 077406; 9031: if(dev.d_minor == 1) 9032: UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177); 9033: 9034: c = fuibyte(on); 9035: UISA->r[0] = a; 9036: UISD->r[0] = d; 9037: spl0(); 9038: } while(u.u_error==0 && passc(c)>=0); 9039: } 9040: /* --------------------------- */ 9041: 9042: mmwrite(dev) 9043: { 9044: register c, bn, on; 9045: int a, d; 9046: 9047: if(dev.d_minor == 2) { 9048: c = u.u_count; 9049: u.u_count = 0; 9050: u.u_base =+ c; 9051: dpadd(u.u_offset, c); 9052: return; 9053: } 9054: for(;;) { 9055: bn = lshift(u.u_offset, -6); 9056: on = u.u_offset[1] & 077; 9057: if ((c=cpass())<0 || u.u_error!=0) 9058: break; 9059: a = UISA->r[0]; 9060: d = UISD->r[0]; 9061: spl7(); 9062: UISA->r[0] = bn; 9063: UISD->r[0] = 077406; 9064: if(dev.d_minor == 1) 9065: UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177); 9066: 9067: suibyte(on, c); 9068: UISA->r[0] = a; 9069: UISD->r[0] = d; 9070: spl0(); 9071: } 9072: } 9073: /* --------------------------- */