*COMDECK QENTRY 
          NAM    QENTRY 
* 
*      CALLING SEQUENCE 
*         ENA    NO. OF PARAMS (NEGATIVE FOR BACKGRND)
*         ENQ    LEVEL NO.
*         RTJ    QENTRY 
*         NUM    STACK SIZE 
* 
*      GIF = GLOBAL INTERRUPT FLAG (1ST WORD IN STACK AREA HEADER)
*      NAW = NEXT AVAILABLE WORD POINTER (2ND WORD IN STACK AREA HEADER)
* 
          ENT    QENTRY 
          EXT    QDEBUG 
          EXT    QTOPSK 
* 
QENTRY    NOP 
          IIN    0            INHIBIT INTERRUPTS
          STA*   TEMP         SAVE NO. OF PARAMS AND BACKGRND FLAG
          STQ*   LEVLNO       SAVE LEVEL NUMBER 
          LDA*   (QENTRY)     LOAD PARAMETER (STACK SIZE) 
          STA*   STKSZE       SAVE STACK SIZE 
          RAO*   QENTRY       INCREMENT RETURN ADDRESS
          LDQ*   TOP          LOAD POINTER TO TOP OF STACK AREA IN Q-REG
          LDA-   1,Q          LOAD NAW (2ND WORD IN STACK AREA) 
          STA*   STKPTR       STORE IN QDEBUG CALLING SEQUENCE
          ADD*   STKSZE       ADD STACK SIZE
          STA-   1,Q          UPDATE NAW
          LR3-   3,Q          LOAD DEBUG FLAG (4TH WORD IN STACK AREA)
          S3Z    Q010-*-1     SKIP IF DEBUG FLAG OFF
          SUB-   2,Q          SUBTRACT BOUNDARY (3RD WORD IN STACK AREA)
          SAM    Q010         SKIP IF NO STACK AREA OVERFLOW
          RTJ    QDEBUG       CALL QDEBUG ON STACK AREA OVERFLOW
         ADC   FIVE 
         ADC   STKPTR 
Q010      LDQ*   STKPTR       Q-REG = POINTER TO NEW STACK
          XFI    A
          STA*   (ZERO),Q     SAVE THREAD (OLD I-REG) 
          XFQ    I            SET I-REG = POINTER TO NEW STACK
          SR1-   4,I          SAVE R1-REG 
          SR2-   5,I          SAVE R2-REG 
          LDA*   LEVLNO 
          STA-   2,I          SAVE LEVEL NUMBER (IN STACK HEADER) 
          INA    -1 
          STA-   1,I          STATIC LINK = 0, FOR LEVEL 1 PROCEDURES 
          SAZ    Q018         SKIP, IF LEVEL 1 PROCEDURE
          XFA    1            SAVE LEVEL NO. - 1 IN R1-REG
          LDQ*   (ZERO),I     Q-REG = POINTER TO PREVIOUS STACK 
Q012      SUB-   2,Q          SUBTRACT LEVEL NO. OF PREVIOUS STACK
          SAZ    Q015         SKIP, IF PROC LEVEL = LEVEL NO. - 1 
          LDQ-   1,Q          Q-REG POINTS TO NEXT STACK BACK 
          XF1    A            RESTORE A-REG TO LEVEL NO. - 1
          JMP*   Q012 
Q015      STQ-   1,I          SET STATIC LINK 
Q018      LDA*   TEMP         NO. OF PARAMS AND BACKGRND FLAG 
          XFA    1            TRANSFER A-REG TO R1-REG (BACKGRND FLAG)
          LDQ*   QENTRY       RETURN ADDRESS
          SAP    Q020         SKIP IF QENTRY CALLED BY FOREGRND PROC
          INQ    1            ADJUST Q-REG FOR BACKGRND PROC
          TCA    A            MAKE NO. OF PARAMS POSITIVE 
Q020      LDQ+   -7,Q         RETURN ADDRESS FOR CALLING PROCEDURE
          SAZ    Q040         SKIP IF NO PARAMS 
          INA    -1 
          XFA    2            TRANSFER NO. OF PARAMS-1 TO R2-REG
         LDA+  =N$6,I 
Q030      LR3*   (ZERO),Q     LOAD ADCON FOR PARAM
          SR3*   (ZERO),A     STORE ADCON FOR PARAM IN STACK
          INA    1
          INQ    1
          D2P    *-Q030       LOOP
Q040      STQ-   3,I          STORE RETURN ADDRESS IN STACK 
          S1P    Q050-*-1     SKIP IF QENTRY CALLED BY FOREGRND PROC
          LDA*   (TOP)        LOAD GIF (1ST WORD IN STACK AREA) 
          SAN    Q050         SKIP IF GIF IS NON-ZERO 
          EIN    0            ENABLE INTERRUPTS 
Q050      JMP*   (QENTRY)     RETURN
* 
TOP       ADC    QTOPSK       POINTER TO TOP OF STACK AREA
ZERO      NUM    0            CONSTANT ZERO 
STKSZE    NUM    0            STACK SIZE
TEMP      NUM    0            NO. OF PARAMS AND BACKGRND FLAG 
LEVLNO    NUM    0            LEVEL NUMBER
FIVE     NUM   5
STKPTR   NUM   0
          END 
