Monthly Archives: June 2015

Installing BSD 2.9 on a DEC Pro-350, Part III – Installation

OK, so with an understanding of how to create RX50 floppies from the images, as well as what images to use, we are now ready to begin the actual installation. I’d like to point out that these instructions are basically typed versions of the hand-written notes found here:


1) As discussed in Part I, first create the floppy distribution using ImageDisk. You will need nine 5.25″ floppy disks if you are using the 3 disk usr set, and twenty-five if using the 16 disk usr set. You will also need a DOS PC, a copy of ImageDisk and, of course, the images. Use ImageDisk to create the installation floppies from the *.IMD images, using these settings:

Sides: One
Double-step: Off
R/W gap: 7
Format gap:14

You can find the IMD images here:

Pro-350 BSD 2.9 IMD images

And the ImageDisk program here:

ImageDisk 1.17 for DOS

Note that during installation of BSD, the maintenance floppy must not be write-protected, else you get this error:

r50a: hard error on 10 cs0=370 csi=260

All other floppies can be write-protected.

2) In order to perform the installation, you must gain access to the Pro-350 via the printer port. When a cable with pins 8 and 9 shorted together is inserted into the printer port, it puts the Pro-350 into maintenance mode, which is necessary for installing BSD. Either construct a cable, or find an official DEC cable on ebay or someplace (DEC part BCC-08). To construct a cable, use the following pinout:

PC (DB9) Pro-350 Printer Port (DB9)
1 1
2 2
3 3
7 7

Once you have a cable, connect it between the printer port of the Pro-350 and the serial port of the PC. Note that while connected via the cable, sending a break signal will put the Pro-350 into the ODT (Online Debugging Tool). If your prompt changes to an @, you are in the ODT. If this happens, hit p to resume.

3) The original notes mention that the Pro-350 expansion cards may need to be in a particular order for the installation to work. I have gotten BSD to install with a slightly different set of cards in a different order, but believe that the DECNA card MUST be in slot 4 (slots are numbered from 0 – 5, left to right) or not present in order for the installation to boot from the hard drive. I do not have a DECNA card to test this theory (I can’t seem to find one), but I originally had a 256KB RAM expansion card in slot 4 and this is the error I received when trying to boot from the hard drive:


dc0: addr=1C:0:FF:AA:0:1
pc=21132 ps=30304
panic: trap

In order to get by this error, I moved the 256KB RAM expansion card from slot 4 to slot 5. So the order of my cards became:

Slot Card
0 RD51 Controller
1 RX50 Controller
2 Screen Bitmap
3 Extended Screen Bitmap
4 Empty
5 256K RAM Expansion

This worked, but I lost 256KB of memory, presumably because BSD wasn’t using the card in slot 5. So I removed the Extended Screen Bitmap card from slot 3, and put the 256KB RAM expansion in its place. This gave me the additional 256KB of memory that is needed to do anything useful with BSD once the system boots. So the short of all this is to follow the original notes and arrange your cards in the order specified, which is:

Slot Card
0 RD51 Controller
1 RX50 Controller
2 Screen Bitmap
3 256K RAM Expansion
4 DECNA Ethernet Controller
5 Empty?

I’m sure the system can be reconfigured to use a different card order, but for installation, use the above order.

4) When restoring volumes, it is OK if you put the wrong disk in by accident as the system will inform you. If you put the wrong disk in for the first set of a volume, you will receive this error:

Tape is not volume1

If subsequent disks are inserted in the wrong order, you will receive this error:

Wrong tape. Try again
Mount volume x


Text in italics are actions or comments.  Entries in bold should by typed by the user.

Connect the cable between Pro-350 printer port and PC serial port
Start PC terminal program - use comm settings 9600,N,7,1
Put maintenance0 disk in floppy in drive 0 - make sure it isn't write-protected
Power on Pro350
Until told otherwise, all input is from the terminal, not the Pro-350

: r5(0,0)rdfmt format hard disk
Drive type (RD51 - 0 or RD50 - 1) ?0
Format begins...
It takes about 7 minutes to format the drive
Format and bad scan done
Total bad blocks = 0

: r5(0,0)unix boot floppy to single user
Couldn't exec /etc/autoconfig
Configuration setup error
Display shows:

mem = 426880

Berkeley UNIX (Rev. 2.9.11) Mon Sep 9 12:28:43 EDT 1985

# /etc/mkfs /dev/rrd0a 2240 create / filesystem
isize = 704
m/n = 5 10

Insert root1 disk in floppy drive 1
# restor rf /dev/rr51 /dev/rrd0a restore / filesystem
Last chance before scribbling on /dev/rrd0a.
Press enter
Mount volume 2
Insert root2 disk in floppy drive 1 - press enter
Mount volume 3
Insert root3 disk in floppy drive 1 - press enter
Mount volume 4
Insert root4 disk in floppy drive 1 - press enter
Mount volume 5
Insert root5 disk in floppy drive 1 - press enter
End of tape

# /etc/fsck /dev/rrd0a verify / filesystem
** Checking /dev/rrd0a
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Free List
172 files 1543 blocks 651 free root1 - root5
184 files 1905 blocks 289 free root0 - root5

# /etc/mkfs /dev/rrd0c 6528 create /usr filesystem
isize = 4176
m/n = 5 10

Remove root5 disk from floppy drive 1
Insert usr1 disk in floppy drive 1
# restor rf /dev/rr51 /dev/rrd0c restore /usr filesystem
Last chance before scribbling on /dev/rrd0c.
Press enter
Mount volume 2
Insert usr2 disk in floppy drive 1 - press enter
Mount volume 3
Insert usr3 disk in floppy drive 1 - press enter
End of tape

# /etc/fsck /dev/rrd0c verify /usr filesystem
** Checking /dev/rrd0c
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Free List
200 files 786 blocks 5479 free usr1 - usr3
1043 files 4982 blocks 1283 free usr00 - usr15

# sync
# sync
Power off Pro-350
Remove usr3 disk from drive 1 floppy

Power on Pro-350
: rd(0,64)unix boot from hard disk

Display shows:

For root1 - root5


Berkeley UNIX (Rev. 2.9.54) Thu Nov 14 12:32:20 EST 1985 root1 - root5
Berkeley UNIX (Rev. 2.9.55) Tue Dec 10 13:56:37 EST 1985 root0 - root5

rd 0 csr 174000 vector 300 attached
r5 0 csr 174200 vector 310 attached
Erase=^?, kill=^U, intr=^C

From this point on, all input is from the Pro-350, not the terminal

# dd if=/rdboot of=/dev/rrd0h count=17 install hard disk boot
17+0 records in
17+0 records out

# passwd root set root password
New password:
Retype new password:

# date 9906201733
Sun Jun 20 17:33:00 EDT 1999

Remove maintenance0 disk from floppy drive 0
Disconnect maintenance cable

# shutdown +1 bring the system to single-user mode
# sync sync the disk
# sync
# reboot reboot the machine

Display shows:


Berkeley UNIX (Rev. 2.9.54) Thu Nov 14 12:32:20 EST 1985 root1 - root5
Berkeley UNIX (Rev. 2.9.55) Tue Dec 10 13:56:37 EST 1985 root0 - root5

rd 0 csr 174000 vector 300 attached
r5 0 csr 174200 vector 310 attached
Automatic reboot in progress...
Sun Jun 20 17:38:20 EDT 1999
/dev/rd0a: ???
/dev/rd0a: ???
Root was modified-- rebooting.

System reboots


Berkeley UNIX (Rev. 2.9.54) Thu Nov 14 12:32:20 EST 1985 root1 - root5
Berkeley UNIX (Rev. 2.9.55) Tue Dec 10 13:56:37 EST 1985 root0 - root5

rd 0 csr 174000 vector 300 attached
r5 0 csr 174200 vector 310 attached
Automatic reboot in progress...
Sun Jun 20 17:40:17 EDT 1999
/dev/rd0a:172 files 1543 blocks 651 free
/dev/rrd0c: 200 files 786 blocks 5479 free
Sun Jun 20 17:42:08 EDT 1999
Mounted /usr on /dev/rd0c

Berkeley Unix 2.9BSD

;login: root

Erase=^?, kill=^U, intr=^C

There you have it! BSD 2.9 running on a Pro-350!


Edit these files as necessary:

/etc/rc set hostname to match /etc/hosts
/etc/ttys enable login on tty01 by changing 09tty01 to 19tty01

Note that the F11 key acts as ESC for vi

Installing BSD 2.9 on a DEC Pro-350, Part II – Choosing a distribution

Before I explain the rest of the installation process, I need to explain the haphazard order of the images as distributed in the box#0, box#1 and box#2 directories. The notes on this subject are vague, and to determine the differences myself, I had to perform many installations and comparisons against those installations to figure out exactly what is in each image. Here’s what I discovered.

Maintenance Disks

There are 3 maintenance images – box#0/maintenance0.img, box#0/maintenance1.img, box#2/maintenance2.img. By performing an install with these 3 different images (but keeping the root and user images the same) and capturing the output of “ls -lR /”, I have concluded that all 3 images are identical. If for no other reason than simplicity and consistency, use maintenance0.img for all installs.

Root Disks

In box#0, there are 6 root images – root0.img through root5.img, and in box#2, there are 5 root images – root1.img through root5.img. Again, by installing both of these, I have determined what is different.

The 5 image root set has three files that don’t exist in the 6 image root set:


The 6 image root set has 12 files that don’t exist in the 5 image root set:


Finally, these files are found in /etc in the 5 image root set, but /lib in the 6 image root set:


Based on this, I would recommend installing the 5 image root set, as /bin/passwd is essential and /bin/ed will be very useful.

Usr Disks

This one is easy. There are 16 usr images named usr+k??.img between box#1 and box#2, and 3 images named usr?.img in box#2. The difference between these two is explained in the notes – the usr+k??.img images contain the kernel and networking sources. I have verified this by installing both of them. The usr_k??.img images create a /usr/net directory with sources in it, whereas the usr?.img images do not.

Based on the above, if you do not wish to compile the kernel and/or have a limited number of 5.25″ floppy disks, I recommend installing the 3 image usr set. If you have plenty of 5.25″ floppy disks lying around and need to compile the kernel, use the 16 disk set. Note that if you start with the 3 disk set, you can always restore the 16 disk set later (at the price of overwriting the contents of /usr).

So to sum it up, here is what I recommend installing:


That accounts for all the disks, except box#2/unknown.img. The notes say this is supposed to contain the PRO/COMM terminal emulation software, but I’ve tried twice to create this disk and both times all that was there was a lost+found directory.

Now onto Part III – the actual installation.

Installing BSD 2.9 on a DEC Pro-350, Part I – Preliminaries

As a collector of DEC hardware, I recently acquired a couple of Pro-350’s to add to my collection. Now anyone familiar with the Pro-350 probably recalls that the default shipping operating system was P/OS (Professional Operating System), or, as some have been known to call it, the Piece of Sh*t Operating System. P/OS was basically a stripped-down, menu driven version of RSX-11M. The Pro-350 may have shipped with P/OS, but other operating systems were known to run on it as well. Among them are RT-11, Venix, and 2.9BSD.

Assuming you still have access to a DOS machine with a 5.25″ floppy drive and a copy of Teledisk, installing P/OS and Venix on the Pro-350 is trivial. You can find RX50 images for P/OS and Venix here:

or here:

Pro-350 Venix 1.0 TD0 images

The latter includes the proacc.c source code needed to generate the access number needed during installation, as well as a pre-compiled 32-bit Linux binary.

Installing these images to 5.25″ floppies using Teledisk is easy, so I won’t document the process here. You can find Teledisk here:

Teledisk 2.16 for DOS

The problems with P/OS may be many, but for me, lack of a command-line is the real problem. I’ve heard there is a PRO/Toolkit option that gives more functionality, but I’d prefer a more traditional UNIX Operating System. Venix fits the bill, but doesn’t have network support. So the best options for a UNIX Operating System with network support is 2.9 BSD or ProV7M, and the latter is hard to find. I opted to install BSD, as the images are readily available at the Unix Heritage Society site:

Browsing the archive, the first thing you will notice is the site hasn’t been updated for quite some time, and so documentation is lacking. The images themselves aren’t very organized either – you will find what appears to be duplicate copies of some images among the various sub-directories.

The information needed to install these images can be found in the documents sub-directory as a bunch of hand-written notes scanned into TIF images. Reading through the notes, the first thing to do is make/acquire a cable to use for terminal interaction with the Pro-350 from a PC. After that, you need to create a bootable floppy from the maintenance0.rx.50 image. As mentioned in the notes, due to an error in their creation, these images fall slightly short of the size they should be. Fortunately, an acquaintance of mine had corrected versions of these images and those are what I used as the basis for my work. I believe the default images will work, despite being shy a few bytes, but I didn’t try them out. You can find the fixed verisons here:

Pro-350 size corrected BSD images

Now creating the boot disk turned out to be harder than I thought. There are a few places on the web that document how to create an RX50 floppy from linux. One such site is the Xhomer Project Pro-350 emulator site:

In the “Reading and Writing RX50 Floppies” section of the site, you will find directions on how to create an RX50 floppy from Linux using the setfdprm utility. Unfortunately, this did not work for me. Every RX50 floppy I created using setfdprm and dd on Linux failed to boot in my Pro-350. I know the procedure works for other folks, but it wasn’t working for me. I tried two machines, one a Pentium 4 class and the other a Pentium I, as well as two Linux distributions – Debian and Slackware. Both failed to create a bootable RX50 floppy.

After a week of messing with floppy creation under Linux, I began to suspect that Linux was the cause of my problems. I say this because I was able to create P/OS and Venix disks under DOS from Teledisk images with no problem, yet I wasn’t able to create a single working floppy under Linux. After some research, I learned about a DOS utility called ImageDisk ( which was written as a replacement for Teledisk because Teledisk is no longer supported. Also, ImageDisk claimed to be more robust, with an open-source image format rather than the proprietary format used by Teledisk. So I downloaded ImageDisk and played around with it. Like Teledisk, it could read a floppy and create an image from it, or vice versa. When I learned that ImageDisk would also store the geometry of the floppy disk in the image, an idea occurred to me – why not let ImageDisk create an image file from my bootable Venix disk? That way, I could examine that image with ImageDisk and find out what geometry was used by Teledisk to create the Venix floppy. So I did just that. This is what I learned about the geometry of the Venix image:

300k DD 10 sectors, 512 bytes per sector, read gap = 7, format gap = 14

Now most of these parameters line up with what setfdprm in Linux was set for, except for the gap parameters. In Linux, those values were 20 and 24. Also, my research on RX50 floppies showed the frequency to be 250k, not 300k. So when I created my images with ImageDisk, I had to change those parameters accordingly.

So armed with this new knowledge, I took the BSD maintenance0.img raw image and ran it through the ImageDisk utility BIN2IMD to create an ImageDisk image from a raw binary image. The command to do that is:

BIN2IMD maintenance0.img maint0.imd /1 n=80 dm=4 ss=512 sm=1-10

Basically, /1 means single sided, n=80 means 80 cylinders, dm=4 means 300k, ss=512 means a sector size of 512 and sm=1-10 means create a disk with 10 sectors per track.

Once I had the maint0.imd image, I then used ImageDisk to create a floppy from that image. Before the creation process, I had to change the following settings in ImageDisk:

Sides: One
Double-step: Off
R/W gap: 7
Format gap:14

I then selected write disk from image and the resulting floppy booted in my Pro-350, displaying the 40Boot prompt as documented in page02.tif.

With this knowledge, I think if I were to change the Linux setfdprm parameters to match those of ImageDisk, I could create working RX50 floppies under Linux. The problem is setfdprm is woefully undocumented. From Xhomer and related sites, I have learned that this is the recommended format of the setfdprm string to use for creating RX50 floppies:

Size 800
Sectors per track 10
Heads 1
Tracks 80
Stretch 0
R/W Gap (Gap 1) 0x14
Data Rate 0x01
Stepping Rate (Spec1) 0xdf
Format Gap (Gap 2) 0x18

Clearly R/W Gap and Format Gap map to the same values in ImageDisk, but I’m not sure what the Stretch, Data Rate and Stepping Rate values map to, nor do I know how to specify the frequency. I’m sure with the right values, I could create a usable floppy under Linux. What’s strange is how these values must have worked for those who published the information, but not for me.

That’s it for this post – stay tuned for Part II, where I demystify the various images in the 2.9 BSD distribution.

UltraSPARC 60 Timeout waiting for ARP/RARP packet

So my UltraSPARC 60 kept wanting to boot from the net despite the boot-device being set properly. Turns out that the diag-switch? was set to true, presumably because an invalid checksum was detected & so the default values were loaded:

Incorrect configuration checksum;
Setting NVRAM parameters to default values.

Sure enough, my ethernet and host id were lost:

The IDPROM contents are invalid

(2 X UltraSPARC-II 450MHz), No Keyboard
OpenBoot 3.29, 1024 MB memory installed, Serial #0.
Ethernet address 0:0:0:0:0:0, Host ID: 00000000.

To fix the boot issue, I simply reset the diag-switch?:

{0} ok printenv diag-switch?
diag-switch? =        true

{0} ok setenv diag-switch? false
diag-switch? =        false

To fix the address and host id:

{0} ok 57 f mkp
{0} ok 8 0 20 b8 96 ef 80b896ef mkpl
Ctrl-D Ctrl-R
{0} ok
{0} ok .idprom

If you see a Copyright message after pressing Ctrl-D Ctrl-R, the sequence didn’t work and should be repeated. When successful, the .idprom command will show the address you just entered.

Of course, I didn’t have my original MAC address memorized, so I just based them off another UltraSPARC I had lying around. In the end, so long as it’s in the correct format and unique in your network, I don’t think it matters.

Finnally, I rebooted the system:

{0} ok reset-all

Note that in my case, it turned out that the NVRAM battery was dead, so powering off the system caused the problem to reoccur. But if you don’t power off the system, the above commands will get you up & running until you can replace the NVRAM. I haven’t ordered a new NVRAM yet, but my research shows it is Sun part #525-1430.