Not that I hang out on IRC anymore

But a ‘fixed’ version for Xenix was requested.

Apparently lots of IRC servers have slightly changed their syntax, which prevents ircII-4.4 from working.

It’s a simple fix.

In server.c, the the last line of the procedure login_to_server should be:

send_to_server(“USER %s 8 * : %s”, username,realname);

That’s it!

ircII-4.4 on Xenix 2.3.4

ircII-4.4 on Xenix 2.3.4

For Xenix users, you can download the binary tar here.

As for how you’ll get it working, well…

Virtual Xenix & the internet

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.

3com network card

3comB network card

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.

But right now none of this matters.

I was looking at this article on setting up Apollo Domain UNIX, on MESS.  And apparently it will do networking!  Which is cool, so I poke around MESS, and what do I see? 3c503.c. Could it be true?

Now I ended up having to download the source to mame 0.151 ( 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.

chdman.exe createhd -o xenix.chd -chs 1015,16,63
chdman – MAME Compressed Hunks of Data (CHD) manager 0.149u1 (Aug 10 2013)
Output CHD: xenix.chd
Compression: none
Cylinders: 1015
Heads: 16
Sectors: 63
Bytes/sector: 512
Sectors/hunk: 8
Logical size: 523,837,440

then with the disk in hand, I just setup a 486 like this:

./mess64 at486 -harddisk1 xenix.chd -isa2 3c503 -ramsize 8388608 -floppydisk1 xenix/n1.vfd

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!

mess xenix networking

Xenix TCP/IP in action, inside of MESS!

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.

Hack 1.0.3 for Xenix (i386)


I figured that since I could build hack for some ancient 4BSD flavors that I should be able to build hack for good old fashioned Xenix.

And it all seems to work as it should!

I used the source from here, and only had to do a few small modifications to get it to compile and run on Xenix via GCC 1.37.1 .

You can download my binary, and source mods.

I’ve managed to keep this instance of Xenix up for 19 hours, I was thinking about doing some kind of public access to this system, but I don’t know if people would even be vaguely interested..

But if you want access, I can set you up.

Although all that is of interest is ‘dungeon’, fortune, hack, robots, and ircII …


ircII-4.4 on Xenix

Building this was.. . Involved, but I finally got it to link! Oh happy days! But then disaster struck!

USER Not enough parameters

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:

send_to_server(“USER %s %s %s :%s”, username,
(send_umode && *send_umode) ? send_umode : hostname,
server_list[server].name, realname);

Which looks nice, but according to this as a reference, it doesn’t have enough parameters! So I figured I’d change it to something more like this!

send_to_server(“USER %s 8 * : %s”, username,realname);

this is a bug free client. honest

And as you can see, it works!  Even the version string reports Xenix!

If anyone cares, you can download the binary here.

Installing Xenix on an IBM Aptiva 2176

Yes, $6.98 worth of IBM

So a while back I had scored this IBM Aptiva 2176 for $6.98 .  I had been running OS/2 1.21 on there with great success, but I felt like trying something different.

Something more like Xenix.

The IBM comes with a WDC AC32100H hard disk, 2GB in capacity.  I figured this would be quick and easy to install.

Boy was I WRONG.

First off Xenix has issues with disks bigger than 512MB.  Namely this kind of limitation:

You need to stay within the bounds of 16 heads, 63 
sectors/track, and 1024 cylinders.

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
Cylinders 4092
Heads 16
Sectors/Track 63
Landing Zone 4092
WPC 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:

But the numbers look good!?

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:

Drive translation in action

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!

There we go!

So now I was able to boot the Xenix install, and it finally saw what it should have seen!

4092 Cylinders, 16 heads, 63 sectors/track!

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

bust out the calculator!

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:

bdev=/dev/u  cdev=/dev/ru  mountdir=/u \
     desc="The User Filesystem" \
     rcmount=yes \

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….

PCE can now run PC/IX and Xenix!

That’s right! from the homepage you can find screenshots, and download links, and ready to run systems too!

Xenix on the XT!

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.

Installing Xenix 286 on Qemu 0.14.0

For all the 286 fans, which… I never understand, good news, it turns out that using the same method for installing Xenix 386 works on Qemu 0.14.0!

Booting up a kernel on a 1.2MB floppy disk image I get this:

Notice that the device is fd096ds15, which then corresponds to 2,52 for the major minor. Armed with this information you can install happily. And enjoy your segmentation, and SMLH memory models. Ugh.

I still say the 80286 was the worst thing to mainstream IT.

So I’ll leave you with this gem, from tenox..

Installing Xenix on Qemu 0.14.0 part two.

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


xenix2 1 (1)Now if we go ahead and try to install normally it’ll fail like this:

xenix2 2 (1)


Which isn’t good at all.

xenix2 3 (2)

Instead, what we are going to do is hit the delete key breaking us to an install shell.

xenix2 4

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:

cd /dev
ln -f fd0135ds18 install
ln -f rfd0135ds18 rinstall
cd /
. /.profile

xenix2 5

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.

xenix2 6

Now it’s time to pick a timezone, and yes, I’m in North America.

xenix2 7


xenix2 8

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).

xenix2 9

Let’s continue with the install.

xenix2 10

And let’s finish the operating system install.

xenix2 11

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 fastforward 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.

Installing Xenix on Qemu 0.14.0

That’s right, the impossible (or so it would have seemed years ago) is done. Qemu 0.14.0‘s floppy controller is good enough to install Xenix, although it needs a little help…

You see, booting up by default you get this:

The 'Z' boot error.

The ‘Z’ boot error.

But after going to this page, I had an idea. You see the fd(64) ties into /dev/fd0, however the specific 3 1/2″ high density diskette device id is 60.

So let’s change the default boot strings from:

fd(64)xenix root=fd(64) swap=ram(0) pipe=ram(1) swplo=0 nswap=1000 ronly


fd(60)xenix root=fd(60) swap=ram(0) pipe=ram(1) swplo=0 nswap=1000 ronly

I’ve created a 200MB IDE disk, remembering that Xenix didn’t like big disks, which is why so many people failed installs on actual PC’s.

qemu-img.exe create -f qcow2 xenix.disk 200M
Formatting ‘xenix.disk’, fmt=qcow2 size=209715200 encryption=off cluster_size=0

So let’s boot up Qemu like this:

qemu.exe -L pc-bios -m 16 -hda xenix.disk -fda n1 -no-fd-bootchk

After putting in the manual flags..

After putting in the manual flags..

Looks, good, let’s boot!



Whats this? Are we actually going to install?! This is amazing!

So let’s go through with the install!

xenix 3

I’m going to select the American keyboard. Maybe you want something different?

xenix 4

Next we select the standard IDE controller.

xenix 5

It’s a VM so go ahead and overwrite my empty disk…

xenix 6And 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:

dparam: could not open /dev/hd00: No such device or address ??? dparam: could not open special device: No such device or address ???

dparam: could not open /dev/hd00: No such device or address ???
dparam: could not open special device: No such device or address ???


Cannot open /dev/rdsk/0s0!! Error: fdisk failed. !! Installtion exiting ??

Cannot open /dev/rdsk/0s0!!
Error: fdisk failed. !!
Installtion exiting ??

And blammo. This is why we use a small disk!

xenix 7

I’m not even entertaining dual booting in a VM, so we go all the way here.

xenix 8

Looks good!

xenix 9

And we quit as this is just fine.

xenix 10

Our little virtual disk won’t have any bad sectors so we quit.

xenix 11

Ok, ok, Xenix wants *SOME* tracks, so I let it have the ‘suggested’ 15. Maybe it’ll feel better about it.

xenix 12

And again I’m going with some default swap space.

xenix 13

And I’m going to use a big filesystem, no separate /u filesystem.

xenix 14

Everything is fine, no changes.

xenix 15

Then it’ll make the filesystem which will take a minute or so, then prompt for the serial number.

xenix 16

And then the activation key.

xenix 17

Now we are done with preparing the hard disk, so you can stop Qemu.

xenix 18

I’m going to continue this in part two.