INTERASP is a symbolic machine language for the ATLAS computer. This report describes an assembly program, IASP, written in FORTRAN and executed on an IBM 7090, which translates the INTERASP language of a routine into basic machine orders for ATLAS. The results of the IASP translation, like those of the ATLAS FORTRAN compiler, are punched on relocatable binary cards in the standard BAS format. Those parts of a job for which FORTRAN is not suitable may therefore be coded as routines in INTERASP, assembled by IASP, and - compiler and assembler output being compatible - the translated routines for the whole job may then be read into ATLAS by the same standard loader program. Flexible intercommunication between FORTRAN and INTERASP routines during the subsequent execution phase on ATLAS, facilitated by their having a common target language (BAS), is ensured by means of the arrangements for sharing storage areas that can be made in INTERASP, and by observing in the INTERASP routines the FORTRAN calling sequence conventions described in this report.
INTERASP is a limited form of the ATLAS Symbolic Programming (ASP) language. In order to simplify the IASP program not all of the features of ASP have been included in INTERASP. The main deficiency is that there are no facilities for dealing with parameters whose values are assigned at load time. The report points out the limitations in detail. It is expected, however, that the facilities provided will prove adequate for most coding needs. Care has been taken to ensure that INTERASP is a strict subset of the ASP language. Thus routines coded in INTERASP could also be assembled by the ASP assembly program which it is intended to provide at a later stage. The latter assembler will run on ATLAS as part of the HARTRAN operating system. Note that it will not be necessary (although it will be possible) to re-assemble routines when the ASP assembler becomes available.
IASP is an extended version of the earlier PROTOASP assembler (l) which implemented a rather more limited form of ASP.
It will be clear to the reader that many of the ideas involved in INTERASP (and in ASP) have been suggested by our familiarity with the FAP language of ( Ferguson (2) and our respect for its value within the FORTRAN Monitor System on the IBM 7090.
The INTERASP language includes all ATLAS basic and extracode operations as well as some directives to the assembly program which are written in the same form as the ATLAS operations and are known as pseudo-operations. ATLAS operations may be cited by their ASP mnemonic names (see Appendix B) or by their four digit octal codes. Details of the pseudo-operations known to IASP and their effects are given in 2.7. Symbolic names for locations and numbers are also used (see 2.2).
Routines for assembly by IASP are punched on cards with one symbolic instruction on each card. A typical instruction card is divided into four fields: location field, operation field, variable field, and comments field.
Columns 1 to 8 form the location field Columns 9 to 15 form the operation field Columns 17 to 40 form the variable field
Except for certain pseudo-operations the comments field begins in the column after the first blank column in the variable field (conventionally in column 41 if column 40 is blank) and extends to and includes column 72.
Columns 73 to 80 are not read by IASP
Columns 1 to 72 are copied onto the assembly listing (see 3.1 ).
In INTERASP a symbol is a string of from one to six non-blank characters, the first of which is not numeric, and none of which is among the following set of five characters:-
+ plus - minus * asterisk , comma . point
For example, SYMBOL, (BAS) , NOT4U, M/E are legal, But A+, 2DAY, TOOLONG, are not.
In general symbols are defined by appearing in the location field of an operation or a pseudo-operation (see however, ENTRY, 2.7.4.1).
IASP is a two pass assembly program. This means that, in most cases, a symbol may be used in the variable field of an operation before it is defined. The only exceptions in INTERASP are symbols used in the pseudo-operations EQU, BSS, COMMON and ORIGIN. Such symbols must have been defined before the pseudo-operation which uses them is met. A further consequence of the two pass method of assembly is that the definitions of symbols found during pass 1, can be checked during pass two. A failure to check is indicated by a phase error flag (P). For example, this error flag P is set by the use of a symbol in EQU, BSS, COMMON and ORIGIN before it has been defined.
The value of a symbol is a 24 bit number in the range -221 to +221-2-3 i.e. an ATLAS half word.
A symbol has one of three modes.
The mode of a symbol is determined by the way in which it is defined. Symbols appearing in the location field of most cards, in particular, all ATLAS instruction cards, are relative. Exceptions to this general rule, which occur in the case of certain pseudo-operations, are noted in the descriptions of those pseudo-operations.
The location field (columns 1 to 8) may be blank or may contain a single symbol. If a symbol is present it either labels the instruction on this card so that it. may be referred to by other instructions in the routine or the symbol is defined by the pseudo-operation on the card. A symbol, if present, may be punched anywhere within the field. It is recommended that column 1 be left blank since it is used for special purposes in the HARTRAN system.
A special case arises if the character in column 1 of the card is a * (or $). The contents of the card are then taken to be comments. They are copied onto the assembly listing, but are otherwise ignored.
The operation field (columns 9 to 15) may contain any one of the following:-
1. the mnemonic operation code for an ATLAS instruction,
2. the octal code for an ATLAS instruction,
3. a pseudo-operation code.
In case 1, where the operation code is exactly four characters long, the code may be followed by a number of up to three decimal digits which gives the Ba register for this instruction. The number begins in column 13 and ends at the first blank column thereafter.
If column 9 contains a digit different from 0 or 1 the error flags I (illegal character), U (undefined subfield) are printed with the instruction on the assembly listing and the operation field of the assembled instruction is zero. If column 9 contains 0 or 1 then columns 9-12 are read as a four digit octal code. No attempt is made to check that the code is a legal ATLAS instruction, responsibility for that rests with the user.
If column 9 contains a non-numeric character, then, apart from the special case of a four character code followed by a number (when only the first four characters are used), the contents of the six columns 9 - 14 are used to identify the operation. Note that blank columns in this field are not ignored but are taken to be part of the name. If the operation code, thus indicated, is not known to IASP the error flag U is printed with the instruction on the assembly listing, and the operation field of the assembled instruction is zero.
If the six columns 9-14 are all blank, the contents of the card are taken to be comments. They are printed on the assembly listing but are otherwise ignored.
If columns 9-14 contain a code known to the assembler then either the directive indicated by the pseudo-operation is carried out, or the octal code for the indicated ATLAS instruction is placed in the operation field of the assembled instruction. If the mnemonic implies a value of Ba this value is filled into the Ba field of the assembled instruction. For example, under main control, TRA (transfer control) implies a Ba value of 127. If the Ba number is also given explicitly by means of a number following a four character code in the operation field or in the Ba subfield of the variable field (see 2.6.2), the error flag B is printed with the instruction on the assembly listing and the Ba subfield is zero in the assembled instruction.
If the mnemonic refers to an operation on a low order halfword, .4 (octal, see 2.6.1) is or-ed to the address field of the assembled instruction.
The variable field is used for special purposes by the pseudo-operations and these purposes are best described with each pseudo-operation in turn. This is done in 2.7. In the remainder of this paragraph, the form of the variable field in ATLAS instructions is described. Reference to sections of this paragraph, when they apply to particular pseudo-operations, will be made implicitly in 2.7.
The variable field begins in column 17 and ends either at the first blank column thereafter or at column 40 whichever comes first. For compatibility with ASP, the variable field should always be followed by a blank column, in column 41 if necessary. The field is divided, by commas, into, at most, three subfields. These subfields read from left to right give the address A, the Bm number, and the Ba number. Each subfield may contain an expression.
In INTERASP only simple expressions, consisting of a symbol term plus or minus a constant term, are allowed. If either the symbol term or the constant term is missing its value is taken to be zero. The order of the terms is important. A constant term plus or minus a symbol term will be misinterpreted.
A constant is an unsigned number less than 221 and is always of absolute mode. It is normally a decimal integer. If the character . appears the digits which follow it (if any) must be in the range 0-7 and are interpreted as octal. The presence of the digits 8,9 after . in a constant will be flagged as an illegal character (I) and the value of the constant will be set to zero. The presence of . also has the effect of adjusting the position of the point within a halfword. The examples should make this clear.
CONSTANT HALFWORD (in Octal) 10 0000 0120 10. 0000 0012 10.0 0000 0120 10.00 0000 1200 10.7777 0012 7777 .777700 0077 7700
The mode of an expression is defined to be the mode of the symbolic term appearing in it. If there is no symbolic term the mode is absolute.
Two special symbolic terms are recognised. These are:-
(1) * , which is a relative symbol whose value is the relative location of the current instruction,
(2) ** , which is an absolute symbol whose value is zero.
The Bm, Ba subfield expressions must be of numeric (absolute) mode. If this condition is not met the instruction is flagged with B (B register specified illegally) to indicate the error.
A blank column ends the variable field. The remaining subfields (if column 17 is blank, all the subfields) are then unspecified, their presumptive values being taken to be zero. In the case of the Ba sub-field the Ba number may be given implicitly or explicitly in the operation field. This value, if given, overrides a zero value presumed in the variable field. If, however, the Ba value is given in both the operation field and the variable field, then, as noted in 2.5, the error f g B is printed with the instruction on the assembly listing.
If the first character of a subfield is a comma the value of that subfield is taken to be zero.
Some examples of the rules in the above two sections are given below.
Variable field Blank All subfields unspecified, values presumed to be zero. A Ba, Bm unspecified here, are presumed to be zero. ,,Ba Ba specified, A and Bm taken to be zero. A,Bm,Ba All subfields specified.
This paragraph describes the pseudo-operations or directives known to IASP, their syntax and their effects.
To clarify the descriptions we state here that, at the start of each pass of the assembly of a routine, the location counter is set to zero, the common location counter is set to 3 000 000(8), and the control register number is set to 127, i.e. main control. The location counter counts the number of full words of store in the program region used by the routine. It is increased by one by each and every ATLAS instruction in the routine. Pseudo-operations may increase the location counter by one, by more than one, or may leave it unchanged. The common location counter counts the number of full words of store in the common region used by the routine. It may only be advanced by the pseudo-operation COMMON, the actual increase being stated in the variable field of the operation. The control register number is the implied Ba number in certain transfer instructions (see 2.5). The pseudo-operation TEQU allows the user to change this number.
All pseudo-operation mnemonics are punched in the operation field of the card.
In any of the pseudo-operations in this section the symbol (if any) in the location field of the operation is defined to be of relative mode and is given the value of the next location to be assigned (i.e. the current value of the location counter when the operation is met).
The pseudo-operations in this section provide intercommunication between routines.
SYMB CANB1 *+ n TRA SUBR HWDS IRN.LINK HWDS ,LARGN .................... HWDS ,LARG2 HWDS ,LARGwhere n is the integer three more than the number of arguments, and LARQk is the location of the k th. argument. IRN and LINK are used for backward flow tracing on detecting an error in execution. IRN is a serial number identifying this particular instruction, and LINK is the location in the present routine where the return address to the routine calling this one is stored. Note that the locations of the arguments are in the low halves of words and that they are in reversed order (i.e. first argument last). On entry to the called routine SUBR the location of the k th. argument may be found in -k,1; the return address is 0,1.
IASP expects a symbol in the location field, the word EQU in the operation field, and a single expression in the variable field. In INTERASP the mode of the expression in the variable field must be absolute or relative. If the expression is of external mode, an expression error will be indicated (E) . If a symbol is used in the expression which has not been previously defined a phase error is indicated (P).
The expression in the variable field is evaluated and its value and mode are given to the symbol in the location field. The location counter is not changed by this directive.
The IASP comments field begins in column 41, and the normal convention is that comments start there, column 40 being blank. However, comments may be written anywhere after the variable field has been terminated. For compatibility with ASP, there should always be a blank column after the variable field. Comments may extend to column 72.
Two other methods of introducing comments into the assembly listing have already been noted. They are:-
(1) punching a π (or $) in column 1 of the card,
(2) leaving columns 9-14, in the operation field, blank.
In both cases the contents of the card are printed on the assembly listing but otherwise ignored.
IASP can assemble any number of routines presented as one input deck to the program. The last card in each routine must be an END directive.
The printed output for each routine, consists, mainly, in a side-by-side presentation of the symbolic card input to IASP and the resulting1 binary word in octal representation. Lists of the symbols in the routine symbol table and of references to external symbols are also given.
Reading each line of the source program listing from left to right, the first column gives the location, in octal, of the instruction on this line. For comments and for some pseudo-operations which use no storage in the assembled routine this column is blank. For most instructions the location is the first location in the program region used by this instruction. For common pseudo-operations, however, the location shown is the first location in the common region allocated by this operation. The location is followed by the octal representation of the machine word (if any), generated by the instruction on this line. The digits of the word are arranged in groups, separated by spaces, to show the division of the 48 bit word into its appropriate parts. On the right-hand part of the line columns 1-72 of the source card are reproduced. If an error has been detected in this instruction the appropriate error flag is printed in the left-hand margin, just before the location column. If an instruction contains more than one error all pertinent letters will appear in the left-hand margin.
The IASP error flags are as follows:-
B B register specified illegally E Expression error I Illegal character used M Multiply defined symbol used or defined P Phase error U Undefined subfield.
The listing of the source deck is followed, on the next page, by the routine name and the position of the main entry point in octal. Two statements follow. The first gives the first location, in octal, not used by the routine just assembled. The second gives, also in octal, the first location in the common region not used by the routine. A comment will appear here if the common region storage demanded overruns location 3 400 000 (octal).
A list of the symbols in the routine symbol table (RST) with their values, follows. The symbols in the RST are those declared in DEFINE directives. If a symbol has been declared in a DEFINE directive but has not been defined in the routine, or has been multiply defined in the routine, an appropriate comment will be made in this list. If no symbols have been declared in DEFINE directives in the routine this list is omitted.
Next a list is given of the symbols in the external reference table (ERT) for the routine. With each symbol is printed a list of references to that symbol. If there are no references to a particular symbol a comment is made to draw attention to a possible error.
If a symbol is multiply defined, once as external, once as internal then no external references will be recorded, and a definite error indication given at this point.
This list will be followed by the comment Above Assembly has Failed if at least one error has been found in the routine.
The final statement of the listing gives the time, in seconds, required to assemble the given program, and the number of source cards in the program deck.
IASP causes cards to be punched off-line. The form of the card deck produced for a routine is exactly that described elsewhere, (3) i.e. BAS cards. The cards may be read into ATLAS by the standard BAS loader. For completeness details of the card formats are given here.
This is the first card to be produced for each routine. It is punched in the BCD mode.
Columns 1 to 4 contain the characters *BAS Columns 5 to 8 are blank Columns 9 to 16 contain the name of the main entry point, beginning in column 9 and filled out with blank columns Column 17 is blank Columns 18 to 23 give the relative location of the main entry point in octal, in full word units, right adjusted within the field Columns 24 and 25 are blank. Columns 26 to 31 give the relative location of the routine symbol table, in octal, in full word units, right adjusted within the field. This is the first relative location not used by the routine Columns 32 and 33 are blank. Columns 34 to 39 give the number of symbols in the routine symbol table, in octal, right adjusted within the field. Twice this number gives the length of the RST. Columns 40 and 41 are blank. Columns 42 to 47 give the lower six octal digits of the first location in the common region not used by the routine. Columns 48 to 72 are blank. Columns 73 to 78 contain the label given in the variable field of a LABEL pseudo-operation within the routine, or are blank if no label has been given.
The heading card is followed by a deck of relocatable binary cards containing the instructions for the routine and the tables of symbols generated by the routine. The routine symbol table is punched to follow the last instruction of the routine (if there are no entries this table is omitted). A word of zeros is punched to inform the loader that there is no parameter use table. Finally the external reference table is punched. The end of each entry (except the last) in this table is marked by the 24 bit halfword represented by 7777 7776 in octal. The next entry begins at the next full word. The end of the last entry is market by the 24 bit halfword represented by 7777 7777 in octal.
The relocatable binary cards have the following format.
Subsequent groups of four columns contain words to be loaded into successive locations, the total number of words being given in column 1.
The heading card for a routine is always punched. If an error has been detected during the first pass of the assembly or if it is detected before the first sixteen instruction words have been assembled, a card with the word FAILED is punched after the heading card and no binary cards are produced. Otherwise the detection of an error suspends the punching of binary cards, the card with the word FAILED is punched and no further binary cards are punched.
(1) 'A Preliminary Symbolic Assembly Program for ATLAS' by A.R. Curtis and I.C. Pyle: A.E.R.E. Atlas Paper No.12, (CPN/49), April 1961.
(2) 'Fortran Assembly Program (FAP) for the IBM 709/7090' IBM Bulletin J28-6098 September 1960.
(3) 'BAS - A proposed target language for compilers on ATLAS' by A.R. Curtis and I.C. Pyle: Comp. J, 5 (2) p 100 July 1962.
Pseudo-operations Section BSS 2.7.2 COMMON 2.7.4 CSS 2.7.4 DEC 2.7.3 DEFINE 2.7.4 EJECT 2.7.6 END 2.7.1 ENTRY 2.7.4 EQU 2.7.5 HWDS 2.7.3 INT 2.7.3 LABEL 2.7.6 OCT 2.7.3 ORIGIN 2.7.2 PUBLIC 2.7.4 TEQU 2.7.1 TEXT 2.7.3
In this appendix we list the ASP mnemonic codes for ATLAS instructions. Full descriptions of the operations are given in the Ferranti publications: 'List of Basic Instructions' (CS345 October 1962), and 'Extracode Functions' (CS309A December 1962). We have condensed these, by permission, to the brief descriptions given in the list below, for whose accuracy Ferranti Ltd cannot be held responsible.
The list is in the order of the absolute octal instruction codes. Each entry begins with the octal instruction code followed by the ASP mnemonic code for the instruction. The letter T which follows certain of the mnemonics means that a T can prefix these mnemonics to imply that the current control register is to be used for Ba. For example:
0237 AMIB T 1 If accumulator is minus set Ba
means that the mnemonic may also be used in the form TAMI (transfer if accumulator is minus) in which case the number of the current control register will be placed in the Ba part of the instruction word. The letter L which follows certain of the mnemonics means that the letter H in these mnemonics, may be replaced by the letter L to imply the lower half of a word. Thus NAHB and NALB are both mnemonic codes for the instruction 0100. Note that whereas, by suitable addressing, the former may refer to the high or the low half of a word, the latter can only refer to the low half of a word.
A single digit is quoted after each mnemonic and gives the maximum number of B-modifications (0, 1 or 2) that may be used. A minus sign, -, prefixing this digit means that the address subfield is not used in the instruction. Finally there is a phrase briefly describing the instruction.
The following notation - based closely on that of the Ferranti publication - is used in the descriptions:
A the full double length accumulator: 87 bits Ax the fractional part of the accumulator: 79 bits Ay the octal exponent of the accumulator: 8 bits M the more significant half of Ax; 40 bits including sign bit L the less significant half of Ax: 39 bits, no sign bit Am the 48 bit floating point register consisting of M and Ay Al the 48 bit floating point register consisting of L, Ay and the special sign bit for L Ao the accumulator overflow indicator N the 24 bit address bits of an instruction n the (modified) address part of an instruction usually regarded as a 21 bit integer with a fractional part of one octal digit S n regarded as the address of a 48 bit word in store H n regarded as the address of a 24- bit halfword in store P the number given in the block address part of n, i.e. in digits 1-11 of n K the least significant three bits of an address i.e. digits 21-23 of n Ba the B-register specified by the Ba digits of an instruction Bm the B-register specified by the Bm digits of an instruction Bt the B-test register, denoted by the single letter Q in the mnemonics G the logical accumulator (i.e. B98 and B99): 48 bits am, ba, bm, g etc. denote the contents of Am, Ba, Bm, G.
A * as the final character of a mnemonic means read the manuals carefully before using this operation.
0100 NAHB L 1 Negate and add half-word to ba 0101 CAHB L 1 Clear and add half-word to ba 0101 RAHB L T 1 Form of TRAL - jump indirect - transfer to address in h-word 0102 SUHB L 1 Subtract half-word from ba 0103 CSHB L 1 Clear and subtract half-word from ba 0104 ADHB L 1 Add half-word to ba 0105 LCHB L 1 Left-shift character add half-word 0106 NEHB L 1 Not-equivalence half-word to ba 010? ANHB L 1 And half-word to ba 0110 SUBH L 1 Subtract ba from half-word 0111 SNHB L 1 Store negatively in half-word 0112 NABH L 1 Negate and add ba to half-word 0113 STHB L 1 Store in half-word 0114 ADBH L 1 Add ba to half-word 0116 NEBH L 1 Not-equivalence ba to half-word 0117 ANBH L 1 And ba to half-word 0120 NANB 1 Negate and add number to ba 0121 CANB 1 Clear and add number to ba 0121 RAB T 1 Form of TRA - jump 0121 NOP -1 No operation - dummy 0122 SUNB 1 Subtract number from ba 0123 CSNB 1 Clear and subtract number from ba 0124 ADNB 1 Add number to ba 0125 LCNB 1 Left-shift by one character and add number 0126 NENB 1 Not-equivalence number to ba 0127 ANNB 1 And number to ba 0143 RBHB L 1 Right-shift by one bit and subtract half-word 0147 ORHB L 1 Or half-word to ba 0150 NAHQ L 1 Negate and add half-word to ba, result to Q (Bt) 0152 SUHQ L 1 Subtract half-word from ba, result to Q (Bt) 0163 RBNB 1 Right-shift by one bit and subtract number 0164 AMBB 0 Add masked bm to ba 0165 CMBB 0 Clear and add masked bm to ba 016? ORNB 1 Or number to ba 0170 NANQ 1 Negate and add number to ba, result to Q (Bt) 0172 SUNQ 1 Subtract number from ba result to Q (Bt) 0200 CIHB T 0 Count increasing by half-words in Bm set Ba 0201 CIFB T 0 Count increasing by full-words in Bm set Ba 0202 CDHB T 0 Count decreasing by half-words in Bm set Ba 0203 CDFB T 0 Count decreasing by full-words in Bm set Ba 0210 BODB T 0 If bm is odd set Ba 0211 BEVB T 0 If bm is even set Ba 0214 BZEB T 0 If bm is zero set Ba 0215 BNZB T 0 If bm is non-zero set Ba 0216 BPZB T 0 If bm is plus or zero set Ba 0217 BMIB T 0 If bm is minus set Ba 0220 QIHB T 0 Test Q increasing by half-words in Bm set Ba 0221 QIFB T 0 Test Q increasing by full-words in Bm set Ba 0222 QDHB T 0 Test Q decreasing by half-words in Bm set Ba 0223 QDFB T 0 Test Q decreasing by full-words in Bm set Ba 0224 QZEB T 1 If Q is zero set Ba 0225 QNZB T 1 If Q is non-zero set Ba 0226 QPZE T 1 If Q is plus or zero set Ba 0227 QMIB T 1 If Q is minus set Ba 0234 AZEB T 1 If accumulator is zero set Ba 0235 ANZB T 1 If accumulator is non-zero set Ba 0236 APZB T 1 If accumulator is plus or zero set Ba 0237 AMIB T 1 If accumulator is minus set Ba 0300 UAD 2 Unrounded add 0301 USU 2 Unrounded subtract 0302 UNA 2 Unrounded negate and add 0304 UCA 2 Unrounded clear and add 0305 UCS 2 Unrounded clear and subtract 0310 WAD 2 UAD without clearing L first 0311 WSU 2 USU without clearing L first 0314 CLA 2 Clear and add to am preserve l 0314 CAM 2 Clear and add to am preserve l 0315 CLS 2 Clear and subtract from am preserve l 0315 CSM 2 Clear and subtract from am preserve l 0320 FAD 2 Floating add 0321 FSU 2 Floating subtract 0322 FNA 2 Floating negate and add 0324 FCA 2 Floating clear and add 0325 FCS 2 Floating clear and subtract 0330 XAD 2 Fixed-point add 0331 XSU 2 Fixed-point subtract 0332 XNA 2 Fixed-point negate and add 0334 XCA 2 Fixed-point clear A and add 0335 XCS 2 Fixed-point clear A and subtract 0340 UAC -2 Standardise accumulator 0341 XAC -2 Test Ay for overflow 0342 UMP 2 Unrounded multiply 0343 UMN 2 Unrounded multiply negatively 0344 CAL 2 Clear and add to l preserve m 0345 CALM 2 Clear and add to l with sign in M 0346 STOZ 2 Store accumulator and clear to zero 0347 STLZ 2 Store al, then clear L to zero 0352 XMP 2 Fixed-point multiply 0353 XMN 2 Fixed-point multiply negatively 0354 XRA -2 Fixed point round by adding 0355 ULM -2 Standardise L with sign in M 0356 STM 2 Store am 0356 STO 2 Store accumulator more significant half (am) 0357 STL 2 Store al 0360 FAC -2 Floating point round by forcing 0360 FRF -2 Floating point round by forcing 0361 XRF -2 Fixed point round by forcing 0362 FMP 2 Floating multiply 0363 FMN 2 Floating multiply negatively 0364 LOA 2 Left-shift one octal digit in accumulator 0365 ROA 2 Right-shift one octal digit in accumulator 0366 FMOD -2 Floating point modulus of am, clearing L first 0367 FCAM 2 Floating point clear and add modulus 0372 XMP* 2 Included in XMP (0352) 0373 XMN* 2 Included in XMN (0353) 0374 FDV 2 Floating divide 0375 XDR* 2 Fixed point division with remainder 0376 XWD* 2 Without clearing L, fixed point division with remainder 0377 FDR* 2 Floating-point division with remainder
1001 GOST 1 Go to section n on tape Bs 1002 RFKT 1 Read forwards K + 1 sections 1003 RBKT 1 Read backwards K + 1 sections 1004 WFKT 1 Write forward K + 1 sections 1005 MFKT 1 Move forwards K + 1 sections on tape Ba 1006 MBKT 1 Move backwards K + 1 section on tape Ba 1007 NGET 1 Need next reel of file Ba, call it n 1010 PGET 1 Need private tape Ba, title in S onwards 1011 FGET 1 Need free tape Ba, title in S onwards 1012 PKET 1 Need private tape Ba, title in S onwards, on logical channel K 1013 FKET 1 Need free tape Ba, title in S onwards, on logical channel K 1014 WTLT 1 Write title of tape Ba 1015 RTLT 1 Read title of tape Ba 1016 SAVT 1 Unload tape Ba and save it 1017 FRET 1 Free tape Ba, return to common pool 1020 GIVT 1 Give tape Ba to another program 1021 FREM 1 Free mechanisms 1022 NUMT 1 Change ogical number of tape 1023 SLHT L 1 Store length of tape in half word 1024 SPPT 1 Store present position on tape Ba 1030 RFVT 1 Read forwards variable length records 1031 RBVT 1 Read backwards variable length records 1032 WFVT 1 Write forwards variable length records 1033 SLVT 1 Select tape Ba for variable length work 1034 RFFT 1 Read forwards from fixed length blocks to variable length 1035 RBFT 1 Read backwards from fixed length blocks to variable length 1036 VTNB 1 Variable length tape number to Ba 1037 STMT 1 Store mode of tape 1040 COPY 1 Transfer words between store and selected tape 1041 SKIP 1 Omit words on selected tape 1042 MARK 1 Write mark K on selected tape 1043 ENVT 1 End variable length work on tape Ba 1044 GOWT 1 Go to specified word on tape Ba 1046 RFOT 1 Read forwards ORION tape 1047 RBOT 1 Read backwards ORION tape 1050 ISEL 1 Select input n 1051 ISNB 1 Number of current input stream to Ba 1052 IPNB 1 Number of current input peripheral to Ba 1053 IFBB T 1 If next character is in binary code set Ba 1054 ICHB 1 Input character to Ba 1055 IBNB 1 Number of blocks read to Ba 1056 IHAF 1 Read ba halfwords to S onwards 1057 IREC 1 Input record to store 1060 OSEL 1 Select output n 1061 OSNB 1 Number of current output stream to Ba 1062 OPNB 1 Number of current output peripheral to Ba 1063 ODEL 1 Delete output n 1064 OCHN 1 Output character n (the two least significant octal digits of n) 1065 OEOR 1 End of record 1066 OHAF 1 Output ba halfwords from S 1067 OREC 1 Output record 1070 ONIB 1 Define output n to be same as input ba 1071 OBRK 1 Break output n 1072 ODEF 1 Define output n 1100 ESSB 1 Enter subroutine at s, link in Ba 1101 ESNB 1 Enter subroutine at n, link in Ba 1102 ESBB 0 Enter subroutine at bm, link in Ba 1103 EBBN 1 Establish Ba branches, save b-registers from n on 1104 BRAN 1 Start higher priority branch Ba at S 1105 KILL -1 Kill all branches with number Ba 1106 WBRA -1 Wait if any branch Ba is active 1107 TBRA 1 Jump if any branch Ba is active 1110 INTRAP 1 Enter trapping mode 1112 EERN 1 Establish error routine entry point as n 1113 ERSN 1 Establish restart entry point as n 1114 TRAT 1 Jump and allow further traps 1115 EDUT 1 Establish tape for dumps 1116 NODU 1 No dump on error 1117 FINISH -1 End of program, return to supervisor 1120 TIMB -1 Present time to Ba 1121 DAYB -1 Present date to Ba 1122 CTRB -1 Local instruction counter to Ba 1123 ICTR 1 Initialise local instruction counter 1124 STIN 1 Set indicators Ao, Q etc. from n 1125 CMIB -1 Clear and add masked indicators Ao, Q etc. to ba 1126 HOOT 1 1127 CMSB 1 Clear and add masked handswitches to ba 1131 TSSB 1 Table search set Ba 1132 ETVN 1 Establish trap vector origin as n 1133 TVOB 1 Trap vector origin to Ba 1134 TRAP 1 Trap and inhibit further traps 1135 EBON 1 Establish block overflow routine entry point as n 1136 CTRA -1 Overall instruction counter to Am Instructions 1140 to 1157 (Compiler and Supervisor extracodes): no mnemonics allocated 1160 NBLP 1 Need block P soon 1161 FBLP 1 Finished with block P for the present 1162 DRPB 1 Duplicate read block P to block ba 1163 DWPB 1 Duplicate write block P to block ba 1164 RNBP 1 Rename as ba block P 1165 WBLP 1 Write block P 1166 RBAP 1 Read block P to absolute page ba 1167 LBLP 1 Lose block P 1170 CBLN 1 Switch n, -(clear blocks not,) +(clear blocks again) needed 1171 ABLN 1 Allow n blocks 1172 PAGB 1 Number of available pages to Ba 1173 BLKB 1 Number of available blocks to Ba 1174 BAND 1 Reserve band on drum 1175 RFKD 1 Read forward K+1 blocks from drum 1176 WFKD 1 Write forwards K+1 blocks to drum 1177 LBDD 1 Lose band on drum 1200 AOVS T 1 If A has overflowed set Ba 1201 ANOB T 1 If A has not overflowed set Ba 1202 LOVB T 1 If L has overflowed set Ba 1204 CSGB 1 Count of m.s, agreeing characters in s,g to Ba 1206 GZEB T 1 If the m.s. character of G is null, set Ba 1216 BPLB T 0 If bm is plus but not zero set Ba 1217 BMZB T 0 If bm is minus or zero set Ba 1223 BCIB T 1 If B-carry indicated, set Ba 1226 QPLB T 1 If Q(Bt) is plus but not zero set Ba 1227 QMZB T 1 If Q(Bt) is minus or zero set Ba 1234 JAES 1 Jump over next instr. if am approx equal to s 1235 JNAS 1 Jump over next inst.if am not approx equal to s 1236 APLB T 1 If accumulator is plus but not zero set Ba 1237 AMZB T 1 If accumulator is minus or zero set Ba 1250 LDCB 1 Load character into Ba 1251 STCB 1 Store character from Ba 1252 UKPK 1 Unpack n characters 1253 PACK 1 Pack n characters 1265 LCGB 1 Left shift one character in G, add n, overflow to Ba 1300 FCAB 1 Clear and add fractional part of s to am;integral part to Ba 1301 FAIB -1 Fractional part of am to Am, integral part to Ba 1302 MPNB 1 Multiply by number to ba 1303 MNNB 1 Multiply negatively by number to ba 1304 DVNB 1 Divide by number quotient to ba 1312 MPIB 1 Multiply by integer to ba 1313 MNIB 1 Multiply negatively by integer to ba 1314 DVIB 1 Divide by integer quotient to ba 1340 SARB 1 Shift arithmetically right in Ba 1341 SALB 1 Shift arithmetically left in Ba 1342 SCRB 1 Shift cyclically right in Ba 1343 SCLB 1 Shift cyclically left in Ba 1344 SLRB 1 Shift logically right in Ba 1345 SLLB 1 Shift logically left in Ba 1347 ORBH L 1 Or ba to halfword 1353 MSNB 1 Most significant bit in n, position to Ba 1356 NEHQ L 1 Not-equivalence half-word and ba to Q (Bt) 1357 ANHQ L 1 And half-word and ba to Q (Bt) 1364 RMBB 0 Replace masked parts of ba by bm 1371 XXXB 1 Dummy B-type extracode 1376 NENQ 1 Not-equivalence number and ba to Q (Bt) 1377 ANNQ 1 And number and ba to Q (Bt) 1400 CLOG 1 Complex natural logarithm 1402 CEXP 1 Complex exponential 1403 CONJ 1 Complex conjugate 1410 CSQRT 1 Complex square root 1411 CARG 1 Argument of complex number 1412 CMOD 1 Modulus of complex number 1413 CART 1 Cartesian coordinates from polar 1414 CREC 1 Complex reciprocal 1415 RAND 1 Generate pseudo-random number 1420 CAD 1 Complex add 1421 CSU 1 Complex subtract 1424 CCA 1 Complex clear and add 1425 CCS 1 Complex clear and subtract 1430 VAD 1 Vector add 1431 VSU 1 Vector subtract 1432 VMP 1 Vector multiply by scalar 1433 VCM 1 Vector cumulative multiply by scalar 1434 VGA 1 Vector clear and add 1436 FSCPR 1 Floating-point scalar product 1437 USCPR 1 Unrounded scalar product 1452 XMPF 1 Fixed-point multiply and force exponent 1456 CST 1 Complex store 1462 CMP 1 Complex multiply 1466 UMPAD 1 Unrounded multiply and add 1467 POLY 1 Polynomial 1473 XDVF 1 Fixed point divide and force 1474 XDSB 1 Fixed point divide and store 1475 WDSB 1 Without clearing L, divide and store 1476 IDSB 1 Integer divide and store 1477 SQRB 1 Store quotient and give remainder of type Ba 1500 DAD 2 Double length add 1501 DSU 2 Double length subtract 1502 DNA 2 Double length negate and add 1504 DCA 2 Double length clear and add 1505 DCS 2 Double length clear and subtract 1520 FADN 2 Floating add number 1521 FSUN 2 Floating subtract number 1524 FCAN 2 Floating clear and add number 1525 FCSN 2 Floating clear and subtract number 1534 XCAN 2 Fixed-point clear and add number 1535 XCSN 2 Fixed-point clear and subtract number 15^2 DMP 2 Double length multiply 1543 DMN 2 Double length multiply negatively 1556 DST 2 Double length store 1562 FMPN 2 Floating multiply by number 1565 DNEG -2 Negate double length accumulator 1566 DMOD -2 Double length modulus of a 1567 DCAM 2 Double length clear and add modulus 1574 FDVN 2 Floating divide by n for remainder 1575 WDVN 2 Without clearing L, divide by n for remainder 1576 DDV 2 Double length divide 1601 CAG 2 Clear and add to g 1604 ADG 2 Add to g 1605 ACG 2 Add cyclically to g 1606 NEG 2 Not equivalence word to g 1607 ANG 2 And to g 1611 COG -2 Complement each bit of g 1613 STG 2 Store g 1615 GTOA -2 Move contents of G to Am 1624 HCA L 2 Half length clear and add 1626 HST L 2 Half length store 1630 ANCG 2 And complement to g 1633 ATOG -2 Move the contents of Am to G 1646 ORG 2 Or to g 1652 SUGQ 2 Subtract s from g, result to Q (Bt) 1700 LOG 2 Natural logarithm of s to Am 1701 LOGA -2 Natural logarithm of am 1702 EXP 2 Exponential of s to Am 1703 EXPA -2 Exponential of am 1704 INTPT 2 Integral part of s to A 1705 INTPTA -2 Integral part of a 1706 SIGN 2 Sign of s (-1,0,+1) to A 1707 SIGNA -2 Sign of a (-1,0,+1) 1710 SQRT 2 Square root of s 1711 SQRTA -2 Square root of am 1712 RADIUS 2 Polar radius from cartesians am and s 1713 POWER 2 am raised to power s 1714 RECIP 2 Reciprocal of s 1715 RECIPA -2 Reciprocal of a 1720 ASIN 2 Arcsine of s 1721 ASINA -2 Arcsine of am 1722 ACOS 2 Arccosine of s 1723 ACOSA -2 Arccosine of am 1724 ATAN 2 Arctangent of s 1725 ATANA -2 Arctangent of am 1726 ANGLE 2 In polar coordinates 1727 CFAS 2 Compare accumulator with store and skip 1730 SIN 2 Sine of s 1731 SINA -2 Sine of am 1732 COS 2 Cosine of s 1733 COSA -2 Cosine of am 1734 TAN 2 Tangent of s 1735 TANA -2 Tangent of am 1736 TMGE 2 Skip next instruction if abs(am) greater than or equals s 1737 TMLT 2 Skip next instruction if abs(am) is less than s 1752 NLMY 2 Move number from L to M adjusting exponent 1753 NMLY 2 Move number from M to L adjusting exponent 1754 FRA -2 Floating point round by adding 1755 ASCALE 2 In A scale fraction and force exponent 1756 XCH 2 Exchange accumulator and storage 1757 FRAMP 2 Floating reciprocate am and multiply by s 1760 FSQA -0 Floating square of am to Am 1762 NLM 2 Move number from L to M preserving exponent 1763 NML 2 Move number from M to L preserving exponent 1764 SALA 2 Shift arithmetically left in A 1765 SARA 2 Shift arithmetically right in A 1766 XCAM 2 Fixed point clear and add modulus 1771 XXXA 1 Dummy A-type extracode 1772 IMP 2 Integer multiply 1773 IDV* 2 Integer divide 1774 FDR 2 Floating divide for remainder 1775 WDR 2 Without clearing L, divide for remainder 1776 FBMD 2 Floating remainder