Mini-UNIX Session

Mini-UNIX 6 takes 37 seconds to boot, from turning the Terak on to a # prompt. Mini-UNIX is single-user, so instead of a login: prompt, you get:

RESTRICTED RIGHTS


Welcome to Terak-UNIX

#
As you can see, there isn't a whole lot of room in this lean system for lengthy disclaimers or copyright notices.

The boot volume is generally labeled "qxsys". An examination of its root directory reveals:

# ls -l
total 52
drwxrwxrwx  2 0         512 Apr 29 14:08 bin
drwxrwxrwx  2 0         144 Apr 29 14:08 dev
drwxrwxrwx  2 0         160 Apr 29 14:08 etc
drwxrwxrwx  2 0          32 Apr 29 14:08 lib
drwxrwxrwx  2 0          32 Apr 29 14:08 mnt
drwxrwxrwx  2 0         128 Apr 29 17:14 tmp
-rwxrwxrwx  1 0       22052 Apr 29 14:06 unix
drwxrwxrwx  2 0         144 Apr 29 17:28 usr
#

This operation takes 16 seconds. ls without the -l takes only 12.5 seconds. The extra time for the -l is due not so much to the time it takes to display the characters (though the console display driver is none too fast), but to the extra disk accesses needed to get the extended information.

Unfortunately, ls does not implement the -R (recursive) parameter. In fact, it seems to implement hardly any options at all. So, to examine the full contents of qxsys, we'll have to look at the directories individually:

# ls -l bin

The system is not too useful with only the boot volume, though it is impressive how much fits on one 256K floppy. To do compilation, you need to mount /lib on the second Terak floppy drive. Terak calls this separately-priced item the 8512, and it's also labeled on the front with the designation "DEVICE & UNIT SYMBOL QX1". So, it's not surprising that Mini-UNIX refers to it as /dev/qx1. This operation takes about 14.5 seconds:
# mount /dev/qx1 /lib
#
Let's start the editor and type in a simple benchmark program. The only editor on the system is ed, and it's not exactly a full-blown version. For example, if you type "q", the editor will silently exit, losing any unsaved changes. ed is probably not even as good as a keypunch, but it's the best we've got:
# cd usr
# ed bench1.c
?
a
/*--- bench1.c -- Extremely simple benchmark.
 * Mark Riordan   1997
 */
main()
{
  int ir, count;

  ir = 0;  count = 0;
  while(count < 32000) {
    ir =+ 129;
    if(ir > 257) {
      ir = 257;
    }
    count++;
  }

  printf("End.  count=%d  ir=%d\n",count,ir);
}
.
That . ended input. Now we're at the "command prompt" in the editor (the prompt is a linefeed!). I made one omission (left out a printf at line 9) and one mistake (on line 13), so let's go back and fix them:
8a
  printf("Start.\n");
.
12,14p
    if(ir > 257) {
      ir = 257;
    }
13d
13i
      ir =- 257;
.
12,14p
    if(ir > 257) {
      ir =- 257;
    }
w
292
q
#
The dialect of C accepted by this compiler is very limited. It doesn't understand #include. Note how I was forced to use the archaic "=-" rather than "-=". Forget about function prototypes.

Now let's compile:
# cc bench1.c
/tmp/ctm3a
m 0005
m 0006
bench1.o: No relocation bits
Undefined:
_main
bench1.o: Local symbol botch
# cc bench1.c
# a.out
Start.
End.  count=32000  ir=66
#
As you can see, compilations don't always work right the first time. Perhaps this is due to read/write errors on the floppies. The first attempt failed after 2:26; the second succeeded in compiling and linking after 3 minutes 08 seconds. The program ran in 2.32 seconds.