Jump Over Left Menu
11. MONITORING AND FAULT DETECTION
11.1 Supervisor Monitoring
With the aid of special hardware, the Supervisor keeps a record of the progress of a program during its run. This supervisor monitoring notes amongst other things the store in use, the computing time taken, and the occurrence of errors which may prevent the successful execution of the program.
In Atlas, provision is made for the automatic detection of a variety of clearly defined fault conditions, which may be due either to mistakes in the program itself, or to errors occurring in the computer or the peripheral equipment. The faults result in entry to a part of the Supervisor known as the monitor program, with the particular fault responsible being distinguished by a mark or count set in B91.
The monitor program consists of a set of routines, some in the fixed store and some in the main store, whose primary purpose is to print out such information as will enable the cause of the fault to be diagnosed. In the case of certain types of program fault, it may be possible for the programmer to decide beforehand what action should be taken to enable the program to be resumed; he will then provide a number of fault routines and list them in the trapping vector. The monitor program will enter the trap indicated in B91, if such indication does in fact correspond with an entry in the trapping vector; otherwise it will proceed to diagnostic printing, or will transfer control to a private monitor routine if so requested. This private monitor program may provide a special form of diagnostic printing - either instead of or in addition to the standard - and may, once and once only, cause the program to be resumed. Any subsequent monitoring will always be followed by the End Program sequence, except when the fault is trapped.
When entry to the private monitor follows expiry of the total time allotted to the program, a further 4 seconds of computing time is allowed for the completion of the private monitor routine. Similarly, if execution time is exceeded, a further minute of execution time is allowed, and if output is exceeded, a further block is allowed.
11.1.1 Types of Program Faults
We shall here concern ourselves solely with program faults: there is little that the ordinary programmer can do about machine faults, other than to minimize their effect by providing adequate re-entry points and an informative private monitor routine.
There are three distinguishable categories of fault detection causing entry to the monitor program:-
- Interrupt Faults Some faults are detected by special equipment provided for the purpose: these include exponent overflow, division overflow, use of an unassigned function code, and sacred violation (i.e. reference to part of the store reserved by the Supervisor). An interrupt occurs and will set in B91 a digit corresponding to each such fault. Further analysis of the fault is provided by a supervisor extracode routine (S.E.R.), the same routine being used for all faults.
- Supervisor Faults A further class of faults are detected by S.E.R.'s, being especially concerned with faulty use of the store and of peripheral equipments, and with the over-running of time allowances. These faults lead to the setting of an appropriate digit of B91, just as if they had been detected by hardware, as in (a) above; they include over-running of computing time or of tape waiting time, and attempts to exceed the requested store allocation. In the object program, extracode instructions dealing with the store and peripherals will enter a S.E.R. to detect faulty usage. Only one such fault can be detected at once, but it will be recorded as a count in B91 without interfering with any existing record of faults of the interrupt type. The same S.E.R. monitor sequence is entered as in (a) above.
- Extracode Faults Many faults are detected by the ordinary extracode routines themselves; typical of these are errors in the arguments of functions. Only one such fault can be detected at once; the extracode will set a count in B91 and then jump directly to the common S.E.R. monitor sequence mentioned above.
The various faults which result in entry to the monitor program are listed in the table below:-
|Local time expired||L TIME EXCEEDED||S||Bit 5||0|
|Division Overflow||DIV OVERFLOW||I||Bit 6||1|
|Exponent Overflow||EXP OVERFLOW||I||Bit 14||2|
|Page locked down||PAGE LOCKED DOWN||S||Bit 1||3|
|Number of blocks exceeded||EXCESS BLOCKS||S||2.0||4|
|Square root argument < 0||SQRT -VE ARG||E||2.4||5|
|Logarithm argument ≥ 0||LOG -VE ARG||E||3.0||6|
|Inverse trig. function||INVERSE TRIG OUT OF RANGE||E||4.0||8|
|Reading after Input Ended||INPUT ENDED||S||4.4||9|
|End of Magnetic tape||END TAPE||S||5.0||10|
|Variable length record error||V TAPE ERROR||E||5.4||11|
|Magnetic Tape failures||TAPE FAIL||S||6.0||12|
|Computer failures||COMPUTER FAIL||S||6.4||13|
|Unassigned Function||ILLEGAL FUNCTION||I||Bit 4|
|Sacred Violation Instruction||SV INSTRUCTION||I||Bit 8|
|Sacred Violation Operand||SV OPERAND||I||Bit 10|
|Illegal block number||ILLEGAL BLOCK||S||9.6|
|Band not reserved||BAND NOT RESERVED||S||10.2|
|Computing time expired||C TIME EXCEEDED||S||Bit 2|
|Execution time expired||E TIME EXCEEDED||S||Bit 3|
|Input not defined||INPUT NOT DEFINED||S||11.6|
|Output not defined||OUTPUT NOT DEFINED||S||12.2|
|Output exceeded||OUTPUT EXCEEDED||S||12.6|
|Tape not defined||TAPE NOT DEFINED||S||13.2|
|Illegal search||ILLEGAL SEARCH||S||13.6|
|No selected tape||NO TAPE SELECTED||S||14.2|
|No mode defined or attempt to write when not permitted||WRONG TAPE MODE||S||14.6|
|Number of decks exceeded||EXCESS DECKS||S||15.2|
|No trap set||TRAP UNSET||S||15.6|
|Number of branches exceeded||EXCESS BRANCHES||S||16.2|
( I = Interrupt, E = Extracode, S= S.E.R.)
Some of these faults are associated with information in the job description, and are listed below.
- Excess blocks
- Computing Time exceeded
- Input not defined
- Output not defined
- Output exceeded
- Tape not defined
- Excess decks
Division overflow occurs with certain division instructions, marked DO, when the divisor is zero or substandard.
Exponent overflow occurs with certain instructions, marked E, when, after completing all functions of the instruction, including rounding and standardisation, the accumulator exponent is greater than +127. The guard and sign bits of b124 will be 0 and 1 respectively. If exponent overflow is trapped, the fault indication will not be reset and may cause further monitoring with a subsequent accumulator operation. This may be avoided by first clearing B124, setting guard and sign bits to zero. If the accumulator exponent becomes less than -128 during multiplication, division or standardisation, then the guard and sign bits of b124 are 1 and 0 respectively. This is exponent underflow. The accumulator is set to floating point zero, but no fault is indicated.
The arguments for square root, logarithmic and inverse trigonometric functions are all tested to determine whether they are within range. They may cause exponent overflow if very large arguments are used.
Programs that employ line reconstruction, such as the ABL compiler and L100, will attempt to read after the input stream is finished if the end of document marker ***Z eto. occurs on the same line as the last information for the program.
Sacred Violation Instruction refers to a transfer of control to address J5 or above. If control is transferred to the fixed store, between J4 and J5, there is no immediate interrupt, but the result is unpredictable.
Sacred Violation Operand always means an attempt to read or write to the private store (i.e. to J5 or above).
Illegal block number indicates a reference to the Supervisor working store, between J34 and. J4.
Certain functions are detected as being illegal. The instruction
1000 0 0 0
which is the same as floating point zero, causes entry to extracode control to attempt to obey the instruction
001 0 0 0
or the floating point number ½. This function is recognised as being unassigned.
End of magnetic tape refers to an attempt to obey a transfer instruction involving section 0, or to use tape beyond the last addressed section (section 4999 on a fully addressed 3600 ft. tape).
Illegal search refers to an attempt to search a magnetic tape for section 0 or beyond the last addressed section.
No magnetic tape selected indicates that none of the select tape extracodes has been obeyed.
Variable length record error implies an attempt to transfer when not aligned on a tape marker, or an encounter with an incorrectly made marker.
Should a magnetic tape failure occur, the program may not be monitored immediately, and in this case an attempt will be made, by the Supervisor to produce a correct transfer. After a set number of failures, usually seven, full monitoring will then occur. An attempt to read from a section that has not previously been written to will be recognised as a tape failure, and hence it is advisable to write to all sections required when a new tape is used. A decimal number may follow the TAPE FAIL text, and this is interpreted as
8192A + 512B + C
- C is the tape number on which the failure occurred
- B is the fault number
- A is the fault type, 0 if E-type, 1 if F-type.
These fault types are described in the Atlas 1 Computer System Operators' Manual.
A monitor for 'Trap Unset indicates an attempt to enter a trap using extracode 1134 when no trap has been set by extracode 1132 (see section 11.2)
An attempt to exceed the number of active branches specified by extracode 1103 will be monitored (see Chapter 12).
Page Locked Down and Band Not Defined monitoring may occur when a program is controlling transfers between the drum and core store (see Chapter 12).
11.1.2 Standard Postmortem
Following the detection of one or more of the faults listed above, the appropriate text will normally be printed on Output 0, followed by a standard form of postmortem printing, similar to that shown below.
BAND NOT RESERVED INSTR 73 121,127,0, 549 B127 = 0 INSTR 74 11 77, 0 ,1 2 ,O B12 = 4.6 INSTR 75 101,13 ,12 , 108.4 B13 = -1048574.6 B12 = 4.6 B1 =-699050.6 B2 =-1031932 B3 = 42798.7 B4 =-42799 B5 =-0.1 B6 =-258553 B10 = 18 B12 =4.6 B13 =-1048574.6 B70 = 0.6 B80 = 0.1 B90 = 36 B91 = 10.3 B92 = 0.1 B93 = 0.1 B94 = 7.1 B95 = 263.1 B96 =-0.3 B97 = 917504.4 TAPE 1 AT 64 TAPE 2 AT 72/306 TAPE 3 AT 1
Normally the current address in main control, B127, is printed, followed by its full word contents in instruction form, and the contents of any B-1ines in the range B1 to B99 referred to, unless zero. Irrespective of the: true value, the contents of any B-1ines in the range B100-B127 referred to will be printed as zero. The two previous words are similarly printed. If one of the locations is in the private store or is undefined, then
will be printed instead of the normal form. Following an EXCESS BLOCKS fault, b127 will be reduced by 1 before printing instructions. The instructions printed may not be the last three obeyed, as a jump may have occurred to either the second or third instruction printed, as must have happened in the example. Also, because of the overlap in executing instructions with each other, and with other operations such as tape transfers, the printing may occasionally bear little relation to the instruction originally causing the fault, a1though many extracodes causing faults will appear as the second instruction; basic functions causing faults may appear as anyone of the three instructions, or not at all.
After the three instructions, the contents of all B-1ines B1-B99 are printed, unless zero.
If one inch magnetic tapes are being used, their current positions are then printed out, indicating the next section number, and, for variable length working, the word number also.
Except for the function codes, which have their usual form, and octal fractions in addresses and B-lines, all numbers are decimal.
11.1.3 Ending a Program
If no fault is found during the execution of a program, then the run will be finished by obeying the 1117 extracode. If a fault is found, then, after postmortem printing, the Supervisor will normally end the run as if the 1117 instruction had been obeyed.
Print monitoring information on output O. End all program output streams, indicating the amount of output in each stream. Instruct the operators to disengage and rewind all magnetic tapes used. Remove the job from the store; clear Supervisor directories relating to this job.
The form of the monitoring information on output 0 is given below.
<Job Title> INSTRUCTION 8 7 STORE 32 2 DECKS 6 TAPE BLOCKS 1 HALT TIME INPUT 0 1 BLOCKS OUTPUT 0 (3) ANY 40 RECORDS
The meaning of this information is explained below.
INSTRUCTION 8 7
8 instruction interrupts were obeyed in all, of which 7 were used in compiling. An instruction interrupt occurs every 2048 instructions, basic multiplication and division orders being counted as 2 and 4 instructions respectively. At some installations a third number on this line gives the number of program blocks transferred between drum and core store.
STORE 32 / 4
The job description requested 32 blocks of store, of which 4 blocks were in use when the program was terminated, including one block for each input or output stream.
2 DECKS 6 TAPE BLOCKS 1 HALT TIME
Two magnetic tape decks were reserved, and six blocks were transferred between tape and main store. The program was suspended by the Supervisor for one second awaiting the completion of tape transfers.
INPUT 0 1 BLOCKS
One block was needed in the input well to hold the information on input stream 0. There will be similar printing for all other input streams defined.
OUTPUT 0 (3) ANY 40 RECORDS
The job description requested that output stream 0 should be to ANY type of peripheral. Forty records were output before the program was terminated. If the actual peripheral is a paper tape punch, the output will be measured in blocks; otherwise, in records. The output stream was broken into three parts; this printing is suppressed if the stream was not broken. There will be similar printing for all other output stream defined.
The amount of output, indicated at the end of each stream, is always measured in blocks, in the form
END OUTPUT 1 BLOCKS
11.2 The Trapping Vector
Upon entry following a fault, the first action taken by the monitor program is a check to see if the fault has been trapped by the programmer; if so, the monitor sequence will at once exit to the trap set.
The trapping vector occupies several successive words of the store, and the address of the first word must be specified as S in the extracode 1132. Each word holds the trapping information for a particular fault, word n being associated with fault type n; the more-significant half-word contains the address of the fault routine to which the trap will transfer control, and the less-significant half-word contains, in bits 15-21, the address of a B register which is used to hold the value of main control when the fault was detected. This may be but is not necessarily the point in the main program at which the fault occurred.
Only some of the faults listed in the table in section 11.1.1 have trap numbers: these are the faults which the programmer might reasonably be expected to deal with before resuming the program; certain traps may be useful as a means of avoiding extra testing in the program. There are faults while are not trappable; these include such faults as sacred violation, which the programmer can be expected to avoid, and deviations from the job description, in exceeding the specified time allowance, for instance.
No trapping will occur unless the program first obeys an 1132 instruction, specifying the address of a trap vector. Subsequently, trapping can be suspended by specifying a negative address in extracode 1132. In order to trap some faults but not others, the programmer should specify a negative jump address in each unwanted trap. Normally the trap vector will be punched as part of the program, and the unwanted entries may be punched as +0 or merely omitted, since floating-point zero produces a negative first half-word, because its exponent is -128.
Two other extracodes associated with the trapping vector are given below.
|1133||Place the first address of the trapping vector, if any, in Ba; if no trap has been set, make ba negative. This enables a subroutine to preserve the current trap when a private trapping vector is required.|
|1134||Obey the entry number Ba in the trapping vector, as though a fault of type Ba had occurred. Ba may range from 0 to 63 inclusive, and may be used to enter standard traps, or as a subroutine entry at addresses listed in the trapping vector for fault numbers 14 onwards.|
11.3 Private Monitoring
When the monitor program encounters a fault which is not trapped, it prepares to terminate the program and proceed to diagnostic printing, as described earlier. If he so desires, the programmer may supply a private monitor sequence, whose starting address must be specified by using extracode 1112. The last octal digit of the starting address determines the time of entry to the private monitor as follows:-
|1||Before printing the one line explanatory text|
|0||After printing the text|
|2||After the standard post mortem printing|
When the entry is before any printing, B91 oontains the record of faults, and B92 the value of main control when the fault was detected, with the contents of B93 and B121 altered. Otherwise B96 and B97 will also be altered.
In the event of faults in the private monitor sequence itself, it is necessary to avoid the possibility of endless loops of errors; this is accomplished by forbidding a second entry to the private monitor. Any subsequent faults may be trapped, but if they are not trapped the standard monitor will end the program.
Specifying a negative address with extracode 1112 cancels any private monitor routine.
11.4 Restarting and Re-entering a program
Following a failure in the computer or an on-line peripheral, jobs completely in the machine will not be lost, although documents of incomplete jobs, and documents only partially read must be input again. Programs partially executed will normally be restarted from the beginning; there are no facilities at present by which the Supervisor will dump program information to allow re-entry to a point other than the start of a program.
11.4.1 Preventing a Restart
It may be useful to prevent a job using the break output facility from being restarted once a point is reached where the job is substantially complete; alternatively a restart may be impracticable for a job using magnetic tape. To this end, the instruction
1113 0 0 -1
will prevent the job being restarted if a breakdown occurs following the use of the extracode, but before completion of execution.
11.4. 2 Re-entering a Program
After a breakdown, for a program to be re-entered at some point other than its start, it is normally necessary to dump information as the job proceeds, specifying a re-entry point with each dump. Although the Supervisor does not yet provide such facilities, the programmer may provide his own dump routine.
Such a routine, called Dumpling, is described in the I.C.T. Atlas Computing Service Bulletin No.7. Dumpling occupies one main store block, dumping, on to magnetic tape, the information listed below:-
- All defined store blocks, including Dumpling.
- The tape numbers and positions of all one inch magnetic tapes working in fixed length mode.
- The accumulator (double length)
- The logical accumulator
- B-lines 1 to 90, and B121
- The number of the currently selected input stream.
- The number of the currently selected output stream.
- V-store line 6 containing AO, Bt, Bc, etc.
- The address of the trapping vector, if any.
- Details of the dump region.
- The dump number.
- The re-entry point to the program in the event of a breakdown.
- As each dump is made, its location is printed on output stream 0.
After a breakdown, a very short steering program allows the information stored at the last or the penultimate dump to be recovered, and the program continues from the corresponding re-entry point.
11.5 Monitor Extracodes
The monitor extracodes introduced earlier are listed again here.
Set the address of the private monitor routine to S. If the standard monitor program is subsequently entered, following a fault which is not trapped, control will be transferred to the private monitor, possibly after some diagnostic printing. The amount of diagnostic printing is determined by the octal fraction of S, as follows:
To subsequently suspend private monitoring, a negative address, S, must be used with 1112.
1113 0 0 -1 Do not restart.
If a breakdown occurs after obeying this instruction but before the job is completed, it will not be restarted.
Print monitoring information on output 0; end all output streams. Instruct the operators to disengage and rewind any magnetic tapes used. Clear all Supervisor references to this job.
Set the address of the trapping vector to S.
This extracode must be obeyed before any trapping can take place; to subsequently suspend trapping, 1132 must be used again, but this time with S negative.
Find address of trapping vector.
Set ba' to the first address of the trapping vector if one is defined, otherwise set ba' negative.
Enter trap Ba. ( 0 < Ba ≤ 63)
Obey entry number Ba in the trapping vector, as though a fault of type Ba had occurred.
11.6 Faults Detected by the Compiler
Apart from faults detected during the execution of the program, many types of error may be found earlier by the ABL compiler. An indication of the type and location of each fault is printed out on the current output stream, usually output 0, and, if necessary, arbitrary values are assigned to expressions to allow compiling to continue.
There are some special preset parameters which determine the exact action taken by the compiler after a fault has been found. These parameters are described in Chapter 12; the compiler action described in this section assumes no program setting of these parameters. In particular, P110 will normally be zero.
11.6.1 B-lines in ABL
It may be useful to know whether a run has ended during compiling or execution. When ABL is in operation, B3 is in the range -127 to 0 inclusive. The most likely value is -127, unless the run has been terminated by INPUT ENDED.
ABL uses most of the B-lines. It preserves its own B-lines when it meets an enter directive, and then clears B1 - B88 before obeying the directive. B89 will contain the current value of *. After an E-directive, B90 contains J3; after ER or EX, B90 is clear.
11.6.2 Indeterminate Items
When ABL needs to evaluate an expression, and can not do so, the expression is faulted as described below, and an arbitrary value assigned. The value depends on the context.
- * = expression. When this is faulted, * is given the value 654321P110 or 654321.1P110. This allows ABL to try to check the rest of the program, although it may not be able to enter it.
- In all other cases the expression is given the value J36. If the expression is in an Enter directive, it will cause a monitor on ILLEGAL BLOCK, since J36 is an address in the Supervisor Working Store. A similar monitor is likely if the expression occurs in an instruction which is subsequently obeyed.
When any other faulty item is found, nothing is compiled. As the store is initially cleared to floating point zero, all or part of this bit pattern will remain in the location reserved for the faulty item.
11.6.3 Diagnostic Printing
The first ABL diagnostic printing for a program is preceded by the line of printing,
Each fault causes printing, on a new line, of the location of the fault within the program, together with an explanatory text. The following line will usually be a reconstruction of the line of program containing the fault.
If the error density is higher than 8 faults in 24 lines of printout, then
TOO MANY ERRORS
is printed, and the run ended (see also P101). Blank lines and lines containing only erases, are ignored.
Normally, when a fault is found, compiling continues until an E or ER type of enter directive is encountered, so that any further faults may be detected. When the enter directive is reached after one or more faults,
ERRORS DO NOT ENTER
is printed, and the run ended (see also P102).
11.6. 4 Fault Location
Each ABL monitor printing begins with a specification of where in the program the offending item occurs. Where means in what line of the printed program and in what part of that line. ABL refers to lines of print in exactly the same way as a programmer does by counting from the last label set, but with the exception that A0 is not used to mean the line on which the first instruction or item of a routine appears but the line in which the R itself appears. Thus the very first line of print in a program is 1 A0/0. Blank lines and lines containing only erases, are ignored.
When ABL prints 3,4 A1/20 it means that it has read 3 terminators in line 4 after A1 of routine 20 when it has found an error. Thus, for example, if an expression is incomplete (e.g., no close bracket after an open bracket), then the next terminator will have been encountered before ABL can realise that there is an error, and the position along the line will be printed accordingly; but, if a bogus character is found in an expression, then this will be recognized before the next terminator is encountered.
11.6.5 Diagnostic Printing Character Set
In all diagnostic printing, ABL uses its own character set. The following is a list of all available external characters (7-track tape, 5-track tape, and cards) and their corresponding ABL characters. All the ABL characters are contained. in the 7-track tape and Anelex line-printer character sets, so that ABL diagnostic printing may always be completely printed or punched on these media.
External: 0123456789 ABL: 0123456789 External: ABCDEFGHIJKLMNOPQRSTUVWXYZ ABL: ABCDEFGH1JKLMN0PQRSTUVWXYZ External: abcdefghijklmnopqrstuvwxyz ABL: ABCDEFGH1JKαMN0PQRSTUVWXYZ External: ½/αβ.+-:'<>=_,()?2π&| ABL: β/αβ.+-:'<>=α,()?α|M| External: *£ (any other) ABL: *| α
All other single characters are replaced by α. All composite characters not including Erase are replaced by β. All composite character including Erase are ignored. All single spaces are ignored. Two consecutive spaces are replaced by Comma. After a Terminator all spaces are ignored, but not commas (see fault below).
l (lower case L) is an illegal character, unlike the rest of the lower case alphabet; i and o are treated as one and zero respectively, as are capital I and O.
11.6.6 Exploratory Texts
The ABL texts are listed below, with further explanation where necessary.
- ABL thinks that a line contains an instruction, but something is incorrect with the format, i.e. a line begins with a number (unsigned), and does not have four parts.
- OCTAL NO. CONTAINS 8/9
- IRREGULAR FUNCTION
- ABL thinks that a line contains an instruction, and its first part has not been faulted by either of the two preceding monitors, but contains either more than 4 digits, or four with the first equal to 2 or more.
- WRONG FORMAT
- A line contains items which cannot be identified; whatever kind of items they are meant to be, something is wrong.
- NOT TERMINATED
- A character which has no meaning in the current context is encountered within an item. When this occurs, ABL skips to the next terminator.
- ACCUMULATOR OVERFLOW
- Fixed-Point Overflow is caused in the Accumulator as a result of any arithmetic process required because of the form of any item. In practice, this can only occur during the de-standardising process required by d in the Floating-Point Number forms a:d, a(b):d, a(b:c):d, and a(:c):d.
- SHIFT >23 PLACES
- Requested by a U or a D operator.
- Z in RO
- IMPERMISSIBLE +
- * OUT OF RANGE
- An attempt is made to compile an item into store with the transfer address (*-P110) greater than or equal to J3, or less than O. Compiling will continue from *=654321.1 + P110 in an attempt to detect any other faults.
- PARAMETER OR ROUTINE NO. TOO BIG
A parameter, routine, or copy number is greater than the permitted highest value, that is
- if a reference is made to a routine number greater than 3999
- if a routine parameter Aa is encountered with a >3999
- if a global parameter Ga. is encountered with a >3999
- if an attempt is made to set a pre set parameter in t he range P110-P119, unless it is one of the Special Preset Parameters, to set a preset parameter Pa with a > 119, or to use a preset parameter Pa, with a >129
- if a reference is made to a library routine number greater than 1999
- if a reference is made to a copy number of a library routine greater than 1999
- NOT IN LIBRARY
- One of the forms L, La, La.b, E, ER, RLc appears within a library routine. The monitoring occurs as the library routine is compiled, but this monitor should only affect library routine writers or private library routine users.
- EXCESS COMMA
- Two or more commas or a comma after Multiple Space appear between items or parts of an instruction on a line. A comma at the beginning of a line will give rise to a WRONG FORMAT monitor. For the purpose of this fault, comma is not the same as multiple space; thus, for example, several TABS are perfectly permissible between items.
- LABEL NOT ALLOWED
- For example, before an R or a T directive.
This occurs whenever the Supervisor, as opposed to the ABL compiler, monitors any aspect of the program. The most common cases are:
- Exponent Overflow - (in any ari thmetic arising from the form of any items)
- Input Not Defined - (after a use of the P115=expression directive)
- Output Not Defined - (after the use of the Ta or Ta-b directive)
- Input Ended
The normal Supervisor fault printing comes first followed by an ABL ? monitor giving where and the reconstructed line in the usual form.
This kind of monitoring can only occur once, because of the Supervisor's system of private monitoring. If a second. error is caught by the Supervisor, only the Supervisor printing will appear and the job will be terminated.
If this is the first fault in the program, then the line ABL MONITORING will appear after the Supervisor monitor printing but before the ? monitor printing.
The monitor Input Ended may be due to a variety of causes. The most common of these are:
- Unmatched [ In this case the compiler will scan through the whole of the program looking for a matching ] until it hits Input Ended. This circumstance can be most easily identified by the Line Count part of where in the accompanying ABL monitoring. The compiler does not recognize labels whilst within a [ ] sequence, but does count lines in the normal manner, so the line count will be from the last label before the [.
- Un-terminated Enter Directive This is tricky to spot because the reconstructed line looks normal. In order to avoid this monitor the ***Z or other document terminator must not be on the same line as the final Enter directive, since ABL inputs and reconstructs the whole record before attempting to identify items.
- Enter Directive omitted completely.
- Un-terminated private Library Routine (i. e. the ZL record omitted or punched incorrectly). In this case the whole of the remainder of the program is thought by ABL to be part of the Library Routine.
- <Parameter> ALREADY SET AT <where>
- An attempt is made to set a parameter (Global or Routine) which has already been set. The monitor here consists of one line only; no reconstructed line is printed. An RO directive will also cause this fault. The parameter will retain its original value.
- EXPRESSION INDETERMINATE
An expression, which has not been rejected for any of the above reasons, cannot be fully evaluated when it should be. For example, if it is the right-hand side of a P=expression or *=expression directive or an Enter directive, then it needs to be evaluated immediately, and if it cannot be (for example, because of unset parameters), then this monitoring will occur when the item is encountered - in the case of E or ER directives after any required Library Routines have been compiled; or, if it is the address part of an instruction, or a Half-word or Six-bit word, then if it is still not determinate when the next E or ER directive is encountered - after any required library routines have been compiled - then this monitoring will occur when the Enter Directive is encountered, after any monitoring arising from any library routines. For the purpose of counting errors, all parameters unset at the Enter directive are treated as one fault.
The second line of this monitor printing consists not of the complete reconstructed line in which the offending expression occurred, but only of the expression itself, and this is not normally in its original form but has been partly evaluated, including the replacement of all set parameters by their values.
Because of this system of printing the expression, with known parameter values fully substituted, the fact that, for example, the parameter A4/2 appears in the monitor printing indicates that it is that parameter which is unset and is causing the expression to be indeterminate.
A reference in an expression to a parameter of a non-existent library routine will give rise to EXPRESSION INDETERMINATE monitor printing when the next E or ER directive is encountered as well as a monitor printing for Library Routine NONEXISTENT (see Chapter 12).
An attempt to divide by zero in an expression gives rise to EXPRESSION INDETERMINATE monitor printing rather than DIVISION OVERFLOW Supervisor monitor printing, for example, if expressions such as A5Q0 or A5QA2 where A2=O are encountered.
A program being compiled attempts to print a title on an undefined output stream, causing fault printing by both Supervisor and oompiler. Compiling oontinues, and further faults are found until the error density is too great.
OUTPUT NOT DEFINED INSTR 787975 122, 63 ,24 ,,-1048576 B63 =-1048575 B24 = 791293 INSTR 787976 1060,0 ,61 , 16 B61 =-6 INSTR 787977 300,0 ,0 , 788005 B1 = 512 B3 =-127 B4 = 0.1 B7 = 787202 B8 = 787372.4 B9 = 257.2 B10 = 2.4 B12 = -126 B14 =-0.1 B15 = 786432 B16 = 917373.4 B17 = 917373.4 B18 = 917370.4 B20 = 911.4 B24 = 791293 B28 =-1048576 B45 = 2.1 B61 =-6 B63 =-1048575 B70 = 787583 B71 = 917371 B72 =-1 B73 = 132.4 B78 = 128.1 B79 = 917476.4 B81 = 917372.4 B88 = 917373.4 B90 = 787986 B91 = 12.2 B92 = 786740.2 B93 = 786740.2 B94 = 10 B96 =-1044754 B97 =-130560.1 B98 = 262656.5 ABL MONITORING 1,2 A0/0 ? T10 1,9 A0/0 SHIFT > 23 PLACES H1U24 0,10 A0/0 * OUT OF RANGE 121,2,0,A5680 4,10,A0/0 PARAMETER OR ROUTINE NO. TOO BIG 121,2,0,A5680 1,11 A0/0 EXPRESSION INDERTERMINATE P10M7 4,13 A0/0 INSTRUCTION? 121,0,0,0 0,14 A0/0 IRREGULAR FUNCTION 123456/SP01Y 1,15 A0/0 WRONG FORMAT F,K1,+,+4(-1,-1β,+3:0 3,15 A0/0 WRONG FORMAT F,K1,+,+4(-1,-1β,+3:0 TOO MANY ERRORS