Unix |
Unix v6 |
|
![]() |
bproc(8) |
![]() |
boot procedures UNIX startup 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 command places a bootstrap program on
the otherwise unused block zero of the tape. The DECtape
version of this program is called the magtape version If or
is read into location zero and executed there, it will type
‘=’ on the console, read in a 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
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 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 program. When read into
location 0 and executed, reads a single character (either or
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. operates
under very severe space constraints. It supplies no prompts,
except that it echoes a carriage return and line feed after
the or 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 or Notice that will only load a file
from drive 0, and the file system it searches must start at
the beginning of the disk. itself usually resides in the
otherwise unused block 0 of the disk, so it can be loaded by
ROM program; can be used to put it there when the file
system is created. It can also be loaded from a tape as
described above. 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
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 10s) then a permanent disk
non-existent-memory error will occur. 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 9track | ||
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 |
/unix UNIX code
/usr/mdec/mboot tp magtape bootstrap
/usr/mdec/tboot tp DECtape bootstrap
/usr/mdec/uboot file system bootstrap
tp (I), init (VIII)
![]() |
bproc(8) | ![]() |