Frequently Asked Questions for: AOS on IBM RT systems

This is a reworked and HTMLized version of Mark Whetzel's (MW) RT pages, as of Fri Jul 1 07:08:57 CDT 1994.
The original can be found here. -MK

A.01 What is AOS?

--
Submitter: Keith Moore
Date: Mon Apr 12 17:14:45 1993

The IBM Academic Operating System is a port of 4.3 BSD to the RT, with a few extra features (like NFS) that weren't included in 4.3 BSD. It was only distributed to universities as an alternative to AIX.
--

A.02 What is the difference between AOS and AIX?

AOS is a port of BSD 4.3 directly to the RT hardware, whereas AIX V2 is a SYSV base system with BSD 4.2 merged and additional BSD 4.3 support added later. AOS does not require VRM, as it is in direct control of the hardware.

[ More needed on the differences. - MW ]

A.03 How do I get AOS?

--
Submitter: Keith Moore
Date: Mon Apr 12 17:14:45 1993

You can't. At least, not unless the organization you work for is already one of the licensees...perhaps in another department. Then you just have to find them and convince them to give you the tapes and the manuals.
--

A.04 What is the current version of AOS?

The last release was dated December 22, 1988.
Note:
More is needed on information related to AOS releases and patches.

[ I'm leaving this following query intact in this section in hopes of discovering more about other releases of AOS and information. - MW ]

--
From: davids@engin.umich.edu (David Snearline)
Subject: Dec. 1990 AOS release for 6152
Date: 7 Sep 93 02:25:39 GMT

Does anyone have the Dec. 1990 release tape of AOS for the 6152 RT (crossbow in PS/2 Academic System)?

I currently have the Sep. 1988 release, and am looking for the later release so as to put multiple crossbow cards in a single [ 6152 ] RT. I've checked around here, but the Dec. 1990 AOS we have left is for the 6150 style RTs -- no PC code. No idea where the 6152 tape went...
--

A.05 What patches are available for AOS? How do I get them?

--
Submitter: Keith Moore
Date: Mon Apr 12 17:14:45 1993

Several patches were made available by IBM through their uucp machine ibmsupt, and later on, to the Usenet newsgroup comp.sys.ibm.pc.rt. (Sorry, ibmsupt was shut down a long time ago.)

ftp.cis.ufl.edu (128.227.100.252) replaces bikini.cis.ufl.edu (now out of service) and has most of the "official" patches, along with a few other files, available for anonymous ftp in the directory "ibm-rt-fixes". See the file "Index" in that directory for descriptions.

Also check out jim.ultra.nyu.edu, directory "rtfixes". This contains official patches to AOS plus several other random files full of useful info.

Also, several 4.3BSD patches were posted to the Usenet newsgroup comp.bugs.4bsd.ucb-fixes; these are available for anonymous ftp from vangogh.cs.berkeley.edu, directory 4.3/ucb-fixes, and also from several other sites.
--

A.06 What are the different C compilers for AOS?

--
Submitter: Keith Moore
Date: Mon Apr 12 17:14:45 1993

Three different C compilers came with the Dec 1988 release of AOS:

Each of the compilers is useful sometimes; none of them suffices for every occasion. The MetaWare compilers generate reasonably good code, but are notorious for optimizer bugs. They recognize a language which is almost, but not quite, ANSI C. (One of its worst sins is #defining __STDC__ when the language it accepts is not ANSI C; adding a -U__STDC__ to the command line cures all kinds of evil.) Pcc is sometimes good for compiling old code that the MetaWare compiler barfs on, when you don't care about performance.

In fact there were at least three versions of hc2.1 available at various times...hc2.1n was supplied with the Dec 1988 system, and hc2.1s and hc2.1y were available via uucp from ibmsupt later on.

Hc2.1n is buggy enough that you'll have trouble, say, building a working copy of X11R? with it. Unfortunately, even the latest of these (hc2.1y) had bugs in code generation which caused kernels based on this compiler to break. In general, however, you can use hc2.1s or hc2.1y.

To find out what version you have, compile a small program and look at the resulting .o file. Like so:

   echo 'main() {printf ("hello,world\n"); }' > foo.c
   cc -c foo.c
   nm foo.o | grep hc2.1
...and you'll see something like
   00000000 A .oVhc2.1y
Here's a small hack that allows me to use these interchangeably:
   #include <stdio.h>

   /*
	   * hc-hack.c
	   *
	   * This program allows you to install several different versions
	   * of hc and run each of them by name (e.g. "hc2.1s").
	   * This is useful because no version of hc yet produced compiles
	   * everything without significant brain damage. 
	   * To install, copy this binary to somewhere in the
	   * search path (perhaps "/usr/bin"), and create a link for every 
	   * version of hc you have (example: "ln hc-hack hc2.1n").
	   * Then create a directory for each version of hc in /usr/lib
	   * (example: /usr/lib/hc2.1n), and place the appropriate versions
	   * of hc1com and hc2com in that directory.
	   * One of these directories will probably contain links to the copies
	   * of hc[12]com in /usr/lib, which hc uses by default.
	   *
	   * Now you can run hc2.1n, hc2.1s, or hc2.1y as you need to.
	   */

   main (argc, argv)
   char **argv;
   {
	      char *basename;
	      char *strrchr (char *, char);
	      char **new_argv;
	      char hc_lib_dir[1024];
	      char *calloc (unsigned int, unsigned int);
	      int i;

	      basename = strrchr (argv[0], '/');
	      if (basename == NULL)
	          basename = argv[0];
	      else
	          basename = basename + 1;

	      sprintf (hc_lib_dir, "-B/usr/lib/%s/", basename);

	      new_argv = (char **) calloc (argc + 2, sizeof (char *));
	      new_argv[0] = "hc";
	      new_argv[1] = hc_lib_dir;
	      for (i = 1; i < argc; ++i)
	          new_argv[i + 1] = argv[i];
	      new_argv[argc + 1] = NULL;

	      fprintf (stderr, "%s", new_argv[0]);
	      for (i = 1; i < argc + 1; ++i)
	          fprintf (stderr, " %s", new_argv[i]);
	      fprintf (stderr, "\n");

	      execv ("/bin/hc", new_argv);
	      perror ("/bin/hc");
	      exit (1);
   }
In addition to the compilers above, gcc 2.x can generate code for the RT. It is availble for anonymous ftp prep.ai.mit.edu, directory pub/gnu, and from other GNU/FSF archive sites.
--

A.07 How do I make new SAUTIL and Installation Miniroot diskettes?

--
Submitter: Keith Moore
Date: Mon Apr 12 17:14:45 1993

Become root and do the following:

   cd /usr/sys/dist
   make MINIROOT # creates a MINIROOT kernel by munging a copy of
                 # the system GENERIC kernel config file and doing a make. 
                 # It takes a long time.
   make diskette # copies the necessary files for an Installation
                 # Miniroot diskette to a 1.2 Mbyte 5 1/4 inch floppy disk.
   sautil        # creates a bootable standalone utilities disk on a
                 # 360K 5 1/4 inch floppy disk.
Both make diskette and sautil will format the disk for you. Be sure and use the right kind of disk for each.
--

A.08 Where can I find an AOS device driver for:

A.09 - Where can I get X11R5 for AOS and how do I get it running?

[Someone needs to fill this one in...particularly the stuff about the different X servers like the one for the megapel that didn't come with the MIT code. - MW ]

A.10 What other operating systems are available for the RT?

Superseded by A.16

A.11 Using non-IBM ESDI drives with AOS.

Needs filling in. ????? - procedure steps for formatting, adding, management, etc..

A.12 Using a Non-IBM SCSI adapter with AOS.

Using a Non-IBM SCSI adapter and single ended disks is possible with AOS using a different SCSI card, and additional device driver support.

Needs filling in. ????? - procedure steps for formatting, adding, management, etc..

A.13 Modifying AOS to support higher serial port speeds.

--
Submitter: peter honeyman <honey@citi.umich.edu>
Subject: replacement asy.c driver for faster line speeds.

The center for information technology integration at the university of Michigan modified the asy driver to support speeds up to 57.6 kbps. The major changes are:

  1. Simply to drain the fifo into a private buffer before handing characters to the upstream line discipline.
  2. hardware flow control.
AOS source licensees may request driver modifications from: info@citi.umich.edu

A bundle consisting of asy.c and asyreg.h is about 35k. I have not made diffs against the original files.
--

A.14 Creating boot records on ESDI disk drives.

--
Submitter: Mark Dapoz <md@bsc.no>
Date: 19 Feb 94 16:37:54 GMT
Organization: Bergen Scientific Centre, Bergen, NORWAY

In article <0hNMLv=0Bwxd9CQU84@transarc.com> Pat_Barron@transarc.com writes:
>I'm trying to craft an AOS boot block (like /usr/mdec/hd114eboot)
>for a 3rd-party ESDI disk, to boot an RT off of it. All of the boot
>blocks are subtly different, but only in a few bytes (most are
>different from each other in less than 10 bytes). How can I make a
>boot block for a new device? I can't seem to find the sources for the
>boot blocks themselves anywhere - I've looked in /sys/standca which
>seemed to be the obvious place, but found nothing useful. Help?

There are no utilities provided with AOS that let you create the boot blocks. I hacked together the program below when I had to create a boot block for an oddball drive. Perhaps you can use it as a starting point for what you need to do.

/*
   mkbrec.c - build a boot record for the RT for various ESDI disks
		Mark Dapoz (md@bsc.no)
*/

#include <stdio.h>
#include <sys/types.h>
#include <rtio/hdconfig.h>

main(argc, argv)
int argc;
char **argv;
{
	extern char *optarg;
	extern int optind;
	int ch;

	char *progname=argv[0];
	char *model=NULL;
	int pcyl=0, hd=0, sec=0;

	while ((ch = getopt(argc, argv, "m:c:h:s:")) != EOF) {
 	    switch(ch) {
		case 'm':
			model=optarg;
			break;
		case 'c':
			pcyl=atoi(optarg);
			break;
		case 'h':
			hd=atoi(optarg);
			break;
		case 's':
			sec=atoi(optarg);
			break;
		case '?':
		default:
			usage(progname);
			exit(0);
	    }
	}
	argc -= optind;
	argv += optind;
	if ((model != NULL && (pcyl || hd || sec)) || 
	    (model == NULL && (!pcyl && !hd && !sec))) {
		usage(progname);
		exit(0);
	}
	if (model != NULL) {
		if (!strcmp(model, "hd114e"))
			mk_boot_rec(915, 7, 35, 0, 0xb4, 0, 0, 1);  /* hd114e */
		else if (!strcmp(model, "hd70e"))
			mk_boot_rec(583, 7, 35, 2, 0x30, 0, 0, 1);  /* hd70e */
		else if (!strcmp(model, "hd70r"))
			mk_boot_rec(566, 7, 36, 0, 0, 0, 0, 0);     /* hd70r */
		else if (!strcmp(model, "hd310h"))
			mk_boot_rec(1189, 15, 34, 1, 9, 0, 0, 1);   /* hd310h */
		else if (!strcmp(model, "hd310e"))
			mk_boot_rec(1225, 15, 33, 1, 0x2c, 0, 0, 1);/* hd310e */
		else if (!strcmp(model, "hd442c"))
			mk_boot_rec(1412, 15, 36, 0, 0, 0, 0, 1);   /* hd442c */
		else {
			models();			/* unknown */
			exit(0);
		}
	} else
		mk_boot_rec(pcyl, hd, sec);		/* user specified */
}

usage(cmd)
char *cmd;
{
    fprintf(stderr, "%s: [-m model] | [ -c num_cyl -h num_hd -s num_sec ]\n", cmd);
}

models()
{
    fprintf(stderr, "Only the following disk models are known: hd70e hd70r hd114e hd310h\n");
    fprintf(stderr, "                                          hd310e hd442c\n");
}

mk_boot_rec(pcyl, hd, sec, r11, r12, r13, r14, r21)
int pcyl, hd, sec;		/* disk geometry */
short r11, r12, r13, r14, r21;	/* misc reserved values */
{
	struct boothdr hdr;

	bzero(&hdr, sizeof(struct boothdr));

	hdr.boot_check=0x459;		/* constant for ESDI disks */
	hdr.boot_lastcyl=pcyl-2;
	hdr.boot_lasttrack=hd-1;
	hdr.boot_lastsect=sec;
	hdr.boot_sectorsize=512;	/* constant for ESDI disks */
	hdr.boot_interleave=0;		/* mostly constant */
	hdr.boot_sectorcount=(pcyl-1)*hd*sec;
	hdr.boot_formatdate=0;
	hdr.boot_cyl=0;			/* constant */
	hdr.boot_track=4;		/* constant for ESDI disks */
	hdr.boot_sector=1;		/* constant */
	hdr.boot_length=(hd-hdr.boot_track)*sec+15;
	hdr.boot_entry=0;
	hdr.boot_vrmminidisk=0;
	hdr.boot_llp=0;
	hdr.boot_vrmlength=0;

	hdr.boot_ibma[0]=0xc9;		/* IBMA in ebcdic */
	hdr.boot_ibma[1]=0xc2;
	hdr.boot_ibma[2]=0xd4;
	hdr.boot_ibma[3]=0xc1;

	hdr.boot_reserved1[0]=r11;	/* not sure what these are */
	hdr.boot_reserved1[1]=r12;
	hdr.boot_reserved1[2]=r13;
	hdr.boot_reserved1[3]=r14;

	hdr.boot_reserved2[0]=r21;	/* constant? */
	hdr.boot_reserved2[1]=0x00;
	hdr.boot_reserved2[2]=0x00;

	write(1, &hdr, sizeof(struct boothdr));
}

--

A.15 How is memory reported/used with AOS.

--
Submitter: Roger Florkowski
Subject: Why does my RT see only 6M out of 8?
Date: 27 Jun 94 07:30:26 GMT

> I have an RT 115 with 8Meg of enhanced memory.
> AOS reports that it has 8M installed, but only 6M available!

Lesse, you see something like (but w/ smaller numbers, I have 16 meg in mine) :

Memory summary: total 16384K (0x1000000), available 14020K (0xdb1000)

There is a simple answer..... the kernel takes up 2 meg of memory !!! The number AOS reports for available memory is the amount of memory left *after* the kernel has loaded and finished its initialization.
--

A.16 What other Operating Systems are available for the RT?

At the time of this posting, the following operating systems have been available for the RT processor. Availability of these systems is unknown and unfortunately problematic.

[ This section always needs more work! - MW ]

X.01 Acknowledgements and copyright information.

This file is provided AS IS with no warranties of any kind as to the usefullness/correctness of these procedures/questions. The author shall have no liability with respect to the infringement of copyrights, trade secrets or any patents by this file or any part thereof. In no event will the author be liable for any lost revenue or profits or other special, indirect and consequential damages.

IBM, AIX, AT, XT, RT, RT PC and RT Personal Computer are trademarks of International Business Machines Inc.
UNIX is a registered trademark of American Telephone & Telegraph in the United States of America and other countries.
Any other trademarks not specifically mentioned are owned by their respective companies.

X.04 Credits for AOS:

The following people have either submitted articles for inclusion, made suggestions, or had parts of old articles included within re-arranged information. I wish to thank them for their assistance. If you want your name dropped please let me know. - MW

Keith Moore               <moore@cs.utk.edu>     BITNET: moore@utkvx
Mark Dapoz                <md@bsc.no>
Peter Honeyman            <honey@citi.umich.edu>
Roger Florkowski          ~!cs.utexas.edu!taliesin!roger
Christopher J. Vandemore  <vandemor@notrump.mis.tandem.com>

Last Update: 20-Oct-2013, M.Kraemer