








                      Introduction to
               Berkeley Kernel Modifications
                   Unix - Seventh Edition

              Last PDP-11 Kernel Distribution
                         July, 1981


                         Bob Kridle

  Electrical Engineering and Computer Sciences Department
            University of California at Berkeley
                Berkeley, California  94720


                     William F. Jolitz

                  U. S. Geological Survey
                Office of Earthquake Studies
               Menlo Park, California  94025


                          _A_B_S_T_R_A_C_T

          This tape contains  work  done  at  Berkeley,
     USGS,  and  several  other  sites  in the last two
     years to make the UNIX - Version 7  PDP-11  Kernel
     usable in our environments.  Appended is a list of
     most of the  modifications  made  to  the  kernel.
     Since  Berkeley does not plan to buy any more PDP-
     11s as UNIX vehicles and is  planning  to  replace
     the existing PDP-11 systems with VAXen in the next
     year, we are rapidly  losing  interest  in  PDP-11
     work.   The  system included here is by no means a
     finished product, but it  is  unlikely  that  much
     more significant progress will be made.  It is our
     purpose to make available all work done until now.
     The  most  recent  addition  to  this  system is a
     mechanism to allow overlaid kernel text permitting
     fairly  robust systems to be run on non-separate I
     and D machines such as the  PDP-11/34.   In  addi-
     tion,  more  device handlers have been added.  The
     system should boot on almost anything.



     The source for the kernel as well as bootstrap tools to
facilitate  conversion to a faster 1 Kbyte blocked file sys-
tem are included on this tape.  A small root file system  is
also  included and contains several bootable kernels and all
necessary auxiliary files to bring up a temporary kernel  on



                      October 1, 1981





                           - 2 -


a  large  variety  of hardware.  The kernels all include the
same set of device handlers, and differ only in which device
is  assigned  as the root and swap device.  The kernels con-
figure all processors as if they were 11/34s and and do  not
use  any  of  the  features  of  the larger machines such as
separate I and D, or  the  UNIBUS  map.  These  kernels  are
intended  to  be used only long enough to configure a kernel
appropriate for your  specific  hardware.   We  assume  that
potential  users already have at least a Bell Version 7 dis-
tribution tape.  The root dump image and /kernel subtree  on
the  following tar image contain only a subset of UNIX tools
sufficient to configure and  build  new  kernels.   We  also
assume that users have experience in configuring and modify-
ing the UNIX Kernel.

     There are, no doubt, many remaining bugs and documenta-
tion omissions.  Although we are running some version of the
kernel here on several systems, we are aware of many  confi-
gurations  and combinations of options which have never been
tried.  The tape  is,  unfortunately,  rather  documentation
poor.   Where  possible,  we  have kept things as similar to
Bell as we could and  the  Bell  manuals  will  be  a  help.
Unfortunately,  we have almost no time to help others bring-
ing up this system.  A newsgroup on the  Duke  news  network
USENET  called  NET.2bsd-bugs has been set up at Berkeley so
that users of this tape  can  attempt  to  coordinate  their
efforts  and  share solutions.  People working on the kernel
are strongly urged to join USENET (see the usenet  directory
elsewhere  on this tape) to share bugs (and hopefully fixes)
with other users.  If you cannot join Usenet  but  can  send
electronic  mail, you can post messages to this newsgroup by
sending mail via the Arpanet to csvax.2bsd-bugs@Berkeley  or
via  uucp  net to ucbvax!2bsd-bugs.  In order to receive the
reports, it will be necessary  to  join  Usenet.   The  only
hardware  required  to join Usenet is either an Arpanet con-
nection or a dialup.  An auto-dialer helps, but isn't essen-
tial.   It will be necessary to find another site to connect
to (we can't offer a connection at Berkeley,  sorry)  -  for
names  of  some  current  sites  in your area see the Usenet
directory.

_T_a_p_e _C_o_n_t_e_n_t_s

     The first few files on the tape follow  fairly  closely
what  is  described  in the beginning of the _S_e_t_t_i_n_g _U_p _U_n_i_x
paper in the _U_n_i_x _P_r_o_g_r_a_m_m_e_r_s _M_a_n_u_a_l.  That is, there  is  a
standalone  bootstrap  followed  by standalone versions of a
few utilities followed by a dump of a small root  file  sys-
tem.   These programs perform the same functions as those on
the Bell tape but are modified to create and  use  1K  block
file systems.  In addition, the standalone code on this tape
supports a few more peripherals, ie. rm03/5,  rl01/2,  rk05,
and rk07 disk drives and ts11 tape drives.  The remainder of
the tape contains a tar of the kernel source and source  for



                      October 1, 1981





                           - 3 -


those  utilities which had to be modified to be used with 1K
blocks. The tape looks like this:

        File    Name                    Record Size

        0       boot block              512
                (EOR)
                boot block              512
                (EOR)
                Standalone Boot         512
                (EOF)
        1       Standalone cat  1024
                (EOF)
        2       This file               1024
                (use cat to read)
                (EOF)
        3       A tape index            1024
                (use cat to read)
                (EOF)
        4       Standalone mkfs 1024
                (EOF)
        5       Standalone restor       1024
                (EOF)
        6       Standalone icheck       1024
                (EOF)
        7       Dump of small root      10K
                (About 4,000 512 byte blks)
                (EOF)
        8       Tar of Source           10K
                (About 25,000 512 byte blks)
                (The kernel support dir, /kernel,
                is small enough to fit on 1 rk05)
                (EOF)
                (EOF)

You may first want to simply pull the source from  the  tape
onto  your  current  file  system and peruse it for a while.
Use

        _m_k_d_i_r _u_c_b
        _c_h_d_i_r _u_c_b
        _d_d _i_f=/_d_e_v/_n_r_m_t_0 _o_f=/_d_e_v/_n_u_l_l _b_s=_2_0_b _f_i_l_e_s=_8
        _t_a_r _x_b_f _2_0 /_d_e_v/_r_m_t_0 (_k_e_r_n_e_l)
        (the subtree kernel is about 4800 512Kb blocks if you are space limited)


_U_s_i_n_g _t_h_e _T_a_p_e

     We suggest  the  following  procedure  for  introducing
yourself to the tape.

1.   Read this document carefully from beginning to end.





                      October 1, 1981





                           - 4 -


2.   Gather the following ingredients:

     A.   An idle PDP-11 available for at least eight hours.

     B.   A free formatted pack.

     C.   A full dump of your /usr file system or a Bell  V7
          Distribution Tape.

3.   Mount the master magtape on tape drive 0 at load point.

4.   Mount a formatted disk pack on disk drive 0.

5.   Load the beginning block of the tape into memory.   For
     machines  with  the M9312 bootstrap, this means loading
     address 173404 and pressing start on  the  cpu  console
     (see  the  appendix if you don't have a firmware boot).
     If you have a Remote Diagnostic Console (in addition to
     a  M9312),  type  <cntrl-p>  h 173404g.  If you have no
     boot ROM see boot(VIII) in the _U_n_i_x _P_r_o_g_r_a_m_m_e_r_s _M_a_n_u_a_l.

6.   The console should type:

             _x_x_B_o_o_t
             :

     where xx is the class of PDP 11 you are booting on;

     LAST MINUTE NOTE:  The standalone  boot  on  this  tape
     will  print  `40boot' no matter what type of system you
     boot on. It was discovered in the  final  moments  that
     the  standalone  boot, after discovering it was running
     on a separate I and D machine failed  to  load  a  non-
     separate  kernel  correctly. The standalone boot on the
     tape as well as /40boot on the root file system do  not
     attempt  to  discover  what  type of processor they are
     running on and assume an 11/40 style machine.

     Now the standalone bootstrap is running.  It really  is
a  miniature  operating  system,  with it's own small set of
commands.  As shown in this document,  the  machine's  prin-
touts  are shown in _i_t_a_l_i_c_s, operator responses are in bold-
face, and explanatory comments are within  (  ).   Terminate
each line you type by carriage return or line-feed.

     Should you make a mistake while typing, the character #
erases  the  last character typed up to the beginning of the
line, and the character @  erases  the  entire  line  typed.
Some  consoles  cannot print lower case letters.  Adjust the
instructions accordingly.

     There are three classes of tape  drives  known  to  the
standalone system:




                      October 1, 1981





                           - 5 -


        tm      TU10
        ht      TU16/TE16
        ts      TS11

There are also six classes of disks.  They are:

        xp      RP04/5/6        (Assumed RH70 on 11/70)
                RM02/3/5        (Assumed RH70 on 11/70)

        rk      RK05

        hk      RK07

        rp      RP02/3

        rl      RL01/2

        dv      DIVA COMP-V/300 Mbyte SMD Drives
                (33 sect./track)

Note for those booting on foreign vendor disk controllers:

The xp disk handlers in both the kernel and standalone  sys-
tem  use  the  drive type register low byte to determine the
size parameters of the attached disk drive as follows:


        Drive Type      Drive Assumed                     (Sectors/Surfaces)
        Reg Low Byte
        Addr=0776726

        022                 RP04/04/06                    22/19
        024                 RM02/RM03                     32/5
        025                 Emulex SC-21V/300 Mb          32/19
        027                 RM05                          32/19

Check this now and determine if your  controller  implements
the  correct  value.   If  it  does  not, you must place the
correct value in the switch  register  after  the  standlone
bootstrap is booted from tape and before any attempt is made
to access the drive.  This  will  override  the  drive  type
register  for the standalone xp handler.  Once the system is
read in (see Booting Unix below) you must halt the processor
immediately  after  the  `mem  = xxx' message is printed and
patch the location xp_type given below.  The value prior  to
patching  must  be zero. If not you have halted too late and
should try again.

_M_a_k_i_n_g _a _D_i_s_k _F_r_o_m _T_a_p_e

     Copy the magtape to disk by the following procedure.






                      October 1, 1981





                           - 6 -


        (bring in the program mkfs)
        :ht(0,4)                      (use `tm(0,4)' for the TU10)
                                      (use `ts(0,4)' for the TS11)
        _M_k_f_s
        _f_i_l_e _s_y_s_t_e_m _s_i_z_e: 2000        (size in 1K blocks for an rk05)
        _f_i_l_e _s_y_s_t_e_m:rk(0,0)           (or `hk(0,0)' or `rl(0,0)', etc.)

        or

        _f_i_l_e _s_y_s_t_e_m _s_i_z_e: 4096        (size in 1K blocks for anything else)
        _f_i_l_e _s_y_s_t_e_m:xp(0,0)           (or `hk(0,0)' or `rl(0,0)', etc.)
        _i_s_i_z_e = _X_X
        _m/_n = _X_X
        (after a while)
        _e_x_i_t _c_a_l_l_e_d
        _x_x_B_o_o_t
        :

This step makes an empty file system.

7.   Next, restore the data onto the new empty file  system.
     To  do  this you respond to the `:' printed in the last
     step with:

             (bring in the program restor)
             :ht(0,5)
             _R_e_s_t_o_r
             _t_a_p_e? ht(0,7)
             _d_i_s_k? hp(0,0)
             _L_a_s_t _c_h_a_n_c_e _b_e_f_o_r_e _s_c_r_i_b_b_l_i_n_g _o_n _d_i_s_k. (you type return)
             (the tape moves, perhaps 5-10 minutes pass)
             _e_n_d _o_f _t_a_p_e
             _x_x_B_o_o_t
             :
             (On RK05 disks you may get an "out of inodes" message.
             Ignore this.)

     You have a UNIX root file system now!

_B_o_o_t_i_n_g _U_n_i_x

     You probably have the bootstrap running, left over from
the  last  step above; if not, repeat the boot process (step
4) again.  Then use the appropriate one of the following:

        :xp(0,0)xpunix                (for RP04/5/6)
        :rp(0,0)rpunix                (for RP02/3)
        :rl(0,0)rlunix                (for RL01/2)
        :rk(0,0)rkunix                (for RK05)
        :hk(0,0)hkunix                (for RK07)
        :dv(0,0)dvunix                (for DIVA Comp-V)

The machine should type the following:




                      October 1, 1981





                           - 7 -


        _m_e_m = _x_x_x
        #

The _m_e_m message gives the memory available to user  programs
in  bytes.  One more step is necessary if you have a TU/E-16
or TS-11  tape  drive.   These  boot  systems  contain  tape
handlers  for  all three TU/E-16, TU-10, and TS-11 tape sys-
tems.  However, all these drives use the same interrupt vec-
tor  location.   We  have  defaulted these locations for the
TU-10 handler; To use the others you must patch them.   Halt
your  CPU  and  make the following changes using switches or
the console subsystem:

        _D_R_I_V_E     _L_O_C_A_T_I_O_N  _O_L_D _C_O_N_T_E_N_T_S        _N_E_W _C_O_N_T_E_N_T_S

        _T_S-_1_1     _2_2_4       _0_4_7_2                _0_5_0_2
        _T_U/_E-_1_6   _2_2_4       _0_4_7_2                _0_5_1_2

Continue the CPU.  The system you have just booted  actually
contains  all the possible disk and tape handlers as well as
a DZ-11 handler for 8 ports.  Some of the standard interrupt
vectors  overlap and some are floating meaning that they are
not likely to be correct for your system.  Since  dz  unibus
addresses  are  also  floating  they  may  also  have  to be
altered.  The following table indicates a  number  of  loca-
tions  which  can  be  patched  to tailor the system to your
hardware.  Note that in the case  of  the  xp/rp/dv  overlap
location  0254  has  already been patched in each of xpunix,
rpunix, and dvunix to be correct.  If you are satisfied with
running only on the root device and doing all your work from
the console until you have compiled a local system, none  of
this is necessary.

























                      October 1, 1981





                           - 8 -



        Device              Default/(std) Vect  ContentsBdev/Cdev

        tmio                0224/(0224)         04723/12
        htio                0230/(0224)         05127/15
        tsio                0234/(0224)         050213/27
        rkio                0220/(0220)         05520/9
        hkio                0210/(0210)         056210/25
        rlio                0320/(flt)          05728/18
        xpio                0254/(0254)         052212/20
        dvio                0260/(0254)         053214/23
        rpio                0264/(0254)         05421/14
        dzin                0300/(flt)          0612NA/22
        dzou                0304/(flt)          0622NA/22
        lpou                0320/(0320)         0602NA/2

        Offset of data in load image 0116340
        Offset of data in loaded core image 0

        Physical address of xp_type = 064210
        Physical address of dz_addr = 065114
        Default value of dz_addr = 0160000

You may also want to patch the system load  image  you  used
with adb.  We leave this as an early exercise.

     UNIX is now running, and the UNIX  Programmer's  Manual
applies  (sort  of);  references below of the form X(Y) mean
the subsection named X in section Y of the manual.  The  `#'
is  the  prompt  from  the  Shell, and indicates you are the
super-user.  The user name of the super-user is root if  you
should  find yourself in multi-user mode and need to log in;
no password is necessary.

     To simplify your life  later,  rename  the  appropriate
version  of  the  system as specified above plain unix.  For
example, use _m_v(UA1) as follows if you have an RP04/5/6.

        mv xpunix unix

In the future, when you reboot, you can type one of:

        xp(0,0)unix         (for the hp system)
        rl(0,0)unix
        rk(0,0)unix
        or whatever

to the `:' prompt.

     You may wish at this point to extract the remainder  of
the  tape.   We  have set up all the drivers in the bootable
systems so that the first logical (minor dev. 0) is the root
with swap at the end and the remainder (minor dev. 1) covers
the rest of the  device.   Make  an  appropriate  size  file



                      October 1, 1981





                           - 9 -


system  (mkfs  speaks  in 1K blocks!!) and mount it, and use
tar to extract the remainder  of  2BSD.   You  will  need  a
minimum of about 25K blocks for our tape plus whatever space
you need for your /usr to extract the whole  tape.   If  you
have  limited  file  space,  you can extract only the kernel
support directory, /kernel. There is enough in  this  direc-
tory along with the root you have just constructed to recon-
figure and compile a new kernel.  About  4877  512Kb  blocks
will be required for this subtree.

     We leave the  remainder  of  reconfiguration  for  your
local    guru.     Some    hints    may    be    found    in
kernel/include/sys/localopts.h.  Also examine the  makefiles
carefully.    The   bootstrap   systems   were   created  in
/kernel/sys/40SYS.  Other clues may be  gained  by  scanning
the source for conditional compilation flags such as UCB_NKB
or UCB_IHASH as most of our functional changes are on compi-
lation flags.

     Good Luck!!

_A_c_k_n_o_w_l_e_d_g_m_e_n_t_s

     A great many people have worked on this system  in  the
last  year  and  a  half.  Bob Kridle, Bill Jolitz, and Mike
Karels have spent the most time recently  ironing  out  last
minute  bugs.   Jeff Schriebman and Ed Gould did the work on
the buffers as well as much else.  Many pieces  were  lifted
from  the  VAX  system  used here at Berkeley.  Bill Joy was
responsible for most of the original work on the VAX.   Oth-
ers who contributed include Mark Horton, Steve Feldman, Mark
Schwartz, Ken Arnold, Joe Kalash, and  Eric  Allman.   I  am
sure  I have neglected some who contributed or provided con-
structive criticism.

_M_a_j_o_r _S_y_s_t_e_m _M_o_d_i_f_i_c_a_t_i_o_n_s - _U_s_e_r _V_i_s_i_b_l_e



_U_C_B__Q_U_O_T_A_S - _D_y_n_a_m_i_c _f_i_l_e _s_y_s_t_e_m _q_u_o_t_a_s

     By no means bullet proof,  these  nevertheless  prevent
many  painful  "file  system  full"  accidents.   They  will
require about one more in core inode for each  user  with  a
file quota.  See man sections on pq and setquot.

_U_C_B__G_R_P_M_A_S_T - _G_r_o_u_p _m_a_s_t_e_r _a_c_c_o_u_n_t_s

     Give away some of those weighty  root  responsibilities
to a unique member of each group.







                      October 1, 1981





                           - 10 -


_U_C_B__N_K_B    - "_n" _K_B _b_y_t_e _s_y_s_t_e_m _b_u_f_f_e_r_s

     Cut seek time by half at a  cost  of  slightly  greater
fragmentation.   Almost  doubles  I/O  bandwidth.   Requires
UCB_BUFOUT below.

_U_C_B__P_G_R_P - _C_o_u_n_t _p_r_o_c_e_s_s _l_i_m_i_t _b_y _p_r_o_c_e_s_s _g_r_o_u_p

     Fixes a botch in std. V7.

_U_C_B__S_T_I_C_K_Y - _C_a_n'_t _r_m _f_i_l_e _f_r_o_m _s_t_i_c_k_y _d_i_r _u_n_l_e_s_s _o_w_n_e_d

     Protection for tmp files, etc.

_U_C_B__L_S_T_A_T - _E_x_t_e_n_d_e_d _s_t_a_t _c_a_l_l (_f_o_r _q_u_o_t_a_s)

     Returns first two block pointers which we use for quota
info.

_U_C_B__D_K_E_X_T - _E_x_t_e_n_d_e_d _I/_O _M_o_n_i_t_o_r_i_n_g

     This is not complete.

_U_C_B__S_M_I_N_O - _S_m_a_l_l _i_n_o_d_e_s (_N_A_D_D_R == _7)

     Reduces size of inode table.   Small  files  are  still
about same size due to 1K block size.

_U_C_B__L_O_G_I_N - _l_o_g_i_n _s_y_s _c_a_l_l _i_s _a_v_a_i_l_a_b_l_e

     Used for extended accounting.

_U_C_B__S_U_B_M - "_s_u_b_m_i_t" _p_r_o_c_e_s_s_i_n_g

     Hook for accounting background processes.

_U_C_B__X_A_C_C - _e_x_t_e_n_d_e_d _p_r_o_c_e_s_s _a_c_c_o_u_n_t_i_n_g

     More accounting.

_U_C_B__L_O_A_D - _l_o_a_d _a_v_e_r_a_g_e _a_n_d _u_p_t_i_m_e

     Gives real idea of system load.  Number of runnable  or
short sleep processes averaged over previous 1, 5, 15 minute
interval.

_M_E_N_L_O__O_V_L_Y - _p_r_o_c_e_s_s _t_e_x_t _o_v_e_r_l_a_y_s

     Run those big ones from the VAXen.

_M_E_N_L_O__K_O_V - _o_v_e_r_l_a_i_d _k_e_r_n_e_l _t_e_x_t

     Must be used for non-separate  I/D  machines.   Can  be
used on all.



                      October 1, 1981





                           - 11 -


_U_C_B__M_E_T_E_R - _v_m_s_t_a_t _p_e_r_f_o_r_m_a_n_c_e _m_e_t_e_r_i_n_g

     More monitoring of performance stats.


                   User Invisible Changes

_U_C_B__B_U_F_O_U_T - _C_a_c_h_e _b_u_f_f_e_r_s _m_o_v_e_d _o_u_t _o_f _s_y_s _d_a_t_a _s_p_a_c_e

     We use 60-100 buffers and and  improved  cache  scheme.
Care  must  be  used so that the virtual space pointed to by
the segmentation register which is remapped to these buffers
in  not  normally  occupied by data which is accessed in the
same routines as the buffers.  Check the name list for this.
Buffers are accessed through KDSA5 (0120000-0140000.)

     A recently discovered bug as resulted in a quick fix of
protecting  part  of this code with spl(7)s.  This is a poor
solution which will increase  interrupt  latency  too  much.
The  clock  may  lose  time,  etc.  We hope to have a better
solution soon.

_U_C_B__C_L_I_S_T - _C_l_i_s_t_s _m_o_v_e_d _o_u_t _o_f _r_e_g_u_l_a_r _D-_s_p_a_c_e

     Good for processes which would like to write  a  buffer
at a time to ttys.  Lower rescheduling load.

_U_C_B__M_O_U_N_T - _M_u_l_t_i_p_l_e _s_u_p_e_r_b_l_o_c_k_s _p_e_r _i_n_t_e_r_n_a_l _b_u_f_f_e_r

     Two per 1K buffer as these use in-space buffers.

_U_C_B__S_C_C_S_I_D - _P_u_t _S_C_C_S _I_D _s_t_r_i_n_g _i_n _e_a_c_h _s_y_s_t_e_m _m_o_d_u_l_e

     Takes up to much room in D space - a bad idea.

_U_C_B__B_H_A_S_H - _h_a_s_h_e_d _b_u_f_f_e_r _a_c_c_e_s_s_i_n_g

     Cuts time in getblk by 50% or better.

_U_C_B__I_H_A_S_H - _h_a_s_h_e_d _i_n_o_d_e _a_c_c_e_s_s_i_n_g

     Same for iget.

_U_C_B__F_R_C_S_W_A_P - _F_o_r_c_e _s_w_a_p _o_n _e_x_p_a_n_d/_f_o_r_k

     For CPU bound systems; let disk  controllers  help  out
with all those copysegs in fork and expand.

_O_t_h_e_r _E_n_h_a_n_c_e_m_e_n_t_s - _N_o_t _o_n _F_l_a_g_s

     There are a number of other improvements which were not
put on compilation flags due to readability problems.  These
can be found by diffing with a pure V7  system  if  desired.
In  particular,  the  ``new teletype driver'' is included as



                      October 1, 1981





                           - 12 -


line discipline 2 (NTTYDISC).  This is really sexy - see the
enclosed stty command and manual page.


_K_N_O_W_N _B_U_G_S

_L_D

     There are two versions of the overlay loader,  one  for
the  system  and  one  for  user  programs.  These should be
merged. In addition, we have experienced problems regenerat-
ing  either  one  from the source we have. Don't assume what
you compile from the sources here will work.   The  binaries
in  /bin/ld  and kernel/sys/40SYS/covld do work and are dif-
ferent; the latter is used to make kernels.

_A_D_B

     Modification of this to work with overlaid code (ovadb)
is  only  partially  complete,  buggy, and undocumented. The
file kernel/sys/40SYS/getsymb.sh uses ovadb and may give you
a clue or two.

_O_V_E_R_L_A_I_D _B_U_F_F_E_R_S _I_N _K_E_R_N_E_L

     See kernel/sys/HINTS about this.

_D_I_S_K _E_C_C

     This is turned off in xp.c. The original code was shown
to be incorrect a few weeks ago and the corrections have not
been tested.

_S_E_C_U_R_I_T_Y

     Jim Haynes at U.C. Santa Cruz contributed a  number  of
security  fixes  (in  hard copy, unfortunately) which we did
not have time to include. He also has a very good  paper  on
UNIX security in general. Contact him for more info.

_M_F_R_E_E

     Does not check the end of the coremap or swapmap tables
when  returning  released  space.  Enough fragmentation will
cause destruction of the  data  structures  following  these
tables.

_U_C_B__D_K_E_X_T

     Should be removed; an aborted experiment.







                      October 1, 1981





                           - 13 -


_N_E_T_L_D_I_S_C

     The ``network line discipline'' number 1, which was put
in  for  the  Berknet  to  make it reasonable to run at 9600
baud, does not work.  Strangely enough, the same code  works
fine on the Vax and the Onyx.

_M_A_N_Y _M_A_N_Y _M_O_R_E _F_O_R _Y_O_U _T_O _D_I_S_C_O_V_E_R!!

















































                      October 1, 1981


