V10/cmd/spitbol/minimal

       TTL  MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
       EJC
*
*      THE FOLLOWING SECTIONS DESCRIBE THE IMPLEMENTATION
*      LANGUAGE ORIGINALLY DEVELOPED FOR SPITBOL BUT NOW MORE
*      WIDELY USED. MINIMAL IS AN ASSEMBLY LANGUAGE
*      FOR AN IDEALIZED MACHINE. THE FOLLOWING DESCRIBES THE
*      BASIC CHARACTERISTICS OF THIS MACHINE.
*
*      SECTION 1 - CONFIGURATION PARAMETERS
*
*      THERE ARE SEVERAL PARAMETERS WHICH MAY VARY WITH THE
*      TARGET MACHINE. THE MACRO-PROGRAM IS INDEPENDENT OF THE
*      ACTUAL DEFINITIONS OF THESE PARAMETERS.
*
*      THE DEFINITIONS OF THESE PARAMETERS ARE SUPPLIED BY
*      THE TRANSLATION PROGRAM TO MATCH THE TARGET MACHINE.
*
*      CFP$A                 NUMBER OF DISTINCT CHARACTERS IN
*                            INTERNAL ALPHABET IN THE RANGE
*                            64 LE CFP$A LE MXLEN.
*
*      CFP$B                 NUMBER OF BYTES IN A WORD WHERE A
*                            BYTE IS THE AMOUNT OF STORAGE
*                            ADDRESSED BY THE LEAST SIGNIFICANT
*                            ADDRESS BIT.
*
*      CFP$C                 NUMBER OF CHARACTERS WHICH CAN
*                            BE STORED IN A SINGLE WORD.
*
*      CFP$F                 BYTE OFFSET FROM START OF A STRING
*                            BLOCK TO THE FIRST CHARACTER.
*                            DEPENDS BOTH ON TARGET MACHINE AND
*                            STRING DATA STRUCTURE. SEE PLC, PSC
*
*      CFP$I                 NUMBER OF WORDS IN A SIGNED
*                            INTEGER CONSTANT
*
*      CFP$M                 THE LARGEST POSITIVE INTEGER
*                            OF FORM 2**N - 1 WHICH CAN BE
*                            STORED IN A SINGLE WORD. N
*                            WILL OFTEN BE CFP$N BUT NEED NOT BE
*
*
*      CFP$N                 NUMBER OF BITS WHICH CAN BE STORED
*                            IN A ONE WORD BIT STRING.
*
*      CFP$R                 NUMBER OF WORDS IN A REAL CONSTANT
*
*      CFP$S                 NUMBER OF SIGNIFICANT DIGITS TO
*                            BE OUTPUT IN CONVERSION OF A REAL
*                            QUANTITY. THE INTEGER CONSISTING OF
*                            THIS NUMBER OF 9S MUST NOT BE TOO
*                            LARGE TO FIT IN THE INTEGER ACCUM.
*
*      CFP$X                 NUMBER OF DIGITS IN REAL EXPONENT
       EJC
*
*      SECTION 2 - MEMORY
*
*      MEMORY IS ORGANIZED INTO WORDS WHICH EACH CONTAIN CFP$B
*      BYTES. FOR WORD MACHINES CFP$B, WHICH IS A CONFIGURATION
*      PARAMETER, MAY BE ONE IN WHICH CASE WORDS AND BYTES ARE
*      IDENTICAL. TO EACH WORD CORRESPONDS AN ADDRESS WHICH IS
*      A NON-NEGATIVE QUANTITY WHICH IS A MULTIPLE OF CFP$B.
*      DATA IS ORGANIZED INTO WORDS AS FOLLOWS.
*
*      1)   A SIGNED INTEGER VALUE OCCUPIES CFP$I CONSECUTIVE
*           WORDS (CFP$I IS A CONFIGURATION PARAMETER).
*           THE RANGE MAY INCLUDE MORE NEGATIVE NUMBERS THAN
*           POSITIVE (E.G. THE TWOS COMPLEMENT REPRESENTATION).
*
*      2)   A SIGNED REAL VALUE OCCUPIES CFP$R CONSECUTIVE
*           WORDS. (CFP$R IS A CONFIGURATION PARAMETER).
*
*      3)   CFP$C CHARACTERS MAY BE STORED IN A SINGLE WORD
*           (CFP$C IS A CONFIGURATION PARAMETER).
*
*      4)   A BIT STRING CONTAINING CFP$N BITS CAN BE STORED IN
*           A SINGLE WORD (CFP$N IS A CONFIGURATION PARAMETER).
*
*      5)   A WORD CAN CONTAIN A NON-NEGATIVE INTEGER VALUE IN
*           THE RANGE (0 LE N LE CFP$M). THESE INTEGER VALUES
*           MAY REPRESENT ADDRESSES OF OTHER WORDS AND SOME OF
*           THE INSTRUCTIONS USE THIS FACT TO PROVIDE INDEXING
*           AND INDIRECTION FACILITIES.
*
*      6)   PROGRAM INSTRUCTIONS OCCUPY WORDS IN AN UNDEFINED
*           MANNER. DEPENDING ON THE ACTUAL IMPLEMENTATION,
*           INSTRUCTIONS MAY OCCUPY SEVERAL WORDS, OR PART OF
*           A WORD, OR EVEN BE SPLIT OVER WORD BOUNDARIES.
*
*      THE FOLLOWING REGIONS OF MEMORY ARE AVAILABLE TO THE
*      PROGRAM. EACH REGION CONSISTS OF A SERIES OF WORDS WITH
*      CONSECUTIVE ADDRESSES.
*
*      1)   CONSTANT SECTION           ASSEMBLED CONSTANTS
*      2)   WORKING STORAGE SECTION    ASSEMBLED WORK AREAS
*      3)   PROGRAM SECTION            ASSEMBLED INSTRUCTIONS
*      4)   STACK AREA                 ALLOCATED STACK AREA
*      5)   DATA AREA                  ALLOCATED DATA AREA
       EJC
*
*      SECTION 3 - REGISTERS
*
*      THERE ARE THREE INDEX REGISTERS CALLED XR,XL,XS. IN
*      ADDITION XL MAY SOMETIMES BE REFERRED TO BY THE ALIAS
*      OF XT - SEE SECTION 4. ANY OF THE ABOVE
*      REGISTERS MAY HOLD A POSITIVE INTEGER IN THE RANGE
*      (0 LE N LE CFP$M). WHEN THE INDEX REGISTER IS USED FOR
*      INDEXING PURPOSES, THIS MUST BE AN APPROPRIATE ADDRESS.
*      XS IS SPECIAL IN THAT IT IS USED TO POINT TO THE TOP
*      ITEM OF A STACK IN MEMORY. THE STACK MAY BUILD UP OR
*      DOWN IN MEMORY.SINCE IT IS REQUIRED THAT XS POINTS TO THE
*      STACK TOP BUT ACCESS TO ITEMS BELOW THE TOP IS PERMITTED,
*      REGISTERS XS AND XT MAY BE USED WITH SUITABLE OFFSETS
*      TO INDEX STACKED ITEMS. ONLY XS AND XT MAY BE USED FOR
*      THIS PURPOSE SINCE THE DIRECTION OF THE OFFSET IS
*      TARGET MACHINE DEPENDENT. XT IS A SYNONYM FOR XL
*      WHICH THEREFORE CANNOT BE USED IN CODE SEQUENCES
*      REFERENCING XT.
*      THE STACK IS USED FOR S-R LINKAGE AND TEMPORARY
*      DATA STORAGE FOR WHICH THE STACK ARRANGEMENT IS SUITABLE.
*      XR,XL CAN ALSO CONTAIN A CHARACTER POINTER IN CONJUNCTION
*      WITH THE CHARACTER INSTRUCTIONS (SEE DESCRIPTION OF PLC).
       EJC
*
*      THERE ARE THREE WORK REGISTERS CALLED WA,WB,WC WHICH
*      CAN CONTAIN ANY DATA ITEM WHICH CAN BE STORED IN A
*      SINGLE MEMORY WORD. IN FACT, THE WORK REGISTERS ARE JUST
*      LIKE MEMORY LOCATIONS EXCEPT THAT THEY HAVE NO ADDRESSES
*      AND ARE REFERENCED IN A SPECIAL WAY BY THE INSTRUCTIONS.
*      NOTE THAT REGISTERS WA,WB HAVE SPECIAL USES IN CONNECTION
*      WITH THE CVD, CVM, MVC, MVW, MWB, CMC, TRC INSTRUCTIONS.
*      REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
*      SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
*      VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
*      EXCEPT AS NOTED IN THE FOLLOWING RESTRICTION ON SIMPLE
*      DUMP/RESTORE OPERATIONS.
*
*          RESTRICTION
*          -----------
*
*      IF IA AND WA OVERLAP THEN
*          STI  IASAV
*          LDI  IASAV
*      DOES NOT CHANGE WC, AND
*          MOV  WC,WCSAV
*          MOV  WCSAV,WC
*      DOES NOT CHANGE IA.
*
*
*
*      THERE IS AN INTEGER ACCUMULATOR (IA) WHICH IS CAPABLE OF
*      HOLDING A SIGNED INTEGER VALUE (CFP$I WORDS LONG).
*      REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
*      SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
*      VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
*      EXCEPT AS NOTED IN THE ABOVE RESTRICTION ON SIMPLE
*      DUMP/RESTORE OPERATIONS.
*
*
*
*      THERE IS A SINGLE REAL ACCUMULATOR (RA) WHICH CAN HOLD
*      ANY REAL VALUE AND IS COMPLETELY SEPARATE FROM ANY OF
*      THE OTHER REGISTERS OR PROGRAM ACCESSIBLE LOCATIONS.
*
*
*
*      THE CODE POINTER REGISTER (CP) IS A SPECIAL INDEX
*      REGISTER FOR USE IN IMPLEMENTATIONS OF INTERPRETORS.
*      IT IS USED TO CONTAIN A PSEUDO-CODE POINTER AND CAN
*      ONLY BE AFFECTED BY ICP, LCP, SCP AND LCW INSTRUCTIONS.
       EJC
*      SECTION 4 - THE STACK
*
*      THE FOLLOWING NOTES ARE TO GUIDE BOTH IMPLEMENTORS OF
*      SYSTEMS WRITTEN IN MINIMAL AND MINIMAL PROGRAMMERS IN
*      DEALING WITH STACK MANIPULATION. IMPLEMENTATION OF A
*      DOWNWARDS BUILDING STACK IS EASIEST AND IN GENERAL IS
*      TO BE PREFERRED, IN WHICH CASE IT IS MERELY NECESSARY TO
*      CONSIDER XT AS AN ALTERNATIVE NAME FOR XL.
*
*      THE MINIMAL VIRTUAL MACHINE INCLUDES A STACK AND HAS
*      OPERAND FORMATS -(XS) AND (XS)+ FOR PUSHING AND POPPING
*      ITEMS WITH AN IMPLICATION THAT THE STACK BUILDS DOWN IN
*      MEMORY (A D-STACK). HOWEVER ON SOME TARGET MACHINES IT IS
*      BETTER FOR THE STACK TO BUILD UP (A U-STACK).
*      A STACK ADDRESSED ONLY BY PUSH AND POP OPERATIONS CAN
*      BUILD IN EITHER DIRECTION WITH NO COMPLICATION BUT
*      SUCH A PURE SCHEME OF STACK ACCESS PROVES RESTRICTIVE.
*      HENCE IT IS PERMITTED TO ACCESS BURIED ITEMS USING AN
*      INTEGER OFFSET PAST THE INDEX REGISTER POINTING TO THE
*      STACK TOP. ON TARGET MACHINES THIS OFFSET WILL BE
*      POSITIVE/NEGATIVE FOR D-STACKS/U-STACKS AND THIS MUST
*      BE ALLOWED FOR IN THE TRANSLATION.
*      A FURTHER RESTRICTION IS THAT AT NO TIME MAY AN ITEM BE
*      PLACED ABOVE THE STACK TOP. FOR SOME OPERATIONS THIS
*      MAKES IT CONVENIENT TO ADVANCE THE STACK POINTER AND THEN
*      ADDRESS ITEMS BELOW IT USING A SECOND INDEX REGISTER.
*      THE PROBLEM OF SIGNED OFFSETS PAST SUCH A REGISTER THEN
*      ARISES. TO DISTINGUISH STACK OFFSETS, WHICH IN SOME
*      IMPLEMENTATIONS MAY BE NEGATIVE, FROM NON-STACK OFFSETS
*      WHICH ARE INVARIABLY POSITIVE, XT, AN ALIAS OR
*      SYNONYM FOR XL IS USED. FOR A U-STACK IMPLEMENTATION, THE
*      MINIMAL TRANSLATOR SHOULD NEGATE THE SIGN OF OFFSETS
*      APPLIED TO BOTH (XS) AND (XT).
*      PROGRAMMERS SHOULD NOTE THAT SINCE XT IS NOT A
*      SEPARATE REGISTER, XL SHOULD NOT BE USED IN CODE WHERE
*      XT IS REFERENCED. OTHER MODIFICATIONS NEEDED IN U-STACK
*      TRANSLATIONS ARE IN THE ADD, SUB, ICA, DCA OPCODES
*      APPLIED TO XS, XT. FOR EXAMPLE
*
*      MINIMAL           D-STACK TRANS.  U-STACK TRANS.
*
*      MOV  WA,-(XS)     SBI  XS,1       ADI  XS,1
*                        STO  WA,(XS)    STO  WA,(XS)
*      MOV  (XT)+,WC     LOD  WC,(XL)    LOD  WC,(XL)
*                        ADI  XL,1       SBI  XL,1
*      ADD  =SEVEN,XS    ADI  XS,7       SBI  XS,7
*      MOV  2(XT),WA     LOD  WA,2(XL)   LOD  WA,-2(XL)
*      ICA  XS           ADI  XS,1       SBI  XS,1
*
*      NOTE THAT FORMS SUCH AS
*      MOV  -(XS),WA
*      ADD  WA,(XS)+
*      ARE ILLEGAL, SINCE THEY ASSUME INFORMATION STORAGE
*      ABOVE THE STACK TOP.
       EJC
*      SECTION 5 - INTERNAL CHARACTER SET
*
*      THE INTERNAL CHARACTER SET IS REPRESENTED BY A SET OF
*      CONTIGUOUS CODES FROM 0 TO CFP$A-1. THE CODES FOR THE
*      DIGITS 0-9 MUST BE CONTIGUOUS AND IN SEQUENCE. OTHER
*      THAN THIS, THERE ARE NO RESTRAINTS.
*
*      THE FOLLOWING SYMBOLS ARE AUTOMATICALLY DEFINED TO HAVE
*      THE VALUE OF THE CORRESPONDING INTERNAL CHARACTER CODE.
*
*      CH$LA                 LETTER A
*      CH$LB                 LETTER B
*      .                     .
*      CH$L$                 LETTER Z
*
*      CH$D0                 DIGIT 0
*      .                     .
*      CH$D9                 DIGIT 9
*
*      CH$AM                 AMPERSAND
*      CH$AS                 ASTERISK
*      CH$AT                 AT
*      CH$BB                 LEFT BRACKET
*      CH$BL                 BLANK
*      CH$BR                 VERTICAL BAR
*      CH$CL                 COLON
*      CH$CM                 COMMA
*      CH$DL                 DOLLAR SIGN
*      CH$DT                 DOT (PERIOD)
*      CH$DQ                 DOUBLE QUOTE
*      CH$EQ                 EQUAL SIGN
*      CH$EX                 EXCLAMATION MARK
*      CH$MN                 MINUS
*      CH$NM                 NUMBER SIGN
*      CH$NT                 NOT
*      CH$PC                 PERCENT
*      CH$PL                 PLUS
*      CH$PP                 LEFT PAREN
*      CH$RB                 RIGHT BRACKET
*      CH$RP                 RIGHT PAREN
*      CH$QU                 QUESTION MARK
*      CH$SL                 SLASH
*      CH$SM                 SEMI-COLON
*      CH$SQ                 SINGLE QUOTE
*      CH$UN                 UNDERLINE
*
*      THE FOLLOWING OPTIONAL SYMBOLS ARE INCORPORATED
*      BY DEFINING THE CONDITIONAL ASSEMBLY SYMBOL NAMED.
*
*      26 SHIFTED LETTERS INCORPORATED BY DEFINING .CASL
*
*      CH$$A                 SHIFTED A
*      CH$$B                 SHIFTED B
*      .                     .
*      CH$$$                 SHIFTED Z
*
*      CH$HT                 HORIZONTAL TAB - DEFINE .CAHT
*      CH$VT                 VERTICAL TAB   - DEFINE .CAVT
       EJC
*
*      SECTION 6 - CONDITIONAL ASSEMBLY FEATURES
*
*      SOME FEATURES OF THE INTERPRETER ARE APPLICABLE TO ONLY
*      CERTAIN TARGET MACHINES. THEY MAY BE INCORPORATED OR
*      OMITTED BY USE OF CONDITIONAL ASSEMBLY. THE FULL
*      FORM OF A CONDITION IS -
*      .IF    CONDITIONAL ASSEMBLY SYMBOL    (CAS)
*      .THEN
*             MINIMAL STATEMENTS1   (MS1)
*      .ELSE
*             MINIMAL STATEMENTS2   (MS2)
*      .FI
*      THE FOLLOWING RULES APPLY
*      1.   THE DIRECTIVES .IF, .THEN, .ELSE, .FI MUST
*           START IN COLUMN 1.
*      2.   THE CONDITIONAL ASSEMBLY SYMBOL MUST START WITH A
*           DOT IN COLUMN 8 FOLLOWED BY 4 LETTERS OR DIGITS E.G.
*              .CA$1
*      3.   .THEN IS REDUNDANT AND MAY BE OMITTED IF WISHED.
*      4.   MS1, MS2 ARE ARBITRARY SEQUENCES OF MINIMAL
*           STATEMENTS EITHER OF WHICH MAY BE NULL.
*      5.   IF MS2 IS OMITTED, .ELSE MAY ALSO BE OMITTED.
*      6.   .FI IS REQUIRED.
*      7.   CONDITIONS MAY BE NESTED TO A DEPTH DETERMINED
*           BY THE TRANSLATOR (NOT LESS THAN 20, SAY).
*
*      SELECTION OF THE ALTERNATIVES MS1, MS2 IS BY MEANS OF THE
*      DEFINE AND UNDEFINE DIRECTIVES OF FORM -
*      .DEF   CAS
*      .UNDEF CAS
*      WHICH OBEY RULES 1. AND 2. ABOVE AND MAY OCCUR AT ANY
*      POINT IN A MINIMAL PROGRAM, INCLUDING WITHIN A CONDITION.
*      MULTIPLY DEFINING A SYMBOL IS AN ERROR.
*      UNDEFINING A SYMBOL WHICH IS NOT DEFINED IS NOT AN ERROR.
*
*      THE EFFECT IS THAT IF A SYMBOL IS CURRENTLY DEFINED,
*      THEN IN ANY CONDITION DEPENDING ON IT, MS1 WILL BE
*      PROCESSED AND MS2 OMITTED. CONVERSELY IF IT IS UNDEFINED,
*      MS1 WILL BE OMITTED AND MS2 PROCESSED.
       EJC
*
*      SECTION 7 - OPERAND FORMATS
*
*      THE FOLLOWING SECTION DESCRIBES THE VARIOUS POSSIBILITIES
*      FOR OPERANDS OF INSTRUCTIONS AND ASSEMBLY OPERATIONS.
*
*      01   INT              UNSIGNED INTEGER LE CFP$M
*      02   DLBL             SYMBOL DEFINED IN DEFINITIONS SEC
*      03   WLBL             LABEL IN WORKING STORAGE SECTION
*      04   CLBL             LABEL IN CONSTANT SECTION
*      05   ELBL             PROGRAM SECTION ENTRY LABEL
*      06   PLBL             PROGRAM SECTION LABEL (NON-ENTRY)
*      07   X                ONE OF THE THREE INDEX REGISTERS
*      08   W                ONE OF THE THREE WORK REGISTERS
*      09   (X)              LOCATION INDEXED BY X
*      10   (X)+             LIKE (X) BUT POST INCREMENT X
*      11   -(X)             LIKE (X) BUT PREDECREMENT X
*      12   INT(X)           LOCATION INT WORDS BEYOND ADDR IN X
*      13   DLBL(X)          LOCATION DLBL WORDS PAST ADDR IN X
*      14   CLBL(X)          LOCATION (X) BYTES BEYOND CLBL
*      15   WLBL(X)          LOCATION (X) BYTES BEYOND WLBL
*      16   INTEGER          SIGNED INTEGER (DIC)
*      17   REAL             SIGNED REAL (DRC)
*      18   =DLBL            LOCATION CONTAINING DAC DLBL
*      19   *DLBL            LOCATION CONTAINING DAC CFP$B*DLBL
*      20   =WLBL            LOCATION CONTAINING DAC WLBL
*      21   =CLBL            LOCATION CONTAINING DAC CLBL
*      22   =ELBL            LOCATION CONTAINING DAC ELBL
*      23   PNAM             PROCEDURE LABEL (ON PRC INSTRUC)
*      24   EQOP             OPERAND FOR EQU INSTRUCTION
*      25   PTYP             PROCEDURE TYPE (SEE PRC)
*      26   TEXT             ARBITRARY TEXT (ERB,ERR,TTL)
*      27   DTEXT            DELIMITED TEXT STRING (DTC)
*
*      THE NUMBERS IN THE ABOVE LIST ARE USED IN SUBSEQUENT
*      DESCRIPTION AND IN SOME OF THE MINIMAL TRANSLATORS.
       EJC
*
*      OPERAND FORMATS (CONTINUED)
*
*      THE FOLLOWING SPECIAL SYMBOLS REFER TO A COLLECTION OF
*      THE LISTED POSSIBILITIES
*
*      VAL  01,02                      PREDEFINED VALUE
*
*           VAL IS USED TO REFER TO A PREDEFINED ONE WORD
*           INTEGER VALUE IN THE RANGE 0 LE N LE CFP$M.
*
*      REG  07,08                      REGISTER
*
*           REG IS USED TO DESCRIBE AN OPERAND WHICH CAN BE
*           ANY OF THE REGISTERS (XL,XR,XS,XT,WA,WB,WC). SUCH
*           AN OPERAND CAN HOLD A ONE WORD INTEGER (ADDRESS).
*
*      OPC  09,10,11                   CHARACTER
*
*           OPC IS USED TO DESIGNATE A SPECIFIC CHARACTER
*           OPERAND FOR USE IN THE LCH AND SCH INSTRUCTIONS.
*           THE INDEX REGISTER REFERENCED MUST BE EITHER XR OR
*           XL (NOT XS,XT). SEE SECTION ON CHARACTER OPERATIONS.
*
*      OPS  03,04,09,12,13,14,15       MEMORY REFERENCE
*
*           OPS IS USED TO DESCRIBE AN OPERAND WHICH IS IN
*           MEMORY. THE OPERAND MAY BE ONE OR MORE WORDS LONG
*           DEPENDING ON THE DATA TYPE. IN THE CASE OF MULTIWORD
*           OPERANDS, THE ADDRESS GIVEN IS THE FIRST WORD.
*
*      OPW  AS FOR OPS + 08,10,11      FULL WORD
*
*           OPW IS USED TO REFER TO AN OPERAND WHOSE CAPACITY IS
*           THAT OF A FULL MEMORY WORD. OPW INCLUDES ALL THE
*           POSSIBILITIES FOR OPS (THE REFERENCED WORD IS USED)
*           PLUS THE USE OF ONE OF THE THREE WORK REGISTERS
*           (WA,WB,WC). IN ADDITION, THE FORMATS (X)+ AND -(X)
*           ALLOW INDEXED OPERATIONS IN WHICH THE INDEX REGISTER
*           IS POPPED BY ONE WORD AFTER THE REFERENCE (X)+,
*           OR PUSHED BY ONE WORD BEFORE THE REFERENCE -(X)
*           THESE LATTER TWO FORMATS PROVIDE A FACILITY FOR
*           MANIPULATION OF STACKS. THE FORMAT DOES NOT IMPLY
*           A PARTICULAR DIRECTION IN WHICH STACKS MUST BUILD -
*           IT IS USED FOR COMPACTNESS. NOTE THAT THERE IS A
*           RESTRICTION WHICH DISALLOWS AN INSTRUCTION TO USE
*           AN INDEX REGISTER IN ONE OF THESE FORMATS
*           IN SOME OTHER MANNER IN THE SAME INSTRUCTION.
*           E.G.   MOV  XL,(XL)+   IS ILLEGAL.
*           THE FORMATS -(X) AND (X)+ MAY ALSO BE USED IN
*           PRE-DECREMENTATION, POST-INCREMENTATION TO ACCESS
*           THE ADJACENT CHARACTER OF A STRING.
       EJC
*
*      OPERAND FORMATS (CONTINUED)
*
*      OPN  AS FOR OPW + 07            ONE WORD INTEGER
*
*           OPN IS USED TO REPRESENT AN OPERAND LOCATION WHICH
*           CAN CONTAIN A ONE WORD INTEGER (E.G. AN ADDRESS).
*           THIS INCLUDES ALL THE POSSIBILITIES FOR OPW PLUS
*           THE USE OF ONE OF THE INDEX REGISTERS (XL,XR,XT,
*           XS). THE RANGE OF INTEGER VALUES IS 0 LE N LE CFP$M.
*
*      OPV  AS FOR OPN + 18-22         ONE WORD INTEGER VALUE
*
*           OPV IS USED FOR AN OPERAND WHICH CAN YIELD A ONE
*           WORD INTEGER VALUE (E.G. AN ADDRESS). IT INCLUDES
*           ALL THE POSSIBILITIES FOR OPN (THE CURRENT VALUE OF
*           THE LOCATION IS USED) PLUS THE USE OF LITERALS. NOTE
*           THAT ALTHOUGH THE LITERAL FORMATS ARE DESCRIBED IN
*           TERMS OF A REFERENCE TO A LOCATION CONTAINING AN
*           ADDRESS CONSTANT, THIS LOCATION MAY NOT ACTUALLY
*           EXIST IN SOME IMPLEMENTATIONS SINCE ONLY THE VALUE
*           IS REQUIRED. A RESTRICTION IS PLACED ON LITERALS
*           WHICH MAY CONSIST ONLY OF DEFINED SYMBOLS AND
*           CERTAIN LABELS. CONSEQUENTLY SMALL INTEGERS TO BE
*           USED AS LITERALS MUST BE PRE-DEFINED, A DISCIPLINE
*           AIDING PROGRAM MAINTENANCE AND REVISION.
*
*      ADDR 01,02,03,04,05             ADDRESS
*
*           ADDR IS USED TO DESCRIBE AN EXPLICIT ADDRESS VALUE
*           (ONE WORD INTEGER VALUE) FOR USE WITH DAC.
*
*
*           ****************************************************
*           *   IN THE FOLLOWING DESCRIPTIONS THE USAGE --     *
*           *      (XL),(XR), ... ,(IA)                        *
*           *   IN THE DESCRIPTIVE TEXT SIGNIFIES THE          +
*           *   CONTENTS OF THE STATED REGISTER.               *
*           ****************************************************
       EJC
*
*      SECTION 8 - LIST OF INSTRUCTION MNEMONICS
*
*      THE FOLLOWING LIST INCLUDES ALL INSTRUCTION AND
*      ASSEMBLY OPERATION MNEMONICS IN ALPHABETICAL ORDER.
*      THE MNEMONICS ARE PRECEDED BY A NUMBER IDENTIFYING
*      THE FOLLOWING SECTION WHERE THE INSTRUCTION IS DESCRIBED.
*      A STAR (*) IS APPENDED TO THE MNEMONIC IF THE LAST
*      OPERAND MAY OPTIONALLY BE OMITTED.
*      SEE SECTION -15- FOR DETAILS OF STATEMENT FORMAT AND
*      COMMENT CONVENTIONS.
*
*       2.1  ADD  OPV,OPN      ADD ADDRESS
*       4.2  ADI  OPS          ADD INTEGER
*       5.3  ADR  OPS          ADD REAL
*       7.1  ANB  OPW,W        AND BIT STRING
*       2.17 AOV  OPV,OPN,PLBL ADD ADDRESS, FAIL IF OVERFLOW
*       2.16 BCT  W,PLBL       BRANCH AND COUNT
*       2.5  BEQ  OPN,OPV,PLBL BRANCH IF ADDRESS EQUAL
*       2.8  BGE  OPN,OPV,PLBL BRANCH IF ADDRESS GREATER OR EQUL
*       2.7  BGT  OPN,OPV,PLBL BRANCH IF ADDRESS GREATER
*       2.12 BHI  OPN,OPV,PLBL BRANCH IF ADDRESS HIGH
*       2.10 BLE  OPN,OPV,PLBL BRANCH IF ADDRESS LESS OR EQUAL
*       2.11 BLO  OPN,OPV,PLBL BRANCH IF ADDRESS LOW
*       2.9  BLT  OPN,OPV,PLBL BRANCH IF ADDRESS LESS THAN
*       2.6  BNE  OPN,OPV,PLBL BRANCH IF ADDRESS NOT EQUAL
*       2.13 BNZ  OPN,PLBL     BRANCH IF ADDRESS NON-ZERO
*       1.2  BRN  PLBL         BRANCH UNCONDITIONAL
*       1.7  BRI  OPN          BRANCH INDIRECT
*       1.3  BSW* X,VAL,PLBL   BRANCH ON SWITCH VALUE
*       8.2  BTW  REG          CONVERT BYTES TO WORDS
*       2.14 BZE  OPN,PLBL     BRANCH IF ADDRESS ZERO
*       6.6  CEQ  OPW,OPW,PLBL BRANCH IF CHARACTERS EQUAL
*      10.1  CHK               CHECK STACK OVERFLOW
*       7.4  CMB  W            COMPLEMENT BIT STRING
*       6.8  CMC  PLBL,PLBL    COMPARE CHARACTER STRINGS
*       6.7  CNE  OPW,OPW,PLBL BRANCH IF CHARACTERS NOT EQUAL
*       6.5  CSC  X            COMPLETE STORE CHARACTERS
*       8.8  CTB  W,VAL        CONVERT CHARACTER COUNT TO BYTES
*       8.7  CTW  W,VAL        CONVERT CHARACTER COUNT TO WORDS
*       8.10 CVD               CONVERT BY DIVISION
*       8.9  CVM  PLBL         CONVERT BY MULTIPLICATION
*      11.1  DAC  ADDR         DEFINE ADDRESS CONSTANT
*      11.5  DBC  VAL          DEFINE BIT STRING CONSTANT
*       2.4  DCA  OPN          DECREMENT ADDRESS BY ONE WORD
*       1.17 DCV  OPN          DECREMENT VALUE BY ONE
*      11.2  DIC  INTEGER      DEFINE INTEGER CONSTANT
       EJC
*
*      ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
*
*      11.3  DRC  REAL         DEFINE REAL CONSTANT
*      11.4  DTC  DTEXT        DEFINE TEXT (CHARACTER) CONSTANT
*       4.5  DVI  OPS          DIVIDE INTEGER
*       5.6  DVR  OPS          DIVIDE REAL
*      13.1  EJC               EJECT ASSEMBLY LISTING
*      14.2  END               END OF ASSEMBLY
*       1.13 ENP               DEFINE END OF PROCEDURE
*       1.6  ENT* VAL          DEFINE ENTRY POINT
*      12.1  EQU  EQOP         DEFINE SYMBOLIC VALUE
*       1.15 ERB  INT,TEXT     ASSEMBLE ERROR CODE AND BRANCH
*       1.14 ERR  INT,TEXT     ASSEMBLE ERROR CODE
*       1.5  ESW               END OF SWITCH LIST FOR BSW
*       1.12 EXI* INT          EXIT FROM PROCEDURE
*      12.2  EXP               DEFINE EXTERNAL PROCEDURE
*       2.3  ICA  OPN          INCREMENT ADDRESS BY ONE WORD
*       3.4  ICP               INCREMENT CODE POINTER
*       1.16 ICV  OPN          INCREMENT VALUE BY ONE
*       4.11 IEQ  PLBL         JUMP IF INTEGER ZERO
*       1.4  IFF  VAL,PLBL     SPECIFY BRANCH FOR BSW
*       4.12 IGE  PLBL         JUMP IF INTEGER NON-NEGATIVE
*       4.13 IGT  PLBL         JUMP IF INTEGER POSITIVE
*       4.14 ILE  PLBL         JUMP IF INTEGER NEGATIVE OR ZERO
*       4.15 ILT  PLBL         JUMP IF INTEGER NEGATIVE
*       4.16 INE  PLBL         JUMP IF INTEGER NON-ZERO
*       4.9  INO  PLBL         JUMP IF NO INTEGER OVERFLOW
*      12.3  INP  PTYP,INT     INTERNAL PROCEDURE
*      12.4  INR               INTERNAL ROUTINE
*       4.10 IOV  PLBL         JUMP IF INTEGER OVERFLOW
*       8.5  ITR               CONVERT INTEGER TO REAL
*       1.9  JSR  PNAM         CALL PROCEDURE
*       6.3  LCH  REG,OPC      LOAD CHARACTER
*       2.15 LCT  W,OPV        LOAD COUNTER FOR LOOP
*       3.1  LCP  REG          LOAD CODE POINTER REGISTER
*       3.3  LCW  REG          LOAD NEXT CODE WORD
*       4.1  LDI  OPS          LOAD INTEGER
*       5.1  LDR  OPS          LOAD REAL
*       1.8  LEI  X            LOAD ENTRY POINT ID
*       7.6  LSH  W,VAL        LEFT SHIFT BIT STRING
*       7.8  LSX  W,(X)        LEFT SHIFT INDEXED
*       8.4  MFI* OPN,PLBL     CONVERT (IA) TO ADDRESS VALUE
*       4.3  MLI  OPS          MULTIPLY INTEGER
*       5.5  MLR  OPS          MULTIPLY REAL
*       1.19 MNZ  OPN          MOVE NON-ZERO
*       1.1  MOV  OPV,OPN      MOVE
*       8.3  MTI  OPN          MOVE ADDRESS VALUE TO (IA)
*       9.1  MVC               MOVE CHARACTERS
*       9.2  MVW               MOVE WORDS
*       9.3  MWB               MOVE WORDS BACKWARDS
*       4.8  NGI               NEGATE INTEGER
       EJC
*
*      ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
*
*       5.9  NGR               NEGATE REAL
*       7.9  NZB  W,PLBL       JUMP IF NOT ALL ZERO BITS
*       7.2  ORB  OPW,W        OR BIT STRINGS
*       6.1  PLC* X,OPV        PREPARE TO LOAD CHARACTERS
*       1.10 PPM* PLBL         PROVIDE PROCEDURE EXIT PARAMETER
*       1.11 PRC  PTYP,VAL     DEFINE START OF PROCEDURE
*       6.2  PSC* X,OPV        PREPARE TO STORE CHARACTERS
*       5.10 REQ  PLBL         JUMP IF REAL ZERO
*       5.11 RGE  PLBL         JUMP IF REAL POSITIVE OR ZERO
*       5.12 RGT  PLBL         JUMP IF REAL POSITIVE
*       5.13 RLE  PLBL         JUMP IF REAL NEGATIVE OR ZERO
*       5.14 RLT  PLBL         JUMP IF REAL NEGATIVE
*       4.6  RMI  OPS          REMAINDER INTEGER
*       5.15 RNE  PLBL         JUMP IF REAL NON-ZERO
*       5.8  RNO  PLBL         JUMP IF NO REAL OVERFLOW
*       5.7  ROV  PLBL         JUMP IF REAL OVERFLOW
*       7.5  RSH  W,VAL        RIGHT SHIFT BIT STRING
*       7.7  RSX  W,(X)        RIGHT SHIFT INDEXED
*       8.6  RTI* PLBL         CONVERT REAL TO INTEGER
*       1.22 RTN               DEFINE START OF ROUTINE
*       4.4  SBI  OPS          SUBTRACT INTEGER
*       5.4  SBR  OPS          SUBTRACT REALS
*       6.4  SCH  REG,OPC      STORE CHARACTER
*       3.2  SCP  REG          STORE CODE POINTER
*      14.1  SEC               DEFINE START OF ASSEMBLY SECTION
*       1.20 SSL  OPW          SUBROUTINE STACK LOAD
*       1.21 SSS  OPW          SUBROUTINE STACK STORE
*       4.7  STI  OPS          STORE INTEGER
*       5.2  STR  OPS          STORE REAL
*       2.2  SUB  OPV,OPN      SUBTRACT ADDRESS
*       6.9  TRC               TRANSLATE CHARACTER STRING
*      13.2  TTL  TEXT         SUPPLY ASSEMBLY TITLE
*       8.1  WTB  REG          CONVERT WORDS TO BYTES
*       7.3  XOB  OPW,W        EXCLUSIVE OR BIT STRINGS
*       1.18 ZER  OPN          ZEROISE INTEGER LOCATION
*       7.11 ZGB  OPN          ZEROISE GARBAGE BITS
*       7.10 ZRB  W,PLBL       JUMP IF ALL ZERO BITS
       EJC
*
*      SECTION 9 - MINIMAL INSTRUCTIONS
*
*      THE FOLLOWING DESCRIPTIONS ASSUME THE DEFINITIONS -
*
*      ZEROE  EQU  0
*      UNITY  EQU  1
*
*      -1-  BASIC INSTRUCTION SET
*
*      1.1  MOV  OPV,OPN     MOVE ONE WORD VALUE
*
*           MOV CAUSES THE VALUE OF OPERAND OPV TO BE SET AS
*           THE NEW CONTENTS OF OPERAND LOCATION OPN. IN THE
*           CASE WHERE OPN IS NOT AN INDEX REGISTER, ANY VALUE
*           WHICH CAN NORMALLY OCCUPY A MEMORY WORD (INCLUDING
*           A PART OF A MULTIWORD REAL OR INTEGER VALUE)
*           CAN BE TRANSFERRED USING MOV. IF THE TARGET LOCATION
*           OPN IS AN INDEX REGISTER, THEN OPV MUST SPECIFY AN
*           APPROPRIATE ONE WORD VALUE OR OPERAND CONTAINING
*           SUCH AN APPROPRIATE VALUE.
*
*      1.2  BRN  PLBL        UNCONDITIONAL BRANCH
*
*           BRN CAUSES CONTROL TO BE PASSED TO THE INDICATED
*           LABEL IN THE PROGRAM SECTION.
*
*      1.3  BSW  X,VAL,PLBL  BRANCH ON SWITCH VALUE
*      1.4  IFF  VAL,PLBL    PROVIDE BRANCH FOR SWITCH
*           IFF  VAL,PLBL     ...
*           ...
*           ...
*      1.5  ESW              END OF BRANCH SWITCH TABLE
*
*           BSW,IFF,ESW PROVIDE A CAPABILITY FOR A SWITCHED
*           BRANCH SIMILAR TO A FORTRAN COMPUTED GOTO. THE
*           VAL ON THE BSW INSTRUCTION IS THE MAXIMUM NUMBER
*           OF BRANCHES. THE VALUE IN X RANGES FROM ZERO UP TO
*           BUT NOT INCLUDING THIS MAXIMUM. EACH IFF PROVIDES A
*           BRANCH. VAL MUST BE LESS THAN THAT GIVEN ON THE BSW
*           AND CONTROL GOES TO PLBL IF THE VALUE IN X MATCHES.
*           IF THE VALUE IN X DOES NOT CORRESPOND TO ANY OF THE
*           IFF ENTRIES, THEN CONTROL PASSES TO THE PLBL ON THE
*           BSW. THIS PLBL OPERAND MAY BE OMITTED IF THERE ARE
*           NO VALUES MISSING FROM THE LIST.
*
*           IFF AND ESW MAY ONLY BE USED IN THIS CONTEXT.
*           EXECUTION OF BSW MAY DESTROY THE CONTENTS OF X.
*           THE IFF ENTRIES MAY BE IN ANY ORDER AND SINCE
*           A TRANSLATOR MAY THUS NEED TO STORE AND SORT THEM,
*           THE COMMENT FIELD IS RESTRICTED IN LENGTH (SEC 11).
       EJC
*
*      -1-  BASIC INSTRUCTIONS (CONTINUED)
*
*      1.6  ENT  VAL         DEFINE PROGRAM ENTRY POINT
*
*           THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
*           TO BE A PROGRAM ENTRY POINT WHICH CAN SUBSEQUENTLY
*           BE USED IN CONJUNCTION WITH THE BRI INSTRUCTION,
*           WHICH PROVIDES THE ONLY MEANS OF ENTERING THE
*           CODE. IT IS ILLEGAL TO FALL INTO CODE
*           IDENTIFIED BY AN ENTRY POINT. THE
*           ENTRY SYMBOL IS ASSIGNED AN ADDRESS WHICH NEED NOT
*           BE A MULTIPLE OF CFP$B BUT WHICH MUST BE IN THE
*           RANGE 0 LE CFP$M AND THE ADDRESS MUST NOT LIE WITHIN
*           THE ADDRESS RANGE OF THE ALLOCATED DATA AREA.
*           FURTHERMORE, ADDRESSES OF SUCCESSIVE ENTRY POINTS
*           MUST BE ASSIGNED IN SOME ASCENDING SEQUENCE SO
*           THAT THE ADDRESS COMPARISON INSTRUCTIONS CAN BE
*           USED TO TEST THE ORDER IN WHICH TWO ENTRY POINTS
*           OCCUR. THE SYMBOL VAL GIVES AN IDENTIFYING VALUE
*           TO THE ENTRY POINT WHICH CAN BE ACCESSED WITH THE
*           LEI INSTRUCTION.
*           NOTE - SUBJECT TO THE RESTRICTION BELOW, VAL MAY
*           BE OMITTED IF NO SUCH IDENTIFICATION IS NEEDED I.E.
*           IF NO LEI REFERENCES THE ENTRY POINT. FOR THIS
*           CASE, A TRANSLATION OPTIMISATION IS POSSIBLE IN
*           WHICH NO MEMORY NEED BE RESERVED FOR A NULL
*           IDENTIFICATION WHICH IS NEVER TO BE REFERENCED, BUT
*           ONLY PROVIDED THIS IS DONE SO AS NOT TO INTERFERE
*           WITH THE STRICTLY ASCENDING SEQUENCE OF ENTRY POINT
*           ADDRESSES. TO SIMPLIFY THIS OPTIMISATION FOR ALL
*           IMPLEMENTORS, THE FOLLOWING RESTRICTION IS OBSERVED
*                VAL MAY ONLY BE OMITTED IF THE ENTRY POINT IS
*                SEPARATED FROM A FOLLOWING ENTRY POINT BY A
*                NON-NULL MINIMAL CODE SEQUENCE.
*           ENTRY POINT ADDRESSES ARE ACCESSIBLE ONLY BY USE OF
*           LITERALS (=ELBL, SECTION 7) OR DAC CONSTANTS
*           (SECTION 8-11.1).
*
*      1.7  BRI  OPN         BRANCH INDIRECT
*
*           OPN CONTAINS THE ADDRESS OF A PROGRAM ENTRY POINT
*           (SEE ENT). CONTROL IS PASSED TO THE EXECUTABLE
*           CODE STARTING AT THE ENTRY POINT ADDRESS. OPN IS
*           LEFT UNCHANGED.
*
*      1.8  LEI  X           LOAD ENTRY POINT IDENTIFICATION
*
*           X CONTAINS THE ADDRESS OF AN ENTRY POINT FOR WHICH
*           AN IDENTIFYING VALUE WAS GIVEN ON THE THE ENT LINE.
*           LEI REPLACES THE CONTENTS OF X BY THIS VALUE.
       EJC
*
*      -1-  BASIC INSTRUCTIONS (CONTINUED)
*
*      1.9  JSR  PNAM        CALL PROCEDURE PNAM
*      1.10 PPM  PLBL        PROVIDE EXIT PARAMETER
*           PPM  PLBL         ...
*           ...
*           PPM  PLBL         ...
*
*           JSR CAUSES CONTROL TO BE PASSED TO THE NAMED
*           PROCEDURE. PNAM IS THE LABEL ON A PRC STATEMENT
*           ELSEWHERE IN THE PROGRAM SECTION (SEE PRC)
*           OR HAS BEEN DEFINED USING AN EXP INSTRUCTION.
*           THE PPM EXIT PARAMETERS FOLLOWING THE CALL GIVE
*           NAMES OF PROGRAM LOCATIONS (PLBL-S) TO WHICH
*           ALTERNATIVE EXI RETURNS OF THE CALLED PROCEDURE MAY
*           PASS CONTROL. THEY MAY OPTIONALLY BE REPLACED BY
*           ERROR RETURNS (SEE ERR). THE NUMBER OF EXIT
*           PARAMETERS FOLLOWING A JSR MUST EQUAL THE INT IN THE
*           PROCEDURE DEFINITION. THE OPERAND OF PPM MAY BE
*           OMITTED IF THE CORRESPONDING EXI RETURN IS CERTAIN
*           NOT TO BE TAKEN.
*
*      1.11 PRC  PTYP,INT    DEFINE START OF PROCEDURE
*
*           THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
*           TO BE THE NAME OF A PROCEDURE FOR USE WITH JSR.
*           A PROCEDURE IS A CONTIGUOUS SECTION OF INSTRUCTIONS
*           TO WHICH CONTROL MAY BE PASSED WITH A JSR
*           INSTRUCTION. THIS IS THE ONLY WAY IN WHICH THE
*           INSTRUCTIONS IN A PROCEDURE MAY BE EXECUTED. IT IS
*           NOT PERMITTED TO FALL INTO A PROCEDURE.
*           ALL PROCEDURES SHOULD BE NAMED IN SECTION 0
*           INP  STATEMENTS.
*
*           INT IS THE NUMBER OF EXIT PARAMETERS (PPM-S) TO
*           BE USED IN JSR CALLS.
*
*           THERE ARE THREE POSSIBILITIES FOR PTYP, EACH
*           CONSISTING OF A SINGLE LETTER AS FOLLOWS.
*
*           R                RECURSIVE
*
*           THE RETURN POINT (ONE OR MORE WORDS) IS STORED ON
*           THE STACK AS THOUGH ONE OR MORE MOV ..,-(XS)
*           INSTRUCTIONS WERE EXECUTED.
       EJC
*
*      -1-  BASIC INSTRUCTIONS (CONTINUED)
*
*           N                NON-RECURSIVE
*
*           THE RETURN POINT IS TO BE STORED EITHER
*           (1) IN A LOCAL STORAGE WORD ASSOCIATED
*           WITH THE PROCEDURE AND NOT DIRECTLY
*           AVAILABLE TO THE PROGRAM IN ANY OTHER MANNER OR
*           (2) ON A SUBROUTINE LINK STACK QUITE DISTINCT FROM
*           THE MINIMAL STACK ADDRESSED BY XS.
*           IT IS AN ERROR TO USE THE STACK FOR N-LINKS, SINCE
*           PROCEDURE PARAMETERS OR RESULTS MAY BE PASSED VIA
*           THE STACK.
*           IF METHOD (2) IS USED FOR LINKS, ERROR EXITS
*           (ERB,ERR) FROM A PROCEDURE WILL NECESSITATE LINK
*           STACK RESETTING. THE SSL AND SSS ORDERS PROVIDED
*           FOR THIS MAY BE REGARDED AS NO-OPS FOR
*           IMPLEMENTATIONS USING METHOD (1).
*
*           E                EITHER
*
*           THE RETURN POINT MAY BE STORED IN EITHER MANNER
*           ACCORDING TO EFFICIENCY REQUIREMENTS OF THE ACTUAL
*           PHYSICAL MACHINE USED FOR THE IMPLEMENTATION. NOTE
*           THAT PROGRAMMING OF E TYPE PROCEDURES MUST BE
*           INDEPENDENT OF THE ACTUAL IMPLEMENTATION.
*
*           THE ACTUAL FORM OF THE RETURN POINT IS UNDEFINED.
*           HOWEVER, EACH WORD STORED ON THE STACK FOR AN
*           R-TYPE CALL MUST MEET THE FOLLOWING REQUIREMENTS.
*
*           1)               IT CAN BE HANDLED AS AN ADDRESS
*                            AND PLACED IN AN INDEX REGISTER.
*
*           2)               WHEN USED AS AN OPERAND IN AN
*                            ADDRESS COMPARISON INSTRUCTION, IT
*                            MUST NOT APPEAR TO LIE WITHIN
*                            THE ALLOCATED DATA AREA.
*
*           3)               IT IS NOT REQUIRED TO APPEAR
*                            TO LIE WITHIN THE PROGRAM SECTION.
       EJC
*
*      -1-  BASIC INSTRUCTIONS (CONTINUED)
*
*      1.12 EXI  INT         EXIT FROM PROCEDURE
*
*           THE PPM AND ERR PARAMETERS FOLLOWING A JSR ARE
*           NUMBERED STARTING FROM 1.  EXI  INT CAUSES CONTROL
*           TO BE RETURNED TO THE INT-TH SUCH PARAM. EXI 1 GIVES
*           CONTROL TO THE PLBL OF THE FIRST PPM AFTER THE JSR.
*           IF INT IS OMITTED, CONTROL IS PASSED BACK PAST THE
*           LAST EXIT PARAMETER (OR PAST THE JSR IF THERE ARE
*           NONE). FOR R AND E TYPE PROCEDURES, THE
*           STACK POINTER XS MUST BE SET TO ITS APPROPRIATE
*           ENTRY VALUE BEFORE EXECUTING AN EXI INSTRUCTION.
*           IN THIS CASE, EXI REMOVES RETURN POINTS FROM THE
*           STACK IF ANY ARE STORED THERE SO THAT THE STACK
*           POINTER IS RESTORED TO ITS CALLING VALUE.
*
*      1.13 ENP              DEFINE END OF PROCEDURE BODY
*
*           ENP DELIMITS A PROCEDURE BODY AND MAY NOT ACTUALLY
*           BE EXECUTED, HENCE IT MUST HAVE NO LABEL.
*
*      1.14 ERR  INT,TEXT    PROVIDE ERROR RETURN
*
*           ERR MAY REPLACE AN EXIT PARAMETER (PPM) IN
*           ANY PROCEDURE CALL. THE INT ARGUMENT IS A UNIQUE
*           ERROR CODE IN 0 TO 899.
*           THE TEXT SUPPLIED AS THE OTHER OPERAND IS
*           ARBITRARY TEXT IN THE FORTRAN CHARACTER SET AND
*           MAY BE USED IN CONSTRUCTING A FILE OF ERROR
*           MESSAGES FOR DOCUMENTING PURPOSES OR FOR BUILDING
*           A DIRECT ACCESS OR OTHER FILE OF MESSAGES TO BE
*           USED BY THE ERROR HANDLING CODE.
*           IN THE EVENT THAT AN EXI ATTEMPTS
*           TO RETURN CONTROL VIA AN EXIT PARAMETER TO
*           AN ERR, CONTROL IS INSTEAD PASSED TO THE FIRST
*           INSTRUCTION IN THE ERROR SECTION (WHICH FOLLOWS THE
*           PROGRAM SECTION) WITH THE ERROR CODE IN WA.
*
*      1.15 ERB  INT,TEXT    ERROR BRANCH
*
*           THIS INSTRUCTION RESEMBLES ERR EXCEPT THAT IT MAY
*           OCCUR AT ANY POINT WHERE A BRANCH IS PERMITTED.
*           IT EFFECTS A TRANSFER OF CONTROL TO THE ERROR
*           SECTION WITH THE ERROR CODE IN WA.
*
*      1.16 ICV  OPN         INCREMENT VALUE BY ONE
*
*           ICV INCREMENTS THE VALUE OF THE OPERAND BY UNITY.
*           IT IS EQUIVALENT TO   ADD  =UNITY,OPN
*
*      1.17 DCV  OPN         DECREMENT VALUE BY ONE
*
*           DCV DECREMENTS THE VALUE OF THE OPERAND BY UNITY.
*           IT IS EQUIVALENT TO   SUB  =UNITY,OPN
       EJC
*
*      BASIC INSTRUCTIONS (CONTINUED)
*
*      1.18 ZER  OPN         ZEROISE OPN
*
*           ZER IS EQUIVALENT TO  MOV  =ZEROE,OPN
*
*      1.19 MNZ  OPN         MOVE NON-ZERO TO OPN
*
*           ANY NON-ZERO COLLECTABLE VALUE MAY USED, FOR WHICH
*           THE OPCODES BNZ/BZE WILL BRANCH/FAIL TO BRANCH.
*
*      1.20 SSL  OPW         SUBROUTINE STACK LOAD
*
*      1.21 SSS  OPW         SUBROUTINE STACK STORE
*
*           THIS PAIR OF OPERATIONS IS PROVIDED TO MAKE POSSIBLE
*           THE USE OF A LOCAL STACK TO HOLD SUBROUTINE (S-R)
*           RETURN LINKS FOR N-TYPE PROCEDURES. SSS STORES THE
*           S-R STACK POINTER IN OPW AND SSL LOADS THE S-R
*           STACK POINTER FROM OPW. BY USING SSS IN THE MAIN
*           PROGRAM OR ON ENTRY TO A PROCEDURE WHICH SHOULD
*           REGAIN CONTROL ON OCCURRENCE OF AN ERR OR ERB AND BY
*           USE OF SSL IN THE ERROR PROCESSING SECTIONS THE
*           S-R STACK POINTER CAN BE RESTORED GIVING A LINK
*           STACK CLEANED UP READY FOR RESUMED EXECUTION.
*           THE FORM OF THE LINK STACK POINTER IS UNDEFINED IN
*           MINIMAL (IT IS LIKELY TO BE A PRIVATE REGISTER
*           KNOWN TO THE TRANSLATOR) AND THE ONLY REQUIREMENT
*           IS THAT IT SHOULD FIT INTO A SINGLE FULL WORD.
*           SSL AND SSS ARE NO-OPS IF A PRIVATE LINK STACK IS
*           NOT USED.
*
*      1.22 RTN              DEFINE START OF ROUTINE
*
*           A ROUTINE IS A CODE CHUNK USED FOR SIMILAR PURPOSES
*           TO A PROCEDURE. HOWEVER IT IS ENTERED BY ANY TYPE OF
*           CONDITIONAL OR UNCONDITIONAL BRANCH (NOT BY JSR). ON
*           TERMINATION IT PASSES CONTROL BY A BRANCH (OFTEN
*           BRI THROUGH A CODE WORD) OR EVEN PERMITS CONTROL
*           TO DROP THROUGH TO ANOTHER ROUTINE. NO RETURN LINK
*           EXISTS AND THE END OF A ROUTINE IS NOT MARKED BY
*           AN EXPLICIT OPCODE (COMPARE ENP).
*           ALL ROUTINES SHOULD BE NAMED IN SECTION 0
*           INR  STATEMENTS.
       EJC
*
*      -2-  OPERATIONS ON ONE WORD INTEGER VALUES (ADDRESSES)
*
*      2.1  ADD  OPV,OPN     ADDS OPV TO THE VALUE IN OPN AND
*                            STORES THE RESULT IN OPN. UNDEFINED
*                            IF THE RESULT EXCEEDS CFP$M.
*
*      2.2  SUB  OPV,OPN     SUBTRACTS OPV FROM OPN. STORES THE
*                            RESULT IN OPN. UNDEFINED IF THE
*                            RESULT IS NEGATIVE.
*
*      2.3  ICA  OPN         INCREMENT ADDRESS IN OPN
*                            EQUIVALENT TO ADD *UNITY,OPN
*
*      2.4  DCA  OPN         DECREMENT ADDRESS IN OPN
*                            EQUIVALENT TO SUB *UNITY,OPN
*
*      2.5  BEQ  OPN,OPV,PLBL BRANCH TO PLBL IF OPN EQ OPV
*      2.6  BNE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN NE OPV
*      2.7  BGT  OPN,OPV,PLBL BRANCH TO PLBL IF OPN GT OPV
*      2.8  BGE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN GE OPV
*      2.9  BLT  OPN,OPV,PLBL BRANCH TO PLBL IF OPN LT OPV
*      2.10 BLE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN LE OPV
*      2.11 BLO  OPN,OPV,PLBL EQUIVALENT TO BLT OR BLE
*      2.12 BHI  OPN,OPV,PLBL EQUIVALENT TO BGT OR BGE
*
*           THE ABOVE INSTRUCTIONS COMPARE TWO ADDRESS
*           VALUES AS UNSIGNED INTEGER VALUES.
*           THE BLO AND BHI INSTRUCTIONS ARE USED IN CASES WHERE
*           THE EQUAL CONDITION EITHER DOES NOT OCCUR OR CAN
*           RESULT EITHER IN A BRANCH OR NO BRANCH. THIS AVOIDS
*           INEFFICIENT TRANSLATIONS IN SOME IMPLEMENTATIONS.
*
*      2.13 BNZ  OPN,PLBL    EQUIVALENT TO BNE OPN,=ZEROE,PLBL
*
*      2.14 BZE  OPN,PLBL    EQUIVALENT TO BEQ OPN,=ZEROE,PLBL
*
*
*      2.15 LCT  W,OPV       LOAD COUNTER FOR BCT
*
*           LCT LOADS A COUNTER VALUE FOR USE WITH THE BCT
*           INSTRUCTION. THE VALUE IN OPV IS THE NUMBER OF LOOPS
*           TO BE EXECUTED. THE VALUE IN W AFTER THIS OPERATION
*           IS AN UNDEFINED ONE WORD INTEGER QUANTITY.
*
*      2.16 BCT  W,PLBL      BRANCH AND COUNT
*
*           BCT USES THE COUNTER VALUE IN W TO BRANCH THE
*           REQUIRED NUMBER OF TIMES AND THEN FINALLY TO FALL
*           THROUGH TO THE NEXT INSTRUCTION. BCT CAN ONLY BE
*           USED FOLLOWING AN APPROPRIATE LCT INSTRUCTION.
*           THE VALUE IN W AFTER EXECUTION OF BCT IS UNDEFINED.
*
*      2.17 AOV  OPV,OPN,PLBL ADD WITH OVERFLOW TEST
*
*           ADDS OPV TO THE VALUE IN OPN AND STORES RESULT IN
*           OPN. BRANCHES TO PLBL IF RESULT EXCEEDS CFP$M
*           WITH RESULT IN OPN UNDEFINED. CF. ADD.
       EJC
*
*      -3-  OPERATIONS ON THE CODE POINTER REGISTER (CP)
*
*           THE CODE POINTER REGISTER PROVIDES A PSUEDO
*           INSTRUCTION COUNTER FOR USE IN AN INTERPRETOR. IT
*           MAY BE IMPLEMENTED AS A REAL REGISTER OR AS A
*           MEMORY LOCATION, BUT IN EITHER CASE IT IS SEPARATE
*           FROM ANY OTHER REGISTER. THE VALUE IN THE CODE
*           POINTER REGISTER IS ALWAYS A WORD ADDRESS (I.E.
*           A ONE WORD INTEGER WHICH IS A MULTIPLE OF CFP$B).
*
*      3.1  LCP  REG         LOAD CODE POINTER REGISTER
*                            THIS INSTRUCTION CAUSES THE CODE
*                            POINTER REGISTER TO BE SET FROM
*                            THE VALUE IN REG WHICH IS UNCHANGED
*
*      3.2  SCP  REG         STORE CODE POINTER REGISTER
*                            THIS INSTRUCTION LOADS THE CURRENT
*                            VALUE IN THE CODE POINTER REGISTER
*                            INTO REG. (CP) IS UNCHANGED.
*
*      3.3  LCW  REG         LOAD NEXT CODE WORD
*                            THIS INSTRUCTION CAUSES THE WORD
*                            POINTED TO BY CP TO BE LOADED INTO
*                            THE INDICATED REG. THE VALUE IN CP
*                            IS THEN INCREMENTED BY ONE WORD.
*                            EXECUTION OF LCW MAY DESTROY XL.
*
*      3.4  ICP              INCREMENT CP BY ONE WORD
*
*           ON MACHINES WITH MORE THAN THREE INDEX REGISTERS,
*           CP CAN BE TREATED SIMPLY AS AN INDEX REGISTER.
*           IN THIS CASE, THE FOLLOWING EQUIVALENCES APPLY.
*
*           LCP REG IS LIKE MOV REG,CP
*           SCP REG IS LIKE MOV CP,REG
*           LCW REG IS LIKE MOV (CP)+,REG
*           ICP     IS LIKE ICA CP
*
*           SINCE LCW IS ALLOWED TO DESTROY XL, THE FOLLOWING
*           IMPLEMENTATION USING A WORK LOCATION CP$$$ CAN
*           ALSO BE USED.
*
*           LCP  REG         MOV  REG,CP$$$
*
*           SCP  REG         MOV  CP$$$,REG
*
*           LCW  REG         MOV  CP$$$,XL
*                            MOV  (XL)+,REG
*                            MOV  XL,CP$$$
*
*           ICP              ICA  CP$$$
       EJC
*
*      -4-  OPERATIONS ON SIGNED INTEGER VALUES
*
*      4.1  LDI  OPS         LOAD INTEGER ACCUMULATOR FROM OPS
*      4.2  ADI  OPS         ADD OPS TO INTEGER ACCUMULATOR
*      4.3  MLI  OPS         MULTIPLY INTEGER ACCUMULATOR BY OPS
*      4.4  SBI  OPS         SUBTRACT OPS FROM INT ACCUMULATOR
*      4.5  DVI  OPS         DIVIDE INTEGER ACCUMULATOR BY OPS
*      4.6  RMI  OPS         SET INT ACCUM TO MOD(INTACC,OPS)
*      4.7  STI  OPS         STORE INTEGER ACCUMULATOR AT OPS
*      4.8  NGI              NEGATE THE VALUE IN THE INTEGER
*                            ACCUMULATOR (CHANGE ITS SIGN)
*
*           THE EQUATION SATISFIED BY OPERANDS AND RESULTS OF
*           DVI AND RMI IS
*                  DIV = QOT * OPS + REM          WHERE
*           DIV = DIVIDEND IN INTEGER ACCUMULATOR
*           QOT = QUOTIENT LEFT IN IA BY DIV
*           OPS = THE DIVISOR
*           REM = REMAINDER LEFT IN IA BY RMI
*           THE SIGN OF THE RESULT OF DVI IS + IF (IA) AND (OPS)
*           HAVE THE SAME SIGN AND IS - IF THEY HAVE OPPOSITE
*           SIGNS. THE SIGN OF (IA) IS ALWAYS USED AS THE SIGN
*           OF THE RESULT OF REM.
*           ASSUMING IN EACH CASE THAT IA CONTAINS THE NUMBER
*           SPECIFIED IN PARENTHESES AND THAT SEVEN AND MSEVN
*           HOLD +7 AND -7 RESP. THE ALGORITHM IS ILLUSTRATED
*           BELOW.
*           (IA = 13)
*           DVI  SEVEN       IA = 1
*           RMI  SEVEN       IA = 6
*           DVI  MSEVN       IA = -1
*           RMI  MSEVN       IA = 6
*           (IA = -13)
*           DVI  SEVEN       IA = -1
*           RMI  SEVEN       IA = -6
*           DVI  MSEVN       IA = 1
*           RMI  MSEVN       IA = -6
       EJC
*
*           THE ABOVE INSTRUCTIONS OPERATE ON A FULL RANGE OF
*           SIGNED INTEGER VALUES. WITH THE EXCEPTION OF LDI AND
*           STI, THESE INSTRUCTIONS MAY CAUSE INTEGER OVERFLOW
*           BY ATTEMPTING TO PRODUCE AN UNDEFINED OR OUT OF
*           RANGE RESULT IN WHICH CASE INTEGER OVERFLOW IS SET,
*           THE RESULT IN (IA) IS UNDEFINED AND THE FOLLOWING
*           INSTRUCTION MUST BE IOV OR INO.
*           PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
*           HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
*           CONDITIONS.
*
*      4.9  INO  PLBL        JUMP TO PLBL IF NO INTEGER OVERFLOW
*      4.10 IOV  PLBL        JUMP TO PLBL IF INTEGER OVERFLOW
*
*           THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
*           FOLLOWING AN INSTRUCTION WHICH CAN CAUSE INTEGER
*           OVERFLOW (ADI, SBI, MLI, DVI, RMI, NGI) AND
*           TEST THE RESULT OF THE PRECEDING INSTRUCTION.
*           IOV AND INO MAY NOT HAVE LABELS.
*
*      4.11 IEQ  PLBL        JUMP TO PLBL IF (IA) EQ 0
*      4.12 IGE  PLBL        JUMP TO PLBL IF (IA) GE 0
*      4.13 IGT  PLBL        JUMP TO PLBL IF (IA) GT 0
*      4.14 ILE  PLBL        JUMP TO PLBL IF (IA) LE 0
*      4.15 ILT  PLBL        JUMP TO PLBL IF (IA) LT 0
*      4.16 INE  PLBL        JUMP TO PLBL IF (IA) NE 0
*
*           THE ABOVE CONDITIONAL JUMP INSTRUCTIONS DO
*           NOT CHANGE THE CONTENTS OF THE ACCUMULATOR.
*           ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
*           PRODUCE NEGATIVE ZERO IN IA PROVIDED THESE
*           INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
       EJC
*
*      -5-  OPERATIONS ON REAL VALUES
*
*      5.1  LDR  OPS         LOAD REAL ACCUMULATOR FROM OPS
*      5.2  STR  OPS         STORE REAL ACCUMULATOR AT OPS
*      5.3  ADR  OPS         ADD OPS TO REAL ACCUMULATOR
*      5.4  SBR  OPS         SUBTRACT OPS FROM REAL ACCUMULATOR
*      5.5  MLR  OPS         MULTIPLY REAL ACCUMULATOR BY OPS
*      5.6  DVR  OPS         DIVIDE REAL ACCUMULATOR BY OPS
*
*           IF THE RESULT OF ANY OF THE ABOVE OPERATIONS CAUSES
*           UNDERFLOW, THE RESULT YIELDED IS 0.0.
*
*           IF THE RESULT OF ANY OF THE ABOVE OPERATIONS IS
*           UNDEFINED OR OUT OF RANGE, REAL OVERFLOW IS SET,
*           THE CONTENTS OF (RA) ARE UNDEFINED AND THE FOLLOWING
*           INSTRUCTION MUST BE EITHER ROV OR RNO.
*           PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
*           HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
*           CONDITIONS.
*
*      5.7  ROV  PLBL        JUMP TO PLBL IF REAL OVERFLOW
*      5.8  RNO  PLBL        JUMP TO PLBL IF NO REAL OVERFLOW
*
*           THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
*           FOLLOWING AN INSTRUCTION WHICH CAN CAUSE REAL
*           OVERFLOW (ADR,SBR,MLR,DVR).
*
*      5.9  NGR              NEGATE REAL ACCUM (CHANGE SIGN)
*
*      5.10 REQ  PLBL        JUMP TO PLBL IF (RA) EQ 0.0
*      5.11 RGE  PLBL        JUMP TO PLBL IF (RA) GE 0.0
*      5.12 RGT  PLBL        JUMP TO PLBL IF (RA) GT 0.0
*      5.13 RLE  PLBL        JUMP TO PLBL IF (RA) LE 0.0
*      5.14 RLT  PLBL        JUMP TO PLBL IF (RA) LT 0.0
*      5.15 RNE  PLBL        JUMP TO PLBL IF (RA) NE 0.0
*
*           THE ABOVE CONDITIONAL INSTRUCTIONS DO NOT AFFECT
*           THE VALUE STORED IN THE REAL ACCUMULATOR.
*           ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
*           PRODUCE NEGATIVE ZERO IN RA PROVIDED THESE
*           INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
       EJC
*
*      -6-  OPERATIONS ON CHARACTER VALUES
*
*           CHARACTER OPERATIONS EMPLOY THE CONCEPT OF A
*           CHARACTER POINTER WHICH USES EITHER
*           INDEX REGISTER XR OR XL (NOT XS).
*
*           A CHARACTER POINTER POINTS TO A SPECIFIC CHARACTER
*           IN A STRING OF CHARACTERS STORED CFP$C CHARS TO A
*           WORD. THE ONLY OPERATIONS PERMITTED ON A CHARACTER
*           POINTER ARE LCH AND SCH. IN PARTICULAR, A CHARACTER
*           POINTER MAY NOT EVEN BE MOVED WITH MOV.
*
*              RESTRICTION 1.
*              --------------
*           IT IS IMPORTANT WHEN CODING IN MINIMAL TO ENSURE
*           THAT NO ACTION OCCURRING BETWEEN THE INITIAL USE OF
*           PLC OR PSC AND THE EVENTUAL CLEARING OF XL OR XR ON
*           COMPLETION OF CHARACTER OPERATIONS CAN INITIATE A
*           GARBAGE COLLECTION. THE LATTER OF COURSE COULD CAUSE
*           THE ADDRESSED CHARACTERS TO BE MOVED LEAVING THE
*           CHARACTER POINTERS POINTING TO RUBBISH.
*
*              RESTRICTION 2.
*              --------------
*           A FURTHER RESTRICTION TO BE OBSERVED IN CODE
*           HANDLING CHARACTER STRINGS, IS THAT STRINGS BUILT
*           DYNAMICALLY SHOULD BE RIGHT PADDED WITH ZERO
*           CHARACTERS TO A FULL WORD BOUNDARY TO PERMIT EASY
*           HASHING AND USE OF CEQ OR CNE IN TESTING STRINGS
*           FOR EQUALITY.
*
*      6.1  PLC  X,OPV       PREPARE CH PTR FOR LCH,CMC,MVC,TRC
*
*      6.2  PSC  X,OPV       PREPARE CHAR. PTR FOR SCH,MVC.
*
*           OPV CAN BE OMITTED IF IT IS ZERO.
*           THE CHAR. INITIALLY ADDRESSED IS DETERMINED BY THE
*           WORD ADDRESS IN X AND THE INTEGER OFFSET OPV.
*           THERE IS AN AUTOMATIC IMPLIED OFFSET OF CFP$F BYTES.
*           CFP$F IS USED TO FORMALLY INTRODUCE INTO MINIMAL A
*           VALUE NEEDED IN TRANSLATING THESE OPCODES WHICH,
*           SINCE MINIMAL ITSELF DOES NOT PRESCRIBE A STRING
*           STRUCTURE IN DETAIL, DEPENDS ON THE CHOICE OF A DATA
*           STRUCTURE FOR STRINGS IN THE MINIMAL PROGRAM.
*           E.G. IF CFP$B = CFP$C = 3, CFP$F = 6, NUM01 = 1, XL
*           POINTS TO A SERIES OF 4 WORDS, ABC/DEF/GHI/JKL, THEN
*               PLC  XL,=NUM01
*           POINTS TO H.
       EJC
*
*      -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
*
*      6.3  LCH  REG,OPC     LOAD CHARACTER INTO REG
*
*      6.4  SCH  REG,OPC     STORE CHARACTER FROM REG
*
*           THESE OPERATIONS ARE DEFINED SUCH THAT THE CHARACTER
*           IS RIGHT JUSTIFIED IN REGISTER REG WITH ZERO BITS TO
*           THE LEFT. AFTER LCH FOR EXAMPLE, IT IS LEGITIMATE
*           TO REGARD REG AS CONTAINING THE ORDINAL INTEGER
*           CORRESPONDING TO THE CHARACTER.
*
*           OPC IS ONE OF THE FOLLOWING THREE POSSIBILITIES.
*
*           (X)              THE CHARACTER POINTED TO BY THE
*                            CHARACTER POINTER IN X. THE
*                            CHARACTER POINTER IS NOT CHANGED.
*
*           (X)+             SAME CHARACTER AS (X) BUT THE
*                            CHARACTER POINTER IS INCREMENTED
*                            TO POINT TO THE NEXT CHARACTER
*                            FOLLOWING EXECUTION.
*
*           -(X)             THE CHARACTER POINTER IS DECRE-
*                            MENTED BEFORE ACCESSING THE
*                            CHARACTER SO THAT THE PREVIOUS
*                            CHARACTER IS REFERENCED.
*
*      6.5  CSC  X           COMPLETE STORE CHARACTERS
*
*           THIS INSTRUCTION MARKS COMPLETION OF A
*           PSC,SCH,SCH,...,SCH SEQUENCE INITIATED BY
*           A  PSC  X INSTRUCTION. NO MORE SCH INSTRUCTIONS
*           USING  X  SHOULD BE OBEYED UNTIL ANOTHER PSC
*           IS OBEYED. THIS MAKES BUFFERING OF SCH CHARS
*           FEASIBLE ON MACHINES LACKING CHARACTER ORDERS.
*           IF CSC IS NOT A NO-OP, IT MUST OBSERVE RESTRICTION 2
*
*           THE FOLLOWING INSTRUCTIONS ARE USED TO COMPARE
*           TWO WORDS CONTAINING CFP$C CHARACTERS.
*           COMPARISONS DISTINCT FROM BEQ,BNE ARE PROVIDED AS
*           ON SOME TARGET MACHINES, THE POSSIBILITY OF THE SIGN
*           BIT BEING SET MAY REQUIRE SPECIAL ACTION.
*           NOTE THAT RESTRICTION 2 ABOVE, EASES USE OF THESE
*           ORDERS IN TESTING COMPLETE STRINGS FOR EQUALITY,
*           SINCE WHOLE WORD TESTS ARE POSSIBLE.
*
*      6.6  CEQ  OPW,OPW,PLBL JUMP TO PLBL IF OPW EQ OPW
*      6.7  CNE  OPW,OPW,PLBL JUMP TO PLBL IF OPW NE OPW
       EJC
*
*      -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
*
*      6.8  CMC  PLBL,PLBL   COMPARE CHARACTERS
*
*           CMC IS USED TO COMPARE TWO CHARACTER STRINGS. BEFORE
*           EXECUTING CMC, REGISTERS ARE SET UP AS FOLLOWS.
*           (XL)             CHARACTER PTR FOR FIRST STRING
*           (XR)             CHARACTER POINTER FOR SECOND STRING
*           (WA)             CHARACTER COUNT (MUST BE .GT. ZERO)
*           XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
*           CONTROL PASSES TO FIRST PLBL IF THE FIRST STRING
*           IS LEXICALLY LESS THAN THE SECOND STRING, AND TO
*           THE SECOND PLBL IF THE FIRST STRING IS LEXICALLY
*           GREATER. CONTROL PASSES TO THE FOLLOWING INSTRUCTION
*           IF THE STRINGS ARE IDENTICAL. AFTER EXECUTING THIS
*           INSTRUCTION, THE VALUES OF XR AND XL ARE SET TO ZERO
*           AND THE VALUE IN (WA) IS UNDEFINED.
*           ARGUMENTS TO CMC MAY BE COMPLETE OR PARTIAL
*           STRINGS, SO MAKING OPTIMISATION TO USE WHOLE WORD
*           COMPARISONS DIFFICULT (DEPENDENT IN GENERAL ON
*           SHIFTS AND MASKING).
*
*      6.9  TRC              TRANSLATE CHARACTERS
*
*           TRC IS USED TO TRANSLATE A CHARACTER STRING USING A
*           SUPPLIED TRANSLATION TABLE. BEFORE EXECUTING TRC THE
*           REGISTERS ARE SET AS FOLLOWS.
*           (XL)             CHAR PTR TO STRING TO BE TRANSLATED
*           (XR)             CHAR PTR TO TRANSLATE TABLE
*           (WA)             LENGTH OF STRING TO BE TRANSLATED
*           XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
*           THE TRANSLATE TABLE CONSISTS OF CFP$A CONTIGUOUS
*           CHARACTERS GIVING THE TRANSLATIONS OF THE CFP$A
*           CHARACTERS IN THE ALPHABET. ON COMPLETION, (XR) AND
*           (XL) ARE SET TO ZERO AND (WA) IS UNDEFINED.
       EJC
*
*      -7-  OPERATIONS ON BIT STRING VALUES
*
*      7.1  ANB  OPW,W       AND BIT STRING VALUES
*      7.2  ORB  OPW,W       OR BIT STRING VALUES
*      7.3  XOB  OPW,W       EXCLUSIVE OR BIT STRING VALUES
*
*           IN THE ABOVE OPERATIONS, THE LOGICAL CONNECTIVE IS
*           APPLIED SEPARATELY TO EACH OF THE CFP$N BITS.
*           THE RESULT IS STORED IN THE SECOND OPERAND LOCATION.
*
*      7.4  CMB  W           COMPLEMENT ALL BITS IN OPW
*
*      7.5  RSH  W,VAL       RIGHT SHIFT BY VAL BITS
*      7.6  LSH  W,VAL       LEFT SHIFT BY VAL BITS
*      7.7  RSX  W,(X)       RIGHT SHIFT W NUMBER OF BITS IN X
*      7.8  LSX  W,(X)       LEFT SHIFT W NUMBER OF BITS IN X
*
*           THE ABOVE SHIFTS ARE LOGICAL SHIFTS IN WHICH BITS
*           SHIFTED OUT ARE LOST AND ZERO BITS SUPPLIED AS
*           REQUIRED. THE SHIFT COUNT IS IN THE RANGE 0-CFP$N.
*
*      7.9  NZB  W,PLBL      JUMP TO PLBL IF W IS NOT
*                            ALL ZERO BITS.
*
*      7.10 ZRB  W,PLBL      JUMP TO PLBL IF W IS ALL ZERO BITS
*
*      7.11 ZGB  OPN         ZEROISE GARBAGE BITS
*
*           OPN CONTAINS A BIT STRING REPRESENTING A WORD
*           OF CHARACTERS FROM A STRING OR SOME FUNCTION
*           FORMED FROM SUCH CHARACTERS (E.G. AS A RESULT OF
*           HASHING). ON A MACHINE WHERE THE WORD SIZE IS NOT A
*           MULTIPLE OF THE CHARACTER SIZE, SOME BITS IN REG MAY
*           BE UNDEFINED. THIS OPCODE REPLACES SUCH BITS BY THE
*           ZERO BIT. ZGB IS A NO-OP IF THE WORD SIZE IS A
*           MULTIPLE OF THE CHARACTER SIZE.
       EJC
*
*      -8-  CONVERSION INSTRUCTIONS
*
*           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
*           BETWEEN LENGTHS IN BYTES AND LENGTHS IN WORDS.
*
*      8.1  WTB  REG         CONVERT REG FROM WORDS TO BYTES.
*                            THAT IS, MULTIPLY BY CFP$B. THIS IS
*                            A NO-OP IF CFP$B IS ONE.
*
*      8.2  BTW  REG         CONVERT REG FROM BYTES TO WORDS
*                            BY DIVIDING REG BY CFP$B DISCARDING
*                            THE FRACTION. NO-OP IF CFP$B IS ONE
*
*           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
*           OF ONE WORD INTEGER VALUES (ADDRESSES) TO AND
*           FROM THE FULL SIGNED INTEGER FORMAT.
*
*      8.3  MTI  OPN         THE VALUE OF OPN (AN ADDRESS)
*                            IS MOVED AS A POSITIVE INTEGER
*                            TO THE INTEGER ACCUMULATOR.
*
*      8.4  MFI  OPN,PLBL    THE VALUE CURRENTLY STORED IN THE
*                            INTEGER ACCUMULATOR IS MOVED
*                            TO OPN AS AN ADDRESS IF IT IS IN
*                            THE RANGE 0 TO CFP$M INCLUSIVE.
*                            IF THE ACCUMULATOR VALUE IS
*                            OUTSIDE THIS RANGE, THEN THE RESULT
*                            IN OPN IS UNDEFINED AND CONTROL IS
*                            PASSED TO PLBL. MFI DESTROYS THE
*                            VALUE OF (IA) WHETHER OR NOT
*                            INTEGER OVERFLOW IS SIGNALLED.
*                            PLBL MAY BE OMITTED IF OVERFLOW
*                            IS IMPOSSIBLE.
*
*           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
*           BETWEEN REAL VALUES AND INTEGER VALUES.
*
*      8.5  ITR              CONVERT INTEGER VALUE IN INTEGER
*                            ACCUMULATOR TO REAL AND STORE IN
*                            REAL ACCUMULATOR (MAY LOSE
*                            PRECISION IN SOME CASES)
*
*      8.6  RTI  PLBL        CONVERT THE REAL VALUE IN RA TO
*                            AN INTEGER AND PLACE RESULT IN IA.
*                            CONVERSION IS BY TRUNCATION OF THE
*                            FRACTION - NO ROUNDING OCCURS.
*                            JUMP TO PLBL IF OUT OF RANGE. (RA)
*                            IS NOT CHANGED IN EITHER CASE.
*                            PLBL MAY BE OMITTED IF OVERFLOW
*                            IS IMPOSSIBLE.
       EJC
*
*      -8-  CONVERSION INSTRUCTIONS (CONTINUED)
*
*           THE FOLLOWING INSTRUCTIONS PROVIDE FOR COMPUTING
*           THE LENGTH OF STORAGE REQUIRED FOR A TEXT STRING.
*
*      8.7  CTW  W,VAL       THIS INSTRUCTION COMPUTES THE SUM
*                            (NUMBER OF WORDS REQUIRED TO STORE
*                            W CHARACTERS) + (VAL). THE SUM
*                            IS STORED IN W.
*                            FOR EXAMPLE, IF CFP$C IS 5, AND WA
*                            CONTAINS 32, THEN CTW WA,2
*                            GIVES A RESULT OF 9 IN WA.
*
*      8.8  CTB  W,VAL       CTB IS EXACTLY LIKE CTW EXCEPT THAT
*                            THE RESULT IS IN BYTES. IT HAS THE
*                            SAME EFFECT AS CTW W,VAL  WTB W
*
*           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
*           FROM INTEGERS TO AND FROM NUMERIC DIGIT CHARACTERS
*           FOR USE IN NUMERIC CONVERSION ROUTINES. THEY EMPLOY
*           NEGATIVE INTEGER VALUES TO ALLOW FOR PROPER
*           CONVERSION OF NUMBERS WHICH CANNOT BE COMPLEMENTED.
*
*      8.9  CVM  PLBL        CONVERT BY MULTIPLICATION
*
*           THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
*           IS MULTIPLIED BY 10. WB CONTAINS THE CHARACTER
*           CODE FOR A DIGIT. THE VALUE OF THIS DIGIT IS THEN
*           SUBTRACTED FROM THE RESULT. IF THE RESULT IS OUT OF
*           RANGE, THEN CONTROL IS PASSED TO PLBL WITH THE
*           RESULT IN (IA) UNDEFINED. EXECUTION OF CVM LEAVES
*           THE RESULT IN (WB) UNDEFINED.
*
*      8.10 CVD              CONVERT BY DIVISION
*
*           THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
*           IS DIVIDED BY 10. THE QUOTIENT (ZERO OR NEGATIVE)
*           IS REPLACED IN THE ACCUMULATOR. THE REMAINDER IS
*           CONVERTED TO THE CHARACTER CODE OF A DIGIT AND
*           PLACED IN WA. FOR EXAMPLE, AN OPERAND OF -523 GIVES
*           A QUOTIENT OF -52 AND A REMAINDER IN WA OF CH$D3.
       EJC
*
*      -9-  BLOCK MOVE INSTRUCTIONS
*
*      THE FOLLOWING INSTRUCTIONS ARE USED FOR TRANSFERRING
*      DATA FROM ONE AREA OF MEMORY TO ANOTHER IN BLOCKS.
*      THEY CAN BE IMPLEMENTED WITH THE INDICATED SERIES OF
*      OTHER MACRO-INSTRUCTIONS, BUT MORE EFFICIENT IMPLE-
*      MENTATIONS WILL BE POSSSIBLE ON MOST MACHINES.
*
*      9.1  MVC              MOVE CHARACTERS
*
*           BEFORE OBEYING THIS ORDER WA,XL,XR SHOLD HAVE BEEN
*           SET UP, THE LATTER TWO BY PLC, PSC RESP.
*           MVC IS EQUIVALENT TO THE SEQUENCE
*
*                  MOV  WB,DUMPB
*                  LCT  WA,WA
*           LOOPC  LCH  WB,(XL)+
*                  SCH  WB,(XR)+
*                  BCT  WA,LOOPC
*                  CSC  XR
*                  MOV  DUMPB,WB
*
*           THE CHARACTER POINTERS ARE BUMPED AS INDICATED
*           AND THE FINAL VALUE OF WA IS UNDEFINED.
*
*      9.2  MVW              MOVE WORDS
*
*           MVW IS EQUIVALENT TO THE SEQUENCE
*
*           LOOPW  MOV  (XL)+,(XR)+
*                  DCA  WA               WA = BYTES TO MOVE
*                  BNZ  WA,LOOPW
*
*           NOTE THAT THIS IMPLIES THAT THE VALUE IN WA IS THE
*           LENGTH IN BYTES WHICH IS A MULTIPLE OF CFP$B.
*           THE INITIAL ADDRESSES IN XR,XL ARE WORD ADDRESSES.
*           AS INDICATED, THE FINAL XR,XL VALUES POINT PAST THE
*           NEW AND OLD REGIONS OF MEMORY RESPECTIVELY.
*           THE FINAL VALUE OF WA IS UNDEFINED.
*           WA,XL,XR MUST BE SET UP BEFORE OBEYING MVW.
*
*      9.3  MWB              MOVE WORDS BACKWARDS
*
*           MWB IS EQUIVALENT TO THE SEQUENCE
*
*           LOOPB  MOV  -(XL),-(XR)
*                  DCA  WA               WA = BYTES TO MOVE
*                  BNZ  WA,LOOPB
*
*           THERE IS A REQUIREMENT THAT THE INITIAL VALUE IN XL
*           BE AT LEAST 256 LESS THAN THE VALUE IN XR. THIS
*           ALLOWS AN IMPLEMENTATION IN WHICH CHUNKS OF 256
*           BYTES ARE MOVED FORWARD (IBM 360, ICL 1900).
*           THE FINAL VALUE OF WA IS UNDEFINED.
*           WA,XL,XR MUST BE SET UP BEFORE OBEYING MWB.
       EJC
*
*      -10- OPERATIONS CONNECTED WITH THE STACK
*
*      THE STACK IS AN AREA IN MEMORY WHICH IS DEDICATED FOR USE
*      IN CONJUNCTION WITH THE STACK POINTER REGISTER (XS). AS
*      PREVIOUSLY DESCRIBED, IT IS USED BY THE JSR AND EXI
*      INSTRUCTIONS AND MAY BE USED FOR STORAGE OF ANY OTHER
*      DATA AS REQUIRED.
*
*      THE STACK BUILDS EITHER WAY IN MEMORY AND AN IMPORTANT
*      RESTRICTION IS THAT THE VALUE IN (XS) MUST BE THE ADDRESS
*      OF THE STACK FRONT AT ALL TIMES SINCE
*      SOME IMPLEMENTATIONS MAY RANDOMLY DESTROY STACK LOCATIONS
*      BEYOND (XS).
*
*      THE STARTING STACK BASE ADDRESS IS PASSED
*      IN (XS) AT THE START OF EXECUTION. DURING EXECUTION IT
*      IS NECESSARY TO MAKE SURE THAT THE STACK DOES NOT
*      OVERFLOW. THIS IS ACHIEVED BY EXECUTING THE FOLLOWING
*      INSTRUCTION PERIODICALLY.
*
*      10.1 CHK              CHECK STACK OVERFLOW
*
*      AFTER SUCCESSFULLY EXECUTING CHK, IT IS PERMISSIBLE TO
*      USE UP TO 100 ADDITIONAL WORDS BEFORE ISSUING ANOTHER CHK
*      THUS CHK NEED NOT BE ISSUED EVERY TIME THE STACK IS
*      EXPANDED. IN SOME IMPLEMENTATIONS, THE CHECKING MAY BE
*      AUTOMATIC AND CHK WILL HAVE NO EFFECT. FOLLOWING THE
*      ABOVE RULE MAKES SURE THAT THE PROGRAM WILL OPERATE
*      CORRECTLY IN IMPLEMENTATIONS WITH NO AUTOMATIC CHECK.
*
*      IF STACK OVERFLOW OCCURS (DETECTED EITHER AUTOMATICALLY
*      OR BY A CHK INSTRUCTION), THEN CONTROL IS PASSED TO THE
*      STACK OVERFLOW SECTION (SEE PROGRAM FORM). NOTE THAT THIS
*      TRANSFER MAY TAKE PLACE FOLLOWING ANY INSTRUCTION WHICH
*      STORES DATA AT A NEW LOCATION ON THE STACK.
*      AFTER STACK OVERFLOW, STACK IS ARBITRARILY POPPED
*      TO GIVE SOME SPACE IN WHICH THE ERROR PROCEDURE MAY
*      OPERATE. OTHERWISE A LOOP OF STACK OVERFLOWS MAY OCCUR.
       EJC
*
*      -11- DATA GENERATION INSTRUCTIONS
*
*      THE FOLLOWING INSTRUCTIONS ARE USED TO GENERATE CONSTANT
*      VALUES IN THE CONSTANT SECTION AND ALSO TO ASSEMBLE
*      INITIAL VALUES IN THE WORKING STORAGE SECTION. THEY
*      MAY NOT APPEAR EXCEPT IN THESE TWO SECTIONS.
*
*      11.1 DAC  ADDR        ASSEMBLE ADDRESS CONSTANT.
*                            GENERATES ONE WORD CONTAINING THE
*                            SPECIFIED ONE WORD INTEGER
*                            VALUE (ADDRESS).
*
*      11.2 DIC  INTEGER     GENERATES AN INTEGER VALUE WHICH
*                            OCCUPIES CFP$I CONSECUTIVE WORDS.
*                            THE OPERAND IS A DIGIT STRING WITH
*                            A REQUIRED LEADING SIGN.
*
*      11.3 DRC  REAL        ASSEMBLES A REAL CONSTANT WHICH
*                            OCCUPIES CFP$R CONSECUTIVE WORDS.
*                            THE OPERAND FORM MUST OBEY THE
*                            RULES FOR A FORTRAN REAL CONSTANT
*                            WITH THE EXTRA REQUIREMENT THAT A
*                            LEADING SIGN BE PRESENT.
*
*      11.4 DTC  DTEXT       DEFINE TEXT CONSTANT. DTEXT
*                            IS STARTED AND ENDED WITH ANY
*                            CHARACTER NOT CONTAINED IN THE
*                            CHARACTERS TO BE ASSEMBLED. THE
*                            CONSTANT OCCUPIES CONSECUTIVE WORDS
*                            AS DICTATED BY THE CONFIGURATION
*                            PARAMETER CFP$C. ANY UNUSED CHARS
*                            IN THE LAST WORD ARE RIGHT FILLED
*                            WITH ZEROS (I.E. THE CHARACTER
*                            WHOSE INTERNAL CODE IS ZERO).
*                            THE STRING CONTAINS A SEQUENCE OF
*                            LETTERS, DIGITS, BLANKS AND ANY OF
*                            THE FOLLOWING SPECIAL CHARACTERS.
*                            =,$.(*)/+-
*                            NO OTHER CHARACTERS
*                            MAY BE USED IN A DTEXT OPERAND.
*
*      11.5 DBC  VAL         ASSEMBLE BIT STRING CONSTANT. THE
*                            OPERAND IS A POSITIVE INTEGER
*                            VALUE WHICH IS INTERPRETED IN
*                            BINARY, RIGHT JUSTIFIED AND LEFT
*                            FILLED WITH ZERO BITS. THUS 5 WOULD
*                            IMPLY THE BIT STRING VALUE 00..101.
       EJC
*
*      -12- SYMBOL DEFINITION INSTRUCTIONS
*
*      THE FOLLOWING INSTRUCTION IS USED TO DEFINE SYMBOLS
*      IN THE DEFINITIONS SECTION. IT MAY NOT BE USED ELSEWHERE.
*
*      12.1 EQU  EQOP        DEFINE SYMBOL
*
*           THE SYMBOL WHICH APPEARS IN THE LABEL FIELD IS
*           DEFINED TO HAVE THE ABSOLUTE VALUE GIVEN
*           BY THE EQOP OPERAND. A GIVEN SYMBOL MAY BE DEFINED
*           ONLY ONCE IN THIS MANNER, AND ANY SYMBOLS OCCURING
*           IN EQOP MUST BE PREVIOUSLY DEFINED.
*
*           THE FOLLOWING ARE THE POSSIBILITIES FOR EQOP
*
*           VAL              THE INDICATED VALUE IS USED
*
*           VAL+VAL          THE SUM OF THE TWO VALUES IS USED.
*                            THIS SUM MUST NOT EXCEED CFP$M
*
*           VAL-VAL          THE DIFFERENCE BETWEEN THE TWO
*                            VALUES (MUST BE POSITIVE) IS USED.
*
*           *                THIS FORMAT DEFINES THE LABEL BY
*                            USING A VALUE SUPPLIED BY THE
*                            MINIMAL TRANSLATOR. VALUES ARE
*                            REQUIRED FOR THE
*           CFP$X            (CONFIGURATION PARAMETERS)
*           E$XXX            (ENVIRONMENT PARAMETERS)
*           CH$XX            (CHARACTER CODES).
*                            IN ORDER FOR A TRANSLATOR TO
*                            HANDLE THIS FORMAT CORRECTLY THE
*                            DEFINITIONS SECTION MUST BE
*                            CONSULTED FOR DETAILS OF REQUIRED
*                            SYMBOLS AS LISTED AT THE FRONT OF
*                            THE SECTION.
       EJC
*
*      SYMBOL DEFINITION INSTRUCTIONS (CONTINUED)
*
*      THE FOLLOWING INSTRUCTIONS MAY BE USED TO DEFINE SYMBOLS
*      IN THE PROCEDURE SECTION. THEY MAY NOT BE USED IN
*      ANY OTHER PART OF THE PROGRAM.
*
*      12.2 EXP              DEFINE EXTERNAL PROCEDURE
*
*           EXP DEFINES THE SYMBOL APPEARING IN THE LABEL FIELD
*           TO BE THE NAME OF AN EXTERNAL PROCEDURE WHICH CAN BE
*           REFERENCED IN A SUBSEQUENT JSR INSTRUCTION. THE
*           CODING FOR THE PROCEDURE IS EXTERNAL TO THE
*           CODING OF THE SOURCE PROGRAM IN THIS LANGUAGE.
*           THE CODE FOR EXTERNAL PROCEDURES MAY BE
*           REFERRED TO COLLECTIVELY AS THE OPERATING SYSTEM
*           INTERFACE, OR MORE BRIEFLY, OSINT, AND WILL
*           FREQUENTLY BE A SEPARATELY COMPILED SEGMENT OF CODE
*           LOADED WITH SPITBOL TO PRODUCE A COMPLETE SYSTEM.
*
*      12.3 INP  PTYP,INT    DEFINE INTERNAL PROCEDURE
*
*           INP DEFINES THE SYMBOL APPEARING IN THE LABEL FIELD
*           TO BE THE NAME OF AN INTERNAL PROCEDURE AND GIVES
*           ITS TYPE AND NUMBER OF EXIT PARAMETERS. THE LABEL
*           CAN BE REFERENCED IN JSR INSTRUCTIONS AND
*           IT MUST APPEAR LABELLING A PRC INSTRUCTION IN THE
*           PROGRAM SECTION.
*
*      12.4 INR              DEFINE INTERNAL ROUTINE
*
*           INR DEFINES THE SYMBOL APPEARING IN THE LABEL
*           FIELD TO BE THE NAME OF AN INTERNAL ROUTINE. THE
*           LABEL MAY BE REFERENCED IN ANY TYPE OF BRANCH ORDER
*           AND IT MUST APPEAR LABELLING A RTN INSTRUCTION IN
*           THE PROGRAM SECTION.
       EJC
*
*      -13- ASSEMBLY LISTING LAYOUT INSTRUCTIONS
*
*      13.1 EJC              EJECT TO NEXT PAGE
*
*      13.2 TTL  TEXT        SET NEW ASSEMBLY TITLE
*
*           TTL IMPLIES AN IMMEDIATE EJECT OF THE
*           ASSEMBLY LISTING TO PRINT THE NEW TITLE.
*
*           THE USE OF TTL AND EJC CARDS IS SUCH THAT THE
*           PROGRAM WILL LIST NEATLY IF THE PRINTER PRINTS
*           AS MANY AS 58 LINES PER PAGE. IN THE EVENT THAT
*           THE PRINTER DEPTH IS LESS THAN THIS, OR IF THE
*           LISTING CONTAINS INTERSPERSED LINES (SUCH AS ACTUAL
*           GENERATED CODE), THEN THE FORMAT MAY BE UPSET.
*
*           LINES STARTING WITH AN ASTERISK ARE COMMENT LINES
*           WHICH CAUSE NO CODE TO BE GENERATED AND MAY OCCUR
*           FREELY ANYWHERE IN THE PROGRAM. THE FORMAT FOR
*           COMMENT LINES IS GIVEN IN SECTION -15-.
       EJC
*
*      -14- PROGRAM FORM
*
*           THE PROGRAM CONSISTS OF SEPARATE SECTIONS SEPARATED
*           BY SEC OPERATIONS. THE SECTIONS MUST APPEAR IN THE
*           FOLLOWING SPECIFIED ORDER.
*
*      14.1 SEC              START OF PROCEDURE SECTION
*
*           (PROCEDURE SECTION)
*
*           SEC               START OF DEFINITIONS SECTION
*
*           (DEFINITIONS SECTION)
*
*           SEC               START OF CONSTANT STORAGE SECTION
*
*           (CONSTANT STORAGE SECTION)
*
*           SEC               START OF WORKING STORAGE SECTION
*
*           (WORKING STORAGE SECTION)
*
*           SEC               START OF PROGRAM SECTION
*
*           (PROGRAM SECTION)
*
*           SEC               START OF STACK OVERFLOW SECTION
*
*           (STACK OVERFLOW SECTION)
*
*           SEC               START OF ERROR SECTION
*
*           (ERROR SECTION)
*
*      14.2 END              END OF ASSEMBLY
       EJC
*
*      SECTION 10 - PROGRAM FORM
*
*      PROCEDURE SECTION
*
*           THE PROCEDURE SECTION CONTAINS ALL THE EXP
*           INSTRUCTIONS FOR EXTERNALLY AVAILABLE PROCEDURES
*           AND INP,INR OPCODES FOR INTERNAL PROCEDURES,ROUTINES
*           SO THAT A SINGLE PASS MINIMAL TRANSLATOR HAS ADVANCE
*           KNOWLEDGE OF PROCEDURE TYPES WHEN TRANSLATING CALLS.
*
*      DEFINITIONS SECTION
*
*           THE DEFINITIONS SECTION CONTAINS EQU INSTRUCTIONS
*           WHICH DEFINE SYMBOLS REFERENCED LATER ON IN THE
*           PROGRAM, CONSTANT AND WORK SECTIONS.
*
*      CONSTANT STORAGE SECTION
*
*           THE CONSTANT STORAGE SECTION CONSISTS ENTIRELY
*           OF CONSTANTS ASSEMBLED WITH THE DAC,DIC,DRC,DTC,DBC
*           ASSEMBLY OPERATIONS. THESE CONSTANTS CAN BE FREELY
*           REFERENCED BY THE PROGRAM INSTRUCTIONS.
*
*      WORKING STORAGE SECTION
*
*           THE WORKING STORAGE SECTION CONSISTS ENTIRELY OF
*           DAC,DIC,DRC,DBC,DTC INSTRUCTIONS TO DEFINE A FIXED
*           LENGTH WORK AREA. THE WORK LOCATIONS IN THIS AREA
*           CAN BE DIRECTLY REFERENCED IN PROGRAM INSTRUCTIONS.
*           THE AREA IS INITIALIZED IN ACCORDANCE WITH THE
*           VALUES ASSEMBLED IN THE INSTRUCTIONS.
*
*      PROGRAM SECTION
*
*           THE PROGRAM SECTION CONTAINS PROGRAM INSTRUCTIONS
*           AND ASSOCIATED OPERATIONS (SUCH AS PRC, ENP, ENT).
*           CONTROL IS PASSED TO THE FIRST INSTRUCTION IN THIS
*           SECTION WHEN EXECUTION IS INITIATED.
*
*      STACK OVERFLOW SECTION
*
*           THE STACK OVERFLOW SECTION CONTAINS INSTRUCTIONS
*           LIKE THE PROGRAM SECTION. CONTROL IS PASSED TO THE
*           FIRST INSTRUCTION IN THIS SECTION FOLLOWING THE
*           OCCURRENCE OF STACK OVERFLOW, SEE CHK INSTRUCTION.
*
*      ERROR SECTION
*
*           THE ERROR SECTION CONTAINS INSTRUCTIONS LIKE THE
*           PROGRAM SECTION. CONTROL IS PASSED TO THE FIRST
*           INSTRUCTION IN THIS SECTION WHEN A PROCEDURE EXIT
*           CORRESPONDS TO AN ERROR PARAMETER (SEE ERR)
*           OR WHEN AN ERB OPCODE IS OBEYED. THE ERROR CODE
*           MUST CLEAN UP THE MAIN STACK AND CATER FOR THE
*           POSSIBILITY THAT A SUBROUTINE STACK MAY NEED CLEAN
*           UP.
       EJC
*      OSINT
*
*           THOUGH NOT PART OF THE MINIMAL SOURCE, IT IS USEFUL
*           TO REFER TO THE COLLECTION OF INITIALISATION AND
*           EXP ROUTINES AS OSINT (OPERATING SYSTEM INTERFACE).
*           ERRORS OCCURRING WITHIN OSINT PROCEDURES ARE
*           USUALLY HANDLED BY MAKING AN ERROR RETURN. IF THIS
*           IS NOT FEASIBLE OR APPROPRIATE, OSINT MAY USE THE
*           MINIMAL ERROR SECTION TO REPORT ERRORS DIRECTLY BY
*           BRANCHING TO IT WITH A SUITABLE NUMERIC ERROR
*           CODE IN WA.
       EJC
*
*      SECTION 11 - STATEMENT FORMAT
*
*      ALL LABELS ARE EXACTLY FIVE CHARACTERS LONG AND START
*      WITH THREE LETTERS (ABCDEFGHIJKLMNOPQRSTUVWXY$) FOLLOWED
*      BY TWO LETTERS OR DIGITS.
*      THE LETTER Z MAY NOT BE USED IN MINIMAL SYMBOLS BUT $ IS
*      PERMITTED.
*      FOR IMPLEMENTATIONS WHERE $ MAY NOT APPEAR IN THE
*      TARGET CODE , A SIMPLE SUBSTITUTION OF Z FOR $
*      MAY THUS BE MADE WITHOUT RISK OF PRODUCING NON-UNIQUE
*      SYMBOLS.
*      THE LETTER Z IS HOWEVER PERMITTED IN OPCODE MNEMONICS AND
*      IN COMMENTS.
*
*      MINIMAL STATEMENTS ARE IN A FIXED FORMAT AS FOLLOWS.
*
*      COLS 1-5              LABEL IF ANY (ELSE BLANK)
*
*      COLS 6-7              ALWAYS BLANK
*
*      COLS 8-10             OPERATION MNEMONIC
*
*      COLS 11-12            BLANKS
*
*      COLS 13-28            OPERAND FIELD, TERMINATED BY A
*                            BLANK. MAY OCCASIONALLY
*                            EXTEND PAST COLUMN 28.
*
*      COLS 30-64            COMMENT. ALWAYS SEPARATED FROM THE
*                            OPERAND FIELD BY AT LEAST ONE BLANK
*                            MAY OCCASIONALLY START AFTER COLUMN
*                            30 IF THE OPERAND EXTENDS PAST 28.
*                            A SPECIAL EXCEPTION OCCURS FOR THE
*                            IFF INSTRUCTION, WHOSE COMMENT MAY
*                            BE ONLY 20 CHARACTERS LONG (30-49).
*
*      COLS 65 ON            UNUSED
*
*
*      COMMENT LINES HAVE THE FOLLOWING FORMAT
*
*      COL 1                 ASTERISK
*
*      COLS 2-7              BLANK
*
*      COLS 8-64             ARBITRARY TEXT, RESTRICTED TO THE
*                            FORTRAN CHARACTER SET.
*
*
*      THE FORTRAN CHARACTER SET IS A-Z 0-9 =,$.(*)-/+
       EJC
*
*      SECTION 12 - PROGRAM EXECUTION
*
*      EXECUTION OF THE PROGRAM BEGINS WITH THE FIRST
*      INSTRUCTION IN THE PROGRAM SECTION.
*
*      IN ADDITION TO THE FIXED LENGTH MEMORY REGIONS DEFINED
*      BY THE ASSEMBLY, THERE ARE TWO DYNAMICALLY ALLOCATED
*      MEMORY REGIONS AS FOLLOWS.
*
*      DATA AREA             THIS IS AN AREA AVAILABLE TO THE
*                            PROGRAM FOR GENERAL STORAGE OF DATA
*                            ANY DATA VALUE MAY BE STORED IN
*                            THIS AREA EXCEPT INSTRUCTIONS.
*                            IN SOME IMPLEMENTATIONS, IT MAY BE
*                            POSSIBLE TO INCREASE THE SIZE OF
*                            THIS AREA DYNAMICALLY BY ADDING
*                            WORDS AT THE TOP END WITH A CALL
*                            TO A SYSTEM PROCEDURE.
*
*      STACK AREA            THIS REGION OF MEMORY HOLDS
*                            THE STACK USED FOR SUBROUTINE CALLS
*                            AND OTHER STORAGE OF ONE WORD
*                            INTEGER VALUES (ADDRESSES). THIS
*                            IS THE STACK ASSOCIATED WITH
*                            INDEX REGISTER XS.
*
*      THE LOCATIONS AND SIZES OF THESE AREAS ARE SPECIFIED
*      BY THE VALUES IN THE REGISTERS AT THE START OF PROGRAM
*      EXECUTION AS FOLLOWS.
*
*      (XS)                  ADDRESS ONE PAST THE STACK BASE.
*                            E.G. IF XS IS 23456, A D-STACK WILL
*                            OCCUPY WORDS 23455,23454,...
*                            WHEREAS A U-STACK WILL OCCUPY
*                            23457,23458,...
*
*      (XR)                  ADDRESS OF THE FIRST WORD
*                            IN THE DATA AREA
*
*      (XL)                  ADDRESS OF THE LAST WORD IN THE
*                            DATA AREA.
*
*
*      (WA,WB,WC,IA,RA,CP)      ZERO
*
*      THERE IS NO EXPLICIT WAY TO TERMINATE THE EXECUTION OF A
*      PROGRAM. THIS FUNCTION IS PERFORMED BY AN APPROPRIATE
*      SYSTEM PROCEDURE REFERENCED WITH THE SYSEJ INSTRUCTION.