* DUKE.PRE FILE FOR MPX-32 REV 3 NON-EXTENDED MODE            06/18/90
C.3227   SETT
C.TRACF  SETF
C.MEMO   SETF
C.SALONE SETF
C.SYSGON SETF
BOPT_MPX SETF
C.FWMID  SETF                                                   EMMM-35A        
C.DPMODE SETF                                                   EMMM-35B        
C.DPDEV  SETF                                                   EMMM-35B        
MPX_SVC  SET       6                                            ECAL-35         
C.MPXOUT SETF                                                   EOUT-35         
         REIS                                                   EOUT-35         
*
         LIST      OFF
*
* 06/18/90 EHW - REPLACED "RI  X'01'" WITH "HALT"             >EHW061890
* 01/04/88 JBC - ADDED REVISED M.KILL MACRO TO DUKE.PRE         *ISC*
M.KILL   DEFM      CODE                                         *ISC*
         RDSTS     5               READ CPU STATUS              *ISC*
         ZBR       5,23            IS HALT MODE SET             *ISC*
         BNS       $+2W            BR IF YES                    *ISC*
         SETCPU    5               SET HALT MODE                *ISC*
         LW        5,%CODE         GET KILL CODE                *ISC*
         BEI                       BLOCK EXTERNAL INTERRUPTS
***      DAI       X'01'           DEACTIVATE LEVEL 1 INT     >EHW061890
***      RI        X'01'           REQUEST SOI INTERRUPT      >EHW061890
***      UEI                       UNBLOCK EXTERNAL INTERRUPTS>EHW061890
***      WAIT                                                 >EHW061890
         HALT                      CRASH THE SYSTEM NOW       >EHW061890
         BU        $-1W                                         *ISC*
         ENDM                                                   *ISC*
*  M.BEQUS START
************************************************************************
*                                                                      *
*  MACRO:    M.BEQUS                                                   *
*                                                                      *
*  PURPOSE:  BOEING COMMUNICATION REGION EQUATES                       *
*                                                                      *
*  HISTORY:                                                            *
*    09/06/90 EHW  ADDED 'B.CIOCTM' FOR DAC                            *
*    05/21/90 EHW  REMOVED B.'S USED BY J.LINK                         *
*                  ADDED B.'S FOR STALL MONITOR AND QNET               *
*    05/17/88 EHW  REDUCED B.DOT REGION SIZE FROM 1000 WDS TO 544 WDS  *
*    03/25/88 EHW  MPX-32 REL. 3.3                                     *
*                                                                      *
************************************************************************
*
*
**************************************************************
*     NOTE:  SELECTED B.DOT VARIABLES ARE ACCESSIBLE BY      *
*            FORTRAN LOAD MODULES VIA THE ROUTINES 'E:BGET'  *
*            AND 'E:BPUT'.  INORDER TO HAVE A B.DOT VARIABLE *
*            INCLUDED IN THESE ROUTINES, YOU MUST INSERT AN  *
*            '@' CHARACTER IN COLUMN 35 (JUST PRECEEDING THE *
*            COMMENT FIELD). COL 72 INDICATES WORD SIZE.     *
*            IF COL 72 HAS AN '*', THEN THAT LINE IS NOT     *
*            USED BY 'E:BGET','E:BPUT','E:CGET','E:CPUT'.    *
**************************************************************
*
*
M.BEQUS  DEFM                      BOEING EMS B.DOTS                   *
*
************************************
*    START BOEING COMM REGION      *
*      DOUBLE WORD VARIABLES       *
************************************
B.DWDS   EQU       X'00D08'        B.DOT DOUBLEWORD EQUATES
*                                  C.USER+1W
************************************
*        BOEING COMM REGION        *
*          WORD VARIABLES          *
************************************
B.FWDS   EQU       B.DWDS+24D      B.DOT WORDS EQUATES
************************************
*        BOEING COMM REGION        *
*        HALFWORD VARIABLES        *
************************************
B.HWDS   EQU       B.FWDS+474W     B.DOT HALFWORDS EQUATES
************************************
*        BOEING COMM REGION        *
*          BYTES VARIABLES         *
************************************
B.BWDS   EQU       B.HWDS+22H      B.DOT BYTE EQUATES
*
************************************
*    END BOEING COMM REGION        *
*           VARIABLES              *
************************************
B.REGEND EQU       B.BWDS+44B      B.DOT COMM REGION END
*
*                  DOUBLE WORD VALUES
*
B.BINADR EQU       B.DWDS          'H.BINIT' ADDRESS LINKAGE           W
B.BINUAD EQU       B.BINADR+1W    @H.BINIT 'UPDATE' SUBROUTINE ADDRESS W
B.CMDEVS EQU       B.BINADR+1D     EMS CONFIG DEVICE STATUS            D
B.DVRTRY EQU       B.CMDEVS+1D    @DEVICE ERROR RETRY COUNT TABLE (56) H
DEV.NENT EQU       55              # DEV ERR RETRY COUNT SLOTS - 1     *
*                                  NOTE: DO NOT MOVE B.SYSGEN WITHOUT  *
*                                  CHECKING SYSGEN'S 'UJ.SINIT'        *
B.SYSGEN EQU       B.DVRTRY+14D   @O/S GENERATION TIME TAG             D
B.BTTIME EQU       B.SYSGEN+1D    @REBOOT STARTUP TIME                 D
B.BTDATE EQU       B.BTTIME+1D    @REBOOT STARTUP DATE                 D
*
B.STLPSW EQU       B.BTDATE+1D    @CURRENT STALLED TASK PSW FROM STACK D
B.STLTSK EQU       B.STLPSW+1D    @BEGINNING OF 3 TASK CIRCULAR BUFFER D
B.STLTK1 EQU       B.STLTSK       @OLDEST OF LAST 3 STALL TASKS        D
B.STLTK2 EQU       B.STLTK1+2D    @2ND OLDEST OF LAST 3 STALLED TASKS  D
B.STLTK3 EQU       B.STLTK2+2D    @NEWEST STALLED TASK                 D
B.STLRDQ EQU       B.STLTK3+2D    @STALLED TASK REAL-TIME DQE INFO     D
B.STLREG EQU       B.STLRDQ+2D    @FIRST 4 REGS FROM TOP OF STACK      D
B.STLEX1 EQU       B.STLREG+2D    @STALL EXCEPTION PROCESS TASK 1 NAME D
B.STLEX2 EQU       B.STLEX1+1D    @STALL EXCEPTION PROCESS TASK 2 NAME D
*
B.SPRD01 EQU       B.STLEX2+1D     *** DOUBLE WORD SPARE LOC ***       D
B.SPRD02 EQU       B.SPRD01+1D     *** DOUBLE WORD SPARE LOC ***       D
B.SPRD03 EQU       B.SPRD02+1D     *** DOUBLE WORD SPARE LOC ***       D
B.SPRD04 EQU       B.SPRD03+1D     *** DOUBLE WORD SPARE LOC ***       D
*
*                  FULL WORD VALUES
*
B.RESSMD EQU       B.FWDS         @NUMBER OF ENTRIES IN RES SMD TABLE  W
RES.SIZE EQU       1024            MAX # RESIDENT SMD ENTRIES          *
RES.PRIM EQU       1               # ENTRIES TO GO FORWARD ON COLLISION*
B.DISHIS EQU       B.RESSMD+1W     GLOBAL ADDR FOR DISC STATISTICS     W
B.GLOBAL EQU       B.DISHIS+1W    @GLOBAL ADDR FOR TASK FAILURE INFO   W
B.LCPU   EQU       B.GLOBAL+1W    @LOGICAL CPU INDEX                   W
B.RADCON EQU       B.LCPU+1W      @TIME/PRIME ERR/GHOST ERR/# BLKS     W
B.IMGFIL EQU       B.RADCON+1W    @IMAGE FILE STARTING SECTOR ADDR     W
B.IMGSIZ EQU       B.IMGFIL+1W    @MEMORY IMAGE FILE SIZE (IN SECTORS) W
B.STLSIZ EQU       B.IMGSIZ+1W    @STALL FILE SIZE                     W
B.STLTBL EQU       B.STLSIZ+1W    @STALL TASK PARAMETER TABLE          W
*                                  CURRENTLY 75 ENTRIES (6 BYTES
*                                  PER ENTRY - 113 WORDS) (MUST BE
*                                  AT LEAST 'C.NQUE' * 6 BYTES)
B.STLEXT EQU       450B            STALL TASK TABLE SIZE (75 * 6)      *
B.STLREC EQU       6B              STALL TASK TABLE RECORD SIZE (BYTES)*
B.STALLM EQU       B.STLTBL-B.STLREC  STALL TASK MONITOR TABLE OFFSET  *
B.STLINT EQU       B.STALLM+0B     STALL TASK INTERVAL BASE OFFSET     *
B.STLDEL EQU       B.STALLM+2B     STALL TASK DELAY BASE OFFSET        *
B.STLSTA EQU       B.STALLM+4B     STALL TASK STATUS/OPTION BASE OFFSET*
B.STLBMP EQU       B.STALLM+5B     STALL TASK 'BUMP' BASE OFFSET       *
B.ABQUE  EQU       B.STLTBL+113W  @ABORT/EXTENDED MONITOR QUEUE TABLE  W
*                                  5 WDS/ENTRY * 24 ENTRIES = 120 WORDS
B.ABQMAX EQU       479B            ABORT QUEUE MAXIMUM INDEX (SIZE-1)  *
B.CRASH  EQU       B.STLTBL+352W  @VECTOR TO CRASH SAVE AREA IN DB     W
B.TASK   EQU       B.CRASH+1W     @BOEING TASK BIT WORD                W
B.TRACK  EQU       B.TASK+1W      @STLFIL TRACK ADDR                   W
B.SECTOR EQU       B.TRACK+1W     @STLFIL SECTOR ADDR                  W
B.HACI   EQU       B.SECTOR+1W     HIGHEST DISC PRI ACI COMMAND        W
B.ACIRET EQU       B.HACI+3W       ACI CODE RETURN INSTR               W
B.PCDTA  EQU       B.ACIRET+1W    @PRIME MHD CDT ADDRESS               W
B.GCDTA  EQU       B.PCDTA+1W     @GHOST MHD CDT ADDRESS               W
B.PCBBA  EQU       B.GCDTA+1W     @PRIME MHD CONTEXT BLK BASE ADDR     W
B.GCBBA  EQU       B.PCBBA+1W     @GHOST MHD CONTEXT BLK BASE ADDR     W
B.GIBA   EQU       B.GCBBA+1W     @GHOST IOQ BASE ADDR                 W
B.GFLG   EQU       B.GIBA+1W      @GHOSTING FLAG INFORMATION           W
B.GHOST  EQU       B.GFLG+1W      @GHOST STATUS                        W
B.MHD1   EQU       B.GHOST+1W      DISC CONTROLLER '08'                W
B.MHD2   EQU       B.MHD1+1W       DISC CONTROLLER '0C'                W
B.MHD3   EQU       B.MHD2+1W       DISC CONTROLLER '04'                W
B.STLFIL EQU       B.MHD3+1W      @STALL FILE STARTING SECTOR ADDR     W
B.HDACI  EQU       B.STLFIL+1W     HIGHEST DISC PRI DACI COMMAND       W
B.DACIRE EQU       B.HDACI+3W      DACI CODE RETURN INSTR              W
*
B.STLFLG EQU       B.DACIRE+1W    @STALL HISTORY/EXCEPTION CONTROL FLAGW
B.STLCNT EQU       B.STLFLG+1W    @TOTAL COUNT OF STALL HISTORY LOOPS  W
B.STLPNT EQU       B.STLCNT+1W    @POINTER INTO 3 TASK CIRCULAR BUFFER W
*
B.QLINK1 EQU       B.STLPNT+1W    @QNET/QLINK INFORMATION WORDS        W
B.QLNK11 EQU       B.QLINK1       @QNET INFO - PRIME GOULD LINK ADDRS  B
B.QLNK12 EQU       B.QLINK1+1B    @QNET INFO - DCS LAN STATUS BITS     B
B.QLNK13 EQU       B.QLINK1+2B    @QNET INFO - RESERVED FOR FUTURE     B
B.QLNK14 EQU       B.QLINK1+3B    @QNET INFO - RESERVED FOR FUTURE     B
B.QLINK2 EQU       B.QLINK1+1W    @QNET INFO - SPARE WORD FOR FUTURE   W
B.QLNK21 EQU       B.QLINK2       @QNET INFO - RESERVED FOR FUTURE     B
B.QLNK22 EQU       B.QLINK2+1B    @QNET INFO - RESERVED FOR FUTURE     B
B.QLNK23 EQU       B.QLINK2+2B    @QNET INFO - RESERVED FOR FUTURE     B
B.QLNK24 EQU       B.QLINK2+3B    @QNET INFO - RESERVED FOR FUTURE     B
*
B.CIOCTM EQU       B.QLINK2+1W    @CIOC SET TIME FLAG                  W
*
B.SPRW01 EQU       B.CIOCTM+1W     *** WORD SPARE LOCATION ***         W
B.SPRW02 EQU       B.SPRW01+1W     *** WORD SPARE LOCATION ***         W
B.SPRW03 EQU       B.SPRW02+1W     *** WORD SPARE LOCATION ***         W
B.SPRW04 EQU       B.SPRW03+1W     *** WORD SPARE LOCATION ***         W
B.SPRW05 EQU       B.SPRW04+1W     *** WORD SPARE LOCATION ***         W
B.SPRW06 EQU       B.SPRW05+1W     *** WORD SPARE LOCATION ***         W
B.SPRW07 EQU       B.SPRW06+1W     *** WORD SPARE LOCATION ***         W
B.SPRW08 EQU       B.SPRW07+1W     *** WORD SPARE LOCATION ***         W
B.SPRW09 EQU       B.SPRW08+1W     *** WORD SPARE LOCATION ***         W
B.SPRW10 EQU       B.SPRW09+1W     *** WORD SPARE LOCATION ***         W
*
*                  HALF WORD VALUES
*
B.PRIMHD EQU       B.HWDS         @PRIME MHD CHAN/SUBCHAN ADDR         H
B.GMHD   EQU       B.PRIMHD+1H    @GHOST MHD CHAN/SUBCHAN ADDR         H
B.CMGPRI EQU       B.GMHD+1H       EMS CONFIG PRIMARY DISC CHAN (G-MODEH
B.CMCPRI EQU       B.CMGPRI+1H     EMS CONFIG PRIMARY DISC CHAN (C-MODEH
B.CMGHST EQU       B.CMCPRI+1H     EMS CONFIG GHOST DISC CHAN (G-MODE) H
B.CMCOPY EQU       B.CMGHST+1H     EMS CONFIG COPY DISC CHAN (C-MODE)  H
B.STLCSA EQU       B.CMCOPY+1H    @STALL FILE CHAN/SUBCHAN DISC ADDR   H
B.ABQTOP EQU       B.STLCSA+1H     ABORT QUEUE 'TOP' POINTER           H
B.ABQFRE EQU       B.ABQTOP+1H     ABORT QUEUE 'FREE' NODE POINTER     H
B.NFLS   EQU       B.ABQFRE+1H    @# ENTRIES IN FILE NAME TABLE        H
B.NPGS   EQU       B.NFLS+1H      @# ENTRIES IN PROGRAM NAME TABLE     H
*
B.SPRH01 EQU       B.NPGS+1H       *** HALFWORD SPARE LOCATION ***     H
B.SPRH02 EQU       B.SPRH01+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH03 EQU       B.SPRH02+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH04 EQU       B.SPRH03+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH05 EQU       B.SPRH04+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH06 EQU       B.SPRH05+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH07 EQU       B.SPRH06+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH08 EQU       B.SPRH07+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH09 EQU       B.SPRH08+1H     *** HALFWORD SPARE LOCATION ***     H
B.SPRH10 EQU       B.SPRH09+1H     *** HALFWORD SPARE LOCATION ***     H
*
*                  BYTE VALUES
*
B.CLK0   EQU       B.BWDS         @E:CLOCK COUNTERS TO MAKE SYSTEM     B
B.CLK1   EQU       B.CLK0+1B      @TIME ADJUSTMENTS                    B
B.MACH   EQU       B.CLK1+1B      @REAL CPU CURRENTLY IN USE (0-15)    B
B.MACHB  EQU       B.MACH+1B      @REAL CPU CURRENTLY IN USE (BIT INFO)B
B.IMAGE  EQU       B.MACHB+1B     @SOI WRITE MEMORY IMAGE (0=N,1=Y)    B
B.PWRFAI EQU       B.IMAGE+1B     @POWER FAIL REBOOT (.NE.1=N,1=Y)     B
B.SUSPND EQU       B.PWRFAI+1B    @TASK SUSPEND UPON ACTIVATE (0=N,1=Y)B
B.HPRI   EQU       B.SUSPND+1B    @HIGHEST PRIORITY OF DISC CHANNEL    B
B.CPRI   EQU       B.HPRI+1B      @CURRENT PRIORITY OF DISC CHANNEL    B
B.CPUID  EQU       B.CPRI+1B      @THIS CPU ID (0=UND, 1, 2, 3, OR 4)  B
B.CURFN  EQU       B.CPUID+1B     @THIS CPU CURRENT FUNCTION           B
B.CPUSFN EQU       B.CURFN+1B      BACKUP CPU SUBFUNC (0=UNDEF,1=OFFSCAB
B.DSPGS  EQU       B.CPUSFN+1B     DISPLAY GHOST STATUS                B
B.MHDGM  EQU       B.DSPGS+1B      MHD GHOST MODE                      B
B.STLENA EQU       B.MHDGM+1B     @STALL DUMP ENABLED FLAG (0=N,1=Y)   B
B.MHDGS  EQU       B.STLENA+1B     MHD GHOST STATUS                    B
B.CMGSTA EQU       B.MHDGS+1B      EMS CONFIG GHOSTING STATUS          B
B.CMCSTA EQU       B.CMGSTA+1B     EMS CONFIG COPY STATUS              B
B.ABQPRS EQU       B.CMCSTA+1B     ABORT QUEUE 'PRESENT' FLAG AND      B
*                                  QUEUE OVERFLOW FLAG (BITS 0,1)
B.RTCA   EQU       B.ABQPRS+1B    @REAL TIME CLOCK ADJUSTMENT INDICATORB
B.FLAGS  EQU       B.RTCA+1B       SNAPSHOT FLAGS (4-7 UNUSED)         B
B.SYSMOD EQU       B.FLAGS+7B     @SYSTEM MODE (0=MPX,1=EMS,2=SCADA)   B
*
B.SPRB01 EQU       B.SYSMOD+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB02 EQU       B.SPRB01+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB03 EQU       B.SPRB02+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB04 EQU       B.SPRB03+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB05 EQU       B.SPRB04+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB06 EQU       B.SPRB05+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB07 EQU       B.SPRB06+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB08 EQU       B.SPRB07+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB09 EQU       B.SPRB08+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB10 EQU       B.SPRB09+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB11 EQU       B.SPRB10+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB12 EQU       B.SPRB11+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB13 EQU       B.SPRB12+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB14 EQU       B.SPRB13+1B     *** BYTE SPARE LOCATION ***         B
B.SPRB15 EQU       B.SPRB14+1B     *** BYTE SPARE LOCATION ***         B
*
B.SUDS   EQU       31              ONLINE--> SUDS TASK BIT             *
*                                  OFFLINE--> SYSSY TASK BIT
B.STRTUP EQU       30                                                  *
B.DFAIL  EQU       29                                                  *
*
B.NM01   EQU       0                                                   *
B.UI01   EQU       1                                                   *
B.PV01B  EQU       2                                                   *
B.SNAP   EQU       3                                                   *
*
B.TE     EQU       0               TOO MANY ERRORS BIT                 *
B.GB     EQU       15              GOOD/BAD BIT                        *
B.ON     EQU       16                                                  *
B.SYS1   EQU       24                                                  *
B.SYS2   EQU       25                                                  *
B.CL     EQU       27              CLEAR ALARM BIT                     *
B.OR     EQU       29              OVERRIDE BIT                        *
B.ALARM  EQU       30              ACTIVE ALARM BIT                    *
B.CS     EQU       31              CURRENT STATUS BIT 1--> UNAVAILABLE *
*
*
*  SPECIAL EQUATES
*
DQE.STTB EQU       X'DD'           1 BYTE FOR STALL ALIVE/WELL CNT.    *
*                                  @ DQE.MRT+1B                        *
DQE.STBB EQU       7               ABM BIT IN DQE.STTB                 *
*
         ENDM                                                          *
*  M.BEQUS END
*
************************************************************************
*                                                                      *
*  MACRO:    L.EQUS                                                    *
*                                                                      *
*  PURPOSE:  DEFINES INTER BUS LINK CONTROL BLOCK EQUATES              *
*                                                                      *
*  HISTORY:                                                            *
*    03/25/88 EHW MPX-32 REL. 3.3                                      *
*                                                                      *
************************************************************************
*
*
L.EQUS   DEFM                      INTER BUS LINK RELATED B.DOTS
*
LCB.IDEN EQU       0               TRANSACTION IDENTIFICATION.
LCB.CSUM EQU       1W              CHECK-SUM.
LCB.ID   EQU       2W              IDENTIFICATION FIELDS.
LCB.CPUO EQU       LCB.ID          ORIGINATING CPU.
LCB.CPUD EQU       LCB.ID+1B       DESTINATION CPU.
LCB.CPUC EQU       LCB.ID+2B       CURRENT CPU.
LCB.TYPE EQU       LCB.ID+3B       BLOCK TYPE.
LCB.PRI  EQU       3W              PRIORITY FIELDS.
LCB.CUP  EQU       LCB.PRI         CURRENT USER PRIORITY
LCB.BUP  EQU       LCB.PRI+1B      BASE PRIORITY OF USER TASK
LCB.IOP  EQU       LCB.PRI+2B      I/O PRIORITY
LCB.US   EQU       LCB.PRI+3B      TASK'S STATE CHAIN INDEX
LCB.ACT  EQU       4W              SPECIAL ACTIONS.
LCB.FLGS EQU       5W              SPECIAL FLAGS.
LCB.SIOQ EQU       6W              SENDING I/O QUEUE ADDRESS.
LCB.RIOQ EQU       7W              RECEIVING I/O QUEUE ADDRESS.
LCB.SR0  EQU       8W              SENDING REGISTER 0
LCB.SR1  EQU       9W              SENDING REGISTER 1
LCB.SR2  EQU       10W             SENDING REGISTER 2
LCB.SR3  EQU       11W             SENDING REGISTER 3
LCB.SR4  EQU       12W             SENDING REGISTER 4
LCB.SR5  EQU       13W             SENDING REGISTER 5
LCB.SR6  EQU       14W             SENDING REGISTER 6
LCB.SR7  EQU       15W             SENDING REGISTER 7
LCB.RR0  EQU       16W             RECEIVING REGISTER 0
LCB.RR1  EQU       17W             RECEIVING REGISTER 1
LCB.RR2  EQU       18W             RECEIVING REGISTER 2
LCB.RR3  EQU       19W             RECEIVING REGISTER 3
LCB.RR4  EQU       20W             RECEIVING REGISTER 4
LCB.RR5  EQU       21W             RECEIVING REGISTER 5
LCB.RR6  EQU       22W             RECEIVING REGISTER 6
LCB.RR7  EQU       23W             RECEIVING REGISTER 7
LCB.FAT2 EQU       24W             FAT WORD 2
LCB.FAT3 EQU       25W             FAT WORD 3
LCB.FAT4 EQU       26W             FAT WORD 4
LCB.FAT5 EQU       27W             FAT WORD 5
LCB.FCB0 EQU       28W             FCB WORD 0
LCB.FCB1 EQU       29W             FCB WORD 1
LCB.FCB2 EQU       30W             FCB WORD 2
LCB.FCB3 EQU       31W             FCB WORD 3
LCB.FCB4 EQU       32W             FCB WORD 4
LCB.FCB5 EQU       33W             FCB WORD 5
LCB.FCB6 EQU       34W             FCB WORD 6
LCB.FCB7 EQU       35W             FCB WORD 7
LCB.FCB8 EQU       36W             FCB WORD 8
LCB.FCB9 EQU       37W             FCB WORD 9
LCB.FCBA EQU       38W             FCB WORD 10
LCB.FCBB EQU       39W             FCB WORD 11
LCB.FCBC EQU       40W             FCB WORD 12
LCB.FCBD EQU       41W             FCB WORD 13
LCB.FCBE EQU       42W             FCB WORD 14
LCB.FCBF EQU       43W             FCB WORD 15
LCB.TASN EQU       44W             TASK ACTIVATION SEQ NUMBER
LCB.TSF  EQU       45W             TASK SCHEDULING FLAGS
LCB.TASK EQU       46W             TASK NAME
LCB.USER EQU       48W             USER NAME
LCB.OWNR EQU       50W             OWNER NAME
LCB.FILE EQU       52W             FILE NAME
LCB.PASS EQU       54W             PASSWORD
LCB.ICB1 EQU       60W             IBL LINK HANDLER
LCB.ICB2 EQU       61W             IBL LINK HANDLER
LCB.ICB3 EQU       62W             IBL LINK HANDLER
LCB.ICB4 EQU       63W             IBL LINK HANDLER
LTYP.REA EQU       28              READ DATA RECORD.
LTYP.WRI EQU       29              WRITE DATA RECORD.
LTYP.FCL EQU       30              FILE CONTROL FUNCTION.
LTYP.CDT EQU       1               COMMAND DATA TRANSMIT.
LTYP.DAV EQU       2               DATA AVAILABLE.
LTYP.OCI EQU       3               OPERATION COMPLETE TO H.IBL.
LTYP.PUR EQU       13              PURGE EXISTING I/O QUEUES.
LTYP.FAI EQU       34              LINK FAILURE
LTYP.TST EQU       5               TEST BLOCK, NO ACTION.
LTYP.TQJ EQU       6               TEST BLOCK, QUEUE TO J.LINK.
LTYP.TTR EQU       7               TEST BLOCK, TRANSMIT TO REMOTE CPU.
B.SCAF   EQU       X'01'           SCADA FUNCTION CODE
B.SACF   EQU       X'02'           SAC FUNCTION CODE
B.RMSCAL EQU       97              LOWER LIMIT SCADA RESOURCE MARKS
B.RMSCAH EQU       128             UPPER LIMIT SCADA RESOURCE MARKS
B.RMSACL EQU       129             LOWER LIMIT SAC RESOURCE MARKS
B.RMSACH EQU       160             UPPER LIMIT SAC RESOURCE MARKS
         ENDM
*
************************************************************************
*                                                                      *
*  MACRO:    M.FCBEQU                                                  *
*                                                                      *
*  PURPOSE:  DEFINES FCB EQUS FOR DUKE RUN-TIME MODULES                *
*            E:BFI AND E:GBFI.                                         *
*                                                                      *
*  HISTORY:                                                            *
*    03/25/88 EHW MPX-32 REL. 3.3                                      *
*                                                                      *
************************************************************************
*
M.FCBEQU DEFM
*
FCBLFC   EQU       0W
FCBOPEN1 EQU       1W
FCBSTAT  EQU       2W
FCBRAND  EQU       4
FCBBLKIO EQU       5
FCBEXFCB EQU       6
FCBDSTAT EQU       3W
FCBXFRD  EQU       4W
FCBEADDR EQU       6W
FCBRESER EQU       7
FCBDADDR EQU       8W
FCBCOUNT EQU       9W
FCBRADDR EQU       10W
FCBNWRTN EQU       13W
FCBNWERR EQU       14W
FCBFILE  EQU       16W
FCBBLKN  EQU       18W
FCBFLAG  EQU       19W
FCBOPEN2 EQU       0
FCBNAME  EQU       1
FCBACES  EQU       2
FCBFORM  EQU       3
FCBFEST  EQU       4
FCBBLNK  EQU       5
FCBRDNLY EQU       6
FCBBLKD  EQU       7
FCBTMIO  EQU       8
FCBBADDR EQU       19W
FCBRCDL  EQU       20W
FCBNXTR  EQU       21W
FCBFSTAT EQU       22W+0B
FCBTYPE  EQU       22W+1B
FCBOFST  EQU       23W
FCBRPBK  EQU       24W
FCBMAXB  EQU       25W
FCBDEVT  EQU       26W+0B
FCBDEVC  EQU       26W+1B
FCBDEVA  EQU       26W+2B
FCBOPN27 EQU       27W
FCBOTCW  EQU       28W
FCBSIZE  EQU       30W
*
         ENDM
************************************************************************
*                                                                      *
*  MACRO:    M.ALCTBL                                                  *
*                                                                      *
*  PURPOSE:  DEFINES ALC EQUS FOR DUKE RUN-TIME MODULE E:ALOC3         *
*                                                                      *
*  HISTORY:                                                            *
*    03/25/88 EHW MPX-32 REL. 3.3                                      *
*                                                                      *
************************************************************************
*
M.ALCTBL DEFM
*
ALCFCB   EQU       0W
ALCFSIZE EQU       1W
ALCFNAME EQU       2W
ALCUSER  EQU       4W
ALCKEY   EQU       6W
ALCPSWD  EQU       8W
ALCDVTYP EQU       10W
ALCFSTAT EQU       11W
ALCTYPE  EQU       11W+1B
ALCOPEN  EQU       11W+2B
ALCENTSZ EQU       12W
ALCMXENT EQU       30
ALCTBLSZ EQU       360W
*
         ENDM
*
         LIST      OFF
*  *********************************************************************
*
*  $Header:  002  20-NOV-89 15:31  BEVIER    BEVIER                    $
*  $Log:   @ISCSRC(DV.TXPM.SYSM)TXPM.PRE                              $
*
*       Rev  002  20-NOV-89 15:31  BEVIER    BEVIER
*  Update for MPX 3.5 flags.
*
*       Rev  001  09-NOV-88 08:16  GANN      GANN
*   Version control header added
*
*
* PRE FILE FOR NON-EXTENDED MODE OF MPX-32 REV 3  RELEASE 3.5   MPX_NON
C.3227   SETT
C.TRACF  SETF
C.SALONE SETF
C.SYSGON SETF
C.TXTEST SETF
C.MEMO   SETF
BOPT_MPX SETF
C.FWMID  SETF                                                   EMMM-35A
C.DPMODE SETF                                                   EMMM-35B
C.DPDEV  SETF                                                   EMMM-35B
C.MPXOUT SETF                                                   EOUT-35
         REIS                                                   EOUT-35
         SPACE                                                  EOUT-35
         LIST     OFF
****************************************************************EDPG-35
*        MACRO:   M.LMEML                                       EDPG-35
*                                                               EDPG-35
*  THIS MACRO WILL SET UP %P1 WITH CONTENTS OF MEML IN BITS     EDPG-35
*  0-15 AND CONTENTS OF MEML2 IN 16-31.                         EDPG-35
*  NOTE: IF NOT C.DPMODE AND HALFWORD MIDS THEN %P1 WILL HAVE   EDPG-35
*  THE MEML CONTENTS IN BITS 0-15 OF THE REGISTER.              EDPG-35
*                                                               EDPG-35
*  NOTE: R0 IS DESTROYED                                        EDPG-35
*                                                               EDPG-35
****************************************************************EDPG-35
M.LMEML  DEFM      P1,P2,P3                                     EDPG-35
         IFT       C.DPMODE,%CONT                               EDPG-35
         IFF       C.FWMID,%CONT                                EDPG-35
         LCH       %P1,%P2,%P3     GET MEML                     EDPG-35
         SLL       %P1,16          MOVE TO LEFT HALF OF REG     EDPG-35
         TRR       %P3,R0          SAVE MEML IN R0              EDPG-35
         M.TSAD    %P3             GET TSA ADDRESS              EDPG-35
         LCW       %P3,T.MEMLO,%P3 GET MEML OFFSET              EDPG-35
         ADR       R0,%P3          GET MEML2 ENTRY ADDRESS      EDPG-35
         LCH       %P3,%P2,%P3     GET MEML2                    EDPG-35
         SLL       %P3,16          CLEAR UPPER HALF             EDPG-35
         SRL       %P3,16                                       EDPG-35
         ORR       %P3,%P1         SET UP RIGHT HALF IN P1      EDPG-35
         TRR       R0,%P3          RESTORE P3                   EDPG-35
         GOTO      %END                                         EDPG-35
%CONT    ANOP                                                   EDPG-35
         M.LDMID   %P1,%P2,%P3                                  EDPG-35
         IFF       C.FWMID,%END                                 EDPG-35
         SLL       %P1,16          PUT IT IN BITS 0-15          EDPG-35
%END     ANOP                                                   EDPG-35
         ENDM                                                   EDPG-35
         SPACE                                                  EOUT-35
****************************************************************EDPG-35
*        MACRO:   M.SMEML                                       EDPG-35
*                                                               EDPG-35
*  THIS MACRO WILL SET UP MEML WITH LEFT HALF OF P1 AND         EDPG-35
*  SET UP MEML2 WITH RIGHT HALF OF P1.                          EDPG-35
*  NOTE: IF NOT C.DPMODE AND HALFWORD MIDS THEN %P1 WILL BE     EDPG-35
*  SET UP TO MOVE MEML CONTENTS TO BITS 16-32 FOR RESTORE.      EDPG-35
*                                                               EDPG-35
*  NOTE: R0 IS DESTROYED                                        EDPG-35
*                                                               EDPG-35
****************************************************************EDPG-35
M.SMEML  DEFM      P1,P2,P3                                     EDPG-35
         IFT       C.DPMODE,%CONT                               EDPG-35
         IFF       C.FWMID,%CONT                                EDPG-35
         TRR       %P3,R0          SAVE P3 IN R0                EDPG-35
         M.TSAD    %P3             GET TSA ADDRESS              EDPG-35
         LCW       %P3,T.MEMLO,%P3 GET MEML OFFSET              EDPG-35
         ADR       R0,%P3          GET MEML2 ENTRY ADDRESS      EDPG-35
         STCH      %P1,%P2,%P3     STORE RIGHT  HALF IN MEML2   EDPG-35
         TRR       R0,%P3          RESTORE MEML ADDRESS         EDPG-35
         TRR       %P1,R0          SET R0 W/ %P1 CONTENTS       EDPG-35
         SRL       R0,16           MOVE TO RIGHT HALF OF REG    EDPG-35
         STCH      R0,%P2,%P3      STORE LEFT HALF IN MEML      EDPG-35
         GOTO      %END                                         EDPG-35
%CONT    ANOP                                                   EDPG-35
         IFF       C.FWMID,%FWMID                               EDPG-35
         SRL       %P1,16          PUT IT IN BITS 16-32         EDPG-35
%FWMID   ANOP                                                   EDPG-35
         M.STMID   %P1,%P2,%P3                                  EDPG-35
         IFF       C.FWMID,%END                                 EDPG-35
         SLL       %P1,16          PUT IT IN BITS 0-15          EDPG-35
%END     ANOP                                                   EDPG-35
         ENDM                                                   EDPG-35
         LIST      ON
************************************************************************
         LIST      OFF
*  *********************************************************************
*
*  $Header:  002  25-MAY-89 12:27  GANN      GANN                      $
*  $Log:   @ISCSRC(DV.TXPM.SYSM)SM.XPMMAC                             $
*
*       Rev  002  25-MAY-89 12:27  GANN      GANN
*  The version originally added to the version control system
*  was an old one.  I deleted all of the old macros and added
*  the new ones.  No lines are marked for this mod because the
*  entire file was modified.
*
*       Rev  001  09-NOV-88 06:15  GANN      GANN
*   Version control header added
*
*
************************************************************************
*
* ASSEMBLE MACRO T.TXPM
*
* PURPOSE: Used by SYSTEM modules (user SVC's/int. handlers) to see if
*          the current task is a T-XPM task.
*
*          This macro is not for use at the Task level.
*
* CALLING SEQUENCE:
*
*          T.TXPM
*
* RETURN:
*
*        R2 is destroyed, condition code 1 is set if the current
*        Task is a T-XPM task.
*
************************************************************************
*
T.TXPM   DEFM
         LW        R2,C.CTXT            FIRST SEE IF TXPM IS PRESENT
         BEQ       %NOTXPM              NOPE C.CTXT NOT SET UP
         T.DQECXT                       GET CONTEXT ADDRESS
         TBM       TSK.TXPM,TSK.FLG1,X2 IS THIS A TXPM TASK?
%NOTXPM  EQU       $                    RETURN WITH CONDITION CODE SET
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO TXPM.LV  (FOR CPU)
*
* PURPOSE: Allow SYSTEM modules to dispatch to tasks running in either
*          the MPX or T-XPM environments. This macro will typically
*          replace LPSD instructions when converting SYSTEM modules to
*          execute on behalf of T-XPM tasks.
*
*          This macro is for use by an operating SYSTEM module that
*          performs an LPSD to return to a previous context.  It is
*          not to be used at the task level.
*
* CALLING SEQUENCE:
*
*          TXPM.LV   ADDRESS
*
* Where ADDRESS is the address of the User's PSD.
* R0-R7 must contain the user's registers.
*
* RETURN:
*
*        T-XPM TASK: control is transferred to the T-XPM task.
*        MPX   TASK: Control is returned to the instruction after
*                    the macro call with the user's registers
*                    loaded.
*
************************************************************************
*
TXPM.LV  DEFM      ADDR
         BEI
         STF       R0,%REGS        SAVE USER REGS
         LW        R0,C.GINT       INTERRUPT IN PROGRESS?
         BNZ       %MPX            IF SO, LEAVE
         LW        R0,C.CURR
         CI        R0,C.CURR       TASK IN EXECUTION?
         BEQ       %MPX            IF NOT, LEAVE
         T.TXPM                    IS TASK A TXPM TASK?
         BNS       %MPX            BRANCH IF NOT
         LA        R2,%REGS        GET ADDRESS OF REG SAVE AREA
         LD        R6,%ADDR        GET THE RETURN PSD
         BL        *C.XPMRET       DISPATCH IF T-XPM TASK
         BU        %MPX            SKIP OVER REG SAVE AREA
*
%REGS    RES       1F              USER REGS
*
%MPX     EQU       $
         LF        R0,%REGS        RESTORE USER'S REGISTERS
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO TXPM.RET (FOR CPU)   FAST OR NESTED INTERRUPT RETURN
*
* PURPOSE: Allow SYSTEM modules to dispatch to tasks running in either
*          the MPX or T-XPM environments. This macro will typically
*          replace LPSD instructions when converting SYSTEM modules to
*          execute on behalf of T-XPM tasks.
*
*          This macro is for use by an operating SYSTEM module that
*          performs an LPSD to return to a previous context.  It is
*          not to be used at the task level.
*
* CALLING SEQUENCE:
*
*          TXPM.RET  ADDRESS
*
* Where ADDRESS is the address of the User's PSD.
* R0-R7 must contain the user's registers.
*
* RETURN:
*
*        T-XPM TASK: control is transferred to the T-XPM task.
*        MPX   TASK: Control is returned to the instruction after
*                    the macro call with the user's registers
*                    loaded.
*
************************************************************************
*
TXPM.RET DEFM      ADDR
         BEI
         STW       R2,%REG2        SAVE USER REG 2
         LW        R2,C.CTXT       IS TXPM ON SYSTEM
         BZ        %MPX            BR IF NOT
         LW        R2,%REG2        RESTORE USER'S R2
         STF       R0,*C.TASKR     PASS REGS TO TXPM
         LD        R6,%ADDR        GET RETURN PSD WD 2
         LW        R2,C.TASKR      REG SAVE AREA ADDRESS
         BL        *C.RETURN       DISPATCH IF T-XPM TASK
         LF        R0,*C.TASKR     RESTORE USER'S REGS
         BU        %RMPX           SKIP OVER REG SAVE AREA & RETURN
*
%REG2    RES       1W              USER REG  2
*
%MPX     EQU       $
         LW        R2,%REG2        RESTORE USER'S REGISTER  2
%RMPX    EQU       $               RETURN TO CALLER
         ENDM
*
***********************************************************
*
*        MACRO TO GET REAL ADDRESS
*
* USAGE: USED INPLACE OF LEAR INSTRUCTION IN HANDLERS WHEN THE
*        ADDRESS PROVIDED IS IN AN OVERFLOW MAP THAT CAN NOT BE
*        MAPPED INTO THE TASK'S ADDRESS SPACE WHEN IN THE MPX
*        ENVIRONMENT.
*
*        X.REAL    DEST.REG,SRCE.REG
*
* WHERE  DEST.REG IS THE REGISTER NUMBER TO RECEIVE THE REAL
*        ADDRESS
*        SRCE.REG IS THE REGISTER NUMBER CONTAINING AN MPX
*        ADDRESS.  IT HAS ALREADY BEEN BIASED USING THE X.BIAS
*        OR T.BIAS MACRO TO CONVERT IT FROM A TXPM ADDRESS PASSED
*        BY THE USER TO AN MPX ADDRESS.
*
***********************************************************
*
X.REAL   DEFM      RD,RS
         STF       R0,%REG         SAVE REGS
         LA        R2,%REG         SAVE AREA ADDR
         LW        R6,1W*%RS,X2    GET ADDRESS TO CONVERT
         ANMW      R6,=X'FFFFFF'   ONLY 24 BITS
         LB        R5,C.MACH       GET MACHINE TYPE
         LW        R1,C.TSAD       GET TSA ADDR
         TRR       R6,R7           COPY ADDR
         CI        R5,2            SEE IF 7X
         BLT       %7X             BR IF 7X
         SRL       R6,13           CONVERT TO MAP NUMBER
         LW        R1,T.MIDLA,X1   GET MIDL ADDRESS
         BU        %MRG            MERGE CODE
%7X      SRL       R6,15           CONVERT TO MAP NUMBER
         ADI       R1,T.MIDL       GET MIDL ADDRESS
%MRG     SUMB      R6,C.MSD        SUBT OFF SIZE OF O/S
         SLL       R6,1            MAKE HW BIAS
         ADR       R6,R1           ADD OFFSET TO CORRECT DESR
         LH        R4,0H,X1        GET MAP DESCR
         CI        R5,2            SEE IF 7X
         BLT       %7Y             BR IF 7X
         SLL       R4,13           CONVERT TO ADDRESS
         ANMW      R7,=X'1FFF'     GET OFFSET IN MAP
         BU        %MRGE           MERGE CODE
%7Y      SLL       R4,15           CONVERT TO ADDRESS
         ANMW      R7,=X'7FFF'     GET OFFSET IN MAP
%MRGE    ADR       R7,R4           R7 NOW HAS REAL ADDRESS
         ANMW      R4,=X'FFFFFF'   LEAVE ONLY 24 BITS
         STW       R4,1W*%RD,X2    PUT IN CORRECT REG
         LF        R0,%REG         RESTORE USERS REGS
         BU        %RET            RETURN
         BOUND     1F
%REG     RES       1F              REG SAVE AREA
%RET     EQU       $
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO TXPM.LVI  (FOR IPU)
*
* PURPOSE: Allow SYSTEM modules to dispatch to tasks running in either
*          the MPX or T-XPM environments. This macro will typically
*          replace LPSD instructions when converting SYSTEM modules to
*          execute on behalf of T-XPM tasks.
*
*          This macro is for use by an operating SYSTEM module that
*          performs an LPSD to return to a previous context.  It is
*          not to be used at the task level.
*
*
* CALLING SEQUENCE:
*
*          TXPM.LVI  ADDRESS
*
* Where ADDRESS is the address of the user's PSD.
* R0-R7 must contain the user's registers.
*
* RETURN:
*
*        T-XPM TASK: Control is transferred to the T-XPM task.
*        MPX   TASK: Control is returned to the instruction after
*                    the macro call with the user's registers
*                    loaded.
*
************************************************************************
*
TXPM.LVI DEFM      ADDR
         STF       R0,%REGS        SAVE USER REGS
         T.TXPM                    TXPM TASK?
         BNS       %RETURN         JUST GET OUT, IF NOT
*
         IFF       C.3227,%GOT7X
         EXT       EXEC.FLAG      (2.X SYSTEMS)
IPU.GATE EQU       6
         SBM       IPU.GATE,EXEC.FLG    GATE THE IPU (2.X)
%GOT7X   ANOP
*
         IFT       C.3227,%NO7X
         SBM       C.ICSIPU,C.BIT  GATE THE IPU (3.X)
%NO7X    ANOP
         LA        R2,%REGS        GET ADDRESS OF REG SAVE AREA
         LD        R6,%ADDR        GET THE USER PSD
         BL        *C.XPMRET       DISPATCH IF T-XPM TASK
         IFF       C.3227,%GOT7X
         ZBM       IPU.GATE,EXEC.FLG  UNGATE THE IPU (2.X)
%GOT7X   ANOP
*
         IFT       C.3227,%NO7X
         ZBM       C.ICSIPU,C.BIT  UNGATE THE IPU (3.X)
%NO7X    ANOP
         BU        %RETURN         SKIP OVER REG SAVE AREA
*
%REGS    RES       1F              USER REGS
*
%RETURN  EQU       $
         LF        R0,%REGS        RESTORE USER'S REGISTERS
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO T.BIAS
*
* PURPOSE: Convert a tasks T-XPM address to a MPX address.  This macro
*          is used by SYSTEM modules that need to adjust an address
*          from the T-XPM environment to the MPX environment.
*
*          This macro is not for use at the Task level.
*
* CALLING SEQUENCE:
*
*          T.BIAS    R
*
* Where R is a register which contains the address to be converted.
*
* RETURN:
*
*        R2 is destroyed (R must not be equal to 2)
*        Register R contains the converted address.
*
************************************************************************
*
T.BIAS   DEFM      R
         LW        R2,C.CTXT       FIRST SEE IF TXPM IS PRESENT
         BEQ       %NO.BIAS        NOPE
         TRR       %R,%R           DO NOT BIAS 0
         BZ        %NO.BIAS
         T.DQECXT
         ADMW      %R,TSK.BIAS,X2  BIAS THE ADDRESS
%NO.BIAS EQU       $
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO M.FAST
*
* PURPOSE: Convert an interrupt to a fast TXPM interrupt.
*          This Macro is used during SYSGEN initialization to indicate
*          to TXPM that the interrupt is to be special cased.
*
* CALLING SEQUENCE:
*
*          M.FAST    R
*
* Where R is a register which contains the interrupt priority.
*
* RETURN:
*
*        R is destroyed (R must be an index register 1-3)
*
************************************************************************
*
M.FAST   DEFM      R
         SLL       %R,2            MAKE WORD OFFSET
         ADI       %R,X'80'*1W     OFFSET TO INTERRUPTS IN SPAD
         ADMW      %R,C.SPAD       SPAD BASE ADDRESS
         SBM       3,0W,%R         SET SPL INT FLAG FOR TXPM
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO X.BIAS
*
* PURPOSE: Convert a tasks T-XPM address to a MPX address.  This macro
*          is used by SYSTEM modules that need to adjust an address
*          from the T-XPM environment to the MPX environment.
*          This special Macro uses the cpix from the supplied
*          return PSD instead of C.CURR for DQE address.
*
*          This macro is not for use at the Task level.
*
* CALLING SEQUENCE:
*
*          X.BIAS    R,PSD
*
* Where R is a register which contains the address to be converted.
* Where PSD is the return PSD to use the CPIX from.
*
* RETURN:
*
*        R2 is destroyed (R must not be equal to 2)
*        Register R contains the converted address.
*
************************************************************************
*
X.BIAS   DEFM      R,PSD
         LW        R2,C.CTXT       First see if TXPM is present
         BEQ       %NO.BIAS        Nope
         TRR       %R,%R           Do not bias 0
         BEQ       %NO.BIAS
         LB        R2,C.MACH       Get machine type
         CI        R2,2            7X?
         BLT       %7X             Br if yes
         LA        R2,%PSD         Get address of return PSD
         LW        R2,1W,X2        Get CPIX from PSD
         ANMW      R2,=X'3FFC'     Just use CPIX
         SRL       R2,3            Concept CPIX shift
         BU        %MRG            Merge with 7X code
%7X      LA        R2,%PSD         Get address of return PSD
         LW        R2,1W,X2        Get CPIX from PSD
         ANMW      R2,=X'3FFC'     Extract CPIX
         SRL       R2,2            7X CPIX shift
%MRG     SLL       R2,2            Word adjust DQE number
         ADMW      R2,C.ADAT       DQE address table
         LW        R2,0W,X2        Get DQE address
         LW        R2,DQE.CXTA,X2  Get context address
         ADMW      %R,TSK.BIAS,X2  Bias the address
%NO.BIAS EQU       $               Done with biasing
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO T.RBIAS
*
* PURPOSE: To convert a MPX Environment address to a T-XPM Environment
*          address.
*
*          This macro is not for use at the Task level.
*
* CALLING SEQUENCE:
*
*          T.RBIAS   R
*
* Where R is a register that contains an address to rebias.
*
* RETURN:
*
*        R2 is destroyed (R must not be equal to R2)
*        Register R contains the rebiased address.
*
************************************************************************
*
T.RBIAS  DEFM      R
         LW        R2,C.CTXT       SEE IF TXPM IS PRESENT
         BZ        %NO.BIAS        NOPE
         TRR       %R,%R           DO NOT BIAS 0
         BZ        %NO.BIAS
         T.DQECXT
         SUMW      %R,TSK.BIAS,X2  REBIAS THE ADDRESS
%NO.BIAS EQU       $
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO T.FBIAS
*
* PURPOSE: Return the T-XPM Bias for the current task.  The T-XPM
*          Bias is the number of bytes of MPX that are mapped out
*          for the current task.
*
*          This macro is not for use at the Task level.
*
*
* CALLING SEQUENCE:
*
*          T.FBIAS   R
*
* Where R is the register to contain the bias upon return
*
* RETURN:
*
*        R2 is destroyed unless R=2
*        R contains the T-XPM Bias for the current task
*
************************************************************************
*
T.FBIAS  DEFM      R
         LW        R2,C.CTXT            SEE IF TXPM IS PRESENT
         BEQ       %NOTXPM              NOPE
         T.DQECXT
         LW        %R,TSK.BIAS,X2       JUST GET THE BIAS
%NOTXPM  EQU       $
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO T.DQECXT
*
* PURPOSE: Return the address of the DQE context area for the current
*          task.  Each task (whether a T-XPM task or not) has a 14 word
*          context area inside of H.TXPM.  The context area contains
*          information about the task which is important to H.TXPM
*          for removing MPX from the task address space.  The DQE
*          context area for a non T-XPM task is zero.  This macro is
*          a "support" macro in that it usually will not be invoked
*          directly by the user, but rather by other T-XPM macros,
*          such as T.TXPM, etc.
*
* CALLING SEQUENCE:
*
*        T.DQECXT
*
* RETURN:
*
*        R2 contains the address of the DQE context area.
*
************************************************************************
*
T.DQECXT DEFM
         IFF       C.3227,%327X
         LW        R2,=X'910000'   GET SPAD ADDRESS
         TSCR      R2,R2           READ IPU STATUS WD
%327X    ANOP
         IFT       C.3227,%3227
         RDSTS     R2              GET CPU STATUS WD
%3227    ANOP
         TBR       R2,27           ARE WE IN IPU
         BS        $+3W            BR IF WE ARE
         LW        R2,C.CURR       ADDRESS OF CURRENT TASK'S DQE
         BU        $+2W            SKIP IPU STUFF
         LW        R2,C.CIPU       DQE ADDRESS IF IN IPU
         LW        R2,DQE.CXTA,X2  CURRENT TASK'S CONTEXT ADDRESS
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO T.LPSDCM
*
* PURPOSE: Allow a T-XPM task to execute an LPSDCM instruction.
*          This macro is necessary in order to insure that the correct
*          maps are loaded since MPL entry 0 (for MPX) may be set up
*          for the MPX environment.  This macro should only be used
*          where the current T-XPM task wants to retain control of
*          the CPU. The main purpose of the macro is only to allow
*          the task to re-load its own maps.  This macro can not
*          be used to perform a context switch.
*
* CALLING SEQUENCE:
*
*        T.LPSDCM  PSD2,RETURN
*
* Where 'PSD2' remains for compatability with previous releases.
*       'RETURN'  is the address to which control shall be returned
*                 if the current task is not a T-XPM task.
*
* RETURN:
*
*        !!! FOR T-XPM TASKS !!!
*
*        Control is returned to the user at the next instruction
*        after the macro.  Upon return, the new maps are loaded.
*
*        !!! FOR MPX TASKS !!!
*
*        Control is returned to the address specified by 'RETURN',
*        without any change to the user's maps.
*
*        R2 IS DESTROYED UPON RETURN (CONTAINS TSA ADDRESS)
*
*        This macro is for use at the task level.
*
************************************************************************
*
T.LPSDCM DEFM      PSD2,RETURN
         LW        R2,C.TSAD       GET OUR TSA ADDRESS
         CAMW      R2,C.TSAD       TXPM TASK
         BEQ       %RETURN         IF EQUAL, NOT TXPM TASK
*                                  ELSE, MAPS NOW RELOADED BY TXPM
*                                  TAKING UNIMPLEMENTED INSTRUCTION
*                                  TRAP FOR TSA REFERENCE.
         SVC       1,3             TURN OFF TSA BIASING
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO TXPM.LVP
*
* PURPOSE: Allow system modules to dispatch to tasks running in
*          MPX or T-XPM environments.  This macro will usually be
*          inserted at the LPSD instruction where dispatch control is
*          returned to the user.
*
*          This macro is for use by a privileged 'MPX' task who is
*          set up to handle interrupts.
*
*          !!! THIS MACRO SHOULD NOT BE USED BY A T-XPM TASK !!!
*
* CALLING SEQUENCE:
*
*        TXPM.LVP  ADDRESS
*
* Where 'ADDRESS' is the address of the return PSD.
* R0-R7 must contain the user's registers.
*
* RETURN:
*
*        Interrupted task was --
*
*        T-XPM task: control is transfered to the T-XPM task.
*        MPX   task: control is returned to the instruction after
*                    the macro call with the user's registers
*                    loaded and interrupts blocked.
*
************************************************************************
*
TXPM.LVP DEFM      ADDR
         BEI
         STF       R0,%REGS        SAVE THE REGS UNTIL WE KNOW IF TXPM
*                                  IS PRESENT.
         T.TXPM
         BNS       %MPX            BRANCH IF MPX TASK
         LF        R0,%REGS        RESTORE USER'S REGISTERS
         STF       R0,*C.TASKR     PASS THE USER REGISTERS TO H.TXPM
         LD        R6,%ADDR        GET THE USER PSD
         BL        *C.RETURN       REDISPATCH IF T-XPM TASK
         BU        %MPX            SKIP OVER REG SAVE AREA
*
%REGS    RES       1F              USER REGS
%MPX     EQU       $
         LF        R0,%REGS        RESTORE USER'S REGISTERS
         ENDM
*
************************************************************************
*
* ASSEMBLE MACRO M.TXPM
*
* PURPOSE: Set equates needed for all other T-XPM macros
*
* CALLING SEQUENCE:
*
*        M.TXPM
*
* RETURN:
*
*        Equates set.
*
************************************************************************
*
M.TXPM   DEFM
*
*--------------------------------------------------------------------
*
*   H.TXPM Equates for internal structures and global values
*
         LIST      OFF
C.TXPM   EQU       X'C4'           T-XPM COPY OF C.TSAD
C.UBIAS  EQU       X'C8'           HAT ADDRESS OF H.UBIAS ROUTINE
C.TASKR  EQU       X'CC'           TXPM LOC FOR USER REGS
C.RETURN EQU       X'D0'           TXPM FAST INT DISP/RETURN
C.INTVA  EQU       X'D4'           CPU INT VECTOR TABLE ADDRESS
C.EVNT   EQU       X'D8'           POINTER TO EVNT.PTR
C.CTXT   EQU       X'DC'           POINTER TO DQE CONTEXT AREA
C.XPMRET EQU       X'E0'           ADDRESS OF S.TXPM.0 IN H.TXPM
C.TRPCA  EQU       X'E4'           ADDRESS OF TRAP CONTEXT AREA
*
DQE.CXTA EQU       X'60'           ADDRESS OF CONTEXT AREA IN DQE
DQE.PSDA EQU       X'64'           INT PSD ADDRESS IN DQE
*
*--------------------------------------------------------------------
*
*   TASK CONTEXT AREA EQUATES
*
TSK.NMAP EQU       0B              # OF OS MAPS TO INCLUDE
TSK.FLG1 EQU       1B              1ST FLAG BYTE
TSK.ATI  EQU       2B              CURRENT INTERRUPT LEVEL (WORD OFFST)
TSK.FLG2 EQU       3B              2ND FLAG BYTE
TSK.BIAS EQU       1W              BIAS DIFFERENCE BETWEEN MPX & TXPM
TSK.DBHT EQU       2W              'REAL' DEBUG HAT ADDRESS
TSK.NORM EQU       3W              NUMBER OF OVERRUN MAPS (BYTE 0)
TSK.LVLP EQU       3W              CURRENT LVL POINTER (BYTES 1-3)
TSK.LVL0 EQU       4W              INTERRUPT LEVEL 0 (NORMAL)
TSK.LVL1 EQU       5W              INTERRUPT LEVEL 1 (MESSAGE)
TSK.LVL2 EQU       6W              INTERRUPT LEVEL 2 (END ACT PRIOR 2)
TSK.LVL3 EQU       7W              INTERRUPT LEVEL 3 (BREAK)
TSK.LVL4 EQU       8W              INTERRUPT LEVEL 4 (DEBUG)
TSK.LINE EQU       9W              ADDRESS OF BLOCKING BUFFER WHICH
*                                  CONTAINS COPY OF T.LINEBUF
TSK.RPSD EQU       10W             RETURN PSD FOR USER
TSK.REGP EQU       12W             POINTER TO REG SAVE AREA FOR USER
TSK.RET  EQU       13W             RETURN ADDRESS FOR SVC PROCESSING
TSK.DQE  EQU       14W             DQE ADDRESS FOR THIS TASK       *E3*
TSK.SPR  EQU       15W             SPARE WORD IN CONTEXT AREA      *E3*
*
*--------------------------------------------------------------------
*
*   EQUATES FOR TSK.FLG1
*
USR.TSAB EQU       0               IF SET, TASK REFERENCING TSA    *E3*
TSK.TSAB EQU       1               IF SET, TSA IS REBIASED (FOR TXPM) *E
TSK.DBAT EQU       2               NOT USED                        *E3*
TSK.EACT EQU       3               NOT USED                        *E3*
STK.BIAS EQU       4               IF SET, AID STACK REBIASED (FOR TXPM)
TSK.AID  EQU       5               IF SET, TASK USES AID CALL STACK
TSK.FORC EQU       6               IF SET, TASK FORCED TO T-XPM
TSK.TXPM EQU       7               IF SET, TASK IS A T-XPM TASK
*
*--------------------------------------------------------------------
*
*   EQUATES FOR TSK.FLG2
*
TSK.CMD  EQU       0               IF SET, M.CMD SVC IN PROCESS
TSK.AUTO EQU       1               IF SET, AUTO OPEN REQUESTED
EXEC.SVC EQU       2               NOT USED                        *E3*
ORG.SVC2 EQU       3               NOT USED                        *E3*
DSP.TXPM EQU       4               IF SET, THIS IS A T-XPM DISPATCH
TSK.MORN EQU       5               IF SET, MAP OVERRUN OCCURRED
TSK.IPU  EQU       6               NOT USED                        *E3*
TSK.OMPX EQU       7               IF SET, ONLY RUN AS MPX TASK
*
DQE.LCXT EQU       16W             LENGTH OF CONTEXT STRUCTURE     *E3*
*
*--------------------------------------------------------------------
*
*  EQUATES FOR INTERRUPT LEVEL IN DQE CONTEXT AREA
*
SVC.TYPA EQU       0               TYPE 'A' SVC
SVC.AID  EQU       1               'AID' SVC
TSK.SVC  EQU       2               IF SET, CURRENTLY EXEC. SVC (1 OR 2)
TSK.SVC1 EQU       3               IF SET, SVC IS TYPE 1; ELSE TYPE 2
TSK.CNP  EQU       4               CNP SUPPLIED FOR CURRENT SVC
TSK.XXX  EQU       5               NOT USED                        *E3*
TSK.RTYP EQU       6               IF SET, RESOURCE TYPE NOT IDENTIFIED
TSK.ECP  EQU       7               NOT USED                        *E3*
*
TSK.LVL  EQU       0B              FIRST BYTE OF LEVEL INFO
TSK.IPUB EQU       1B              NOT USED
TSK.SVCT EQU       2B              SVC CALL # FOR SVC TYPES 1, 2 AND 15
DQE.RTYP EQU       3B              RESOURCE TYPE INDICATOR
*
*--------------------------------------------------------------------
*
*  EQUATES FOR TRAP INFORMATION BLOCK (OF WHICH THERE IS ONE FOR
*  EACH TRAP/INTERRUPT FOUND BY TXPM AT ENTRY POINT 8).
*
PSD.WRD2 EQU       0W              ORIGINAL NEW PSD WORD 2 FROM HANDLER
PSD.OMPX EQU       1W              ADDRESS OF MPX ICB IN HANDLER
PSD.OTMP EQU       2W              ADDRESS OF T-XPM ICB
ICXT.FLG EQU       3W              INTERRUPT CONTEXT FLAGS
RPL.INST EQU       4W              REPLACED INSTRUCTION
PSD.RET1 EQU       5W              BRANCH BACK TO INT/TRAP HANDLER
*
ICXT.SPL EQU       0               IF SET, THIS IS SPECIAL INT     *E3*
ICXT.CLD EQU       1               IF SET, NON CLASS F INTERRUPT
ICXT.CLF EQU       2               IF SET, CLASS F INTERRUPT
*
TRAP.LEN EQU       6W              LENGTH OF EACH TRAP BLOCK
ITC.LEN  EQU       10W             LENGTH OF INT/TRAP CXT CODE
TOT.LEN  EQU       TRAP.LEN+ITC.LEN  TOTAL LENGTH OF CXT FOR TRAP/INTS
*
*
*--------------------------------------------------------------------
*
*  EQUATES FOR 'EVENT.PTR'
*
EVNT.DSP EQU       0               IF SET, RECORD T-XPM DISPATCHS
EVNT.TSH EQU       1               IF SET, RECORD J.* & OPCOM      *E3*
EVNT.TRP EQU       2               IF SET, RECORD TRAPS
EVNT.INT EQU       3               IF SET, RECORD INTERRUPTS
NO.TXPM  EQU       4               IF SET, DISABLE TXPM OPERATION
NO.AE    EQU       5               IF SET, DISABLE A.E. TRAPS      *E3*
TXPM.ACC EQU       6               IF SET, TURN ON ACCELERATOR
MPX.ONLY EQU       7               IF SET, DO NOT FORCE TXPM TASKS
*
*--------------------------------------------------------------------
*
*  EQUATES USED IN FCB.SPST BYTE IN FCB                            *E3*
*                                                                  *E3*
FCB.ECP  EQU       4               IF SET, XEQ CHAN PROG IN EFFECT *E3*
FCB.FBIT EQU       5               IF SET, 'F' BIT IN USE          *E3*
FCB.EA   EQU       6               IF SET, TCW ADDRESS IN EXT MEM  *E3*
FCB.BSED EQU       7               IF SET, FCB BIAS FOR THIS SVC   *E3*
*
         LIST      ON
         ENDM
*
         LIST      ON
