*DECK CSKEL 
          IDENT  CSKEL
 CSKEL    SECT   (FORM CODE SKELETON TABLES.) 
          NOREF  A,F.SCT,SFLAG,LCALL,MAXT,X,Z,BR,B,C
 .FAST    EQU    0
 .OPT     EQU    1
 .CG      EQU    .OPT 
 CSKEL    SPACE  4,8
*         IN BRIDGE 
          EXT    P=APRET,P=BVD,P=CGT,P=DOEND,P=ENT,P=EVD,P=FIN,P=FRRET
          EXT    P=FUN,P=GAP,P=GFD,P=HDR,P=IAP,P=ID,P=IF,P=IM,P=INF 
          EXT    P=IOC,P=IOD,P=IOF,P=JGOC,P=LCC,P=LRJ,P=MASK,P=MOD
          EXT    P=PAG,P=PAR,P=PCG,P=PDB,P=PDE,P=PEX,P=PGT,P=PLA,P=PLIM 
          EXT    P=RTNK,P=SEG,P=SEX,P=SHIFT,P=SUB 
  
*         IN PUC
          EXT    S=ERR,S=EXIT 
 SKEL.    TITLE  MACROS.
**        THE FOLLOWING ARE ALL MACROS USED BY *SKEL* FOR CODE
*         SKELETON ELEMENT GENERATION. NO MACRO RELEVENT TO 
*         SKELETON CONSTRUCTION SHOULD LIE OUTSIDE *SKEL*.
          SPACE  4,8
  
 A0       MICRO  1,,/1/ 
 TBR      MICRO  1,,/T21/ 
 IR       MICRO  1,,/T22/ 
 A0.      MICRO  1,,/10B/ 
 X1.      MICRO  1,,/21B/ 
 X6.      MICRO  1,,/26B/ 
 X7.      MICRO  1,,/27B/ 
 SBR      EQU    2B 
  
**        RMM= - FORCE MICRO EVALUATION FOR REMOTES.
  
          MACRO  RMM=,BLK,S,NAME
 BLK      RMT 
S    1/0"P#_NAME",18/O=NAME_____________________________________________
 BLK      RMT 
 RMM=     ENDM
  
          MACRO  SKEL,NAME
 BRT      SET    0
 MAXT     SET    0
 BR       SET    0
 LCALL    SET    0
 CUR      MICRO  1,,/NAME/
 NAM      MICRO  1,8,/E=NAME        / 
 O=NAME   SET    *
 SCT RMM=  ("NAM" VFD),NAME 
 ENT      RMT 
 V=NAME   EQU    E=NAME 
 ENT      RMT 
 SKEL     ENDM
 SKEQU    SPACE  4,8
**        SKEQU - EQUATE CODE SKELETON FOR TURPLE TO OTHER SKELETON.
  
          MACRO  SKEQU,NEW,OLD
 ENT      RMT 
 V=NEW    EQU    V=OLD
 ENT      RMT 
 SKEQU    ENDM
 SUBSKEL  SPACE  4,8
**        SUBSKEL - DEFINE CODE SKELETON TO BE SELECTED BY BACK END.
  
          MACRO  SUBSKEL,NAME 
 MAXT     SET    0
 BR       SET    0
 BRT      SET    0
 LCALL    SET    0
 CUR      MICRO  1,,/NAME/
 NAM      MICRO  1,8,/E=NAME        / 
 O=NAME   SET    *
 SUBSKELS RMM= ("NAM" VFD),NAME 
 ENT      RMT 
          ENTRY  V=NAME 
 V=NAME   EQU    E=NAME 
 ENT      RMT 
 SUBSKEL  ENDM
 SUBEQU   SPACE  4,8
**        SUBEQU - EQUATE CODE SKELETON TO BE SELECTED BY BACK END
*         TO OTHER SKELETON.
  
          MACRO  SUBEQU,NEW,OLD 
 ENT      RMT 
          ENTRY  V=NEW
 V=NEW    EQU    V=OLD
 ENT      RMT 
 SUBEQU   ENDM
          SPACE  4,8
**        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 
 LABMAX   HERE
 MAXT     DECMIC MAXT 
 .LC      IFNE   LCALL,0
 .LC      IFC    EQ,$"L3"$$  IF THIS CALL HAS NO PARAMETER
 .LC      IFEQ   BRT,0       IF NO BRANCHES INTO THIS SKEL
 P#"CUR"  MICRO  1,,$"L",6/"MAXT",2/0"L4"$
 .LC      ELSE
          VFD    "H""L4""L""L2""L3""Q"
 P#"CUR"  MICRO  1,,$,11/0,6/"MAXT",24/0$ 
 .LC      ENDIF 
          IFEQ   O="CUR",*,1
 O="CUR"  SET    0
 H        MICRO 
 L        MICRO 
 L2       MICRO 
 L3       MICRO 
 L4       MICRO 
 Q        MICRO 
 SFLAG    SET    40B
 ENDS     ENDM
**        FORM  -  FORM INSTRUCTION SKELETON ELEMENT. 
* 
*         IJK    = I,J,K PORTIONS OF INSTRUCTION BOUNDED BY 
*                  PARENTHESES. 
*         NAME = OPCODE.
*         TYPE = INSTRUCTION TYPE. 0 FOR NORMAL INSTRUCTIONS, 
*                                  1 FOR CALL INSTRUCTIONS, 
*                                  2 FOR BRANCH INSTRUCTIONS. 
*                BIT 5 OF THE TYPE FIELD (BIT 59 OF INSTRUCTION WORD) 
*                SIGNIFIES START OF SKELETON. 
* 
*         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..
* 
*         +-----+--------+-----+----+-----+----+-----+----+------------+
*         +     +        +     +    +     +    +     +    +            +
*         + TYP + OPCODE +  I  + I  +  J  + J  +  K  + K  +     Q      +
*         +     +        + ADDR+ NUM+ ADDR+ NUM+ ADDR+ NUM+  CONSTANT  +
*         +     +        +     +    +     +    +     +    +            +
*         +-----+--------+-----+----+-----+----+-----+----+------------+
*            6      9       5    6     5    6     5    6       12 
* 
*         *ADDR* IS THE AT. INDEX REFERRED TO ABOVE.
  
  
 FORM     MACRO  IJK,NAME,AD,RTYPE
          IFC    NE,/AD//,4 
 BRT      SET    1           FLAG BRANCH TARGET 
 LABMAX   RMT 
 .AD      EQU    MAXT 
 LABMAX   RMT 
 BR       SET    0
 LCALL    SET    0
          VFD    "H""L4""L""L2""L3""Q"
 AD BSS 0 
 L MICRO
 L2       MICRO 
 L3       MICRO 
 L4       MICRO 
 Q        MICRO  1,,$,*P/0$ 
 X        SET    RTYPE+SFLAG
 SFLAG    SET    0
 H MICRO 1,,$6/X,9/OC.NAME$ 
.1        IRP    IJK
          IFC    EQ,/IJK/NULL/,1
          SKIP   7
          IFC    EQ,  IJK ,2
 L        MICRO  1,,$"L",11/0$
          SKIP   4
          IFC    LT, IJK 0 ,2      IF PARAMETER IS A LETTER 
          SETOTH IJK
          SKIP   1
          SETCON IJK
.1        IRP 
 FORM     ENDM
 SETCON   SPACE  4,8
**        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
 I MICRO 1,1, IJK 
 .0       IFC    EQ,/"I"/=/ 
*         HERE IF IMMEDIATE SYMBOL (=S OR =X). ASSUMES IN K FIELD.
 L2       MICRO  1,,$,5/AT.S0$
 L3       MICRO  1,,$,18/IJK$ 
 Q MICRO
 .0       ELSE
.1        IFC    LT, IJK +
  
*         HERE IF UNSIGNED CONSTANT.
  
 L        MICRO  1,,$"L",5/AT.K0,6/IJK$ 
.1        ELSE
  
*         HERE IF SIGNED CONSTANT, (18 BIT Q FIELD).
  
 L2       MICRO  1,,$,5/AT.Q0$
 L3       MICRO  1,,$,18/IJK$ 
 Q        MICRO 
 .1       ENDIF 
 .0       ENDIF 
 SETCON   ENDM
 SETOTH   SPACE  4,8
**        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
          IFC    EQ,/IJK/"TBR"/,1 
 BR       SET    1
 L        MICRO  1,,$"L",5/AT.IJK,6/IJK.$ 
 FCHAR    MICRO  1,1,/IJK/
          IFC    EQ,/"FCHAR"/T/,1 
 MAXT     MAX    MAXT,IJK.
 SETOTH   ENDM
 BRANCH   SPACE  4,8
**        BRANCH  -  CONTINUE SKELETON ELSEWHERE. 
* 
*         SKELETON POINTER RESET TO WITHIN OTHER SKELETON.
  
  
          MACRO  BRANCH,AD,TO,IJK 
          FORM   (0,0,=S_TO),0,AD,2 
 MAXT     MAX    MAXT,.TO 
 BRANCH   ENDM
 CALL     SPACE  4,8
**        CALL - CALL AN EXTERNAL PROCESSOR TO PROCESS/ OR PARTIALLY
*                PROCESS CURRENT TURPLE.
* 
*         NOTE - CALL MAY HAVE ONE PARAMETER OF ANY TYPE EXCEPT 
*                18-BIT CONSTANT OR SYMBOL (+/- CON OR =S). 
  
          PURGMAC CALL
  
          MACRO  CALL,AD,ROUT,I,J 
          FORM   (NULL,NULL,I),0,AD,1 
 L4       MICRO  1,,$,4/0,18/=XP=ROUT$
 LCALL    SET    1
 CALL     ENDM
  
  
 CALLQ    OPSYN  NIL
  
 CALLC    OPSYN  CALL 
 INST.    TITLE  INSTRUCTION AND OPERAND PROCESSING MACROS. 
  
  
*         MICROS USED DURING SKELETON CONSTRUCTION TO DEFINE A
*         PARTICULAR TYPE OF OPERATION, OPERAND OR CONSTANT.
  
 N1       MICRO  1,, P2 
 N2       MICRO  1,, P3 
 N3       MICRO  1,, P4 
  
          MACRO  SKOP,OP,NOTLAST,LAST,FTYP,OPEQ 
          IFC    EQ, OPEQ 
 AT.IND   SET    AT.IND+1 
 AT.OP    SET    AT.IND 
          ELSE
 AT.OP    SET    AT.OPEQ
          ENDIF 
 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
          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
 A        SET    A+B
 C        SET    C+B
 Z        SET    Z+1
          NOREF  AT.OP"Z" 
 AT.OP"Z" EQU    AT.OP
          ENDD
 SKOP     ENDM
 SKOP     SPACE  4,10 
**        SET THE SKOP NUM SELECTION PARAMETERS 
  
          MACRO  SKPSET,FTYP,LL,UL,MODULES,OFFSET 
 SKL.FTYP SET    LL 
 SKU.FTYP SET    UL 
 SKM.FTYP SET    MODULES
 SKO.FTYP SET    OFFSET 
 SKPSET   ENDM
  
 RG       SKPSET 0,7,1,0
 OP       SKPSET 1,6,-Z=TURP,0
 SPC      SKPSET 1,4,-Z=TURP,0
 TMP      SKPSET 1,22,1,-1
 CON      SKPSET 0,0,1,0
 GOP      SKPSET 1,2,1,-1 
  
 AT.IND   SET    0
*CALL     SKOP   SKELETON OPERANDS
  
          ECHO   ,JT=("XJUMPS") 
 M.JT     DECMIC JC.JT
          MACRO  JT,AD,I,J,K
          FORM   (I,"M.JT",J),JPX,AD,0
          ENDM
          ENDD
  
 ORX      OPSYN  OR 
          PURGMAC OR
  
  
          MACRO  OPR,NAME,SS
          MACRO  NAME,AD,I,J,K
          FORM   (I,J,K),NAME,AD,0
 NAME     ENDM
 OPR      ENDM
  
          PURGMAC SST 
  
*CALL OPRDEFS 
  
 IOR      OPSYN  OR 
          PURGMAC OR
          MACRO  OR,AD,I,J,K
          IFC    NE,/K//,2
 AD       IOR    I,J,K
          ELSE   1
 AD       ORX    I,J
          ENDM
          MACRO  PNR,AD,I,J,K 
          FORM   (I,1,K),NR,AD,0
 PNR      ENDM
  
  
          ECHO   ,OP=(FA,FS,FM,FD)
          MACRO  OP_R,AD,I,J,K
          FORM   (I,J,K),OP,AD,20B
          ENDM
          ENDD
  
  
          ECHO   ,OP=(X,B,A)
          MACRO  SX=OP_K,AD,I,J,K 
          FORM   (I,J,K),STT,AD,0 
          ENDM
  
          MACRO  SB=OP_K,AD,I,J,K 
          FORM   (I,J,K),STT,AD,0 
          IFNE   BR,0,1 
          RS     "TBR",0,+SO.TLOCK+SBR
          ENDM
  
          MACRO  SX=OP_B,AD,I,J,K 
          FORM   (I,J,K),SA,AD,0
          ENDM
  
          MACRO  SB=OP_B,AD,I,J,K 
          FORM   (I,J,K),SA,AD,0
          IFNE   BR,0,1 
          RS     "TBR",0,+SO.TLOCK+SBR
          ENDM
  
          MACRO  SA=OP_B,AD,I,J,K 
          FORM   (I,J,K),SA,AD,0
          ENDM
  
          ENDD
  
  
          ECHO   ,OP=(B,A)
          MACRO  SX=OP_MB,AD,I,J,K
          FORM   (I,J,K),SS,AD,0
          ENDM
  
          MACRO  SB=OP_MB,AD,I,J,K
          FORM   (I,J,K),SS,AD,0
          ENDM
  
          ENDD
  
 UP.      OPSYN  UP 
 NR.      OPSYN  NR 
          PURGMAC  UP,NR
          MACRO  UP,AD,I,J,K
 AD       UP.    I,J,K
          IFNE   BR,0,1 
          RS     "TBR",1,+SO.RJLK+SBR 
          ENDM
          MACRO  NR,AD,I,J,K
 AD       NR.    I,J,K
          IFNE   BR,0,1 
          RS     "TBR",1,+SO.RJLK+SBR 
          ENDM
  
          ECHO   ,OP=(LAB,UJP,RJ3,RJ6)
 OP.      OPSYN  OP 
          PURGMAC OP
          MACRO  OP,AD,IH 
 AD       OP.    ,,IH 
          ENDM
          ENDD
  
          PURGMAC RJT 
  
          MACRO  RJT,AD,I 
 AD       RJ6    I
          CALL   LRJ
          ENDM
  
          MACRO  XMTL,AD,I,J,K
 AD       XMT    J,K
          RS     J,,";B." 
          ENDM
  
          ECHO   ,OP=(KRS,KLS)
 OP.      OPSYN  OP 
          PURGMAC OP
  
          MACRO  OP,AD,I,J,K
 QQ       MICRO  2,,/I/ 
 QQ       DECMIC "QQ"-1 
 AD       SXT    T"QQ",J
          OP.    I,T"QQ",K
          ENDM
  
          ENDD
  
 LOAD     OPSYN  LD 
  
 OC.0     EQU    0
          USE    0
          USE    SCT
          ENTRY  F.SCT
 F.SCT    BSS    0
          USE    0
  
 H        MICRO 
 L        MICRO 
 L2       MICRO 
 L3       MICRO 
 L4       MICRO 
 Q        MICRO 
 SFLAG    SET    40B
  
          ENTRY  F.SET
 F.SET    BSS    0
ADD       TITLE CODE SKELETONS. 
*CALL     SKEL   CODE SKELETONS 
  
          VFD    1/1,59/0 
          LIST   G
          VFD    60/0        FOR ROR
  
          USE    SCT
          LOC    0
 SCT      TITLE  SKELETON CONTROL TABLE CONTENTS. 
 SCT      HERE
 SUBSKELS HERE
 ENT      HERE
*         DEFINE V=NOOP FOR BRIDGE. 
  
          ENTRY  V=NOOP 
          END 
