*  *********************************************************************0001.000
*                                                                       0002.000
*  $Header:  002  07-NOV-89 14:31  GANN      GANN                      $0003.000
*  $Log:   @ISCSRC^(DV.TXPM.SYSM)SH.STUB                               $0004.000
*                                                                       0005.000
*       Rev  002  07-NOV-89 14:31  GANN      GANN                       0006.000
*  Changed version to E.4B.                                             0007.000
*                                                                       0008.000
*       Rev  001  09-NOV-88 13:00  GANN      GANN                       0009.000
*   Version control header added                                        0010.000
*                                                                       0011.000
*                                                                       0012.000
* THIS HANDLER ALLOWS A RESIDENT TASK TO BE CONNECTED TO AN INTERRUPT   0013.000
* THE RESIDENT TASK MAY BE A TXPM OR MPX TASK.  THE DISPATCH PSD        0014.000
* MUST BE PLACED IN STUB.USR BY THE CONNECTING TASK.  DISCONNECTION     0015.000
* IS ACCOMPLISHED BY CLEARING STUB.USR.  THE TASK MUST RETURN TO THE    0016.000
* STUB HANDLER VIA A TRSW R0.  REGISTER 0 WILL CONTAIN THE RETURN       0017.000
* ADDRESS WHEN THE TASK IS DISPATCHED TO.                               0018.000
*                                                                       0019.000
* WRITTEN BY J. BEVIER 01/22/87 I.S.C.                                  0020.000
*                                                                       0021.000
*********************************************************************** 0022.000
*                                                                       0023.000
         PROGRAM   H.STUB          XPM-64.E4B.002               47 $VER 0024.000
         DEF       VER.STUB        CURRENT VERSION                      0025.000
         DEF       PGR.STUB        PROGRAMMER NUMBER                    0026.000
VER.STUB EQU       X'E4002'        rev                          24 $VER 0027.000
PGR.STUB EQU       X'11079'        mmddy                        22 $PRG 0028.000
         M.VRSION                                                       0029.000
*                                                                       0030.000
         LIST      NODATA,NONG,NOMAC                                    0031.000
         M.EQUS                    SYSTEM EQUATES                       0032.000
         M.TBLS                    SYSTEM TABLE EQUATES                 0033.000
         M.TXPM                    TXPM EQUATES                         0034.000
         LIST      NODATA,NONG                                          0035.000
*                                                                       0036.000
         DEF       STUBS                                                0037.000
         DEF       STUB.ICB                                             0038.000
         DEF       STUB.USR                                             0039.000
         EXT       H.IP06                                               0040.000
*                                                                       0041.000
HAT      DATAW     2                                                    0042.000
         ACW       STUB.ICB                                             0043.000
         ACW       STUBS                                                0044.000
*                                                                       0045.000
         BOUND     1D                                                   0046.000
STUB.ICB EQU       $                                                    0047.000
STUB.OLD RES       1D              OLD PSD                              0048.000
STUB.NEW GEN       1/1,4/0,1/1,2/0,24/W(STUB.EP)                        0049.000
         GEN       1/0,14/0,1/1,1/0,1/0,14/0                            0050.000
*                                  PRIV'D, UNMAPPED, ACTIVE, RETAIN     0051.000
STUB.ST1 RES       1W                                                   0052.000
STUB.ST2 RES       1W                                                   0053.000
*                                                                       0054.000
STUB.USR DATAD     0               WHERE USERS DISPATCH PSD WILL GO     0055.000
*                                                                       0056.000
*SILOC   DATAW     0               ADDRESS OF SI DEDICATED LOC          0057.000
*TILOC   DATAW     0               TI DEDICATED LOCATION                0058.000
*                                                                       0059.000
         BOUND     1W                                                   0060.000
STUB.EP  EQU       $               HANDLER ENTRY                        0061.000
         ABM       31,C.GINT       INCR GLOBAL INTERRUPT COUNT          0062.000
         BEI                       BLOCK THOSE INTERRUPTS               0063.000
         STF       R0,STUB.REG     STORE REGS                           0064.000
         LD        R6,STUB.USR     GET USERS PSD OF CONNECTED TASK      0065.000
         BZ        STUB.XIT        EXIT IF NONE                         0066.000
*                                                                       0067.000
* THERE IS A PSD HERE, SEE IF TASK STILL IN SYSTEM.  IF NOT IGNOR       0068.000
* THE INTERRUPT.                                                        0069.000
*                                                                       0070.000
         LI        R4,X'3FFC'      GET CPIX MASK                        0071.000
         TRRM      R7,R1           EXTRACT CPIX                         0072.000
         SRL       R1,3            MAKE A PROGRAM NUMBER                0073.000
         SLL       R1,2            WORD ADJUST IT                       0074.000
         ADMW      R1,C.ADAT       DQE ADDRESS TABLE                    0075.000
         LW        R3,0W,X1        GET THE DQE ADDRESS                  0076.000
         LB        R5,DQE.SAIR,X3  GET FLAGS                            0077.000
         ANMW      R5,=X'98'       ABORT, DELETE OR EXIT                0078.000
         BNZ       STUB.DIE        BR IF YES                            0079.000
         LB        R5,DQE.US,X3    GET STATE INDEX                      0080.000
         CI        R5,1            IS IT FREE OR PREA                   0081.000
         BLE       STUB.DIE        BR IF IT IS                          0082.000
*                                                                       0083.000
* WE HAVE A TASK CONNECTED, GO TO PSD IN R6 & R7.  RETURN ADDRESS       0084.000
* TO THIS HANDLER WILL BE IN R0 ON DISPATCH TO CALLER                   0085.000
*                                                                       0086.000
         LA        R0,STUB.RET     GET RETURN ADDRESS                   0087.000
         LW        R2,C.CTXT       IS TXPM ON SYSTEM                    0088.000
         BZ        STUB.DSP        BR IF NOT                            0089.000
*                                                                       0090.000
* HERE TXPM IS ON SYSTEM, SO DISPATCH TO USERS TASK VIA TXPM            0091.000
*                                                                       0092.000
         STF       R0,*C.TASKR     PUT REGS IN TXPM                     0093.000
         LW        R2,C.TASKR      R2 IS REG SAVE ADDRESS               0094.000
         BL        *C.RETURN       DISPATCH TO TASK                     0095.000
* PSD IN R6 AND R7                                                      0096.000
* ......THERE SHOULD BE NO RETURN IF DISPATCHING TO TXPM TASK           0097.000
*.......ELSE THIS IS MPX TASK, SO JUST LOAD MAPS                        0098.000
         LF        R0,*C.TASKR     RESTORE REGS FOR DISPATCH            0099.000
STUB.DSP LPSDCM    STUB.USR        MAP TO SPECIFIED TASK                0100.000
*                                                                       0101.000
* TASK WILL RETURN HERE FOR TXPM DISPATCH                               0102.000
* INTERNAL TXPM SVC 9,X'99' IS USED TO GO UNMAPPED, PRIV'D AND BLOCKED  0103.000
*....NOTICE THAT USER'S PSD COULD HAVE BEEN UNPRIVILEGED AND UNBLOCKED  0104.000
*....USER WILL HAVE TO WRITE HIS OWN SVC TO ALLOW THIS CAPABILITY       0105.000
*....WHEN TXPM IS NOT ON THE SYSTEM                                     0106.000
*                                                                       0107.000
STUB.RET SVC       9,X'99'         GO UNMAPPED, BLOCKED AND PRIV'D      0108.000
STUB.XIT LI        R0,-1           DECREMENT C.GINT                     0109.000
         ARMW      R0,C.GINT                                            0110.000
STUB.DAI DAI       X'0'            TURN OFF INTERRUPT                   0111.000
         LW        R2,C.CTXT       IS TXPM ON SYSTEM                    0112.000
         BZ        STUB.RT         STD EXIT IF NOT                      0113.000
         LA        R2,STUB.REG     ADDRESS OF REGS                      0114.000
         LD        R6,STUB.OLD     RETURN PSD                           0115.000
         BL        *C.RETURN       DISPATCH TO INTERRUPTED TASK         0116.000
*                                                                       0117.000
*....THERE WILL BE NO RETURN IF DISPATCHING TO TXPM TASK                0118.000
*....ELSE WE RETURN HERE AND MUST DO LPSDCM BACK TO USER                0119.000
*                                                                       0120.000
STUB.RT  LF        R0,STUB.REG     RESTORE USERS REGS                   0121.000
         LPSDCM    STUB.OLD        RETURN TO INTERRUPTED CONTEXT        0122.000
*                                                                       0123.000
* WE ARE HERE WHEN TASK THAT SUPPLIED PSD IS NOW GONE                   0124.000
* CLEAR IT OUT AND GET OUT                                              0125.000
*                                                                       0126.000
STUB.DIE ZMD       STUB.USR        CLEAR THE DISPATCH PSD               0127.000
STUB.DI  DI        X'0'            DISABLE INT                          0128.000
         BU        STUB.XIT        LEAVE.......                         0129.000
*                                                                       0130.000
STUB.REG RES       1F              USER REGS                            0131.000
SVC.REG  RES       1F              SVC SAVE REGS                        0132.000
*                                                                       0133.000
* END OF STUB HANDLER                                                   0134.000
*                                                                       0135.000
* SVC 9 HANDLER - USED TO GO UNMAPPED, BLOCKED AND PRIVILEDGED          0136.000
* ONLY EXECUTED WHEN TASK IS AN MPX TASK                                0137.000
*                                                                       0138.000
STUB.SVC DATAD     0               OLD PSD                              0139.000
         GEN       8/X'84',24/SVC9.ENT                                  0140.000
         GEN       15/0,1/1,1/0,1/1,14/0                                0141.000
*                                  UNMAPPED, EXTENDED, BLOCKED, RETAIN  0142.000
         DATAD     0               STATUS                               0143.000
*                                                                       0144.000
SVC9.ENT NOP                       FILLER FOR TXPM                      0145.000
         SBM       0,STUB.SVC      SET PRIV'D                           0146.000
         ZBM       16,STUB.SVC+1W  SET NEW BLOCK STATE                  0147.000
         SBM       17,STUB.SVC+1W  ...BEI                               0148.000
         ZBM       0,STUB.SVC+1W   SET UNMAPPED                         0149.000
         BEI                                                            0150.000
         STF       R0,SVC.REG      SAVE CALLERS REGS                    0151.000
         LW        R2,C.CTXT       IS TXPM ON SYSTEM                    0152.000
         BZ        SVC.DSP         BR IF NOT                            0153.000
*                                                                       0154.000
* HERE TXPM IS ON SYSTEM, SO RETURN TO CALLER VIA TXPM                  0155.000
*                                                                       0156.000
         LA        R2,SVC.REG      R2 IS REG SAVE ADDRESS               0157.000
         LD        R6,STUB.SVC     GET RETURN PSD                       0158.000
         BL        *C.RETURN       RETURN TO CALLING TASK               0159.000
* PSD IN R6 AND R7                                                      0160.000
* ......THERE SHOULD BE NO RETURN IF TXPM TASK IS RUNNING,              0161.000
*.......ELSE THIS IS MPX TASK, SO JUST LOAD MAPS.                       0162.000
SVC.DSP  LF        R0,SVC.REG      RESTORE REGS FOR RETURN              0163.000
         LPSD      STUB.SVC        RETURN                               0164.000
*                                                                       0165.000
         LPOOL                     LITERAL POOL HERE                    0166.000
*                                                                       0167.000
* SYSGEN INITIALIZATION ENTRY POINT                                     0168.000
*                                                                       0169.000
STUBS    EQU       $               SYSGEN ENTRY POINT                   0170.000
*                                  ON ENTRY R6=INTERRUPT LEVEL          0171.000
*                                           R7=CDT IF DEVICE            0172.000
         M.EIR                                                          0173.000
*                                                                       0174.000
* THIS CODE IS FOR HSD CONNECTED TO INTERRUPT                           0175.000
*                                                                       0176.000
*        TRR       R7,R1           CDT ADDRESS TO XR                    0177.000
*        LA        R5,HAT          GET HAT ADDRESS                      0178.000
*        STW       R5,CDT.SIHA,X1  PUT IN HSD'S CDT ENTRY               0179.000
*        LW        R3,C.SPAD       GET SPAD ADDRESS                     0180.000
*        LB        R2,CDT.IPL,X1   GET INTERRUPT LEVEL                  0181.000
*        SUI       R2,4            LEVEL 4 IS 1ST FOR I/O               0182.000
*        SLL       R2,3            DW ADJUST FOR IOCD                   0183.000
*        ADMW      R2,X'F2'*1W,X3  R2 = ADDRESS OF IOCD ENTRY           0184.000
*        LA        R5,TILOC        GET ADDRESS OF TI DEDICATED LOC      0185.000
*        STW       R5,1W,X2        PUT INTO 2ND WORD OF IOCD            0186.000
*        STW       R5,CDT.TIAD,X1  ALSO IN HSD'S CDT ENTRY              0187.000
* END OF HSD INIT CODE                                                  0188.000
*                                                                       0189.000
         LB        R5,C.MACH       GET MACHINE TYPE                     0190.000
         CI        R5,2            CONCEPT?                             0191.000
         BGE       STUB.CP         BR IF CONCEPT MACHINE                0192.000
STUB.7X  EQU       $               32/7X MACHINE                        0193.000
         TRR       R6,R3           INTERRUPT LEVEL TO R3                0194.000
         ABR       R3,24           ADD X'80' FOR SPAD OFFSET            0195.000
         SLL       R3,2            WORD ADJUST                          0196.000
         ADMW      R3,C.SPAD       ABSOLUTIZE SPAD ENTRY ADDRESS        0197.000
         LH        R2,1H,X3        GET IVL ADDRESS FROM SPAD            0198.000
         BU        STUB.MG         CONTINUE                             0199.000
STUB.CP  EQU       $               CONCEPT MACHINE                      0200.000
         LI        R2,X'F1'*1W     INTERRUPT TABLE ADDRESS              0201.000
         ADMW      R2,C.SPAD       ADD IN SPAD BASE ADDRESS             0202.000
         LW        R2,0W,R2        GET INTERRUPT TABLE BASE ADDRESS     0203.000
         TRR       R6,R4           INTERRUPT LEVEL                      0204.000
         SLL       R4,2            WORD OFFSET                          0205.000
         ADR       R4,R2           GET VECTOR LOCATION                  0206.000
STUB.MG  ZR        R5              CLEAR FOR SHIFT                      0207.000
         TRR       R6,R4           GET INTERRUPT LEVEL AGAIN            0208.000
         SRLD      R4,13           POSITION FOR DAI                     0209.000
         ARMW      R5,STUB.DAI     PUT IN HANDLER                       0210.000
         ARMW      R5,STUB.DI      PUT IN HANDLER                       0211.000
         LA        R4,STUB.ICB     GET ICB ADDRESS                      0212.000
         STW       R4,0W,R2        PUT IN IVL                           0213.000
*        STW       R2,SILOC        SAVE SI ADDRESS                      0214.000
         TRR       R6,R3           INT LEVEL TO X3                      0215.000
*                                                                       0216.000
*.....THE FOLLOWING CODE IS OPTIONAL.  EXECUTING THE MACRO WILL         0217.000
*.....DEFINE THIS INTERRUPT AS A FAST INTERRUPT TO TXPM                 0218.000
*                                                                       0219.000
          M.FAST   3               DEFINE AS FAST INTERRUPT             0220.000
*                                                                       0221.000
          LA       R1,H.IP06       GET IP06 ADDRESS                     0222.000
          LA       R4,STUB.SVC     GET ICB FOR SVC 9                    0223.000
          STW      R4,10W,X1       PUT IN VECTOR ENTRY FOR SVC 9        0224.000
*                                                                       0225.000
          M.XIR    HAT             EXIT TO SYSGEN                       0226.000
          END                                                           0227.000
