diff --git a/doc/sail/fail.manual b/doc/sail/fail.manual index 0ca89f37..8c095615 100644 --- a/doc/sail/fail.manual +++ b/doc/sail/fail.manual @@ -32,9 +32,6 @@ - - - @@ -42,7 +39,7 @@ Sponsored by Advanced Research Projects Agency ARPA Order No. 2494 - Stanford Artificial Intelligence Laboratory May 1974 + Stanford Artificial Intelligence Laboratory December 1975 Memo AIM-226 Computer Science Department @@ -160,15 +157,16 @@ Section Page 2.3.3 Constants . . . . . . . . . . . . 11 2.3.3.1 Simple Numbers . . . . . . . . 11 2.3.3.2 Decimal Numbers . . . . . . . 12 - 2.3.3.3 Floating-Point Numbers . . . . . 12 - 2.3.3.4 Ascii Constants . . . . . . . 13 - 2.3.3.5 Sixbit Constants . . . . . . . 13 + 2.3.3.3 Scaled Numbers . . . . . . . . 12 + 2.3.3.4 Floating-Point Numbers . . . . . 12 + 2.3.3.5 Ascii Constants . . . . . . . 13 + 2.3.3.6 Sixbit Constants . . . . . . . 14 2.3.4 Symbols . . . . . . . . . . . . . 14 2.3.4.1 Labels . . . . . . . . . . 15 2.3.4.2 Parameters (Assignment Statements) . . . . . . . . . . . . 16 2.3.4.3 Variables . . . . . . . . . 17 - 2.3.4.4 Predefined Symbols . . . . . . 17 + 2.3.4.4 Predefined Symbols . . . . . . 18 2.3.4.5 Half-Killed Symbols . . . . . . 18 2.3.4.6 Block Structure . . . . . . . 19 2.3.4.7 Linkage with Separately @@ -177,7 +175,7 @@ Section Page 2.3.5 Complex Atoms . . . . . . . . . . . 24 2.3.5.1 Atomic Statements . . . . . . . 24 2.3.5.2 Literals . . . . . . . . . . 25 - ii Table of Contents FAIL + ii Table of Contents FAIL 3. Pseudo-Ops 27 @@ -201,79 +199,88 @@ Section Page 3.2.7 .LOAD and .LIBRARY . . . . . . . . . 34 3.2.8 PURGE . . . . . . . . . . . . . . 35 3.2.9 XPUNGE . . . . . . . . . . . . . 35 - 3.2.10 SUPPRESS and ASUPPRESS . . . . . . . . 35 - 3.2.11 UNIVERSAL and SEARCH . . . . . . . . . 36 + 3.2.10 SUPPRESS and ASUPPRESS . . . . . . . . 36 + 3.2.11 UNIVERSAL . . . . . . . . . . . . 36 + 3.2.12 SEARCH . . . . . . . . . . . . . 37 - 3.3 Entering Data 37 - 3.3.1 DEC and OCT . . . . . . . . . . . . 37 - 3.3.2 BYTE . . . . . . . . . . . . . . 37 + 3.3 Entering Data 38 + 3.3.1 DEC and OCT . . . . . . . . . . . . 38 + 3.3.2 BYTE . . . . . . . . . . . . . . 38 3.3.3 POINT . . . . . . . . . . . . . . 38 - 3.3.4 XWD . . . . . . . . . . . . . . 38 - 3.3.5 IOWD . . . . . . . . . . . . . . 38 + 3.3.4 XWD . . . . . . . . . . . . . . 39 + 3.3.5 IOWD . . . . . . . . . . . . . . 39 3.3.6 ASCII, ASCIZ, ASCID, and SIXBIT . . . . . 39 - 3.3.7 RADIX50 . . . . . . . . . . . . . 39 + 3.3.7 RADIX50 . . . . . . . . . . . . . 40 - 3.4 Reserving Space for Data 40 - 3.4.1 BLOCK . . . . . . . . . . . . . . 40 - 3.4.2 INTEGER and ARRAY . . . . . . . . . . 40 + 3.4 Reserving Space for Data 41 + 3.4.1 BLOCK . . . . . . . . . . . . . . 41 + 3.4.2 INTEGER and ARRAY . . . . . . . . . . 41 - 3.5 Assembler Control Statements 41 - 3.5.1 TITLE . . . . . . . . . . . . . . 41 - 3.5.2 END and PRGEND . . . . . . . . . . . 41 - 3.5.3 COMMENT . . . . . . . . . . . . . 42 - 3.5.4 RADIX . . . . . . . . . . . . . . 42 - 3.5.5 .INSERT . . . . . . . . . . . . . 42 - - 3.6 Listing Control Statements 43 - 3.6.1 TITLE and SUBTTL . . . . . . . . . . 43 - 3.6.2 LIST, XLIST, and XLIST1 . . . . . . . . 43 - 3.6.3 LALL and XALL . . . . . . . . . . . 43 - 3.6.4 NOLIT . . . . . . . . . . . . . . 44 - 3.6.5 NOSYM . . . . . . . . . . . . . . 44 + 3.5 Assembler Control Statements 42 + 3.5.1 TITLE . . . . . . . . . . . . . . 42 + 3.5.2 END and PRGEND . . . . . . . . . . . 42 + 3.5.3 COMMENT . . . . . . . . . . . . . 43 + 3.5.4 RADIX . . . . . . . . . . . . . . 43 + 3.5.5 .INSERT . . . . . . . . . . . . . 43 + 3.5.6 .FATAL . . . . . . . . . . . . . 44 + 3.5.7 .DIRECT . . . . . . . . . . . . . 44 FAIL Table of Contents iii - 3.6.6 CREF and XCREF . . . . . . . . . . . 44 - 3.6.7 PAGE . . . . . . . . . . . . . . 44 - 3.6.8 PRINTX . . . . . . . . . . . . . 44 - 3.6.9 PRINTS . . . . . . . . . . . . . 44 + 3.6 Loader Control Statements 45 + 3.6.1 .COMMON . . . . . . . . . . . . . 45 + 3.6.2 .ASSIGN . . . . . . . . . . . . . 45 + 3.6.3 .TEXT . . . . . . . . . . . . . . 45 -4. Macro Operations 45 + 3.7 Listing Control Statements 46 + 3.7.1 TITLE and SUBTTL . . . . . . . . . . 46 + 3.7.2 LIST, XLIST, and XLIST1 . . . . . . . . 46 + 3.7.3 LALL and XALL . . . . . . . . . . . 46 + 3.7.4 NOLIT . . . . . . . . . . . . . . 46 + 3.7.5 NOSYM . . . . . . . . . . . . . . 47 + 3.7.6 CREF and XCREF . . . . . . . . . . . 47 + 3.7.7 PAGE . . . . . . . . . . . . . . 47 + 3.7.8 PRINTX . . . . . . . . . . . . . 47 + 3.7.9 PRINTS . . . . . . . . . . . . . 47 - 4.1 Macros 45 - 4.1.1 Macro Bodies . . . . . . . . . . . 46 - 4.1.2 Concatenation . . . . . . . . . . . 46 - 4.1.3 Arguments in Macro Definitions . . . . . 46 - 4.1.4 Macro Calls . . . . . . . . . . . . 47 - 4.1.5 Arguments in Macro Calls . . . . . . . 48 - 4.1.6 How Much is Eaten by a Macro Call . . . . 49 - 4.1.7 Complex Example . . . . . . . . . . 50 +4. Macro Operations 48 - 4.2 FOR 51 - 4.2.1 String FOR . . . . . . . . . . . . 51 - 4.2.2 Character FOR . . . . . . . . . . . 52 - 4.2.3 Arithmetic FOR . . . . . . . . . . . 53 + 4.1 Macros 48 + 4.1.1 Macro Bodies . . . . . . . . . . . 49 + 4.1.2 Concatenation . . . . . . . . . . . 49 + 4.1.3 Arguments in Macro Definitions . . . . . 49 + 4.1.4 Macro Calls . . . . . . . . . . . . 50 + 4.1.5 Arguments in Macro Calls . . . . . . . 51 + 4.1.6 How Much is Eaten by a Macro Call . . . . 52 + 4.1.7 Complex Example . . . . . . . . . . 53 - 4.3 REPEAT 54 + 4.2 FOR 54 + 4.2.1 String FOR . . . . . . . . . . . . 55 + 4.2.2 Character FOR . . . . . . . . . . . 55 + 4.2.3 Arithmetic FOR . . . . . . . . . . . 56 - 4.4 Conditional Assembly 54 - 4.4.1 Numeric IFs . . . . . . . . . . . . 54 - 4.4.2 Text IFs . . . . . . . . . . . . . 55 - 4.4.3 Symbol IFs . . . . . . . . . . . . 55 + 4.3 REPEAT 57 -Appendices 56 + 4.4 Conditional Assembly 58 + 4.4.1 Numeric IFs . . . . . . . . . . . . 58 + 4.4.2 Text IFs . . . . . . . . . . . . . 58 + 4.4.3 Symbol IFs . . . . . . . . . . . . 59 - A Command Language 56 +Appendices 60 - B Relocatable and Undefined Values 59 + A Command Language 60 - C Predefined Opcodes 60 + B Relocatable and Undefined Values 63 - D Stanford Character Set 69 + C Predefined Opcodes 64 - E Summary of Character Interpretations 70 + D Stanford Character Set 73 -Index 73 + E Summary of Character Interpretations 74 + iv Table of Contents FAIL + + +Index 77 FAIL Introduction 1 @@ -427,7 +434,7 @@ cannot resolve the ambiguity in all circumstances; it is a good idea to avoid conflicts as much as possible. FAIL will not recognize an identifier as an opcode if the identifier is followed by any one of -the characters colon (:), left-arrow (_), up-arrow (^), tilde (), or +the characters colon (:), left-arrow (_), up-arrow (^), tilde (~), or number sign (#). @@ -583,7 +590,7 @@ value is often called the device code. When FAIL's statement processor encounters a carriage return or semicolon (;), all characters up to the next line feed or form feed are completely ignored except for listing and certain macro processor -functions (see section 4.1, page 45). Upon reaching the line +functions (see section 4.1, page 48). Upon reaching the line feed or form feed, the comment is terminated. Usually, this is used to insert a relevant comment at the end of a line of code. @@ -644,6 +651,7 @@ precedence levels: - Subtraction 1 * Multiplication 2 / Division 2 +  Remainder from Division 2 & Logical AND 3  Logical AND 3 ! Logical OR 3 @@ -656,6 +664,10 @@ precedence levels: - Negation (two's complement) 5  Logical NOT (one's complement) 5 + | Absolute Value 5 +  JFFO (bit number of the first + 1 in the binary representation + of the argument) 5 If an expression contains any undefined values, its own value is @@ -677,7 +689,6 @@ statements, which have no effect on the value of the expression. FAIL Basic Syntax 9 - Examples FOO2 ;value of FOO shifted left 2 bits @@ -693,8 +704,19 @@ statements, which have no effect on the value of the expression. FOO:BAR_1 105 ;the value of this expression is 105 ;(labels and assignment statements have no ;effect on the value of the expression) + 1 ;value is 43 (bit 35 is the leftmost 1) + 4 ;value is 41 + -1 ;value is 0 (bit 0, the sign bit, is 1) + 0 ;value is 44 (no bits are 1) + 7/3 ;value is 2 + 65 ;value is 1 +Note: the operators , , and | are new. They require a modification +to the loader to handle additional Polish operators. Unless this +modification has been made, do not attempt to use these operators +where the value of their arguments is undefined. + @@ -715,6 +737,8 @@ different uses, all of which involve referring to something by a convenient symbolic name. The uses of identifiers will be covered as the various applications arise. Identifiers may be defined either by the programmer or by FAIL. + 10 Basic Syntax FAIL + The characters legal in an identifier are letters, digits, and the four characters dollar sign ($), percent sign (%), point (.), and @@ -726,14 +750,12 @@ lower case letters are treated as equivalent. Thus "FOOBAR" and "foobarbletch" are equivalent identifiers. Also, "" is considered equivalent to ".", so, for example, "A7" and "A.7" are equivalent identifiers. - 10 Basic Syntax FAIL - Certain identifiers have special meaning in FAIL, and cannot be used except with their own special meanings. Some of these reserved identifiers are IFAVL, IFDEF, IFDIF, IFE, IFG, IFGE, IFIDN, IFL, -IFLE, IFMAC, IFN, IFNAVL, IFNDEF, IFNMAC, IFNOP, IFOP, IOWD, .FNAM1, -.FNAM2, ".", and "$.". +IFLE, IFMAC, IFN, IFNAVL, IFNDEF, IFNMAC, IFNOP, IFOP, IOWD, .INSERT, +.FNAM1, .FNAM2, .CPU., ".", and "$.". 2.3.2 Values @@ -756,7 +778,7 @@ adequately described. Partially defined values are commonly used in writing FAIL programs; several mechanisms exist to enable FAIL (and the loader) to handle such values correctly. The full impact of forward references and relocatable values is discussed in appendix -B, page 59. +B, page 63. Some of the different kinds of values that often occur in FAIL are distinguished by particular names: relocatable, absolute, defined, @@ -767,6 +789,9 @@ elucidation. A value that depends on where the program is when it is loaded in core is called relocatable. Relocatable values occur most frequently + FAIL Basic Syntax 11 + + when some location in the program or in the data is referred to. Values that do not depend on where the program is located are called absolute or unrelocatable. An example of an absolute value is a @@ -779,8 +804,6 @@ defined, that is, when the value of the symbol is undefined. FAIL makes sure that the right thing happens when the value becomes defined as long as an undefined value is legal in the particular context where it is used. - FAIL Basic Syntax 11 - A symbol that is defined is said to be available (after the point of definition) in the block where it is defined. When another (lower) @@ -798,36 +821,26 @@ radix for interpretation of numbers). Constants are absolute, i.e., independent of where the program is loaded. A constant may be one of several types of numerical or text constants. In addition to the atomic constants described here, there are various data entry pseudo- -ops described in section 3.3, page 37. +ops described in section 3.3, page 38. 2.3.3.1 Simple Numbers -A simple number consists of a string of digits, optionally followed -by the letter "B" and one or two additional digits which represent a -scale factor. The digit string is interpreted as a number in the -current radix. Since the radix is initialized to 8, simple numbers -are usually interpreted as octal by default. In this case, the -accumulation is done by logical shifting, so the number is considered -unsigned. If the radix is anything other than 8, the accumulation is -done by multiplication, and the sign bit cannot be set (but a -negative number can be entered as an expression). The current radix -can be set with the RADIX pseudo-op (see section 3.5.4, page 42). - -The one- or two-digit argument following the "B", interpreted in -decimal, specifies the low-order bit position of the number in the -word. The number is shifted left logically a number of bit positions -equal to 35 (decimal) minus the argument. +A simple number consists of a string of digits, interpreted as a +number in the current radix. Since the radix is initialized to 8, +simple numbers are usually interpreted as octal by default. In this +case, the accumulation is done by logical shifting, so the number is +considered unsigned. If the radix is anything other than 8, the +accumulation is done by multiplication, and the sign bit cannot be +set (but a negative number can be entered as an expression). The +current radix can be set with the RADIX pseudo-op (see section +3.5.4, page 43). Examples: 1743 2 - 254B8 - 1B33 ;equivalent to 4 - 22B18 - 10B37 ;equivalent to 2 12 Basic Syntax FAIL @@ -836,18 +849,37 @@ equal to 35 (decimal) minus the argument. Decimal numbers provide a way of entering decimal information regardless of the current radix. A decimal number is a simple number -preceded by an equal sign (=). Since decimal numbers are handled -identically to simple numbers except for the radix, the "B" shifting -operation may also be used with decimal numbers. +preceded by an equal sign (=). Examples: - =100 - =69 - =10B27 + =100 assembles as: 000000000144 + =69 000000000105 - 2.3.3.3 Floating-Point Numbers + 2.3.3.3 Scaled Numbers + + +A simple number or decimal number may be followed by the letter "B" +and a scale factor. The scale factor may be any atom that is defined +and absolute. Any simple numbers that appear in the scale factor +will be interpreted as decimal, regardless of the current radix. The +value of the scale factor specifies the low-order bit position of the +number in the word. That is, the number preceding the B is shifted +left logically a number of bit positions equal to 35 (decimal) minus +the scale factor. + + Examples: + + 254B8 assembles as: 254000000000 + 1B33 000000000004 + 22B18 000011000000 + 22B<17+1> 000011000000 + 10B37 000000000002 + =10B27 000000005000 + + + 2.3.3.4 Floating-Point Numbers Numbers may also be entered in standard floating-point notation, in @@ -861,6 +893,9 @@ A floating-point number consists of two strings of digits, separated by a decimal point and followed by an optional scale factor. The digit strings before and after the decimal point represent the integer and fraction parts of the floating-point number, + FAIL Basic Syntax 13 + + respectively. The scale factor is the letter "E", an optional minus sign, and one or two digits. The number following the "E" specifies a power of ten by which the number will be multiplied. @@ -879,16 +914,15 @@ point following a digit string to signify a decimal number. 1.86E05 31.4159E-1 69E1 ;presently equivalent to 690.0 - FAIL Basic Syntax 13 - 2.3.3.4 Ascii Constants + 2.3.3.5 Ascii Constants Constants may also be specified as the ascii value of a character or string of characters. The ascii value of a character is its 7-bit code in the Stanford Character Set, a modified form of the USASCII -code (see appendix D, page 69). An ascii constant is written as a +code (see appendix D, page 73). An ascii constant is written as a string of characters not containing a double quote ("), enclosed with double quotes, e.g, "Foo". If the string is null, i.e., "", the resulting value will be zero. If the string contains exactly one @@ -912,9 +946,10 @@ format in multiple words. "A" ;101 octal "^C" ;27503 "foobar" ;337576130362 + 14 Basic Syntax FAIL - 2.3.3.5 Sixbit Constants + 2.3.3.6 Sixbit Constants Another character code that is frequently used is sixbit. It is a @@ -931,9 +966,6 @@ bit and set the 100 bit to 0. The inverse transformation is accomplished by adding 40 to each sixbit character. Sixbit constants can be specified in FAIL in the same way as ascii - 14 Basic Syntax FAIL - - constants, except that close single quotes (apostrophes) (') should be used instead of double quotes. Naturally, if more than one character appears in the string, the shifting will be 6 bits at a @@ -965,7 +997,10 @@ A symbol is an identifier which at some point in the program (or possibly in an external program) is assigned a value which will be associated with that identifier whenever it is used in a context where symbols are recognized (see section 2.1.1.1, page 3, and -section 4.1.4, page 47, for discussion of possible conflicts with +section 4.1.4, page 50, for discussion of possible conflicts with + FAIL Basic Syntax 15 + + opcodes or macros). The point at which a value is assigned to a symbol is said to be the point where it is defined. @@ -983,9 +1018,6 @@ Two-pass assemblers avoid the forward reference problem by assembling the program twice. On the first pass the assembler calculates the value for each symbol; on the second pass these known values are used when the corresponding symbols are referenced. This method - FAIL Basic Syntax 15 - - probably has the smaller storage requirements, but it requires more cpu time since the entire source file is scanned twice. @@ -1018,6 +1050,9 @@ subsections. Labels are the most common type of symbol. They are used as symbolic references to locations in the program. Labels help to keep such references independent of the exact placement of those parts of the + 16 Basic Syntax FAIL + + program in the core image. The value of a label is calculated automatically by FAIL, so that the programmer need not keep careful account of the exact numeric locations of all parts of his program. @@ -1036,8 +1071,6 @@ Although labels may occur at the beginning of any expression, they almost always occur at the beginning of a line. This convention improves the readability of programs by keeping labels in a place where they are easily recognized. - 16 Basic Syntax FAIL - In order to detect possible conflicts in label usage, FAIL does not allow any label to be defined more than once. (However, FAIL block @@ -1069,6 +1102,8 @@ compatibility with other assemblers, but if the first atom after the = begins with another = to indicate a decimal number, at least one space should separate the two to distinguish them from ==, which has a different function (see section 2.3.4.5, page 18). + FAIL Basic Syntax 17 + As with labels, any number of assignment statements may appear at the beginning of any expression, but they are normally written as @@ -1087,9 +1122,6 @@ forward references (i.e., before the first definition) will be that of the first assignment. Note that this is an incompatibility with two-pass assemblers, which would instead use the last value assigned during pass one. - FAIL Basic Syntax 17 - - Examples: @@ -1113,12 +1145,13 @@ used in contexts which do not allow forward references. However, it can be used as any other forward-referenced symbol; the number sign need not be used with more than one occurrence of the symbol. Similar effects can also be obtained with the INTEGER and ARRAY -pseudo-ops (see section 3.4.2, page 40). +pseudo-ops (see section 3.4.2, page 41). Examples: SETZM FOO# MOVEI A,BAR#-1 + 18 Basic Syntax FAIL 2.3.4.4 Predefined Symbols @@ -1138,9 +1171,6 @@ The reason for having two of these symbols is that some features of FAIL create complications affecting the location counter; see the discussion of literals (section 2.3.5.2, page 25) and the PHASE pseudo-op (section 3.1.3, page 29). - 18 Basic Syntax FAIL - - Examples: @@ -1152,6 +1182,14 @@ current source file. The value of .FNAM1 is the 36-bit binary representation of the source file name; .FNAM2 has the value of the source file extension (or second file name). +The predefined symbol .CPU. denotes the type of processor that FAIL +is running on. This symbol has the value 1 for the PDP-6, 2 for the +KA-10, and 3 for the KI-10. + +Two other symbols, .INSERT and IOWD, are predefined. These symbols +cause actions like pseudo ops so their descriptions appear later; see +section 3.5.5, page 43, and section 3.3.5, page 39, respectively. + 2.3.4.5 Half-Killed Symbols @@ -1165,6 +1203,9 @@ particular symbol names from being displayed by the symbolic disassembler. Symbols that have been marked to prevent their display are called half-killed. Half-killing a symbol is useful for parameters which might incorrectly be displayed as core addresses or + FAIL Basic Syntax 19 + + accumulator names. Half-killing is also handy for labels in code that is relocated at runtime. The debuggers do recognize half-killed symbols when they are input. @@ -1189,7 +1230,6 @@ BUFSIZ = = 100 ;since this means decimal, not half-killed BUFSIZ === 100 ;this is unambiguous (100 is decimal) BUFSIZ == = 100 ;(100 is decimal) LOOP:: SKIPN A,(B) ;a half-killed label - FAIL Basic Syntax 19 2.3.4.6 Block Structure @@ -1208,13 +1248,16 @@ that of ALGOL, but is somewhat less restrictive. A program is considered to be a block whose name is the same as the program name (set by the TITLE statement; see section 3.5.1, page -41). Each block may contain any number of inner blocks, but the +42). Each block may contain any number of inner blocks, but the depth of nesting may not exceed 17 (decimal). A definition of a symbol, a user-defined opcode (see section 3.2.1, page 32), or a -macro (see section 4, page 45) applies only within the scope of +macro (see section 4, page 48) applies only within the scope of the outermost block in which it is defined. The scope of a block includes the scope of each block it contains, unless the symbol (etc.) in question is defined again in an inner block, in which case + 20 Basic Syntax FAIL + + the more local definition takes precedence within the scope of that block. A block is delimited by a BEGIN statement and a BEND statement (see section 3.2.2, page 32). @@ -1229,14 +1272,11 @@ making subroutine entry points available to outer blocks when the subroutines themselves are contained in blocks. In simple cases, this could be done by beginning the block after the entry label(s) or even after some of the code, but this makes reading the routine more -difficult and hence the up-arrow construct is preferred. Tilde () +difficult and hence the up-arrow construct is preferred. Tilde (~) may be used instead of up-arrow. Here are some examples of symbol usage, with and without block structure. Both examples generate the same code: - 20 Basic Syntax FAIL - - FOO1: JRST FOO1 FOO1: JRST FOO1 JRST FOO2 JRST FOO2 @@ -1267,6 +1307,9 @@ that may occur later. To resolve this ambiguity, FAIL always considers a symbol reference to be a forward reference when the symbol has not been defined in the + FAIL Basic Syntax 21 + + current block, even if it has been defined in some outer block. If no other definition is given by the time the block ends, then the outer-block definition is used to resolve the forward reference. @@ -1278,9 +1321,6 @@ even when they would not otherwise be such. Macros and user-defined opcodes cannot be forward-referenced. Such symbols are always available; references to them will use their outer-block definitions. - FAIL Basic Syntax 21 - - Examples: @@ -1319,11 +1359,11 @@ but if no forward references are made to the local version, it will assemble correctly. However, if the redefinition of a down-arrowed parameter is effective at its original block level (possibly via ^ or ^^), FAIL will change the original definition without complaint. -This allows redefinition of global parameters from inner blocks. A -question mark (?) may be used instead of down-arrow. 22 Basic Syntax FAIL +This allows redefinition of global parameters from inner blocks. A +question mark (?) may be used instead of down-arrow. Examples: @@ -1371,11 +1411,11 @@ and the global symbols discussed here.) Symbols are normally considered local, which means that they will not be available outside their own program and may be defined in more -than one program without conflict. Global symbols, however, are -available to all programs and hence must not have conflicting FAIL Basic Syntax 23 +than one program without conflict. Global symbols, however, are +available to all programs and hence must not have conflicting definitions within the set of programs to be loaded. The easiest way to declare a symbol to be global is to follow some occurrence of the symbol by an up-arrow. This flags the symbol as a global without @@ -1413,6 +1453,9 @@ points which will be available to a library search. This is a brief restatement of the ways that identifiers are used as symbols in conjunction with arrows. + 24 Basic Syntax FAIL + + Examples: @@ -1425,7 +1468,6 @@ FOO^: ;FOO is global and defined here (internal), ;available at the outermost block PUSHJ P,BAZ^ ;BAZ is global, may be external, available at the ;outermost block - 24 Basic Syntax FAIL 2.3.5 Complex Atoms @@ -1463,6 +1505,9 @@ an atom, enclose that statement in brokets. Some number of statements will be assembled as described above, and the value of the first word assembled will be returned as the value of the atom, just as if the corresponding number had been typed. The values of any + FAIL Basic Syntax 25 + + additional words assembled up to the closing broket will be ignored, although their side effects (if certain pseudo-ops are used) may remain. For example, if one of the multiple-word text pseudo-ops is @@ -1470,9 +1515,6 @@ used inside brokets, only the first text word will be returned, and the rest will be dispatched to the great bit bucket in the sky. This type of atom is constrained by FAIL to be handled as a number, so all symbols used in this context must be defined and available. - FAIL Basic Syntax 25 - - Examples: @@ -1515,6 +1557,9 @@ legal. Because of the constants optimization, it is often dangerous (and considered poor form) to write a program which changes the contents of a literal. Such a change affects all parts of the program + 26 Basic Syntax FAIL + + attempting to use that constant, which is not usually the desired effect. @@ -1522,9 +1567,6 @@ A literal may contain more than one word if desired. The syntax of literals is basically the same as that of atomic statements, except that all words assembled are used. Multiple-word literals are most commonly used to store long text strings, but may be used to store - 26 Basic Syntax FAIL - - sequences of instructions. There is no rigid limit on the maximum size of a literal, but large literals do consume assembler core fairly rapidly. @@ -1608,7 +1650,8 @@ that the relocation is set to relocatable, regardless of the relocation of the argument. The ORG statement has the same effect as the LOC and RELOC statements -except that the relocation is set to the relocation of the argument. +except that the relocation is set to the relocation of the argument. +For compatibility with MACRO-10, the pseudo op .ORG is also accepted. Whenever LOC, RELOC or ORG is used, the current value (and relocation) of the location counter is saved (there is only one such @@ -1928,6 +1971,9 @@ stored in the corresponding linkend address, only if that address is non-zero. The LINKEND feature allows the head of the list to be in a known place, rather than in the last place LINKed. +For compatibility with MACRO-10, the pseudo ops .LINK and .LNKEND are +accepted for LINK and LINKEND, respectively. + 3.2.7 .LOAD and .LIBRARY @@ -1942,15 +1988,18 @@ The DEV: field is optional (the default is DSK:); it specifies the device where the REL file can be found. The [PRJ,PRG] field is optional; it has the usual meaning. The file named must have the extension REL (this is a loader restriction). - -In non-Stanford FAIL installations, the file name is scanned in -accordance with the convention that prevails at that site. FAIL Pseudo-Ops 35 +In non-Stanford FAIL installations, the file name is scanned in +accordance with the convention that prevails at that site. + The .LIBRARY pseudo-op is similar to .LOAD, except that instead of loading the file, the loader will search the named file as a library. +For compatibility with MACRO-10, the pseudo ops .REQUIRE and .REQUEST +are accepted for .LOAD and .LIBRARY, respectively. + 3.2.8 PURGE @@ -1989,6 +2038,7 @@ following the XPUNGE. At that BEND, most local symbols will not be emitted to the loader. This decreases the size of the REL file and makes loading it faster. Block names, internal and external symbols, variables, and literal-labels will be passed to the loader. + 36 Pseudo-Ops FAIL 3.2.10 SUPPRESS and ASUPPRESS @@ -1997,9 +2047,6 @@ variables, and literal-labels will be passed to the loader. When a parameter file (i.e., a file that contains assembly parameters for use in several assemblies) is used in assemblies, many symbols get defined but are never used. Unused defined symbols take up space - 36 Pseudo-Ops FAIL - - in the binary file. Unused symbols may be removed from symbol tables by means of the SUPPRESS or ASUPPRESS pseudo-ops. These pseudo-ops control a suppress bit associated with each symbol; if the suppress @@ -2024,45 +2071,71 @@ page 36), then all symbols in the universal symbol table will have the suppress bit set when they are used in a subsequent SEARCH. - 3.2.11 UNIVERSAL and SEARCH + 3.2.11 UNIVERSAL The UNIVERSAL pseudo-op has the same syntax as TITLE (see section -3.5.1, page 41). In addition to the functions of TITLE, UNIVERSAL +3.5.1, page 42). In addition to the functions of TITLE, UNIVERSAL declares the symbols defined in this program to be universal symbols. Universal symbols are symbols which can be accessed by other programs -that are assembled after the universal symbols have defined. That -is, UNIVERSAL causes symbols to be retained by FAIL after it finishes -assembling the universal file. When subsequent files are assembled -(using this copy of FAIL, which has the universal symbols), the -universal symbols can be accessed as any other local symbols. The -program name set by UNIVERSAL is used to name the universal symbol -table created to contain the universal symbols defined by this -program. Only outer block symbols (and macros and opdefs) are -retained in the universal symbol table. Variables, literal-labels, -and internal symbols are not retained. +that are assembled after the universal symbols have been defined. +That is, UNIVERSAL causes symbols to be retained by FAIL after it +finishes assembling the universal program. -Universal files are intended for making definitions, not for -assembling code. The usual use for a universal file is to define -opcodes, macros and parameters for subsequent assemblies. It is not -wise to include relocatable symbols in the universal file. The -exception is that a universal file may declare a symbol to be -external; that declaration can be used by subsequent assemblies that -search this universal symbol table. +The program name that is set by UNIVERSAL names the universal symbol +table. The universal symbol table contains the universal symbols +defined by this program. Only outer block symbols (and macros and +opdefs) are retained in the universal symbol table. Variables, +literal-labels, and internal symbols are not retained. + +Universal symbols are written into a binary universal file which can +be accessed in subsequent assemblies without reassembling the source FAIL Pseudo-Ops 37 -SEARCH controls access to the universal symbols. SEARCH takes a list -of arguments, each of which is the name of a universal symbol table. -For each universal table named, all the symbols in that table are -added to the end of the main symbol (or macro or opcode) table. -Then, when the symbol table is searched, if there is no other +text of the universal program. The binary universal file is given +the same name as the name in the universal statement. This file has +the extension "FUN" and it is written in the current directory. +Output of the binary universal file is automatic, but may be +prevented by use of .NOUNV in .DIRECT (see section 3.5.7, page 44), +or by the /O switch in the command line (see appendix A, page 60). + +Access to the symbols in a universal symbol table is controlled by +the SEARCH pseudo op (see section 3.2.12, page 37). Once access is +established, universal symbols can be referenced as any other local +symbols. + +Universal programs are intended for making definitions, not for +assembling code. The usual use for UNIVERSAL is to define opcodes, +macros, and parameters for use in subsequent assemblies. It is not +wise to include relocatable symbols in a universal program. The +exception is that a universal program may declare a symbol to be +external; that declaration can be used by subsequent assemblies that +search this universal symbol table. + + + 3.2.12 SEARCH + + +Access to universal symbols is established by SEARCH. SEARCH takes a +list of arguments, each of which is the name of a universal symbol +table. For each universal table named, all the symbols in that table +are added to the end of the main symbol (or macro or opcode) table. +Thus, when the symbol table is searched, if there is no other definition of the symbol, the universal definition will be found. Universal symbols are considered to be defined at the outer block. If such symbols are to be made available to inner blocks, they must be defined with a down-arrow, or declared GLOBAL. - +If the universal symbol table named in SEARCH does not exist already, +FAIL looks for a binary universal file (sometimes called a FUN file, +because it has the extension "FUN"). The file sought has the same +name as the argument to SEARCH, the extension FUN, and is on the +current file directory, or on device UNV, or on device SYS. +Alternatively, the argument to SEARCH may be followed by a file name +enclosed in parentheses, in which case the named file will be sought +instead of the default. + 38 Pseudo-Ops FAIL 3.3 Entering Data @@ -2100,8 +2173,6 @@ by commas, but other arguments are separated by commas. For instance, the statement BYTE (7) 3,5(11)6 - 38 Pseudo-Ops FAIL - will put two 7-bit bytes (3 and 5) and an 11-bit byte (6) in a word, left justified. @@ -2116,6 +2187,9 @@ parenthesis, indicate a null argument, which is the same as a zero. The POINT pseudo-op assembles a byte pointer in one word. The first argument should be an expression and is interpreted in decimal. The expression must be defined and available. It indicates the byte + FAIL Pseudo-Ops 39 + + size, and its value is placed in the size field of the assembled word. The second argument should contain one or more of an index field, an address field, and an at-sign. The third field, if @@ -2140,7 +2214,7 @@ Both arguments must be present. 3.3.5 IOWD -IOWD is a permanently defined macro (see section 4, page 45). +IOWD is a permanently defined macro (see section 4, page 48). Its definition is DEFINE IOWD (A,B) @@ -2153,7 +2227,6 @@ value of the second argument goes in the right halfword. This format in communicating with the operating system to specify the address and length of a data block. Also, IOWD may be used to initialize an accumulator for use as a push down pointer. - FAIL Pseudo-Ops 39 3.3.6 ASCII, ASCIZ, ASCID, and SIXBIT @@ -2163,8 +2236,10 @@ There are four text statements: ASCII, ASCIZ, ASCID, and SIXBIT. Each takes as its argument a string of characters starting and ending with, and not otherwise containing, some non-blank character which serves as a delimiter. This delimiter should not be any one of the -characters: left-arrow (_), colon (:), up-arrow (^), tilde (), or +characters: left-arrow (_), colon (:), up-arrow (^), tilde (~), or number sign (#). + 40 Pseudo-Ops FAIL + ASCII puts the 7-bit representation of each successive character in the string (excluding the delimiters) in successive words, 5 @@ -2205,9 +2280,6 @@ octal. The radix50 value is obtained by accumulating a total composed of each character value times a weight. The weight is the power of 50 (octal) corresponding to the character position. The weight of the rightmost non-blank character is 1; the second from - 40 Pseudo-Ops FAIL - - the right has weight 50; the third has weight 50*50; etc. The correspondence between characters and their radix50 value is given below: @@ -2218,8 +2290,7 @@ below: .  45 $  46 %  47 - - + FAIL Pseudo-Ops 41 3.4 Reserving Space for Data @@ -2257,14 +2328,11 @@ reserved (as in BLOCK), with the symbol being the address of the first one. For example, ARRAY FOO[10],BAZ[20] - FAIL Pseudo-Ops 41 - will reserve 10 words for FOO and 20 words for BAZ. The symbols FOO and BAZ are not defined by this statement; they can only be used where forward references are legal. - - + 42 Pseudo-Ops FAIL 3.5 Assembler Control Statements @@ -2310,14 +2378,15 @@ section 3.1.7, page 31, and section 3.1.6, page 31). That is, all outstanding variables and literals are placed starting at the current value of the location counter when the END is seen. Variables are put out first. - 42 Pseudo-Ops FAIL - PRGEND is used in place of END when it is desired to assemble more than one program to and/or from a single file. It behaves exactly like END, including taking an optional argument as the starting address, and then restarts FAIL completely, except that I/O is undisturbed. It therefore cannot appear in a macro expansion or + FAIL Pseudo-Ops 43 + + similar situation. PRGEND is particularly useful for directly assembling a library which consists of many small programs. @@ -2330,7 +2399,7 @@ taken as the delimiter. All text from it to the line feed following the next occurrence of this delimiter is ignored by the assembler, except that it is passed to the listing file. The delimiter should not be any one of the characters left-arrow (_), colon (:), up-arrow -(^), tilde (), or number sign (#). +(^), tilde (~), or number sign (#). 3.5.4 RADIX @@ -2362,32 +2431,107 @@ format is: The DEV: field is optional (the default is DSK:); it specifies the device where the inserted file can be found. The [PRJ,PRG] field is optional; it has the usual meaning. In non-Stanford FAIL - FAIL Pseudo-Ops 43 - - installations, the file name is scanned in accordance with the convention that prevails at that site. This pseudo-op will not work if it appears in the input stream from any device other than DSK, since random access features are required to accomplish the repositioning of the file. + 44 Pseudo-Ops FAIL +Unlike a normal pseudo-op, which is recognized only if it appears as +the op-code, .INSERT is recognized anywhere in a line. It is +suggested that .INSERT not be used as a macro argument. - 3.6 Listing Control Statements + 3.5.6 .FATAL + + +The .FATAL pseudo-op prints the text of the line on which it appears, +and stops the assembly. Usually, .FATAL appears under some +conditional assembly switch to stop the assembly because some +parameter settings are inconsistient. + + + 3.5.7 .DIRECT + + +The .DIRECT pseudo op takes a list of function names separated by +commas as its argument. The available functions and their uses are +listed below. + +The functions KA10 and KI10 are used when the program being assembled +is known to be suitable for only one of these processors. The +default situation allows the code to be executed on either processor. +LINK-10 checks this information to prevent code from being executed +on the wrong kind of processor. + +.NOBIN suppresses binary output. + +.NOUNV suppresses output of the binary universal (FUN) file (see +section 3.2.11, page 36). + +The functions .XTABM and .ITABM modify the behavior of the macro +processor with respect to the treatment of tabs and blanks that +appear in actual arguments to a macro call (see section 4.1.5, page +51). .ITABM is the default; tabs and blanks are kept as part of the +argument. If .XTABM is used, leading and trailing blanks and tabs +are deleted from a macro argument, unless the argument is enclosed in +brokets or braces. + FAIL Pseudo-Ops 45 + + + 3.6 Loader Control Statements + + +The following pseudo-ops are used to pass control information to +LINK-10. + + + 3.6.1 .COMMON + + +The .COMMON statement passes information to LINK-10, and does not +otherwise affect the assembly. This statement has the same syntax as +ARRAY (see section 3.4.2, page 41). LINK-10 will reserve the +requested amount of space for each block of named common. + + + 3.6.2 .ASSIGN + + +The .ASSIGN pseudo op (and ASSIGN in the Tenex version) takes three +arguments: two identifiers, and an optional expression. At load +time, the value of the first identifier, which is treated as an +external by the assembler, is assigned to the second identifier. +Then the value of the expression (which is taken as 1 if the +expression is omitted) is added to the value of the first identifier. + + + 3.6.3 .TEXT + + +The .TEXT statement is used to pass the ascii text of control +statements to LINK-10. The .TEXT pseudo op is like ASCIZ (see +section 3.3.6, page 39) except it does not have a value and does not +affect the location counter. + 46 Pseudo-Ops FAIL + + + 3.7 Listing Control Statements These pseudo-ops affect the format of the assembly listing. Several descriptions below refer to command line switches; appendix A, page -56, describes the command line format and the different switches. +60, describes the command line format and the different switches. - 3.6.1 TITLE and SUBTTL + 3.7.1 TITLE and SUBTTL The TITLE statement can be used to set the heading that appears on -the pages of the listing. See section 3.5.1, page 41. +the pages of the listing. See section 3.5.1, page 42. SUBTTL is followed by a string of characters which is used as a subheading on all subsequent pages until another SUBTTL appears. If @@ -2396,7 +2540,7 @@ subheading of that page also. The string used in the heading for SUBTTL is terminated by the first carriage return or semicolon. - 3.6.2 LIST, XLIST, and XLIST1 + 3.7.2 LIST, XLIST, and XLIST1 The XLIST statement causes listing to stop until the next LIST @@ -2409,30 +2553,30 @@ The XLIST1 statement has exactly the same effect as XLIST unless the ignored. - 3.6.3 LALL and XALL + 3.7.3 LALL and XALL XALL causes the listing of the body of macros, REPEATs, and FORs to be suppressed during macro expansion. LALL causes it to start up again. LALL is the default. - 44 Pseudo-Ops FAIL - 3.6.4 NOLIT + 3.7.4 NOLIT This statement causes the binary listing of code in literals to be suppressed. This has the same effect as /L in the command string. + FAIL Pseudo-Ops 47 - 3.6.5 NOSYM + 3.7.5 NOSYM This statement disables the listing of the symbol table, counteracting /S in the command string. - 3.6.6 CREF and XCREF + 3.7.6 CREF and XCREF These turn on and off the emission of information to CREF, the Cross- @@ -2440,7 +2584,7 @@ Reference Listing program. These pseudo-ops have no effect unless /C was used in the command string. CREF is the default. - 3.6.7 PAGE + 3.7.7 PAGE This pseudo-op has the same function as a form feed; it is included @@ -2451,7 +2595,7 @@ the correspondence between listing pages and source file pages, so its use is generally not recommended. - 3.6.8 PRINTX + 3.7.8 PRINTX This pseudo-op causes the line on which it appears to be printed on @@ -2459,15 +2603,15 @@ the user's terminal. This is sometimes useful for giving a progress report during long assemblies. - 3.6.9 PRINTS + 3.7.9 PRINTS The first non-blank character following the PRINTS pseudo-op is taken as the delimiter. All text from it to the next occurrence of this delimiter is printed on the user's terminal. The delimiter should not be any one of the characters left-arrow (_), colon (:), up-arrow -(^), tilde (), or number sign (#). - FAIL Macro Operations 45 +(^), tilde (~), or number sign (#). + 48 Macro Operations FAIL 4. Macro Operations @@ -2516,7 +2660,7 @@ tab characters. GDEFINE is similar to DEFINE except that the macro is defined at the outermost block level. A macro defined by GDEFINE will remain defined after exiting the block in which it was defined. - 46 Macro Operations FAIL + FAIL Macro Operations 49 4.1.1 Macro Bodies @@ -2542,7 +2686,7 @@ they will be recognized as arguments. Appearances of this character will be deleted from the macro body whenever they appear. This allows a macro argument to be part of an identifier, instead of an entire identifier. See the example at the end of section 4.1.6, -page 50. +page 53. 4.1.3 Arguments in Macro Definitions @@ -2568,7 +2712,7 @@ appears: then, since FUDLYB is an identifier and is different from FUDLY, it will not be recognized as an argument. To concatenate the "B" above - FAIL Macro Operations 47 + 50 Macro Operations FAIL with an actual argument, use a concatenation character. For example, @@ -2613,15 +2757,15 @@ that appear in a comment or in the text argument of an ASCII statement will not be expanded. Also, there are some other cases where a macro name will not be expanded: - the macro name in DEFINE, - the formal argument list in DEFINE and FOR, + the macro name in DEFINE and GDEFINE, + the formal argument list in DEFINE, GDEFINE and FOR, the symbol name in OPDEF, PURGE, SUPPRESS and RADIX50, the tested symbol in a symbol IF, the block name in BEGIN and BEND, the location counter name in USE and SET, - the universal symbol table name in SEARCH, and - the program name in TITLE and UNIVERSAL. - 48 Macro Operations FAIL + the program name in TITLE and UNIVERSAL, and + in any file name scan, e.g., .LOAD, .INSERT, etc. + FAIL Macro Operations 51 Macros may be used recursively. That is, a macro body may contain a @@ -2631,7 +2775,9 @@ an error message and termination of the assembly. If this occurs, the /P switch should be used in the command string. Every occurrence of /P in the command string causes the assembler to allocate an extra 200 (octal) words of memory for the macro push-down list (see -appendix A, page 56). +appendix A, page 60). In similar circumstances, a main push-down +list overflow may occur. In this case, the /E switch in the command +string may be used to allocate a larger main push-down list. 4.1.5 Arguments in Macro Calls @@ -2661,7 +2807,7 @@ Two commas in a row with nothing in between signify a null argument, i.e., an argument that consists of no characters. If more arguments are called for than are supplied, the last ones are considered to be null. If more arguments are supplied than are called for, the extras -are ignored by the macro processor; see section 4.1.6, page 49. +are ignored by the macro processor; see section 4.1.6, page 52. Unless the first character of an argument is "{", the argument terminates at the first comma, right parenthesis, right brace (or @@ -2671,11 +2817,11 @@ the matching braces are taken as the argument. This allows the argument to contain commas, parentheses, etc. which would not be legal otherwise, but the braces must be kept balanced. In addition, all characters between the "}" that closes the argument and the next + 52 Macro Operations FAIL + + argument terminator are ignored. This allows the continuation of a list of arguments from one line to the next (i.e., enclose the last - FAIL Macro Operations 49 - - argument on the line in braces and put the comma for it at the start of the next line). @@ -2688,6 +2834,14 @@ string of digits is taken as the argument. All characters from the end of the expression to the next argument termination character (comma, etc.) are ignored. +After a .DIRECT pseudo op has appeared with the .XTABM argument (see +section 3.5.7, page 44) then in a macro call where the macro argument +is not enclosed in braces, the leading and trailing blanks and tabs +adjacent to the argument in the call will be omitted from the actual +argument passed to the macro. The argument .ITABM to .DIRECT +restores FAIL to the normal treatment of tabs and spaces in +arguments. + 4.1.6 How Much is Eaten by a Macro Call @@ -2715,6 +2869,9 @@ name and any following spaces (or tabs) are eaten. If the macro was defined as having arguments and the first non-blank character after the macro name is a left parenthesis, then everything from the macro name to the right parenthesis which closes the argument list, + FAIL Macro Operations 53 + + inclusive, is eaten. If the macro was defined as having arguments and the first non-blank character is not a left parenthesis, then everything from the macro name to the comma or carriage return which @@ -2725,8 +2882,6 @@ If parentheses are not used and the macro was defined as having arguments and enough or too many arguments are supplied, then everything from the macro name to the comma (or carriage return) which terminates the last argument used will be eaten. - 50 Macro Operations FAIL - Example: @@ -2744,6 +2899,9 @@ example of an information carrying macro. The macro BAR is expanded (by being redefined) every time that ADD1 is used. The \BAR in the definition of ADD1 is necessary to cause the evaluation of BAR as an expression (which causes a macro expansion to occur). + 54 Macro Operations FAIL + + Example: @@ -2771,7 +2929,8 @@ C>}} ; X1 ; X2 ; X3 - FAIL Macro Operations 51 + + 4.2 FOR @@ -2782,7 +2941,8 @@ consists of the word FOR, an optional concatenation character, a range specifier, and a FOR-body. The FOR statement expands into the text of its FOR-body, possibly with substitutions, repeated once for each element in the range of the FOR. FOR replaces the IRP and IRPC -pseudo-ops found in MACRO-10. +pseudo-ops found in MACRO-10. FOR is a pseudo-op; it is recognized +only where FAIL allows opcodes to appear. The optional concatenation character is specified by following the word FOR with an at-sign followed immediately by the concatenation @@ -2790,6 +2950,8 @@ character. If a FOR is used inside a macro and concatenation of FOR arguments is desired, it is necessary to have a concatenation character specified for the FOR which is different from the one for the macro. + FAIL Macro Operations 55 + The range specifier is different for each type of FOR and will be explained below. The FOR statement may have one or two formal @@ -2806,16 +2968,13 @@ The range specification consists of one or two formal argument identifiers, followed by either the identifier "IN" or the containment character (), followed by an argument list. The argument list has the same syntax as a macro call argument list (see -section 4.1.5, page 48), but the list must be in parentheses. The +section 4.1.5, page 51), but the list must be in parentheses. The effect is that the body of the FOR is assembled once for each element in the argument list, and that element is substituted for the first (or only) formal argument each time. The second formal argument, if present, will have the remainder of the argument list (starting with the element following the one currently substituted for the first argument) substituted for it. - 52 Macro Operations FAIL - - Examples: @@ -2843,6 +3002,9 @@ The range specifier consists of one or two formal arguments followed by either the letter "E" or the character epsilon (), followed by a string of characters enclosed in braces. The only restriction on the string of characters is that the braces must balance. The body of + 56 Macro Operations FAIL + + the FOR is assembled once for each character in the list, with that character substituted for the first formal argument each time and the rest of the string substituted for the second formal argument, if @@ -2864,7 +3026,7 @@ FOR @$ QRN E {AZ1Q5} ZORPA_0 } ZORP1_0 ZORPQ_0 ZORP5_0 - FAIL Macro Operations 53 + 4.2.3 Arithmetic FOR @@ -2890,6 +3052,9 @@ converted to ascii digits in the current radix, and that string is substituted for the formal argument(s) (both arguments have the same value). Note that all expressions must be defined, available, and absolute. + FAIL Macro Operations 57 + + Examples (assume RADIX =8): @@ -2907,14 +3072,17 @@ FOR @$ ZOT_11,4,-1 ZOTQ11 : 11 +3 ZOTQ6 : 6 +3 ZOTQ5 : 5 +3 ZOTQ4 : 4 +3 - 54 Macro Operations FAIL + + + 4.3 REPEAT The REPEAT statement is included for compatibility with MACRO-10. -The format is +REPEAT is a pseudo-op; it is recognized only where FAIL allows +opcodes to appear. The format is REPEAT exp,{text} @@ -2931,8 +3099,7 @@ will expand to: 0 0 0 - - + 58 Macro Operations FAIL 4.4 Conditional Assembly @@ -2960,9 +3127,6 @@ The expression exp is evaluated. If its value bears the indicated relation to zero, the text is assembled once; otherwise it is not assembled. The text, which is called the IF-body, is like a macro body: braces must balance. - FAIL Macro Operations 55 - - Examples: @@ -2985,6 +3149,7 @@ balance. For IFIDN, if the two strings text 1 and text 2 are identical in each and every character, the string text 3 will be assembled, otherwise it will not. For IFDIF, if text 1 and text 2 are different, text 3 will be assembled, otherwise it will not. + FAIL Macro Operations 59 4.4.3 Symbol IFs @@ -3012,8 +3177,9 @@ block, or defined in an outer block with a down-arrow. IFOP is true if the symbol is defined as an opcode. IFMAC is true if the symbol is defined as a macro (including the IFs, -IOWD, and the predefined symbols .FNAM1, .FNAM2, "$." and "."). - 56 Appendix A FAIL +IOWD, and the predefined symbols .CPU., .FNAM1, .FNAM2, .INSERT, +"$.", and "."). + 60 Appendix A FAIL Command Language @@ -3054,7 +3220,7 @@ Device switches (must follow the name of the affected file): Z zero DECtape directory Assembler switches (may appear after any file name): - FAIL Appendix A 57 + FAIL Appendix A 61 @@ -3065,6 +3231,7 @@ Assembler switches (may appear after any file name): K turn off cross-reference listing output L don't list literal values with text N don't list assembly errors on TTY + O omit binary universal (FUN) file output R pause after each assembly error S list symbol table U underline macro expansions on listing @@ -3078,6 +3245,12 @@ will be expanded by 200 words for every occurrence of the P switch in the command string. A numeric argument may given with the P switch to specify a multiple of 200 words by which to expand the PDL. +The E switch is used to allocate extra space for the main push-down +list. The main PDL will be expanded by 200 words for every +occurrence of the E switch in the command string. A numeric argument +may given with the E switch to specify a multiple of 200 words by +which to expand the PDL. + Sometimes, assembly parameters are specified from the user terminal, rather than being included in the source program. Suppose the line SEGSW__1 needs to be included in the assembly of the file BAZ. The @@ -3099,19 +3272,19 @@ SEGSW__1 The file name F is needed to satisfy the RPG syntax; the device name DSK: is needed to switch the default input device to DSK. + 62 Appendix A FAIL + If the command FILE@ is seen, the named file will be read and interpreted as containing a series of commands of the usual form. The command FILE! causes FAIL to exit and run the named program. The default device for this command is SYS:. - 58 Appendix A FAIL - -To provide some compatability with RPG-style commands, FAIL accepts +To provide some compatibility with RPG-style commands, FAIL accepts "=" for "_" in the command line. Also, either "+" or ";" may be used instead of "," to separate source-file names. - FAIL Appendix B 59 + FAIL Appendix B 63 Relocatable and Undefined Values @@ -3150,7 +3323,7 @@ require the value to be immediately known, including some situations where the relocation factor mechanism is legal. The legality of undefined or relocatable values is indicated in the discussion of each possible usage. - 60 Appendix C FAIL + 64 Appendix C FAIL Predefined Opcodes @@ -3179,67 +3352,79 @@ Note that there are sometimes subtle differences between DEC system UUOs and Stanford UUOs; consult the appropriate reference manual. Also note that some DEC mnemonics conflict with those used at Stanford. - FAIL Appendix C 61 + FAIL Appendix C 65 -$. Predefined page 17 APRENB CALLI 16 UUO -. Predefined page 17 ARRAY Pseudo-Op page 40 -.FNAM1 Predefined page 18 ASCID Pseudo-Op page 39 -.FNAM2 Predefined page 18 ASCII Pseudo-Op page 39 -.INSERT Pseudo-Op page 42 ASCIZ Pseudo-Op page 39 -.LIBRARY Pseudo-Op page 34 ASH 240000,,0 -.LOAD Pseudo-Op page 34 ASHC 244000,,0 - ASUPPRESS Pseudo-Op page 35 -ACCTIM CALLI 400101 SAIL ATTSEG CALLI 400016 SAIL -ACTCHR CALLI 400105 SAIL -ADD 270000,,0 BEEP CALLI 400111 SAIL -ADDB 273000,,0 BEGIN Pseudo-Op page 32 -ADDI 271000,,0 BEND Pseudo-Op page 32 -ADDM 272000,,0 BLKI 700000,,0 I/O -ADSMAP CALLI 400110 SAIL BLKO 700100,,0 I/O -AND 404000,,0 BLOCK Pseudo-Op page 40 -ANDB 407000,,0 BLT 251000,,0 -ANDCA 410000,,0 BUFLEN CALLI 400042 SAIL -ANDCAB 413000,,0 BYTE Pseudo-Op page 37 -ANDCAI 411000,,0 -ANDCAM 412000,,0 CAI 300000,,0 -ANDCB 440000,,0 CAIA 304000,,0 -ANDCBB 443000,,0 CAIE 302000,,0 -ANDCBI 441000,,0 CAIG 307000,,0 -ANDCBM 442000,,0 CAIGE 305000,,0 -ANDCM 420000,,0 CAIL 301000,,0 -ANDCMB 423000,,0 CAILE 303000,,0 -ANDCMI 421000,,0 CAIN 306000,,0 -ANDCMM 422000,,0 CALL 040000,,0 UUO -ANDI 405000,,0 CALLI 047000,,0 UUO -ANDM 406000,,0 CALLIT CALLI 400074 SAIL -AOBJN 253000,,0 CAM 310000,,0 -AOBJP 252000,,0 CAMA 314000,,0 -AOJ 340000,,0 CAME 312000,,0 -AOJA 344000,,0 CAMG 317000,,0 -AOJE 342000,,0 CAMGE 315000,,0 -AOJG 347000,,0 CAML 311000,,0 -AOJGE 345000,,0 CAMLE 313000,,0 -AOJL 341000,,0 CAMN 316000,,0 -AOJLE 343000,,0 CHNSTS 716000,,0 SAIL -AOJN 346000,,0 CLKINT 717000,,0 SAIL -AOS 350000,,0 CLOSE 070000,,0 UUO -AOSA 354000,,0 CLRBFI 051440,,0 UUO -AOSE 352000,,0 CLRBFO 051500,,0 UUO -AOSG 357000,,0 COMMENT Pseudo-Op page 42 -AOSGE 355000,,0 CONI 700240,,0 I/O -AOSL 351000,,0 CONO 700200,,0 I/O -AOSLE 353000,,0 CONS 257000,,0 SAIL -AOSN 356000,,0 CONSO 700340,,0 I/O - 62 Appendix C FAIL +$. Predefined page 18 AOJL 341000,,0 +. Predefined page 18 AOJLE 343000,,0 +.ASSIGN Pseudo-op page 45 AOJN 346000,,0 +.COMMON Pseudo-op page 45 AOS 350000,,0 +.CPU. Predefined page 18 AOSA 354000,,0 +.DIRECT Pseudo-op page 44 AOSE 352000,,0 +.FATAL Pseudo-op page 44 AOSG 357000,,0 +.FNAM1 Predefined page 18 AOSGE 355000,,0 +.FNAM2 Predefined page 18 AOSL 351000,,0 +.INSERT Pseudo-Op page 43 AOSLE 353000,,0 +.LIBRARY Pseudo-Op page 34 AOSN 356000,,0 +.LINK Pseudo-Op page 34 APRENB CALLI 16 UUO +.LNKEND Pseudo-Op page 34 ARRAY Pseudo-Op page 41 +.LOAD Pseudo-Op page 34 ASCID Pseudo-Op page 39 +.ORG Pseudo-Op page 27 ASCII Pseudo-Op page 39 +.REQUEST Pseudo-Op page 34 ASCIZ Pseudo-Op page 39 +.REQUIRE Pseudo-Op page 34 ASH 240000,,0 +.TEXT Pseudo-Op page 45 ASHC 244000,,0 + ASSIGN Pseudo-Op page 45 +ACCTIM CALLI 400101 SAIL ASUPPRESS Pseudo-Op page 36 +ACTCHR CALLI 400105 SAIL ATTSEG CALLI 400016 SAIL +ADD 270000,,0 +ADDB 273000,,0 BEEP CALLI 400111 SAIL +ADDI 271000,,0 BEGIN Pseudo-Op page 32 +ADDM 272000,,0 BEND Pseudo-Op page 32 +ADSMAP CALLI 400110 SAIL BLKI 700000,,0 I/O +AND 404000,,0 BLKO 700100,,0 I/O +ANDB 407000,,0 BLOCK Pseudo-Op page 41 +ANDCA 410000,,0 BLT 251000,,0 +ANDCAB 413000,,0 BUFLEN CALLI 400042 SAIL +ANDCAI 411000,,0 BYTE Pseudo-Op page 38 +ANDCAM 412000,,0 +ANDCB 440000,,0 CAI 300000,,0 +ANDCBB 443000,,0 CAIA 304000,,0 +ANDCBI 441000,,0 CAIE 302000,,0 +ANDCBM 442000,,0 CAIG 307000,,0 +ANDCM 420000,,0 CAIGE 305000,,0 +ANDCMB 423000,,0 CAIL 301000,,0 +ANDCMI 421000,,0 CAILE 303000,,0 +ANDCMM 422000,,0 CAIN 306000,,0 +ANDI 405000,,0 CALL 040000,,0 UUO +ANDM 406000,,0 CALLI 047000,,0 UUO +AOBJN 253000,,0 CALLIT CALLI 400074 SAIL +AOBJP 252000,,0 CAM 310000,,0 +AOJ 340000,,0 CAMA 314000,,0 +AOJA 344000,,0 CAME 312000,,0 +AOJE 342000,,0 CAMG 317000,,0 +AOJG 347000,,0 CAMGE 315000,,0 +AOJGE 345000,,0 CAML 311000,,0 + 66 Appendix C FAIL +CAMLE 313000,,0 DMOVN 121000,,0 KI +CAMN 316000,,0 DMOVNM 125000,,0 KI +CHNSTS 716000,,0 SAIL DPB 137000,,0 +CLKINT 717000,,0 SAIL DPYCLR 701000,,0 SAIL +CLOSE 070000,,0 UUO DPYOUT 703000,,0 SAIL +CLRBFI 051440,,0 UUO DPYPOS 702100,,0 SAIL +CLRBFO 051500,,0 UUO DPYSIZ 702140,,0 SAIL +COMMENT Pseudo-Op page 43 DSKPPN CALLI 400071 SAIL +CONI 700240,,0 I/O DSKTIM CALLI 400072 SAIL +CONO 700200,,0 I/O +CONS 257000,,0 SAIL EIOTM CALLI 400005 SAIL +CONSO 700340,,0 I/O END Pseudo-Op page 42 CONSZ 700300,,0 I/O ENTER 077000,,0 UUO CORE CALLI 11 UUO ENTRY Pseudo-Op page 33 CORE2 CALLI 400015 SAIL EQV 444000,,0 -CREF Pseudo-Op page 44 EQVB 447000,,0 +CREF Pseudo-Op page 47 EQVB 447000,,0 CTLV CALLI 400001 SAIL EQVI 445000,,0 EQVM 446000,,0 DATAI 700040,,0 I/O EXCH 250000,,0 @@ -3253,8 +3438,8 @@ DDTOUT CALLI 3 UUO FADM 142000,,0 DDTRL CALLI 7 UUO FADR 144000,,0 DDUPG 715140,,0 SAIL FADRB 147000,,0 DEBREAK CALLI 400035 SAIL FADRI 145000,,0 -DEC Pseudo-Op page 37 FADRL 145000,,0 -DEFINE Pseudo-Op page 45 FADRM 146000,,0 +DEC Pseudo-Op page 38 FADRL 145000,,0 +DEFINE Pseudo-Op page 48 FADRM 146000,,0 DEPHASE Pseudo-Op page 29 FBREAD 706000,,0 SAIL DETSEG CALLI 400017 SAIL FBWAIT CALLI 400057 SAIL DEVCHR CALLI 4 UUO FBWRT 707000,,0 SAIL @@ -3273,22 +3458,22 @@ DIVI 235000,,0 FIXR 126000,,0 KI DIVM 236000,,0 FLTR 127000,,0 KI DMOVE 120000,,0 KI FMP 160000,,0 DMOVEM 124000,,0 KI FMPB 163000,,0 -DMOVN 121000,,0 KI FMPL 161000,,0 -DMOVNM 125000,,0 KI FMPM 162000,,0 -DPB 137000,,0 FMPR 164000,,0 -DPYCLR 701000,,0 SAIL FMPRB 167000,,0 -DPYOUT 703000,,0 SAIL FMPRI 165000,,0 -DPYPOS 702100,,0 SAIL FMPRL 165000,,0 -DPYSIZ 702140,,0 SAIL FMPRM 166000,,0 -DSKPPN CALLI 400071 SAIL FOR Pseudo-Op page 51 -DSKTIM CALLI 400072 SAIL FSB 150000,,0 - FSBB 153000,,0 -EIOTM CALLI 400005 SAIL FSBL 151000,,0 -END Pseudo-Op page 41 FSBM 152000,,0 - FAIL Appendix C 63 + FAIL Appendix C 67 +FMPL 161000,,0 HLLZM 512000,,0 +FMPM 162000,,0 HLLZS 513000,,0 +FMPR 164000,,0 HLR 544000,,0 +FMPRB 167000,,0 HLRE 574000,,0 +FMPRI 165000,,0 HLREI 575000,,0 +FMPRL 165000,,0 HLREM 576000,,0 +FMPRM 166000,,0 HLRES 577000,,0 +FOR Pseudo-Op page 54 HLRI 545000,,0 +FSB 150000,,0 HLRM 546000,,0 +FSBB 153000,,0 HLRO 564000,,0 +FSBL 151000,,0 HLROI 565000,,0 +FSBM 152000,,0 HLROM 566000,,0 FSBR 154000,,0 HLROS 567000,,0 FSBRB 157000,,0 HLRS 547000,,0 FSBRI 155000,,0 HLRZ 554000,,0 @@ -3296,7 +3481,7 @@ FSBRL 155000,,0 HLRZI 555000,,0 FSBRM 156000,,0 HLRZM 556000,,0 FSC 132000,,0 HLRZS 557000,,0 HRL 504000,,0 -GDEFINE Pseudo-Op page 45 HRLE 534000,,0 +GDEFINE Pseudo-Op page 48 HRLE 534000,,0 GDPTIM CALLI 400065 SAIL HRLEI 535000,,0 GETCHR CALLI 6 UUO HRLEM 536000,,0 GETLIN 051300,,0 SAIL HRLES 537000,,0 @@ -3326,35 +3511,35 @@ HLLOS 523000,,0 HRRS 543000,,0 HLLS 503000,,0 HRRZ 550000,,0 HLLZ 510000,,0 HRRZI 551000,,0 HLLZI 511000,,0 HRRZM 552000,,0 -HLLZM 512000,,0 HRRZS 553000,,0 -HLLZS 513000,,0 -HLR 544000,,0 IBP 133000,,0 -HLRE 574000,,0 IDIV 230000,,0 -HLREI 575000,,0 IDIVB 233000,,0 -HLREM 576000,,0 IDIVI 231000,,0 -HLRES 577000,,0 IDIVM 232000,,0 -HLRI 545000,,0 IDPB 136000,,0 -HLRM 546000,,0 IENBW CALLI 400045 SAIL -HLRO 564000,,0 IFAVL Conditional page 55 -HLROI 565000,,0 IFDEF Conditional page 55 -HLROM 566000,,0 IFDIF Conditional page 55 - 64 Appendix C FAIL + 68 Appendix C FAIL -IFE Conditional page 54 IOPUSH 724000,,0 SAIL -IFG Conditional page 54 IOR 434000,,0 -IFGE Conditional page 54 IORB 437000,,0 -IFIDN Conditional page 55 IORI 435000,,0 -IFL Conditional page 54 IORM 436000,,0 -IFLE Conditional page 54 IOWD Pseudo-Op page 38 -IFMAC Conditional page 55 IWAIT CALLI 400040 SAIL -IFN Conditional page 54 IWKMSK 723100,,0 SAIL -IFNAVL Conditional page 55 -IFNDEF Conditional page 55 JBTSTS CALLI 400013 SAIL -IFNMAC Conditional page 55 JCRY 255300,,0 -IFNOP Conditional page 55 JCRY0 255200,,0 -IFOP Conditional page 55 JCRY1 255100,,0 +HRRZS 553000,,0 INTERNAL Pseudo-Op page 33 + INTGEN CALLI 400033 SAIL +IBP 133000,,0 INTIIP CALLI 400031 SAIL +IDIV 230000,,0 INTIPI 723200,,0 SAIL +IDIVB 233000,,0 INTIRQ CALLI 400032 SAIL +IDIVI 231000,,0 INTJEN 723000,,0 SAIL +IDIVM 232000,,0 INTMSK 720000,,0 SAIL +IDPB 136000,,0 INTORM CALLI 400026 SAIL +IENBW CALLI 400045 SAIL INTUUO 723000,,0 SAIL +IFAVL Conditional page 59 INWAIT 051600,,0 SAIL +IFDEF Conditional page 59 IOPDL 726000,,0 SAIL +IFDIF Conditional page 58 IOPOP 725000,,0 SAIL +IFE Conditional page 58 IOPUSH 724000,,0 SAIL +IFG Conditional page 58 IOR 434000,,0 +IFGE Conditional page 58 IORB 437000,,0 +IFIDN Conditional page 58 IORI 435000,,0 +IFL Conditional page 58 IORM 436000,,0 +IFLE Conditional page 58 IOWD Pseudo-Op page 39 +IFMAC Conditional page 59 IWAIT CALLI 400040 SAIL +IFN Conditional page 58 IWKMSK 723100,,0 SAIL +IFNAVL Conditional page 59 +IFNDEF Conditional page 59 JBTSTS CALLI 400013 SAIL +IFNMAC Conditional page 59 JCRY 255300,,0 +IFNOP Conditional page 59 JCRY0 255200,,0 +IFOP Conditional page 59 JCRY1 255100,,0 ILDB 134000,,0 JEN 254500,,0 IMSKCL 722000,,0 SAIL JFCL 255000,,0 IMSKCR 723240,,0 SAIL JFFO 243000,,0 @@ -3376,25 +3561,25 @@ INSKIP 051540,,0 SAIL JUMPL 321000,,0 INTACM CALLI 400027 SAIL JUMPLE 323000,,0 INTDEJ 723000,,0 SAIL JUMPN 326000,,0 INTDMP 723140,,0 SAIL -INTEGER Pseudo-Op page 40 LALL Pseudo-Op page 43 +INTEGER Pseudo-Op page 41 LALL Pseudo-Op page 46 INTENB CALLI 400025 SAIL LDB 135000,,0 INTENS CALLI 400030 SAIL LEYPOS 702300,,0 SAIL -INTERNAL Pseudo-Op page 33 LINK Pseudo-Op page 34 -INTGEN CALLI 400033 SAIL LINKEND Pseudo-Op page 34 -INTIIP CALLI 400031 SAIL LINKUP CALLI 400023 SAIL -INTIPI 723200,,0 SAIL LIOTM CALLI 400006 SAIL -INTIRQ CALLI 400032 SAIL LIST Pseudo-Op page 43 -INTJEN 723000,,0 SAIL LIT Pseudo-Op page 31 -INTMSK 720000,,0 SAIL LOC Pseudo-Op page 27 -INTORM CALLI 400026 SAIL LOCK CALLI 400076 SAIL -INTUUO 723000,,0 SAIL LOGIN CALLI 15 UUO -INWAIT 051600,,0 SAIL LOGOUT CALLI 17 UUO -IOPDL 726000,,0 SAIL LOOKUP 076000,,0 UUO -IOPOP 725000,,0 SAIL LSH 242000,,0 - FAIL Appendix C 65 + FAIL Appendix C 69 +LINK Pseudo-Op page 34 ORCAB 457000,,0 +LINKEND Pseudo-Op page 34 ORCAI 455000,,0 +LINKUP CALLI 400023 SAIL ORCAM 456000,,0 +LIOTM CALLI 400006 SAIL ORCB 470000,,0 +LIST Pseudo-Op page 46 ORCBB 473000,,0 +LIT Pseudo-Op page 31 ORCBI 471000,,0 +LOC Pseudo-Op page 27 ORCBM 472000,,0 +LOCK CALLI 400076 SAIL ORCM 464000,,0 +LOGIN CALLI 15 UUO ORCMB 467000,,0 +LOGOUT CALLI 17 UUO ORCMI 465000,,0 +LOOKUP 076000,,0 UUO ORCMM 466000,,0 +LSH 242000,,0 ORG Pseudo-Op page 27 LSHC 246000,,0 ORI 435000,,0 ORM 436000,,0 MAIL 710000,,0 SAIL OUT 057000,,0 UUO @@ -3404,7 +3589,7 @@ MOVEI 201000,,0 OUTFIV 051740,,0 SAIL MOVEM 202000,,0 OUTPUT 067000,,0 UUO MOVES 203000,,0 OUTSTR 051140,,0 UUO MOVM 214000,,0 -MOVMI 215000,,0 PAGE Pseudo-Op page 44 +MOVMI 215000,,0 PAGE Pseudo-Op page 47 MOVMM 216000,,0 PEEK CALLI 33 UUO MOVMS 217000,,0 PGACT 715040,,0 SAIL MOVN 210000,,0 PGCLR 715100,,0 SAIL @@ -3423,45 +3608,45 @@ MULI 225000,,0 PPACT 702040,,0 SAIL MULM 226000,,0 PPHLD 702340,,0 SAIL PPINFO 702240,,0 SAIL NAMEIN CALLI 400043 SAIL PPIOT 702000,,0 SAIL -NOLIT Pseudo-Op page 44 PPREL 702200,,0 SAIL -NOSYM Pseudo-Op page 44 PPSEL 702000,,0 SAIL +NOLIT Pseudo-Op page 46 PPREL 702200,,0 SAIL +NOSYM Pseudo-Op page 47 PPSEL 702000,,0 SAIL PPSPY CALLI 400107 SAIL -OCT Pseudo-Op page 37 PRGEND Pseudo-Op page 41 -OPDEF Pseudo-Op page 32 PRINTS Pseudo-Op page 44 -OPEN 050000,,0 UUO PRINTX Pseudo-Op page 44 +OCT Pseudo-Op page 38 PRGEND Pseudo-Op page 42 +OPDEF Pseudo-Op page 32 PRINTS Pseudo-Op page 47 +OPEN 050000,,0 UUO PRINTX Pseudo-Op page 47 OR 434000,,0 PTGETL 711540,,0 SAIL ORB 437000,,0 PTIFRE 711100,,0 SAIL ORCA 454000,,0 PTJOBX 711700,,0 SAIL -ORCAB 457000,,0 PTLOAD 711640,,0 SAIL -ORCAI 455000,,0 PTOCNT 711140,,0 SAIL -ORCAM 456000,,0 PTRD1S 711200,,0 SAIL -ORCB 470000,,0 PTRD1W 711240,,0 SAIL -ORCBB 473000,,0 PTRDS 711400,,0 SAIL -ORCBI 471000,,0 PTSETL 711600,,0 SAIL -ORCBM 472000,,0 PTWR1S 711300,,0 SAIL -ORCM 464000,,0 PTWR1W 711340,,0 SAIL -ORCMB 467000,,0 PTWRS7 711440,,0 SAIL -ORCMI 465000,,0 PTWRS9 711500,,0 SAIL -ORCMM 466000,,0 PTYGET 711000,,0 SAIL -ORG Pseudo-Op page 27 PTYREL 711040,,0 SAIL - 66 Appendix C FAIL + 70 Appendix C FAIL +PTLOAD 711640,,0 SAIL SETCAM 452000,,0 +PTOCNT 711140,,0 SAIL SETCM 460000,,0 +PTRD1S 711200,,0 SAIL SETCMB 463000,,0 +PTRD1W 711240,,0 SAIL SETCMI 461000,,0 +PTRDS 711400,,0 SAIL SETCMM 462000,,0 +PTSETL 711600,,0 SAIL SETCRD CALLI 400073 SAIL +PTWR1S 711300,,0 SAIL SETDDT CALLI 2 UUO +PTWR1W 711340,,0 SAIL SETLIN 051340,,0 SAIL +PTWRS7 711440,,0 SAIL SETM 414000,,0 +PTWRS9 711500,,0 SAIL SETMB 417000,,0 +PTYGET 711000,,0 SAIL SETMI 415000,,0 +PTYREL 711040,,0 SAIL SETMM 416000,,0 PTYUUO 711000,,0 SAIL SETNAM CALLI 43 UUO PURGE Pseudo-Op page 35 SETNM2 CALLI 400036 SAIL PUSH 261000,,0 SETO 474000,,0 PUSHJ 260000,,0 SETOB 477000,,0 PZE 000000,,0 SETOI 475000,,0 SETOM 476000,,0 -RADIX Pseudo-Op page 42 SETPOV CALLI 32 UUO -RADIX50 Pseudo-Op page 39 SETPR2 CALLI 400052 SAIL +RADIX Pseudo-Op page 43 SETPOV CALLI 32 UUO +RADIX50 Pseudo-Op page 40 SETPR2 CALLI 400052 SAIL REASSI CALLI 21 UUO SETPRO CALLI 400020 SAIL RELEAS 071000,,0 UUO SETPRV CALLI 400066 SAIL RELOC Pseudo-Op page 27 SETSTS 060000,,0 UUO REMAP CALLI 37 UUO SETUWP CALLI 36 UUO RENAME 055000,,0 UUO SETZ 400000,,0 -REPEAT Pseudo-Op page 54 SETZB 403000,,0 +REPEAT Pseudo-Op page 57 SETZB 403000,,0 RESCAN 051400,,0 UUO SETZI 401000,,0 RESET CALLI 0 UUO SETZM 402000,,0 RLEVEL CALLI 400054 SAIL SIXBIT Pseudo-Op page 39 @@ -3471,7 +3656,7 @@ RUN CALLI 35 UUO SKIPE 332000,,0 RUNMSK CALLI 400046 SAIL SKIPG 337000,,0 RUNTIM CALLI 27 UUO SKIPGE 335000,,0 SKIPL 331000,,0 -SEARCH Pseudo-Op page 36 SKIPLE 333000,,0 +SEARCH Pseudo-Op page 37 SKIPLE 333000,,0 SEGNAM CALLI 400037 SAIL SKIPN 336000,,0 SEGNUM CALLI 400021 SAIL SKPHIM 710200,,0 SAIL SEGSIZ CALLI 400022 SAIL SKPME 710140,,0 SAIL @@ -3485,22 +3670,22 @@ SETAM 426000,,0 SOJA 364000,,0 SETCA 450000,,0 SOJE 362000,,0 SETCAB 453000,,0 SOJG 367000,,0 SETCAI 451000,,0 SOJGE 365000,,0 -SETCAM 452000,,0 SOJL 361000,,0 -SETCM 460000,,0 SOJLE 363000,,0 -SETCMB 463000,,0 SOJN 366000,,0 -SETCMI 461000,,0 SOS 370000,,0 -SETCMM 462000,,0 SOSA 374000,,0 -SETCRD CALLI 400073 SAIL SOSE 372000,,0 -SETDDT CALLI 2 UUO SOSG 377000,,0 -SETLIN 051340,,0 SAIL SOSGE 375000,,0 -SETM 414000,,0 SOSL 371000,,0 -SETMB 417000,,0 SOSLE 373000,,0 -SETMI 415000,,0 SOSN 376000,,0 -SETMM 416000,,0 SPCWAR 043000,,0 SAIL - FAIL Appendix C 67 + FAIL Appendix C 71 +SOJL 361000,,0 TLNA 605000,,0 +SOJLE 363000,,0 TLNE 603000,,0 +SOJN 366000,,0 TLNN 607000,,0 +SOS 370000,,0 TLO 661000,,0 +SOSA 374000,,0 TLOA 665000,,0 +SOSE 372000,,0 TLOE 663000,,0 +SOSG 377000,,0 TLON 667000,,0 +SOSGE 375000,,0 TLZ 621000,,0 +SOSL 371000,,0 TLZA 625000,,0 +SOSLE 373000,,0 TLZE 623000,,0 +SOSN 376000,,0 TLZN 627000,,0 +SPCWAR 043000,,0 SAIL TMPCOR CALLI 44 UUO SPCWGO CALLI 400003 SAIL TMPCRD CALLI 400103 SAIL SPWBUT CALLI 400000 SAIL TRC 640000,,0 SRCV 710100,,0 SAIL TRCA 644000,,0 @@ -3510,8 +3695,8 @@ SUB 274000,,0 TRN 600000,,0 SUBB 277000,,0 TRNA 604000,,0 SUBI 275000,,0 TRNE 602000,,0 SUBM 276000,,0 TRNN 606000,,0 -SUBTTL Pseudo-Op page 43 TRO 660000,,0 -SUPPRESS Pseudo-Op page 35 TROA 664000,,0 +SUBTTL Pseudo-Op page 46 TRO 660000,,0 +SUPPRESS Pseudo-Op page 36 TROA 664000,,0 SWAP CALLI 400004 SAIL TROE 662000,,0 SWITCH CALLI 20 UUO TRON 666000,,0 TRZ 620000,,0 @@ -3532,28 +3717,28 @@ TDZA 634000,,0 TSOE 673000,,0 TDZE 632000,,0 TSON 677000,,0 TDZN 636000,,0 TSZ 631000,,0 TIMER CALLI 22 UUO TSZA 635000,,0 -TITLE Pseudo-Op page 41 TSZE 633000,,0 +TITLE Pseudo-Op page 42 TSZE 633000,,0 TLC 641000,,0 TSZN 637000,,0 TLCA 645000,,0 TTCALL 051000,,0 UUO TLCE 643000,,0 TTREAD 051700,,0 SAIL TLCN 647000,,0 TTYIOS CALLI 400014 SAIL TLN 601000,,0 TTYJOB CALLI 400113 SAIL -TLNA 605000,,0 TTYMES CALLI 400047 SAIL -TLNE 603000,,0 TTYSKP CALLI 400116 SAIL -TLNN 607000,,0 TTYUUO 051000,,0 UUO -TLO 661000,,0 TWOSEG Pseudo-Op page 29 -TLOA 665000,,0 -TLOE 663000,,0 UFA 130000,,0 -TLON 667000,,0 UFBCLR CALLI 400012 SAIL -TLZ 621000,,0 UFBERR CALLI 400060 SAIL -TLZA 625000,,0 UFBGET CALLI 400010 SAIL -TLZE 623000,,0 UFBGIV CALLI 400011 SAIL -TLZN 627000,,0 UFBPHY CALLI 400055 SAIL -TMPCOR CALLI 44 UUO UFBSKP CALLI 400056 SAIL - 68 Appendix C FAIL + 72 Appendix C FAIL +TTYMES CALLI 400047 SAIL +TTYSKP CALLI 400116 SAIL +TTYUUO 051000,,0 UUO +TWOSEG Pseudo-Op page 29 + +UFA 130000,,0 +UFBCLR CALLI 400012 SAIL +UFBERR CALLI 400060 SAIL +UFBGET CALLI 400010 SAIL +UFBGIV CALLI 400011 SAIL +UFBPHY CALLI 400055 SAIL +UFBSKP CALLI 400056 SAIL UGETF 073000,,0 UUO UINBF 704000,,0 SAIL UNIVERSAL Pseudo-Op page 36 @@ -3579,19 +3764,19 @@ WAKEME CALLI 400061 SAIL WHO CALLI 400112 SAIL WRCV 710040,,0 SAIL -XALL Pseudo-Op page 43 -XCREF Pseudo-Op page 44 +XALL Pseudo-Op page 46 +XCREF Pseudo-Op page 47 XCT 256000,,0 XGPUUO CALLI 400075 SAIL -XLIST Pseudo-Op page 43 -XLIST1 Pseudo-Op page 43 +XLIST Pseudo-Op page 46 +XLIST1 Pseudo-Op page 46 XOR 430000,,0 XORB 433000,,0 XORI 431000,,0 XORM 432000,,0 XPUNGE Pseudo-Op page 35 -XWD Pseudo-Op page 38 - FAIL Appendix D 69 +XWD Pseudo-Op page 39 + FAIL Appendix D 73 Stanford Character Set @@ -3606,7 +3791,7 @@ example, the code for A is 100+1 or 101. 000 NUL        010  TAB LF VT FF CR   020         - 030         + 030   ~      040 SP ! " # $ % & ' 050 ( ) * + , - . / 060 0 1 2 3 4 5 6 7 @@ -3630,7 +3815,7 @@ example, the code for A is 100+1 or 101. SP Space ALT Altmode BS Back Space - 70 Appendix E FAIL + 74 Appendix E FAIL Summary of Character Interpretations @@ -3657,20 +3842,20 @@ appear in text strings or in comments. page 015 CR carriage return statement terminator 016  infinity -017  partial +017  partial integer remainder in division 020  containment delimiter in FOR 021  implication 022  set intersection 023  set union 024  for all -025  there exists +025  there exists unary JFFO operator 026  circle times arithmetic shift operator 027  double-arrow statement terminator; remainder of line is interpreted as another statement 030  underbar same as . (056) in identifiers 031  right-arrow same as backslash (134) -032  tilde same as up-arrow (136); illegal as +032 ~ tilde same as up-arrow (136); illegal as the delimiter in ASCIZ, COMMENT, etc. 033  not equal boolean XOR 034  less or equal @@ -3683,7 +3868,7 @@ appear in text strings or in comments. 043 # number sign declares a variable; illegal as the delimiter in ASCIZ, COMMENT, etc. 044 $ dollar sign may be used in identifiers - FAIL Appendix E 71 + FAIL Appendix E 75 045 % percent may be used in identifiers @@ -3735,7 +3920,7 @@ appear in text strings or in comments. arithmetic FOR; illegal as the delimiter in ASCIZ, COMMENT, etc. 140 ` open single quote same as at-sign (100) - 72 Appendix E FAIL + 76 Appendix E FAIL 141 a lower case letters same as upper case letters, except in @@ -3744,167 +3929,189 @@ appear in text strings or in comments. 172 z 173 { left brace delimits macro bodies, IF-bodies, FOR-bodies, macro arguments -174 | vertical bar +174 | vertical bar absolute value operator 175 ALT altmode same as right brace (176) 176 } right brace see left brace (173) 177 BS backspace illegal in input - FAIL 73 + FAIL 77 Index -$. 17, 26, 29 Character FOR 52 - character interpretations 70 -. 17, 26, 29 close single quote 14, 28 -.FNAM1 18 colon 4, 15, 18, 39, 42, 44 -.FNAM2 18 comma 4, 6, 28, 33, 37, 38, 39, -.INSERT 42 40, 45, 48, 53, 56 -.LIBRARY 34 comma-comma 5 -.LOAD 34 Command Language 56 - comment 7 -absolute 10, 17, 59 COMMENT pseudo-op 42 -AC 4 COMPIL 57 -Accumulator Field 4 Complex Atoms 24 -Address Field 4 concatenation character 46, 51 -apostrophe 14, 28 Conditional Assembly 54 -Arguments in Macro Calls 48 Constants 11 -Arguments in Macro constants optimization 25 - Definitions 46 containment character 51 -Arithmetic FOR 53 control-meta-line feed 57 -ARRAY 40 control-Z 57 -ASCID 39 CREF 1, 44, 57 -ASCII character set 69 CREF pseudo-op 44 -Ascii Constants 13 Cross-Reference Listing 44, 57 -ASCII pseudo-op 39 -ASCIZ 39 DDT 1, 18, 22, 32, 39, 41 -Assembler Control Statements 41 DEC pseudo-op 37 -assignment statement 16 Decimal Numbers 12 -ASUPPRESS 35 decimal point 12 -at-sign 4, 51 DEFINE pseudo-op 45 -atomic statement 5, 7, 24 defined 10, 14, 15 -atoms 7, 9 DEPHASE 29 -available 11, 19, 21 Destination of Assembled - Code 27 -backslash 49 device code 6 -backward reference 14 Device Selection Field 6 -BEGIN 32 dollar sign 9 -BEND 32 dollar-point 17, 26, 29 -blank 45 double quote 13 -block 11 double-arrow 7 -block number 32 down-arrow 6, 21, 23, 55 -BLOCK pseudo-op 40 -Block Structure 19 END 41 -braces 45, 48, 52 Entering Data 37 -brackets 24, 40, 48 ENTRY 23, 33 -brokets 5, 24, 45, 48 entry blocks 23, 33 -BYTE 37 entry point 23 -byte pointer 38 epsilon 52 - equal sign 12, 16, 18, 42 -carriage return 7, 41, 43, 46, Expressions 7 - 48 EXTERNAL 23, 33 - 74 Index FAIL +$. 18, 26, 29 backward reference 15 + BEGIN 32 +. 18, 26, 29 BEND 32 +.ASSIGN 45 binary universal file 36, 37 +.COMMON 45 blank 48 +.CPU. 18 block 11 +.DIRECT 44 block number 32 +.FATAL 44 BLOCK pseudo-op 41 +.FNAM1 18 Block Structure 19 +.FNAM2 18 braces 44, 48, 51, 55 +.INSERT 43 brackets 24, 41, 51 +.ITABM 44, 52 brokets 5, 24, 44, 48, 51 +.LIBRARY 34 BYTE 38 +.LINK 34 byte pointer 38 +.LNKEND 34 +.LOAD 34 carriage return 7, 42, 46, 49, +.NOBIN 44 51 +.NOUNV 44 Character FOR 55 +.ORG 27 character interpretations 74 +.REQUEST 34 close single quote 14, 28 +.REQUIRE 34 colon 4, 16, 19, 39, 43, 47 +.TEXT 45 comma 4, 6, 28, 33, 38, 39, 40, +.XTABM 44, 52 41, 48, 51, 56, 60 + comma-comma 5 +absolute 11, 18, 63 Command Language 60 +AC 4 comment 7 +Accumulator Field 4 COMMENT pseudo-op 43 +Address Field 4 COMPIL 61 +apostrophe 14, 28 Complex Atoms 24 +Arguments in Macro Calls 51 concatenation character 49, 54 +Arguments in Macro Conditional Assembly 58 + Definitions 49 Constants 11 +Arithmetic FOR 56 constants optimization 25 +ARRAY 41 containment character 55 +ASCID 39 control-meta-line feed 61 +ASCII character set 73 control-Z 61 +Ascii Constants 13 CREF 1, 47, 61 +ASCII pseudo-op 39 CREF pseudo-op 47 +ASCIZ 39 Cross-Reference Listing 47, 61 +Assembler Control Statements 42 +ASSIGN 45 DDT 1, 18, 22, 32, 40, 42 +assignment statement 16 DEC pseudo-op 38 +ASUPPRESS 36 Decimal Numbers 12 +at-sign 4, 54 decimal point 12 +atomic statement 5, 7, 24 DEFINE pseudo-op 48 +atoms 7, 9 defined 11, 15 +available 11, 19, 21 DEPHASE 29 + Destination of Assembled +backslash 52 Code 27 + 78 Index FAIL -external symbols 23, 33 internal symbols 33 - IOWD 38 -fixup 15 IRP 51 -Floating-Point Numbers 12 IRPC 51 -FOR 51 -FOR-body 51 Labels 15 -form feed 44 LALL 43 -formal arguments 51 left-arrow 4, 16, 18, 23, 39, -forward reference 14, 41 42, 44, 53 -Full-Word Expression 5 library 23 - library search mode 23 -GDEFINE pseudo-op 45 line feed 7, 42, 46 -GLOBAL pseudo-op 33 LINK 34 -global symbols 22 Linkage with Separately - Assembled Programs 22 -Half-Killed Symbols 18 LINKEND 34 -Halfword Statement 5 LIST 43 -hardware input-output Listing Control Statements 43 - instruction 6 LIT 31, 41 -hardware instruction 3, 60 literal-label 26, 35, 36 -high segment 29 literals 24, 25, 31, 41 -HISEG 29 loader 1, 8, 10, 15, 22, 23, - 29, 33, 34, 35, 39, 40, 59 -Identifiers 9 LOC 27 -IF-body 54 local symbols 22 -IFAVL 55 location counter 15, 17, 27, 28 -IFDEF 55 -IFDIF 55 machine instruction 3, 60 -IFE 54 Macro Bodies 46 -IFG 54 Macro Calls 47 -IFGE 54 Macros 45 -IFIDN 55 multiple definition 16 -IFL 54 multiple location counters 28 -IFLE 54 -IFMAC 55 NOLIT 44 -IFN 54 NOSYM 44 -IFNAVL 55 null argument 48 -IFNDEF 55 null statement 2 -IFNMAC 55 number sign 4, 17, 31, 39, 40, -IFNOP 55 42, 44 -IFOP 55 Numbers 11 -Index Field 5 Numeric IFs 54 -indirect bit 4 -Indirect Field 4 OCT 37 -Input-Output Instruction octal 11 - Statement 6 Opcode Field 3 -Instruction Statement 3 OPDEF 32 -INTEGER 40 opdefs 32 -INTERNAL 23, 33 open single quote 4 - FAIL Index 75 +device code 6 IFIDN 58 +Device Selection Field 6 IFL 58 +dollar sign 10 IFLE 58 +dollar-point 18, 26, 29 IFMAC 59 +double quote 13 IFN 58 +double-arrow 7 IFNAVL 59 +down-arrow 6, 21, 23, 59 IFNDEF 59 + IFNMAC 59 +END 42 IFNOP 59 +Entering Data 38 IFOP 59 +ENTRY 23, 33 Index Field 5 +entry blocks 23, 33 indirect bit 4 +entry point 23 Indirect Field 4 +epsilon 55 Input-Output Instruction +equal sign 12, 16, 19, 43 Statement 6 +Expressions 7 Instruction Statement 3 +EXTERNAL 23, 33 INTEGER 41 +external symbols 23, 33 INTERNAL 23, 33 + internal symbols 33 +fixup 15 IOWD 39 +Floating-Point Numbers 12 IRP 54 +FOR 54 IRPC 54 +FOR-body 54 +form feed 47 KA10 44 +formal arguments 55 KI10 44 +forward reference 15, 41 +Full-Word Expression 5 Labels 15 +FUN 37, 44, 61 LALL 46 + left-arrow 4, 16, 19, 23, 39, +GDEFINE pseudo-op 48 43, 47, 56 +GLOBAL pseudo-op 33 library 23 +global symbols 22 library search mode 23 + line feed 7, 43, 49 +Half-Killed Symbols 18 LINK 34 +Halfword Statement 5 Linkage with Separately +hardware input-output Assembled Programs 22 + instruction 6 LINKEND 34 +hardware instruction 3, 64 LIST 46 +high segment 29 Listing Control Statements 46 +HISEG 29 LIT 31, 42 + literal-label 26, 35, 36 +Identifiers 9 literals 24, 25, 31, 42 +IF-body 58 loader 1, 8, 10, 15, 22, 23, +IFAVL 59 29, 33, 34, 35, 40, 41, 63 +IFDEF 59 Loader Control Statements 45 +IFDIF 58 LOC 27 +IFE 58 local symbols 22 +IFG 58 location counter 16, 18, 27, 28 +IFGE 58 + FAIL Index 79 -operator 7 Statement Termination 7 -ORG 27 Statements 2 - String FOR 51 -PAGE pseudo-op 44 SUBTTL 43 -parameter 16 SUPPRESS 35 -parentheses 5, 7, 37, 45, 46, suppress bit 36 - 48, 51, 56 symbol 10 -percent sign 9 Symbol IFs 55 -PHASE 29 Symbol Modifiers 32 -point 9, 17, 26, 29 Symbols 14 -POINT pseudo-op 38 -Polish fixup 8 tab 45 -Predefined Opcodes 60 Text IFs 55 -PRGEND 41 text statements 39 -PRINTS 44 tilde 4, 19, 39, 42, 44 -PRINTX 44 TITLE 41 -program 22 Truncated Expression 6 -Pseudo-Ops 27 two-segment program 29 -PURGE 35 TWOSEG 29 +machine instruction 3, 64 RELOC 27 +Macro Bodies 49 relocatable 10, 16, 18, 63 +Macro Calls 50 relocation constant 63 +Macros 48 relocation factor 63 +multiple definition 16 REPEAT 57 +multiple location counters 28 reserved identifiers 10 + Reserving Space for Data 41 +NOLIT 46 right-arrow 52 +NOSYM 47 RPG 61 +null argument 51 +null statement 2 Scaled Numbers 12 +number sign 4, 17, 31, 39, 41, SEARCH 37 + 43, 47 segment 29 +Numbers 11 semicolon 7, 42, 46, 51 +Numeric IFs 58 SET 28 + Simple Numbers 11 +OCT 38 sixbit 14, 40 +octal 11 Sixbit Constants 14 +Opcode Field 3 SIXBIT pseudo-op 39 +OPDEF 32 slash 60 +opdefs 32 special characters 74 +open single quote 4 Stanford Character Set 73 +operator 7 starting address 42 +ORG 27 Statement Termination 7 + Statements 2 +PAGE pseudo-op 47 String FOR 55 +parameter 16 SUBTTL 46 +parentheses 5, 7, 38, 48, 49, SUPPRESS 36 + 51, 55, 60 suppress bit 36 +percent sign 10 symbol 11 +PHASE 29 Symbol IFs 59 +point 10, 18, 26, 29 Symbol Modifiers 32 +POINT pseudo-op 38 Symbols 14 +Polish fixup 8 +Predefined Opcodes 64 tab 48 +PRGEND 42 Text IFs 58 +PRINTS 47 text statements 39 +PRINTX 47 tilde 4, 20, 39, 43, 47 +program 22 TITLE 42 +Pseudo-Ops 27 Truncated Expression 6 +PURGE 35 two-segment program 29 + TWOSEG 29 +question mark 22 + unavailable 11, 21 +RADIX 43 undefined 11, 63 +RADIX50 40 underbar 10 +RAID 1, 18, 22, 32, 40, 42 UNIVERSAL 36 +range specifier 55 universal program 36 +reference 15 universal symbols 36 + 80 Index FAIL -question mark 21 unavailable 11, 20 - undefined 10, 59 -RADIX 42 underbar 9 -RADIX50 39 UNIVERSAL 36 -RAID 1, 18, 22, 32, 39, 41 universal program 36 -range specifier 51 universal symbols 36 -reference 14 unrelocatable 10, 59 -RELOC 27 up-arrow 4, 19, 23, 34, 39, 42, -relocatable 10, 16, 17, 59 44 -relocation constant 59 USASCII 13 -relocation factor 59 USE 28 -REPEAT 54 user-defined opcode 32 -reserved identifiers 10 UUO 1, 3, 6, 60 -Reserving Space for Data 40 -right-arrow 49 Values 10 -RPG 57 VAR 31, 41 - Variables 17, 31, 40, 41 -SEARCH 36 -segment 29 XALL 43 -semicolon 7, 41, 43, 48 XCREF 44 -SET 28 XLIST 43 -Simple Numbers 11 XLIST1 43 -sixbit 13, 39 XPUNGE 35 -Sixbit Constants 13 XWD 38 -SIXBIT pseudo-op 39 -slash 56 -special characters 70 -Stanford Character Set 69 -starting address 41, 42 - \ No newline at end of file + + +unrelocatable 11, 63 +up-arrow 4, 20, 23, 34, 39, 43, + 47 +USASCII 13 +USE 28 +user-defined opcode 32 +UUO 1, 3, 6, 64 + +Values 10 +VAR 31, 42 +Variables 17, 31, 41, 42 + +XALL 46 +XCREF 47 +XLIST 46 +XLIST1 46 +XPUNGE 35 +XWD 39 + \ No newline at end of file