Microsoft XENIX 286 BASIC Compiler

(This is a guest post by Antoni Sawicki aka Tenox)

I have recently acquired this artifact:

It’s the Microsoft BASIC compiler for XENIX 286 Operating System. Compiler as opposed to just BASIC interpreter, it can produce executable a.out files, similar to C compiler for example.  

Carefully removed the shrink wrap. Inside were couple of 5.25″ floppies, registration card and a manual:

Interestingly the 32 year old disks read just fine on a first attempt. I need to start backing up important files to 5.25″ floppy disks as they seem to outlast everything else.

Thanks to efforts of Michal Necasek from OS/2 Museum now you can run Microsoft XENIX 286 in Virtual Box

The disks can be installed in to XENIX running on Vbox following a few simple steps:

tar xvf /dev/fd0
./msinstall /dev/fd0

Upon installation you invoke the compiler like this:

bascom demo.bas
./a.out

And it produced an a.out executable which worked perfectly fine.

It’s fun to write BASIC code in vi editor, which I just realized I never done before.

Curiously the compiler also worked on the brand spanking new Xenix 2018, or rather I should call it Open Server 6, which you can download here (includes an evaluation license).

The BASIC compiler is available for download from archive.org along with the manual in pdf.

OS Archive dot org

(This is a guest post by Antoni Sawicki aka Tenox)

Dear lazyweb. I have been collecting operating systems and system software since 1991. My archive was always intended to be eventually made publicly available. A few years ago I began researching various hosting options. In the end I decided to settle on archive.org. Nothing beats free and maintained by someone else.

The whole hoard is ver very large and it will probably take a long time to upload. Due to a popular demand I started with smaller items mostly sought after. Enjoy.

QNX including your all time favorite QNX 2.x

Microsoft XENIX and OEMs such as Altos, Apple, IBM, Intel, Olivetti, Sperry, Tandy and of course our all time favorite SCO. Plus all these juicy apps.

ISC / Kodak / SunSoft Interactive UNIX

Microport

…and others.

Check back in future for more uploads.

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

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)

Hack

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 \
     fsckflags=-y

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..
MICROSOFT STRIKES GOLD.