*COMDECK  COMFSKL - FRONT END SKELETON FORMATTER. 
          CTEXT  COMFSKL - SKELETON FORMATTER FOR FRONT ENDS. 
  
  
 DEFINS   SPACE  4,10 
**        DEFINS  -  DEFINE INSTRUCTION.
* 
* INST    DEFINS OPC,TYPE 
* 
*         INST   = INSTRUCTION MNEMONIC.
*         OPC    = OPCODE.
*         TYPE   = INSTRUCTION TYPE, (SEE TYPE DEFINITION). 
* 
*         DEFINES A MACRO OF NAME "INST" WHICH UTILIZES *FORM*
*         TO CREATE A SKELETON ELEMENT. 
  
  
          MACRO  DEFINS,INST,OPC,TYPE 
 B        MICRO 
 A        MICRO  1,, BS9
          IFEQ   TYPE,M.BRAN,2
 B        MICRO  2,1,/OPC/
 A        MICRO  1,, BS6
 INST     EQU    OPC"A" 
* 
          MACRO  INST,AD,I,J,K
  
*         SUPPRESS CONREDUCTION OF SKEL USING NON-ARITH INSTR.
  
          IFC    EQ,/TYPE/M.INCR/,1 
          SKIP   3
          IFC    EQ,/TYPE/M.BRAN/,1 
          SKIP   1
          IFC    EQ,/TYPE/M.LOAD/,1 
 U="STEM" SET    0
          FORM   (I,J,K),INST,TYPE,AD 
 INST     ENDM
* 
          IFC    EQ,/"B"/3/,5 
 INST.    OPSYN  INST 
          PURGMAC INST
          MACRO  INST,AD,I,J
 AD       INST.  0,I,J
 INST     ENDM
 DEFINS   ENDM
 FORM     SPACE  4,10 
**        FORM  -  FORM INSTRUCTION SKELETON ELEMENT. 
* 
*         IJK    = I,J,K PORTIONS OF INSTRUCTION BOUNDED BY 
*                  PARENTHESES. 
*         OPCODE = OPCODE.
*         TYPE   = INSTRUCTION TYPE, (SEE TYPE DEFINITION). 
* 
*         THIS IS THE MAIN MACRO FOR SKELETON CONSTRUCTION. 
*         EACH MACRO CREATED BY *DEFINS* AND *DEFUJP* INCLUDES
*         A CALL TO *FORM*. THE SECOND AND THIRD PARAMETERS TO
*         *FORM* (OPCODE AND TYPE) ARE TAKEN FROM THE *DEFINS*
*         OR *DEFUJP* MACRO EXPANSION THAT DEFINED THE MACRO
*         NAMED WITH THE OPCODE MNEMONIC IN THE LOCATION FIELD
*         OF THE CALL. THE *IJK* PARAMETER IS SUPPLIED TO *FORM* AS 
*         THE THREE PARAMETERS OF THE MACRO WHOSE NAME IS THIS
*         MNEMONIC. THE MACRO FLOW PROCEEDS TOWARD THE FORMATION
*         OF THREE MICROS "H", "L" AND "Q"..
* 
*         "H"    = INSTRUCTION TYPE AND OPCODE. 
*         "L"    = 3*(CONSTANT, AT. INDEX), 1 EACH FOR I, J QND K.
*         "Q"    = SET IF 12 BIT Q FIELD PRESENT. 
* 
*         INSTRUCTION SKELETON ELEMENT FORMAT CREATED BY A CALL 
*         TO *FORM* IS..
* 
*         + <-------------------- SK. STRUCTURE ---------------------> +
*         +                                                            +
*         +              + <----- SR. STRUCTURES -------> +            +
*         +              +                                +            +
*         +-----+--------+----------+----------+----------+------------+
*         + TYP + OPCODE +    I     +    J     +    K     +     Q      +
*         +     +        +----+-----+----+-----+----+-----+            +
*         +     +        +ADDR+ NUM +ADDR+ NUM +ADDR+ NUM +            +
*         +-----+--------+----+-----+----+-----+----+-----+------------+
*            6      9      5     6     5    6     5    6       12 
* 
*         *ADDR* IS THE AT. INDEX REFERRED TO ABOVE.
  
  
 FORM1 MACRO OC,TYPE,AD 
  VFD "H""L""Q" 
 AD BSS 0 
 L MICRO
 Q MICRO 1,,$,12/0$ 
 X SET TYPE 
 H MICRO 1,,$6/X,9/OC/64$ 
  ENDM
  
  
 FORM     MACRO  IJK,OC,TYPE,AD 
 RM       RMT 
  FORM1 OC,TYPE,AD
 RM       RMT 
.1        IRP    IJK
          IFC    EQ,  IJK ,4
 RM       RMT 
          SETCON 0
          RMT 
          SKIP   6
          IFC    LT, IJK 0 ,2      IF PARAMETER IS A LETTER 
          SETOTH IJK
          SKIP   3
 RM       RMT 
          SETCON IJK
          RMT 
.1        IRP 
 SKELAD   SET    SKELAD+1 
 FORM     ENDM
 SETCON   SPACE  4,10 
**        SETCON  -  SET NUM-ADDR FIELD IN SKELETON ELEMENT FOR 
*                  A CONSTANT.
* 
*         *SETCON* WILL SET THE I,J OR K NUM FIELD IF THE PARAMETER 
*         (I,J ORK) PASSED IS NOT PRECEEDED BY A PLUS OR MINUS
*         SIGN, NO LENGTH CHECKS ARE MADE. IF THE CONSTANT IS 
*         SIGNED IT INDICATES AN 18 BIT CONSTANT, *SETCON* WILL 
*         PUT THE LOWER 12 BITS IN THE Q FIELD, THUS REDEFINING 
*         IT, AND THE UPPER 6 BITS IN THE RELATIVE NUM FIELD. A 
*         GIVEN CONSTANT CAN BE THUS PLACED IN THE Q FIELD BY 
*         PRECEEDING IT WITH A + OR - SIGN. ]HE ADDR FIELD
*         DEFINED, TO AT.Q0.
  
  
 SETCON   MACRO  IJK
.1        IFC    LT, IJK +
* 
*         HERE IF UNSIGNED CONSTANT.
* 
 L        MICRO  1,,$"L",5/AT.K0,6/IJK$ 
.1        ELSE
* 
*         FOR SIGNED CONSTANTS OR ADDRESS REFERENCES, 
*         SET THE 18 BIT Q-FIELD. 
* 
 U="STEM" SET    0
          IFC    GE,/IJK/=/,2 
 L        MICRO  1,,$"L",SR.OADL/AT.S0$ 
          SKIP   1
 L        MICRO  1,,$"L",SR.OADL/AT.Q0$ 
 Q        MICRO  1,,$,SK.JPADL/IJK$ 
.1        ENDIF 
 SETCON   ENDM
 SETOTH   SPACE  4,10 
**        SETOTH  -  SET NUM-ADDR FIELD IN SKELETON ELEMENT FOR 
*                  A NON-CONSTANT.
* 
*         *SETOTH* WILL SET THE NUM FIELD (I,J OR K) TO A CONSTANT
*         OBTAINED FROM THE T. MICRO TABLE, THE ADDR FIELD WILL 
*         BE SET TO POINT TO THE AT. TABLE ENTRY WHICH WILL CONTAIN 
*         THE ADDRESS OF THE CODE IN *GEN* THAT PROCESSES THIS
*         TYPE OF I,J OR K PARAMETER. THE TYPE OF CONSTANT SET IN 
*         THE NUM FIELD IS ALSO DETERMINED FROM THE I,J OR K
*         PARAMETER.
  
  
 SETOTH   MACRO  IJK
  
*         SUPPRESS CONREDUCTION IF UNPROCESSABLE OPERAND. 
  
          IF     -DEF,IJK.C,1 
 U="STEM" SET    0
 IJK=     SET    IJK=+1 
 RM RMT 
    SETOTH1 IJK 
    RMT 
    ENDM
  
  
 SETOTH1 MACRO IJK
 IJK=  SET  IJK=-1
       IFNE IJK=
 L MICRO 1,,$"L",5/AT.IJK,6/IJK.$ 
       ELSE 
 L MICRO 1,,$"L",5/ZT.IJK,6/IJK.$ 
       ENDIF
       ENDM 
 DEFPO    SPACE  4,10 
**        DEFPO - DEFINE PSUEDO OPCODE. 
* 
* INST    DEFPO  PSN
* 
*         INST   = INSTRUCTION MNEMONIC.
*         PSN    = PSUEDO OP VALUE (FROM FTNTEXT).
* 
*         DEFINES A MACRO OF NAME *INST* WHICH UTILIZES *FORM*
*         TO CREATE AN PSUEDO OPCODE SKELETON ELEMENT.
*         THE *TYPE* IS ALWAYS SET TO *M.BRAN*. 
* 
*         NOTE THAT THE GENERATED *INST* MACRO HAS ONLY A SINGLE
*         PARAMETER (FOR *K*).  THIS IS BECAUSE THE *I* AND *J* 
*         FIELDS ARE SET TO DETERMINE THE OPCODE VALUE. 
  
  
          MACRO  DEFPO,INST,PSN 
          LOCAL  JDIG 
 JDIG     EQU    PSN-PSN/1S3*1S3
          MACRO  INST,AD,Q
          FORM   (0,0+JDIG,Q),PSN*1S3,M.BRAN,AD 
 INST     ENDM
 DEFPO    ENDM
 ENDF     SPACE  4,10 
**        ENDF - FLUSH LAST SKELETON WORD.
* 
*         MICROS "H","L" AND "Q" SET TO NUL STRINGS AFTER FLUSHING
*         TO CORE.
  
  
 ENDF     MACRO 
 RM       HERE
          VFD    "H""L""Q"
 H        MICRO 
 L        MICRO 
 Q        MICRO 
 ENDF     ENDM
          SPACE  4,10 
**        ENDS - END MACRO SKELETON.
* 
*         *ENDS* IS IDENTICAL TO *ENDF* EXCEPT THE END SKELETON 
*         FLAG (BIT 59) IS SET IN THE SKELETON ELEMENT BEFORE 
*         FLUSHING. 
  
  
 ENDS     MACRO 
 RM       HERE
 X        SET    X+M.IEND 
          VFD    "H""L""Q"
 H        MICRO 
 L        MICRO 
 Q        MICRO 
 ENDS     ENDM
          SPACE  4,10 
**        SETSPC  -  SET SPECIAL SKELETON.
* 
*         USED BY *CALL*, *RESET* AND *USESKL*, TO SET UP POINTERS
*         TO SPECIAL CODE THAT MUST BE EXECUTED AT THIS POINT IN
*         THE CURRENT SKELETON EXPANSION. 
  
  
 SETSPC   MACRO  TYPE,AD,ARG
          VFD    "H""L""Q"
 H        MICRO  1,,$SK.TYPL/X,SK.ATTRL/0,SK.ARGL/ARG,SK.JPADL/AD$
 X        SET    TYPE 
 L        MICRO 
 Q        MICRO 
 SKELAD   SET    SKELAD+1 
 SETSPC   ENDM
          SPACE  4,10 
**        RESET  -  RESET CURRENT SKELETON POINTER. 
* 
*         RESET *ARG* WORDS TO FIND NEXT TURPLE.
  
  
 RESET    MACRO  TO,ARG 
 RM       RMT 
          SETSPC M.ISBRN,-TO,ARG
 RM       RMT 
 RESET    ENDM
          SPACE  4,10 
**        BRANCH  -  CONTINUE SKELETON ELSEWHERE. 
* 
*         SKELETON POINTER RESET TO WITHIN OTHER SKELETON.
  
  
 BRANCH   MACRO  TO,IJK 
          IRP    IJK
 IJK=     SET    IJK=+1 
          IRP 
 RM       RMT 
          IRP    IJK
 IJK=     SET    IJK=-1 
          IRP 
          IFC    LT,/TO/=/,2
          SETSPC M.ISBRN,TO 
          SKIP   1
          SETSPC M.IRST,TO
 RM       RMT 
 BRANCH   ENDM
 MICNAM   SPACE  4,10 
**        MICNAM - GENERATE MICRO OF SKELETON NAME. 
* 
*         GENERATED NAME IS --
*         A.  TRUNCATED TO FIVE CHARACTERS. 
*         B.  PREFIX 'IF' IS REMOVED FROM IF SKELS. 
*         C.  RULE (B.) DOES NOT APPLY TO 'IFIX'. 
  
  
          MACRO  MICNAM,MIC,NAME
 MIC      MICRO  1,5,/NAME/ 
 .A       MICRO  1,2,/NAME/ 
          IFC    EQ,/".A"/IF/,2 
          IFC    NE,/NAME/IFIX/,1 
 MIC      MICRO  3,,/NAME/
          ENDM
          SPACE  4,10 
 SKEL     SPACE  4,10 
**        SKEL - DECLARE BEGINNING OF A SKELETAL EXPANSION. 
* 
  
  
          MACRO  SKEL,NAME,CONPRO 
 STEM     MICNAM NAME 
 U="STEM" SET    SKELAD 
 W="STEM" EQU    SKELAD 
 V="STEM" EQU    COUNT
 COUNT    SET    COUNT+1
 LBF      MICRO  1,8,/V="STEM"        / 
          IFC    EQ,/CONPRO//,2 
 SCT RMT= ("LBF" VFD 6/0,18/W="STEM",18/=YD="STEM",18/U="STEM") 
          SKIP   2
 CONPRO   MICNAM CONPRO 
 SCT RMT= ("LBF" VFD 6/0,18/W="STEM",18/=YD="STEM",18/W="CONPRO") 
          ENTRY  V="STEM" 
*                            SET SKEL NAME TABLE IN TEST MODE 
 .T       IFEQ   TEST,ON,3
          USE    /SKLNAM/ 
          DIS    1,V="STEM" 
          USE    *
 SKEL     ENDM
 SUBSKEL  SPACE  4,10 
**        SUBSKEL - DECLARE BEGINNING OF SUB-EXPANSION. 
* 
  
  
          MACRO  SUBSKEL,NAM
 STEM     MICNAM NAM
 W="STEM" EQU    SKELAD 
          ENTRY  W="STEM" 
          ENDM
 SKEQU    SPACE  4,10 
**        SKEQU  -  EQUATE SKELETONS. 
  
  
          MACRO  SKEQU,NEW,OLD,NOENT
 OSM      MICNAM OLD
 NSM      MICNAM NEW
 W="NSM"  EQU    W="OSM"
 VEQU     RMT=   (V="NSM"   EQU    V="OSM") 
* 
          IFC    NE,/NOENT/-/,1 
          ENTRY  V="NSM"
 SKEQU    ENDM
 SUBEQU   SPACE  4,10 
**        SUBEQU - DEFINE EQUIVALENT PASS 2 SKELETON. 
  
  
          MACRO  SUBEQU,NEW,OLD 
 OSM      MICNAM OLD
 NSM      MICNAM NEW
 W="NSM"  EQUENT W="OSM"
          ENDM
          SPACE  4,10 
**        CALL - CALL AN EXTERNAL PROCESSOR TO PROCESS/ OR PARTIALLY
*                PROCESS CURRENT TURPLE.
* 
*         NOTE - CONVENTIONS EXPECTED BY THE CALL *ARG* PERAMETER ARE:  
*                SKOP GENERATED CONSTANTS APPEAR IN CALL CALLS AS IS, 
*                OTHER COMPILER CONSTANTS ARE PRIFIXED BY 0+
*                RELOCATABLES ARE PREFIXED WITH =X
  
  
          PURGMAC CALL
  
 CALL     MACRO  TO,ARG 
 U="STEM" SET    0
 RM       RMT 
 .1       IFEQ   .CG,.OPT 
          SETSPC M.ICALL,0,0
 .1       ELSE
          IFC    NE, ARG  ,3
          IFC    LT, ARG 0 ,2 
          SETSPC M.ICALL,=XO=TO,-ARG. 
          SKIP   1
          SETSPC M.ICALL,=XO=TO,ARG 
.1        ENDIF 
 RM       RMT 
 CALL     ENDM
  
 CALLQ    SPACE  4,10 
**        CALLQ AND CALLC - TO AVOID CONDITIONAL CODE IN THE
*         COMDECK SKEL THESE MACROS ARE DEFINED.
  
          IFEQ   .CG,.FAST,3
 CALLQ    OPSYN  CALL 
 CALLC    OPSYN  NIL
          SKIP   2
 CALLC    OPSYN  CALL 
 CALLQ    OPSYN  NIL
 MICMIC   SPACE  4,10 
**        MICMIC  -  GET MICRO OF A MICRO.
* 
*         MIC = RESULTING MICRO.
*         N   = STARTING CHARACTER POSITION.
*         CMIC= CURRENT MICRO.
  
  
          MACRO  MICMIC,MIC,N,CMIC
 MIC      MICRO  N,,/"CMIC"/
 MICMIC   ENDM
  
*         END OF MACROS.
 SKEL.    TITLE  TABLES AND EQUATES.
 EQU.     OPSYN   EQU 
          PURGMAC EQU 
  
          MACRO  EQU,LOC,VAR
          NOREF   LOC 
 LOC      EQU.    VAR 
          ENDM
  
*CALL     COMSEIS            SKELETON FORMAT FOR INSTRUCTIONS 
  
          PURGMAC EQU 
 EQU      OPSYN   EQU.
  
  
*         MICROS USED DURING SKELETON CONSTRUCTION TO DEFINE A
*         PARTICULAR TYPE OF OPERATION, OPERAND OR CONSTANT.
  
 N1       MICRO  1,, P2            IF-BRANCH 1ST LABEL
 N2       MICRO  1,, P3            IF-BRANCH 2ND LABEL
 N3       MICRO  1,, P4            IF-BRANCH 3RD LABEL
 K-1      MICRO  1,, +777776B      MINUS ONE
 TBR      MICRO  1,, B6            TEMPORARY B-REGISTER 
 IR       MICRO  1,, X6            DO INDEX REGISTER. 
  
**        MUST DEFINE B0.,...,X7. MICROS. 
*         EACH OF THESE MICROS JUST EQUALS THE REGISTER NUMBER
*         X6. = 6, ETC. 
  
          NOREF  .RCON
 .RCON    SET    0
 .1       DUP    8
 RCON     DECMIC .RCON
 A_"RCON"_. MICRO    1,,/"RCON"/
 B_"RCON"_. MICRO    1,,/"RCON"/
 X_"RCON"_. MICRO    1,,/"RCON"/
 .RCON    SET    .RCON+1
 .1       ENDD
 SKOP     SPACE  4,30 
**        INITIALIZE ASSEMBLER VALUES FOR SKELETON EXPANAION. 
  
**        SKOP   - SKELETON OPERAND MACRO. SETS ASSEMBLY CONSTANTS
*                FOR IJK PARAMETERS OF THE INSTRUCTION MACROS.
* 
*         CONSTANTS SET:  
* 
*         OP_N.  ALSO KNOWN AS IJK. IN SETOTH, IS SET BY SKOP.
*                OP_N. IS USED TO SET THE SR.NUM FIELD. N STANDS
*                FOR SOME INTEGER WHICH IS GIVEN BY THE MICRO Z 
*                WITHIN THE SKOP MACRO BODY.
*                EXAMPLE: SKOP DEFINES R1.,L1. AND L2. THESE VALUES 
*                THEN FILL THE I,J,AND K SR.NUM FIELDS WHENEVER A 
*                MACRO CALL LIKE - IS   R1,L1,L2 - OCCURS.
* 
*         OP_N=  AKA IJK=, IS INITIALIZED HERE TO ZERO. OP_N= IS
*                THE COUNTER USED FOR LAST USE CALCULATIONS. N IS 
*                LIKE THE N FOR OP_N..
* 
*         AT.OP_N AND ZT.OP_N 
* 
*                AKA AT.IJK AND ZT.IJK, ARE SET HERE. THEY ARE
*                EMPLOYED AS ORDINALS INTO THE MAIN EIS JUMP TABLE. 
*                WHEN AN OPERAND IS NOT BEING USED FOR THE LAST 
*                TIME WITHIN A SKELETON, AT.OP_N IS THE ORDINAL.
*                OTHERWISE ZT.OP_N IS USED.(N CHOSEN AS IN OP_N.) 
* 
*         THE PERAMETERS: 
* 
*         OP     THE ROOT LETTER OR COMBINATION OF LETTERS USED AS
*                PERAMETES IN AN INSTRUCTION SKELETON.(AS IN L OF L1
*                AND L2 OR RU OF RU1,RU2). FOR CONSTANTS OR ADDRESS 
*                REFERENCES OP NEVER ACTUALLY APPEARS IN THE IN-
*                STRUCTION MACRO CALL. IN THESE CASES IT IS Q OR S. 
* 
*         LAST AND NOTLAST -
* 
*                THESE PARMS ARE USED TO DETERMINE IF THE 
*                ORDINALS ZT.OP_N AND AT.OP_N ARE GENERATED.
* 
*         FTYP   FUNCTION TYPE: A CENTRAL TASK OF SKOP IS TO
*                DEFINE THE FUNCTION WHICH MAPS N INTO OP_N.. 
*                THIS FUNCTION,IS ENTIRELY DITERMINED BY THE
*                FOUR CONSTANTS:  
* 
*                SKL.FTYP    SKOP DOMAIN LOWER LIMIT
*                SKU.FTYP    SKOP DOMAIN UPPER LIMIT
*                SKM.FTYP    INCREMENT MODULES(MOD) 
*                SKO.FTYP    SKOP RANGE OFFSET
* 
*                ALL ARE CREATED BY SKPSET. OUR FUNCTION MAPS 
*                THE SET (SKL.FTYP,SKL.FTYP+1,...,SKU.FTYP)INTO A RANGE 
*                BOUNDED BELOW BY SKL.FTYP-SKO.FTYP. IT IS THE INTEGER
*                FUNCTION GIVEN RECURSIVELY BY: 
* 
*                OP_N. = OP_N-1. + MAX(SKM.FTYP,1) ... SKM.FTYP.GE.0
*                OP_N. = OP_N-1. + 1 + SWITCH(N)   ... SKM.FTYP.LT.0
* 
*                WHERE OP_SKL.FTYP-1.=SKL.FTYP+SKO.FTYP-MAX(SKM.FTYP,1) 
*                      SWITCH(N)=1 IF N=0 MOD(SKM.FTYP) AND 0 OTHERWISE 
* 
* 
*         OPEQ   SIGNALS SKOP TO SET AT.OP_N AND/OR ZT.OP_N 
*                EQUAL TO AT.OPEQ_N AND/OR ZT.OPEQ_N RESP.
* 
*         WARNING REMEMBER TO DEFINE AT.OPEQ_N AND ZT.OPEQ_N
*         FIRST. ALSO, THE SKOP CALL STRUCTURES MUST BE THE SAME
  
  
          MACRO  SKOP,OP,NOTLAST,LAST,FTYP,OPEQ,CON 
 C        SET    1
          IFC    NE, OPEQ  ,1 
 C        SET    0
          IFC    NE,/NOTLAST/NONE/,3
 AT.      SET    T.IND
 AT.OP    SET    AT.OPEQ
 T.IND    SET    T.IND+C
          IFC    NE,/LAST/NONE/,5 
          IFC    NE,/LAST/NOTLAST/,4
 ZT.      SET    T.IND
 ZT.OP    SET    ZT.OPEQ
 T.IND    SET    T.IND+C
          SKIP   1
 ZT.OP    SET    AT.OP
 B        MAX    1,SKM.FTYP 
 C        SET    SKL.FTYP+SKO.FTYP
 A        SET    SKL.FTYP 
 Z        SET    SKL.FTYP 
          DUP    SKU.FTYP/B-SKL.FTYP/B+1
 Z        DECMIC Z
          NOREF  OP"Z"= 
 OP"Z"=   SET    0
          IFLT   SKM.FTYP,0,3 
          IFEQ   SKM.FTYP+A,0,2 
 A        SET    B
 C        SET    C+B
          NOREF  OP"Z". 
 OP"Z".   EQU    C
          IFC    NE,/CON//,2
          NOREF  OP"Z".C
 OP"Z".C  SET    1
 A        SET    A+B
 C        SET    C+B
 Z        SET    Z+1
          IFC    NE,/NOTLAST/NONE/,2
          NOREF  AT.OP"Z" 
 AT.OP"Z" EQU    AT.OP
          IFC    NE,/LAST/NONE/,2 
          NOREF  ZT.OP"Z" 
 ZT.OP"Z" EQU    ZT.OP
          ENDD
 SKOP     ENDM
 SKOP     SPACE  4,10 
**        CONSTANTS NEEDED FOR SKOP CALLS 
  
 T.IND    SET    0
  
**        SET THE SKOP NUM SELECTION PARAMETERS 
  
*CALL SKPSET
*CALL SKPCONQ 
 SKOP     TITLE  SKOP - EIS TO QSKEL LINKAGE
***       SKOP - THE EIS TO QSKEL LINKAGE.
* 
*         THE SKOP COMDECK IS CALLED BY DECKS WHICH REFER TO THE
*         (AT.) SYMBOLS.
* 
*         QSKEL- HERE THE SKOP COMDECK SETS ASSEMBLER CONSTANTS 
*                WHICH ARE ORDINALS INTO THE SKOP TABLE OF EIS, 
*                AND SETS OTHER CONSTANTS NEEDED FOR SKELETON 
*                GENERATION IN QSKEL. 
* 
*         EIS  - HERE SKOP GENERATES THE BASIC JUMP TABLE (SKOP)
*                WHICH CONTROLS THE CONSTRUCTION OF A NORMAL PRE- 
*                BINARY INSTRUCTION. TABLE ENTRIES HAVE THE FORMAT: 
*                30/0,30/EIS.NOTLAST OR EIS.LAST. 
 EIS      SPACE  4,30 
**        EIS INTERNAL FLOW DRIVEN BY SKOP. 
* 
*         ***IMPORTANT**FACT*** 
* 
*                COMPLETE KNOWLEDGE OF THE FLOW OF EIS CAN BE OB- 
*                TAINED BY CORRELATING THE SKELETON INSTRUCTION 
*                MACRO CALLS WITH SKOP ENTRIES. 
* 
*                EXAMPLE: TO DETERMINE HOW EIS PROCESSES
* 
*                         IS     R1,L1,L2 
* 
*                LOOK AT THE SKOP ENTRIES:  
* 
*                R        SKOP   NONE,IR,OP  AND
*                L        SKOP   LNU,L,OP 
* 
*                SEE THE SKOP MACRO HEADER. FLOW PASSES THROUH
*                THE PROCESSORS EIS.NOTLAST OR EIS.LAST. SO, IN 
*                OUR EXAMPLE FLOW IS THROUGH EIS.L, EIS.LNU, OR 
*                EIS.IR (A *NONE* IMPLIES NO PROCESSOR). IF A PAR-
*                AMETER IS BEING USED FOR THE LAST TIME WITHIN A
*                CODE SKELETON THE PROCESSOR CHOSEN IS EIS.LAST (EIS.L
*                OR EIS.IR IN OUR EXAMPLE). FOR NOT LAST USE CHOOSE 
*                THE PROCESSOR EIS.NOTLAST (EIS.LNU). 
* 
*                NOW, TO DETERMINE FLOW:   READ THE INSTRUCTION 
*                PERAMETERS FROM RIGHT TO LEFT. THIS IS THE ORDER OF
*                FLOW. IT IS A FACT THAT THE EIS.IR PROCESSOR IS A
*                TERMINAS PROCESSOR, SO IN OUR EXAMPLE WE KNOW ALL
*                PERAMETERS ARE IN A LAST USE CASE. SO, FLOW PASSES 
*                FROM EIS.L TO EIS.L TO EIS.IR. 
  
*CALL     SKOP               SKELETON OPERATION DEFINITIONS 
  
 B6.C     SET    1           ALLOW B6 AS CONREDUCED OPERAND 
          NOREF  SKELAD 
 SKELAD   SET    0
 COUNT    SET    0           INITIALIZE COUNT OF SKELS
  
  
          LIST   -X          COMSQRF IS LISTED IN DECK *QUIK* 
*CALL     COMSQRF            DEFINE QCG REGISTER SYMBOLS
          LIST   *
**        DEFINE INSTRUCTION MACROS 
  
*CALL     DEFINS             MACHINE OPCODE DEFINITIONS 
  
**        SPECIAL CASE INSTRUCTIONS 
  
IAZ       OPSYN  IA 
ISZ       OPSYN  IS 
PNR       OPSYN  NR 
  
          MACRO  DEF,AD,I,J,K 
 AD       XMT    I,K
          ENDM
  
**        KLS AND KRS EXPAND TO TWO INSTRUCTION WORDS 
*         DURING QCG ASSEMBLY-TIME SKELETON CONSTRUCTION. 
*         FMA IS MADE COMPATIBLE WITH CCG VERSION.
  
 FMA.     OPSYN  FMA
 KLS.     OPSYN  KLS
 KRS.     OPSYN  KRS
          PURGMAC FMA,KLS,KRS 
  
  
          MACRO  FMA,AD,I,JK
 AD       FMA.   I,,JK
 FMA      ENDM
  
          MACRO  KLS,AD,I,J,K 
 AD       XMT   I,J 
          KLS.   I,,K 
 KLS      ENDM
  
          MACRO  KRS,AD,I,J,K 
 AD       XMT   I,J 
          KRS.   I,,K 
 KRS      ENDM
  
          MACRO  XMTL,AD,I,J,K
 OP       MICRO  1,1,/K/
          IFC    EQ,/"OP"/G/,1
 OP       MICRO  2,1,/K/
          IFC    EQ,/"OP"/L/,3
AD        XMT    I,I
          LD     K,,+R.I
          SKIP   1
 AD       SA=BK  I,,K 
 XMTL     ENDM
  
          MACRO  RJT,AD,TO
 AD       CALL   CRJ,TO 
 RJT      ENDM
  
          PURGMAC            LOAD 
  
          MACRO  LOAD,AD,I,J,K
 AD       SA=XK  X1,J,K 
          XMT    I,X1 
          ENDM
  
          PURGMAC            JIN
  
          MACRO  JIN,AD,I,J,K 
 AD       CALL   CBJ
          ENDM
  
          PURGMAC DEFINS
  
*         SPECIAL EQUATE TABLE FOR *REG*. 
  
          LIST   D
  
  
**        INITIALIZE H,L AND Q MICROS.
  
 H        MICRO 
 L        MICRO 
 Q        MICRO 
  
  
*         BASE ADDRESS OF SKELETONS.
  
  
          USE    /SKLNAM/ 
 F.SKNAM  BSSENT             FWA SKELETON NAMES (IN TEST MODE)
          USE    *
  
 F.SKEL   BSSENT
  
*CALL     SKEL               TURPLE EXPANSION PATTERNS
  
**        SKELETON TABLE TERMINATOR WORD
  
 SKEND    CONENT 0
          TITLE  SKELETON CONTROL TABLE.
 SCT      SPACE  4,10 
**        SCT - SKELETON CONTROL TABLE. 
* 
*         THE SCT ACTUALLY CONSISTS OF TWO VECTORS -- 
*         (F.SKCR) FOR FRONT END = ADDRESS OF CONRED PROCESSOR. 
*         (F.SCT) FOR GEN = WORD INDEX OF SKEL BEGINNING. 
* 
*         IN QCG, BOTH OF THESE FIT INTO THE SAME WORD. 
  
  
          LIST   G,D
          USE    SCT
 F.SCT    BSSENT             FWA SKEL BEGIN INDEX VECTOR
 F.SKCR   BSSENT             FWA SKEL CONSTANT REDUCTION VECTOR 
          LOC    0
 SCT      HERE
 Z.SCT    BSSENT             LENGTH OF SKEL VECTOR
 Z.SKCR   BSSENT             LENGTH OF C.R. VECTOR
          LOC    *O 
 1        ERRNZ  COUNT-Z.SCT
  
 VEQU     HERE
          USE    *
          LIST   *
  
*CALL     PARSKEL            PARSER LINKAGE TO SKELETONS
  
  
          ENDX
