diff --git a/boot/README b/boot/README index 09c9e95..05a11d1 100644 --- a/boot/README +++ b/boot/README @@ -14,6 +14,9 @@ The system can be warm booted with: tools/pdp11 boot/simh.cfg +NOTE: For using kernels built using the V2 assembler, all of the following +should refer to msys2, instead of msys. + Alternatively, everything can be installed while running under the V1 system using the following procedure: diff --git a/fs/usr/boot/bos.s b/fs/usr/boot/bos.s new file mode 100644 index 0000000..9906918 --- /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: + 0 / halt + br 2b + +1: + 0 / 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/msys2.s b/fs/usr/boot/msys2.s new file mode 100644 index 0000000..f1d0607 --- /dev/null +++ b/fs/usr/boot/msys2.s @@ -0,0 +1,97 @@ +/ msys2 -- 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 +/ 5/17/08 jam@magic.com -- modified to copy 407-format a.out files + +/ b bos 1700 1KW +/ u warm unix 1704 6KW +/ 1 cold unix 1734 6KW +/ 2 unassigned 1764 3KW + + 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 + mov $4,r4 + br 2f +1: + cmpb (r4),$'u + bne 1f + mov $1704,r3 + mov $30,r4 + br 2f +1: + cmpb (r4),$'1 + bne 1f + mov $1734,r3 + mov $30,r4 + br 2f +1: + cmpb (r4),$'2 + bne badcmd + mov $1764,r3 + mov $14,r4 +2: + + / open file + mov (r5),r5 + mov r5,0f + sys open; 0:..; 0 + bes error + mov r0,r1 + sys seek; 20; 0 / skip 407 (16-byte) header + bes error + + / 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,r5 + mov r2,r0 + sys write; buf; 512. + bes error + dec r4 + beq 3f + tst r5 + bne 1b + +3: + sys exit + +error: + mov $1,r0 + sys write; 1f; 2 + br .+2 + sys exit +1: + + +badcmd: + mov $1,r0 + sys write; 1f; 2 + br .+2 + 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..8746d0c --- /dev/null +++ b/fs/usr/boot/run @@ -0,0 +1,4 @@ +as bos.s +mv a.out bos +as msys2.s +mv a.out msys2 diff --git a/fs/usr/boot/unix.out b/fs/usr/boot/unix.out new file mode 100755 index 0000000..ae43697 Binary files /dev/null and b/fs/usr/boot/unix.out differ