Annotation of researchv10no/cmd/spitbol/minimal, revision 1.1

1.1     ! root        1:        TTL  MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !             2:        EJC
        !             3: *
        !             4: *      THE FOLLOWING SECTIONS DESCRIBE THE IMPLEMENTATION
        !             5: *      LANGUAGE ORIGINALLY DEVELOPED FOR SPITBOL BUT NOW MORE
        !             6: *      WIDELY USED. MINIMAL IS AN ASSEMBLY LANGUAGE
        !             7: *      FOR AN IDEALIZED MACHINE. THE FOLLOWING DESCRIBES THE
        !             8: *      BASIC CHARACTERISTICS OF THIS MACHINE.
        !             9: *
        !            10: *      SECTION 1 - CONFIGURATION PARAMETERS
        !            11: *
        !            12: *      THERE ARE SEVERAL PARAMETERS WHICH MAY VARY WITH THE
        !            13: *      TARGET MACHINE. THE MACRO-PROGRAM IS INDEPENDENT OF THE
        !            14: *      ACTUAL DEFINITIONS OF THESE PARAMETERS.
        !            15: *
        !            16: *      THE DEFINITIONS OF THESE PARAMETERS ARE SUPPLIED BY
        !            17: *      THE TRANSLATION PROGRAM TO MATCH THE TARGET MACHINE.
        !            18: *
        !            19: *      CFP$A                 NUMBER OF DISTINCT CHARACTERS IN
        !            20: *                            INTERNAL ALPHABET IN THE RANGE
        !            21: *                            64 LE CFP$A LE MXLEN.
        !            22: *
        !            23: *      CFP$B                 NUMBER OF BYTES IN A WORD WHERE A
        !            24: *                            BYTE IS THE AMOUNT OF STORAGE
        !            25: *                            ADDRESSED BY THE LEAST SIGNIFICANT
        !            26: *                            ADDRESS BIT.
        !            27: *
        !            28: *      CFP$C                 NUMBER OF CHARACTERS WHICH CAN
        !            29: *                            BE STORED IN A SINGLE WORD.
        !            30: *
        !            31: *      CFP$F                 BYTE OFFSET FROM START OF A STRING
        !            32: *                            BLOCK TO THE FIRST CHARACTER.
        !            33: *                            DEPENDS BOTH ON TARGET MACHINE AND
        !            34: *                            STRING DATA STRUCTURE. SEE PLC, PSC
        !            35: *
        !            36: *      CFP$I                 NUMBER OF WORDS IN A SIGNED
        !            37: *                            INTEGER CONSTANT
        !            38: *
        !            39: *      CFP$M                 THE LARGEST POSITIVE INTEGER
        !            40: *                            OF FORM 2**N - 1 WHICH CAN BE
        !            41: *                            STORED IN A SINGLE WORD. N
        !            42: *                            WILL OFTEN BE CFP$N BUT NEED NOT BE
        !            43: *
        !            44: *
        !            45: *      CFP$N                 NUMBER OF BITS WHICH CAN BE STORED
        !            46: *                            IN A ONE WORD BIT STRING.
        !            47: *
        !            48: *      CFP$R                 NUMBER OF WORDS IN A REAL CONSTANT
        !            49: *
        !            50: *      CFP$S                 NUMBER OF SIGNIFICANT DIGITS TO
        !            51: *                            BE OUTPUT IN CONVERSION OF A REAL
        !            52: *                            QUANTITY. THE INTEGER CONSISTING OF
        !            53: *                            THIS NUMBER OF 9S MUST NOT BE TOO
        !            54: *                            LARGE TO FIT IN THE INTEGER ACCUM.
        !            55: *
        !            56: *      CFP$X                 NUMBER OF DIGITS IN REAL EXPONENT
        !            57:        EJC
        !            58: *
        !            59: *      SECTION 2 - MEMORY
        !            60: *
        !            61: *      MEMORY IS ORGANIZED INTO WORDS WHICH EACH CONTAIN CFP$B
        !            62: *      BYTES. FOR WORD MACHINES CFP$B, WHICH IS A CONFIGURATION
        !            63: *      PARAMETER, MAY BE ONE IN WHICH CASE WORDS AND BYTES ARE
        !            64: *      IDENTICAL. TO EACH WORD CORRESPONDS AN ADDRESS WHICH IS
        !            65: *      A NON-NEGATIVE QUANTITY WHICH IS A MULTIPLE OF CFP$B.
        !            66: *      DATA IS ORGANIZED INTO WORDS AS FOLLOWS.
        !            67: *
        !            68: *      1)   A SIGNED INTEGER VALUE OCCUPIES CFP$I CONSECUTIVE
        !            69: *           WORDS (CFP$I IS A CONFIGURATION PARAMETER).
        !            70: *           THE RANGE MAY INCLUDE MORE NEGATIVE NUMBERS THAN
        !            71: *           POSITIVE (E.G. THE TWOS COMPLEMENT REPRESENTATION).
        !            72: *
        !            73: *      2)   A SIGNED REAL VALUE OCCUPIES CFP$R CONSECUTIVE
        !            74: *           WORDS. (CFP$R IS A CONFIGURATION PARAMETER).
        !            75: *
        !            76: *      3)   CFP$C CHARACTERS MAY BE STORED IN A SINGLE WORD
        !            77: *           (CFP$C IS A CONFIGURATION PARAMETER).
        !            78: *
        !            79: *      4)   A BIT STRING CONTAINING CFP$N BITS CAN BE STORED IN
        !            80: *           A SINGLE WORD (CFP$N IS A CONFIGURATION PARAMETER).
        !            81: *
        !            82: *      5)   A WORD CAN CONTAIN A NON-NEGATIVE INTEGER VALUE IN
        !            83: *           THE RANGE (0 LE N LE CFP$M). THESE INTEGER VALUES
        !            84: *           MAY REPRESENT ADDRESSES OF OTHER WORDS AND SOME OF
        !            85: *           THE INSTRUCTIONS USE THIS FACT TO PROVIDE INDEXING
        !            86: *           AND INDIRECTION FACILITIES.
        !            87: *
        !            88: *      6)   PROGRAM INSTRUCTIONS OCCUPY WORDS IN AN UNDEFINED
        !            89: *           MANNER. DEPENDING ON THE ACTUAL IMPLEMENTATION,
        !            90: *           INSTRUCTIONS MAY OCCUPY SEVERAL WORDS, OR PART OF
        !            91: *           A WORD, OR EVEN BE SPLIT OVER WORD BOUNDARIES.
        !            92: *
        !            93: *      THE FOLLOWING REGIONS OF MEMORY ARE AVAILABLE TO THE
        !            94: *      PROGRAM. EACH REGION CONSISTS OF A SERIES OF WORDS WITH
        !            95: *      CONSECUTIVE ADDRESSES.
        !            96: *
        !            97: *      1)   CONSTANT SECTION           ASSEMBLED CONSTANTS
        !            98: *      2)   WORKING STORAGE SECTION    ASSEMBLED WORK AREAS
        !            99: *      3)   PROGRAM SECTION            ASSEMBLED INSTRUCTIONS
        !           100: *      4)   STACK AREA                 ALLOCATED STACK AREA
        !           101: *      5)   DATA AREA                  ALLOCATED DATA AREA
        !           102:        EJC
        !           103: *
        !           104: *      SECTION 3 - REGISTERS
        !           105: *
        !           106: *      THERE ARE THREE INDEX REGISTERS CALLED XR,XL,XS. IN
        !           107: *      ADDITION XL MAY SOMETIMES BE REFERRED TO BY THE ALIAS
        !           108: *      OF XT - SEE SECTION 4. ANY OF THE ABOVE
        !           109: *      REGISTERS MAY HOLD A POSITIVE INTEGER IN THE RANGE
        !           110: *      (0 LE N LE CFP$M). WHEN THE INDEX REGISTER IS USED FOR
        !           111: *      INDEXING PURPOSES, THIS MUST BE AN APPROPRIATE ADDRESS.
        !           112: *      XS IS SPECIAL IN THAT IT IS USED TO POINT TO THE TOP
        !           113: *      ITEM OF A STACK IN MEMORY. THE STACK MAY BUILD UP OR
        !           114: *      DOWN IN MEMORY.SINCE IT IS REQUIRED THAT XS POINTS TO THE
        !           115: *      STACK TOP BUT ACCESS TO ITEMS BELOW THE TOP IS PERMITTED,
        !           116: *      REGISTERS XS AND XT MAY BE USED WITH SUITABLE OFFSETS
        !           117: *      TO INDEX STACKED ITEMS. ONLY XS AND XT MAY BE USED FOR
        !           118: *      THIS PURPOSE SINCE THE DIRECTION OF THE OFFSET IS
        !           119: *      TARGET MACHINE DEPENDENT. XT IS A SYNONYM FOR XL
        !           120: *      WHICH THEREFORE CANNOT BE USED IN CODE SEQUENCES
        !           121: *      REFERENCING XT.
        !           122: *      THE STACK IS USED FOR S-R LINKAGE AND TEMPORARY
        !           123: *      DATA STORAGE FOR WHICH THE STACK ARRANGEMENT IS SUITABLE.
        !           124: *      XR,XL CAN ALSO CONTAIN A CHARACTER POINTER IN CONJUNCTION
        !           125: *      WITH THE CHARACTER INSTRUCTIONS (SEE DESCRIPTION OF PLC).
        !           126:        EJC
        !           127: *
        !           128: *      THERE ARE THREE WORK REGISTERS CALLED WA,WB,WC WHICH
        !           129: *      CAN CONTAIN ANY DATA ITEM WHICH CAN BE STORED IN A
        !           130: *      SINGLE MEMORY WORD. IN FACT, THE WORK REGISTERS ARE JUST
        !           131: *      LIKE MEMORY LOCATIONS EXCEPT THAT THEY HAVE NO ADDRESSES
        !           132: *      AND ARE REFERENCED IN A SPECIAL WAY BY THE INSTRUCTIONS.
        !           133: *      NOTE THAT REGISTERS WA,WB HAVE SPECIAL USES IN CONNECTION
        !           134: *      WITH THE CVD, CVM, MVC, MVW, MWB, CMC, TRC INSTRUCTIONS.
        !           135: *      REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
        !           136: *      SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
        !           137: *      VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
        !           138: *      EXCEPT AS NOTED IN THE FOLLOWING RESTRICTION ON SIMPLE
        !           139: *      DUMP/RESTORE OPERATIONS.
        !           140: *
        !           141: *          RESTRICTION
        !           142: *          -----------
        !           143: *
        !           144: *      IF IA AND WA OVERLAP THEN
        !           145: *          STI  IASAV
        !           146: *          LDI  IASAV
        !           147: *      DOES NOT CHANGE WC, AND
        !           148: *          MOV  WC,WCSAV
        !           149: *          MOV  WCSAV,WC
        !           150: *      DOES NOT CHANGE IA.
        !           151: *
        !           152: *
        !           153: *
        !           154: *      THERE IS AN INTEGER ACCUMULATOR (IA) WHICH IS CAPABLE OF
        !           155: *      HOLDING A SIGNED INTEGER VALUE (CFP$I WORDS LONG).
        !           156: *      REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
        !           157: *      SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
        !           158: *      VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
        !           159: *      EXCEPT AS NOTED IN THE ABOVE RESTRICTION ON SIMPLE
        !           160: *      DUMP/RESTORE OPERATIONS.
        !           161: *
        !           162: *
        !           163: *
        !           164: *      THERE IS A SINGLE REAL ACCUMULATOR (RA) WHICH CAN HOLD
        !           165: *      ANY REAL VALUE AND IS COMPLETELY SEPARATE FROM ANY OF
        !           166: *      THE OTHER REGISTERS OR PROGRAM ACCESSIBLE LOCATIONS.
        !           167: *
        !           168: *
        !           169: *
        !           170: *      THE CODE POINTER REGISTER (CP) IS A SPECIAL INDEX
        !           171: *      REGISTER FOR USE IN IMPLEMENTATIONS OF INTERPRETORS.
        !           172: *      IT IS USED TO CONTAIN A PSEUDO-CODE POINTER AND CAN
        !           173: *      ONLY BE AFFECTED BY ICP, LCP, SCP AND LCW INSTRUCTIONS.
        !           174:        EJC
        !           175: *      SECTION 4 - THE STACK
        !           176: *
        !           177: *      THE FOLLOWING NOTES ARE TO GUIDE BOTH IMPLEMENTORS OF
        !           178: *      SYSTEMS WRITTEN IN MINIMAL AND MINIMAL PROGRAMMERS IN
        !           179: *      DEALING WITH STACK MANIPULATION. IMPLEMENTATION OF A
        !           180: *      DOWNWARDS BUILDING STACK IS EASIEST AND IN GENERAL IS
        !           181: *      TO BE PREFERRED, IN WHICH CASE IT IS MERELY NECESSARY TO
        !           182: *      CONSIDER XT AS AN ALTERNATIVE NAME FOR XL.
        !           183: *
        !           184: *      THE MINIMAL VIRTUAL MACHINE INCLUDES A STACK AND HAS
        !           185: *      OPERAND FORMATS -(XS) AND (XS)+ FOR PUSHING AND POPPING
        !           186: *      ITEMS WITH AN IMPLICATION THAT THE STACK BUILDS DOWN IN
        !           187: *      MEMORY (A D-STACK). HOWEVER ON SOME TARGET MACHINES IT IS
        !           188: *      BETTER FOR THE STACK TO BUILD UP (A U-STACK).
        !           189: *      A STACK ADDRESSED ONLY BY PUSH AND POP OPERATIONS CAN
        !           190: *      BUILD IN EITHER DIRECTION WITH NO COMPLICATION BUT
        !           191: *      SUCH A PURE SCHEME OF STACK ACCESS PROVES RESTRICTIVE.
        !           192: *      HENCE IT IS PERMITTED TO ACCESS BURIED ITEMS USING AN
        !           193: *      INTEGER OFFSET PAST THE INDEX REGISTER POINTING TO THE
        !           194: *      STACK TOP. ON TARGET MACHINES THIS OFFSET WILL BE
        !           195: *      POSITIVE/NEGATIVE FOR D-STACKS/U-STACKS AND THIS MUST
        !           196: *      BE ALLOWED FOR IN THE TRANSLATION.
        !           197: *      A FURTHER RESTRICTION IS THAT AT NO TIME MAY AN ITEM BE
        !           198: *      PLACED ABOVE THE STACK TOP. FOR SOME OPERATIONS THIS
        !           199: *      MAKES IT CONVENIENT TO ADVANCE THE STACK POINTER AND THEN
        !           200: *      ADDRESS ITEMS BELOW IT USING A SECOND INDEX REGISTER.
        !           201: *      THE PROBLEM OF SIGNED OFFSETS PAST SUCH A REGISTER THEN
        !           202: *      ARISES. TO DISTINGUISH STACK OFFSETS, WHICH IN SOME
        !           203: *      IMPLEMENTATIONS MAY BE NEGATIVE, FROM NON-STACK OFFSETS
        !           204: *      WHICH ARE INVARIABLY POSITIVE, XT, AN ALIAS OR
        !           205: *      SYNONYM FOR XL IS USED. FOR A U-STACK IMPLEMENTATION, THE
        !           206: *      MINIMAL TRANSLATOR SHOULD NEGATE THE SIGN OF OFFSETS
        !           207: *      APPLIED TO BOTH (XS) AND (XT).
        !           208: *      PROGRAMMERS SHOULD NOTE THAT SINCE XT IS NOT A
        !           209: *      SEPARATE REGISTER, XL SHOULD NOT BE USED IN CODE WHERE
        !           210: *      XT IS REFERENCED. OTHER MODIFICATIONS NEEDED IN U-STACK
        !           211: *      TRANSLATIONS ARE IN THE ADD, SUB, ICA, DCA OPCODES
        !           212: *      APPLIED TO XS, XT. FOR EXAMPLE
        !           213: *
        !           214: *      MINIMAL           D-STACK TRANS.  U-STACK TRANS.
        !           215: *
        !           216: *      MOV  WA,-(XS)     SBI  XS,1       ADI  XS,1
        !           217: *                        STO  WA,(XS)    STO  WA,(XS)
        !           218: *      MOV  (XT)+,WC     LOD  WC,(XL)    LOD  WC,(XL)
        !           219: *                        ADI  XL,1       SBI  XL,1
        !           220: *      ADD  =SEVEN,XS    ADI  XS,7       SBI  XS,7
        !           221: *      MOV  2(XT),WA     LOD  WA,2(XL)   LOD  WA,-2(XL)
        !           222: *      ICA  XS           ADI  XS,1       SBI  XS,1
        !           223: *
        !           224: *      NOTE THAT FORMS SUCH AS
        !           225: *      MOV  -(XS),WA
        !           226: *      ADD  WA,(XS)+
        !           227: *      ARE ILLEGAL, SINCE THEY ASSUME INFORMATION STORAGE
        !           228: *      ABOVE THE STACK TOP.
        !           229:        EJC
        !           230: *      SECTION 5 - INTERNAL CHARACTER SET
        !           231: *
        !           232: *      THE INTERNAL CHARACTER SET IS REPRESENTED BY A SET OF
        !           233: *      CONTIGUOUS CODES FROM 0 TO CFP$A-1. THE CODES FOR THE
        !           234: *      DIGITS 0-9 MUST BE CONTIGUOUS AND IN SEQUENCE. OTHER
        !           235: *      THAN THIS, THERE ARE NO RESTRAINTS.
        !           236: *
        !           237: *      THE FOLLOWING SYMBOLS ARE AUTOMATICALLY DEFINED TO HAVE
        !           238: *      THE VALUE OF THE CORRESPONDING INTERNAL CHARACTER CODE.
        !           239: *
        !           240: *      CH$LA                 LETTER A
        !           241: *      CH$LB                 LETTER B
        !           242: *      .                     .
        !           243: *      CH$L$                 LETTER Z
        !           244: *
        !           245: *      CH$D0                 DIGIT 0
        !           246: *      .                     .
        !           247: *      CH$D9                 DIGIT 9
        !           248: *
        !           249: *      CH$AM                 AMPERSAND
        !           250: *      CH$AS                 ASTERISK
        !           251: *      CH$AT                 AT
        !           252: *      CH$BB                 LEFT BRACKET
        !           253: *      CH$BL                 BLANK
        !           254: *      CH$BR                 VERTICAL BAR
        !           255: *      CH$CL                 COLON
        !           256: *      CH$CM                 COMMA
        !           257: *      CH$DL                 DOLLAR SIGN
        !           258: *      CH$DT                 DOT (PERIOD)
        !           259: *      CH$DQ                 DOUBLE QUOTE
        !           260: *      CH$EQ                 EQUAL SIGN
        !           261: *      CH$EX                 EXCLAMATION MARK
        !           262: *      CH$MN                 MINUS
        !           263: *      CH$NM                 NUMBER SIGN
        !           264: *      CH$NT                 NOT
        !           265: *      CH$PC                 PERCENT
        !           266: *      CH$PL                 PLUS
        !           267: *      CH$PP                 LEFT PAREN
        !           268: *      CH$RB                 RIGHT BRACKET
        !           269: *      CH$RP                 RIGHT PAREN
        !           270: *      CH$QU                 QUESTION MARK
        !           271: *      CH$SL                 SLASH
        !           272: *      CH$SM                 SEMI-COLON
        !           273: *      CH$SQ                 SINGLE QUOTE
        !           274: *      CH$UN                 UNDERLINE
        !           275: *
        !           276: *      THE FOLLOWING OPTIONAL SYMBOLS ARE INCORPORATED
        !           277: *      BY DEFINING THE CONDITIONAL ASSEMBLY SYMBOL NAMED.
        !           278: *
        !           279: *      26 SHIFTED LETTERS INCORPORATED BY DEFINING .CASL
        !           280: *
        !           281: *      CH$$A                 SHIFTED A
        !           282: *      CH$$B                 SHIFTED B
        !           283: *      .                     .
        !           284: *      CH$$$                 SHIFTED Z
        !           285: *
        !           286: *      CH$HT                 HORIZONTAL TAB - DEFINE .CAHT
        !           287: *      CH$VT                 VERTICAL TAB   - DEFINE .CAVT
        !           288:        EJC
        !           289: *
        !           290: *      SECTION 6 - CONDITIONAL ASSEMBLY FEATURES
        !           291: *
        !           292: *      SOME FEATURES OF THE INTERPRETER ARE APPLICABLE TO ONLY
        !           293: *      CERTAIN TARGET MACHINES. THEY MAY BE INCORPORATED OR
        !           294: *      OMITTED BY USE OF CONDITIONAL ASSEMBLY. THE FULL
        !           295: *      FORM OF A CONDITION IS -
        !           296: *      .IF    CONDITIONAL ASSEMBLY SYMBOL    (CAS)
        !           297: *      .THEN
        !           298: *             MINIMAL STATEMENTS1   (MS1)
        !           299: *      .ELSE
        !           300: *             MINIMAL STATEMENTS2   (MS2)
        !           301: *      .FI
        !           302: *      THE FOLLOWING RULES APPLY
        !           303: *      1.   THE DIRECTIVES .IF, .THEN, .ELSE, .FI MUST
        !           304: *           START IN COLUMN 1.
        !           305: *      2.   THE CONDITIONAL ASSEMBLY SYMBOL MUST START WITH A
        !           306: *           DOT IN COLUMN 8 FOLLOWED BY 4 LETTERS OR DIGITS E.G.
        !           307: *              .CA$1
        !           308: *      3.   .THEN IS REDUNDANT AND MAY BE OMITTED IF WISHED.
        !           309: *      4.   MS1, MS2 ARE ARBITRARY SEQUENCES OF MINIMAL
        !           310: *           STATEMENTS EITHER OF WHICH MAY BE NULL.
        !           311: *      5.   IF MS2 IS OMITTED, .ELSE MAY ALSO BE OMITTED.
        !           312: *      6.   .FI IS REQUIRED.
        !           313: *      7.   CONDITIONS MAY BE NESTED TO A DEPTH DETERMINED
        !           314: *           BY THE TRANSLATOR (NOT LESS THAN 20, SAY).
        !           315: *
        !           316: *      SELECTION OF THE ALTERNATIVES MS1, MS2 IS BY MEANS OF THE
        !           317: *      DEFINE AND UNDEFINE DIRECTIVES OF FORM -
        !           318: *      .DEF   CAS
        !           319: *      .UNDEF CAS
        !           320: *      WHICH OBEY RULES 1. AND 2. ABOVE AND MAY OCCUR AT ANY
        !           321: *      POINT IN A MINIMAL PROGRAM, INCLUDING WITHIN A CONDITION.
        !           322: *      MULTIPLY DEFINING A SYMBOL IS AN ERROR.
        !           323: *      UNDEFINING A SYMBOL WHICH IS NOT DEFINED IS NOT AN ERROR.
        !           324: *
        !           325: *      THE EFFECT IS THAT IF A SYMBOL IS CURRENTLY DEFINED,
        !           326: *      THEN IN ANY CONDITION DEPENDING ON IT, MS1 WILL BE
        !           327: *      PROCESSED AND MS2 OMITTED. CONVERSELY IF IT IS UNDEFINED,
        !           328: *      MS1 WILL BE OMITTED AND MS2 PROCESSED.
        !           329:        EJC
        !           330: *
        !           331: *      SECTION 7 - OPERAND FORMATS
        !           332: *
        !           333: *      THE FOLLOWING SECTION DESCRIBES THE VARIOUS POSSIBILITIES
        !           334: *      FOR OPERANDS OF INSTRUCTIONS AND ASSEMBLY OPERATIONS.
        !           335: *
        !           336: *      01   INT              UNSIGNED INTEGER LE CFP$M
        !           337: *      02   DLBL             SYMBOL DEFINED IN DEFINITIONS SEC
        !           338: *      03   WLBL             LABEL IN WORKING STORAGE SECTION
        !           339: *      04   CLBL             LABEL IN CONSTANT SECTION
        !           340: *      05   ELBL             PROGRAM SECTION ENTRY LABEL
        !           341: *      06   PLBL             PROGRAM SECTION LABEL (NON-ENTRY)
        !           342: *      07   X                ONE OF THE THREE INDEX REGISTERS
        !           343: *      08   W                ONE OF THE THREE WORK REGISTERS
        !           344: *      09   (X)              LOCATION INDEXED BY X
        !           345: *      10   (X)+             LIKE (X) BUT POST INCREMENT X
        !           346: *      11   -(X)             LIKE (X) BUT PREDECREMENT X
        !           347: *      12   INT(X)           LOCATION INT WORDS BEYOND ADDR IN X
        !           348: *      13   DLBL(X)          LOCATION DLBL WORDS PAST ADDR IN X
        !           349: *      14   CLBL(X)          LOCATION (X) BYTES BEYOND CLBL
        !           350: *      15   WLBL(X)          LOCATION (X) BYTES BEYOND WLBL
        !           351: *      16   INTEGER          SIGNED INTEGER (DIC)
        !           352: *      17   REAL             SIGNED REAL (DRC)
        !           353: *      18   =DLBL            LOCATION CONTAINING DAC DLBL
        !           354: *      19   *DLBL            LOCATION CONTAINING DAC CFP$B*DLBL
        !           355: *      20   =WLBL            LOCATION CONTAINING DAC WLBL
        !           356: *      21   =CLBL            LOCATION CONTAINING DAC CLBL
        !           357: *      22   =ELBL            LOCATION CONTAINING DAC ELBL
        !           358: *      23   PNAM             PROCEDURE LABEL (ON PRC INSTRUC)
        !           359: *      24   EQOP             OPERAND FOR EQU INSTRUCTION
        !           360: *      25   PTYP             PROCEDURE TYPE (SEE PRC)
        !           361: *      26   TEXT             ARBITRARY TEXT (ERB,ERR,TTL)
        !           362: *      27   DTEXT            DELIMITED TEXT STRING (DTC)
        !           363: *
        !           364: *      THE NUMBERS IN THE ABOVE LIST ARE USED IN SUBSEQUENT
        !           365: *      DESCRIPTION AND IN SOME OF THE MINIMAL TRANSLATORS.
        !           366:        EJC
        !           367: *
        !           368: *      OPERAND FORMATS (CONTINUED)
        !           369: *
        !           370: *      THE FOLLOWING SPECIAL SYMBOLS REFER TO A COLLECTION OF
        !           371: *      THE LISTED POSSIBILITIES
        !           372: *
        !           373: *      VAL  01,02                      PREDEFINED VALUE
        !           374: *
        !           375: *           VAL IS USED TO REFER TO A PREDEFINED ONE WORD
        !           376: *           INTEGER VALUE IN THE RANGE 0 LE N LE CFP$M.
        !           377: *
        !           378: *      REG  07,08                      REGISTER
        !           379: *
        !           380: *           REG IS USED TO DESCRIBE AN OPERAND WHICH CAN BE
        !           381: *           ANY OF THE REGISTERS (XL,XR,XS,XT,WA,WB,WC). SUCH
        !           382: *           AN OPERAND CAN HOLD A ONE WORD INTEGER (ADDRESS).
        !           383: *
        !           384: *      OPC  09,10,11                   CHARACTER
        !           385: *
        !           386: *           OPC IS USED TO DESIGNATE A SPECIFIC CHARACTER
        !           387: *           OPERAND FOR USE IN THE LCH AND SCH INSTRUCTIONS.
        !           388: *           THE INDEX REGISTER REFERENCED MUST BE EITHER XR OR
        !           389: *           XL (NOT XS,XT). SEE SECTION ON CHARACTER OPERATIONS.
        !           390: *
        !           391: *      OPS  03,04,09,12,13,14,15       MEMORY REFERENCE
        !           392: *
        !           393: *           OPS IS USED TO DESCRIBE AN OPERAND WHICH IS IN
        !           394: *           MEMORY. THE OPERAND MAY BE ONE OR MORE WORDS LONG
        !           395: *           DEPENDING ON THE DATA TYPE. IN THE CASE OF MULTIWORD
        !           396: *           OPERANDS, THE ADDRESS GIVEN IS THE FIRST WORD.
        !           397: *
        !           398: *      OPW  AS FOR OPS + 08,10,11      FULL WORD
        !           399: *
        !           400: *           OPW IS USED TO REFER TO AN OPERAND WHOSE CAPACITY IS
        !           401: *           THAT OF A FULL MEMORY WORD. OPW INCLUDES ALL THE
        !           402: *           POSSIBILITIES FOR OPS (THE REFERENCED WORD IS USED)
        !           403: *           PLUS THE USE OF ONE OF THE THREE WORK REGISTERS
        !           404: *           (WA,WB,WC). IN ADDITION, THE FORMATS (X)+ AND -(X)
        !           405: *           ALLOW INDEXED OPERATIONS IN WHICH THE INDEX REGISTER
        !           406: *           IS POPPED BY ONE WORD AFTER THE REFERENCE (X)+,
        !           407: *           OR PUSHED BY ONE WORD BEFORE THE REFERENCE -(X)
        !           408: *           THESE LATTER TWO FORMATS PROVIDE A FACILITY FOR
        !           409: *           MANIPULATION OF STACKS. THE FORMAT DOES NOT IMPLY
        !           410: *           A PARTICULAR DIRECTION IN WHICH STACKS MUST BUILD -
        !           411: *           IT IS USED FOR COMPACTNESS. NOTE THAT THERE IS A
        !           412: *           RESTRICTION WHICH DISALLOWS AN INSTRUCTION TO USE
        !           413: *           AN INDEX REGISTER IN ONE OF THESE FORMATS
        !           414: *           IN SOME OTHER MANNER IN THE SAME INSTRUCTION.
        !           415: *           E.G.   MOV  XL,(XL)+   IS ILLEGAL.
        !           416: *           THE FORMATS -(X) AND (X)+ MAY ALSO BE USED IN
        !           417: *           PRE-DECREMENTATION, POST-INCREMENTATION TO ACCESS
        !           418: *           THE ADJACENT CHARACTER OF A STRING.
        !           419:        EJC
        !           420: *
        !           421: *      OPERAND FORMATS (CONTINUED)
        !           422: *
        !           423: *      OPN  AS FOR OPW + 07            ONE WORD INTEGER
        !           424: *
        !           425: *           OPN IS USED TO REPRESENT AN OPERAND LOCATION WHICH
        !           426: *           CAN CONTAIN A ONE WORD INTEGER (E.G. AN ADDRESS).
        !           427: *           THIS INCLUDES ALL THE POSSIBILITIES FOR OPW PLUS
        !           428: *           THE USE OF ONE OF THE INDEX REGISTERS (XL,XR,XT,
        !           429: *           XS). THE RANGE OF INTEGER VALUES IS 0 LE N LE CFP$M.
        !           430: *
        !           431: *      OPV  AS FOR OPN + 18-22         ONE WORD INTEGER VALUE
        !           432: *
        !           433: *           OPV IS USED FOR AN OPERAND WHICH CAN YIELD A ONE
        !           434: *           WORD INTEGER VALUE (E.G. AN ADDRESS). IT INCLUDES
        !           435: *           ALL THE POSSIBILITIES FOR OPN (THE CURRENT VALUE OF
        !           436: *           THE LOCATION IS USED) PLUS THE USE OF LITERALS. NOTE
        !           437: *           THAT ALTHOUGH THE LITERAL FORMATS ARE DESCRIBED IN
        !           438: *           TERMS OF A REFERENCE TO A LOCATION CONTAINING AN
        !           439: *           ADDRESS CONSTANT, THIS LOCATION MAY NOT ACTUALLY
        !           440: *           EXIST IN SOME IMPLEMENTATIONS SINCE ONLY THE VALUE
        !           441: *           IS REQUIRED. A RESTRICTION IS PLACED ON LITERALS
        !           442: *           WHICH MAY CONSIST ONLY OF DEFINED SYMBOLS AND
        !           443: *           CERTAIN LABELS. CONSEQUENTLY SMALL INTEGERS TO BE
        !           444: *           USED AS LITERALS MUST BE PRE-DEFINED, A DISCIPLINE
        !           445: *           AIDING PROGRAM MAINTENANCE AND REVISION.
        !           446: *
        !           447: *      ADDR 01,02,03,04,05             ADDRESS
        !           448: *
        !           449: *           ADDR IS USED TO DESCRIBE AN EXPLICIT ADDRESS VALUE
        !           450: *           (ONE WORD INTEGER VALUE) FOR USE WITH DAC.
        !           451: *
        !           452: *
        !           453: *           ****************************************************
        !           454: *           *   IN THE FOLLOWING DESCRIPTIONS THE USAGE --     *
        !           455: *           *      (XL),(XR), ... ,(IA)                        *
        !           456: *           *   IN THE DESCRIPTIVE TEXT SIGNIFIES THE          +
        !           457: *           *   CONTENTS OF THE STATED REGISTER.               *
        !           458: *           ****************************************************
        !           459:        EJC
        !           460: *
        !           461: *      SECTION 8 - LIST OF INSTRUCTION MNEMONICS
        !           462: *
        !           463: *      THE FOLLOWING LIST INCLUDES ALL INSTRUCTION AND
        !           464: *      ASSEMBLY OPERATION MNEMONICS IN ALPHABETICAL ORDER.
        !           465: *      THE MNEMONICS ARE PRECEDED BY A NUMBER IDENTIFYING
        !           466: *      THE FOLLOWING SECTION WHERE THE INSTRUCTION IS DESCRIBED.
        !           467: *      A STAR (*) IS APPENDED TO THE MNEMONIC IF THE LAST
        !           468: *      OPERAND MAY OPTIONALLY BE OMITTED.
        !           469: *      SEE SECTION -15- FOR DETAILS OF STATEMENT FORMAT AND
        !           470: *      COMMENT CONVENTIONS.
        !           471: *
        !           472: *       2.1  ADD  OPV,OPN      ADD ADDRESS
        !           473: *       4.2  ADI  OPS          ADD INTEGER
        !           474: *       5.3  ADR  OPS          ADD REAL
        !           475: *       7.1  ANB  OPW,W        AND BIT STRING
        !           476: *       2.17 AOV  OPV,OPN,PLBL ADD ADDRESS, FAIL IF OVERFLOW
        !           477: *       2.16 BCT  W,PLBL       BRANCH AND COUNT
        !           478: *       2.5  BEQ  OPN,OPV,PLBL BRANCH IF ADDRESS EQUAL
        !           479: *       2.8  BGE  OPN,OPV,PLBL BRANCH IF ADDRESS GREATER OR EQUL
        !           480: *       2.7  BGT  OPN,OPV,PLBL BRANCH IF ADDRESS GREATER
        !           481: *       2.12 BHI  OPN,OPV,PLBL BRANCH IF ADDRESS HIGH
        !           482: *       2.10 BLE  OPN,OPV,PLBL BRANCH IF ADDRESS LESS OR EQUAL
        !           483: *       2.11 BLO  OPN,OPV,PLBL BRANCH IF ADDRESS LOW
        !           484: *       2.9  BLT  OPN,OPV,PLBL BRANCH IF ADDRESS LESS THAN
        !           485: *       2.6  BNE  OPN,OPV,PLBL BRANCH IF ADDRESS NOT EQUAL
        !           486: *       2.13 BNZ  OPN,PLBL     BRANCH IF ADDRESS NON-ZERO
        !           487: *       1.2  BRN  PLBL         BRANCH UNCONDITIONAL
        !           488: *       1.7  BRI  OPN          BRANCH INDIRECT
        !           489: *       1.3  BSW* X,VAL,PLBL   BRANCH ON SWITCH VALUE
        !           490: *       8.2  BTW  REG          CONVERT BYTES TO WORDS
        !           491: *       2.14 BZE  OPN,PLBL     BRANCH IF ADDRESS ZERO
        !           492: *       6.6  CEQ  OPW,OPW,PLBL BRANCH IF CHARACTERS EQUAL
        !           493: *      10.1  CHK               CHECK STACK OVERFLOW
        !           494: *       7.4  CMB  W            COMPLEMENT BIT STRING
        !           495: *       6.8  CMC  PLBL,PLBL    COMPARE CHARACTER STRINGS
        !           496: *       6.7  CNE  OPW,OPW,PLBL BRANCH IF CHARACTERS NOT EQUAL
        !           497: *       6.5  CSC  X            COMPLETE STORE CHARACTERS
        !           498: *       8.8  CTB  W,VAL        CONVERT CHARACTER COUNT TO BYTES
        !           499: *       8.7  CTW  W,VAL        CONVERT CHARACTER COUNT TO WORDS
        !           500: *       8.10 CVD               CONVERT BY DIVISION
        !           501: *       8.9  CVM  PLBL         CONVERT BY MULTIPLICATION
        !           502: *      11.1  DAC  ADDR         DEFINE ADDRESS CONSTANT
        !           503: *      11.5  DBC  VAL          DEFINE BIT STRING CONSTANT
        !           504: *       2.4  DCA  OPN          DECREMENT ADDRESS BY ONE WORD
        !           505: *       1.17 DCV  OPN          DECREMENT VALUE BY ONE
        !           506: *      11.2  DIC  INTEGER      DEFINE INTEGER CONSTANT
        !           507:        EJC
        !           508: *
        !           509: *      ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
        !           510: *
        !           511: *      11.3  DRC  REAL         DEFINE REAL CONSTANT
        !           512: *      11.4  DTC  DTEXT        DEFINE TEXT (CHARACTER) CONSTANT
        !           513: *       4.5  DVI  OPS          DIVIDE INTEGER
        !           514: *       5.6  DVR  OPS          DIVIDE REAL
        !           515: *      13.1  EJC               EJECT ASSEMBLY LISTING
        !           516: *      14.2  END               END OF ASSEMBLY
        !           517: *       1.13 ENP               DEFINE END OF PROCEDURE
        !           518: *       1.6  ENT* VAL          DEFINE ENTRY POINT
        !           519: *      12.1  EQU  EQOP         DEFINE SYMBOLIC VALUE
        !           520: *       1.15 ERB  INT,TEXT     ASSEMBLE ERROR CODE AND BRANCH
        !           521: *       1.14 ERR  INT,TEXT     ASSEMBLE ERROR CODE
        !           522: *       1.5  ESW               END OF SWITCH LIST FOR BSW
        !           523: *       1.12 EXI* INT          EXIT FROM PROCEDURE
        !           524: *      12.2  EXP               DEFINE EXTERNAL PROCEDURE
        !           525: *       2.3  ICA  OPN          INCREMENT ADDRESS BY ONE WORD
        !           526: *       3.4  ICP               INCREMENT CODE POINTER
        !           527: *       1.16 ICV  OPN          INCREMENT VALUE BY ONE
        !           528: *       4.11 IEQ  PLBL         JUMP IF INTEGER ZERO
        !           529: *       1.4  IFF  VAL,PLBL     SPECIFY BRANCH FOR BSW
        !           530: *       4.12 IGE  PLBL         JUMP IF INTEGER NON-NEGATIVE
        !           531: *       4.13 IGT  PLBL         JUMP IF INTEGER POSITIVE
        !           532: *       4.14 ILE  PLBL         JUMP IF INTEGER NEGATIVE OR ZERO
        !           533: *       4.15 ILT  PLBL         JUMP IF INTEGER NEGATIVE
        !           534: *       4.16 INE  PLBL         JUMP IF INTEGER NON-ZERO
        !           535: *       4.9  INO  PLBL         JUMP IF NO INTEGER OVERFLOW
        !           536: *      12.3  INP  PTYP,INT     INTERNAL PROCEDURE
        !           537: *      12.4  INR               INTERNAL ROUTINE
        !           538: *       4.10 IOV  PLBL         JUMP IF INTEGER OVERFLOW
        !           539: *       8.5  ITR               CONVERT INTEGER TO REAL
        !           540: *       1.9  JSR  PNAM         CALL PROCEDURE
        !           541: *       6.3  LCH  REG,OPC      LOAD CHARACTER
        !           542: *       2.15 LCT  W,OPV        LOAD COUNTER FOR LOOP
        !           543: *       3.1  LCP  REG          LOAD CODE POINTER REGISTER
        !           544: *       3.3  LCW  REG          LOAD NEXT CODE WORD
        !           545: *       4.1  LDI  OPS          LOAD INTEGER
        !           546: *       5.1  LDR  OPS          LOAD REAL
        !           547: *       1.8  LEI  X            LOAD ENTRY POINT ID
        !           548: *       7.6  LSH  W,VAL        LEFT SHIFT BIT STRING
        !           549: *       7.8  LSX  W,(X)        LEFT SHIFT INDEXED
        !           550: *       8.4  MFI* OPN,PLBL     CONVERT (IA) TO ADDRESS VALUE
        !           551: *       4.3  MLI  OPS          MULTIPLY INTEGER
        !           552: *       5.5  MLR  OPS          MULTIPLY REAL
        !           553: *       1.19 MNZ  OPN          MOVE NON-ZERO
        !           554: *       1.1  MOV  OPV,OPN      MOVE
        !           555: *       8.3  MTI  OPN          MOVE ADDRESS VALUE TO (IA)
        !           556: *       9.1  MVC               MOVE CHARACTERS
        !           557: *       9.2  MVW               MOVE WORDS
        !           558: *       9.3  MWB               MOVE WORDS BACKWARDS
        !           559: *       4.8  NGI               NEGATE INTEGER
        !           560:        EJC
        !           561: *
        !           562: *      ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
        !           563: *
        !           564: *       5.9  NGR               NEGATE REAL
        !           565: *       7.9  NZB  W,PLBL       JUMP IF NOT ALL ZERO BITS
        !           566: *       7.2  ORB  OPW,W        OR BIT STRINGS
        !           567: *       6.1  PLC* X,OPV        PREPARE TO LOAD CHARACTERS
        !           568: *       1.10 PPM* PLBL         PROVIDE PROCEDURE EXIT PARAMETER
        !           569: *       1.11 PRC  PTYP,VAL     DEFINE START OF PROCEDURE
        !           570: *       6.2  PSC* X,OPV        PREPARE TO STORE CHARACTERS
        !           571: *       5.10 REQ  PLBL         JUMP IF REAL ZERO
        !           572: *       5.11 RGE  PLBL         JUMP IF REAL POSITIVE OR ZERO
        !           573: *       5.12 RGT  PLBL         JUMP IF REAL POSITIVE
        !           574: *       5.13 RLE  PLBL         JUMP IF REAL NEGATIVE OR ZERO
        !           575: *       5.14 RLT  PLBL         JUMP IF REAL NEGATIVE
        !           576: *       4.6  RMI  OPS          REMAINDER INTEGER
        !           577: *       5.15 RNE  PLBL         JUMP IF REAL NON-ZERO
        !           578: *       5.8  RNO  PLBL         JUMP IF NO REAL OVERFLOW
        !           579: *       5.7  ROV  PLBL         JUMP IF REAL OVERFLOW
        !           580: *       7.5  RSH  W,VAL        RIGHT SHIFT BIT STRING
        !           581: *       7.7  RSX  W,(X)        RIGHT SHIFT INDEXED
        !           582: *       8.6  RTI* PLBL         CONVERT REAL TO INTEGER
        !           583: *       1.22 RTN               DEFINE START OF ROUTINE
        !           584: *       4.4  SBI  OPS          SUBTRACT INTEGER
        !           585: *       5.4  SBR  OPS          SUBTRACT REALS
        !           586: *       6.4  SCH  REG,OPC      STORE CHARACTER
        !           587: *       3.2  SCP  REG          STORE CODE POINTER
        !           588: *      14.1  SEC               DEFINE START OF ASSEMBLY SECTION
        !           589: *       1.20 SSL  OPW          SUBROUTINE STACK LOAD
        !           590: *       1.21 SSS  OPW          SUBROUTINE STACK STORE
        !           591: *       4.7  STI  OPS          STORE INTEGER
        !           592: *       5.2  STR  OPS          STORE REAL
        !           593: *       2.2  SUB  OPV,OPN      SUBTRACT ADDRESS
        !           594: *       6.9  TRC               TRANSLATE CHARACTER STRING
        !           595: *      13.2  TTL  TEXT         SUPPLY ASSEMBLY TITLE
        !           596: *       8.1  WTB  REG          CONVERT WORDS TO BYTES
        !           597: *       7.3  XOB  OPW,W        EXCLUSIVE OR BIT STRINGS
        !           598: *       1.18 ZER  OPN          ZEROISE INTEGER LOCATION
        !           599: *       7.11 ZGB  OPN          ZEROISE GARBAGE BITS
        !           600: *       7.10 ZRB  W,PLBL       JUMP IF ALL ZERO BITS
        !           601:        EJC
        !           602: *
        !           603: *      SECTION 9 - MINIMAL INSTRUCTIONS
        !           604: *
        !           605: *      THE FOLLOWING DESCRIPTIONS ASSUME THE DEFINITIONS -
        !           606: *
        !           607: *      ZEROE  EQU  0
        !           608: *      UNITY  EQU  1
        !           609: *
        !           610: *      -1-  BASIC INSTRUCTION SET
        !           611: *
        !           612: *      1.1  MOV  OPV,OPN     MOVE ONE WORD VALUE
        !           613: *
        !           614: *           MOV CAUSES THE VALUE OF OPERAND OPV TO BE SET AS
        !           615: *           THE NEW CONTENTS OF OPERAND LOCATION OPN. IN THE
        !           616: *           CASE WHERE OPN IS NOT AN INDEX REGISTER, ANY VALUE
        !           617: *           WHICH CAN NORMALLY OCCUPY A MEMORY WORD (INCLUDING
        !           618: *           A PART OF A MULTIWORD REAL OR INTEGER VALUE)
        !           619: *           CAN BE TRANSFERRED USING MOV. IF THE TARGET LOCATION
        !           620: *           OPN IS AN INDEX REGISTER, THEN OPV MUST SPECIFY AN
        !           621: *           APPROPRIATE ONE WORD VALUE OR OPERAND CONTAINING
        !           622: *           SUCH AN APPROPRIATE VALUE.
        !           623: *
        !           624: *      1.2  BRN  PLBL        UNCONDITIONAL BRANCH
        !           625: *
        !           626: *           BRN CAUSES CONTROL TO BE PASSED TO THE INDICATED
        !           627: *           LABEL IN THE PROGRAM SECTION.
        !           628: *
        !           629: *      1.3  BSW  X,VAL,PLBL  BRANCH ON SWITCH VALUE
        !           630: *      1.4  IFF  VAL,PLBL    PROVIDE BRANCH FOR SWITCH
        !           631: *           IFF  VAL,PLBL     ...
        !           632: *           ...
        !           633: *           ...
        !           634: *      1.5  ESW              END OF BRANCH SWITCH TABLE
        !           635: *
        !           636: *           BSW,IFF,ESW PROVIDE A CAPABILITY FOR A SWITCHED
        !           637: *           BRANCH SIMILAR TO A FORTRAN COMPUTED GOTO. THE
        !           638: *           VAL ON THE BSW INSTRUCTION IS THE MAXIMUM NUMBER
        !           639: *           OF BRANCHES. THE VALUE IN X RANGES FROM ZERO UP TO
        !           640: *           BUT NOT INCLUDING THIS MAXIMUM. EACH IFF PROVIDES A
        !           641: *           BRANCH. VAL MUST BE LESS THAN THAT GIVEN ON THE BSW
        !           642: *           AND CONTROL GOES TO PLBL IF THE VALUE IN X MATCHES.
        !           643: *           IF THE VALUE IN X DOES NOT CORRESPOND TO ANY OF THE
        !           644: *           IFF ENTRIES, THEN CONTROL PASSES TO THE PLBL ON THE
        !           645: *           BSW. THIS PLBL OPERAND MAY BE OMITTED IF THERE ARE
        !           646: *           NO VALUES MISSING FROM THE LIST.
        !           647: *
        !           648: *           IFF AND ESW MAY ONLY BE USED IN THIS CONTEXT.
        !           649: *           EXECUTION OF BSW MAY DESTROY THE CONTENTS OF X.
        !           650: *           THE IFF ENTRIES MAY BE IN ANY ORDER AND SINCE
        !           651: *           A TRANSLATOR MAY THUS NEED TO STORE AND SORT THEM,
        !           652: *           THE COMMENT FIELD IS RESTRICTED IN LENGTH (SEC 11).
        !           653:        EJC
        !           654: *
        !           655: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !           656: *
        !           657: *      1.6  ENT  VAL         DEFINE PROGRAM ENTRY POINT
        !           658: *
        !           659: *           THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
        !           660: *           TO BE A PROGRAM ENTRY POINT WHICH CAN SUBSEQUENTLY
        !           661: *           BE USED IN CONJUNCTION WITH THE BRI INSTRUCTION,
        !           662: *           WHICH PROVIDES THE ONLY MEANS OF ENTERING THE
        !           663: *           CODE. IT IS ILLEGAL TO FALL INTO CODE
        !           664: *           IDENTIFIED BY AN ENTRY POINT. THE
        !           665: *           ENTRY SYMBOL IS ASSIGNED AN ADDRESS WHICH NEED NOT
        !           666: *           BE A MULTIPLE OF CFP$B BUT WHICH MUST BE IN THE
        !           667: *           RANGE 0 LE CFP$M AND THE ADDRESS MUST NOT LIE WITHIN
        !           668: *           THE ADDRESS RANGE OF THE ALLOCATED DATA AREA.
        !           669: *           FURTHERMORE, ADDRESSES OF SUCCESSIVE ENTRY POINTS
        !           670: *           MUST BE ASSIGNED IN SOME ASCENDING SEQUENCE SO
        !           671: *           THAT THE ADDRESS COMPARISON INSTRUCTIONS CAN BE
        !           672: *           USED TO TEST THE ORDER IN WHICH TWO ENTRY POINTS
        !           673: *           OCCUR. THE SYMBOL VAL GIVES AN IDENTIFYING VALUE
        !           674: *           TO THE ENTRY POINT WHICH CAN BE ACCESSED WITH THE
        !           675: *           LEI INSTRUCTION.
        !           676: *           NOTE - SUBJECT TO THE RESTRICTION BELOW, VAL MAY
        !           677: *           BE OMITTED IF NO SUCH IDENTIFICATION IS NEEDED I.E.
        !           678: *           IF NO LEI REFERENCES THE ENTRY POINT. FOR THIS
        !           679: *           CASE, A TRANSLATION OPTIMISATION IS POSSIBLE IN
        !           680: *           WHICH NO MEMORY NEED BE RESERVED FOR A NULL
        !           681: *           IDENTIFICATION WHICH IS NEVER TO BE REFERENCED, BUT
        !           682: *           ONLY PROVIDED THIS IS DONE SO AS NOT TO INTERFERE
        !           683: *           WITH THE STRICTLY ASCENDING SEQUENCE OF ENTRY POINT
        !           684: *           ADDRESSES. TO SIMPLIFY THIS OPTIMISATION FOR ALL
        !           685: *           IMPLEMENTORS, THE FOLLOWING RESTRICTION IS OBSERVED
        !           686: *                VAL MAY ONLY BE OMITTED IF THE ENTRY POINT IS
        !           687: *                SEPARATED FROM A FOLLOWING ENTRY POINT BY A
        !           688: *                NON-NULL MINIMAL CODE SEQUENCE.
        !           689: *           ENTRY POINT ADDRESSES ARE ACCESSIBLE ONLY BY USE OF
        !           690: *           LITERALS (=ELBL, SECTION 7) OR DAC CONSTANTS
        !           691: *           (SECTION 8-11.1).
        !           692: *
        !           693: *      1.7  BRI  OPN         BRANCH INDIRECT
        !           694: *
        !           695: *           OPN CONTAINS THE ADDRESS OF A PROGRAM ENTRY POINT
        !           696: *           (SEE ENT). CONTROL IS PASSED TO THE EXECUTABLE
        !           697: *           CODE STARTING AT THE ENTRY POINT ADDRESS. OPN IS
        !           698: *           LEFT UNCHANGED.
        !           699: *
        !           700: *      1.8  LEI  X           LOAD ENTRY POINT IDENTIFICATION
        !           701: *
        !           702: *           X CONTAINS THE ADDRESS OF AN ENTRY POINT FOR WHICH
        !           703: *           AN IDENTIFYING VALUE WAS GIVEN ON THE THE ENT LINE.
        !           704: *           LEI REPLACES THE CONTENTS OF X BY THIS VALUE.
        !           705:        EJC
        !           706: *
        !           707: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !           708: *
        !           709: *      1.9  JSR  PNAM        CALL PROCEDURE PNAM
        !           710: *      1.10 PPM  PLBL        PROVIDE EXIT PARAMETER
        !           711: *           PPM  PLBL         ...
        !           712: *           ...
        !           713: *           PPM  PLBL         ...
        !           714: *
        !           715: *           JSR CAUSES CONTROL TO BE PASSED TO THE NAMED
        !           716: *           PROCEDURE. PNAM IS THE LABEL ON A PRC STATEMENT
        !           717: *           ELSEWHERE IN THE PROGRAM SECTION (SEE PRC)
        !           718: *           OR HAS BEEN DEFINED USING AN EXP INSTRUCTION.
        !           719: *           THE PPM EXIT PARAMETERS FOLLOWING THE CALL GIVE
        !           720: *           NAMES OF PROGRAM LOCATIONS (PLBL-S) TO WHICH
        !           721: *           ALTERNATIVE EXI RETURNS OF THE CALLED PROCEDURE MAY
        !           722: *           PASS CONTROL. THEY MAY OPTIONALLY BE REPLACED BY
        !           723: *           ERROR RETURNS (SEE ERR). THE NUMBER OF EXIT
        !           724: *           PARAMETERS FOLLOWING A JSR MUST EQUAL THE INT IN THE
        !           725: *           PROCEDURE DEFINITION. THE OPERAND OF PPM MAY BE
        !           726: *           OMITTED IF THE CORRESPONDING EXI RETURN IS CERTAIN
        !           727: *           NOT TO BE TAKEN.
        !           728: *
        !           729: *      1.11 PRC  PTYP,INT    DEFINE START OF PROCEDURE
        !           730: *
        !           731: *           THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
        !           732: *           TO BE THE NAME OF A PROCEDURE FOR USE WITH JSR.
        !           733: *           A PROCEDURE IS A CONTIGUOUS SECTION OF INSTRUCTIONS
        !           734: *           TO WHICH CONTROL MAY BE PASSED WITH A JSR
        !           735: *           INSTRUCTION. THIS IS THE ONLY WAY IN WHICH THE
        !           736: *           INSTRUCTIONS IN A PROCEDURE MAY BE EXECUTED. IT IS
        !           737: *           NOT PERMITTED TO FALL INTO A PROCEDURE.
        !           738: *           ALL PROCEDURES SHOULD BE NAMED IN SECTION 0
        !           739: *           INP  STATEMENTS.
        !           740: *
        !           741: *           INT IS THE NUMBER OF EXIT PARAMETERS (PPM-S) TO
        !           742: *           BE USED IN JSR CALLS.
        !           743: *
        !           744: *           THERE ARE THREE POSSIBILITIES FOR PTYP, EACH
        !           745: *           CONSISTING OF A SINGLE LETTER AS FOLLOWS.
        !           746: *
        !           747: *           R                RECURSIVE
        !           748: *
        !           749: *           THE RETURN POINT (ONE OR MORE WORDS) IS STORED ON
        !           750: *           THE STACK AS THOUGH ONE OR MORE MOV ..,-(XS)
        !           751: *           INSTRUCTIONS WERE EXECUTED.
        !           752:        EJC
        !           753: *
        !           754: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !           755: *
        !           756: *           N                NON-RECURSIVE
        !           757: *
        !           758: *           THE RETURN POINT IS TO BE STORED EITHER
        !           759: *           (1) IN A LOCAL STORAGE WORD ASSOCIATED
        !           760: *           WITH THE PROCEDURE AND NOT DIRECTLY
        !           761: *           AVAILABLE TO THE PROGRAM IN ANY OTHER MANNER OR
        !           762: *           (2) ON A SUBROUTINE LINK STACK QUITE DISTINCT FROM
        !           763: *           THE MINIMAL STACK ADDRESSED BY XS.
        !           764: *           IT IS AN ERROR TO USE THE STACK FOR N-LINKS, SINCE
        !           765: *           PROCEDURE PARAMETERS OR RESULTS MAY BE PASSED VIA
        !           766: *           THE STACK.
        !           767: *           IF METHOD (2) IS USED FOR LINKS, ERROR EXITS
        !           768: *           (ERB,ERR) FROM A PROCEDURE WILL NECESSITATE LINK
        !           769: *           STACK RESETTING. THE SSL AND SSS ORDERS PROVIDED
        !           770: *           FOR THIS MAY BE REGARDED AS NO-OPS FOR
        !           771: *           IMPLEMENTATIONS USING METHOD (1).
        !           772: *
        !           773: *           E                EITHER
        !           774: *
        !           775: *           THE RETURN POINT MAY BE STORED IN EITHER MANNER
        !           776: *           ACCORDING TO EFFICIENCY REQUIREMENTS OF THE ACTUAL
        !           777: *           PHYSICAL MACHINE USED FOR THE IMPLEMENTATION. NOTE
        !           778: *           THAT PROGRAMMING OF E TYPE PROCEDURES MUST BE
        !           779: *           INDEPENDENT OF THE ACTUAL IMPLEMENTATION.
        !           780: *
        !           781: *           THE ACTUAL FORM OF THE RETURN POINT IS UNDEFINED.
        !           782: *           HOWEVER, EACH WORD STORED ON THE STACK FOR AN
        !           783: *           R-TYPE CALL MUST MEET THE FOLLOWING REQUIREMENTS.
        !           784: *
        !           785: *           1)               IT CAN BE HANDLED AS AN ADDRESS
        !           786: *                            AND PLACED IN AN INDEX REGISTER.
        !           787: *
        !           788: *           2)               WHEN USED AS AN OPERAND IN AN
        !           789: *                            ADDRESS COMPARISON INSTRUCTION, IT
        !           790: *                            MUST NOT APPEAR TO LIE WITHIN
        !           791: *                            THE ALLOCATED DATA AREA.
        !           792: *
        !           793: *           3)               IT IS NOT REQUIRED TO APPEAR
        !           794: *                            TO LIE WITHIN THE PROGRAM SECTION.
        !           795:        EJC
        !           796: *
        !           797: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !           798: *
        !           799: *      1.12 EXI  INT         EXIT FROM PROCEDURE
        !           800: *
        !           801: *           THE PPM AND ERR PARAMETERS FOLLOWING A JSR ARE
        !           802: *           NUMBERED STARTING FROM 1.  EXI  INT CAUSES CONTROL
        !           803: *           TO BE RETURNED TO THE INT-TH SUCH PARAM. EXI 1 GIVES
        !           804: *           CONTROL TO THE PLBL OF THE FIRST PPM AFTER THE JSR.
        !           805: *           IF INT IS OMITTED, CONTROL IS PASSED BACK PAST THE
        !           806: *           LAST EXIT PARAMETER (OR PAST THE JSR IF THERE ARE
        !           807: *           NONE). FOR R AND E TYPE PROCEDURES, THE
        !           808: *           STACK POINTER XS MUST BE SET TO ITS APPROPRIATE
        !           809: *           ENTRY VALUE BEFORE EXECUTING AN EXI INSTRUCTION.
        !           810: *           IN THIS CASE, EXI REMOVES RETURN POINTS FROM THE
        !           811: *           STACK IF ANY ARE STORED THERE SO THAT THE STACK
        !           812: *           POINTER IS RESTORED TO ITS CALLING VALUE.
        !           813: *
        !           814: *      1.13 ENP              DEFINE END OF PROCEDURE BODY
        !           815: *
        !           816: *           ENP DELIMITS A PROCEDURE BODY AND MAY NOT ACTUALLY
        !           817: *           BE EXECUTED, HENCE IT MUST HAVE NO LABEL.
        !           818: *
        !           819: *      1.14 ERR  INT,TEXT    PROVIDE ERROR RETURN
        !           820: *
        !           821: *           ERR MAY REPLACE AN EXIT PARAMETER (PPM) IN
        !           822: *           ANY PROCEDURE CALL. THE INT ARGUMENT IS A UNIQUE
        !           823: *           ERROR CODE IN 0 TO 899.
        !           824: *           THE TEXT SUPPLIED AS THE OTHER OPERAND IS
        !           825: *           ARBITRARY TEXT IN THE FORTRAN CHARACTER SET AND
        !           826: *           MAY BE USED IN CONSTRUCTING A FILE OF ERROR
        !           827: *           MESSAGES FOR DOCUMENTING PURPOSES OR FOR BUILDING
        !           828: *           A DIRECT ACCESS OR OTHER FILE OF MESSAGES TO BE
        !           829: *           USED BY THE ERROR HANDLING CODE.
        !           830: *           IN THE EVENT THAT AN EXI ATTEMPTS
        !           831: *           TO RETURN CONTROL VIA AN EXIT PARAMETER TO
        !           832: *           AN ERR, CONTROL IS INSTEAD PASSED TO THE FIRST
        !           833: *           INSTRUCTION IN THE ERROR SECTION (WHICH FOLLOWS THE
        !           834: *           PROGRAM SECTION) WITH THE ERROR CODE IN WA.
        !           835: *
        !           836: *      1.15 ERB  INT,TEXT    ERROR BRANCH
        !           837: *
        !           838: *           THIS INSTRUCTION RESEMBLES ERR EXCEPT THAT IT MAY
        !           839: *           OCCUR AT ANY POINT WHERE A BRANCH IS PERMITTED.
        !           840: *           IT EFFECTS A TRANSFER OF CONTROL TO THE ERROR
        !           841: *           SECTION WITH THE ERROR CODE IN WA.
        !           842: *
        !           843: *      1.16 ICV  OPN         INCREMENT VALUE BY ONE
        !           844: *
        !           845: *           ICV INCREMENTS THE VALUE OF THE OPERAND BY UNITY.
        !           846: *           IT IS EQUIVALENT TO   ADD  =UNITY,OPN
        !           847: *
        !           848: *      1.17 DCV  OPN         DECREMENT VALUE BY ONE
        !           849: *
        !           850: *           DCV DECREMENTS THE VALUE OF THE OPERAND BY UNITY.
        !           851: *           IT IS EQUIVALENT TO   SUB  =UNITY,OPN
        !           852:        EJC
        !           853: *
        !           854: *      BASIC INSTRUCTIONS (CONTINUED)
        !           855: *
        !           856: *      1.18 ZER  OPN         ZEROISE OPN
        !           857: *
        !           858: *           ZER IS EQUIVALENT TO  MOV  =ZEROE,OPN
        !           859: *
        !           860: *      1.19 MNZ  OPN         MOVE NON-ZERO TO OPN
        !           861: *
        !           862: *           ANY NON-ZERO COLLECTABLE VALUE MAY USED, FOR WHICH
        !           863: *           THE OPCODES BNZ/BZE WILL BRANCH/FAIL TO BRANCH.
        !           864: *
        !           865: *      1.20 SSL  OPW         SUBROUTINE STACK LOAD
        !           866: *
        !           867: *      1.21 SSS  OPW         SUBROUTINE STACK STORE
        !           868: *
        !           869: *           THIS PAIR OF OPERATIONS IS PROVIDED TO MAKE POSSIBLE
        !           870: *           THE USE OF A LOCAL STACK TO HOLD SUBROUTINE (S-R)
        !           871: *           RETURN LINKS FOR N-TYPE PROCEDURES. SSS STORES THE
        !           872: *           S-R STACK POINTER IN OPW AND SSL LOADS THE S-R
        !           873: *           STACK POINTER FROM OPW. BY USING SSS IN THE MAIN
        !           874: *           PROGRAM OR ON ENTRY TO A PROCEDURE WHICH SHOULD
        !           875: *           REGAIN CONTROL ON OCCURRENCE OF AN ERR OR ERB AND BY
        !           876: *           USE OF SSL IN THE ERROR PROCESSING SECTIONS THE
        !           877: *           S-R STACK POINTER CAN BE RESTORED GIVING A LINK
        !           878: *           STACK CLEANED UP READY FOR RESUMED EXECUTION.
        !           879: *           THE FORM OF THE LINK STACK POINTER IS UNDEFINED IN
        !           880: *           MINIMAL (IT IS LIKELY TO BE A PRIVATE REGISTER
        !           881: *           KNOWN TO THE TRANSLATOR) AND THE ONLY REQUIREMENT
        !           882: *           IS THAT IT SHOULD FIT INTO A SINGLE FULL WORD.
        !           883: *           SSL AND SSS ARE NO-OPS IF A PRIVATE LINK STACK IS
        !           884: *           NOT USED.
        !           885: *
        !           886: *      1.22 RTN              DEFINE START OF ROUTINE
        !           887: *
        !           888: *           A ROUTINE IS A CODE CHUNK USED FOR SIMILAR PURPOSES
        !           889: *           TO A PROCEDURE. HOWEVER IT IS ENTERED BY ANY TYPE OF
        !           890: *           CONDITIONAL OR UNCONDITIONAL BRANCH (NOT BY JSR). ON
        !           891: *           TERMINATION IT PASSES CONTROL BY A BRANCH (OFTEN
        !           892: *           BRI THROUGH A CODE WORD) OR EVEN PERMITS CONTROL
        !           893: *           TO DROP THROUGH TO ANOTHER ROUTINE. NO RETURN LINK
        !           894: *           EXISTS AND THE END OF A ROUTINE IS NOT MARKED BY
        !           895: *           AN EXPLICIT OPCODE (COMPARE ENP).
        !           896: *           ALL ROUTINES SHOULD BE NAMED IN SECTION 0
        !           897: *           INR  STATEMENTS.
        !           898:        EJC
        !           899: *
        !           900: *      -2-  OPERATIONS ON ONE WORD INTEGER VALUES (ADDRESSES)
        !           901: *
        !           902: *      2.1  ADD  OPV,OPN     ADDS OPV TO THE VALUE IN OPN AND
        !           903: *                            STORES THE RESULT IN OPN. UNDEFINED
        !           904: *                            IF THE RESULT EXCEEDS CFP$M.
        !           905: *
        !           906: *      2.2  SUB  OPV,OPN     SUBTRACTS OPV FROM OPN. STORES THE
        !           907: *                            RESULT IN OPN. UNDEFINED IF THE
        !           908: *                            RESULT IS NEGATIVE.
        !           909: *
        !           910: *      2.3  ICA  OPN         INCREMENT ADDRESS IN OPN
        !           911: *                            EQUIVALENT TO ADD *UNITY,OPN
        !           912: *
        !           913: *      2.4  DCA  OPN         DECREMENT ADDRESS IN OPN
        !           914: *                            EQUIVALENT TO SUB *UNITY,OPN
        !           915: *
        !           916: *      2.5  BEQ  OPN,OPV,PLBL BRANCH TO PLBL IF OPN EQ OPV
        !           917: *      2.6  BNE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN NE OPV
        !           918: *      2.7  BGT  OPN,OPV,PLBL BRANCH TO PLBL IF OPN GT OPV
        !           919: *      2.8  BGE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN GE OPV
        !           920: *      2.9  BLT  OPN,OPV,PLBL BRANCH TO PLBL IF OPN LT OPV
        !           921: *      2.10 BLE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN LE OPV
        !           922: *      2.11 BLO  OPN,OPV,PLBL EQUIVALENT TO BLT OR BLE
        !           923: *      2.12 BHI  OPN,OPV,PLBL EQUIVALENT TO BGT OR BGE
        !           924: *
        !           925: *           THE ABOVE INSTRUCTIONS COMPARE TWO ADDRESS
        !           926: *           VALUES AS UNSIGNED INTEGER VALUES.
        !           927: *           THE BLO AND BHI INSTRUCTIONS ARE USED IN CASES WHERE
        !           928: *           THE EQUAL CONDITION EITHER DOES NOT OCCUR OR CAN
        !           929: *           RESULT EITHER IN A BRANCH OR NO BRANCH. THIS AVOIDS
        !           930: *           INEFFICIENT TRANSLATIONS IN SOME IMPLEMENTATIONS.
        !           931: *
        !           932: *      2.13 BNZ  OPN,PLBL    EQUIVALENT TO BNE OPN,=ZEROE,PLBL
        !           933: *
        !           934: *      2.14 BZE  OPN,PLBL    EQUIVALENT TO BEQ OPN,=ZEROE,PLBL
        !           935: *
        !           936: *
        !           937: *      2.15 LCT  W,OPV       LOAD COUNTER FOR BCT
        !           938: *
        !           939: *           LCT LOADS A COUNTER VALUE FOR USE WITH THE BCT
        !           940: *           INSTRUCTION. THE VALUE IN OPV IS THE NUMBER OF LOOPS
        !           941: *           TO BE EXECUTED. THE VALUE IN W AFTER THIS OPERATION
        !           942: *           IS AN UNDEFINED ONE WORD INTEGER QUANTITY.
        !           943: *
        !           944: *      2.16 BCT  W,PLBL      BRANCH AND COUNT
        !           945: *
        !           946: *           BCT USES THE COUNTER VALUE IN W TO BRANCH THE
        !           947: *           REQUIRED NUMBER OF TIMES AND THEN FINALLY TO FALL
        !           948: *           THROUGH TO THE NEXT INSTRUCTION. BCT CAN ONLY BE
        !           949: *           USED FOLLOWING AN APPROPRIATE LCT INSTRUCTION.
        !           950: *           THE VALUE IN W AFTER EXECUTION OF BCT IS UNDEFINED.
        !           951: *
        !           952: *      2.17 AOV  OPV,OPN,PLBL ADD WITH OVERFLOW TEST
        !           953: *
        !           954: *           ADDS OPV TO THE VALUE IN OPN AND STORES RESULT IN
        !           955: *           OPN. BRANCHES TO PLBL IF RESULT EXCEEDS CFP$M
        !           956: *           WITH RESULT IN OPN UNDEFINED. CF. ADD.
        !           957:        EJC
        !           958: *
        !           959: *      -3-  OPERATIONS ON THE CODE POINTER REGISTER (CP)
        !           960: *
        !           961: *           THE CODE POINTER REGISTER PROVIDES A PSUEDO
        !           962: *           INSTRUCTION COUNTER FOR USE IN AN INTERPRETOR. IT
        !           963: *           MAY BE IMPLEMENTED AS A REAL REGISTER OR AS A
        !           964: *           MEMORY LOCATION, BUT IN EITHER CASE IT IS SEPARATE
        !           965: *           FROM ANY OTHER REGISTER. THE VALUE IN THE CODE
        !           966: *           POINTER REGISTER IS ALWAYS A WORD ADDRESS (I.E.
        !           967: *           A ONE WORD INTEGER WHICH IS A MULTIPLE OF CFP$B).
        !           968: *
        !           969: *      3.1  LCP  REG         LOAD CODE POINTER REGISTER
        !           970: *                            THIS INSTRUCTION CAUSES THE CODE
        !           971: *                            POINTER REGISTER TO BE SET FROM
        !           972: *                            THE VALUE IN REG WHICH IS UNCHANGED
        !           973: *
        !           974: *      3.2  SCP  REG         STORE CODE POINTER REGISTER
        !           975: *                            THIS INSTRUCTION LOADS THE CURRENT
        !           976: *                            VALUE IN THE CODE POINTER REGISTER
        !           977: *                            INTO REG. (CP) IS UNCHANGED.
        !           978: *
        !           979: *      3.3  LCW  REG         LOAD NEXT CODE WORD
        !           980: *                            THIS INSTRUCTION CAUSES THE WORD
        !           981: *                            POINTED TO BY CP TO BE LOADED INTO
        !           982: *                            THE INDICATED REG. THE VALUE IN CP
        !           983: *                            IS THEN INCREMENTED BY ONE WORD.
        !           984: *                            EXECUTION OF LCW MAY DESTROY XL.
        !           985: *
        !           986: *      3.4  ICP              INCREMENT CP BY ONE WORD
        !           987: *
        !           988: *           ON MACHINES WITH MORE THAN THREE INDEX REGISTERS,
        !           989: *           CP CAN BE TREATED SIMPLY AS AN INDEX REGISTER.
        !           990: *           IN THIS CASE, THE FOLLOWING EQUIVALENCES APPLY.
        !           991: *
        !           992: *           LCP REG IS LIKE MOV REG,CP
        !           993: *           SCP REG IS LIKE MOV CP,REG
        !           994: *           LCW REG IS LIKE MOV (CP)+,REG
        !           995: *           ICP     IS LIKE ICA CP
        !           996: *
        !           997: *           SINCE LCW IS ALLOWED TO DESTROY XL, THE FOLLOWING
        !           998: *           IMPLEMENTATION USING A WORK LOCATION CP$$$ CAN
        !           999: *           ALSO BE USED.
        !          1000: *
        !          1001: *           LCP  REG         MOV  REG,CP$$$
        !          1002: *
        !          1003: *           SCP  REG         MOV  CP$$$,REG
        !          1004: *
        !          1005: *           LCW  REG         MOV  CP$$$,XL
        !          1006: *                            MOV  (XL)+,REG
        !          1007: *                            MOV  XL,CP$$$
        !          1008: *
        !          1009: *           ICP              ICA  CP$$$
        !          1010:        EJC
        !          1011: *
        !          1012: *      -4-  OPERATIONS ON SIGNED INTEGER VALUES
        !          1013: *
        !          1014: *      4.1  LDI  OPS         LOAD INTEGER ACCUMULATOR FROM OPS
        !          1015: *      4.2  ADI  OPS         ADD OPS TO INTEGER ACCUMULATOR
        !          1016: *      4.3  MLI  OPS         MULTIPLY INTEGER ACCUMULATOR BY OPS
        !          1017: *      4.4  SBI  OPS         SUBTRACT OPS FROM INT ACCUMULATOR
        !          1018: *      4.5  DVI  OPS         DIVIDE INTEGER ACCUMULATOR BY OPS
        !          1019: *      4.6  RMI  OPS         SET INT ACCUM TO MOD(INTACC,OPS)
        !          1020: *      4.7  STI  OPS         STORE INTEGER ACCUMULATOR AT OPS
        !          1021: *      4.8  NGI              NEGATE THE VALUE IN THE INTEGER
        !          1022: *                            ACCUMULATOR (CHANGE ITS SIGN)
        !          1023: *
        !          1024: *           THE EQUATION SATISFIED BY OPERANDS AND RESULTS OF
        !          1025: *           DVI AND RMI IS
        !          1026: *                  DIV = QOT * OPS + REM          WHERE
        !          1027: *           DIV = DIVIDEND IN INTEGER ACCUMULATOR
        !          1028: *           QOT = QUOTIENT LEFT IN IA BY DIV
        !          1029: *           OPS = THE DIVISOR
        !          1030: *           REM = REMAINDER LEFT IN IA BY RMI
        !          1031: *           THE SIGN OF THE RESULT OF DVI IS + IF (IA) AND (OPS)
        !          1032: *           HAVE THE SAME SIGN AND IS - IF THEY HAVE OPPOSITE
        !          1033: *           SIGNS. THE SIGN OF (IA) IS ALWAYS USED AS THE SIGN
        !          1034: *           OF THE RESULT OF REM.
        !          1035: *           ASSUMING IN EACH CASE THAT IA CONTAINS THE NUMBER
        !          1036: *           SPECIFIED IN PARENTHESES AND THAT SEVEN AND MSEVN
        !          1037: *           HOLD +7 AND -7 RESP. THE ALGORITHM IS ILLUSTRATED
        !          1038: *           BELOW.
        !          1039: *           (IA = 13)
        !          1040: *           DVI  SEVEN       IA = 1
        !          1041: *           RMI  SEVEN       IA = 6
        !          1042: *           DVI  MSEVN       IA = -1
        !          1043: *           RMI  MSEVN       IA = 6
        !          1044: *           (IA = -13)
        !          1045: *           DVI  SEVEN       IA = -1
        !          1046: *           RMI  SEVEN       IA = -6
        !          1047: *           DVI  MSEVN       IA = 1
        !          1048: *           RMI  MSEVN       IA = -6
        !          1049:        EJC
        !          1050: *
        !          1051: *           THE ABOVE INSTRUCTIONS OPERATE ON A FULL RANGE OF
        !          1052: *           SIGNED INTEGER VALUES. WITH THE EXCEPTION OF LDI AND
        !          1053: *           STI, THESE INSTRUCTIONS MAY CAUSE INTEGER OVERFLOW
        !          1054: *           BY ATTEMPTING TO PRODUCE AN UNDEFINED OR OUT OF
        !          1055: *           RANGE RESULT IN WHICH CASE INTEGER OVERFLOW IS SET,
        !          1056: *           THE RESULT IN (IA) IS UNDEFINED AND THE FOLLOWING
        !          1057: *           INSTRUCTION MUST BE IOV OR INO.
        !          1058: *           PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
        !          1059: *           HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
        !          1060: *           CONDITIONS.
        !          1061: *
        !          1062: *      4.9  INO  PLBL        JUMP TO PLBL IF NO INTEGER OVERFLOW
        !          1063: *      4.10 IOV  PLBL        JUMP TO PLBL IF INTEGER OVERFLOW
        !          1064: *
        !          1065: *           THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
        !          1066: *           FOLLOWING AN INSTRUCTION WHICH CAN CAUSE INTEGER
        !          1067: *           OVERFLOW (ADI, SBI, MLI, DVI, RMI, NGI) AND
        !          1068: *           TEST THE RESULT OF THE PRECEDING INSTRUCTION.
        !          1069: *           IOV AND INO MAY NOT HAVE LABELS.
        !          1070: *
        !          1071: *      4.11 IEQ  PLBL        JUMP TO PLBL IF (IA) EQ 0
        !          1072: *      4.12 IGE  PLBL        JUMP TO PLBL IF (IA) GE 0
        !          1073: *      4.13 IGT  PLBL        JUMP TO PLBL IF (IA) GT 0
        !          1074: *      4.14 ILE  PLBL        JUMP TO PLBL IF (IA) LE 0
        !          1075: *      4.15 ILT  PLBL        JUMP TO PLBL IF (IA) LT 0
        !          1076: *      4.16 INE  PLBL        JUMP TO PLBL IF (IA) NE 0
        !          1077: *
        !          1078: *           THE ABOVE CONDITIONAL JUMP INSTRUCTIONS DO
        !          1079: *           NOT CHANGE THE CONTENTS OF THE ACCUMULATOR.
        !          1080: *           ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
        !          1081: *           PRODUCE NEGATIVE ZERO IN IA PROVIDED THESE
        !          1082: *           INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
        !          1083:        EJC
        !          1084: *
        !          1085: *      -5-  OPERATIONS ON REAL VALUES
        !          1086: *
        !          1087: *      5.1  LDR  OPS         LOAD REAL ACCUMULATOR FROM OPS
        !          1088: *      5.2  STR  OPS         STORE REAL ACCUMULATOR AT OPS
        !          1089: *      5.3  ADR  OPS         ADD OPS TO REAL ACCUMULATOR
        !          1090: *      5.4  SBR  OPS         SUBTRACT OPS FROM REAL ACCUMULATOR
        !          1091: *      5.5  MLR  OPS         MULTIPLY REAL ACCUMULATOR BY OPS
        !          1092: *      5.6  DVR  OPS         DIVIDE REAL ACCUMULATOR BY OPS
        !          1093: *
        !          1094: *           IF THE RESULT OF ANY OF THE ABOVE OPERATIONS CAUSES
        !          1095: *           UNDERFLOW, THE RESULT YIELDED IS 0.0.
        !          1096: *
        !          1097: *           IF THE RESULT OF ANY OF THE ABOVE OPERATIONS IS
        !          1098: *           UNDEFINED OR OUT OF RANGE, REAL OVERFLOW IS SET,
        !          1099: *           THE CONTENTS OF (RA) ARE UNDEFINED AND THE FOLLOWING
        !          1100: *           INSTRUCTION MUST BE EITHER ROV OR RNO.
        !          1101: *           PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
        !          1102: *           HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
        !          1103: *           CONDITIONS.
        !          1104: *
        !          1105: *      5.7  ROV  PLBL        JUMP TO PLBL IF REAL OVERFLOW
        !          1106: *      5.8  RNO  PLBL        JUMP TO PLBL IF NO REAL OVERFLOW
        !          1107: *
        !          1108: *           THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
        !          1109: *           FOLLOWING AN INSTRUCTION WHICH CAN CAUSE REAL
        !          1110: *           OVERFLOW (ADR,SBR,MLR,DVR).
        !          1111: *
        !          1112: *      5.9  NGR              NEGATE REAL ACCUM (CHANGE SIGN)
        !          1113: *
        !          1114: *      5.10 REQ  PLBL        JUMP TO PLBL IF (RA) EQ 0.0
        !          1115: *      5.11 RGE  PLBL        JUMP TO PLBL IF (RA) GE 0.0
        !          1116: *      5.12 RGT  PLBL        JUMP TO PLBL IF (RA) GT 0.0
        !          1117: *      5.13 RLE  PLBL        JUMP TO PLBL IF (RA) LE 0.0
        !          1118: *      5.14 RLT  PLBL        JUMP TO PLBL IF (RA) LT 0.0
        !          1119: *      5.15 RNE  PLBL        JUMP TO PLBL IF (RA) NE 0.0
        !          1120: *
        !          1121: *           THE ABOVE CONDITIONAL INSTRUCTIONS DO NOT AFFECT
        !          1122: *           THE VALUE STORED IN THE REAL ACCUMULATOR.
        !          1123: *           ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
        !          1124: *           PRODUCE NEGATIVE ZERO IN RA PROVIDED THESE
        !          1125: *           INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
        !          1126:        EJC
        !          1127: *
        !          1128: *      -6-  OPERATIONS ON CHARACTER VALUES
        !          1129: *
        !          1130: *           CHARACTER OPERATIONS EMPLOY THE CONCEPT OF A
        !          1131: *           CHARACTER POINTER WHICH USES EITHER
        !          1132: *           INDEX REGISTER XR OR XL (NOT XS).
        !          1133: *
        !          1134: *           A CHARACTER POINTER POINTS TO A SPECIFIC CHARACTER
        !          1135: *           IN A STRING OF CHARACTERS STORED CFP$C CHARS TO A
        !          1136: *           WORD. THE ONLY OPERATIONS PERMITTED ON A CHARACTER
        !          1137: *           POINTER ARE LCH AND SCH. IN PARTICULAR, A CHARACTER
        !          1138: *           POINTER MAY NOT EVEN BE MOVED WITH MOV.
        !          1139: *
        !          1140: *              RESTRICTION 1.
        !          1141: *              --------------
        !          1142: *           IT IS IMPORTANT WHEN CODING IN MINIMAL TO ENSURE
        !          1143: *           THAT NO ACTION OCCURRING BETWEEN THE INITIAL USE OF
        !          1144: *           PLC OR PSC AND THE EVENTUAL CLEARING OF XL OR XR ON
        !          1145: *           COMPLETION OF CHARACTER OPERATIONS CAN INITIATE A
        !          1146: *           GARBAGE COLLECTION. THE LATTER OF COURSE COULD CAUSE
        !          1147: *           THE ADDRESSED CHARACTERS TO BE MOVED LEAVING THE
        !          1148: *           CHARACTER POINTERS POINTING TO RUBBISH.
        !          1149: *
        !          1150: *              RESTRICTION 2.
        !          1151: *              --------------
        !          1152: *           A FURTHER RESTRICTION TO BE OBSERVED IN CODE
        !          1153: *           HANDLING CHARACTER STRINGS, IS THAT STRINGS BUILT
        !          1154: *           DYNAMICALLY SHOULD BE RIGHT PADDED WITH ZERO
        !          1155: *           CHARACTERS TO A FULL WORD BOUNDARY TO PERMIT EASY
        !          1156: *           HASHING AND USE OF CEQ OR CNE IN TESTING STRINGS
        !          1157: *           FOR EQUALITY.
        !          1158: *
        !          1159: *      6.1  PLC  X,OPV       PREPARE CH PTR FOR LCH,CMC,MVC,TRC
        !          1160: *
        !          1161: *      6.2  PSC  X,OPV       PREPARE CHAR. PTR FOR SCH,MVC.
        !          1162: *
        !          1163: *           OPV CAN BE OMITTED IF IT IS ZERO.
        !          1164: *           THE CHAR. INITIALLY ADDRESSED IS DETERMINED BY THE
        !          1165: *           WORD ADDRESS IN X AND THE INTEGER OFFSET OPV.
        !          1166: *           THERE IS AN AUTOMATIC IMPLIED OFFSET OF CFP$F BYTES.
        !          1167: *           CFP$F IS USED TO FORMALLY INTRODUCE INTO MINIMAL A
        !          1168: *           VALUE NEEDED IN TRANSLATING THESE OPCODES WHICH,
        !          1169: *           SINCE MINIMAL ITSELF DOES NOT PRESCRIBE A STRING
        !          1170: *           STRUCTURE IN DETAIL, DEPENDS ON THE CHOICE OF A DATA
        !          1171: *           STRUCTURE FOR STRINGS IN THE MINIMAL PROGRAM.
        !          1172: *           E.G. IF CFP$B = CFP$C = 3, CFP$F = 6, NUM01 = 1, XL
        !          1173: *           POINTS TO A SERIES OF 4 WORDS, ABC/DEF/GHI/JKL, THEN
        !          1174: *               PLC  XL,=NUM01
        !          1175: *           POINTS TO H.
        !          1176:        EJC
        !          1177: *
        !          1178: *      -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
        !          1179: *
        !          1180: *      6.3  LCH  REG,OPC     LOAD CHARACTER INTO REG
        !          1181: *
        !          1182: *      6.4  SCH  REG,OPC     STORE CHARACTER FROM REG
        !          1183: *
        !          1184: *           THESE OPERATIONS ARE DEFINED SUCH THAT THE CHARACTER
        !          1185: *           IS RIGHT JUSTIFIED IN REGISTER REG WITH ZERO BITS TO
        !          1186: *           THE LEFT. AFTER LCH FOR EXAMPLE, IT IS LEGITIMATE
        !          1187: *           TO REGARD REG AS CONTAINING THE ORDINAL INTEGER
        !          1188: *           CORRESPONDING TO THE CHARACTER.
        !          1189: *
        !          1190: *           OPC IS ONE OF THE FOLLOWING THREE POSSIBILITIES.
        !          1191: *
        !          1192: *           (X)              THE CHARACTER POINTED TO BY THE
        !          1193: *                            CHARACTER POINTER IN X. THE
        !          1194: *                            CHARACTER POINTER IS NOT CHANGED.
        !          1195: *
        !          1196: *           (X)+             SAME CHARACTER AS (X) BUT THE
        !          1197: *                            CHARACTER POINTER IS INCREMENTED
        !          1198: *                            TO POINT TO THE NEXT CHARACTER
        !          1199: *                            FOLLOWING EXECUTION.
        !          1200: *
        !          1201: *           -(X)             THE CHARACTER POINTER IS DECRE-
        !          1202: *                            MENTED BEFORE ACCESSING THE
        !          1203: *                            CHARACTER SO THAT THE PREVIOUS
        !          1204: *                            CHARACTER IS REFERENCED.
        !          1205: *
        !          1206: *      6.5  CSC  X           COMPLETE STORE CHARACTERS
        !          1207: *
        !          1208: *           THIS INSTRUCTION MARKS COMPLETION OF A
        !          1209: *           PSC,SCH,SCH,...,SCH SEQUENCE INITIATED BY
        !          1210: *           A  PSC  X INSTRUCTION. NO MORE SCH INSTRUCTIONS
        !          1211: *           USING  X  SHOULD BE OBEYED UNTIL ANOTHER PSC
        !          1212: *           IS OBEYED. THIS MAKES BUFFERING OF SCH CHARS
        !          1213: *           FEASIBLE ON MACHINES LACKING CHARACTER ORDERS.
        !          1214: *           IF CSC IS NOT A NO-OP, IT MUST OBSERVE RESTRICTION 2
        !          1215: *
        !          1216: *           THE FOLLOWING INSTRUCTIONS ARE USED TO COMPARE
        !          1217: *           TWO WORDS CONTAINING CFP$C CHARACTERS.
        !          1218: *           COMPARISONS DISTINCT FROM BEQ,BNE ARE PROVIDED AS
        !          1219: *           ON SOME TARGET MACHINES, THE POSSIBILITY OF THE SIGN
        !          1220: *           BIT BEING SET MAY REQUIRE SPECIAL ACTION.
        !          1221: *           NOTE THAT RESTRICTION 2 ABOVE, EASES USE OF THESE
        !          1222: *           ORDERS IN TESTING COMPLETE STRINGS FOR EQUALITY,
        !          1223: *           SINCE WHOLE WORD TESTS ARE POSSIBLE.
        !          1224: *
        !          1225: *      6.6  CEQ  OPW,OPW,PLBL JUMP TO PLBL IF OPW EQ OPW
        !          1226: *      6.7  CNE  OPW,OPW,PLBL JUMP TO PLBL IF OPW NE OPW
        !          1227:        EJC
        !          1228: *
        !          1229: *      -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
        !          1230: *
        !          1231: *      6.8  CMC  PLBL,PLBL   COMPARE CHARACTERS
        !          1232: *
        !          1233: *           CMC IS USED TO COMPARE TWO CHARACTER STRINGS. BEFORE
        !          1234: *           EXECUTING CMC, REGISTERS ARE SET UP AS FOLLOWS.
        !          1235: *           (XL)             CHARACTER PTR FOR FIRST STRING
        !          1236: *           (XR)             CHARACTER POINTER FOR SECOND STRING
        !          1237: *           (WA)             CHARACTER COUNT (MUST BE .GT. ZERO)
        !          1238: *           XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
        !          1239: *           CONTROL PASSES TO FIRST PLBL IF THE FIRST STRING
        !          1240: *           IS LEXICALLY LESS THAN THE SECOND STRING, AND TO
        !          1241: *           THE SECOND PLBL IF THE FIRST STRING IS LEXICALLY
        !          1242: *           GREATER. CONTROL PASSES TO THE FOLLOWING INSTRUCTION
        !          1243: *           IF THE STRINGS ARE IDENTICAL. AFTER EXECUTING THIS
        !          1244: *           INSTRUCTION, THE VALUES OF XR AND XL ARE SET TO ZERO
        !          1245: *           AND THE VALUE IN (WA) IS UNDEFINED.
        !          1246: *           ARGUMENTS TO CMC MAY BE COMPLETE OR PARTIAL
        !          1247: *           STRINGS, SO MAKING OPTIMISATION TO USE WHOLE WORD
        !          1248: *           COMPARISONS DIFFICULT (DEPENDENT IN GENERAL ON
        !          1249: *           SHIFTS AND MASKING).
        !          1250: *
        !          1251: *      6.9  TRC              TRANSLATE CHARACTERS
        !          1252: *
        !          1253: *           TRC IS USED TO TRANSLATE A CHARACTER STRING USING A
        !          1254: *           SUPPLIED TRANSLATION TABLE. BEFORE EXECUTING TRC THE
        !          1255: *           REGISTERS ARE SET AS FOLLOWS.
        !          1256: *           (XL)             CHAR PTR TO STRING TO BE TRANSLATED
        !          1257: *           (XR)             CHAR PTR TO TRANSLATE TABLE
        !          1258: *           (WA)             LENGTH OF STRING TO BE TRANSLATED
        !          1259: *           XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
        !          1260: *           THE TRANSLATE TABLE CONSISTS OF CFP$A CONTIGUOUS
        !          1261: *           CHARACTERS GIVING THE TRANSLATIONS OF THE CFP$A
        !          1262: *           CHARACTERS IN THE ALPHABET. ON COMPLETION, (XR) AND
        !          1263: *           (XL) ARE SET TO ZERO AND (WA) IS UNDEFINED.
        !          1264:        EJC
        !          1265: *
        !          1266: *      -7-  OPERATIONS ON BIT STRING VALUES
        !          1267: *
        !          1268: *      7.1  ANB  OPW,W       AND BIT STRING VALUES
        !          1269: *      7.2  ORB  OPW,W       OR BIT STRING VALUES
        !          1270: *      7.3  XOB  OPW,W       EXCLUSIVE OR BIT STRING VALUES
        !          1271: *
        !          1272: *           IN THE ABOVE OPERATIONS, THE LOGICAL CONNECTIVE IS
        !          1273: *           APPLIED SEPARATELY TO EACH OF THE CFP$N BITS.
        !          1274: *           THE RESULT IS STORED IN THE SECOND OPERAND LOCATION.
        !          1275: *
        !          1276: *      7.4  CMB  W           COMPLEMENT ALL BITS IN OPW
        !          1277: *
        !          1278: *      7.5  RSH  W,VAL       RIGHT SHIFT BY VAL BITS
        !          1279: *      7.6  LSH  W,VAL       LEFT SHIFT BY VAL BITS
        !          1280: *      7.7  RSX  W,(X)       RIGHT SHIFT W NUMBER OF BITS IN X
        !          1281: *      7.8  LSX  W,(X)       LEFT SHIFT W NUMBER OF BITS IN X
        !          1282: *
        !          1283: *           THE ABOVE SHIFTS ARE LOGICAL SHIFTS IN WHICH BITS
        !          1284: *           SHIFTED OUT ARE LOST AND ZERO BITS SUPPLIED AS
        !          1285: *           REQUIRED. THE SHIFT COUNT IS IN THE RANGE 0-CFP$N.
        !          1286: *
        !          1287: *      7.9  NZB  W,PLBL      JUMP TO PLBL IF W IS NOT
        !          1288: *                            ALL ZERO BITS.
        !          1289: *
        !          1290: *      7.10 ZRB  W,PLBL      JUMP TO PLBL IF W IS ALL ZERO BITS
        !          1291: *
        !          1292: *      7.11 ZGB  OPN         ZEROISE GARBAGE BITS
        !          1293: *
        !          1294: *           OPN CONTAINS A BIT STRING REPRESENTING A WORD
        !          1295: *           OF CHARACTERS FROM A STRING OR SOME FUNCTION
        !          1296: *           FORMED FROM SUCH CHARACTERS (E.G. AS A RESULT OF
        !          1297: *           HASHING). ON A MACHINE WHERE THE WORD SIZE IS NOT A
        !          1298: *           MULTIPLE OF THE CHARACTER SIZE, SOME BITS IN REG MAY
        !          1299: *           BE UNDEFINED. THIS OPCODE REPLACES SUCH BITS BY THE
        !          1300: *           ZERO BIT. ZGB IS A NO-OP IF THE WORD SIZE IS A
        !          1301: *           MULTIPLE OF THE CHARACTER SIZE.
        !          1302:        EJC
        !          1303: *
        !          1304: *      -8-  CONVERSION INSTRUCTIONS
        !          1305: *
        !          1306: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          1307: *           BETWEEN LENGTHS IN BYTES AND LENGTHS IN WORDS.
        !          1308: *
        !          1309: *      8.1  WTB  REG         CONVERT REG FROM WORDS TO BYTES.
        !          1310: *                            THAT IS, MULTIPLY BY CFP$B. THIS IS
        !          1311: *                            A NO-OP IF CFP$B IS ONE.
        !          1312: *
        !          1313: *      8.2  BTW  REG         CONVERT REG FROM BYTES TO WORDS
        !          1314: *                            BY DIVIDING REG BY CFP$B DISCARDING
        !          1315: *                            THE FRACTION. NO-OP IF CFP$B IS ONE
        !          1316: *
        !          1317: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          1318: *           OF ONE WORD INTEGER VALUES (ADDRESSES) TO AND
        !          1319: *           FROM THE FULL SIGNED INTEGER FORMAT.
        !          1320: *
        !          1321: *      8.3  MTI  OPN         THE VALUE OF OPN (AN ADDRESS)
        !          1322: *                            IS MOVED AS A POSITIVE INTEGER
        !          1323: *                            TO THE INTEGER ACCUMULATOR.
        !          1324: *
        !          1325: *      8.4  MFI  OPN,PLBL    THE VALUE CURRENTLY STORED IN THE
        !          1326: *                            INTEGER ACCUMULATOR IS MOVED
        !          1327: *                            TO OPN AS AN ADDRESS IF IT IS IN
        !          1328: *                            THE RANGE 0 TO CFP$M INCLUSIVE.
        !          1329: *                            IF THE ACCUMULATOR VALUE IS
        !          1330: *                            OUTSIDE THIS RANGE, THEN THE RESULT
        !          1331: *                            IN OPN IS UNDEFINED AND CONTROL IS
        !          1332: *                            PASSED TO PLBL. MFI DESTROYS THE
        !          1333: *                            VALUE OF (IA) WHETHER OR NOT
        !          1334: *                            INTEGER OVERFLOW IS SIGNALLED.
        !          1335: *                            PLBL MAY BE OMITTED IF OVERFLOW
        !          1336: *                            IS IMPOSSIBLE.
        !          1337: *
        !          1338: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          1339: *           BETWEEN REAL VALUES AND INTEGER VALUES.
        !          1340: *
        !          1341: *      8.5  ITR              CONVERT INTEGER VALUE IN INTEGER
        !          1342: *                            ACCUMULATOR TO REAL AND STORE IN
        !          1343: *                            REAL ACCUMULATOR (MAY LOSE
        !          1344: *                            PRECISION IN SOME CASES)
        !          1345: *
        !          1346: *      8.6  RTI  PLBL        CONVERT THE REAL VALUE IN RA TO
        !          1347: *                            AN INTEGER AND PLACE RESULT IN IA.
        !          1348: *                            CONVERSION IS BY TRUNCATION OF THE
        !          1349: *                            FRACTION - NO ROUNDING OCCURS.
        !          1350: *                            JUMP TO PLBL IF OUT OF RANGE. (RA)
        !          1351: *                            IS NOT CHANGED IN EITHER CASE.
        !          1352: *                            PLBL MAY BE OMITTED IF OVERFLOW
        !          1353: *                            IS IMPOSSIBLE.
        !          1354:        EJC
        !          1355: *
        !          1356: *      -8-  CONVERSION INSTRUCTIONS (CONTINUED)
        !          1357: *
        !          1358: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR COMPUTING
        !          1359: *           THE LENGTH OF STORAGE REQUIRED FOR A TEXT STRING.
        !          1360: *
        !          1361: *      8.7  CTW  W,VAL       THIS INSTRUCTION COMPUTES THE SUM
        !          1362: *                            (NUMBER OF WORDS REQUIRED TO STORE
        !          1363: *                            W CHARACTERS) + (VAL). THE SUM
        !          1364: *                            IS STORED IN W.
        !          1365: *                            FOR EXAMPLE, IF CFP$C IS 5, AND WA
        !          1366: *                            CONTAINS 32, THEN CTW WA,2
        !          1367: *                            GIVES A RESULT OF 9 IN WA.
        !          1368: *
        !          1369: *      8.8  CTB  W,VAL       CTB IS EXACTLY LIKE CTW EXCEPT THAT
        !          1370: *                            THE RESULT IS IN BYTES. IT HAS THE
        !          1371: *                            SAME EFFECT AS CTW W,VAL  WTB W
        !          1372: *
        !          1373: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          1374: *           FROM INTEGERS TO AND FROM NUMERIC DIGIT CHARACTERS
        !          1375: *           FOR USE IN NUMERIC CONVERSION ROUTINES. THEY EMPLOY
        !          1376: *           NEGATIVE INTEGER VALUES TO ALLOW FOR PROPER
        !          1377: *           CONVERSION OF NUMBERS WHICH CANNOT BE COMPLEMENTED.
        !          1378: *
        !          1379: *      8.9  CVM  PLBL        CONVERT BY MULTIPLICATION
        !          1380: *
        !          1381: *           THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
        !          1382: *           IS MULTIPLIED BY 10. WB CONTAINS THE CHARACTER
        !          1383: *           CODE FOR A DIGIT. THE VALUE OF THIS DIGIT IS THEN
        !          1384: *           SUBTRACTED FROM THE RESULT. IF THE RESULT IS OUT OF
        !          1385: *           RANGE, THEN CONTROL IS PASSED TO PLBL WITH THE
        !          1386: *           RESULT IN (IA) UNDEFINED. EXECUTION OF CVM LEAVES
        !          1387: *           THE RESULT IN (WB) UNDEFINED.
        !          1388: *
        !          1389: *      8.10 CVD              CONVERT BY DIVISION
        !          1390: *
        !          1391: *           THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
        !          1392: *           IS DIVIDED BY 10. THE QUOTIENT (ZERO OR NEGATIVE)
        !          1393: *           IS REPLACED IN THE ACCUMULATOR. THE REMAINDER IS
        !          1394: *           CONVERTED TO THE CHARACTER CODE OF A DIGIT AND
        !          1395: *           PLACED IN WA. FOR EXAMPLE, AN OPERAND OF -523 GIVES
        !          1396: *           A QUOTIENT OF -52 AND A REMAINDER IN WA OF CH$D3.
        !          1397:        EJC
        !          1398: *
        !          1399: *      -9-  BLOCK MOVE INSTRUCTIONS
        !          1400: *
        !          1401: *      THE FOLLOWING INSTRUCTIONS ARE USED FOR TRANSFERRING
        !          1402: *      DATA FROM ONE AREA OF MEMORY TO ANOTHER IN BLOCKS.
        !          1403: *      THEY CAN BE IMPLEMENTED WITH THE INDICATED SERIES OF
        !          1404: *      OTHER MACRO-INSTRUCTIONS, BUT MORE EFFICIENT IMPLE-
        !          1405: *      MENTATIONS WILL BE POSSSIBLE ON MOST MACHINES.
        !          1406: *
        !          1407: *      9.1  MVC              MOVE CHARACTERS
        !          1408: *
        !          1409: *           BEFORE OBEYING THIS ORDER WA,XL,XR SHOLD HAVE BEEN
        !          1410: *           SET UP, THE LATTER TWO BY PLC, PSC RESP.
        !          1411: *           MVC IS EQUIVALENT TO THE SEQUENCE
        !          1412: *
        !          1413: *                  MOV  WB,DUMPB
        !          1414: *                  LCT  WA,WA
        !          1415: *           LOOPC  LCH  WB,(XL)+
        !          1416: *                  SCH  WB,(XR)+
        !          1417: *                  BCT  WA,LOOPC
        !          1418: *                  CSC  XR
        !          1419: *                  MOV  DUMPB,WB
        !          1420: *
        !          1421: *           THE CHARACTER POINTERS ARE BUMPED AS INDICATED
        !          1422: *           AND THE FINAL VALUE OF WA IS UNDEFINED.
        !          1423: *
        !          1424: *      9.2  MVW              MOVE WORDS
        !          1425: *
        !          1426: *           MVW IS EQUIVALENT TO THE SEQUENCE
        !          1427: *
        !          1428: *           LOOPW  MOV  (XL)+,(XR)+
        !          1429: *                  DCA  WA               WA = BYTES TO MOVE
        !          1430: *                  BNZ  WA,LOOPW
        !          1431: *
        !          1432: *           NOTE THAT THIS IMPLIES THAT THE VALUE IN WA IS THE
        !          1433: *           LENGTH IN BYTES WHICH IS A MULTIPLE OF CFP$B.
        !          1434: *           THE INITIAL ADDRESSES IN XR,XL ARE WORD ADDRESSES.
        !          1435: *           AS INDICATED, THE FINAL XR,XL VALUES POINT PAST THE
        !          1436: *           NEW AND OLD REGIONS OF MEMORY RESPECTIVELY.
        !          1437: *           THE FINAL VALUE OF WA IS UNDEFINED.
        !          1438: *           WA,XL,XR MUST BE SET UP BEFORE OBEYING MVW.
        !          1439: *
        !          1440: *      9.3  MWB              MOVE WORDS BACKWARDS
        !          1441: *
        !          1442: *           MWB IS EQUIVALENT TO THE SEQUENCE
        !          1443: *
        !          1444: *           LOOPB  MOV  -(XL),-(XR)
        !          1445: *                  DCA  WA               WA = BYTES TO MOVE
        !          1446: *                  BNZ  WA,LOOPB
        !          1447: *
        !          1448: *           THERE IS A REQUIREMENT THAT THE INITIAL VALUE IN XL
        !          1449: *           BE AT LEAST 256 LESS THAN THE VALUE IN XR. THIS
        !          1450: *           ALLOWS AN IMPLEMENTATION IN WHICH CHUNKS OF 256
        !          1451: *           BYTES ARE MOVED FORWARD (IBM 360, ICL 1900).
        !          1452: *           THE FINAL VALUE OF WA IS UNDEFINED.
        !          1453: *           WA,XL,XR MUST BE SET UP BEFORE OBEYING MWB.
        !          1454:        EJC
        !          1455: *
        !          1456: *      -10- OPERATIONS CONNECTED WITH THE STACK
        !          1457: *
        !          1458: *      THE STACK IS AN AREA IN MEMORY WHICH IS DEDICATED FOR USE
        !          1459: *      IN CONJUNCTION WITH THE STACK POINTER REGISTER (XS). AS
        !          1460: *      PREVIOUSLY DESCRIBED, IT IS USED BY THE JSR AND EXI
        !          1461: *      INSTRUCTIONS AND MAY BE USED FOR STORAGE OF ANY OTHER
        !          1462: *      DATA AS REQUIRED.
        !          1463: *
        !          1464: *      THE STACK BUILDS EITHER WAY IN MEMORY AND AN IMPORTANT
        !          1465: *      RESTRICTION IS THAT THE VALUE IN (XS) MUST BE THE ADDRESS
        !          1466: *      OF THE STACK FRONT AT ALL TIMES SINCE
        !          1467: *      SOME IMPLEMENTATIONS MAY RANDOMLY DESTROY STACK LOCATIONS
        !          1468: *      BEYOND (XS).
        !          1469: *
        !          1470: *      THE STARTING STACK BASE ADDRESS IS PASSED
        !          1471: *      IN (XS) AT THE START OF EXECUTION. DURING EXECUTION IT
        !          1472: *      IS NECESSARY TO MAKE SURE THAT THE STACK DOES NOT
        !          1473: *      OVERFLOW. THIS IS ACHIEVED BY EXECUTING THE FOLLOWING
        !          1474: *      INSTRUCTION PERIODICALLY.
        !          1475: *
        !          1476: *      10.1 CHK              CHECK STACK OVERFLOW
        !          1477: *
        !          1478: *      AFTER SUCCESSFULLY EXECUTING CHK, IT IS PERMISSIBLE TO
        !          1479: *      USE UP TO 100 ADDITIONAL WORDS BEFORE ISSUING ANOTHER CHK
        !          1480: *      THUS CHK NEED NOT BE ISSUED EVERY TIME THE STACK IS
        !          1481: *      EXPANDED. IN SOME IMPLEMENTATIONS, THE CHECKING MAY BE
        !          1482: *      AUTOMATIC AND CHK WILL HAVE NO EFFECT. FOLLOWING THE
        !          1483: *      ABOVE RULE MAKES SURE THAT THE PROGRAM WILL OPERATE
        !          1484: *      CORRECTLY IN IMPLEMENTATIONS WITH NO AUTOMATIC CHECK.
        !          1485: *
        !          1486: *      IF STACK OVERFLOW OCCURS (DETECTED EITHER AUTOMATICALLY
        !          1487: *      OR BY A CHK INSTRUCTION), THEN CONTROL IS PASSED TO THE
        !          1488: *      STACK OVERFLOW SECTION (SEE PROGRAM FORM). NOTE THAT THIS
        !          1489: *      TRANSFER MAY TAKE PLACE FOLLOWING ANY INSTRUCTION WHICH
        !          1490: *      STORES DATA AT A NEW LOCATION ON THE STACK.
        !          1491: *      AFTER STACK OVERFLOW, STACK IS ARBITRARILY POPPED
        !          1492: *      TO GIVE SOME SPACE IN WHICH THE ERROR PROCEDURE MAY
        !          1493: *      OPERATE. OTHERWISE A LOOP OF STACK OVERFLOWS MAY OCCUR.
        !          1494:        EJC
        !          1495: *
        !          1496: *      -11- DATA GENERATION INSTRUCTIONS
        !          1497: *
        !          1498: *      THE FOLLOWING INSTRUCTIONS ARE USED TO GENERATE CONSTANT
        !          1499: *      VALUES IN THE CONSTANT SECTION AND ALSO TO ASSEMBLE
        !          1500: *      INITIAL VALUES IN THE WORKING STORAGE SECTION. THEY
        !          1501: *      MAY NOT APPEAR EXCEPT IN THESE TWO SECTIONS.
        !          1502: *
        !          1503: *      11.1 DAC  ADDR        ASSEMBLE ADDRESS CONSTANT.
        !          1504: *                            GENERATES ONE WORD CONTAINING THE
        !          1505: *                            SPECIFIED ONE WORD INTEGER
        !          1506: *                            VALUE (ADDRESS).
        !          1507: *
        !          1508: *      11.2 DIC  INTEGER     GENERATES AN INTEGER VALUE WHICH
        !          1509: *                            OCCUPIES CFP$I CONSECUTIVE WORDS.
        !          1510: *                            THE OPERAND IS A DIGIT STRING WITH
        !          1511: *                            A REQUIRED LEADING SIGN.
        !          1512: *
        !          1513: *      11.3 DRC  REAL        ASSEMBLES A REAL CONSTANT WHICH
        !          1514: *                            OCCUPIES CFP$R CONSECUTIVE WORDS.
        !          1515: *                            THE OPERAND FORM MUST OBEY THE
        !          1516: *                            RULES FOR A FORTRAN REAL CONSTANT
        !          1517: *                            WITH THE EXTRA REQUIREMENT THAT A
        !          1518: *                            LEADING SIGN BE PRESENT.
        !          1519: *
        !          1520: *      11.4 DTC  DTEXT       DEFINE TEXT CONSTANT. DTEXT
        !          1521: *                            IS STARTED AND ENDED WITH ANY
        !          1522: *                            CHARACTER NOT CONTAINED IN THE
        !          1523: *                            CHARACTERS TO BE ASSEMBLED. THE
        !          1524: *                            CONSTANT OCCUPIES CONSECUTIVE WORDS
        !          1525: *                            AS DICTATED BY THE CONFIGURATION
        !          1526: *                            PARAMETER CFP$C. ANY UNUSED CHARS
        !          1527: *                            IN THE LAST WORD ARE RIGHT FILLED
        !          1528: *                            WITH ZEROS (I.E. THE CHARACTER
        !          1529: *                            WHOSE INTERNAL CODE IS ZERO).
        !          1530: *                            THE STRING CONTAINS A SEQUENCE OF
        !          1531: *                            LETTERS, DIGITS, BLANKS AND ANY OF
        !          1532: *                            THE FOLLOWING SPECIAL CHARACTERS.
        !          1533: *                            =,$.(*)/+-
        !          1534: *                            NO OTHER CHARACTERS
        !          1535: *                            MAY BE USED IN A DTEXT OPERAND.
        !          1536: *
        !          1537: *      11.5 DBC  VAL         ASSEMBLE BIT STRING CONSTANT. THE
        !          1538: *                            OPERAND IS A POSITIVE INTEGER
        !          1539: *                            VALUE WHICH IS INTERPRETED IN
        !          1540: *                            BINARY, RIGHT JUSTIFIED AND LEFT
        !          1541: *                            FILLED WITH ZERO BITS. THUS 5 WOULD
        !          1542: *                            IMPLY THE BIT STRING VALUE 00..101.
        !          1543:        EJC
        !          1544: *
        !          1545: *      -12- SYMBOL DEFINITION INSTRUCTIONS
        !          1546: *
        !          1547: *      THE FOLLOWING INSTRUCTION IS USED TO DEFINE SYMBOLS
        !          1548: *      IN THE DEFINITIONS SECTION. IT MAY NOT BE USED ELSEWHERE.
        !          1549: *
        !          1550: *      12.1 EQU  EQOP        DEFINE SYMBOL
        !          1551: *
        !          1552: *           THE SYMBOL WHICH APPEARS IN THE LABEL FIELD IS
        !          1553: *           DEFINED TO HAVE THE ABSOLUTE VALUE GIVEN
        !          1554: *           BY THE EQOP OPERAND. A GIVEN SYMBOL MAY BE DEFINED
        !          1555: *           ONLY ONCE IN THIS MANNER, AND ANY SYMBOLS OCCURING
        !          1556: *           IN EQOP MUST BE PREVIOUSLY DEFINED.
        !          1557: *
        !          1558: *           THE FOLLOWING ARE THE POSSIBILITIES FOR EQOP
        !          1559: *
        !          1560: *           VAL              THE INDICATED VALUE IS USED
        !          1561: *
        !          1562: *           VAL+VAL          THE SUM OF THE TWO VALUES IS USED.
        !          1563: *                            THIS SUM MUST NOT EXCEED CFP$M
        !          1564: *
        !          1565: *           VAL-VAL          THE DIFFERENCE BETWEEN THE TWO
        !          1566: *                            VALUES (MUST BE POSITIVE) IS USED.
        !          1567: *
        !          1568: *           *                THIS FORMAT DEFINES THE LABEL BY
        !          1569: *                            USING A VALUE SUPPLIED BY THE
        !          1570: *                            MINIMAL TRANSLATOR. VALUES ARE
        !          1571: *                            REQUIRED FOR THE
        !          1572: *           CFP$X            (CONFIGURATION PARAMETERS)
        !          1573: *           E$XXX            (ENVIRONMENT PARAMETERS)
        !          1574: *           CH$XX            (CHARACTER CODES).
        !          1575: *                            IN ORDER FOR A TRANSLATOR TO
        !          1576: *                            HANDLE THIS FORMAT CORRECTLY THE
        !          1577: *                            DEFINITIONS SECTION MUST BE
        !          1578: *                            CONSULTED FOR DETAILS OF REQUIRED
        !          1579: *                            SYMBOLS AS LISTED AT THE FRONT OF
        !          1580: *                            THE SECTION.
        !          1581:        EJC
        !          1582: *
        !          1583: *      SYMBOL DEFINITION INSTRUCTIONS (CONTINUED)
        !          1584: *
        !          1585: *      THE FOLLOWING INSTRUCTIONS MAY BE USED TO DEFINE SYMBOLS
        !          1586: *      IN THE PROCEDURE SECTION. THEY MAY NOT BE USED IN
        !          1587: *      ANY OTHER PART OF THE PROGRAM.
        !          1588: *
        !          1589: *      12.2 EXP              DEFINE EXTERNAL PROCEDURE
        !          1590: *
        !          1591: *           EXP DEFINES THE SYMBOL APPEARING IN THE LABEL FIELD
        !          1592: *           TO BE THE NAME OF AN EXTERNAL PROCEDURE WHICH CAN BE
        !          1593: *           REFERENCED IN A SUBSEQUENT JSR INSTRUCTION. THE
        !          1594: *           CODING FOR THE PROCEDURE IS EXTERNAL TO THE
        !          1595: *           CODING OF THE SOURCE PROGRAM IN THIS LANGUAGE.
        !          1596: *           THE CODE FOR EXTERNAL PROCEDURES MAY BE
        !          1597: *           REFERRED TO COLLECTIVELY AS THE OPERATING SYSTEM
        !          1598: *           INTERFACE, OR MORE BRIEFLY, OSINT, AND WILL
        !          1599: *           FREQUENTLY BE A SEPARATELY COMPILED SEGMENT OF CODE
        !          1600: *           LOADED WITH SPITBOL TO PRODUCE A COMPLETE SYSTEM.
        !          1601: *
        !          1602: *      12.3 INP  PTYP,INT    DEFINE INTERNAL PROCEDURE
        !          1603: *
        !          1604: *           INP DEFINES THE SYMBOL APPEARING IN THE LABEL FIELD
        !          1605: *           TO BE THE NAME OF AN INTERNAL PROCEDURE AND GIVES
        !          1606: *           ITS TYPE AND NUMBER OF EXIT PARAMETERS. THE LABEL
        !          1607: *           CAN BE REFERENCED IN JSR INSTRUCTIONS AND
        !          1608: *           IT MUST APPEAR LABELLING A PRC INSTRUCTION IN THE
        !          1609: *           PROGRAM SECTION.
        !          1610: *
        !          1611: *      12.4 INR              DEFINE INTERNAL ROUTINE
        !          1612: *
        !          1613: *           INR DEFINES THE SYMBOL APPEARING IN THE LABEL
        !          1614: *           FIELD TO BE THE NAME OF AN INTERNAL ROUTINE. THE
        !          1615: *           LABEL MAY BE REFERENCED IN ANY TYPE OF BRANCH ORDER
        !          1616: *           AND IT MUST APPEAR LABELLING A RTN INSTRUCTION IN
        !          1617: *           THE PROGRAM SECTION.
        !          1618:        EJC
        !          1619: *
        !          1620: *      -13- ASSEMBLY LISTING LAYOUT INSTRUCTIONS
        !          1621: *
        !          1622: *      13.1 EJC              EJECT TO NEXT PAGE
        !          1623: *
        !          1624: *      13.2 TTL  TEXT        SET NEW ASSEMBLY TITLE
        !          1625: *
        !          1626: *           TTL IMPLIES AN IMMEDIATE EJECT OF THE
        !          1627: *           ASSEMBLY LISTING TO PRINT THE NEW TITLE.
        !          1628: *
        !          1629: *           THE USE OF TTL AND EJC CARDS IS SUCH THAT THE
        !          1630: *           PROGRAM WILL LIST NEATLY IF THE PRINTER PRINTS
        !          1631: *           AS MANY AS 58 LINES PER PAGE. IN THE EVENT THAT
        !          1632: *           THE PRINTER DEPTH IS LESS THAN THIS, OR IF THE
        !          1633: *           LISTING CONTAINS INTERSPERSED LINES (SUCH AS ACTUAL
        !          1634: *           GENERATED CODE), THEN THE FORMAT MAY BE UPSET.
        !          1635: *
        !          1636: *           LINES STARTING WITH AN ASTERISK ARE COMMENT LINES
        !          1637: *           WHICH CAUSE NO CODE TO BE GENERATED AND MAY OCCUR
        !          1638: *           FREELY ANYWHERE IN THE PROGRAM. THE FORMAT FOR
        !          1639: *           COMMENT LINES IS GIVEN IN SECTION -15-.
        !          1640:        EJC
        !          1641: *
        !          1642: *      -14- PROGRAM FORM
        !          1643: *
        !          1644: *           THE PROGRAM CONSISTS OF SEPARATE SECTIONS SEPARATED
        !          1645: *           BY SEC OPERATIONS. THE SECTIONS MUST APPEAR IN THE
        !          1646: *           FOLLOWING SPECIFIED ORDER.
        !          1647: *
        !          1648: *      14.1 SEC              START OF PROCEDURE SECTION
        !          1649: *
        !          1650: *           (PROCEDURE SECTION)
        !          1651: *
        !          1652: *           SEC               START OF DEFINITIONS SECTION
        !          1653: *
        !          1654: *           (DEFINITIONS SECTION)
        !          1655: *
        !          1656: *           SEC               START OF CONSTANT STORAGE SECTION
        !          1657: *
        !          1658: *           (CONSTANT STORAGE SECTION)
        !          1659: *
        !          1660: *           SEC               START OF WORKING STORAGE SECTION
        !          1661: *
        !          1662: *           (WORKING STORAGE SECTION)
        !          1663: *
        !          1664: *           SEC               START OF PROGRAM SECTION
        !          1665: *
        !          1666: *           (PROGRAM SECTION)
        !          1667: *
        !          1668: *           SEC               START OF STACK OVERFLOW SECTION
        !          1669: *
        !          1670: *           (STACK OVERFLOW SECTION)
        !          1671: *
        !          1672: *           SEC               START OF ERROR SECTION
        !          1673: *
        !          1674: *           (ERROR SECTION)
        !          1675: *
        !          1676: *      14.2 END              END OF ASSEMBLY
        !          1677:        EJC
        !          1678: *
        !          1679: *      SECTION 10 - PROGRAM FORM
        !          1680: *
        !          1681: *      PROCEDURE SECTION
        !          1682: *
        !          1683: *           THE PROCEDURE SECTION CONTAINS ALL THE EXP
        !          1684: *           INSTRUCTIONS FOR EXTERNALLY AVAILABLE PROCEDURES
        !          1685: *           AND INP,INR OPCODES FOR INTERNAL PROCEDURES,ROUTINES
        !          1686: *           SO THAT A SINGLE PASS MINIMAL TRANSLATOR HAS ADVANCE
        !          1687: *           KNOWLEDGE OF PROCEDURE TYPES WHEN TRANSLATING CALLS.
        !          1688: *
        !          1689: *      DEFINITIONS SECTION
        !          1690: *
        !          1691: *           THE DEFINITIONS SECTION CONTAINS EQU INSTRUCTIONS
        !          1692: *           WHICH DEFINE SYMBOLS REFERENCED LATER ON IN THE
        !          1693: *           PROGRAM, CONSTANT AND WORK SECTIONS.
        !          1694: *
        !          1695: *      CONSTANT STORAGE SECTION
        !          1696: *
        !          1697: *           THE CONSTANT STORAGE SECTION CONSISTS ENTIRELY
        !          1698: *           OF CONSTANTS ASSEMBLED WITH THE DAC,DIC,DRC,DTC,DBC
        !          1699: *           ASSEMBLY OPERATIONS. THESE CONSTANTS CAN BE FREELY
        !          1700: *           REFERENCED BY THE PROGRAM INSTRUCTIONS.
        !          1701: *
        !          1702: *      WORKING STORAGE SECTION
        !          1703: *
        !          1704: *           THE WORKING STORAGE SECTION CONSISTS ENTIRELY OF
        !          1705: *           DAC,DIC,DRC,DBC,DTC INSTRUCTIONS TO DEFINE A FIXED
        !          1706: *           LENGTH WORK AREA. THE WORK LOCATIONS IN THIS AREA
        !          1707: *           CAN BE DIRECTLY REFERENCED IN PROGRAM INSTRUCTIONS.
        !          1708: *           THE AREA IS INITIALIZED IN ACCORDANCE WITH THE
        !          1709: *           VALUES ASSEMBLED IN THE INSTRUCTIONS.
        !          1710: *
        !          1711: *      PROGRAM SECTION
        !          1712: *
        !          1713: *           THE PROGRAM SECTION CONTAINS PROGRAM INSTRUCTIONS
        !          1714: *           AND ASSOCIATED OPERATIONS (SUCH AS PRC, ENP, ENT).
        !          1715: *           CONTROL IS PASSED TO THE FIRST INSTRUCTION IN THIS
        !          1716: *           SECTION WHEN EXECUTION IS INITIATED.
        !          1717: *
        !          1718: *      STACK OVERFLOW SECTION
        !          1719: *
        !          1720: *           THE STACK OVERFLOW SECTION CONTAINS INSTRUCTIONS
        !          1721: *           LIKE THE PROGRAM SECTION. CONTROL IS PASSED TO THE
        !          1722: *           FIRST INSTRUCTION IN THIS SECTION FOLLOWING THE
        !          1723: *           OCCURRENCE OF STACK OVERFLOW, SEE CHK INSTRUCTION.
        !          1724: *
        !          1725: *      ERROR SECTION
        !          1726: *
        !          1727: *           THE ERROR SECTION CONTAINS INSTRUCTIONS LIKE THE
        !          1728: *           PROGRAM SECTION. CONTROL IS PASSED TO THE FIRST
        !          1729: *           INSTRUCTION IN THIS SECTION WHEN A PROCEDURE EXIT
        !          1730: *           CORRESPONDS TO AN ERROR PARAMETER (SEE ERR)
        !          1731: *           OR WHEN AN ERB OPCODE IS OBEYED. THE ERROR CODE
        !          1732: *           MUST CLEAN UP THE MAIN STACK AND CATER FOR THE
        !          1733: *           POSSIBILITY THAT A SUBROUTINE STACK MAY NEED CLEAN
        !          1734: *           UP.
        !          1735:        EJC
        !          1736: *      OSINT
        !          1737: *
        !          1738: *           THOUGH NOT PART OF THE MINIMAL SOURCE, IT IS USEFUL
        !          1739: *           TO REFER TO THE COLLECTION OF INITIALISATION AND
        !          1740: *           EXP ROUTINES AS OSINT (OPERATING SYSTEM INTERFACE).
        !          1741: *           ERRORS OCCURRING WITHIN OSINT PROCEDURES ARE
        !          1742: *           USUALLY HANDLED BY MAKING AN ERROR RETURN. IF THIS
        !          1743: *           IS NOT FEASIBLE OR APPROPRIATE, OSINT MAY USE THE
        !          1744: *           MINIMAL ERROR SECTION TO REPORT ERRORS DIRECTLY BY
        !          1745: *           BRANCHING TO IT WITH A SUITABLE NUMERIC ERROR
        !          1746: *           CODE IN WA.
        !          1747:        EJC
        !          1748: *
        !          1749: *      SECTION 11 - STATEMENT FORMAT
        !          1750: *
        !          1751: *      ALL LABELS ARE EXACTLY FIVE CHARACTERS LONG AND START
        !          1752: *      WITH THREE LETTERS (ABCDEFGHIJKLMNOPQRSTUVWXY$) FOLLOWED
        !          1753: *      BY TWO LETTERS OR DIGITS.
        !          1754: *      THE LETTER Z MAY NOT BE USED IN MINIMAL SYMBOLS BUT $ IS
        !          1755: *      PERMITTED.
        !          1756: *      FOR IMPLEMENTATIONS WHERE $ MAY NOT APPEAR IN THE
        !          1757: *      TARGET CODE , A SIMPLE SUBSTITUTION OF Z FOR $
        !          1758: *      MAY THUS BE MADE WITHOUT RISK OF PRODUCING NON-UNIQUE
        !          1759: *      SYMBOLS.
        !          1760: *      THE LETTER Z IS HOWEVER PERMITTED IN OPCODE MNEMONICS AND
        !          1761: *      IN COMMENTS.
        !          1762: *
        !          1763: *      MINIMAL STATEMENTS ARE IN A FIXED FORMAT AS FOLLOWS.
        !          1764: *
        !          1765: *      COLS 1-5              LABEL IF ANY (ELSE BLANK)
        !          1766: *
        !          1767: *      COLS 6-7              ALWAYS BLANK
        !          1768: *
        !          1769: *      COLS 8-10             OPERATION MNEMONIC
        !          1770: *
        !          1771: *      COLS 11-12            BLANKS
        !          1772: *
        !          1773: *      COLS 13-28            OPERAND FIELD, TERMINATED BY A
        !          1774: *                            BLANK. MAY OCCASIONALLY
        !          1775: *                            EXTEND PAST COLUMN 28.
        !          1776: *
        !          1777: *      COLS 30-64            COMMENT. ALWAYS SEPARATED FROM THE
        !          1778: *                            OPERAND FIELD BY AT LEAST ONE BLANK
        !          1779: *                            MAY OCCASIONALLY START AFTER COLUMN
        !          1780: *                            30 IF THE OPERAND EXTENDS PAST 28.
        !          1781: *                            A SPECIAL EXCEPTION OCCURS FOR THE
        !          1782: *                            IFF INSTRUCTION, WHOSE COMMENT MAY
        !          1783: *                            BE ONLY 20 CHARACTERS LONG (30-49).
        !          1784: *
        !          1785: *      COLS 65 ON            UNUSED
        !          1786: *
        !          1787: *
        !          1788: *      COMMENT LINES HAVE THE FOLLOWING FORMAT
        !          1789: *
        !          1790: *      COL 1                 ASTERISK
        !          1791: *
        !          1792: *      COLS 2-7              BLANK
        !          1793: *
        !          1794: *      COLS 8-64             ARBITRARY TEXT, RESTRICTED TO THE
        !          1795: *                            FORTRAN CHARACTER SET.
        !          1796: *
        !          1797: *
        !          1798: *      THE FORTRAN CHARACTER SET IS A-Z 0-9 =,$.(*)-/+
        !          1799:        EJC
        !          1800: *
        !          1801: *      SECTION 12 - PROGRAM EXECUTION
        !          1802: *
        !          1803: *      EXECUTION OF THE PROGRAM BEGINS WITH THE FIRST
        !          1804: *      INSTRUCTION IN THE PROGRAM SECTION.
        !          1805: *
        !          1806: *      IN ADDITION TO THE FIXED LENGTH MEMORY REGIONS DEFINED
        !          1807: *      BY THE ASSEMBLY, THERE ARE TWO DYNAMICALLY ALLOCATED
        !          1808: *      MEMORY REGIONS AS FOLLOWS.
        !          1809: *
        !          1810: *      DATA AREA             THIS IS AN AREA AVAILABLE TO THE
        !          1811: *                            PROGRAM FOR GENERAL STORAGE OF DATA
        !          1812: *                            ANY DATA VALUE MAY BE STORED IN
        !          1813: *                            THIS AREA EXCEPT INSTRUCTIONS.
        !          1814: *                            IN SOME IMPLEMENTATIONS, IT MAY BE
        !          1815: *                            POSSIBLE TO INCREASE THE SIZE OF
        !          1816: *                            THIS AREA DYNAMICALLY BY ADDING
        !          1817: *                            WORDS AT THE TOP END WITH A CALL
        !          1818: *                            TO A SYSTEM PROCEDURE.
        !          1819: *
        !          1820: *      STACK AREA            THIS REGION OF MEMORY HOLDS
        !          1821: *                            THE STACK USED FOR SUBROUTINE CALLS
        !          1822: *                            AND OTHER STORAGE OF ONE WORD
        !          1823: *                            INTEGER VALUES (ADDRESSES). THIS
        !          1824: *                            IS THE STACK ASSOCIATED WITH
        !          1825: *                            INDEX REGISTER XS.
        !          1826: *
        !          1827: *      THE LOCATIONS AND SIZES OF THESE AREAS ARE SPECIFIED
        !          1828: *      BY THE VALUES IN THE REGISTERS AT THE START OF PROGRAM
        !          1829: *      EXECUTION AS FOLLOWS.
        !          1830: *
        !          1831: *      (XS)                  ADDRESS ONE PAST THE STACK BASE.
        !          1832: *                            E.G. IF XS IS 23456, A D-STACK WILL
        !          1833: *                            OCCUPY WORDS 23455,23454,...
        !          1834: *                            WHEREAS A U-STACK WILL OCCUPY
        !          1835: *                            23457,23458,...
        !          1836: *
        !          1837: *      (XR)                  ADDRESS OF THE FIRST WORD
        !          1838: *                            IN THE DATA AREA
        !          1839: *
        !          1840: *      (XL)                  ADDRESS OF THE LAST WORD IN THE
        !          1841: *                            DATA AREA.
        !          1842: *
        !          1843: *
        !          1844: *      (WA,WB,WC,IA,RA,CP)      ZERO
        !          1845: *
        !          1846: *      THERE IS NO EXPLICIT WAY TO TERMINATE THE EXECUTION OF A
        !          1847: *      PROGRAM. THIS FUNCTION IS PERFORMED BY AN APPROPRIATE
        !          1848: *      SYSTEM PROCEDURE REFERENCED WITH THE SYSEJ INSTRUCTION.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.