Section 5.3

Special 150- instructions in Programmer's Mode

Numbers 1 to 14

5.3.1 The 150/1 Instruction - Timing Flag

e.g.   150    5    0    1

X is an integer.

Y-address field must be zero.

This instruction sets the job's timer to X seconds. It does not involve a drum transfer.

Each timing flag obliterates all preceding ones; i.e. if a job requests 5 seconds and then 3 seconds later, requests a further 5 seconds, its timer will be set to 5 seconds, not 7.

When a job is accepted, its timer is set to one minute.

Mill time used by the job is subtracted from this timer.  If the requested time is used up then timer overflow action will take place.
 

5.3.2 150/2 Instruction - Branch Interlock (see 10.1.4)

(i) For Y0

e.g.   150   3   A107   2

This instruction switches on branch X if X is waiting for this current branch (if X is waiting for a third branch then X is switched on but 1 is subtracted from its control number, this normally makes X repeat the 150/2 instruction which switched it off).  If y < 0 then this instruction also switches off this (current) branch and records it as waiting for branch X.

If X is for the current branch and y < 0 then this branch is switched off awaiting for itself - this can be used to shut down a branch.

(ii) For Y = 0

e.g.   150   4    0    2

In this case branch X is not switched on, but if X is already switched on or is switched off an waiting for a branch other than the current one, then the current branch is switched off and recorded as waiting for X (i.e. unless X is switched off waiting for this branch switch off this branch waiting for X)

If X is for the current branch, then this branch is shut down waiting for itself.

Only the least significant 3 bits of X are used. If X is for a non-existent branch or zero then illegal instruction action will occur. If X is in a closed down state because it is temporarily unbranched, then impermissible operand action will occur.

The Y-address (when Y 0) is not normally checked for either lockouts or reservations, this is to enable the instruction to be made fast. Care must be taken to ensure that the marker in Y is not involved in a peripheral transfer since if it is, the wrong marker may be examined. The effect of having Y which is either locked out or outside reservations will be similar to any other wrong Y address.

It is illegal for the 150/2 instruction to be pre-modified, this is because it would cause trouble in the case where subtracting one from the control number is expected to restore the instruction which switched the branch off. Both X-and Y-addresses may be replaced but this will be slow and in this case this Y-address is checked for both reservations and lockouts.
 

5.3.3 The 150/3 Instruction - End of HPD interrupt

This special fast 150 instruction is available only on machines fitted with a Hough Powell device - on other machines its attempted use will cause suspension due to illegal instruction.

The X-address must be that of a Hough Powell device reserved by the program — otherwise the program will be suspended due to reservation violation. The Y-address must be 0 or 1 - otherwise the program will be suspended due to impermissible operand.

When the program's restart on the HPD is entered, further interruptions are ignored until the program obeys a 150/3 instruction with Y=0 which causes OMP to start listening to interruptions again.

The case Y=1 says abandon the current transfer on HPD X. This is intended to be used in a routine emptying the 128 word buffer store after an end of frame interrupt.
 

5.3.4 150/4 Instruction - Weak Reservations

The cost in space is 64 words of core store and less than 200 words of drum. It will be possible for any installation to have this package built into its OMP but it is not desirable for an installation to have such an OMP in addition to its normal OMP. On Orion 1 if it is intended to run program which contain 142 instructions which refer to locations outside the reserved region then a hardware modification is also necessary - otherwise such instruction will be interpreted by OMP and will therefore be very slow.

The weak reservation package provides the following additional facilities.

1. A program may obey the instruction

   150  *WEA   1    20

which means "from here on allow me to read from any address in the core store". The condition is switched off with

   150  *WEA   0    20

2. It will be possible for one program in the machine to declare itself a master and for other programs to be subsidiaries. Some means of communication between the master and its subsidiaries is provided. In particular it will be possible for the master to keep a list of which subsidiaries are loaded and to know where they are in the machine. The idea is that one program, the master, may read in diverse data which can then be processed by several other programs. The master and any of the subsidiaries may be branched but the overall limit of not more than 15 branches in the machine remains.

The 150/4 instruction has the following specifications:

(a) X = 0, Y = N (0 < N < 16)

This says switch off this subsidiary in Style N.

Errors:  (i) Y out of range.                                                                   IMP.OP
(ii) This program not a subsidiary                                           IMP.OP

(b) X = 1, Y = N (0 < N < 16)

This says switch on all subsidiaries which are switched off in Style N.

Errors:  (i) Y out of range                                                                   IMP.OP
(ii) This program not the master                                            IMP.OP

Note that X = 0 and X = 1 are fast if there is no replacement or premodification

(c) X = 2 Y = IP

This says I am the master and IP is my interrupt point.

Errors:  (i) There is already a master                                                  IMP.OP
(ii) IP or IP-2 not in reservations                                         RES.VIOL

(d) X = 3, Y = M (0 < M < 16)

This says I am subsidiary M. Interrupt the master, storing the master's link in IP-1, and store M in the m.s. half and my datum point in the l.s. half of IP-2.

Errors:  (i) There is already a subsidiary M                                         IMP.OP
(ii) M out of range                                                               IMP.OP

If there is no master, the subsidiary is left halted.

(e) X = 4, Y = 0

This says remove this subsidiary. Interrupt the master as in the case X = 3, but in addition set the sign-bit of IP-2 equal to 1.

Errors:  (i) This is not a subsidiary                                                      IMP.OP
(ii) Y 0                                                                             IMP. OP

(f) X = 5, Y = IP-1

This says, exit from master's interrupt routine.  Obey the link in Y as in the instruction

   150   IP-1   0   25

Errors:  (i) Y or [Y]m not in reservations                                          RES.VIOL
(ii) This is not the master.                                                  IMP.OP

When the master is in its interrupt routine (i.e. following a 150/4 with X = 3 or 4 in a subsidiary), it will not be interrupted again until after it has obeyed a 150/4 with X = 5. If the master is branched, then the control path of Branch 1 is used for the interrupt routine and the other branches are temporarily closed down as in the case of peripheral incident routines or ENTER with links. If the subsidiary attempts to interrupt the master when the master is in its interrupt routine, it will be suspended until the master obeys 150/4 with X = 5.

Further error: X > 5 causes                                                            IMP.OP.
 

5.3.10 The 150/10 Instruction - Stop

e.g.  150   8   0   10

X is an integer.
Y is an integer.

This instruction stops the job in mode Y and prints X (if X 0)

(a) Y = 0    This mode causes the job to be halted. A message of the following form is printed on the Flexowriter.

jobname HALTED Value of X (if 0)

(b) Y = 1    This mode causes the job to be halted until a document is loaded anywhere, when the job will continue by obeying the instruction after the 150/10 (this mode is for use by Basic Input). There is no printing on the Flexowriter and the X-address is ignored.

(c) Y = 2    This mode is used when the job is to be rerun (see 5.7.2.2)

If a rerun-tape has not been loaded when this instruction is obeyed then the job is suspended awaiting rerun. A message of the following form is printed on the Flexowriter.

    jobname   SUSPD.RERUN   Value of X (if 0).

When the rerun-tape is loaded the job is rerun.

If a rerun-tape has been loaded when this instruction is obeyed then the job is rerun.

When the instruction has been read the job will be re run so long as the job's core-store reservation is at least 1008 words, otherwise reservation violation on the 150/10 instruction will take place.  A branched program is temporarily unbranched when re-run.  150/25 may be used to restore the branch conditions.

(d) Y = 3    This mode causes the job to be suspended. A message of the following form is printed on the Flexowriter.

   jobname   SUSPD    Value of X (if 0)

(e) Y=4,5 or 6    These modes are intended to be used after an unsuccessful request for more core-store, drum-store or peripheral. These modes cause the job to be halted until some core-store or drum-store or peripheral becomes available, when the job will continue by obeying the instruction after the 150/10.

The message for Y=4 is of the following form:-

   jobname   NO SPACE   Value of X (if 0)

The message for Y=5 is of the following form:-

   jobname   NO CORE   Value of X (if 0)

The message for Y=6 is of the following form:-

   jobname   NO DRUM   Value of X ( if 0)

(f) Y=7    This is similar to Y=4, 5 or 6 except that there is no printing on the Flexowriter and the X address is ignored.

For jobs which are halted with Y=0 or 1 or 4 or 5 or 6, RUN directive (see 5.7.3.3) will cause the job to continue by obeying the instruction after the 150/10.

For jobs which are suspended with Y=2 or Y=3, ENTER directive (see 5.7.3.4) will cause the job to continue by loading and entering the chapter.

If the job is branched then all the other branches will be stopped in the some mode, except for Y=2 when OMP will temporarily unbranch the job.

If Y>7 then impermissible operand action will take place.
 

5.3.11 The 150/11 Instruction - Abolish.

e.g.  150   1   0   11

X is an integer.
Y-address field must be zero.

This instruction terminates the job. It causes the peripherals reserved for the job to be relinquished and after appropriate terminating action, disengages the devices (see 5.3.31).

The core-store, drum-store and devices allocated to the job are thus made free.

After outputting the relinquish message for each peripheral reserved for the job, two lines of the following form are output on the Flexowriter.

ABOLD   Mill time      Peripheral time      Value of X (if 0)
Local Civil Time

All times are in hours, minutes and seconds.

Mill time is the mill time used by this job.

Peripheral time is the total mill time used by higher priority jobs while this job was in the machine.

Local Civil Time is the time at which the job was abolished.

For example, the instruction given for a job whose name is BLOGGS may produce the following printing

BLOGGS RLQD *SR1-TRB
       RLQD *SP1-SPA
       RLQD *MT1-MTD
       ABOLD 0.05.21   0.10.56    1
       15.18.37
 

5.3.12 150/12 Instruction - Date and Time

e.g.  150  A100  A200  12

This instruction asks OMP to give the date and time.

Into X is stored the date in character form; the characters are in the standard internal code (see 5.6.1)

the m.s. character C0 is SP
C1 and C2 give the date (SP1 to 31)
C3, C4 and C5 give the month (JAN to DEC)
C6 and C7 give the last two digits of the year
e.g. SP21FEB65

Into Y is stored the date (in a mixed radix form) and the time

Bit D0 is zero

Date in D1 to D23

Bits D1 to D11 give the year (value 1965 for year 1965)
Bits D12 to D15 give the month (value 1 for Jan)
Bits D16 to D20 give the date (value 1 for the 1st of the month)
Bits D21 to D23 give the day of the week (value 1 for Sunday)

Time in D24 to D47

This field, a binary integer, is the number of seconds since midnight.
If X=Y then the information obtained is the date in the mixed radix form and the time.
If X or Y is outside reservations then reservation violation action will occur.


5.3.13 150/13 Instruction - Message to Flexowriter or Monitoring Peripheral

e.g.  150   A100   0   13

X is the address of a core-store register.
Y is an integer.

This instruction asks OMP to output one line of information (i.e. the message) on the Flexowriter or the job's monitoring peripheral.

The message in character form, is stored in the core-store starting at the m.s. end of the register whose address is X. The message should be terminated by NL character.

The characters and maximum number allowed in the message, depend on the type of device being used for output of the line containing the message.

Y = 0

A line containing the message is output to the Flexowriter, OMP precedes the message by the jobname and appends full stop character at the end of the message.

The characters allowed are those of the standard internal code (see 5.6.1) Character-value 7 and character-value 63 are not output. The error character (character-value 14) is output as underline character.

The maximum number of characters allowed in the message is 80. If no NL character is present within the ten words X to X+9, then the first 80 characters are taken as the message.

Y = 1

A line containing the message is output to the monitoring peripheral. OMP does not output the jobname nor full stop character.

The characters allowed are those available on the particular type of device being used as monitoring peripheral (see 5.6). Character-values not in the particular code are output as the appropriate error character (character-value 14) for that particular code.

The maximum number of characters on

a 7-track paper tape punch is 104
a 5-track paper tape punch is 69
a line printer is 118
a card punch is 80

If no NL character is present then the maximum number is taken as the message.

If the job has a monitoring peripheral but it is disengaged then OMP asks the operator to engage it; a message of the following form is output on the Flexowriter

jobname    ENGAGE      SPB*

When this is done the line containing the message is output.

If the job has no monitoring peripheral, then OMP outputs the message to the Flexowriter, treating it as the case Y=0.

Y = 2

This differs from the case Y = 1 only if the job has no monitoring peripheral, in which case, the job is halted on this 150/13 instruction. OMP outputs a message on the Flexowriter to inform the operator, e.g.

jobname    NO MON.PER

The operator may use OUTPUTON (see 5.7.3.7) and RUN (see 5.7.3.3) directives to cause the job to continue by obeying this 150/13 instruction again.

Y = 3

This differs from the case Y = 1 only if the job has no monitoring peripheral, in which case OVR is set and the job continues by obeying the instruction after the 150/13 instruction.

Y = 4

This case is similar to the case Y = 0 except that if the ENGINEER bit with value 128 is set (see 5.7.4.9) the message will also be punched into the log tape.

 

Core-store region (X onwards) containing the message must be within reservations, otherwise reservation violation action will occur.

Y > 4 causes impermissible operand action.

If OVR is set then writing with overflow set action will occur.
 

5.3.14  150/14 Instruction - Question to Flexowriter.

e.g.  150   A100   A200   14

X is the address of a core-store register.
Y is the address of a core-store register.

OMP outputs a line containing the question stored in X onwards on the Flexowriter, and then reads a line containing the answer into Y onwards.

The question in character form is stored in the core-store starting at the m.s. end of the register whose address is X. The question should be terminated by NL character. The characters allowed are those of the standard internal code (see 5.6.1). The maximum number of characters allowed is 80.

If no NL character is present within the ten words in X to X+9 then the first 80 characters are taken as the question.

OMP outputs two lines to the Flexowriter. The first line contains the question preceded by the jobname and is terminated by a question mark. The second line contains the characters

      TB      ANS      SP

and the Flexowriter is then left in the select state waiting to receive the answer which, if known will be typed on this second line by the operator. The answer is terminated by NL character.

If the answer is not known the operator must free the Flexowriter by typing NL character. This answer will be taken to mean that the true answer will be given later and so the job is then suspended awaiting answer. The answer when known is given using ANSWER directive (see 5.7.3.5). When the answer is given either on the Flexowriter or via a paper or card reader, the answer will be stored and the job allowed to continue.

The answer must be less than 80 characters long and must be terminated by end of line character (NL character on 7-track, CR LF characters on 5-track, on cards one card is one line). The answer will be stored in the core-store: the first character is stored at the m.s. end of the register whose address is Y. The NL character is stored and terminates the answer. The characters after the NL character are SP characters, in the word containing the NL character.

The answer punched on the Flexowriter or 7-track or 5-track paper tape or cards may contain ER or BS characters or VS. OMP forms a "clean line" (i.e. ER and BS characters are removed accordingly, ER characters are removed) and it replaces VS by a single SP character. The first character stored is the first correct printing character.

When the 150/14 instruction is obeyed the core-store region, X onwards (containing the question and NL character) and Y must be within reservations otherwise reservation violation action will occur for the 150/14 instruction.

When the answer comes to be stored then the registers (up to a maximum of ten) actually used for the answer are checked for being within reservations. If all the answer has not yet been stored and reservations are violated, then an error is reported for the line containing the ANSWER directive, this error being for reservation violation. The job is suspended awaiting answer.

If the answer is more than 79 characters then an error will be reported for the line containing the ANSWER directive, the error being for impermissible operand. The job is suspended awaiting answer.

If OVR is set then writing overflow set action will take place.

If the job is suspended awaiting answer and ENTER with a link is entered, then this enter sequence should not obey a second 150/14 instruction.