From e48d5a703eeaf7b235593dfd55c694a697ffa2cf Mon Sep 17 00:00:00 2001 From: Dennis Ritchie Date: Sat, 12 May 1979 17:56:42 -0500 Subject: [PATCH] Research V7 development Work on file usr/sys/dev/mem.c Synthesized-from: v7 --- usr/sys/dev/mem.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 usr/sys/dev/mem.c diff --git a/usr/sys/dev/mem.c b/usr/sys/dev/mem.c new file mode 100644 index 0000000000..68ac68278c --- /dev/null +++ b/usr/sys/dev/mem.c @@ -0,0 +1,70 @@ +# +/* + */ + +/* + * Memory special file + * minor device 0 is physical memory + * minor device 1 is kernel memory + * minor device 2 is EOF/RATHOLE + */ + +#include "../h/param.h" +#include "../h/dir.h" +#include "../h/user.h" +#include "../h/conf.h" +#include "../h/seg.h" + +mmread(dev) +{ + register c, bn, on; + int a, d; + + if(minor(dev) == 2) + return; + do { + bn = u.u_offset >> 6; + on = u.u_offset & 077; + a = UISA->r[0]; + d = UISD->r[0]; + spl7(); + UISA->r[0] = bn; + UISD->r[0] = 077406; + if(minor(dev) == 1) + UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177); + if ((c = fuibyte((caddr_t)on)) < 0) + u.u_error = ENXIO; + 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(minor(dev) == 2) { + u.u_count = 0; + return; + } + for(;;) { + bn = u.u_offset >> 6; + on = u.u_offset & 077; + 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(minor(dev) == 1) + UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177); + if (suibyte((caddr_t)on, c) < 0) + u.u_error = ENXIO; + UISA->r[0] = a; + UISD->r[0] = d; + spl0(); + } +} -- 2.20.1