Here are some more detailed notes about the 2.11BSD installation issue I was seeing on my SMS-1000 Model 40. Might not be many other of these systems out there that would encounter this issue, so this information is more for my own future reference than anything else, as I'll most likely forget most of these details before too long.
The issue was that when booting from the standard 2.11BSD installation tape, all of the standalone executables would fail when they tried to initialize the SMS-1000 Model 40 on-board MSCP controller. The standalone executables on the standard 2.11BSD installation tape are: boot, disklabel, mkfs, restor, and icheck.
The failure was occurring for each of these standalong executables in the standalone version of the MSCP driver /usr/src/sys/pdpstand/ra.c in raopen() when the MSCP controller was failing to advance to initialization Step 4. The failure / retry message loop would repeat forever.
Code:
73Boot from tms(0,0,0) at 0174500
: ra(0,0)unix
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
73Boot from tms(0,0,0) at 0174500
: tms(0,1)
Boot: bootdev=06001 bootcsr=0174500
disklabel
Disk? ra(0,0)
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
73Boot from tms(0,0,0) at 0174500
: tms(0,2)
Boot: bootdev=06002 bootcsr=0174500
Mkfs
file system: ra(0,0)
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
73Boot from tms(0,0,0) at 0174500
: tms(0,3)
Boot: bootdev=06003 bootcsr=0174500
Restor
Tape? tms(0,5)
Disk? ra(0,0)
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
73Boot from tms(0,0,0) at 0174500
: tms(0,4)
Boot: bootdev=06004 bootcsr=0174500
Icheck
File: ra(0,0)
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
ra(172150) fail step 4. retrying
Experimentially I found that that if I modified the standalone version of the MSCP driver /usr/src/sys/pdpstand/ra.c Step 1 initialization code in raopen() to write an Interrupt Vector value of zero when it is not setting the IE Interrupt Enable bit then the MSCP controller hang before advancing to initialization Step 4 no longer occurred.
Rebuilding the standalone executables boot, disklabel, mkfs, restor, and icheck after the trivial one line modification to /usr/src/sys/pdpstand/ra.c resulted in single byte changes to each of those executables, with an octal word value 100033 (hex 0x801B) changing to 100000 (hex 0x8000).
On the PC that I used to create the physical 8mm installation tape I was using to boot my SMS-1000 Model 40, I used a binary file editor to make the same single byte changes to the standard 2.11BSD distribution standalone executable files boot, disklabel, mkfs, restor, and icheck. I also used a binary file editor to make a single byte change in the root.dump file that corresponds to the boot file that is restored to the root file system during installation. After recreating a physical 8mm installation tape with these binary patched versions of the boot, disklabel, mkfs, restor, icheck, and root.dump files I was able to boot my SMS-1000 Model 40 from that installation tape and complete the installation process as described in the "Installing and Operating 2.11BSD on the PDP-11" manual without issue.
Code:
# cd /usr/src/sys/pdpstand
# od boot | grep 100033
0042200 100033 000002 012716 000002 012746 010000 010346 004737
# od disklabel | grep 100033
0043520 010346 004737 045406 022626 005700 001365 012763 100033
# od mkfs | grep 100033
0037600 004737 041464 022626 005700 001365 012763 100033 000002
# od restor | grep 100033
0042640 010346 004737 044526 022626 005700 001365 012763 100033
# od icheck | grep 100033
0040100 010346 004737 041766 022626 005700 001365 012763 100033
# mkdir orig
# mv boot orig
# mv disklabel orig
# mv mkfs orig
# mv restor orig
# mv icheck orig
# ls -l orig
total 173
-rwxr-xr-x 1 root 35236 Apr 9 2000 boot
-rwxr-xr-x 1 root 37881 Apr 9 2000 disklabel
-rwxr-xr-x 1 root 33032 Apr 9 2000 icheck
-rwxr-xr-x 1 root 33158 Apr 9 2000 mkfs
-rwxr-xr-x 1 root 35742 Apr 9 2000 restor
# diff orig/ra.c ra.c
83c83
< raaddr->rasa = RA_ERR | (0154/4);
---
> raaddr->rasa = RA_ERR;
# make boot disklabel icheck mkfs restor
cc -O -DSTANDALONE -I/usr/include -I. -c ra.c
ar rv libsa.a ra.o
r - ra.o
ranlib libsa.a
ld -X -o boot M.o conf.o boot.o ubmapset.o libsa.a -lc
ld -X -o disklabel srt0.o conf.o disklabel.o displaylab.o libsa.a -lc
ld -X -i -o icheck srt0-i.o conf.o icheck.o libsa.a -lc
ld -X -o mkfs srt0.o conf.o mkfs.o libsa.a -lc
ld -X -i -o restor srt0-i.o conf.o restor.o libsa.a -lc
# ls -l boot disklabel icheck mkfs restor
-rwxr-x--x 1 root 35236 Jan 12 13:51 boot
-rwxr-x--x 1 root 37881 Jan 12 13:51 disklabel
-rwxr-x--x 1 root 33032 Jan 12 13:51 icheck
-rwxr-x--x 1 root 33158 Jan 12 13:51 mkfs
-rwxr-x--x 1 root 35742 Jan 12 13:51 restor
# cmp -l orig/boot boot
17537 33 0
# cmp -l orig/disklabel disklabel
18271 33 0
# cmp -l orig/icheck icheck
16463 33 0
# cmp -l orig/mkfs mkfs
16269 33 0
# cmp -l orig/restor restor
17839 33 0
# od boot | grep 0042200
0042200 100000 000002 012716 000002 012746 010000 010346 004737
# od disklabel | grep 0043520
0043520 010346 004737 045406 022626 005700 001365 012763 100000
# od mkfs | grep 0037600
0037600 004737 041464 022626 005700 001365 012763 100000 000002
# od restor | grep 0042640
0042640 010346 004737 044526 022626 005700 001365 012763 100000
# od icheck | grep 0040100
0040100 010346 004737 041766 022626 005700 001365 012763 100000
C:\2.11BSD>fc /b boot boot.x
Comparing files boot and BOOT.X
00004480: 1B 00
C:\2.11BSD>fc /b disklabel disklabel.x
Comparing files disklabel and DISKLABEL.X
0000475E: 1B 00
C:\2.11BSD>fc /b mkfs mkfs.x
Comparing files mkfs and MKFS.X
00003F8C: 1B 00
C:\2.11BSD>fc /b restor restor.x
Comparing files restor and RESTOR.X
000045AE: 1B 00
C:\2.11BSD>fc /b icheck icheck.x
Comparing files icheck and ICHECK.X
0000404E: 1B 00
C:\2.11BSD>fc /b root.dump root.dump.x
Comparing files root.dump and ROOT.DUMP.X
00312080: 1B 00
After the successful installation from the patched installation tape, there was one additional issue. The system would hang inside the initial rauboot boot block when attempting to boot directly from the SMS-1000 hard drive. It appears that the SMS-1000 Model 40 MSCP controller also needs the rauboot boot block patch in patch 441. However, starting with patch 432, /usr/src/sys/mdec/rauboot.s also sets a non-zero Interrupt Vector value during initialization Step 1 without also setting the IE Interrupt Enable bit. After applying patches up through patch 441, /usr/src/sys/mdec/rauboot.s needs to then be modified to set a zero Interrupt Vector value, otherwise it will have the same hang issue that was occurring in /usr/src/sys/pdpstand/ra.c After applying patches up through patch 441, and then rebuilding the /usr/src/sys/mdec/rauboot.s and copying rauboot to the boot sector of the SMS-1000 hard drive, the system could then successfully boot directly from the hard drive.
Code:
# cd /usr/src/sys/mdec
# diff orig/rauboot.s rauboot.s
303c303
< icons: RAERR + 033
---
> icons: RAERR
# dd if=/mdec/rauboot of=/dev/rra0a count=1