CFE      SET       0
CPV      SET       1
CHECKOUT SET      0
         TITLE    '*****MASTER OPERATIONS MONITOR (M O M)*****'
*************************************************************
*************************************************************
*
*        M - MASTER
*        O - OPERATIONS
*        M - MONITOR
*
*        *MOM* KEEPS A WATCHFUL EYE OVER THE OPERATION
*        OF A CP-V SYSTEM.
*        IT IS DESIGNED FOR USE ON CRT VIDEO DISPLAYS
*        WITH CURSOR ADDRESSING CAPABILITIES.
*        *MOM* WATCHES OPERATION OF BATCH PARTITIONS,
*        SYSTEM LIMITS, RBTS (IF PRESENT), TAPE DRIVES,
*        DISK SPINDLES, TIME-SHARING LINES, PUBLIC FILE
*        AND SYMBIONT DISK SPACE, BATCH QUEUE, ETMF, AND
*        ON-LINE RESPONSE TIME.
*        NOTE**********
*        THE USER MUST SUPPLY CURSOR ROUTINES FOR HIS
*        TERMINAL WITH DEFED NAMES: ERASE, HOMECURS (TO
*        HOME CURSOR TO UPPER LEFT), MCURS (TO MOVE CURSOR
*        FROM PRESENT LOCATION TO THAT CONTAINED IN
*        R2-X COORD & R3-Y COORD, WITH UPPER LEFT BEING
*        COORDINATE (0,0).
*        CURSOR ROUTINES ARE PROVIDED FOR DATAPOINT 3000
*        AND HAZELTINE 2000 TERMINALS.
*
*        SEE COMMENTS IMMEDIATELY BELOW FOR SPECIAL
*        INSTRUCTIONS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*
*************************************************************
*        MODIFIED 6/76 BY D. LAMPSON  SEATTLE,WA.
*************************************************************
         PAGE
         SYSTEM   SIG7
         SYSTEM   BPM
         SYSTEM   UTS
         REF      M:UC
         REF      ERASE,HOMECURS,MCURS
*****
RBTS     SET      0                 DO
DEVICE   SET      0                    NOT
PRIV     EQU      1                        DISTURB!!!!!!!!!!!!
*************************************************************
*        THE FOLLOWING VALUES MUST BE SET ACCORDING TO
*        INSTALLATION HARDWARE CONFIGURATION
*************************************************************
*
*        THE TOTAL NUMBER OF TAPES + PACKS TO BE DISPLAYED
*        MAY NOT EXCEED 12. 'TAPES' AND/OR 'PACKS' MAY BE
*        BE SET TO ZERO (0) IF NONE ARE TO BE DISPLAYED.
*
*        THE TOTAL NUMBER OF RBTS MAY NOT EXCEED 4.
*        'RBTS' MAY BE SET TO ZERO (0) IF NONE ARE TO BE
*        DISPLAYED.
*
*        THE MAXIMUM NUMBER OF PARTITIONS IS 16.
*        '#PARTS' MAY NOT BE SET TO ZERO (0).
*
*        THE MAXIMUM NUMBER OF TIME-SHARING LINES IS 32.
*        '#LINES' MAY NOT BE SET TO ZERO (0).
*
*************************************************************
*
*        THE FOLLOWING IS AN EXAMPLE CONFIGURATION SHOWING
*        2 9T TAPE DRIVES, 1 7T TAPE DRIVE, 9 DISK PACKS,
*        6 OF WHICH ARE PRIVATE, 4 REMOTE BATCH TERMINALS,
*        16 PARTITIONS, AND 24 LINES.
*************************************************************
*TAPES   SET      '9TA80','9TA81','7TCE0'
*PACKS   SET      'DPAE0',;
*                 ('DPAE1',PRIV),('DPAE2',PRIV),('DPAE3',PRIV),;
*                 'DPAF0','DPAF1',;
*                 ('DPAF2',PRIV),('DPAF3',PRIV),('DPAF4',PRIV)
*RBTS    SET      'RBA08','RBA0A','RBA0C','RBA0E'
*#PARTS  SET      16
*#LINES  SET      24
*************************************************************
*
*        INSERT INSTALLATION PARAMETERS HERE AS UPDATES
*
TAPES    SET      '9TA80','9TA81'
PACKS    SET      'DPAC0','DPAC1','DPAC2','DPAC3','DPAC4',;
                  'DPAC5','DPAC6','DPAC7','DPAC3','DPAC8'
RBTS     SET      'RBA06','RBB06'
#PARTS   SET      16
#LINES   SET      72
         PAGE
************************************************************
*        COMPUTE NUMBER OF TAPES, PACKS, AND RBTS
*        AND CHECK FOR EXCEEDING MAXIMUMS.
*        ALSO CHECK MAXIMUMS FOR PARTITIONS AND LINES.
*        ABORT ASSEMBLY IF ANY MXIMUMS ARE EXCEEDED.
************************************************************
#TAPES   SET      NUM(TAPES)-1*(TAPES(1)=0)
#PACKS   SET      NUM(PACKS)-1*(PACKS(1)=0)
#RBTS    SET      NUM(RBTS)-1*(RBTS(1)=0)
         ERROR,15,#TAPES+#PACKS>12 ;
                  'TOTAL # TAPES + PACKS CANNOT EXCEED 12'
         GOTO,#TAPES+#PACKS>12 ABORT
         ERROR,15,#RBTS>4 ;
                  'TOTAL # RBTS CANNOT EXCEED 4'
         GOTO,#RBTS>4 ABORT
         ERROR,15,#PARTS>16 ;
                  '# PARTITIONS CANNOT EXCEED 16'
         GOTO,#PARTS>16 ABORT
*****
*        BUILD DEVICE ADDRESS TABLE FOR USE IN PRINTING
*        THE SKELETON DISPLAY.  TAPES WILL APPEAR FIRST
*        FOLLOWED BY PACKS.  ALSO APPEND THE STRING
*        '-PUBLIC-' TO PUBLIC PACKS AS THEY ARE NOT
*        MONITORED, BUT ONLY NOTED AS SUCH IN THE DISPLAY.
*****
#DEV     SET      #TAPES+#PACKS     TOTAL # DEVICES
N        DO       #TAPES
DEVICE(N) SET     TAPES(N)
         FIN
M        DO       #PACKS
DEVICE(M+N) SET   PACKS(M)
         DO       NUM(PACKS(M))=1
DEVICE(M+N) SET '             '
         ELSE
         FIN
         FIN
*****
*        TEXT TABLES OF AVR ITEMS AND RBTS FOR RUN-TIME
*        SEARCH OF INSTALLATION DCT TABLE
*****
         BOUND    8
AVRDEV   EQU      %
N        DO       #DEV
         DO       N<=#TAPES
Q        SET      S:UT(TAPES(N))
         GEN,8,16,8 X'05',X'4040',Q(1)
         TEXT     Q(2),Q(3),Q(4),Q(5)
         ELSE
         DO       NUM(PACKS(N-#TAPES))=2
Q        SET      S:UT(PACKS(N-#TAPES))
         GEN,8,16,8 X'05',X'4040',Q(1)
         TEXT     Q(2),Q(3),Q(4),Q(5)
         FIN
         FIN
         FIN
#AVR     EQU      (%-AVRDEV)/2
*****
RBTDEV   EQU      %
N        DO       #RBTS
Q        SET      S:UT(RBTS(N))
         GEN,8,8,8,8 X'15',X'5C',X'40',Q(1)
         TEXT     Q(2),Q(3),Q(4),Q(5)
         FIN
         PAGE
************************************************************
*        PROCEDURES AND THINGS
************************************************************
PTABLE   SET      0                 SUPPRESS EXPANSION OF CONTAB
PTEXT    SET      0                 SUPPRESS PRINT OF TXT OR TXTC
*****
*        SAVE RETURN ADDRESS IN AF(1)
*****
SAVE     COM,8,4,20 X'35',15,AF(1)
*****
*        STANDARD LOAD SELECTIVE AFTER FIRST CLEARING
*        REGISTER R
*****
LSS      CNAME
         PROC
LF       LI,CF(2) 0
         LS,CF(2) AF(1),AF(2)
         PEND
*****
*        GENERATE PARAMETER CONTROL WORDS
*        SEE DISCUSSION AT 'CONTAB'
*****
:CWORD   CNAME    2
:CHALF   CNAME    1
:CBYTE   CNAME    0
:CNOBIAS CNAME    3
         PROC
         DO1      PTABLE=0
         DISP     %
         LIST     PTABLE
LF       DATA     AF(1)
         DATA     AF(2)+(((NAME-3)<0)*(BIAS**(2-NAME)))
         GEN,8,8,4,4,4,4 AF(3),AF(4),AF(5),AF(6),0,AF(8)
         GEN,32          AF(7)
         LIST     1
         PEND
*****
*        STANDARD TEXT & TEXTC DIRECTIVES MODIFIED AS
*        FOLLOWS:
*        IF ANY ARGUMENT IS A 2 ELEMENT LIST, ELEMENT 1
*        IS GENERATED IN THE TEXT STRING IF AND ONLY IF
*        ELEMENT 2 IS A TRUE EXPRESSION.
*        ALSO, TEXT EXPANSION IS NOT PRINTED IF PTEXT=0
*****
TXTC     CNAME    0
TXT      CNAME    1
         PROC
         DO1      PTEXT=0
         DISP     %
         LIST     PTEXT
TARGS    SET      AF
M        SET      1
N        DO       NUM(TARGS)
         DO       (NUM(TARGS(N))=1)|TARGS(N,2)
STR(M)   SET      TARGS(N,1)
M        SET      M+1
         FIN
         FIN
         DO       NAME
LF       TEXT     STR
         ELSE
LF       TEXTC    STR
         FIN
TARGS    SET      0
STR      SET      0
         LIST     1
         PEND
ENTER    CNAME
         PROC
         LCI      6
         PSM,0    STACK
         PSW,LINK STACK
         PEND
RETURN   CNAME    1
RETURNTO CNAME    2
         PROC
LF(1)    PLW,LINK STACK
         LCI      6
         PLM,0    STACK
         DO       NAME=1
         B        *LINK
         ELSE
         B        AF(1)
         FIN
         PEND
         SPACE    6
         PAGE
*        REFERENCES FOR MONITORED PARAMETERS
*        ALL REF'S MUST ALSO APPEAR AS PROC REFERENCES TO
*        REFF SO THEY CAN BE MAPPED INTO MY VIRTUAL SPACE
*        VIA M:CVM
*****
         DO        CPV
         REF       PLB:MIN,PLB:MAX,PLH:TL,PLH:TU,PLD:ACT,PLB:USR
         REF       S:BUAIS,S:BUIS,S:OUAIS,S:OUIS,S:GUAIS
         ELSE
         REF      PL:MIN,PL:MAX,PLH:TL,PLH:TU,PLD:ACT,PLB:USR
         REF      S:BUAIS,S:BUIS,SL:C,S:OUAIS,S:OUIS,S:GUAIS
         FIN
         REF      S:GUIS,GRANRAD,GRANPACK,GRANSYM,AVRTBL
         REF      M:FREE#GRAN
         REF      UB:ASP,UB:APR,P:NAME
         REF      AVRID,LB:UN,GRANCYL
         REF      PLH:SID,PLH:TOL
         REF      DCTSIZ,BATAPE
         REF      S:BFIS,AVRNOU
         REF      DCT16
         REF       PLH:FLG
         DO        CPV
         REF       SH:RBSUM,SH:RBCU
         REF       SV:RSIZ
         SREF      RBB:HOU,RBB:HIN,STB:LNK
         SREF      LOFBIT,DISCBIT,SSSBIT,FRBIT,LIPBIT
         SREF      ACTBIT,DCBIT,HASPBIT,ALBIT
         SREF      SSIG
         FIN
         SREF     RBD:WSN,RB:FLAG,SNDDX,RBB:ID
         SREF     SYMX
         REF      M:LO,M:LL         ** M:LL TEMP FOR AP **
         REF      SMUIS,NEWQ
         REF      UB:SWAPI,MB:GPT,UH:JIT,MB:GAM5,;
                  MB:SDI,J:ACCN,J:JIT,J:UNAME
         REF      UH:FLG,UX:JIT
         REF      UB:US
         REF      JB:PNR,J:MRT,J:UTIME,J:PTIME
         DO       CPV
         SREF     UB:C#
         REF      S:DP
         REF      DCT22
         REF      NSPC
         REF      UH:AJIT
         REF,1    JB:MAX,JB:CUR
         ELSE
         REF,1    JB:C9T,JB:M9T,JB:CSP,JB:MSP
         FIN
         REF      UB:PCT,JB:VLH,DCACCESS,DPACCESS,TPACCESS
         REF      SB:GJOBUN,S:GJOBTBL,MAXG
         REF      MXFPL
         REF      PB:PSZ,PB:DSZ,PB:DCBSZ,PX:HPP,PNAMEND
         REF      SUSP
         REF      S:FPPC
         SPACE    5
         DO1       CFE
         REF       NUMENTRY
R0       EQU       0
R1       EQU       1
R2       EQU       2
R3       EQU       3
R4       EQU       4
R5       EQU       5
R6       EQU       6
R7       EQU       7
R8       EQU       8
R9       EQU       9
R10      EQU       10
R11      EQU       11
R12      EQU       12
R13      EQU       13
R14      EQU       14
R15      EQU       15
*****
*        ASSEMBLY FLAGS FOR PARAMETER TABLE
*****
HEX      EQU      1                 HEX FIELD
DEC      EQU      2                 DEC FIELD
DECL     EQU       3                   LEFT DEC FIELD
DECR     EQU       4                   RIGHT DEC FIELD
TEXT     EQU      0                 TEXT FIELD
BL0      EQU      0                 BLANK LEADING ZERO
KL0      EQU      1                 KEEP LEADING ZERO
K10      EQU      2                 KEEP 1 ZERO
BEQ0     EQU      3                BLANK IF ZERO
NORM0    EQU      0                 BYTE TABLE
NORM1    EQU      1                 HALFWORD TABLE
NORM2    EQU      2                 WORD TABLE
SPEC0    EQU      3                 SPECIAL TABLE
SPEC1    EQU      5                 DEVICE/UID RESOLUTION
SPEC2    EQU      4                 TOTAL JOBS RESOLUTION
SPEC3    EQU      6                 ETMF CALCULATION
SPEC4    EQU      7                 FREE SPINDLE CALC
SPEC5    EQU      8                 90% RESPONSE TIME CALC
SPEC6    EQU      9                 RBT STATUS CALCULATION
SPEC7    EQU      10                RBT WSN CHECK
SPEC8    EQU       11
SPEC9    EQU       12
SPEC10   EQU       13
SPEC11   EQU      14
SPEC12   EQU      15
SPEC13   EQU      16                CORE SIZE
SPEC14   EQU      17                IN/OUT CORE
SPEC15   EQU      18                PROCESSOR NAME
*****
TICS%PER%SEC EQU  500
TICS%PER%MIN EQU  30000
BTD      EQU      0
Z        EQU      0
X1       EQU      1
USR      EQU      2
CNT      EQU      3
X4       EQU      4
X5       EQU      5
X6       EQU      6
X7       EQU      7
BUF      EQU      8
SIZE     EQU      9
LINK     EQU      11
DA0      EQU      12
DA1      EQU      13
DA2      EQU      14
DA3      EQU      15
BIAS     EQU      X'E000'           VIRTUAL SPACE BIAS VALUE
SEC      DATA     0
MIN      DATA     0
ACCT     DATA     0
         DATA     0
CORE     DATA     0
IN%OUT   DATA     0
PNAME    DATA     0
         CSECT    0
NEWQARG  EQU      %
         DATA     X'E00A00'
         DATA     BA(PAGE)
         DATA     X'800'
SEEK     DATA     0
EA       DATA     0
EAI      DATA     0
DISPFLG  DATA     0                 SWITCH FOR DISPLAY SELECTION
BA%CORE  DATA     0
ON%CORE  DATA     0
SWAP%CORE DATA    0
CPV%CORE DATA     0
SHR%CORE  DATA     0
SWP%CORE DATA     0
TOT%CORE DATA     0
#BATCH   DATA     0
#ONLINE  DATA     0
#TOT     DATA     0
ZERO     DATA     0
         SPACE    5
VIR%PAGE EQU      %
         DATA     0
TIME     DATA     0
LINE%PTR DATA     0
LINE     RES      30
TEN      DATA     10
         BOUND    8
ACCUM%SAVE DATA   X'40404040',X'40404040'
ACCUM    DATA     0,0,0
         BOUND    8
STACK    EQU      %               BIG STACK FOR FUTURE
         DATA     %+1              EXPANSION
         DATA     X'320000'
         RES      X'32'
         SPACE    5
         BOUND    8
PAGE     RES      512             BUFFER TO HOLD JITS
         DO       CHECKOUT=0
PD       SET      PAGE-J:JIT      USE YOUR OWN JIT
         ELSE                      FOR CHECKOUT OF
PD       SET      0                 FORMAT ROUTINES
         FIN
         PAGE
*        DATA AREA FOR STATUS MONITOR
*****
         DEF      MOMDAT
MOMDAT   CSECT    0
************************************************************
*        SYSTEM PARAMETER TABLE (3 WORDS PER ENTRY)
*        EACH ENTRY CONTAINS THE ADDR OF SYSTEM PARAMETER
*        TO BE MONITORED, THE LAST KNOWN VALUE OF THE
*        PARAMETER, AND FLAGS INDICATING THE TYPE VALUE,
*        CURSOR POSITIONS, ETC.
*****
*        ALL MONITOR REF'S HAVE TO BE MAPPED TO MOM'S
*        VIRTUAL SPACE SO THEY CAN BE ACCESSED WITHOUT
*        AN M:SYS CAL.  THIS REQUIRES THE USE OF AN M:CVM
*        CAL, MAPPING MONITOR PAGES TO AN UNUSEDD VIRTUAL
*        ADDRESS.  THE VIRTUAL ADDRESS IS SPECIFIED BY
*        EQUATING THE SYMBOL 'BIAS' TO AN ADDRESS LARGE
*        ENOUGH TO BE ABOVE *MOM*.  :CWORD,:CHALF,:CBYTE,
*        AND :CNOBIAS APPLY 'BIAS', BIAS**1, BIAS**2,
*        AND NO BIAS RESPECTIVELY TO HANDLE WORD, HALFWORD,
*        BYTE ADDRESSING(INDEXING) OR NO BIASING AS
*        REQUIRED.
*****
*        AF(1)=INITIAL PARAMETER VALUE(WORD 0)
*        AF(2)=PARAMETER ADDRESS(WA,HA,BA, ETC) (WORD 1)
*        AF(3)=HORIZ CURSOR POSITION(BYTE 0, WORD 2)
*        AF(4)=VERT CURSOR POSITION(BYTE 1, WORD 2)
*        AF(5)=DATA TYPE(DEC,ETC) (NIBBLE 0, BYTE 2, WORD 2)
*        AF(6)=ZERO SUPPRESSION (NIBBLE 1, BYTE 2, WORD 2)
*        AF(7)=PARAM HANDLER (NIBBLE 0, BYTE 3, WORD 2)
*        AF(8)=#OUTPUT CHAR  (NIBBLE 1, BYTE 3, WORD 2)
************************************************************
         DEF      CONTAB
CONTAB   EQU      %
*        PARTITION CONTROL WORDS
         DO1       CPV
N:RSIZ   SET       0
N        DO       #PARTS
         :CNOBIAS -1,MIN,13,3+N-1,DEC,BL0,SPEC8,3
         :CNOBIAS -1,SEC,17,3+N-1,DEC,BEQ0,SPEC9,2
         :CNOBIAS -1,CORE,4,3+N-1,DEC,BL0,SPEC13,2
         :CNOBIAS -1,PNAME,9,3+N-1,TEXT,BL0,SPEC15,4
         :CNOBIAS -1,IN%OUT,11,3+N-1,TEXT,BL0,SPEC14,2
         :CWORD    0,PLD:ACT+2*N,22,3+N-1,TEXT,BL0,SPEC10,4
         :CWORD    0,PLD:ACT+2*N+1,26,3+N-1,TEXT,KL0,SPEC10,4
         :CHALF      0,HA(PLH:SID)+N,30,3+N-1,HEX,BL0,NORM1,4
         FIN
*        USER CONTROL WORDS
         :CWORD   -1,S:BUAIS,44,3,DEC,K10,NORM2,2
         :CWORD   -1,S:OUAIS,48,3,DEC,K10,NORM2,2
         :CWORD   -1,S:BUIS,44,4,DEC,K10,NORM2,2
         :CWORD   -1,S:OUIS,48,4,DEC,K10,NORM2,2
         DO        CPV
         :CHALF    -1,HA(SH:RBSUM)+1,44,5,DEC,K10,NORM1,3
         :CHALF    -1,HA(SH:RBCU)+1,44,6,DEC,K10,NORM1,3
         ELSE
         :CWORD   -1,SL:C+2,44,5,DEC,K10,NORM2,3
         :CWORD   -1,SL:C+1,44,6,DEC,K10,NORM2,3
         FIN
*****
*        RBT ENTRIES
*****
RBTITEMS EQU      %
N        DO       #RBTS
         :CWORD   -1,RBD:WSN,61,10+N,TEXT,KL0,SPEC7,4
         :CWORD   -1,RBD:WSN+1,65,10+N,TEXT,KL0,SPEC7,4
         :CNOBIAS -1,0,70,10+N,TEXT,KL0,SPEC6,4
         FIN
*        VOLUME CONTROL WORDS
AVRITEMS EQU      %
N        DO       #TAPES
         :CHALF   0,HA(AVRID),61,2+N,HEX,BL0,SPEC1,4
         :CWORD   0,AVRTBL,66,2+N,TEXT,BL0,NORM2,4
AVREXIT  FIN
*        DISKSPACE CONTROL WORDS
         :CWORD    -1,GRANRAD,8,20,DECL,BL0,NORM2,4
         :CWORD    -1,GRANRAD,12,20,DECR,K10,NORM2,4
         :CWORD    -1,GRANPACK,26,20,DECL,BL0,NORM2,4
         :CWORD    -1,GRANPACK,30,20,DECR,K10,NORM2,4
         :CWORD    -1,GRANSYM,8,21,DECL,BL0,NORM2,4
         :CWORD    -1,GRANSYM,12,21,DECR,K10,NORM2,4
         :CWORD   -1,GRANCYL,26,21,DECL,BL0,NORM2,4
         :CWORD   -1,GRANCYL,30,21,DECR,BL0,NORM2,4
LAB1A    :CWORD   -1,M:FREE#GRAN,42,20,DECL,BL0,NORM2,4
LAB1B    :CWORD   -1,M:FREE#GRAN,46,20,DECR,BL0,NORM2,4
*        BATCH JOBS & DATE CONTROL WORDS
         :CNOBIAS -1,CPV%CORE,44,11,DEC,K10,NORM2,2
         :CNOBIAS -1,BA%CORE,44,14,DEC,K10,NORM2,2
         :CNOBIAS -1,ON%CORE,44,15,DEC,K10,NORM2,2
         :CNOBIAS -1,SHR%CORE,44,12,DEC,K10,NORM2,2
         :CNOBIAS -1,SWP%CORE,44,13,DEC,K10,NORM2,2
         :CNOBIAS -1,TOT%CORE,44,17,DEC,K10,NORM2,3
         :CNOBIAS -1,#BATCH,47,14,DEC,K10,NORM2,2
         :CNOBIAS -1,#ONLINE,47,15,DEC,K10,NORM2,2
         :CNOBIAS -1,#TOT,47,17,DEC,K10,NORM2,2
N        DO       4
         :CNOBIAS -1,DATE+N-1,4*N,24,TEXT,KL0,NORM2,4
         FIN
         :CWORD   -1,S:BFIS,36,23,DEC,K10,NORM2,4
         :CNOBIAS -1,0,36,24,DEC,BL0,SPEC2,4
         DO        CFE
*        CFE CONTROL WORD
         :CWORD    -1,NUMENTRY,52,23,DEC,K10,NORM2,4
         ELSE
*        ETMF CONTROL WORD
         :CNOBIAS -1,0,52,23,DEC,K10,SPEC3,4
         FIN
*        RESPONSE TIME CONTROL WORD
         :CNOBIAS -1,0,52,24,DEC,K10,SPEC5,4
CONTABSZ EQU      %-CONTAB          CONTROL TABLE SIZE
*
*        CONTAB ENTRIES FOR ONLINE DISPLAY FOLLOW
*        THESE ARE TREATED AS EXTENSION OF CONTAB
*
CONTABO  EQU      %-CONTAB
        :CWORD   -1,S:OUIS,28,0,DEC,K10,NORM2,2
I        DO       #LINES
BH       SET      (I-1)/24
BV       SET      (I-1)-BH*24
         :CWORD   -1,ACCT,BH*25+6,BV+2,TEXT,BL0,SPEC11,4
         :CWORD   -1,ACCT+1,BH*25+10,BV+2,TEXT,BL0,SPEC12,4
         :CWORD   -1,PNAME,BH*25+15,BV+2,TEXT,BL0,SPEC15,4
         :CWORD   -1,CORE,BH*25+22,BV+2,DEC,BL0,SPEC13,2
         :CWORD   -1,IN%OUT,BH*25+20,BV+2,TEXT,BL0,SPEC14,2
         FIN
CONTABOSZ EQU     %-CONTAB
STEVE1    DATA    CONTABOSZ
         DEF       PATCH
PATCH    RES       50
         PAGE
*        MISCELLANEOUS DATA AREAS FOR STATUS MONITOR
*****
DATE     RES      4                 DATE AREA FOR M:TIME
ANYHOW   DATA     0                 UNCONDITIONAL REPLACE FLAG
RULOOP   RES      1                 RETURN SAVE FOR ULOOP
RCONV    RES      1                   ''    ''   '' CONVERT ROUTINES
RDISPLAY RES      1                 DISPLAY RETURN SAVE
CHARBUF  DATA     X'40404040'       CHARACTER OUTPUT BUFFER
BYTD     RES      1                 BYTE DISPLACEMENT
BSIZE    RES      1                 BUFFER SIZE
PART#    RES       1                    PART COUNT AND CONTROL
LINE#    DATA     0
LOCKED   EQU       %
         TEXT      '*LOC'
         TEXT      'KED*'
SIGNIF   DATA      0                   LEFT-RIGHT CONV FLAG
         PAGE
*        PROCEDURE AREA FOR STATUS MONITOR
*****
         DEF      MOMPROC
MOMPROC  CSECT    1
*        LOAD SELECTIVE MASKS
HORMSK   DATA     X'FF000000'       HORIZ CURSOR POSITION
VERMSK   DATA     X'00FF0000'       VERTICAL CURSOR POSITION
CVTMSK   DATA     X'0000F000'       DATA CONVERSION
ZERMSK   DATA     X'00000F00'       ZERO PRESERVE
LENMSK   DATA     X'000000FF'       SYSTEM PARAMETER LENGTH
CHRMSK   DATA     X'0000000F'       OUTPUT BUFFER LENGTH
*        DECIMAL CONVERSION TABLE
BI2DEC   DATA     0,0,0,0,8000,4000,2000,1000
         DATA     0,0,0,0,800,400,200,100
         DATA     0,0,0,0,80,40,20,10
         DATA     0,0,0,0,8,4,2,1
*        TBS TABLE TO GUARANTEE PRINTABLE CHARACTERS
TBSW     DATA     X'04000034'       TBS CONTROL WORD
TTAB     EQU      %
         DO1      19
         DATA     X'40404040'
         TEXT     '<   '
         DO1       3
         DATA     X'40404040'
         DATA      X'5C404040'
         DO1       2
         DATA      X'40404040'
         TEXT     '  ^,  >?'
         DATA     X'40404040',X'40404040'
         TEXT     '  :  ''  '
         DO1      16
         DATA     X'40404040'
         TEXT     ' ABCDEFGHI  '
         DATA     X'40404040'
         TEXT     ' JKLMNOPQR  '
         DATA     X'40404040'
         TEXT     '  STUVWXYZ  '
         DATA     X'40404040'
         TEXT     '0123456789  '
         DATA     X'40404040'
*        HEX CONVERSION TABLE
HEXTAB   TXT      '0123456789ABCDEF'
         PAGE
*        TEXT STRINGS FOR SKELETON DISPLAY
*        GENERATED BY TXTC PROC TO REFLECT USER
*        SPECIFIED HARDWARE CONFIGURATION
*****
NOPART   SET       '                                !'
FIXTEXT  EQU      %                 SCREEN FORMAT
         TXTC     '        PARTITION USAGE         !',;
                  ' SYSTEM          ! ',;
                  '     VOLUMES   '
         TXTC     'PA  K PROC   TIME   ACCT    ID  !',;
                  ' USAGE   BAT ONL ! ',;
                  ' DEV   ID  SER#'
         TXTC     '-- -- ----  ------ ------  ---- !',;
                  ' ------- --- --- ! ',;
                  '----- ---- ----'
         TXTC     (' 1      -      :                !',#PARTS>0),;
                  (NOPART,#PARTS<1),;
                  ' MAX#USR         ! ',;
                  (DEVICE(1),#DEV>0)
         TXTC     (' 2      -      :                !',#PARTS>1),;
                  (NOPART,#PARTS<2),;
                  ' CUR#USR         ! ',;
                  (DEVICE(2),#DEV>1)
         TXTC     (' 3      -      :                !',#PARTS>2),;
                  (NOPART,#PARTS<3),;
                  ' MAX COR      XX ! ',;
                  (DEVICE(3),#DEV>2)
         TXTC     (' 4      -      :                !',#PARTS>3),;
                  (NOPART,#PARTS<4),;
                  ' CUR COR      XX ! ',;
                  (DEVICE(4),#DEV>3)
         TXTC     (' 5      -      :                !',#PARTS>4),;
                  (NOPART,#PARTS<5),;
                  '-----------------!'
         TXTC     (' 6      -      :                !',#PARTS>5),;
                  (NOPART,#PARTS<6),;
                  '   IN-CORE       !'
         TXTC     (' 7      -      :                !',#PARTS>6),;
                  (NOPART,#PARTS<7),;
                  '   USE   SIZE  # !'
         TXTC     (' 8      -      :                !',#PARTS>7),;
                  (NOPART,#PARTS<8),;
                  '-----------------!-----',;
                  '---------------'
         TXTC     (' 9      -      :                !',#PARTS>8),;
                  (NOPART,#PARTS<9),;
                  ' CP-V     XX     !',;
                  (RBTS(1),#RBTS>0)
         TXTC     ('10      -      :                !',#PARTS>9),;
                  (NOPART,#PARTS<10),;
                  ' SHARED   XX     !',;
                  (RBTS(2),#RBTS>1)
         TXTC     ('11      -      :                !',#PARTS>10),;
                  (NOPART,#PARTS<11),;
                  ' SWAPPING XX     !',;
                  (RBTS(3),#RBTS>2)
         TXTC     ('12      -      :                !',#PARTS>11),;
                  (NOPART,#PARTS<12),;
                  ' BATCH    XX     !'
         TXTC     ('13      -      :                !',#PARTS>12),;
                  (NOPART,#PARTS<13),;
                  ' ONLINE   XX     !'
         TXTC     ('14      -      :                !',#PARTS>13),;
                  (NOPART,#PARTS<14),;
                  '          --   - !',;
                  '--------------------'
         TXTC     ('15      -      :                !',#PARTS>14),;
                  (NOPART,#PARTS<15),;
                  ' TOTAL           !'
         TXTC     ('16      -      :                !',#PARTS>15),;
                  (NOPART,#PARTS<16)
         TXTC     '---------------------------------',;
                  '-------------------------------------'
         TXTC      ' RAD=           GRAN=             SWAP='
         TXTC      'SYMB=            CYL=            '
         TXTC     '---------------------------------',;
                  '-------------------------------------'
         DO        CFE
         TXTC     'MASTER OPS MONITOR ! BATCH QUEUE=',;
                  '     ! CFE Q   =     !',;
                  ' '
         ELSE
         TXTC     'MASTER OPS MONITOR ! BATCH QUEUE=',;
                  '     ! ETMF    =     !',;
                  ' '
         FIN
         TXTC     '                   ! JOBS RUN   =',;
                  '     ! RESPONSE=     ! ',;
                  '              ',' '   LAST ENTRY IS SYNC(X'16')
FIXTXT2  EQU      %
         TXTC     '                           ',;
                  'XX CURRENT USERS           ',;
                  '                    '
         TXTC    '-------------------------------------',;
                  '-------------------------------'
         TXTC     ' 0-N/A                   ',;
                  '24-N/A                   ',;
                  '48-N/A              '
         TXTC     ' 1-N/A                   ',;
                  '25-N/A                   ',;
                  '49-N/A              '
         TXTC     ' 2-N/A                   ',;
                  '26-N/A                   ',;
                  '50-N/A              '
         TXTC     ' 3 N/A                   ',;
                  '27-N/A                   ',;
                  '51-N/A              '
         TXTC     ' 4-N/A                   ',;
                  '28-N/A                   ',;
                  '52-N/A              '
         TXTC     ' 5-N/A                   ',;
                  '29-N/A                   ',;
                  '53-N/A              '
         TXTC     ' 6-N/A                   ',;
                  '30-N/A                   ',;
                  '54-N/A              '
         TXTC     ' 7-N/A                   ',;
                  '31-N/A                   ',;
                  '55-N/A              '
         TXTC     ' 8-N/A                   ',;
                  '32-N/A                   ',;
                  '56-N/A              '
         TXTC     ' 9-N/A                   ',;
                  '33-N/A                   ',;
                  '57-N/A              '
         TXTC     '10-N/A                   ',;
                  '34-N/A                   ',;
                  '58-N/A              '
         TXTC     '11-N/A                   ',;
                  '35-N/A                   ',;
                  '59-N/A              '
         TXTC     '12-N/A                   ',;
                  '36-N/A                   ',;
                  '60-N/A              '
         TXTC     '13-N/A                   ',;
                  '37-N/A                   ',;
                  '61-N/A              '
         TXTC     '14-N/A                   ',;
                  '38-N/A                   ',;
                  '62-N/A              '
         TXTC     '15-N/A                   ',;
                  '39-N/A                   ',;
                  '63-N/A              '
         TXTC     '16-N/A                   ',;
                  '40-N/A                   ',;
                  '64-N/A              '
         TXTC     '17-N/A                   ',;
                  '41-N/A                   ',;
                  '65-N/A              '
         TXTC     '18-N/A                   ',;
                  '42-N/A                   ',;
                  '66-N/A              '
         TXTC     '19-N/A                   ',;
                  '43-N/A                   ',;
                  '67-N/A              '
         TXTC     '20-N/A                   ',;
                  '44-N/A                   ',;
                  '68-N/A              '
         TXTC     '21-N/A                   ',;
                  '45-N/A                   ',;
                  '69-N/A              '
         TXTC     '22-N/A                   ',;
                  '46-N/A                   ',;
                  '70-N/A              '
         TXTC     '23-N/A                   ',;
                  '47-N/A                   ',;
                  '71-N/A              '
*
*        TABLE OF VALUES FOR REMOTE BATCH STATUS
*
RBSTATS  EQU       %
         DATA      'EMTY'
         DATA      'LOGN'
         DATA      'OFF '
         DATA      'SUSP'
         DATA      'OUTP'
         DATA      'INAC'
         DATA      'INPT'
         DATA      'ACTV'
         PAGE
*************************************************************
*        GHOST CONTROLLER FOR MASTER OPS MONITOR (*MOM*)
*        THE PROGRAM IS ENTERED AT 'GHOST'
*        MAP MONITOR REFS, INITIALIZE INSTALLATION DEPENDENT
*        PARAMETER ADDRESSES (TAPES, PACKS, RBTS), HOME CURSOR
*        ERASE SCREEN, AND SET BREAK CONTROL TO RESTART.
*        BRANCH TO PARAMETER UPDATE LOOP (SEE ULOOP).
*        ON RETURN, GO TO SLEEP FOR 12 SECONDS.  ON WAKEUP,
*        BRANCH TO PARAMETER UPDATE LOOP AND DO IT ALL
*        AGAIN.
*************************************************************
GHOST    EQU      %
         BAL,15   MAPMON            GET MONITOR MAP ACCESS
         BAL,15   RUNINIT           RUN-TIME INITIALIZE
         M:INT    BREAK             SET BREAK KEY ADDRESS
         CAL1,8    SETPLAT             SET PLATEN 0,0
         MTW,0    S:DP+BIAS
         BEZ      RESTART
         LW,1     =ZERO
         STW,1    LAB1A+1
         STW,1    LAB1B+1
         LW,1     STEVE1
         AI,1     -160
         STW,1    STEVE1
RESTART  MTW,1    ANYHOW            SET UNCONDITIONAL UPDATE FLAG
         CAL1,8    RSTBRK              RESET BREAK COUNT
         BAL,15   HOMECURS          HOME CURSOR
         BAL,15   ERASE             CLEAR SCREEN
         BAL,R11  BAINIT            INITIALIZE FOR BATCH DISPLAY
WAKEUP   LI,1     0                 CONTROL TABLE INDEX
         M:TIME   DATE              GET TIME & DATE
         MTW,0    DISPFLG           ARE WE UPDATING BA OR ONL?
         BEZ      UPBA              BATCH..
UPONL    EQU      %                 ONLINE..
         LI,1     CONTABO           START AT END OF FIRST CONTAB
         BAL,R15  ULOOP
         B        WAIT
UPBA     EQU      %
         BAL,R11  DO%CORE           GET CURRENT CORE SNAP
         BAL,15   ULOOP             MAIN PARAMETER UPDATE
WAIT     EQU      %
         LI,2     0                 RESET UNCONDITIONAL UPDATE FLAG
         STW,2    ANYHOW
         M:WAIT   5                 GO TO SLEEP (ZZZ-ZZZ-ZZZ)
         B        WAKEUP            GOOD MORNING
*
*        INTERRUPT CONTROL COMES HERE
*
BREAK    LI,2     1                 CLEAR
         LI,3     X'7FFF'               TEMP
         AND,3    *0,2                      STACK
         LCW,3    3
         MSP,3    *0
         BAL,R15   HOMECURS            HOME CURSOR
         BAL,R15   ERASE               CLEAR SCREEN
         MTW,1    ANYHOW            UNCONDITIONAL UPDATE FLAG
         MTW,0    DISPFLG           WHAT IS CURRENT DISPLAY?
         BEZ      DOONL             BATCH, CHANGE TO ONLINE
DOBA     EQU      %                 ONLINE, CHANGE TO BATCH
         MTW,-1   DISPFLG           RESET DISPFLG TO ZERO
         BAL,R11  BAINIT
         B        WAKEUP            DO IMMEDIATE UPDATE
DOONL    EQU      %
         MTW,1    DISPFLG           BUMP DISPFLG TO +1
         BAL,R11  ONLINIT
         B        WAKEUP
*
*        BAINIT   INITIALIZES BATCH DISPLAY
*
BAINIT   EQU      %
         LI,R10   25
         LI,8     FIXTEXT           ADDR OF FIXED TEXT
OUTFIX   M:PRINT  (MESS,*8)         PRINT LINE
         LB,9     *8                BYC OF PREV LINE
         SAS,9    -2                WORD LENGTH -1
         AI,9     1                 WORD LENGTH
         AW,8     9
         BDR,10   OUTFIX            DO 25 LINES
         BAL,15   HOMECURS          HOME CURSOR
         B        *R11              RETURN
*
*        ONLINIT INITIALIZES ONLINE DISPLAY
*
ONLINIT  EQU      %
         LI,R10   26
         LI,R8    FIXTXT2           ONLINE FIXED MESSAGE
PRINT    M:PRINT  (MESS,*R8)        WRITE A LINE
         LB,R9    *R8
         SAS,R9   -2
         AI,R9    1
         AW,R8    R9
         BDR,R10  PRINT             PRINT ALL 26 LINES
         BAL,R15  HOMECURS
         B        *R11              RETURN
         SPACE    3
*
*        DO%CORE SNAPS CORE TO DETERMINE CURRENT
*        RESIDENT USERS
*
DO%CORE  EQU      %
         LI,USR   0
         STW,USR  ON%CORE           INITIALIZE CORE WORDS
         STW,USR  BA%CORE
         STW,USR  CPV%CORE
         STW,USR  SHR%CORE
         STW,USR  #ONLINE
         STW,USR  #BATCH
         M:SYS
USER%LOOP EQU     %
         LH,R8    UH:FLG,USR        GET USERS FLAGS
         BEZ      NEXT%
         CW,R8    =X'00000200'
         BAZ      NEXT%
         CW,R8    =X'00000100'      LOOK FOR BATCH BIT
         BANZ     IS%BATCH
IS%ONL   EQU      %
         LB,R9    UB:PCT,USR        GET USERSS PAGE COUNT
         AWM,R9   ON%CORE
         MTW,1    #ONLINE           BUMP # OF ONLINE USERS IN CORE
         B        NEXT%
IS%BATCH EQU      %
         LB,R9    UB:PCT,USR        GET USERS PAGE COUNT
         AWM,R9   BA%CORE
         MTW,1    #BATCH
NEXT%    EQU      %
         AI,USR   1
         CI,USR   SMUIS
         BLE      USER%LOOP
         LW,R9    BA%CORE           CNVERT PAGES TO K
         AI,R9    1
         SLS,R9   -1
         STW,R9   BA%CORE
         LW,R9    ON%CORE
         AI,R9    1
         SLS,R9   -1
         STW,R9   ON%CORE
         LI,R9    SUSP
         SLS,R9   -10               CONVERT TO K
         AI,R9    1
         STW,R9   CPV%CORE
         LW,R9    P:NAME+2          UMOV WILL BE FIRST PROC
         CW,R9    =X'04E4D4D6'      CHECK FOR UMOV PRESENT
         BNE      NO%UMOV
         LI,USR   1
         LB,R9    PB:PSZ,USR        GET SIZE OF UMOV
         AI,R9    1
         SLS,R9   -1                MAKE PAGES K
         AWM,R9   CPV%CORE
NO%UMOV  EQU      %
         LI,USR   0
P%LOOP   EQU      %
         LOAD,R9  PX:HPP,USR        ZERO IF NOT IN CORE
         BEZ      NEXTP
         LB,R9    PB:PSZ,USR        PROCESSOR PAGES
         AWM,R9   SHR%CORE
         LB,R9    PB:DSZ,USR        DATA PAGES
         AWM,R9   SHR%CORE
         LB,R9    PB:DCBSZ,USR      DCB PAGES
NEXTP    EQU      %
         AI,USR   1
         CI,USR   PNAMEND           END OF PROCESSOR TABLE
         BLE      P%LOOP
         LW,R9    SHR%CORE
         AI,R9    1                 ROUND UP
         SLS,R9   -1                CONVERT TO K
         STW,R9   SHR%CORE
         LW,R9    S:FPPC+BIAS       GET SWAP CORE
         SLS,R9   -1
         STW,R9   SWP%CORE          SWAP CORE
         AW,R9    CPV%CORE
         AW,R9    SHR%CORE
         AW,R9    BA%CORE
         AW,R9    ON%CORE
         STW,R9   TOT%CORE
         LW,R9    #BATCH
         AW,R9    #ONLINE
         STW,R9   #TOT
         M:SLAVE
         B        *R11              RETURN
         PAGE
************************************************************
*        RUN-TIME INITIALIZE OF AVR AND RBT ADDRESSES BY
*        SEARCHING THE DCT16 FROM TABLES AVRDEV AND RBTDEV
*        CREATED ABOVE FROM USER INPUT.  'CONTAB' ENTRIES
*        ARE MODIFIED FOR PROPER DISPLACEMENT IN MONITOR
*        TABLES, ETC.
************************************************************
RUNINIT  EQU      %
         M:GP     1
         M:FP     1                 INSURE A FREE PAGE
         STW,9    VIR%PAGE
         LI,1     #AVR              #AVR DEVICES
         BEZ      RBTINIT           =0??? GO PROCESS RBTS
         LI,12    AVRITEMS+1        ADDR OF CWORD ENTRY
         LI,1     0
CKAVR    CI,1     #AVR              DONE WITH AVRS????
         BGE      RBTINIT           YES, GO DO RBTS
         LD,2     AVRDEV,1          GET YYNDD STRING
         BAL,14   CHKDCTX           GO GET DCT INDEX IN R2
         AI,2     -BATAPE           ADJUST DCTX TO AVR INDEX
         LI,3     2                 2 CWORD ENTRIES FOR TAPES
         CI,1     #TAPES            TAPE OR PACK???
         BL       %+2               TAPE, 2 IN R3 IS OK
         LI,3     3                 PACK, 3 CWORD ENTRIES
MODAVR   AWM,2    *12               ADD DCTX TO PARAMETER ADDR
         CI,3     1                 AVRTBL ENTRY?????
         BNE      %+2               NO, THEN ONCE IS ENUF
         AWM,2    *12               YES, BETTER ADD IT AGAIN!
         AI,12    4                 BUMP TO NEXT CWORD
         BDR,3    MODAVR            2 OR 3 CWORDS
         AI,1     1
         B        CKAVR             GET ALL THE AVRS
RBTINIT  EQU      %
         LI,1     #RBTS             #RBT DEVICES
         BEZ      INITRET           =0???, RETURN
         LI,12    RBTITEMS+12*#RBTS-3  LAST RBT CWORD
CKRBT    LD,2     RBTDEV-2,1        GET YYNDD STRING
         BAL,14   CHKDCTX           GET DCTX IN R2
         LI,3     3                 3 CWORDS FOR EACH RBT
MODRBT   AWM,2    *12               ADD DCT INDEX TO CWORD
         CI,3     3                 RBD:WSN ENTRIES?????
         BE       %+2               NO, THE ONCE IS ENUF
         AWM,2    *12               YES, BETTER ADD IT AGAIN!
         AI,12    -4                NEXT CWORD
         BDR,3    MODRBT            3 CWORDS/RBT
         BDR,1    CKRBT             GET ALL THE RBTS
INITRET  B        *15               RETURN TO GHOST
CHKDCTX  EQU      %
         LI,7     DCTSIZ            # ENTRIES IN DCT
NXTDCT   CD,2     DCT16+BIAS,7      YYNDD = DCT16????
         BE       GOTDCT            YES, DCTX TO R2
         BDR,7    NXTDCT            NO, TRY NEXT DCT
         M:PRINT  (MESS,BADDCT)
         M:EXIT
BADDCT   TXTC     'BAD DEVICE NAME (YYNDD) CHECK ASSEMBLY'
GOTDCT   LW,2     7                 DCTX TO R2
         B        *14               RETURN TO INITIALIZE
         PAGE
************************************************************
*        MAIN UPDATE CONTROL LOOP.  CYCLES THROUGH 'CONTAB',
*        ONE ENTRY(3 WORDS) AT A TIME, CHECKING EACH ENTRY
*        FOR CHANGES SINCE LAST UPDATE.  IF NO CHANGES, THEN
*        GO TO NEXT PARAMETER.  IF VALUE HAS CHANGED, CALL
*        APPROPRIATE ROUTINES TO DISPLAY NEW VALUE.
*        REGISTER 1 IS USED AS 'CONTAB' INDEX.
************************************************************
ULOOP    EQU      %
         SAVE     RULOOP            SAVE RETURN
         LI,5      0                   INITIAL VALUE
         STW,5     PART#                CLEAR PART NUMBER AND CONTROL
         STW,5    LINE#            CLEAR LINE# COUNTER
         LW,5     CONTAB+1,1        GET SYSTEM PARAM ADDRESS
         LW,7     LENMSK
         LSS,6    CONTAB+3,1        GET SYSTEM PARAM TYPE(WORD,HALF,ETC)
         LW,13    =X'000000FF'      LOB MASK FOR 'SPEC' TYPE
         LI,12    0
*****
*        MONITOR PARAMETER ADDRESS IS IN R5.  THIS IS A
*        WORD, HALFWORD, OR BYTE ADDRESS, DEPENDING ON
*        WHICH MONITOR TABLE IS BEING REFERENCED.
*        PARAMETER IS TO BE LOADED INTO R12.  AF(7) OF
*        'CONTAB' PROCS CONTAINS AN INDEX TO THE BRANCH
*        VECTOR AT 'GETSYS'.  NOTE THAT VALUES 0-2 CAUSE
*        EXECUTION OF A SINGLE LOAD.  OTHER VALUES(>2)
*        REQUIRE SPECIAL ATTENTION AND BRANCH TO SPECIAL
*        ROUTINES.
*****
         EXU      GETSYS,6          EXU LB,LH,LW,LS DEPENDING ON R6
         B        GOTIT
GETSYS   LB,12    0,5                    LOAD
         LH,12    0,5                        SYSTEM
         LW,12    0,5                              VALUE
         LS,12    0,5                     (BY EXU)
         B        TBAT              RESOLVE TOTAL BATCH
         B        DUID              RESOLVE USER/SYS ID
         B        ETMF              CALC ETMC
         B        FREE              FREE SPINDLE CHECK
         B        RESP              RESPONSE TIME CHECK
         B        RBSTAT            CALCULATE RBT STATUS
         B        RBWSN             RBT WSN CHECK
         B        GET%MIN
         B        GET%SEC
         B         LOCK                 LOCKED PART?
         B        SWAPIN           FIRST HALF OF ACCOUNT
         B        SWAPIN1          2ND HALF OF ACCOUNT
         B        GET%CORE          GETS CORE SIZE
         B        GET%IN            IN CORE FLAG
         B        GET%PNAME         ASSOCIATED PROCESSOR
GOTIT    EQU      %                 SYSTEM VALUE IN R12
         MTW,0    ANYHOW            UNCONDITIONAL VALUE REPLACEMENT?
         BNEZ     CONVERT           YES, SKIP COMPARISON
         CW,12    CONTAB,1          NEW VALUE :OLD VALUE
         BE       NXTVAL            IF EQUAL, GO TO GET NEXT PARAM
CONVERT  EQU      %
         STW,12   CONTAB,1          STORE NEW PARAMETER VALUE
         LW,7     CVTMSK
         LSS,6    CONTAB+2,1        GET DATA TYPE CODE (TEXT,HEX,DEC)
         SLS,6    -12
         BAL,15   CBTAB,6           BRANCH TO APPROPRIATE CONVERSION
         B        GODISP            GO TO DISPLAY
CBTAB    B        CTEXT             CONVERT TEXT
         B        CHEX              CONVERT HEX
         B        CDEC              CONVERT DEC
         B         CDECL               CONVERT DEC
         B         CDECR               CONVERT DEC
GODISP   BAL,15   DISPLAY           DISPLAY ITEM
NXTVAL   AI,1     4                 BUMPCONTAB POINTER
         MTW,0    DISPFLG
         BEZ      BATCH             WERE IN BATCH MODE
         CW,1     STEVE1            NO..ONLINE
         BL       ULOOP+4           GO UPDATE
         B        FINI              DONE UPDATING
BATCH    EQU      %
         CI,1     CONTABSZ          ENDOF PARAMS?
         BL        ULOOP+4             NO, GO BACK FOR ANOTHER
FINI     EQU      %
         BAL,15   HOMECURS          CURSOR HOME
         B        *RULOOP           RETURN
         PAGE
*************************************************************
*        ROUTINES TO HANDLE NON-STANDARD PARAMETERS
*************************************************************
*        RESOLVE USER/SYSID CONFLICT IN DEVICE DISPLAY
DUID     LH,12    0,5               GET USER NUMBER
         LI,2     #PARTS            NUMBER OF PARTITIONS
CKBAT    CB,12    PLB:USR+BIAS,2      IS HE A BATCH USER?
         BE       BUSER             YES, SUBSTITUTE JOB ID
         BDR,2    CKBAT             NO, CHECK NEXT PART
         B        GOTIT             ONLINE OR GHOST UID OK
BUSER    LH,12    PLH:SID+BIAS,2      GET JOB ID
         B        GOTIT             RETURN
*****
*        RESOLVE TOTAL BATCH JOBS SINCE STARTUP
TBAT     LI,12    0                 ZERO ACCUMULATOR
         LI,2     #PARTS            NUMBER OF PARTITIONS
         AH,12    PLH:TOL+BIAS,2      ADD TOTAL JOBS PART,2
         BDR,2    %-1
         B        GOTIT             RETURN
*****
*        GET ETMF
ETMF     M:DISPLAY                  SYSTEM STATUS
         LW,12    5                 ETMF TO R12
         B        GOTIT             GO TO DISPLAY
*****
*        DISK PACK FREE?
FREE     LH,12    0,5               GET AVRNOU
         BNEZ     %+3               NOT FREE
         LW,12    =X'6A6A6A6A'      LOAD UP ARROW
         B        GOTIT             GO TO DISPLAY
         LW,12    =X'40404040'      LOAD BLANKS
         B        GOTIT             GO TO DISPLAY
*****
*        GET TERMINAL RESPONSE TIME
RESP     M:DISPLAY                  GET SYSTEM STATUS
         LW,12    6                 RESP TO R12
         B        GOTIT
*****
*        GET RBT STATUS
*****
RBSTAT   EQU      %
         DO        CPV
         LW,10     RB:FLAG+BIAS,5      GET STATUS WORD
         CW,10     ALBIT+BIAS          RBLOG KEYIN DONE?
         BANZ      RBSTAT3             NO, PROCEDE
         CW,10     DCBIT+BIAS          WSN AT SYSGEN?
         BANZ      RBSTAT3             NO, PROCEDE
         LB,7      RBB:ID+BIAS,5       RBID?
         BEZ       RBSTAT1             NO, SPECIAL CASE
RBSTAT3  EQU       %
         LI,7      0                   INIT INDEX TO STAT MSG
         CI,10     ACTBIT+LIPBIT       ACTIVE OR LOGGING ON?
         BAZ       RBSTAT2             NO => EMPTY
         CI,10     ACTBIT              ACTIVE?
         BAZ       RBSTAT2-1           NO => LOGGING ON
         LI,7      2                   CHANGE INDEX
         CI,10     LOFBIT+DISCBIT      LOGGING OFF OR DISC?
         BANZ      RBSTAT2             YES => LOGGED OFF
         CW,10     HASPBIT+BIAS        IS IT IRBT?
         BAZ       RBSTAT4             NO
*        FOLLOWING CODE FOR IRBT'S ONLY
         LI,7      7                   CHANGE INDEX
         LB,3      RBB:HIN+BIAS,5      GET HEAD OF INPUT CHAIN
         BNEZ      RBSTAT2             EXISTS => ACTIVE
         LB,3      RBB:HOU+BIAS,5      GET HEAD OF OUTPUT CHAIN
         BEZ       RBSTAT35            ZERO => INACTIVE
         LB,2      SSIG+BIAS,3         GET SIG CHAR
         BNEZ      RBSTAT2             NON ZERO => ACTIVE
         LB,3      STB:LNK+BIAS,3      LINK TO NEXT DEVICE
         BNEZ      %-3                 BACK TO TEST AGAIN
RBSTAT35 EQU       %
         LI,7      5                   CHANGE INDEX
         B         RBSTAT2             => INACTIVE
RBSTAT4  EQU       %                   FOR RBT'S ONLY
         AI,7      1                   BUMP INDEX
         LB,2      RBB:HIN+BIAS,5      GET HEAD OF INPUT CHAIN
         BEZ       RBSTAT5             NONE
         AI,7      2                   BUMP INDEX
         CW,10     FRBIT+BIAS          INITIAL READ OF FILE?
         BANZ      RBSTAT2             YES => INACTIVE
         B         RBSTAT2             => INPUTTING
RBSTAT5  EQU       %
         LB,2      RBB:HOU+BIAS,5      GET HEAD OF OUTPUT CHAIN
         BEZ       RBSTAT35            ZERO => INACTIVE
         CI,10     SSSBIT              OUTPUTTING SUSPENDED?
         BANZ      RBSTAT2             YES => SUSPENDED
         AI,7      1                   BUMP INDEX
RBSTAT2  EQU       %
         LW,12     RBSTATS,7           GET STATUS VALUE
         B         GOTIT               RETURN
RBSTAT1  EQU       %
         LI,7      0                   INIT INDEX
         CI,10     LIPBIT+ACTBIT       LOGGING ON OR ACTIVE?
         BAZ       RBSTAT2             NO => EMPTY
         B         RBSTAT2-1           YES => LOGGING ON
         ELSE
         LW,10    RB:FLAG+BIAS,5    GET RBT STATUS WORD
         LB,7     RBB:ID+BIAS,5     GET RBID
         BEZ      RBCUP             =0, MUST BE EMPTY OR LOGGING ON
         LB,7     SNDDX+BIAS        GET # OF SYMBIONT DEVICES
CKSYM    CB,5     SNDDX+BIAS,7      SEARCH SYMBIONT FOR DCTX
         BE       GOTSX             GOT IT (IN R7)
         BDR,7    CKSYM             IT MUST BE HERE SOMEWHERE
SYMERR   M:PRINT  (MESS,BADSYM)     NO WAY TO GET HERE(I THINK!)
         M:EXIT
BADSYM   TXTC     'I CAN''T FIND AN RBT IN THE SYMBIONT TABLE'
GOTSX    LB,6     SYMX+BIAS,7       GET SYMBIONT SEG#
         CI,6     1
         BL       RBQM              OUT OF RANGE, ERROR
         CI,6     2
         BG       RBQM              OUT OF RANGE, ERROR
         B        %,6               BRANCH VECTOR FOR STATUS
         B        RBIN              ISSEG
         CI,10    X'10'             OSSEG, CK SSSBIT IN RB:FLAG
         BAZ      %+3               SSS BIT RESET
         LW,12    =C'SUSP'          SSS BIT SET, SUSPENDED
         B        RBXIT             GO AWAY
         LW,12    =C'OUT '          OUTPUTTING
         B        RBXIT             GO AWAY
RBIN     CI,10    1                 ISSEG,CHECK RB:FLAG(FRBIT)
         BAZ      %+3               FRBIT RESET
         LW,12    =C'INAC'          FRBIT SET, INACTIVE
         B        RBXIT             GO AWAY
         LW,12    =C'INPT'          FRBIT RESET, INPUTTING
RBXIT    B        GOTIT             RETURN
RBCUP    EQU      %                 EMPTY OR LOGGING ON
         CI,10    X'8'              LIPBIT SET????
         BAZ      %+3               NO, EMPTY
         LW,12    =C'LOGN'          LIPBIT SET, LOGGING ON
         B        RBXIT             GO AWAY
         LW,12    =C'EMTY'          LIPBIT RESET, EMPTY
         B        RBXIT             GO AWAY
RBQM     LW,12    =C'????'          BAD STATUS
         B        RBXIT             ???? TO STATUS FIELD
         FIN
*****
*        MAKE SURE RBT IS LOGGED ON BEFORE OUTPUTTING WSN
*****
RBWSN    EQU      %
         LW,12    0,5               GET RBD:WSN
         LI,7     RBD:WSN+BIAS      FWA OF WSN TABLE
         LCW,7    7                 MAKE IT NEGATIVE
         AW,7     5                 RBT N - FIRST RBT = DCTX*2
         SAS,7    -1                DIVIDE BY 2 FOR DCTX
         LB,7     RBB:ID+BIAS,7     GET RBID
         BNEZ     GOTIT             HE MUST BE ON IF HE HAS RBID
         DO        CPV
         LW,10     RB:FLAG+BIAS,7      GET STATUS WORD
         CW,10     ALBIT+BIAS          RBLOG KEYIN DONE?
         BANZ      GOTIT               YES, USE WSN
         CW,10     DCBIT+BIAS          WSN AT SYSGEN?
         BANZ      GOTIT               YES, USE WSN
         FIN
         LW,12    =X'40404040'      HE'S NOT ON
         B        GOTIT             RETURN
*****
*        RESOLVE PARTITION LOCKED STATUS
*****
LOCK     EQU       %
         LW,12     0,5                 GET CURRENT VALUE
         DO        CPV
         CI,12     0                   IS IT IN USE?
         ELSE
         CW,12     ='    '             IS PART IN USE?
         FIN
         BNE       GOTIT               YES, BYPASS LOCKED TEST
         LW,2      PART#                GET PART NUMBER AND CONTROL
         SLD,2     -1                   ISOLATE PART NUMBER
         SLS,3     -31                 JUSTIFY IT
         LH,7      PLH:FLG+BIAS,3      GET FLAGS FOR THIS PART
         CI,7      1                   IS IT LOCKED?
         BAZ       GOTIT                NO
         LW,12     LOCKED,3        YES, SAY SO
         B         GOTIT                CONTINUE
* THIS ROUTINE SWAPS IN A BATCH USERS JIT IF NECESSARY
* IN ORDER TO OBTAIN RUNNING VALUES SUCH AS CPU TIME,
* CORE SIZE, INC.
*
*
GET%MIN  EQU      %
         M:SYS
         CI,10    NEWQ            THIS ROUTINE DETERMINES
*                                    WHETHER OR NOT THIS
         BNE      NOT%HERE          USER SHOULD BE OUTPUT
         MTW,1     PART#                INCR PART NUMBER AND CONTROL
         LW,R5    PART#             GET CURRENT PARTITION #
         LB,USR   PLB:USR,R5        GET USER WHOS IN THIS PART
         BEZ      NO%USER
         BAL,LINK GET%JIT
         LW,R5    PART#
         LB,USR   PLB:USR+BIAS,R5   GET USER #E
         BAL,LINK SETUP             SET UP JIT VALUES
         LW,12    MIN
GET%MINX B        GOTIT
*
*        SET UP SETS UP JIT VALUES IN LOCAL VARIABLES
*
SETUP    EQU      %
         LW,13    J:UTIME+PD
         AW,13    J:UTIME+1+PD
         AW,13    J:PTIME+PD
         AW,13    J:PTIME+1+PD
         LI,12    0
         DW,12    =TICS%PER%MIN
         STW,13   MIN
         LW,13    12
         AI,13    TICS%PER%SEC/2
         LI,12    0
         DW,12    =TICS%PER%SEC
         STW,13   SEC
*
*        FOLLOWING SETS UP CORE, PROCESSOR NAME, AND
*        IN/OUT FLAG JFOR LATER USE.
*
         LW,12    MXFPL+1+PD        GET FILE NAME IN M:XX DCB
         LW,13    MXFPL+2+PD        *
GOT%PROC EQU      %
         SLD,R12  8                 DUMP OFF COUNT BYTE
SAVENAME EQU      %
         STW,12   PNAME
         LB,R12   UB:PCT+BIAS,USR   USER SIZE(PAGES)
         AI,12    1                 ROUND UP
         SLS,12   -1                CONVERT TO K
         STW,12   CORE              SAVE
*  SET UP IN CORE FLAG NOW
         LH,R5    UH:FLG+BIAS,USR   GET USER FLAGS
         CI,R5    X'0200'           BIT 6 IS JIT IN CORE
         BAZ      NOTIN
         LW,12    =' * *'
         B        NOTIN+1
NOTIN    EQU      %
         LI,12    ' '
         STW,12   IN%OUT
         B        *LINK             RETURN
NO%USER  EQU      %
         LI,12    0
         STW,12   MIN               CLEAR MIN AND SEC
         STW,12   SEC
         STW,12   CORE
         STW,12   PNAME
         STW,12   IN%OUT
         B        GET%MINX
GET%SEC  EQU      %                 MOVES SECS TO DISPLAY
         LW,12    SEC
         B        GOTIT             ALL CALCS DONE AT GET%MIN
GET%CORE EQU      %
         LW,12    CORE
         B        GOTIT
GET%PNAME EQU     %
DOPROC   EQU      %
         LW,12    PNAME
         B        GOTIT
GET%IN   EQU      %
         LW,12    IN%OUT
         B        GOTIT
         PAGE
*
*        SWAPIN SWAPS IN JIT OF ONLINE USER
*        IN ORDEER TO OBTAIN HIS ACCOUNT.
*
*
SWAPIN   EQU      %
         M:SYS                      GET MASTER MODE
         LW,7     LINE#            GET CURRENT LINE NO.
         LB,USR   LB:UN+BIAS,7     GET CURRENT USER NO.
         BEZ      NO%ONE
         BAL,LINK GET%JIT
         BAL,LINK SETUP             SET UP VARIOUS JIT VALUES
         LW,12    J:ACCN+PD+1
         STW,12   ACCT+1
         LW,12    J:ACCN+PD
         STW,12   ACCT
         B        GOTIT
NO%ONE   EQU      %
         LI,12    0
         STW,12   ACCT
         STW,12   ACCT+1
         STW,12   PNAME
         STW,12   CORE
         STW,12   IN%OUT
         B        GOTIT            RETURN
*
*
*
SWAPIN1  EQU      %
         LW,12    ACCT+1            GET ACCOUNT 2ND HALF
         MTW,1    LINE#
         STW,12   ACCT+1
         B        GOTIT
         PAGE
*        TXT  EDIT ROUTINE
*        R12-TEXT STRING INPUT
*        R13-EDITED TEXT OUTPUT
*****
CTEXT    EQU      %
         SAVE     RCONV
         LI,5     0
T1       LB,6     12,5              GET TEXT BYTE
         BNEZ     %+2
         LI,6     X'40'             SUBSTITUTE EBCDIC BLANK FOR BINARY 0
         STB,6    13,5              CHAR TO OUTPUT
         AI,5     1                 BUMP CHAR COUNTER
         CI,5     4                 CONVERT 4 CHARACTERS
         BL       T1
         B        *RCONV            RETURN
         PAGE
*        BINARY TO HEX CONVERSION ROUTINE
*        R12-BINARY INPUT
*        R13-4 BYTE ZONED HEXADECIMAL OUTPUT
*****
CHEX     EQU      %
         SAVE     RCONV
         CI,12    0                 N<0?
         BL       HNEG              YES
         CI,12    9999              N>9999
         BLE      HEX0              NO, N OK
         LW,13    =C'>>>>'          LOAD TOO BIG
         B        *RCONV            RETURN
HNEG     LW,13    =C'<<<<'          NEGATIVE
         B        *RCONV            RETURN
HEX0     EQU      %
         LI,5     0
         STH,12   7                 LOW ORDER R12 TO HIGH ORDER R7
HEX1     LI,6     0                 SHIFT WORK REGISTER
         SLD,6    4                 HEX CHAR TO R6
         LB,6     HEXTAB,6          LOOK UP EBCDIC BYTE
         STB,6    13,5              STORE IN RESULT REGISTER
         AI,5     1                 BUMP CHAR CTR
         CI,5     4                 CONVERT ONLY 4 CHARS
         BL       HEX1
         B        PAD               GO TO PAD LEADING ZEROES
         PAGE
*        BINARY TO DECIMAL CONVERSION ROUTINE
*        R12-BINARY INPUT
*        R13-4 BYTE ZONED DECIMAL OUTPUT
CDECL    EQU       %
         SAVE      RCONV               SAVE RETURN
         SAD,R12   -32                 POSITION VALUE
         DW,R12    =10000              GET RIGHT & LEFT DIGITS
         LW,R12    R13                 ANY SIGNIFICANT LEFT DIGITS?
         BGZ       DEC0                YES, PROCEDE NORMALLY
         LW,R13    ='    '             NO, BLANK VALUE
         B         *RCONV              RETURN
CDECR    EQU       %
         SAVE      RCONV               SAVE RETURN
         SAD,R12   -32                 POSITION VALUE
         DW,R12    =10000              GET RIGHT & LEFT DIGITS
         MTW,0     R13                 ANY REMAINDER?
         BEZ       DEC0                NO, PROCEED NORMALLY
         CVS,R12   BI2DEC              CONVERT TO DECIMAL
         B         *RCONV              RETURN
CDEC     EQU      %
         SAVE     RCONV
         CI,12    0                 N<0?
         BL       DNEG              YES
         CI,12    9999              N>9999
         BLE      DEC0              NO, N OK
         LW,13    =C'>>>>'          LOAD TOO BIG
         B        *RCONV            RETURN
DNEG     LW,13    =C'<<<<'          NEGATIVE
         B        *RCONV            RETURN
DEC0     EQU      %
         CVS,12   BI2DEC            CONVERT -RESULT IN R13
         B        PAD               GO TO PAD LEADING ZEROES
         PAGE
*        PAD LEADING ZEROES ROUTINE ENTERED FROM CDEC & CHEX
*        R13 - INPUT REPLACED BY OUTPUT
*****
PAD      LW,7     ZERMSK
         LSS,6    CONTAB+2,1        GET ZERO PRESERVE FLAG
         SLS,6    -8
         CI,6     1
         BE       *RCONV            KEEP LEADING ZEROES, RETURN
         CI,6     3
         BNE      P2
         CW,13    ='0000'
         BNE      PADX
         LW,13    ='    '
         B        PADX
P2       EQU      %
         LI,5     0
P1       LB,8     13,5              GET CHARACTER
         CI,8     X'F0'             EBCDIC ZERO?
         BNE      *RCONV            NOT ZERO,RETURN
         LI,7     X'40'             ZERO,
         STB,7    13,5                  REPLACE WITH BLANK
         AI,5     1
         CI,5     4                 LAST CHAR?
         BL       P1                NO, GET NEXT
         CI,6     0                 KEEP 1 ZERO?
         BE       *RCONV            NO, RETURN
         AI,5     -1                YES,
         OR,13    =X'F0'                INSERT ZERO
PADX     B        *RCONV            RETURN
         PAGE
*        DISPLAY DATA ITEM IN R13
*        CURSOR POSITION IN CONTAB+2,R1
*        ITEM LENGTH IN CONTAB+2,R1
*****
DISPLAY  EQU      %
         SAVE     RDISPLAY          SAVE RETURN
         LW,3     HORMSK
         LSS,2    CONTAB+2,1        GET HORIZONTAL CURSOR POS
         LW,5     VERMSK
         LSS,4    CONTAB+2,1        GET VERTICAL CURSOR POS
         LW,3     4
         SLS,2    -24               RIGHT JUSTIFY HORIZ
         SLS,3    -16               RIGHT JUSTIFY VERTICAL
         LW,5     CHRMSK
         LSS,4    CONTAB+2,1        GET CHARACTER COUNT
         SW,2     4
         AI,2     1                 LEFT JUSTIFY CURSOR POSITION
         LI,5     4
         SW,5     4                 STRING STARTING POSITION
         STW,4    BSIZE             SAVE STRING COUNT
         PSW,1    *0                SAVE CONTAB POINTER
         LW,1     TBSW              GET TBS CONTROL WORD
         TBS,0    BA(TTAB)          GUARANTEE ALL CHARACTERS WILL PRINT
         PLW,1    *0                RESTORE CONTAB POINTER
         STW,13   CHARBUF           STORE STRING IN BUFFER
         STW,5    BYTD              BYTE DISPLACEMENT
         BAL,15   MCURS             MOVE CURSOR
         LI,5     0
         LW,13    CHARBUF          CHECK FOR ALL SPACES
         CW,13    ='    '          IF SO SEND 4 WRITES
         BNE      DISPW
         LI,5     1
          XW,5    BSIZE
DISPW    M:WRITE  M:UC,(BUF,CHARBUF),(SIZE,*BSIZE),(BTD,*BYTD),(WAIT)
         MTW,1    BYTD
         BDR,5    DISPW            DISPLAY LOOP TO CLEAR FIELD
DISPX    B        *RDISPLAY
         PAGE
*        PROCEDURE TO CREATE MONITOR REFERENCE TABLE FOR MAPPING
*****
REFF     CNAME
         PROC
         LIST     PTABLE
LF       EQU      %
N        DO       NUM(AF)
         DATA     AF(N)
MAXTABSZ SET      MAXTABSZ+1
         FIN
         LIST     1
         PEND
*****
*        DATA AREA FOR MONITOR MAP ROUTINE
*****
         USECT    MOMDAT
*        FPT FOR M:CVM
CVM      GEN,8,24 7,16
         DATA     BIAS
*        FPT FOR SETTING PLATEN 0,0
SETPLAT  DATA      X'06200000'
         DATA      X'18000000'
         DATA      0
         DATA      0
*        FPT FOR RESETTING BREAK COUNT
RSTBRK   DATA      X'06100000'
QCMSG    TEXT      '--ENTER X TO QUIT.  '
REPLY    DATA      0
*****
*        ERROR MESSAGES
*****
PRLV     TXTC      'SORRY,YOU NEED AN ''C0'' PRIVILEGE LEVEL'
VIRTUE   TXTC     'MAP ERROR - CHANGE BIAS   UPWARDS AND REASSEMBLE'
         PAGE
*        PROCEDURE AREA FOR MONITOR MAPPING
*****
         USECT    MOMPROC
*****
*        MONITOR REFERENCE TABLE
*        WORD ADDRESS OF ALL MONITOR REFS ARE GEN'ED HERE
*        SO MAPMON CAN FIND MINIMUM PAGE AND MAXIMUM MONITOR
*        PAGE TO BE MAPPED
*****
MAXTABSZ SET      0
         DO        CPV
MAXTAB   REFF      PLB:MIN,PLB:MAX,PLH:TL,PLH:TU,PLD:ACT,PLB:USR
         REFF      S:BUAIS,S:BUIS,S:OUAIS,S:OUIS,S:GUAIS
         ELSE
MAXTAB   REFF     PL:MIN,PL:MAX,PLH:TL,PLH:TU,PLD:ACT,PLB:USR
         REFF     S:BUAIS,S:BUIS,SL:C,S:OUAIS,S:OUIS,S:GUAIS
         FIN
         REFF     S:GUIS,GRANRAD,GRANPACK,GRANSYM,AVRTBL
         REFF     AVRID,LB:UN
         REFF     PLH:SID,PLH:TOL
         REFF     S:BFIS,AVRNOU
         REFF     DCT16,RBD:WSN,RB:FLAG,SNDDX,RBB:ID
         REFF     SYMX
         REFF      PLH:FLG
         DO        CPV
         REFF      SH:RBSUM,SH:RBCU
         REFF      SV:RSIZ
         REFF      RBB:HOU,RBB:HIN,STB:LNK
         REFF      LOFBIT,DISCBIT,SSSBIT,FRBIT,LIPBIT
         REFF      ACTBIT,DCBIT,HASPBIT,ALBIT
         REFF      SSIG
         REFF      S:FPPC
         REFF      S:DP
         FIN
         DO1       CFE
         REFF      NUMENTRY
         PAGE
*        MAP NECESSARY MONITOR AREAS INTO MY VIRTUAL SPACE
*        BEGINNING AT VALUE OF SYMBOL 'BIAS'
*****
*        'MAXTABSZ' IS NUMBER OF MONITOR REFS FROM 'REFF' PROC
*****
         REF      JB:PRIV
MAPMON   EQU      %
         LI,1     MAXTABSZ          GET NUMBER OF MONITOR REFS
         LI,2     0                 ALWAYS MAP PAGE 0
         LW,3     =X'80000000'      MIN NEG INTEGER FOR MAXIMUM
MAXREF   LW,4     MAXTAB-1,1        GET MONITOR REF ADDR
         CW,4     3
         BLE      %+2               FIND HIGHEST ADDR IN R3
         LW,3     4
         BDR,1    MAXREF
         LI,1     BA(JB:PRIV)       GET USER PRIV LEVEL
         LB,1     0,1
         CI,1     X'C0'             MUST BE AT LEAST X'80'
         BL       SORRY             IF NOT, PRINT ERROR MESSAGE
         SLS,3    -9                MAKE DIFFERENCE INTO PAGE COUNT-1
         AI,3     2                 MAP ONE EXTRA PAGE TO BE SURE
         AWM,2    CVM               INSERT STARTING PAGE INTO FPT
         LI,1     512               PAGE SIZE
MAPIT    CAL1,8   CVM               MAP PAGE
         BCS,8    ERROR             VIRTUAL PAGE ALREADY ALLOCATED
         AWM,1    CVM               BUMP PHYS PG ADDR
         AWM,1    CVM+1             BUMP VIRT PG ADDR
         BDR,3    MAPIT
         B        *15               RETURN, MAPPING COMPLETE
SORRY    M:TYPE   (MESS,PRLV)       PRIV LEV ERROR
         M:EXIT
ERROR    M:TYPE   (MESS,VIRTUE)     MAP ERROR
         M:EXIT
         SPACE    5
         PAGE
GET%JIT  EQU      %               ONE WAY OR ANOTHER,
         ENTER                     THIS ROUTINE RETURNS
         BAL,LINK PHYS%TO%REL       TO THE CALLER (VIA LINK)
         B        G1                EXIT IF USER STATE IS NULL
         STW,DA0  SEEK                BUFFER "PAGE"
         LI,X6    3
         STB,X7   NEWQARG,X6      IF THE USER IS IN CORE
         LCI      6                HIS JIT IS MOVED TO PAGE;
         LM,12    NEWQARG           OTHERWISE, IT IS READ
         BAL,LINK  NEWQ              IN FROM THE SWAP DEVICE
         NOP
G1       EQU      %
         M:SLAVE                    RETURN TO SLAVE MODE
         RETURN
         SPACE    5
PHYS%TO%REL EQU   %
         LB,X6    UB:US,USR
         BEZ      *LINK           IF HIS STATE IS NON-ZERO
         SREF     SNULL             NULL STATE FOR CP-V B00
         CI,X6    SNULL
         BE       *LINK
         AI,LINK  1                AND HIS JIT IN CORE,
         LH,X6    UH:FLG,USR        THEN HIS JIT IS MOVED
         CI,X6    X'200'             TO PAGE VIA MOVE%IT%IN
         BANZ     MOVE%IT%IN
READ%JIT%IN EQU   %
*
* THIS CODE ADDED TO HANDLE BOTH RAD SWAPPER
*  AND PACK SWAPPER SYSTEMS.
* P.GOODWIN 3-17-75 (HAPPY ST. PATRICK'S DAY)
*
         MTW,0    S:DP+BIAS         TEST FOR PACK SWAP
         BEZ      RD%SWP            ZERO IF NOT
*
* THIS CODE IS FOR A PACK SWAPPER SYSTEM
*
PK%SWP   EQU      %
         LB,X5    UB:SWAPI,USR      CALCULATE . . .
         LB,X5    MB:SDI,X5           THE #SECTS/CYL
         LB,X5    DCT22,X5
         LW,X5    NSPC,X5
         LB,X7    UB:C#,USR         GET USERS CYL #
         LI,X6    0                 CALCULATE SECT ADDRESS
         MW,X6    X5
         AI,X7    2
         CI,USR   2                 TEST FOR ALLOCAT
         BNE      %+2                IT HAS WEIRD QUALITIES
         AI,X7    4
         LW,DA0   X7                MOVE TO DA0
         LB,X6    UB:SWAPI,USR      SWAP DEV. DCT INDEX
         LB,X7    MB:SDI,X6         SWAP DEV. DCT
         STH,X7   DA0               MERGE INTO DCT
         B        *LINK             RETURN
*
* FOLLOWING CODE IS FOR RAD SWAPPER SYSTEM
*
RD%SWP   EQU      %
         LB,X6    UB:SWAPI,USR    OTHERWISE, THE ADDRESS OF
         LB,X5    MB:GPT,X6        HIS JIT IS CALCULATED FROM
         SLS,X5   1                 UH:JIT AND CONTROL
         LI,DA1   0                  RETURNED TO THE GET%JIT
         LH,DA0   UH:JIT,USR           ROUTINE  TO READ IT IN
         LB,X7    MB:GAM5,X6
         AND,X7   =X'7F'          OBVIOUSLY, THIS WILL NOT
         OR,X7    =X'100'          WORK FOR DISC-SWAPPING
         S,DA0    *X7               SYSTEMS, AND THE LOGIC TO
         MW,X5    DA0                SUPPORT THEM MUST BE ADDED
         EOR,X7   =X'37F'              HERE. SORRY ABOUT THAT.
         AI,X7    1
         S,DA1    *X7
         AW,X5    DA1
         LW,DA0   X5
         LB,X7    MB:SDI,X6
         STH,X7   DA0
         B        *LINK
         SPACE    5
NOT%HERE EQU      %               HERE IF THE MONITOR ISN'T
         M:SLAVE                    RETURN TO SLAVE MODE
         M:PRINT  (MESS,NOT%HERE%MSG)
         M:XXX
NOT%HERE%MSG TEXTC 'PROGRAM DOES NOT MATCH SYSTEM',;
                   ', RELOAD WITH MONSTK OR J1'
         SPACE    5
MOVE%IT%IN EQU    %               MOVE A USER'S JIT WHICH
         LOAD,X7  UX:JIT,USR       IS IN CORE TO THE
         LW,X6    VIR%PAGE          BUFER PAGE BY MAPPING
         M:SLAVE                    RETURN TO SLAVE MODE
         SLS,X7   9                    USING MBS TO MOVE
         M:FVP    *VIR%PAGE            TO PAGE.
         M:CVM    *X7,*X6
         SLS,X6   2               CAUTION IS REQUIRED HERE
         LW,X7    =X'FF000000'+BA(PAGE)  WHEN ADDING ADDITIONAL
         LI,8     8                 MOVE ALL JIT IN
         MBS,X6   0                 DISPLAYS, AS ONLY 1/4
         MTB,-1   X7
         BDR,8    %-2
         LI,Z     8
         STB,Z    X7                MOVE LAST 8 BYTES
         MBS,X6   0
         M:SYS                     GET MASTER MODE
         LH,X6    UH:FLG,USR
         CI,X6    X'200'
         BAZ      READ%JIT%IN       WE FAILED TO MOVE IT IN TIME
         B        G1                   HERE
         SPACE    5
ABORT    EQU      %                 ASSEMBLY ABORT (GOTO)
         END      GHOST
