Some useful Hercules features

hercules console panel The Hercules console panel, which you can get by pushing Escape while in the Hercules console.

In this post we’ll look at the Hercules emulator itself in more detail including some useful features when running MTS.

Which version?

As noted at the MTS archive site, there are two versions of Hercules currently in development, 3.11 and 4.xx. Both run MTS OK, including fixes for printer support not present in older versions. 3.11 has Windows binaries at http://www.hercules-390.eu/ and source code that can be built on other platforms; 4.xx is just available in source form on Github. Apart from that it’s not clear if there are advantages in one version over the other for MTS users.

The below items were tested on both versions of Hercules running on Linux. If you encounter any other differences let me know and I’ll update this post.

One word of warning: although you can take an emulated system running on 3.11 and start it using 4.xx, it seems you cannot go the other direction: the 3.11 code will see the disk file written to using 4.xx as corrupt and try to repair it, which makes it unbootable on 3.11.

Suspend and resume

It’s possible to suspend a running instance of Hercules to disk and resume it later - useful if you need to reboot your host OS but don’t want to shut down and start up MTS again.

From the Hercules console, issue the suspend command. A file called hercules.srf.gz will be created in the same directory as the config file and Hercules will immediately exit.

When you are ready to start again, run Hercules as normal but issue the resume command rather than IPLing. You will also need to reconnect any 3270 terminals connected via socket.

This worked perfectly for me on 4.xx - the MTS clock updated itself and everything kept on running including any logged in sessions. 3.11 could suspend but not resume, at least with my build of the source code.

Shadow disks

Hercules has the concept of ‘shadow disks’, where an emulated disk’s contents can be started in one file and then continued with updates made to another file. If you take a look at the Disks directory you will see something like this on the 6.0A distribution:

$ ls -l Disks/
-r--r--r-- 1 rupert rupert 68738104 Jan 16  2012 mts600.dsk
-r--r--r-- 1 rupert rupert 13798923 Jan 18  2012 mts600_1.dsk
-rw-r----- 1 rupert rupert  6062763 Oct 28 20:16 mts600_2.dsk

The combination of mts600.dsk and the two shadow files (denoted with a _) make up the MTS600 disk file. The D6.0A distribution has been set up so mts600,dsk contains the base D6, mts600_1.dsk contains patches to bring it up to D6.0A and your updates are in _2. So you can delete the _2 file to restore the system to its initial D6.0A state.

You can use this yourself if you want to make changes to MTS and then have the ability to roll back to previous versions. To do this, shutdown MTS and make mts600_2.dsk read only. When you start up Hercules and IPL again, a new file mts5600_3.dsk will be created. To roll back, stop Hercules and remove the _3 file.

Sockets

It’s possible to define the card reader as a socket device instead of a file. This allows you to submit jobs over the network or from your host OS by connecting to a socket instead of writing to the file Units/RDR1.txt. You can use the netcat utility which is available for most OSs or you could write a program to do this.

First, edit the Hercules config file and replace the line under ‘Unit Record Devices’ for the 3505 device with something like this:

000C   3505   127.0.0.1:9090 sockdev ascii eof   # RDR1

When you start Hercules, this will listen on port 9090 on the loopback interface for incoming connections. You can change the IP and port as needed in the config file.

Once MTS is booted and HASP is started, use netcat like the below:

netcat 127.0.0.1 9090 < job.txt

Where job.txt is the batch file you want to submit, including a S8 card on the first line (See the post on using the card reader for more details on this.)

If all worked OK, netcat will not print any output, but you should see the results of the job on the printer device.

It’s also possible to define the printer as an output socket device: when something is printed it will connect to the socket defined in the config file and send the output.

Further information

See the Hercules user manual for more details on options available.


Setting the timezone by patching the system with RAMROD and *OBJUTIL

D6.0A uses the US Eastern Standard timezone by default. In this post we will look at how to set the timezone to something different, which will lead us on to how to patch the system using the RAMROD and OBJUTIL utilities.

The TABLES assembly

As MTS was run on a small number of mainframes, the timezone is set inside the resident code of the system rather than by a command. The relevant code is TABLES; you can see the source assembly code in UMPS:UMTABLES#SA

...
   359              SET   YEAR=87,TIMEZONE=EST
...

which references a macro in copy:tables*sal

  1500              MACRO
  1501              TIMEZONE &Z
...
  1517     .L4      AIF   ('&Z' NE 'EST' AND '&Z' NE 'CDT').L5
  1518     TIMEZONE DC    H'-300'            EASTERN STANDARD OR CENTRAL DAYLIGHT
  1519              AGO   .OUT
...

Normally you would change the code, assemble it and reboot. But this requires the ASMH assembler, which is a licensed IBM product that cannot be distributed with MTS. The alternative, which we will look at here, is to patch the object code with the desired value.

Roadmap

An overview of the steps we will take

  • Use RAMROD to extract the TABLES deck to a file
  • Use *OBJUTIL to patch the file, adding a new ‘card’ to change the timezone
  • Use RAMROD again to incorporate the file into the deck
  • Reboot and enjoy the correct time

RAMROD

RAMROD is used to keep track of a set of object decks and combine these into a file suitable for IPL. ‘Decks’ refers to the older practice of using a deck of punched cards to boot the system; on MTS thankfully this is done using files stored on disk.

A set of object decks is combined into a system. You can see the systems currently defined, and the current system, with the list systems and list current commands in RAMROD. RAMROD can be run as the MTS user as follows; RAMROD commands are given at the ~ prompt:

# $run mts:ramrod
 Using file "RMRD:ROD"
 Proceed.
~ list systems
 D6.0A-AN172 created from AN152 23:05:42 01-17-12
 AN152 created from AN062 23:29:05 01-15-12
 AN062 created from AN052 01:13:12 01-06-12
 AN052 created from D6.0SYS.600/MP 19:49:40 01-05-84
...
~ list current 
 D6.0A-AN172 created from AN152 23:05:42 01-17-12
 Patch the timezone name and timezone offset in TABLES to be EST
 and GMT minus 5 rather than EDT and GMT minus 4. (jco)

So we can see the current system is D6.0A-AN172, the comment made when creating the system (which was to set the timezone to EST) and the history of previous systems.

You can see a list of decks that make up the system with list decknames; a snippet is below:

~ LIST DECKNAMES
 CONFIG.CARD.MP (DEC08-86)
 CONFIG.CARD.COMMENTS (AUG16-85)
 LOWCORE.DEFS.MP (SEP11-87)
 SEG0.NCA (SEP17-81)
 UMLOADTV (NOV20/79)
 TABLES.MP (AN172) patched
...

TABLES.MP is the deck we want. We can see a list of the patches already applied in the below:

~ list sys cur deck tables.mp patches
 TABLES.MP (AN172) patched changed
 REP  004088  0400030001,00000240,00000030,000002A0,00000180 Rearrange OPERDEVS 01:26:36 01-06-12 MTS.
 REP  000180  01F1F0F5F2 CON1 IS A 1052 01:26:51 01-06-12 MTS.
 REP  003F8A  04,FED4 Make the timezone offset -300 (GMT minus 300 minutes or 5 hours)
 REP  003F8C  04,C5E2E340 Make the timezone name "EST"

What we want to do is extract the TABLES.MP deck to a file, so we can edit it outside the system using *OBJUTIL. Use the copy command to do this; let’s store this to the temporary file -tables:

~ copy current tables.mp -tables

Exit RAMROD for now with stop.

*OBJUTIL

*OBJUTIL is used to edit a deck. Pass the file to be edited as unit 0:

# $run *objutil 0=-tables
 OBJUTIL VERSION(PR137) 08:22:26 10-21-14
*

*OBJUTIL accepts commands at the * prompt. First, let’s get a listing of the values in the deck using the map command:

* map

  Symbol Type Esid Address Length AF

   Module: TABLES    Size = 0041C8
  TABLES   SD 0001 000000 003E0E     $HSPMNDV LD      0040FC 0004
...
  TIMEZONE LD      003F8A 0004       TIMZONTB LD      003F94 0004
...

The timezone is encoded as a half-word (16 bit) offset in minutes from GMT followed by a 8 character string giving the timezone name. We can use the display command to see the current values, using the type and length modifiers:

* display@type=h timezone
  TIMEZONE  'H'  -300
* display@type=c@len=8 timezone+2
  TIMEZONE+2  'C'  "EST     "

We’ve confirmed the current setting is GMT minus five hours, name “EST” padded with blanks. Let’s now set it to the value we want; I’m going to use plain GMT which is zero offset but you could use any positive or negative value. Use the modify command with the @repgen modifier to create a REP card to set each part of the value

* modify@repgen timezone H'0'
  TIMEZONE WAS 'H'  -300 NOW 'H'  +0
  Enter comment for REP card:
? Set timezone to GMT

* modify@repgen timezone+2 C'GMT     '
  TIMEZONE+2 WAS 'C'  "EST     " NOW 'C'  "GMT     "
  Enter comment for REP card:
? Set timezone name to GMT

A REP cards means we are adding a line to change the object file rather than changing the existing contents of the file. Note that it prompts for a comment after each change; terminate this with a blank line.

To be sure, we can now display the new values;

* display@type=h timezone
  TIMEZONE  'H'  +0
* display@type=c@len=8 timezone+2
  TIMEZONE+2  'C'  "GMT     "

Use stop to get out of *OBJUTIL.

Back to RAMROD

Run RAMROD again and create a new system from the current system to incorporate your changes:

# $run mts:ramrod
  Using file "RMRD:ROD"
  Proceed.
~ create D6.0A-CT214
  ** Fromsystem = "D6.0A-AN172"
  & OK
? ok
  Enter comments:
? 2014-10-21 Modify timezone

The new system name D6.0A-CT214 needs some explanation. The D6.0A is obvious; the CT214 comes from a convention for naming releases that is described in the distribution driver file:

            1.   The name of the system installed is changed to the "model
                 number" of the date it is installed, e.g. "AY108" for May 10,
                 1978. [2nd and 3rd letters of the month name, two digit day
                  of the month and one digit year.]

So this system I am creating was made on October 21, 2014.

Next, replace the TABLES deck with the one you just edited; supply a comment and leave the version code blank:

~ replace tables.mp from -tables
  Enter comments:
? 2014-10-21 Modify timezone to GMT
?
  Enter version code:
?
  ** REPLACE deck "TABLES.MP" from file "-TABLES" :
  & OK
? ok
  Done.

You can list the patches again, to be sure:

~ list deck tables.mp patches
 TABLES.MP (OCT21-14) patched changed
 REP  004088  0400030001,00000240,00000030,000002A0,00000180 Rearrange OPERDEVS 01:26:36 01-06-12 MTS.
 REP  000180  01F1F0F5F2 CON1 IS A 1052 01:26:51 01-06-12 MTS.
 REP  003F8A  04,FED4 Make the timezone offset -300 (GMT minus 300 minutes or 5 hours)
 REP  003F8C  04,C5E2E340 Make the timezone name "EST"
 REP  003F8A  04,0000 Set timezone to GMT
 REP  003F8C  04,C7D4E34040404040 Set timezone name to GMT

Finally, use the current command. This will check the system and write to the IPL files:

~ current
 There are 4 IPL files with prefix "*IPL.   "
 Loading system D6.0A-CT214 using the UMLOAD deck it contains.
 LOAD: Resident: 2000-5DFC8 UMLOAD Psect: B0000 Pageable: DD000-191A70 End: 1DCFFF
 Contents of IPL file "*IPL.3":
 AN052 ENTRY=56D18 PSECT=100008 VIRTUAL=B0000...191A70 VIRTUAL_START=100000 UMLOADTV=2000
 WRITTEN BY ID MTSS AT 19:55:37 THU JAN 05/84 BY
 COM 18:50 Jan 05 - Replace RSF to fix the halfword date problem.
 ** Write system "D6.0A-CT214" to IPL file "*IPL.3":
 & OK
? ok
 System "D6.0A-CT214" has been written to  IPL file "*IPL.3"
 IPL file stacked has been pushed.
 System "D6.0A-CT214" is now the current system.
 "D6.0A-CT214" : Released.
 System "D6.0A-CT214" has been Frozen.
 Done.

The moment of truth

Get out of RAMROD with stop and then reboot the system as normal. When it comes up you should get a warning that the timezone has changed, which you can just ok.

 00000   ** UMMPS/XA ** assembled 04/19/88
 00000 CONFIG CPU 0000 online
 00000 CONFIG CPU 0001 online
 00001 INIT Time and date have been set to  14:45:22 on 10-21-14.
 00002 OPERATOR   Started at 14:45:22 on 10-21-14  Model 3090 Serial 000611
 00002 OPERATOR   Using display DS01 & printer CON1 (1052)
 00004 MTS  Timezone "GMT" is different from timezone during last IPL ("EST").
 00004 MTS  If you are sure the time is set correctly, enter "OK" to proceed wit
 00004 MTS   IPL; otherwise re-IPL now.

Later on in the boot sequence you can see the new system:

00004 MTS  Reload at 14:45:56 on 10-21-14.  Model: IBM 3090/FF  Serial: 611
00004 MTS  System: D6.0A-CT214 written at 08:34:51 on TUE OCT 21/14.

And that’s it! The operator’s console will now show the correct time for your timezone, as should the display time command from MTS.

Further information

There’s a summary of this process in the D6.0A FAQ and I also found the conversation between Ron Frederick and Jeff Ogden on the H390-MTS Yahoo list useful to understand the steps required.

Original instructions to new sites on patching the system deck can be found in the D6.0-NOTES.txt file in the distribution archive.

RAMROD has a write-up in file RMRD:RAMROD*PF, with the wonderful introduction:

         Cards were made for salesmen and bridge players and in that
    domain they should have undoubtedly remained. Their passing will
    not be mourned by those enlightened programmers  who  have  seen
    fit to rise above the hardcopy world and to place their faith in
    the wonderous MAGNETIC MEDIUM.

*OBJUTIL is described in Volume 5 of the MTS documentation. You can bypass *OBJUTIL and use the patch command in RAMROD, but *OBJUTIL has much better facilities to enter number and character patches, and to check your work. Using patch you have to find the address of TIMEZONE, the ESDID where it located, and convert the offset and the timezone description (in EBCDIC, not ASCII!) to a sequence of hex characters, eg

~ PATCH DECK TABLES.MP
  Address Esdid Text <comments> :
? 3F8A 4 0000C7D4E34040404040

CMDSTAT, or why does DWB keep asking me for tapes?

DWB prompt

If you’ve used MTS for more than a few days you will see the above message on the MTS operator’s console. In this post we will look at what to do when you get this message and what is going on behind the scenes.

The quick answer

*DWB wants to store accumulated logs and command statistics on tape as statistics files fill up. The D6.0A distribution comes with a suitable tape on drive T90A, so at the MTS operator’s console answer the tape mount request with:

OK M001 T90A

The complete session will look like this:

00050 MTS  *DWB: The CMDSTAT file to tape program has been started. ********
00050 MTS  *DWB has been started to dump the CMDSTAT file(s), if any, to tape.
00050 MTS  A tape, labeled as indicated, should be mounted when requested.
00050 MTS  See component 531 for a description of CMDSTAT.
00050 MTS SYS.:  F (1 9TP) M001 on 9TP, ring IN, 'CMDSTAT' ********************
OK M001 T90A
00050 MTS Mount check OK.Mount M001 on T90A Ring In
00050 MTS SYS., M001:Accepted on T90A
00050 MTS **** Remove tape M001 from T90A (6250 BPI)

Once it has written the statistics, the tape will go offline so the next time *DWB fires up you will also need to do a

devinit 018a

on the Hercules console before responding to the tape mount request.

The longer answer

During system startup, MTS job *CMD is run automatically. This invokes the CMDPIKUP program which runs continuously, writing statistics from memory buffers into files.

Once a file becomes full, CMDPIKUP will start MTS job *DWB. This will run the CMDTAPE program to ask for a tape to be mounted, write the file to tape, empty the file and then exit.

What files and tapes to use is determined by the file SYS:CMDDIR. This is only permitted to be read by SYS so you will have to sign on to SYS to view it. A typical file looks like this:

# list cmddir
 
       1     TA MCMD034001 ???4??t?19:46:2405-20-85
       2     FACMDSTAT1
       3     F CMDSTAT2

The first character of each line is T for tape or F for file. The second character is the status: for files

  • SPACE: not in use
  • A for active, ie the file is being written to
  • B for busy: CMDTAPE is copying it to tape
  • F for full: the file needs to be written to tape

Status for tapes is similar:

  • A for available but not mounted
  • B for busy, being written to now

The rest of the file line gives the filename being used to store statistics; the rest of the tape line specifies the tape name, next file and creation date.

So at this point, file CMDSTAT1 is being written to and no tape is in use.

When *DWB is running, the CMDDIR file would look something like:

# list cmddir

     1     TB MCMD033001 ???4??t?19:46:2405-20-85
     2     FBCMDSTAT1
     3     FACMDSTAT2

ie the tape is in use and will write out the contents of CMDSTAT1; meanwhile, CMDSTAT2 is continuing to receive new statistics.

If the mount request is not attended to and both files fill up, CMDPIKUP will create a new temporary file CMDSTATx where x is some character; this will be deleted after it is written to tape.

On Hercules using D6.0A, this all runs well; the distribution comes with an empty tape file Tapes/cmd001.awd that is attached to drive T90A ready for use. The frequency that *DWB needs to run will of course be a lot less than on a real mainframe: a note in the driver listing file says that at busy times the files would fill up in an hour and the tape would fill up in about a week.

Clearing the tape

As tapes can have unlimited size on Hercules. the tape file will get bigger and bigger as more statistics are written to it; after running MTS for 4 months my file was over 65 megabytes. I wanted a way to get that space back.

One solution would appear to be replacing the tape file with an empty tape file (eg by replacing it with the copy of cmd001.aws that came with the D6.0A distribution). However, CMDTAPE does not like the tape contents changing from underneath it and gives an error when you try to mount it.

A better solution is to set a maximum length on the tape in Hercules and use the facility in CMDTAPE to create new tapes when the existing one is full.

At the Hercules console, change the tape length with:

devinit 018a Tapes/cmd001.aws maxsizem=50

(or whatever maximum size in MB you want).

Then, when you mount the tape responding to *DWB’s request, CMDTAPE will notice it is full and say

00049 MTS  *DWB: MOUNT NEW CMDSTAT TAPE RING IN WITH RACK  M002 FOR INITIALIZAT

Create a new tape from your host OS command line:

hetinit -d Tapes/cmd002.aws CMD002

and at the Hercules console do

devinit 018a Tapes/cmd002.aws maxsizem=50

Back on the MTS operator’s console, answer *DWB’s request for a new tape with just the tape drive name

T90A

CMDTAPE will mount the tape, label with the next sequence number (so M002 in this case) and initialise it and umount it.

It will then ask for the tape to be mounted again so it can write statistics to it; devinit it again at the Hercules console and answer the mount request with the new tape name:

00049 MTS SYS.:  F (1 9TP) M002 on 9TP, ring IN, 'CMDSTAT' ********************
OK M002 T90A

You can now safely delete the old tape file cmd001.aws. Also remember to update the line in hercules.cfg for the tape to add the maxsizem parameter:

018A 3420 Tapes/cmd002.aws maxsizem=50 # T90A, a CMDSTAT tape for use by *DWB

Turning off CMDSTAT?

Most Hercules users of MTS are not using the command statistics tapes that are being produced so it would nice to turn it off altogether.

There does not seem to be an easy way to do this (we can hardly blame the MTS designers for this as they were not expecting people to run personal copies of MTS!) One potential solution mentioned on the Yahoo list H390-MTS would seem to be to rewrite CMDTAPE to only empty the CMDSTAT files and update CMDDIR, not actually write data to tape. CMDTAPE is in 360 assembly language and (I think) requires the IBM copyrighted product ASMH to assemble, so this would not be a trivial task. In the meantime, feeding tapes occasionally to *DWB is not a big deal.

Why is the job called *DWB?

DWB is the initials of system programmer Donald W. Boettner. There’s a note in the driver file for the CMDSTAT component 00531/015:

It would seem that Don could have thought of some name more original than his initials. Don's response: "Since no one would name an SVC after me, I was forced ... "

And that’s why I like MTS so much - you’d never see that on a commercial operating system.

Further information

The Operator’s Manual, page 317, has a complete write-up of how the CMDTAPE components fit together and what to do if there are problems.

You can see the contents of *CMD and *DWB by $LISTing them from the MTS command line. Source for CMDPIKUP and CMDTAPE can be found under component 531 of the MTS D6.0 distribution tapes.


Users and projects

Rather than be limited by the set of user IDs in the starter system, you can create one or more user IDs for yourself. This post will look in more detail how user IDs are created and used in MTS.

User and project IDs

User IDs (or ccIDs) in MTS are four characters long, optionally right padded with . if shorter (eg ACC.).

Each user ID is a member of one project, which also has a four character ID. A project can have zero or more user IDs in it. Project IDs allowed funds for students on a course or a research team to be grouped together; it also allows sharing of files within a group.

Note that unlike groups on Unix a user ID can only be a member of one project. One upshot of this on the mainframe is that a person may have several different user IDs, for example one for each course they are on. Thee is no concept of root or Administrator on MTS, but an ID can have extra privileged, eg the ability to access devices directly.

Creating a new user ID

User and project records are stored in file *ACCOUNTING and sub files matching *ACCOUNTING?. Rather than edit these directly you should use the ACCMAINT program.

Sign-on as user ACC using password aardvarks and then a secondary ID like ST01. $run ACCMAINT to start the program, setting unit 0 to be where you want output, eg *print* or *sink*.

You can now use commands like CREATE and DESTROY. Here’s a sample session where we CREate a privileged ID ABC.

# $run accmaint 0=*sink*
# Execution begins   02:55:29 


  MTS ACCOUNTING FILE MAINTENANCE
  CRE ABC.,0,,,,,10000,,,,WABC,LIBRARY=ON,PRIV=ON,PROTECT=ON,PASSWORD=secret1
 


  ABC. password is SECRET1          Name:
  ABC.             SECRET1 
  ABC.             SECRET1 
       (Hexadecimal representations:  ID=X'C1C2C34B' PW=X'E2C5C3D9C5E3F1')
...

Looking at the parameters:

  • 0 is the university account number
  • 10000 is the maximum disk space in pages
  • The project name is WABC: this must start with a W to provide system level privileges.
  • LIBRARY - can create a public file, eg one starting with *
  • PRIV - bypass checks on funds
  • PROTECT - run privileged commands, eg get tape devices directly with GET
  • Other blank fields are to control resource use and can be blank as shown.

It should also be possible to create non-privileged IDs this way but I have not worked out how to set up funds: if I enter the command

CRE BA01,0,,,,,10000,,,,BABA,PASSWORD=secret1

and then sign on as ba01 I get The funds allotted this user ID have been depleted. - if you know how to do this let me know in the comments.

Update 14-Apr-2015: see Jeff’s comment below on how to do this.

Removing a user ID

$run ACCMAINT as user ACC as before but use the DESTROY command with the user ID and the account number. For example, to remove user ABC.:

# $run accmaint 0=*sink*
# Execution begins   03:06:37 


  MTS ACCOUNTING FILE MAINTENANCE
  DES ABC,0
  *** ABC. IS TO BE DELETED.
  PLEASE CONFIRM OR ENTER "CANCEL".
  ok

Getting user and project information

There are other programs under ID ACC that may be useful; some examples:

  • ACCDISPLAY prompts for a user ID and prints out detailed information for the ID
  • ACCLISTING lists out info on all user IDs
  • PROJECTDISP prompts for a project ID and provides details
  • PROJECTIDS prompts for a project ID and lists all users in the project
  • PROJECTLIST shows details on all projects in the system

Run $filestatus when signed on as ACC to see the list.

Changing password

To change the password of the currently signed-on MTS ID, do SET PW. It will ask for the old password first then the new password twice for confirmation.

To change the password for an account you don’t know the password for, sign on as the user WPSW, enter a secondary sign-on ID/password and then $run program1. If you type a user ID it will reset the password to something new. An example for our new account ST03:

# $run program1
# Execution begins   03:17:16 
  ST03
  Password previously set at 04/19/88 17:19:01 EDT has been reset to YLU6GM 
  end of file
# Execution terminated   03:17:26  T=0.011 

CKID and secondary sign-on

Some privileged IDs, such as MTS, are protected by requiring a secondary sign on. Access is controlled by the file CKID:ACCESS with lines of the form

priv_id secondary_id1 [secondary_id2...]

To change this file you will need to sign on as CKID. In the starter system the password for this account is not supplied, so first change its password using the instructions in the previous section.

Edit the file ACCESS using $edit (it’s wise to take a backup first). A typical line for ID MTS looks like this so you can add secondary IDs at the end or remove secondary IDs you don’t need.

MTS. ALWB DLB. DRH. DWB. KLB. MTA. SRB. WSG. W013 W030 W05Q W070 W170 ST00 ST01 ST02 ST03 ST04 ST05 ST06 ST07 ST08 ST09 AB01

You could also add new privileged IDs and who can access them by adding lines to this file. To ensure the secondary sign-on is checked at sign-on, set the sigfile (the command file run at sign-on) for the account being protected to CKID:CKID.SIG with set sigfile=CKID:CKID.SIG.

Further information

A write-up on the accounting system can be found in component 104/172 on the MTS tapes. See restoring components for details on how to do this and the FAQ question 31 on how to print the guide.


The operator's console

operator console annotated

The operator’s console allows you to monitor and control your MTS system. Although you will likely use only a fraction of the features that a real operator would have used, it is worth getting to know how it works and what features are available.

This post has two sections: a quick tour of the screen, commands and keyboard controls followed in the “Further Information” section with a full list of commands.

The tour

Parts of the screen

The top two lines show a summary of the system’s status. An asterisk by an item means that the system is overloaded.

The next line, the third, will normally be blank but will show any system alerts. On the screenshot you can see PCH as the punch device is currently offline and I need to do a Hercules devinit to bring it back online. This line can also show HASP status alerts, such as when HASP has been started but batch job execution has not been resumed yet.

Taking up the bulk of the screen is the message area, showing results of commands you type and any job messages. If jobs require any input they will be bolded: on the screenshot you can see a tape mount request that needs a response.

The last but one line is the request area where you can type commands, and at the very bottom is the system name, date and time.

Keyboard

Note that the cursor position is important: in the screenshot above I can put the cursor in the line after ****** and response to the tape request, or put the cursor in the request area at the bottom to enter commands. When there are multiple input areas active, pressing Tab will move between them.

Don’t press SysRq, as this will ask for a dump tape and will exit the operator’s console program.

Types of commands

There are four types of commands that can be entered in the request area:

  • Job commands, which do not have a special prefix
  • HASP batch spooler commands, which start with $
  • System status commands, which start with /
  • Device commands, which start with %

Job commands include HASP and SHUTDOWN, used in the start up and shut down process.

The GOOSE, STOP and BLAST commands, in order of severity, can be useful when dealing with user terminal jobs that appear stuck. Be careful with BLAST as it can lead to file system damage.

The MTS job has three meanings useful on Hercules

  1. To run MTS operator command files, eg MTS *LAS; a list is given below.
  2. To start an interactive MTS session on the console for any ID, without having to give a password. Type MTS OPER then SIGNON XXX where XXX is the account you want. Can be useful for a quick command but better to use a separate terminal normally.
  3. To restart MTS on a terminal if it has been STOPed or hung up; use MTS DSxx for this where xx is the sequence number of the 3270 connection; this is displayed at the top of each terminal connection.

HASP commands include

  • $release ex and $hold ex to start and stop job execution
  • $drain system to bring the scheduler to a halt before shutdown
  • $drain DEV to remove a device, like the punch, from HASP; $start DEV to add in back again
  • $display to show information about jobs

System status commands are similar to the user MTS command $systemstatus but replace that word with a /. So in userland you would do $systemstatus tasks to view a list of tasks but on the console you would do /tasks (or just /t). There are a number of additional subcommands only available on the console.

Device commands include %wrap to control line wrapping and %PF to set PF hotkey definitions.

Further information

System status columns

Key to the abbreviations in the system status area (taken directly from the D6.0A FAQ):

	DT   = Delta Time [time in seconds covered by the sample displayed]
	EXQ  = Execution Queue [number of batch jobs waiting to execute]
	PRT  = Print Queue [number of jobs waiting to print]
	PCH  = Punch queue [number of jobs waiting to punch]
	BP   = Batch Preferred [the number of batch jobs the system would 
	                        "like" to be running]
	AB   = Actual Batch [the number of batch jobs actually running]
	BHP  = Batch per Hour [average number of batch jobs completed per hour]
	AL   = Active lines [MTS terminal sessions]
	VP   = Virtual Pages
	RP   = Real Pages
	DPA  = Drum Pages Available [pages available on the high speed 
	                             paging devices, rather than disk]
	PA   = Paging Activity [paging I/O operations per second]
	DA   = Disk Activity [disk I/O operations per second]
	CA   = Channel Activity [channel I/O operations per second, 
	                         includes DA and a portion of PA as well as 
	                         other I/O operations]
	%PI  = Percent Processor Idle
	Q    = Global CPU Queue [jobs waiting for the CPU]
	TQ   = Tape Queue [MTS jobs waiting for one or more tapes 
	                   drives to become available]

Job commands

A summary of the job commands available is given below. Full documentation can be found starting from page 81 in the Operator’s Manual.

  • BLAST - forcibly kill a job if STOP will not kill it.
  • BROADCST - send a message to terminals attached to the system
  • DIS - display contents of memory locations
  • DMGRSTAT - manage disks
  • FLUSH - clear requests from HASP for I/O for a device (after draining)
  • GOOSE - simulates sending an ATTN to a task
  • G11 - g11 3211 printer config
  • HASP - start the spooler
  • HASPLING - hasp subjobs, not started by hand
  • INIT - initialize system, not started by hand
  • IT - list networks
  • JOBDUMP - dump a job core memory to tape
  • JOBS - list job status
  • MOD - change a location in memory
  • MTS - start an MTS task
  • OFFLINE - mark a device as logically offline
  • OK - determine how jobs that terminate successfully display to the console
  • ONLINE - mark a device as logically online
  • OPERATOR - start the operator console
  • PDP - initiate the Paging Drum Processor
  • PDROP - remove paging devices
  • PGET - set up extra paging devices
  • PN - printer train config
  • QN - printer train config
  • SE - print device table
  • SHUTDOWN - shutdown the (terminal) part of the system
  • SIGNONM - print a sign-on message to all users before they sign on
  • SOFTCHK - control the recording of soft (recoverable) machine checks
  • STARTUP - reverse the effects of shutdown on a terminal
  • STAT - collect system statistics to a tape
  • STATSW - dynamically change the parameters that a STAT job is using
  • STOP - kill a job
  • TABLMOD - display or modify information in the shared file table
  • TASKS - display status of running tasks
  • TMTS - run a task using the test version of MT
  • TN - printer train config
  • T11 - printer train config
  • UNITS - display config of channels, control units etc

MTS operator’s files

All commands below need to be run by MTS and prefixed with *, eg MTS *BBS. Many (most?) of these will not be of use on Hercules, eg those involving networking or plotting hardware. Full documentation starts from page 161 in the Operator’s manual.

  • AAS - Starts network tasks AA21 - AA29
  • ABS - Starts network tasks AB10 - AB6F
  • ADS - Starts network tasks AD10 - AD73
  • AES - Starts network tasks AE10 - AE73
  • AFS - Starts network tasks AF10 - AF6F
  • ANS - Starts network tasks AN10 - AN6F AND DSN
  • BBS - Babysit program to watch for user ID signon
  • BDL - Dump, reload PCP “AB”
  • CCD - To Defer Plots
  • CCL - Initializes Plot Tapes
  • CCP - Dump Plots To Tape
  • CCR - Reset/Startup PDP-11 “C”
  • CCS - Normal Startup PDP-11 “C”
  • CCT - Length Of Plot Session
  • CDL - Dump, Reload Data Conc. “C”
  • CHK - Checks For Offline Equipment
  • CLB - Retrieves Label From Tape And Inserts It In Tape Catalog
  • CLK - Starts Automatic Job Scheduling Program
  • CLN - Cleans Up machine check and unit check Info.
  • CLO - Reloads DC “C”-No Dump
  • CLR - Restarts Job Scheduling Program
  • CMB - Combine Statistics Tapes
  • CMD - Command Statistics
  • CPW - Change Password To Unknown
  • CTD - Check Disks After PM
  • DCS - Starts Data Concentrator C
  • DDL - Dump And Load Primary Communications Processor AD
  • DLG - Logs Disk Errors
  • DLO - Reloads PCP “AD”-No Dump
  • DMP - Initiates BATCH Job To Print Dumps
  • DRN - Drains HASP Remotes
  • DSD - Runs DASDI
  • DSK - Add,List,Delete Disks
  • DSN - Start User HASP Display - NUBS
  • DSO - Amount Free File Space
  • DSP - User HASP Status Display - CNTR
  • DWB - CMDSTAT + Unit Checks To Tape
  • EDL - Dumps & Reloads PCP AE
  • ELO - Loads Primary Communications Processor AE
  • EUP - Enables terminals on EE01 SCP in the East Engineering building
  • FIR - Names & Ph. #s Of Fire Fighters
  • FIX - Update CCID Accounting Record
  • FLB - Check Tape Labels
  • FSC - Make Copies Of File Save Tapes
  • FSM - File Save Merge
  • HGS - Show 10 Jobs With Most CPU, DSK I/O etc
  • HLB - Force Access To UB Host Through Host Locator
  • HLG - Hasp Log Collection
  • HLM - Force Access To UM Host Through Host Locator
  • HPS - HASP Status
  • HSP - Normal HASP Start
  • HUH - Merit + Concentrators, State Of
  • *IG.SHUFFLE - Summarizes *IG Usage
  • INI - .System Initialization
  • ITX - Intertask Communication Test-UMMPS Jobs
  • LAR - Reset Line Adapters-1270
  • LAS - Start 1270 And Misc Jobs
  • LBH - Tape Labeling (non-catalog)
  • LBL - Tape Labeling (catalog)
  • LIM - Time Remaining-Batch Jobs
  • LMT - Short Version Of MSS
  • LRL - Info. About Last IPL
  • MNS - Normal MERIT Startup
  • MSD - Set Time-Date Merit CCs
  • MSG - Cleans Up $Message System
  • MSS - Tape Usage History
  • MUP - Current State Off MERIT Computer
  • NDL - Dumps & Reloads Primary Communications Processor AN
  • NST - NAS-Manipulation Of Name Address Spaces
  • NUP - Enables Terminals On NUBS SCPs & Job Status Monitor
  • OOT - Controls NTM On UB & UM
  • PAG - Tests Paging Devices
  • PLB - Prints Identifying Info. About Plot Tape
  • P16 - Starts 16 PAG Jobs
  • RCP - MTS S-8 Cards
  • RES - File Save: Status & Restoration
  • RHB - Releases & Holds HASP Rate Classes
  • RIP - PN Ripple Print
  • RST - Restores Files
  • RSV - Reserves Disk Drives
  • SAV - Daily File Save
  • SDB - PCP Shutdown Msg. & Disconnect
  • SDM - D.C. Shutdown Msg. & Disconnect
  • SFT - Starts SOFTCHK-Checks For Soft MCHKS
  • STA - Saves Statistics On Tape
  • STI - Checks Condition Of Statistics Work File
  • SVS - Special Large, Weekly Type Filesave
  • SVW - Weekly File Save
  • TNR - TN Ripple Print
  • TPD - Tape & Tape Unit Diagnostics
  • TPS - Displays Amount And Type Of Free Tape Units
  • TSH - Add Tapes To Or Remove From UNSP:TAPESHARE
  • TSN - Weekly Full File Save Slave Stream
  • UNU - Enables Terminals On NUBS & UNYN SCPs & Job Stautus Monitor

HASP commands

Once the spooler has been started by running the HASP job, there are a number of commands available to control spool execution. Full details in the HASP manual.

  • $ACCEPT [RMID] modifier - define what output each site can accepr
  • $ALTER JOB n PRIO +or-M | DEFER | LOW - alter job priority
  • $BACKLOG [log] - display job backlog
  • $BACKSPACE dev n - fix paper jam by restart print from 2 pages back
  • $DELETE dev n - terminate the current job running on device dev
  • $DELETE JOB N - terminate job number N
  • $DISPLAY JOB n - display info about job N
  • $DISPLAY PRIO JOB n - display priority of job N
  • $DISPLAY RMTS|REMOTE NAME|REMOTE NUMBER [LOG] - display status of remote dvices
  • $DISPLAY {UNIT Dev N | UNITS [LOG]} - display I/O unit status
  • $DRAIN dev n - Allow current job on device N to finish then remove device from spooler.
  • $DRAIN SYSTEM - Allow all current jobs to finish but do not execute any new jobs
  • $FORMS Paper,devn - Define papet type on device
  • $HOLD *...* - Hold access to the pseudodevices *PRINT*, *PUNCH*, *BATCH*
  • $HOLD EX - Hold execution of batch jobs (but allow printing/punching)
  • $HOLD JOB n or ALL or LOW or DEFER - Put a hold on batch jobs
  • $INTERRUPT dev n - Interrupt the printing of the job on device N and put it back on the queue,
  • $LIST - Define level of log messages to be printed.
  • $LOCATE JOB n - Find out execution info for job N
  • $LOCATE User CCID - Find out execution info for jobs from user CCID
  • $LOGIO ON/OFF DEVn - Log all message for a device
  • $LOG MESSAGE - Send a message to the log file
  • $NEWHASPLING dev n - Start a new HASP internal job
  • $PASSWORD - Set password for remote station
  • $QUE [MAIN] - Show queue information
  • $REFUSE [RMID] modifier - define what output each site can accepr
  • $RELEASE *...* - Release access to the pseudodevices *PRINT*, *PUNCH*, *BATCH*
  • $RELEASE EX - Release execuion of batch jobs
  • $RELEASE REMOTE JOB n or ALL or LOW or DEFER - Release jobs put on hold
  • $REPEAT dev n - repeat printed output for job printing to device N
  • $RERUN JOB n - Terminate job N and place back on the queue
  • $RESTART dev n - Terminate job running on device N and immediately rerun
  • $RMSG (nn Or Rmid Or All) Message - Communicate with remote stations
  • $ROUTE TYPE for-id to-id - Define routing for output of job
  • $SETUC [RMID] On|off - Set upper-case option for remote stations
  • $SIGNOFF - Stop a remote terminal after completion of current read/punch
  • $SPACE dev n - Stop carriage control and single space output for job running on device N (useful for runaway print jobs)
  • $START modifier dev n - Add a device back under HASP control
  • $START SYSTEM - Start HASP operation (done as part of MTS *HSP)
  • $STATUS [log] N - Show status of device N
  • $STOP dev n - Stop execuion of current job on device N and remove device from HASP
  • $TEST - Check console is working

System status commands

Full documentation can be found starting from page 456 in the Operator’s Manual.

  • /ALTER - Change system scheduling parameters or virtual memory
  • /AREAL - Change real memory contents
  • /ATTN - Send attention interrupt to a task
  • /BLAST - Force kill a job
  • /DEVICE - Display info on a device
  • /DISPLAY LOCK n - Display locks, eg stat job lock
  • /DISPLAY - Display predefined variables
  • /DREAL - Display real memory contents
  • /FIO - Force a fake I/O interrupt
  • /JOB - List details of jobs
  • /KILL - Kill a job
  • /LOAD - Print load info, like the top 2 lines of the operator console
  • /OPER - Print output of operator’s console or send command to console
  • /QUEUE - Display queue status
  • /SCREEN - Display job status in TV screen like format
  • /TAPEQUEUE - Control and list the tape queue
  • /TASKS - Print task information
  • /USERS - Prints user information

There are also some synonyms, eg /MODIFY for /ALTER.

Device commands

Like on MTS terminals, device commands start with %, but the set of available commands is different. Full details are on p331 of the Operator’s Manual.

  • %3270 devn - switch console device to be devn
  • %ACCEPT ALL|job - control if messages are displayed by jobs
  • %EMPTY - Empties the screen.
  • %FAST - Switches terminal into fast mode; not of use on Hercules.
  • %IGNORE jobn - control if messages are displayed by jobs
  • %PF? - Lists PF key definitions
  • %PFn=def - Redefines program function key PFn to be def
  • %PTR devn - Switches the console printer device
  • %REFRESH - Makes sure that the screen is up to date.
  • %RESTART - Switch back to main terminal from backup.
  • %SLOW - Switches terminal into slow mode; not of use on Hercules.
  • %WRAP ON|OFF - Control line truncation

References

Operator’s Manual
HASP Manual


← Previous  Next →