BRICKHOUSE

Stupid AOS/VS tricks

Summary: Still using AOS/VS are you? Here you'll find a collection of tricks that I have collected over the more than 16 years that I have worked with this Data General operating system. If you need more information on some trick, feel free to contact me. If you're just visiting out of nostalgia - have fun!

About this page, a short background

When I realized that I have been working with Data General AOS/VS machines on and off for sixteen years, and also realizing that they're about to go extinct. I decided to put together a page with tricks of AOS/VS that I have learned during the years. This includes useful macros, other shell tricks, et.al. For all those who have used or still use AOS/VS this page is for you. Hope you find something useful.

What's up?

Well it finally happened, the thing I have long dreaded! As of five months I do not have access to a running MV anymore.

I had some serious plans to put out a How-to write CLI-macros course just for the fun of it. But since I now cannot check and debug those macros anymore it kind of fell through. So my AOS/VS plans are obscure right now.

God, I miss that MV/35000!

Novas are forever.., and MVs too

Does the idea of running an AOS/VS emulator on a windows, unix, or linux box sound interesting to you? Then you should visit SimuLogics.

"SimuLogics is dedicated to preserving the history and legacy of the Data General Nova® Eclipse® MV and compatible minicomputers."

SimuLogics have products today that emulates the old Nova line of minicomputers. On their web site they claim that they will release a product that will emulate the MV/Eclipse and enable you to run AOS/VS emulated in software on various modern hardware platforms. I personally got a demo from them and have successfully run AOS revision 4.21 on my Dell laptop using Windows 2000 professional.

This is really interesting stuff and the thought of running AOS/VS and Infos on your HPUX host, or your laptop for that matter, would be an interesting experience to say the least. I'll be watching SimuLogics web site with great interest in the months to come.

The book

There is only one book and it's name is The Soul of a New Machine. It was written by Tracy Kidder and won the Pulitzer Price in 1982. It documents the design of the first Eclipse. If you're using MV's you have to read this book!

The xyzzy command

This is the hidden Easter Egg in CLI. It traces it's origin back to the text based Adventure where you should use this magic word at a certain place in the Colossal Cave. There is actually two versions of this command, one in 16-bit CLI and one in 32-bit. But I must say that they ruined it in 32-bit...

SuSm) xeq :cli16.pr

AOS/VS II CLI Release 03.21.00.00 15-FEB-01 16:55:20
) xyzzy

Nothing happens.

) xyzzy what
Error: Not a command or macro, xyzzy,what
xyzzy,what
) xyzzy/l=foo
Error: Not a command or macro, xyzzy/l=foo
xyzzy/l=foo

SuSm) xeq :cli32.pr

AOS/VS II CLI32 Release 03.21.00.00 16-Feb-01 13:56:43
) xyzzy
Twice as much happens.
) xyzzy what
Twice as much happens.
) xyzzy/l=foo
Twice as much happens.

AOS/VS folklore

The most well known folklore is probably the spoof of the standard «How to Load and Generate your AOS System» Someone created a manual, that was actually issued a part number, and called it «How to Goad and Levitate your CHAOS System» I haven't seen it myself but photo copies of it are said to exist.

Another strange tidbit that can be found on the Internet is the error message «I Don't Eat Raisins» which is attributed to AOS/VS. It usually appears on lists with names like Strangest Computer Error Messages.

The truth has been revealed! The error message is from the AOS/VS Breakfile analyzer (BRAN) which of course makes it even funnier. This is what it looks like:

) x bran/raisin foo

*Abort*
I don't like Raisins.
Error: From program
x,bran/raisin,foo

Looks like most of the sites have gotten the error message wrong.

An old colleague of mine swears having been treated to another wonderful AOS/VS error message. Many years ago when he was trying to install and configure an early version of Xodiac (I think), it crashed with the helpful «Process Terminated Due to Error» Huh? No kidding!

The ultimate AOS/VS benchmark tool

Here's a small assembler program to benchmark your system. Use masm to compile it, and link to create a .pr file then run it as OP. If you notice any degradation is system response time you need to upgrade your system ;-)

; AOS/VS Benchmark program
;
; Don't listen to keyboard interrupts
; Make process resident with priority 1
; Stand back and watch your Eclipse perform...
;
.TITLE DOT
.ENT DOT

DOT: ?KIOFF ; NO KEYB INTERRUPTS
WLDAI -1,0
WLDAI ?PFRS,2
?CTYPE ; RESIDENT PROCESS
WLDAI -1,0
WLDAI 1,2
?PRIPR ; PRIO 1

JMP . ; LET'S GOOOOOO

.END DOT

Running this program also give you a good opportunity to test your system recovery procedures. Think of this as a positive side effect when you flick that power switch to off in order to reboot!

Stealing a terminal

This trick was very fun back in the days when everybody had terminals attached through IAC's. If all you have is ITC's and such this trick sucks.

The trick is to steal someone's terminal by disabling it, kicking them off the system and then assigning their console to your own cli process. This makes it impossible for the victim to enable and use their console until they find the cli process that assigned their console and terminate it. Here's how to do it:

SuSm) who 90
PID: 90 URORDM CON54 :CLI32.PR
SuSm) control @exec disable @con54
Console will be disabled
SuSm) superprocess on
SpSuSm) terminate 90
SpSuSm) assign @con54
SpSuSm) superprocess off
SuSm)

Your victim has been thrown off the system and your cli process own his console, i.e. @con54. Until you log off or end the joke, nobody else but you can touch @con54. This is what happens when your victim tries to enable his console again:

SuSm) control @exec enable @con54
Could not enable console, Device already in use, @con54

When you feel that you are ready to end the joke, just:

SuSm) deassign @con54
SuSm) control @exec enable @con54
Console enabled, @con54
SuSm)

If you manage to keep a straight face your hapless victim might not even suspect you of the deed!

Sending faked messages

This short macro makes it possible to send a message to another user and making it look like it is from somebody else. Imagine getting a «I love you!» message from pid 3.

\\ fend.cli fake-send
\\ send message to another user impersonating someone else

[!ult,[!argument/count/macro],3]
write Format: %\% pid who-you-want-to-be message
write
write Examples:
write %\% 45 2 Message to pid 45 from apparently pid 2
write %\% @con45 3 Message to con 45 from apparently exec
write %\% 88 88 Message to pid 88 from himself?
write %\% 45 0 This is from the soul of an old machine :-D
write
[!exit/macro]
[!end]

send %1% [!ascii 31 31 31 31 31]%2% :,,%3-%

The greatest macro name on earth

Creating macros is something we do primarily do avoid repetition. Useful macros that get executed a lot should have good and short names to save typing. But since cli allows you to shorten commands as long as they are still unique your choice of short macro names are limited. Here are a few useful tips regarding short macro names.

But what then is the greatest macro name on earth? In my opinion it's the dot dot cli macro, i.e. ..cli that you run by typing . (period) and Newline. It doesn't get much shorter than that and the chance of Data General naming a cli command to dot is nil. Am I smart or what?

Curious about what my dot dot cli macro does? The thing that I seem to do all of the time is to dir to different directories. This is especially trying when using a Swedish keyboard since : (colon) is shifted. Hence my dot dot cli macro is a front end to dir and enables me to quickly and easily change working directory with a minimum of typing. An example:

  1. The purist cli user: SuSm) dir :net:util:netop_macros
  2. The dot dot cli user: SuSm) . net util netop_macros
  3. Likewise but with :net:util in the searchlist: SuSm) . netop_macros

Simple performance checklist

Want some simple rules regarding AOS/VS performance? This is from a seminar that I attended somewhere back in 1987. This is sound advice and most of it is still valid today.

  1. Fix your system priorities
    • Generate your system for default Group 1, 2, & 3 priorities.
    • Change your UP macro so Pid 2 is priority 2 SWAPPABLE when it fires up global servers.
    • Use PREDITOR to set all users to priority 2.
    • Configure your batch streams:
      • stream 1 at priority 2 SWAPPABLE, QPRIORITY 0 thru 63. Use it for short (less than one minute) jobs which require fast turn-around times.
      • stream 2 at priority 3 SWAPPABLE, QPRIORITY 64 thru 128 (users default to this stream).
      • streams 3 and 4 should not be used.
  2. Make sure you've consistently got enough memory (free + LRU > 256, heavy Infos users should have > 512). In other words, avoid States 2,3, and 4 like the plague.
  3. Optimize the size of your cache for maximum hit rate, minimum memory, and minimum wasted cpu. Reboot the system each morning, overriding default specs, and increase the cache size by 128 from the previous day's value. Plot the average cache hit rate for each day until you determine that the hit rate has flattened out. Re-sysgen for the lowest cache size which gave a good hit rate.
  4. Fix your disk configuration:
    • Configure the system disk to be less than 25% busy:
      • Move all user directories (except :udd:op) and frequently used user files (especially .PR's) to other disks.
      • Move compiler directories to the programmers disk.
      • Change element sizes of frequently used files, especially .PRograms.
      • Try to break up frequently accessed crowded directories (more than 200 files).
      • Change the hash frame size of directories to be appropriate for the number of files they contain.
      • Change the default system searchlist in UP.CLI to the least common denominator (probably just :MACROS :UTIL, for sure not :PER and :!). Users can customize their searchlists in their initial ipc files.
      • Change your INFOS file volumes, single index level files.
    • Arrange the rest of your disks to get 35% busy or less. This may mean that you have to add drives.
  5. Now that your disks are relatively clean, re-do the cache sizing exercise: you may be able to decrease the size a bit because you now have fewer things competing for it.
  6. Check that you interactive process cpu load is consistently less than 75 to 85% (less if you need better batch through-put).

If you still got response time problems at this point and you are unable to identify the cause, seek professional help.

Measuring system performance

Do this for a minimum of one day, or preferably a week before making any changes. Measure:

One program that measures system performance is Secret Agent. It's part of the VS_Toolbox by Eagle Software. The toolbox contains a number of indispensable tools, especially if you're using Infos. If you still feel a need to invest in your AOS/VS platform, VS_Toolbox is a must buy in my opinion.

Uncle BJ's I/O Quality Index

In the 80's the first and foremost AOS/VS guru was Brian Johnson. He wrote a regular column in Focus magazine. He was a really funny guy, for instance his release notes would sometimes contain the following: «This software update fixes old bugs and introduces new ones». I wonder what he does today?

Anyway, he came up with a lot of useful stuff, one of these was the I/O Quality index described below. It is a simple method to determine if your disks are doing bad or good I/O. Just fire up DISCO, do the numbers and compare to the figures below.

(blocks read + blocks written) / accesses = I/O Quality

The result is usually somewhere between 1 and 16. Low values signify bad I/O (i.e. element and index blocks etc.). High values signify good I/O (i.e. data elements).

If you get values above 16 it's amazing and you should consider yourself lucky. Some approximate values are:

Overrated performance issues

Implementing DES on AOS/VS

Back in 1986 I implemented the DES encryption algorithm on AOS/VS for a client in Norway. The program, written in assembler, was called from a COBOL-program and given an account number it returned a four digit pin.

Time passed, and suddenly in the end of 1997 they contacted me again. The program had been running faithfully all this time but now they were leaving the AOS/VS platform and moving to an AS400(sic!). They wanted me to rewrite the program for their new platform. I did so, using C this time, and as far as I know they're still using that version today.

The moral to the story is this, you never know when your old programs will come back and haunt you, so make sure to use comments in your source code!

99 Bottles of Beer

I recently submitted a version of 99 Bottles of Beer written in CLI32 to the 99 Bottles of Beer site. If you never have been there it is a site containing programs that write out the text (lyrics) to the song 99 Bottles of Beer. There are code for well over 500 programming languages, and soon for CLI as well! Here's my implementation (perhaps I should do one in CLI16 too?).

\\ Data General AOS/VS 32-bit CLI
\\ 99 Bottles of Beer
\\ by Robert de Mander <robert%robdemsoft.se> http://www.robdemsoft.se
\\
\\ If you wonder about the [!ascii 254] it's really a comma with the parity
\\ bit set, and write/7bit strips it away. The ordinary comma is there to
\\ get a space(sic!) after the parity bit comma. Weird, but true!

push
prompt pop
var0 99
[!loopstart [!var0]]
string [!var0] bottle[!une,[!var0],1]s[!end]
write/7bit [!string] of beer on the wall[!ascii 254], [!string] of beer.
write/nonewline/7bit Take one down and pass it around[!ascii 254],
var0 [!usub,[!var0],1]
string [!ueq,[!var0],0]no more[!else][!var0][!end] bottle[!une,[!var0],1]s[!end]
write [!string] of beer on the wall.
[!loopend]
write/7bit No more bottles of beer on the wall[!ascii 254], no more bottles of beer.
write/7bit Go to the store[!ascii 254], buy some more[!ascii 254], 99 bottles of beer on the wall.

pop

Perhaps you prefer the obfuscated version below instead?

pu;prom po;var0 99;st/n=n of beer on the wall
[!loops [!var0]]
st [!var0] bottle[!un,[!var0],1]s[!end]
wr/7 [!st] [!st/n=n][!as 254], [!st] of beer.
wr/7/n Take one down and pass it around[!as 254],
var0 [!usu,[!var0],1]
st [!ue,[!var0],0]no more[!el][!var0][!end] bottle[!un,[!var0],1]s[!end]
wr [!st] [!st/n=n].
[!loope]
wr/7 No more bottles [!st/n=n][!as 254], no more bottles of beer.
wr/7 Go to the store[!as 254], buy some more[!as 254], 99 bottles [!st/n=n].
po

Guide to AOS/VS

This guide in two parts is taken from Phrack Magazine and was written by Herd Beast. It's purpose is to be a hacker tool, but it can also be seen as one of the few generic guides to AOS/VS that can be found on the Internet.

Source Code and Macros

Thank you's

This page evolves thanks to input from ex-AOS/VS users that provide insight, tips, and memories about the old days. For instance: