Burroughs MCP: Batch and the Operator Console
Although our main focus is on time-sharing, it's good to know a bit on how the batch facility works on MCP. In this post I will give a brief introduction, along with details on how to use the operator console.
The B5500 operator console on retro-b5500. Source: Rupert Lane. License: CC0.
Batch
The MCP batch facility allows you to compile and run programs, and manage files on disk. Interestingly it uses a different syntax from CANDE.
Batch instructions are indicated by an invalid character in column 1,
by convention a ?. Multiple instructions per line are allowed if
separated by ;. The end of the batch job is indicated by a END
instruction.
Batch jobs can be submitted via punched cards, tapes, keyed into the operator console or (if you are not running time-sharing) via the data terminals.
To compile a program you use COMPILE file WITH compiler where file
is a file name for the compiled program and compiler is ALGOL,
FORTRAN etc. The source can be an existing file on disk or you can
take it from cards supplied after the compile directive.
Putting this together, here is how to submit a simple job using punched cards on the emulator. Create a plain text file that looks like this:
?COMPILE LIFE/DISK WITH ALGOL
?DATA CARD
BEGIN
FILE OUT PRINTER 4 (2, 15);
INTEGER J;
J := 42;
WRITE(PRINTER, /, J);
END.
?END
The first line is a batch directive to create LIFE/DISK using the
Algol compiler. The second line indicates that this file should come
from the following cards. Next is the Algol program which terminates
with END.. Finally, the batch directive ?END finishes the job.
On retro-b6600, switch to the card reader, load this file and press
the REMOTE button. On simh, break into command mode on the main simh
window by pressing Control-E then typing attach cd0 /path/to/file
and then continue.
MCP will sense that there are cards to read automatically. On the operator console you will see work being done as the program is compiled, executed and the results printed.
5:ALGOL/LIFE= 2 BOJ 1020 PBD0004 OUT LINE:ALGOL/LIFE= 2 0:PRNPBT/DISK/SITE= 3 BOJ 1020 ALGOL/LIFE= 2,PST= 1 EOJ 4:LIFE/DISK= 2 BOJ 1020 PBD/0004001 REMOVED PBD/0004001/0000000= 18 SEGS--CREATED 10/05/25 AT 10:20:16:35 PBD0005 OUT PRINTER:LIFE/DISK= 2 PRNPBT FOR ALGOL/LIFE, PST= 1, IOT= 1; EOJ AT 10:20 PRNPBT/DISK/SITE= 3,PST= 1 EOJ LIFE/DISK= 2,PST= 1 EOJ 0:PRNPBT/DISK/SITE= 2 BOJ 1020 PBD/0005001 REMOVED PBD/0005001/0000000= 3 SEGS--CREATED 10/05/25 AT 10:20:18:14 PRNPBT FOR LIFE/DISK, PST= 1, IOT= 1; EOJ AT 10:20 PRNPBT/DISK/SITE= 2,PST= 1 EOJ
Switch over to the printer window on retro-b6600 or the printer file
(units/printer.txt) on simh and you will see the compiler output and
finally the program running and printing 42. Below is how it looks,
slightly edited to remove whitespace:
LABEL 000000000LINE 00125278?COMPILE LIFE/DISK WITH ALGOL ALGOL /LIFE
LABEL 000000000LINE 00125278?COMPILE LIFE/DISK WITH ALGOL ALGOL /LIFE
BURROUGHS B-5700 ALGOL COMPILER MARK XIII.0 MONDAY, 10/05/25, 10:20 AM.
BEGIN 0000
FILE OUT PRINTER 4 (2, 15); 0000
INTEGER J; 0003
J := 42; 0003
WRITE(PRINTER, /, J); 0004
END. 0011
2 IS 14 LONG, NEXT SEG 1
PRT(31) = OUTPUT(W) INTRINSIC, SEGMENT NUMBER = 3.
PRT(5) = BLOCK CONTROL INTRINSIC, SEGMENT NUMBER = 4.
PRT(14) = ALGOL WRITE INTRINSIC, SEGMENT NUMBER = 5.
PRT(15) = ALGOL READ INTRINSIC, SEGMENT NUMBER = 6.
PRT(16) = ALGOL SELECT INTRINSIC, SEGMENT NUMBER = 7.
1 IS 2 LONG, NEXT SEG 0
8 IS 69 LONG, NEXT SEG 0
NUMBER OF ERRORS DETECTED = 0. COMPILATION TIME = 1 SECONDS.
PRT SIZE = 26; TOTAL SEGMENT SIZE = 85 WORDS;
DISK SIZE = 9 SEGS; NO. PGM. SEGS = 8
ESTIMATED CORE STORAGE REQUIRED = 696 WORDS.
ESTIMATED AUXILIARY MEMORY REQUIRED = 0 WORDS.
LABEL 000000000LINE 00125278?COMPILE LIFE/DISK WITH ALGOL
ALGOL /LIFE
LABEL 000000000PRINTER00125278?COMPILE LIFE/DISK WITH ALGOL
LIFE /DISK
42,
LABEL 000000000PRINTER00125278?COMPILE LIFE/DISK WITH ALGOL
LIFE /DISK
The above will do a 'load and go' compile, not storing the executable on the disk permanently. If you wish to do this, change the compile command to be:
COMPILE LIFE/DISK WITH ALGOL FOR LIBRARY
and the binary can then later be run with:
EXECUTE LIFE/DISK
Other batch commands are:
| REMOVE file | Delete file from disk |
| DUMP TO tape file | Save files to a tape in library format |
| UNLOAD TO tape file | As above, but deletes file on disk after tape write |
| LOAD FROM tape file | Loads file from specified library tape |
| ADD FROM tape file | As above, but only loads to disk if not already there |
| CHANGE file1 TO file2 | Renames file1 to file2 |
file in the above can use the = wildcard: for example, to remove
all files under the time-sharing user guest you could do REMOVE
=/GUEST.
The Operator Console
The operator console, or SPO, allows the operator to monitor tasks and
manipulate the running system. It is half-duplex, so it can either be
printing or accepting input. To start giving input, press Esc and
type the command, terminated by Enter. To abandon the command, press
Esc again. simh precedes input with an I and output with an R
when printing to the console.
Commands are two letters, like MX. They take optional parameters
which are in most cases given after the command. One special case is
when you need to provide a 'mix number' or process id: in this case
you give the number before the command.
Let's look at some commands that are useful on emulation.
MX will show what jobs are currently running. For example, if I typed
this while the above batch job was running I would see:
MX 0:CANDE/TSHARER= 1 4:LIFE/DISK= 2 END MX
If I wanted to kill the job, I would find its mix number -
here 2 - and 'deep six' the job with the DS command:
2 DS -OPRTR DS-ED:LIFE/DISK= 2, S= 2, A= 11 LIFE/DISK= 2,PST= 1 DS-ED
If I had compiled the file to save on disk, I could run the binary via
the CC or ? command which takes batch instructions:
? EXECUTE LIFE/DISK; END 4:LIFE/DISK/SITE= 2 BOJ 1135 PBD0009 OUT PRINTER:LIFE/DISK= 2
PD will show a listing of files on disk, allowing the = wildcard.
To see a list of files starting with FORTRAN:
PD FORTRAN/= FORTRAN/TRANS FORTRAN/DISK
The image at the top of this post shows the start of a directory
listing of all files on the disk via PD =/=.
Here is a full list of operator commands; many of these are only of
use when running on real hardware. m means mix number.
| Command | Usage |
|---|---|
| m AX data | Send data to program that is waiting for input |
| BK | Send break |
| BS tu/buf | Make tu/buf a SPO |
| CC control info | Supply control information, eg run a program |
| ? control info | Supply control information, eg run a program |
| CD | Type info on pseudo decks on disk |
| CE | Start CANDE |
| CI file | Change intrinsics file |
| CL unit | Stop the job using unit |
| m CT proc io | Set limits for processor or I/O for a job |
| m DS | Terminate a job |
| DT mm/dd/yy | Set the date |
| ED deck | Eliminate pseudo card deck |
| EI | Was intended to stop all processes, but now prints EIO |
| ES job spec | Eliminate scheduled job |
| m FM unit | Reply to a FM RQD message |
| m FR | Tell a job that was the last tape reel |
| m IL unit | Designate what unit to find a non-labelled file on |
| m IN index = int | Insert a value in the PRT at index |
| LD dk/mt | Load CONTROL/DECK from disk or tape |
| LN | Start a new log file |
| LR | Run LOGOUTR/DISK |
| MX | List programs in the mix |
| m OP | Specify that a COBOL file is optional |
| m OK | Resume processing of a job |
| OL unit | Print status of units |
| m OT index | Print value of index in memory for job |
| m OU unit | Send output to unit |
| PB unit | Load a printer backup tape |
| PD file spec | List files on disk |
| PG unit | Purge a magnetic tape |
| m PR = level | Set priority of a job |
| m QT | Skip a printer backup file |
| RD #int | Remove a pseudo card deck |
| m RM | Remove file flagged by job as duplicate |
| RN n | Specify number of pseudo card decks |
| RS unit | Restart a job |
| RW unit | Rewind and lock a tape |
| RY unit | Mark a tape as ready |
| RO,SO,TO | Reset, set and list options |
| SF factor | Set multiprocessing factor |
| SS SPO or ALL | Send message to remote SPOs |
| m ST | Suspend a job |
| SV unit | Mark a tape as not ready |
| TF | Show multiprocessing factor |
| m TI | Show how much time a job has used |
| TR hhmm | Set time |
| TS | List tasks in the scheduler |
| m UL unit | Designate unit as source for file |
| WD | Print current date |
| WM | Print system version |
| WT | Print current time |
| WU | Print who is logged in where |
| m WY | Print why a job has been suspended |
| XI file | Swap intrinsics file |
| XS job | Force job to be executed from scheduler |
Further Information
On bitsavers, the Operations Manual section 4, "Control Information"
starting on PDF page 63, details the batch language and options. The
B5500 Handbook section "Keyboard Input Messages" on PDF page 37
defines the operator console commands (except a few time-sharing
related ones like CE).
Richard Cornwell also has a good summary of batch commands.
Questions, corrections, comments
I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com and I will add it here and update the main text.