BOOT PROCEDURES(VIII)        2/11/75        BOOT PROCEDURES(VIII)
NAME
     boot procedures - UNIX startup
DESCRIPTION
     How to start UNIX.   UNIX is started by placing it  in  core
     at location zero and transferring to zero.  Since the system
     is not reenterable, it is necessary to read it in from  disk
     or tape.
     The tp command places a bootstrap program on  the  otherwise
     unused  block zero of the tape.  The DECtape version of this
     program is called tboot,  the  magtape  version  mboot.   If
     tboot  or  mboot  is  read  into  location zero and executed
     there, it will type `=' on the console, read in a  tp  entry
     name, load that entry into core, and transfer to zero.  Thus
     one way to run UNIX is to maintain the system code on a tape
     using  tp.   Caution:  the file /usr/mdec/tboot (DECtape) or
     /usr/mdec/mboot (magtape) must be present when the  tape  is
     made!   When a boot is required, execute (somehow) a program
     which reads in and jumps to the first block of the tape.  In
     response  to  the  `='  prompt,  type  the entry name of the
     system on the tape (we use plain `unix').   It  is  strongly
     recommended   that  a  current  version  of  the  system  be
     maintained in this way, even if it is  usually  booted  from
     disk.
     The standard DEC ROM which loads DECtape  is  sufficient  to
     read  in  tboot,  but  the  magtape ROM loads block one, not
     zero.  If no suitable ROM is available, magtape and  DECtape
     programs are presented below which may be manually placed in
     core and executed.
     The system can also be booted from a disk file with the  aid
     of  the  uboot  program.   When  read  into  location  0 and
     executed, uboot reads a single character (either p or k  for
     RP  or  RK,  both  drive 0) to specify which device is to be
     searched.  Then it reads a UNIX pathname from  the  console,
     finds the corresponding file on the given device, loads that
     file into core location zero, and transfers  to  it.   Uboot
     operates  under  very severe space constraints.  It supplies
     no prompts, except that it echoes a carriage return and line
     feed  after  the  p  or k.  No diagnostic is provided if the
     indicated file cannot be found, nor is there  any  means  of
     correcting  typographical  errors in the file name except to
     start the program over.  If  it  fails  to  find  the  file,
     however,  it  jumps back to its start, so another try can be
     attempted, starting again with the  p  or  k.   Notice  that
     uboot  will  only  load  a  file  from drive 0, and the file
     system it searches must start at the beginning of the  disk.
     Uboot itself usually resides in the otherwise unused block 0
     of the disk, so it can be loaded by ROM program; mkfs can be
     used  to  put  it there when the file system is created.  It
     can also be loaded from a tp tape as described above.
     The switches.   The console switches play an important  role
     in  the  use  and  especially  the  booting of UNIX.  During
     operation, the console switches are examined  60  times  per
     second,  and  the  contents  of the address specified by the
     switches are displayed in the display  register.   (This  is
     not  true on the 11/40 since there is no display register on
     that machine.)  If the switch address is even,  the  address
     is  interpreted  in  kernel  (system)  space;  if  odd,  the
     rounded-down address is  interpreted  in  the  current  user
     space.
     If any diagnostics are produced  by  the  system,  they  are
     printed  on  the  console only if the switches are non-zero.
     Thus it is wise to have a non-zero value in the switches  at
     all times.
     During the startup of the system, the  init  program  (VIII)
     reads  the  switches  and  will  come  up single-user if the
     switches are set to 173030.
     It is unwise to have a non-existent address in the switches.
     This  causes a bus error in the system (displayed as 177777)
     at the rate of 60 times per second.  If there is a  transfer
     of  more  than  16ms  duration  on a device with a data rate
     faster than the  bus  error  timeout  (about  10us)  then  a
     permanent disk non-existent-memory error will occur.
     ROM programs.   Here are some programs  which  are  suitable
     for  installing  in read-only memories, or for manual keying
     into core if no ROM is present.  Each program  is  position-
     independent but should be placed well above location 0 so it
     will not be  overwritten.   Each  reads  a  block  from  the
     beginning  of  a  device into core location zero.  The octal
     words constituting the program are listed on the left.
     DECtape (drive 0) from endzone:
        012700      mov     $tcba,r0
        177346
        010040      mov     r0,-(r0)       / use tc addr for wc
        012710      mov     $3,(r0)        / read bn forward
        000003
        105710  1:  tstb    (r0)           / wait for ready
        002376      bge     1b
        112710      movb    $5,(r0)        / read (forward)
        000005
        000777      br      .              / loop; now halt and start at 0
     DECtape (drive 0) with search:
        012700  1:  mov     $tcba,r0
        177346
        010040      mov     r0,-(r0)       / use tc addr for wc
        012740      mov     $4003,-(r0)    / read bn reverse
        004003
        005710  2:  tst     (r0)
        002376      bge     2b             / wait for error
        005760      tst     -2(r0)         / loop if not end zone
        177776
        002365      bge     1b
        012710      mov     $3,(r0)        / read bn forward
        000003
        105710  2:  tstb    (r0)           / wait for ready
        002376      bge     2b
        112710      movb    $5,(r0)        / read (forward)
        000005
        105710  2:  tstb    (r0)           / wait for ready
        002376      bge     2b
        005007      clr     pc             / transfer to zero
     Caution: both of these  DECtape  programs  will  (literally)
     blow a fuse if 2 drives are dialed to zero.
     Magtape from load point:
        012700      mov     $mtcma,r0
        172526
        010040      mov     r0,-(r0)       / usr mt addr for wc
        012740      mov     $60003,-(r0)   / read 9-track
        060003
        000777      br      .              / loop; now halt and start at 0
     RK (drive 0):
        012700      mov     $rkda,r0
        177412
        005040      clr     -(r0)          / rkda cleared by start
        010040      mov     r0,-(r0)
        012740      mov     $5,-(r0)
        000005
        105710  1:  tstb    (r0)
        002376      bge     1b
        005007      clr     pc
     RP (drive 0)
        012700      mov     $rpmr,r0
        176726
        005040      clr     -(r0)
        005040      clr     -(r0)
        005040      clr     -(r0)
        010040      mov     r0,-(r0)
        012740      mov     $5,-(r0)
        000005
        105710  1:  tstb    (r0)
        002376      bge     1b
        005007      clr     pc
FILES
     /unix - UNIX code
     /usr/mdec/mboot - tp magtape bootstrap
     /usr/mdec/tboot - tp DECtape bootstrap
     /usr/mdec/uboot - file system bootstrap
SEE ALSO
     tp (I), init (VIII)