diff --git a/boot/README b/boot/README new file mode 100644 index 0000000..09c9e95 --- /dev/null +++ b/boot/README @@ -0,0 +1,47 @@ +UNIX V1 bootstrap + +The UNIX V1 bootstrap procedure is described in UNIX_ProgammersManual_Nov71.pdf, +section BOOT PROCEDURES (VII). + +To install the bootstrap and kernel, prior to running the V1 system, use +the boot/installboot command. This will install the bos program as well +as the recently-built kernel from build/loadfile into the warm boot area +of the rf0 disk: + + boot/installboot + +The system can be warm booted with: + + tools/pdp11 boot/simh.cfg + +Alternatively, everything can be installed while running under the V1 system +using the following procedure: + + First, build the support programs: bos and msys + + chdir /usr/boot + sh run + + Install the bootstrap and unix: + + msys b bos + msys u wunix + +If you build a kernel under V1, then you can install it into the warm +boot area with: + + msys u name_of_kernel + +You can install it into the cold boot area (such as for testing) with: + + msys 1 name_of_kernel + +The default installation does not copy an image into the cold boot area. +However, if the cold boot area is being used for testing new kernels, +then the kernel can be bootstrapped using: + + tools/pdp11 boot/simh_cold.cfg + +NOTE: the 32W bootstrap normally resides at location 173700, but because the +simulator does not have memory at that location, the current bootstrap is +copied into 073700 in the simulator. This does not change the behavior at all. diff --git a/boot/bos b/boot/bos new file mode 100644 index 0000000..8122c80 Binary files /dev/null and b/boot/bos differ diff --git a/boot/installboot b/boot/installboot new file mode 100755 index 0000000..bc4949e --- /dev/null +++ b/boot/installboot @@ -0,0 +1,22 @@ +#!/bin/sh + +RF0IMAGE=rf0.dsk +KERNEL=build/loadfile +BOS=boot/bos + +if [ ! -f $KERNEL ] +then echo "You must build the kernel, $KERNEL, before you can install" + echo "the bootstrap." + exit 1 +fi + +# Install bos 32KW below the top of the rf0 image +# +dd if=$BOS of=$RF0IMAGE bs=512 seek=960 + +# Install Unix in the warm boot area, 31KW below the top of the +# rf0 image. Because the kernel is in simh load format, the first +# 6 bytes are skipped and the following 16K byte are copied onto +# the rf0 disk. +# +dd if=$KERNEL bs=1 skip=6 count=16384 | dd of=$RF0IMAGE bs=512 seek=964 diff --git a/boot/m792low.load b/boot/m792low.load new file mode 100644 index 0000000..b7578d3 Binary files /dev/null and b/boot/m792low.load differ diff --git a/boot/m792low.s b/boot/m792low.s new file mode 100644 index 0000000..326d4e4 --- /dev/null +++ b/boot/m792low.s @@ -0,0 +1,30 @@ +/ UNIX bootstrap ROM, based on BOOT PROCEDURES (VII) 11/3/71 + + . = 73700 + + / 173700 -- load bos from 1700000 of rf0 (RF11) + + mov $177472,r0 + mov $3,-(r0) / rf11.dae.ta[6:5] = 3 + mov $140000,-(r0) / rf11.dar = 140000 + mov $54000,-(r0) / rf11.cma = 54000 + mov $-2000,-(r0) / rf11.wc = -2000 (1K words) + mov $5,-(r0) / rf11.dcs = read,go + tstb (r0) / done? + bge .-2 / no, loop + jmp *$54000 / jump to bos + + / 173740 -- load from tap0 (TC11 DECtape) + + mov $177350,r0 + clr -(r0) / tc11.tcba = 0 + mov r0,-(r0) / tc11.tcwc = 177346 (282. bytes) + mov $3,-(r0) / tc11.tccm = rnum,do + tstb (r0) / done? + bge .-2 / no, loop + tst *$177350 / block 0? + bne . / no, loop forever + movb $5,(r0) / tc11.tccm = rdata,do + tstb (r0) / done? + bge .-2 / no, loop + clr pc / jump to location 0 diff --git a/boot/m792uv1.load b/boot/m792uv1.load new file mode 100644 index 0000000..f8d3dc1 Binary files /dev/null and b/boot/m792uv1.load differ diff --git a/boot/m792uv1.s b/boot/m792uv1.s new file mode 100644 index 0000000..d678104 --- /dev/null +++ b/boot/m792uv1.s @@ -0,0 +1,30 @@ +/ UNIX bootstrap ROM, based on BOOT PROCEDURES (VII) 11/3/71 + + . = 173700 + + / 173700 -- load bos from 1700000 of rf0 (RF11) + + mov $177472,r0 + mov $3,-(r0) / rf11.dae.ta[6:5] = 3 + mov $140000,-(r0) / rf11.dar = 140000 + mov $54000,-(r0) / rf11.cma = 54000 + mov $-2000,-(r0) / rf11.wc = -2000 (1K words) + mov $5,-(r0) / rf11.dcs = read,go + tstb (r0) / done? + bge .-2 / no, loop + jmp *$54000 / jump to bos + + / 173740 -- load from tap0 (TC11 DECtape) + + mov $177350,r0 + clr -(r0) / tc11.tcba = 0 + mov r0,-(r0) / tc11.tcwc = 177346 (282. bytes) + mov $3,-(r0) / tc11.tccm = rnum,do + tstb (r0) / done? + bge .-2 / no, loop + tst *$177350 / block 0? + bne . / no, loop forever + movb $5,(r0) / tc11.tccm = rdata,do + tstb (r0) / done? + bge .-2 / no, loop + clr pc / jump to location 0 diff --git a/boot/simh.cfg b/boot/simh.cfg new file mode 100644 index 0000000..682fa4f --- /dev/null +++ b/boot/simh.cfg @@ -0,0 +1,23 @@ +#!tools/pdp11 +set cpu 11/20 +set cpu 32K +set rk0 enabled +att rk0 rk0.dsk +set rf 2p +set rf enabled +attach rf rf0.dsk +set tc enabled +att tc tape +set hk disabled +set rha disabled +set tm disabled +set rx disabled +set rl disabled +set tq disabled +set tc enabled +set rf enabled +set ke enabled +set cpu history=1000 +load boot/m792low.load +d sr 173700 +go 73700 diff --git a/boot/simh_cold.cfg b/boot/simh_cold.cfg new file mode 100644 index 0000000..1c8a5e2 --- /dev/null +++ b/boot/simh_cold.cfg @@ -0,0 +1,23 @@ +#!tools/pdp11 +set cpu 11/20 +set cpu 32K +set rk0 enabled +att rk0 rk0.dsk +set rf 2p +set rf enabled +attach rf rf0.dsk +set tc enabled +att tc tape +set hk disabled +set rha disabled +set tm disabled +set rx disabled +set rl disabled +set tq disabled +set tc enabled +set rf enabled +set ke enabled +set cpu history=1000 +load boot/m792low.load +d sr 1 +go 73700 diff --git a/fs/usr/boot/bos.s b/fs/usr/boot/bos.s new file mode 100644 index 0000000..2370164 --- /dev/null +++ b/fs/usr/boot/bos.s @@ -0,0 +1,78 @@ +/ bos -- UNIX V1 bootstrap +/ +/ re-creation, based on description in UNIX_ProgammersManual_Nov71.pdf, +/ page 7-06, BOOT PROCEDURES (VII) +/ 5/6/08 jam@magic.com +/ +/ M792 bootstrap loads this into core at 54000 +/ +/ Behavior depends on switch register: +/ 173700 or +/ 073700 Read Warm UNIX from RF into core location 0 and jump to 400 +/ 1 Read Cold UNIX from RF into core location 0 and jump to 400 +/ 2 Read unassigned 3K program into core location 0 and jump to 400 +/ 10 Dump 12K words from core location 0 onto DECtape drive 7 +/ 0 UNIMPLEMENTED -- should be read UNIX binary paper tape + +csw = 177570 + +/. = 54000 + + mov $177472,r1 + mov *$csw,r0 + cmp r0,$173700 + beq warm + cmp r0,$73700 + bne 1f +warm: + / x73700 = Warm UNIX + mov $3,-(r1) / rf0 dae = track number high bits + mov $142000,-(r1) / rf0 dar = 256KW - 15KW + clr -(r1) / rf0 cma = 0 + mov $-14000,-(r1) / rf0 wc = 6KW +loadrf: + mov $5,-(r1) / rf0 dcs = read + tstb (r1) / rf0 done? + bge .-2 / no, loop + jmp *$400 / jump to loaded code + +1: + cmp r0,$1 + bne 1f + + / 0 = Cold UNIX + mov $3,-(r1) / rf0 dae = track number high bits + mov $156000,-(r1) / rf0 dar = 256KW - 9KW + clr -(r1) / rf0 cma = 0 + mov $-14000,-(r1) / rf0 wc = 6KW + br loadrf + +1: + cmp r0,$2 + bne 1f + + / 2 = Unassigned 3K + mov $3,-(r1) / rf0 dae = track number high bits + mov $172000,-(r1) / rf0 dar = 256KW - 3KW + clr -(r1) / rf0 cma = 0 + mov $-6000,-(r1) / rf0 wc = 3KW + br loadrf + +1: + cmp r0,$10 + bne 1f + + / 10 = Dump 12K to DECtape drive 7 + mov $177350,r1 + clr -(r1) / tc11 tcba = 0 + mov $-30000,-(r1) / tc11 tcwc = 12KW + mov $3415,-(r1) / tc11 tccm = UNIT=7,WDATA,DO + tstb (r1) / tc11 done? + bge .-2 / no, loop +2: + halt + br 2b + +1: + halt / Unrecognized switch setting + br 1b diff --git a/fs/usr/boot/msys.s b/fs/usr/boot/msys.s new file mode 100644 index 0000000..690b8cb --- /dev/null +++ b/fs/usr/boot/msys.s @@ -0,0 +1,87 @@ +/ msys -- copy file to RF read only slot +/ +/ re-creation, based on description in UNIX_ProgammersManual_Nov71.pdf, +/ page 7-06, BOOT PROCEDURES (VII) +/ 5/9/08 jam@magic.com + +/ b bos 1700 +/ u warm unix 1704 +/ 1 cold unix 1734 +/ 2 unassigned 1764 + + mov sp,r5 + mov (r5)+,r3 / argc + cmp $3,r3 / must be 3 + bne badcmd / else error + tst (r5)+ + mov (r5)+,r4 / get first arg + + cmpb (r4),$'b + bne 1f + mov $1700,r3 + br 2f +1: + cmpb (r4),$'u + bne 1f + mov $1704,r3 + br 2f +1: + cmpb (r4),$'1 + bne 1f + mov $1734,r3 + br 2f +1: + cmpb (r4),$'2 + bne badcmd + mov $1764,r3 +2: + + / open file + mov (r5),r4 + mov r4,0f + sys open; 0:..; 0 + bes error + mov r0,r1 + + / open rf0 and seek to correct block + sys open; disk; 1 + bes error + mov r0,r2 + mov r3,0f + sys seek; 0:..; 0 + bes error + + / copy file from file to disk one block at a time +1: + mov r1,r0 + sys read; buf; 512. + mov r0,r4 + mov r2,r0 + sys write; buf; 512. + bes error + tst r4 + bne 1b + + sys exit + +error: + mov $1,r0 + sys write; 1f; 2 + 4 + sys exit +1: + + +badcmd: + mov $1,r0 + sys write; 1f; 2 + 4 + sys exit +1: + + +disk: + + .even + +buf: .=.+512. diff --git a/fs/usr/boot/run b/fs/usr/boot/run new file mode 100644 index 0000000..d0de63b --- /dev/null +++ b/fs/usr/boot/run @@ -0,0 +1,4 @@ +as bos.s +mv a.out bos +as msys.s +mv a.out msys diff --git a/fs/usr/boot/wunix b/fs/usr/boot/wunix new file mode 100644 index 0000000..832d4b3 Binary files /dev/null and b/fs/usr/boot/wunix differ