*DECK S$GEN30 
          IDENT  S$GEN30
          TITLE  S$GEN30 -  GENERATE A 30-BIT INSTRUCTION 
          COMMENT  GENERATE A 30-BIT INSTRUCTION
          SPACE  4
**        S$GEN30 -  GENERATE A 30-BIT INSTRUCTION
* 
*     CALLING SEQUENCE- 
*         GEN    (INSTR)               (SEE MACRO FOR DETAILS)
*       OR
* +       RJ     S$GEN30
* -       <30-BIT INSTRUCTION>
* 
*     GIVEN-
*         S$LOC = ADDRESS WHERE NEXT INSTRUCTION WILL BE STORED AND 
*          LATER EXECUTED.
*         S$POS = POSITION WITHIN WORD AT S$LOC WHERE INSTRUCTION WILL
*          BE STORED.  (VALUE IS 45, 30, 15 OR 0) 
*         S$ACODE = ORIGINAL VALUE OF S$LOC.
*         S$LCODE = NUMBER OF AVAILABLE WORDS STARTING AT S$ACODE.
* 
*     DOES- 
*         INSTRUCTIONS ARE GENERATED AT ADDRESS S$LOC AND 
*          POSITION S$POS (CORRESPONDING TO *P IN COMPASS). 
*         GENERATES A 15-BIT *NO* IF NECESSARY. 
*         GENERATES THE MODIFIED INSTRUCTION. 
* 
*     USES-      B    * - - - - 6 7    *B1=1
*                X  0 1 2 3 - - 6 - 
*                A  - 1 2 3 - - 6 - 
  
  
          ENTRY  S$GEN30
 S$GEN30  SUBR               (USED TO REFERENCE PARAMETERS) 
  
*     IF LAST GENERATED INSTRUCTION FILLED A WORD, CLEAR (S$LOC)
  
          SA1    S$LOC       ADDRESS FOR THIS INSTRUCTION 
          SA2    S$POS       POSITION = 45, 30, 15 OR 0 
          IFTHEN X2=0        IF JUST FILLED AN INSTRUCTION WORD 
            MX6    0           CLEAR NEW WORD 
            SA6    X1 
            SX2    60          SET POSITION COUNTER 
            ENDIF.
*         X1 = ADDRESS FOR THIS INSTRUCTION 
*         X2 = POSITION COUNTER (60, 45, 30 OR 15)
*         B7 = POSSIBLE MODIFIER
  
*     GET INSTRUCTION 
  
          SA3    S$GEN30
          SX6    B1 
          LX6    30          MAKE LIKE CALLED FROM S$GEN
          IX6    X3-X6
          SA6    S$GEN
          LX3    30 
          SA3    X3-1        30/<RJ S$GEN30>, 30/INSTR
          SB6    B0          MODIFICATION TYPE IS *NONE*
          SB7    B0          VALUE TO ADD TO INSTR IS ZERO
          MX0    -30         STRIP JUNK FROM INSTR
          BX3    -X0*X3 
          SX6    X2-30       NEW POSITION COUNTER 
          EQ     S$GEN1      GO TO COMMON CODE IN S$GEN 
  
  
 S$GEN    EXTERNAL
  
 S$GEN1   EXTERNAL           COMMON ENTRY POINT IN S$GEN
  
 S$LOC    EXTERNAL           ADDRESS WHERE NEXT INSTRUCTION WILL BE 
                              STORED AND LATER EXECUTED.
  
 S$POS    EXTERNAL           POSITION WITHIN WORD AT S$LOC WHERE
                              INSTRUCTION WILL BE STORED. 
                              (VALUE IS 45, 30, 15 OR 0)
  
  
          END 
