Section 5.3

Special 150- instructions in Programmer's Mode

Numbers 15 - 25

5.3.15   The 150/15 instruction - Read directory

This instruction has the effect "copy word Y of my directory to X".  It enables the program to find out information set by the job tape as stored by the monitor program in the directory - e.g. what peripherals are reserved for the job.  X must be a working store address within reservations and Y must lie in the range -1 Y 8+n where n is the number of peripherals reserved for the job.  Violation of these restrictions causes suspension due to reservation violation or impermissible operand respectively.

Y = -1 (or 32767) Drum Reservations.          x'm = drum datum point, x'u = -N where N is the number of words on the drum reserved for the job.  If N=1 this means that the job is monitoring on drum transfers; it is then only possible to find out the drum reservations by switching this monitoring off.

Y = 0  produces no useful information.

Y = 1  Time available   x'=-t where t is the amount of time (in units of 16 microsecs) reserved for the job till the next timing flag.

Y = 2  Link   x'm = address of the 150/15 instruction (or the beginning of the string leading to it).  x's = the state of overflow before the instruction was obeyed.

Y = 3  Job Name  x' = the job name in character form, left justified.

Y = 4  produces no useful information.

Y = 5  Reservations and Monitoring   The X address position gives the datum point and the Y address the upper reservation.  D0, 1, 24, 25 are 1 if the job is monitoring on signals, overflow, jumps and floating point overflow respectively.  D26 is 1 if the job is doing unrounded floating point operations.

Y = 6  Time used   x' = T where the time used by the job (in units of 16 microsecs) is T-t.  To find the time used add the contributions for Y = 1 and Y = 6.

Y = 7  Miscellaneous Information   D0 is a 1 if the program is monitoring on *OWN - in which case the Y-address position is one less than the address jumped to on program failures.  D24-26 are zero if the program is not branched, otherwise they give the branch number.  D28-32=m, where m is zero if the job has no monitoring peripheral other than the Flexowriter, otherwise a 150/15 instruction with Y-address m will yield the peripheral word corresponding to the monitoring peripheral.

Y = 8  First Peripheral Word   x'u  = programmers name for the first peripheral reserved for the job.  D24 is 1 if the job is monitoring transfers on this peripheral.  The integer contained in D40-47 has the value 253 if the peripheral is floating.

Y = 9,10,..7+n give the corresponding information for the second, third...nth peripheral reserved for the program.

Y = 8+n   x'=0.  To find the value of n obey 150/15 instructions with Y = 8, 9, etc. until a zero word is obtained.
 

5.3.16   The 150/16 Instruction - Printout region of Job's store

e.g.  150     *APE     *IFG     16
00S     A125      20       1

The instruction and the word in the register after it provide information which cause OMP to printout up to 20 words of either core or drum store in various styles onto the job's monitoring peripheral.

The first word

e.g.   150     *AI       0      16

The X and Y address fields specify the styles of printing required. Permissible styles are APEIPG; impermissible styles or no style specified will cause impermissible operand action.

The second word specifies drum or core, the starting address of the region, the length and the condition Z (i.e. whether the printing of clear words is to be suppressed).

Drum or core

If Z = 2 bit (i.e. D30) of this word is 0 then the core is specified, if this bit is 1 then the drum is.

Starting address

If RX bit (D24) of this word is 0 then the upper half (D0 to D23) of this word gives the starting address of the region to be printed.

If RX bit (D24) of this word is 1 then the X-address field (D9 to D23) of this word is the address of the core-store register containing in its l.s. half, the starting address of the region.

The region specified must be within reservations otherwise reservation violation action will occur.

Length

If RY bit (D25) of this word is 0, then the Y-address field (D33 to D47) gives the length of the region.

If RY bit (D25) of this word is 1 then the Y-address field is the address of the core-store register containing in its l.s. half, the length.

The length specified must be non-zero and not greater than 20, otherwise impermissible operand action will occur.

Condition Z

If Z = 1 bit (i.e. D31) is 1, then the printing of clear words is suppressed otherwise not.

Styles and their printout

(i)   A - prints the address of the register referred to (8 characters)

e.g. A5 for core-store register A5, D106 for drum-store register 106.

(ii)  P - prints the content as program (29 characters)

e.g.   80S   0   83   0

The function is output followed by X, Y or S if necessary; 140 and 141 functions with the mode preceded by full stop.

The X and Y address fields are printed as core-store addresses if within reservations e.g. A51; if not these are printed as integers; they are printed as negative integers if greater than 32192;  Y-address field for 140 and 141 is printed in the appropriate form e.g. *MT3.  Replaced addresses will be bracketed.  The Z-address field is printed unless TX = 1 and TY = 0 and Z = 0 (i.e. the instruction is 2-address unmodified).  Otherwise the Z-address field is printed and unless it is zero or unless the instruction is a 150, it is printed as a core-store address e.g. A5.

(iii)  E - prints the contents in octal 16 characters)
e.g. 2000000000000123    

(iv)  I - prints the contents as a signed integer (16 characters)
e.g. +70368744177747

(v)   F - prints the contents as a signed fraction (16 characters)
e.g. +0.5000000000005

 (vi) G - prints the contents in floating - point form (16 characters)  Non-standard numbers are printed as *
e.g. +1421085471 -14

For each register, the required styles are printed on one line with two spaces between each style.

Printout is to the monitoring peripheral. If the job has no monitoring peripheral and more than one word or one word with more than 4 styles specified is to be output, then the job is halted and the message NO MON.PER is printed on the Flexowriter.  If only one word with fewer than 5 styles is specified is to be output and the job has no monitoring peripheral then the printout of the word will be to the Flexowriter.
 

5.3.17   150/17 Instruction - Output Directory Information

e.g.    150     0      0     17

X is 0 or 1

Y-address field must be zero

This will output information about the job's directory.  If X = 0 and the job has a monitoring peripheral the information is output on it, otherwise on the Flexowriter.  If X = 1 the information is only to the Flexowriter even if the job has a monitoring peripheral.

The information given is

(i)    the amount of core, the datum point and the amount of drum reserved,
e.g.    CORE    2736    DATUM    4096    DRUM    8704

(ii)   the control number, state of OVR and state of the job,
e.g.    CN    A126    OVR    0    HALTED

(iii)  the mill time used and the time left,
e.g.    USED    0.01.30    LEFT    0.00.57
where time used includes the time used by OMP for the job, as well as the time used by the job itself;  time left is time asked for minus time used by the job itself;

(iv)  the events being monitored in a style other than 0,
e.g.    MON    S J F

(v)   the peripherals reserved and devices allocated to the job,
e.g.*SP1  SPB  *MT1   MTB   *MT3

The state of the job given in line (ii) may be HALTED, WT.DOC, WT.RERUN, SUSPEND, WT.ANS, WT.SBP, WT.SPACE, WT.MASTR (for weak reservations), otherwise the job is going.

The letters in line (iv) may be S (signal), J (jumps), O (overflow), F (floating-point overflow), D (Drum), I (impermissible operand), R (program failure), T (timer), U (unrounded), P (priority), B (baseload), X (strong reservations - weak reservation machines), H (high density job - high density installations), Q (quick jumps), OWN followed by the address.

For branched programs (ii), (iii) and (iv) are given for each branch, together with the branch number and the number of the branch, if any for which it is waiting.  If output is to the monitoring peripheral then information about all the branches is output whereas if to the Flexowriter information is about that branch only.

Line (ii) e.g.  .2  ON  A313  OVR 0  AWTS  .3

X must be 0 or 1 otherwise impermissible operand action occurs.

If the monitoring peripheral is disengaged, then the ENGAGE message is output on the Flexowriter and output continues when this is done.
 

5.3.20   The 150/20 Instruction - Set Monitoring Style

e.g.     150     *SIG     2     20

X is an event

Y is a style

This instruction has the effect "set monitoring on event X in style Y".

Events.   This is one of

 Own monitoring (see 5.4)   

 *OWN

 Signals   

 *SIG

 Jumps   

 *JUM

 Floating point overflow   

 *FOV

 Overflow   

 *OVR

 External transfers   

 *DRU or peripheral name

 Impermissible operand   

 *IMP

 Program failure,

   with printing   

 *PFP

   without printing   

 *PFN

 Quick jumps   

 *QUI

 Timer overflow   

 *TIM

 Rounding floating point   

 *UNR

 Urgency   

 *URG

 Weak reservations (see 5.3.4)   

 *WEA

If X is zero, then the effect is to restore monitoring on all events to the default styles.

Style.  This is an integer between 0 and 5, or a core-store address, known as Style 7 (see 5.2.7).  For a list of styles on each event and default styles (see 5.2.)

If X is neither zero nor a recognised event then impermissible operand action will occur.

In a branched program only one branch may monitor on transfers to a particular peripheral (drum included) at any one time; if another branch attempts to set up monitoring to the same peripheral then impermissible operand action occurs, unless the first branch has previously set its monitoring style on this peripheral to Style 0.

If Y is not a permitted style or Y and Y-1 are not within reservations then reservation violation action will occur.

If X=*URG a message is printed on the Flexowriter informing the operator of the change of urgency e.g.

     jobname     *URG     2

0 is normal, 1 is baseload and 2 is top priority.
 

5.3.21   The 150/21 Instruction - Set Peripheral Incident

(see also 5.5 and 5.3.25)

e.g.    150    A100   A200    21

X is the address of a core-store register.

Y is the address of a core-store register or 0.

This informs OMP that should a specified incident (event or failure) occur on a specified peripheral then because of this interruption OMP is to enter the job's peripheral incident routine at Y with 0VR clear.  OMP, if the incident occurs also records the job as being in a "pushed down" state;  a 150/25 in the routine should be obeyed to "pull up".   Exit from the restart in general will be by a 150/25.

Storing of the link information, the failure information and output of the message are optional.

Possible incidents that may occur on a particular type of peripheral device have been given code numbers (see 5.5).

The Specified Incident and Peripheral Device

OMP obtains these from the word in X as follows:

Specified Incident

If RX bit (D24) is 0 then the X-address field. (D9 to D23) is the code number of the incident being specified.  If RX is 1 then the X-address field is the address of the register containing at the l.s. end, the code number of the incident.

Specified Peripheral Device

If RY (D25) is 0 then the Y-address field (D33 to D47) is the programmer's peripheral name of the peripheral being specified.  If RY is 1 then the Y-address field is the address of the register containing at the l.s. end, the programmer's name of the peripheral.

Link Information, Failure Information and Output of a Message

The Z-address field in X is looked at by OMP to see if the programmer wants these, should the incident occur.

Link Information

This is stored in the Link address i.e. in the register whose address is Y-1.  The sign bit records the state of OVR and the modifier half is the control number of the job at the time of the interruption.  Note that if incidents occur simultaneously the restarts are chained.

Failure Information

This is stored in the register whose address is Y-2.  Certain bits record the state of the device and addresses concerned with the transfer (see 5.5)

Output of Message

This is on the Flexowriter and is of the form

jobname     Geographical Name of Device     Type of Incident

If D31 (i.e. Z = 1 bit) of the word in X is 0, then the message will be output; if 1 then not.

If D30 (i.e. Z = 2 bit) is 0, then both link and failure information will be stored; if 1 then neither.

If D29 (i.e. Z = 4 bit) is 1 then the device (except for magnetic tape decks) will be disengaged.  Magnetic tape decks are left engaged except in the case of deck fail when the deck is disengaged.

Special cases

If the code number obtained is zero, then all possible incidents on the specified device will be set, so any incident will cause a jump to Y etc.

If Y = 0 (in the 150/21 instruction) then the standard (default) action on the specified incident will be set.  The standard action is to halt or suspend the job and output a message (see 5.5 and 5.8.4).

Branched Programs - see also 5.3.25 and 10.1.  In this case if the incident occurs the program is also temporarily unbranched (i.e. OMP remembers the branch interlocks and switches off each branch as waiting for Branch 1) and if the link is required OMP uses Branch 1's control number as the link for the program.

The following checking takes place for the 150/21 instruction; X and Y and other registers that may be referred to must be within reservations otherwise reservation violation action will take place.  The peripheral name obtained must be meaningful otherwise impermissible operand action will occur.  The code number must be one permitted (see 5.5) otherwise impermissible operand action will occur.

If X is the register after the one with the 150/21 then return is to X + 1 i.e. with X = V2 + 1, return is to V2 + 2.

Note that this incident restart information will be lost by OMP if the peripheral (e.g. *MT2) is relinquished or wronged.  This incident restart information is not lost if the peripheral is subsequently floated or its name is changed.
 

5.3.22   The 150/22 Instruction - Set Monitoring Peripheral

e.g.    150    *SP1    0    22

X is a programmer's peripheral name or 0

Y-address field must be zero.

This instruction sets X as the monitoring peripheral for the job.

X must be the programmer's peripheral name of a slow output device already reserved for the job.  This instruction makes sure that the allocated device is in fact engaged (by asking the operator to engage it if not).  It also refills the code buffer with the standard code table for line printers and punches.

Monitoring information will come out on this output device from then onwards.  If this peripheral is subsequently relinquished, then monitoring information will come out on the Flexowriter.

If X = 0 then this instruction sets the Flexowriter as the monitoring peripheral.  This is the default action.  Only a limited amount of monitoring information is allowed on the Flexowriter.

If X is a programmer's peripheral name for an output device which is not reserved for the job then reservation violation action will take place.

If X is a programmer’s peripheral name for an input device or a magnetic tape deck or is not a meaningful programmer's peripheral name, then impermissible operand action will take place.
 

5.3.23   150/23 Instruction - Return from Private Monitoring

e.g.    150    *SIG    A197    23

This is usually used after monitoring some program event in Style 7.  The effect is to obey the instruction whose address is ym and set OVR according to ys and the current state of overflow, as though monitoring on X were switched off (suppressed or ignored).  It enables, for example signalled instructions to be obeyed although the program is monitoring on signals.  Y is normally one less than the Y of the 150/20 instruction which set up the monitoring style.

X maybe one of the following events; these are arranged in a hierarchy (*OWN is low) such that if monitoring on one event is suppressed then so is monitoring on lower events, monitoring on higher events remaining active.  The hierarchy is

*OWN

*SIG

*JUM

*FOV

*OVR

*DRU or peripheral name

*IMP

*PFP or *PFN

Thus if, for example, an instruction which is both a signal and sets OVR (where the program is monitoring ob both *SIG and *OVR in Style 7) will first jump to the *SIG routine which will end with a 150/23 with X as *SIG, and then the *OVR routine will be entered, this will end with a 150/23 with X as *OVR, so that the instruction will now be obeyed and the program will continue.

X must be one of the above events otherwise impermissible operand action will occur, in particular X=*TIM, *UNR or *URG will cause this action.

Y and ym must be within reservations, otherwise reservation violation action will occur.

If the program is monitoring overflow, *OVR in Style 7 then a 150/23 instruction which overflows will not cause entry to the *OVR routine (if this were done the program would get into a loop).
 

5.3.24   150/24 Instruction - Start New  Branch (also see 10.1)

This instruction has two main uses

(a) to set up a new branch of a program
or  (b) to change the control address of an existing branch.

Case (a)

e.g.    150    2    A200    24

This asks OMP to set up a new branch of the program and to give this new branch the branch number X and to set its entry-point as Y, there previously not being a branch numbered X.  X must be an integer in the range 2 to 7.

If the program has not been previously branched, then the current branch is set up as branch 1.

The new branch is recorded as switched off waiting for the current branch (it can be switched on by a branch interlock instruction when required).

When a new branch is set up its directory-entry is put in the high-numbered registers of the program's reserved region, the program's reserved region is thus reduced.  The monitoring conditions are set to default and the branch's timer is set to 1 minute.  Its jobname is composed of the original jobname together with the branch number, e.g. BLOGGS2, note that the jobname of Branch 1 is BLOGGS and that BLOGGS1 is illegal.

If there is already a total of 15 branches in the machine, then a message of the following form is output to the Flexowriter,

   jobname  CANNOT  BRANCH

and the job is halted.

Case (b)

In this case X is the number of an existing branch (X must lie between 1 and 7) and must not be the current branch.  This asks OMP to set X's control address as Y and switch X off waiting for the current branch.

The instruction

       150.1   X    Y   24

has the specification switch branch X off waiting for the current branch and put branch X's control address into Y.  If branch X does not exist Y is set to zero.

If X does not lie between 1 and 7, or if X is the current branch then impermissible operand action will occur.

Y must be within reservations, otherwise reservation violation action will occur.
 

5.3.25   150/25 Instruction - Return, restoring Conditions

e.g.    150    A199    0     25

X is the address of a core-store register.

Y - address field must be zero.

This instruction is associated with peripheral incident routines and with Primary Input ENTER (with a link) routine, to cause "pull up" action and in the general case to return (cf 87 instruction), restoring the program to the state it was in before the incident occurred or ENTER (with a link) was read.

If the incident occurs or ENTER (with a link) is read OMP before entering the routine, if asked to will store link information in the link address specified.  Besides storing the link in the modifier half and the state of OVR in the sign bit OMP also stores other information about the state of the job in the upper half.  OMP also records the job as being in a "pushed down" state. The routine is then entered.

A 150/25 causes one level of "pulling up" action.  X (if not A0) is the address of the register containing the link information; OMP sets xm as the control number and set OVR according to xs and the current state of OVR, and then restores the program to the state it was in before the incident occurred or ENTER (with a link) was read.

The instruction

         150     A0     0     25

causes one level of "pulling up" action to take place, i.e. no jumping takes place.  The instruction after this 150/25 is the next instruction to be obeyed.

If a job is already in a "pushed down" state when an incident occurs or ENTER (with a link) is read, then there is a further level of "pushing down" action.  The 150/25 of the second routine will pull up one level and, if not A0, returns to the first routine etc.

Non branched Programs

If a peripheral incident routine or ENTER (with a link) routine (also see 5.7.3.4) is entered OMP records the program as being in a "pushed down" state, and any previous pushing down is remembered.  ENTER (without a link) does not cause "push down" action and causes any previous "pushing down" to be forgotten.

Branched Programs  (see also 10.1.9)

If a peripheral incident routine or ENTER (with a link) routine is entered OMP records the program as being in a "pushed down" state and in this case OMP temporarily unbranches the program (i.e. the branch interlocks are remembered and all branches are switched off awaiting Branch 1).  If already "pushed down" OMP remembers this.

If the link for the program is required then Branch 1's control number is used.  The routine is considered as being Branch 1.  The 150/25 of the first routine will restore the branch interlocks and return to the main program.  The control number for the current branch (150/25 can appear in any branch but it is usually Branch 1) is set to xm and state of OVR according to xs and the current state of OVR.  ENTER (without a link) does not cause "pushing down" action and causes OMP to switch off all branches awaiting Branch 1;  any temporarily unbranched state is forgotten as is any "pushing down".

Rerun 150/10 with Y = 2 causes the program to be temporarily unbranched (i.e. the branch interlocks are remembered and all branches are switched off awaiting Branch 1).

A use of the dummy 150/25 i.e. with X = A0 is in restarts within restarts for example.

Chained Peripheral Incidents (see also 5.5)

If separate peripheral incident routines (with links) for several incidents have been specified and more than one of these incidents occur simultaneously then the routines will be chained, so that the 150/25 of one will cause entry to the next restart and so on.

X and xm must be within reservations otherwise reservation violation action will occur.