This is probably the most significant Xenix post I’ve made since the old days when I managed to get Xenix running in Qemu all those years ago.
What has long been a frustration with the beleaguered Xenix community is that although there was a TCP/IP package for Xenix (and a much required streams package…) it only worked with a handful of ethernet cards. And all of them were early 3com’s. While the world was using NE2000’s on just about everything, the most common ethernet board Xenix would talk to was the 3c503, which is getting harder and harder to find as the years go on by.
Now I ended up having to download the source to mame 0.151 (mame0151s.zip) and building it on OS X. Of course remembering to alter the makefile to include the ‘USE_NETWORK=1’ statement, and build for Mess. And just as it looks like something out of SIMH, Mess makes use of libpcap which means that you are *unable* to send/receive on the host computer. (OS X & Win32 binaries). And of course you’ll need a ROM & Xenix diskettes.
Installing Xenix is pretty straightforward as long as you know your system key, and how to navigate the mess UI without rebooting mess or exiting by mistake (scrolllock on the PC, function/Delete on OS X).
First create a hard disk, and as always it should be ~500MB max.
Naturally you’ll need to setup the CMOS, for your memory size, and the hard disk. The BIOS I’m using didn’t autodetect the IDE drive, but it doesn’t matter as I know it’s characteristics as I created it.
From there Xenix was a pretty straight forward deal. Mess has good floppy drive emulation so it just worked. Adding TCP-IP was just as involved, and all went well. When it came time to install TCP & the network driver, remember to use thinnet, as the thicknet transceiver isn’t connected (as it would seem). The 3c503 is softset, so I went with IRQ 5, port 0x300, and thinnet, and it works fine for me!
Remember you will not be able to attach to it from your computer. Instead you must attach from another computer.
Also MESS tries to emulate true to hardware so it’ll be just as slow on MESS as it was on the real hardware. I suppose you could go with the at386 driver, but yeah it’ll be slow. The current at586 driver has issues booting from the hard disk, and I didn’t mess with it too much as Xenix is known to have issues with some Pentium systems.
Although I think the next place for adventure is the emulated Adaptec 1542CF.
Building this was.. . Involved, but I finally got it to link! Oh happy days! But then disaster struck!
Not enough parameters? And the worst thing is that I got this error EVERYWHERE… Googling this has become useless as everyone just says google it, so google made all that turn into a negative feedback loop! Or even useful advice like ‘upgrade your client, LOL’, but after going through an hour of `fun` getting this to run on Xenix I wasn’t going to try a new version of the source just yet.
Going through the source, looking for the USER command and where its used and found this:
And of course the WDC in question is one of these ‘new fangled’ LBA disks. Booting up on LBA mode it looks like this:
hda: WDC AC32100H, 2014MB w/128kB Cache, LBA, CHS=1023/64/63, DMA
The other mode, is CHS which of course gives us this:
hda: WDC AC32100H, 2014MB w/128kB Cache, CHS=1023/64/63, DMA
So I thought I could just ‘override’ the disk parameters under Xenix, and tell it, that its 1023/16/63. Sure that worked for formatting but booting? nope!
I pulled up the data sheet and it informs me of this as its native capabilities:
Recommended Setup Parameters
Landing Zone 4092
Jumper Setting Information Six Pin Drive
But how to get there? What was worse, is that doing a probe under MS-DOS I kept on seeing output like this:
And yet trying to override the geometry with these parameters only lead to disaster. Clearly what these programs were telling me were conflicting, what I needed was something to just tell me what it sees. So I thought I’d use Linux.
But not some 8GB download, because that’d take far too long. No weighing in a just over 2MB is the specialized ‘doom speaker sound‘ distribution. Its UMS DOS based, meaning that you can just unzip it onto a FAT drive, without any formatting/partitioning, and boot from MS-DOS into Linux. So sure enough this is what I saw:
First, yes I have two disks, I’m only interested in the ide0/hda. but as you can see its translating. I found the same result for both CHS/LBA. The only thing I didn’t notice for some reason was an option to turn drive translation OFF in the BIOS. Oops!
So now I was able to boot the Xenix install, and it finally saw what it should have seen!
then tell it that the disk was only 1024 cylinders, as mentioned in the usenet posting, along with changing the landing zone. I knew it was going to work so I figured I’d make a separate /u filesytem for the heck of it. Divvy takes me back to doing disklabels on 4.3 BSD
With that all said and done, it was time to reboot, and it booted from the hard disk! I could then complete the install. After that was out of the way I noticed that it was not mounting the /u filesystem!
The following entry needed to be added to the /etc/default/filesys file:
Now it mounts up like you’d expect! If you plan on making the /u for peoples home directories don’t forget to alter the /etc/default/mkuser file!
I have no idea if this works on a 1TB IDE disk, but I’d imagine if you can somehow get it into the limited geometry Xenix can understand, it should work…. Of course why you’d want to run a Unix that can only address 16mb of ram is beyond me…
Now that it’s booting, the next step will be to get it onto the internet….
That’s right! from the homepage you can find screenshots, and download links, and ready to run systems too!
Pretty snazzy as the major hurdle with these old UNIX’en is that they talk directly to the old XT disk controllers, not using the BIOS.. The AT & beyond we got lucky as even in 2012 PC’s still emulate the old WD-1003 controller…
Not that I could imagine *WHY* you would want to run the 8088 version of Xenix (or the 286 version too for that matter) but rest assured you now can.
Whats this? Are we actually going to install?! This is amazing!
So let’s go through with the install!
I’m going to select the American keyboard. Maybe you want something different?
Next we select the standard IDE controller.
It’s a VM so go ahead and overwrite my empty disk…
And this shows that it sees my 200MB IDE disk correctly. I guess you could play with larger disk images and verify that these results look sane. I recall that if you pick something too big, this part will give some exotic error like this:
And blammo. This is why we use a small disk!
I’m not even entertaining dual booting in a VM, so we go all the way here.
And we quit as this is just fine.
Our little virtual disk won’t have any bad sectors so we quit.
Ok, ok, Xenix wants *SOME* tracks, so I let it have the ‘suggested’ 15. Maybe it’ll feel better about it.
And again I’m going with some default swap space.
And I’m going to use a big filesystem, no separate /u filesystem.
Everything is fine, no changes.
Then it’ll make the filesystem which will take a minute or so, then prompt for the serial number.
And then the activation key.
Now we are done with preparing the hard disk, so you can stop Qemu.
Ok, we left off from part one, having prepared the hard disk. Now we are going to boot off the hard disk like this:
qemu.exe -L pc-bios -m 16 -hda xenix.disk -fda b1
Now if we go ahead and try to install normally it’ll fail like this:
Which isn’t good at all.
Instead, what we are going to do is hit the delete key breaking us to an install shell.
So at the shell, we are going to fix the install/rinstall devices to force them to the 3 1/2″ high density diskette like this:
ln -f fd0135ds18 install
ln -f rfd0135ds18 rinstall
Now we can proceed with the install, and since diskette B1 is already in the drive, we just hit enter. Once the B diskette is copied, the install script will prompt for a root password.
Now it’s time to pick a timezone, and yes, I’m in North America.
And sadly, yes we do DST. (*NOTE being this old, you can bet the offsets are all wrong for DST, I’m sure there is some deal to update the files, but I’m not sure of it off hand. But it’d be nice to update the timezone stuff for 4.2BSD as well).
Let’s continue with the install.
And let’s finish the operating system install.
Now we’ll need the X1 diskette…
So far we’ve not needed to swap diskettes live under Qemu, but I thought I’d remind people that it’s a simple matter of hitting ctrl+alt+2 to bring up the Qemu console, then typing in:
change floppy0 x1
To verify you’ve even done this correctly, you can issue a “info block” command, and you should now see the floppy0 device referencing the x1 file.
Once you are done, you can switch back by hitting ctrl+alt+1
We are going to install one or more…
All of them as a matter of fact.
I’m going to fast forward a little here, and process all the X diskettes… there isn’t much to see here, it’ll prompt for a diskette, mount it in the qemu console, and switch back and proceed.
Yes this is a root only install, KISS (Keep it simple stupid) as they say.
Now it’ll prompt for the backup user password, then start to compress man pages. Needless to say on a fast computer this takes mere seconds… Not so back in the day on a 386!
Now it’ll prompt for the sysadm password, generate the termcap, then it’s time to swap series to the N series diskettes..
Now onward to N2.
Time to license & activate the system. Again.
Ok we are done.
And there we go, Xenix is installed!
A quick reboot, and we are ready to go!
So looking back, we’ve just done the impossible, we’ve installed Xenix on Qemu.