BESM-6 was a mainframe with an operating system designed at the time when
the batch execution model was predominant. There were just a few process
slots (say, 15), and it was not unusual for a task to wait in the "input queue"
for a long time before it would be assigned a process slot and would start
executing. The task, whether entered into the system from punch cards
by an operator, or spawned by a process, consisted of the following parts:
1. The passport, containing identifying information and resource requests.
2. One or more data sets.
3. The terminator.

(Wherever Russian words or abbreviations were used, the corresponding English
ones will be used below.)

1. The passport must start with the identifying line:

USER NNNNXX^
or
USER NNNNXXYYYYYY^

(The overbar character, represented here by caret, was used as the newline
character, so that multiple passport lines could be combined on one punch card.
Where N, X, Y were decimal digits. NNNN was the account number proper, and
the rest were used according to the local budgeting rules, if any,
or at the user's discretion. The suggested meaning of the 12 digits
was DGPECUTASKVA, where
D - department
G - group
PE - person
CU - customer
TASK - task
VA - variant
implying that a programmer could work on several tasks for several customers
at once.

There was a way to set a password per user id. If a password (up to 6 digits)
was set, it had to be specified as USER NNNNXX/PASSWD^ Some organizations,
e.g. the Computing center of the Academy of sciences, did not use passwords,
relying on the honor system and the logging capabilities of the OS.

Next, the following resource request lines in any order must be present:
TIME HHMMSS^   (leading zeros could be omitted)

There is no default for the CPU time allotment, as its amount was used to assign
the process to a particular queue and a group of process slots.

START octal^   (the execution entry point)

PAGE list of octal ranges^ or RAM decimal^ (up to 32 pages)

If PAGE was specified, the entry point had to be within one of the listed
pages.

The following requests were optional:

PRINT decimal^ (meters of paper for printing, default 7, max 64)

There were 240 lines per meter.

TRACT decimal^ (space on magnetic drums for temporary storage, 1 tract = 1 page)

TAPE NN(XXXX[-RW])^ (NN was octal 30-67; -RW requested the read-write access)

There was no filesystem - the disk packs and the tape reels had numerical
identifiers. The request was used to indicate to the operator which disk packs
or tapes had to be installed before a task occupies a process slot. The task
then used the specified NN numbers as file handles. Handles numbered 0 to 27
octal were used for the temporary (drum) storage.

TELE^ (the task will be interactive, awaiting connection from a terminal)

The passport ends with a character E.

2. A data set consists of a sequence of data elements. In all element types
but L and A the spacing characters and punchcard boundaries are ignored.

S octal

Specifies the load address of the subsequent elements. Must be the first
in a set.

C 9 or 18 octals

One or two machine instructions in an easy to read format
(there could be two instructions per word)

W up to 16 octals

Arbitrary data (not an executable word)

N floating point number

L 6 characters

Text literal in GOST encoding

A N

N = 0, 1, or 2 - introduces continuous text in various encodings, ending
with a _$ character pair

N = 3 - introduces binary data (raw punchcard images), ending with a card
with all punches in cols 1 and 41.

A data set ends with a character E

3. Terminator

The character sequence FINISH

The program 'besm6' reads the file which name is given in the command line
and, if successful, forms an input queue entry, loads and runs the task
from the input queue. Run 'besm6' without arguments to get a list of all
available options.
