ASMB,L,C,Q,Z   ** RT SCHEDULER MODULE **  NON-DEBUG 
*ASMB,L,C,Q,N  ** RT SCHEDULER MODULE **  DEBUG 
* 
      HED RTE SCHEDULER/MESSAGE PROCESSOR 
*     NAME:   SCHED 
*     SOURCE: 92067-18110 
*     RELOC:  92067-16103 
*     PGMR:   G.A.A.,L.W.A.,D.L.S.,C.M.M.,G.L.M.
*     DATE:   6/27/78 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      NAM SCHD4,0 92067-16103 REV.2040 800731 
* 
* 
      SUP PRESS EXTRANIOUS LISTING
******************************************************************* 
*                           HISTORY 
* 
* 
*G.A.A.   RTE 2 VERSION     JULY  1973
*L.W.A.   RTE 3 VERSION     APRIL 1975
*D.L.S.   ENHANCEMENTS      MAY   1977
*C.M.M.   RTE 4 VERSION     JAN   1978
*G.L.M.   RTE 4 SM VERSION  JUN   1978
* 
******************************************************************* 
* 
*   SCHED ENTRY POINT NAMES 
* 
      ENT $ABRT,$TYPE,$PRSE,$CNV1,$CNV3,$OP 
      ENT $MPT1,$MPT2,$MPT3,$MPT4,$MPT5,$MPT6 
      ENT $STRT,$INER,$MPT7,$ASTM,$WATR,$SZIT 
      ENT $MPT8,$IDSM,$PBUF,$EX6
      ENT $MPT9,$RTST,$CVWD,$STRG 
      ENT $MSEX,$LSTM,$RLNK,$SVAL,$SPRI 
      ENT $LST,$SCD,$ID#,$MSG,$SCXX 
      EXT $LMES,$CES
      ENT $BRKP 
* 
*   SCHED EXTERNAL REFERENCE NAMES
* 
      EXT $XSIO,$IOUP,$IODN,$ERMG,$DREQ 
      EXT $DLP,$PLP,$MPFT,$MEU
      EXT $CMST,$COML,$SDA,$SDT2,$RLB,$RLN
      EXT $MPSA,$MPS2,$IDEX 
      EXT $IOCL,$OTRL,$DREL,$CHTO,$LUPR,$EQST 
      EXT $MESS,$LIST,$IDNO,$SCD3,$CNFG 
      EXT $ERAB,$ZZZZ,$TIME,$PVCN,$MNP
      EXT $ERIN,$NOPG,$OPER,$ILST,$NOLG,$LGBS,$NMEM 
      EXT $XEQ,$TMRQ,$ONTM,$ALC,$RTN,$WORK
      EXT $BRED,$TIMR,$ETTM,$TIMV,$TREM 
      EXT $RNTB,$CREL,$YMG,$SDRL
      EXT $ALDM,$DMAL,$MATA,$PRCN 
      EXT $MBGP,$MRTP,$MCHN,$MAXP 
      EXT $BFOT,$LU?? 
ALDM  EQU $ALDM 
DMAL  EQU $DMAL 
PRCNG EQU $PRCN 
* 
******IFN            SYSTEM SESSION CONSOLE WORK
      EXT !BITM,$SHED,$SMST,$DSCS 
******XIF 
* 
* 
*******************MEU INSTRUCTIONS***********
**********************************************
      EXT $BLLO,$BLUP 
* 
******************************************************************* 
* 
*     THE SCHED MODULE OF HP2100 REAL TIME EXECUTIVE CONSISTS OF
* 
*        1.  LIST PROCESSORS
*        2.  LINK PROCESSORS
*        3.  OPERATOR INPUT MESSAGE PROCESSORS
*        4.  SYSTEM START UP AND OPER INPUT REQUEST ACKNOWLEDGE 
*        5.  MEMORY PROTECT VIOLATION SCHEDULER PREPROCESSORS 
*        6.  ABORT AND TERMINATION PROCESSORS 
* 
******************************************************************* 
      HED --BUFFERS, CONSTANTS, POINTERS, ETC 
* 
TEMP  LDA EQT11 ***TEMPORARY WORKING STORAGE AREA 
TEMP1 STA TEMP5   * 
TEMP2 LDB EQT12   * 
TEMP3 STB TEMP6   * 
TEMP4 JSB $RTN    *   THESE TEMPS ARE USED TO INITIALIZE
TEMP5 NOP         *** SYSTEM AVAILABLE MEMORY.
TEMP6 NOP         *         AND ALSO
TMP   JMP $ALC    *   USED BY $PARS AS CONTIGUOUS BUFFER SPACE
      NOP     ??
WORK  EQU $WORK 
WPRIO NOP         * 
ASCI  BSS 1       * 
ASCI1 BSS 1     *** 
ASCI2 BSS 1 
DM5   DEC -5
* 
D2    DEC 2 
D4    DEC 4 
D5    DEC 5 
D6    DEC 6 
D7    DEC 7 
D9    DEC 9 
D14   DEC 14
D15   DEC 15
D17   DEC 17
* 
D1    OCT 1 
D3    DEC 3 
B77   OCT 77
B177  OCT 177 
B377  OCT 377 
* 
ZERO  REP 5 
      NOP 
DEF0  DEF ZERO
* 
* 
RETRN NOP 
DMST  NOP 
DMM5  DEC -5
D22   DEC 22
NWCNT NOP 
      HED ID-SEGMENT MAP  ID-SEGMENT MAP  ID-SEGMENT MAP
*     WORD        USE 
*           15  14 13 12  11 10  9   8  7  6   5  4  3   2  1  0
*             !         !         !         !         !         ! 
*      1    LIST LINKAGE
*             !         !         !         !         !         ! 
*    2-6    5 WORD TEMPORARY AREA USED FOR SPECIAL FLAGS IN QUEUES ETC. 
*             !         !         !         !         !         ! 
*      7    PRIORITY
*             !         !         !         !         !         ! 
*    @ 8    PRIMARY ENTRY POINT 
*             !         !         !         !         !         ! 
*      9    POINT OF SUSPENSION (XSUSP) 
*             !         !         !         !         !         ! 
*      10   A REGISTER AT SUSPENSION (XA) 
*             !         !         !         !         !         ! 
*      11   B REGISTER AT SUSPENSION (XB) 
*             !         !         !         !         !         ! 
*      12   E/O REGISTERS AT SUSPENSION (XEO) 
*             !         !         !         !         !         ! 
*    @ 13   NAME ( FIRST AND SECOND CHARACTERS )
*             !         !         !         !         !         ! 
*    @ 14   NAME (THIRD AND FOURTH CHARACTERS)
*             !         !         !         !         !         ! 
*    @ 15   NAME (FIFTH CHARACTER)---- TM CL  AM SS --- TYPE ---
*             !         !         !         !         !         ! 
*      16   NA     NP  W  A      O  L   R  D         --- STATUS-
*             !         !         !         !         !         ! 
*      17   TIME LIST LINKAGE WORD
*             !         !         !         !         !         ! 
*    @ 18   RESOLUTION T  -------MULTIPLE-----------------------
*             !         !         !         !         !         ! 
*    @ 19   LOW ORDER 16 BITS OF EXECUTE TIME LESS 24 HRS IN 10'S MS. 
*             !         !         !         !         !         ! 
*    @ 20   HIGH ORDER 16 BITS OF EXECUTE TIME
*             !         !         !         !         !         ! 
*      21   BA  FW    AT  RM RE PW  RN --FATHER ID-SEG. NUMBER--
*             !         !         !         !         !         ! 
*      22   RP ---# OF PAGES---,--MPFTI-- .. ----PARTITION #----
*             !         !         !         !         !         ! 
*    @ 23   LOW MAIN ADDRESS
*             !         !         !         !         !         ! 
*    @ 24   HI MAIN ADDRESS + 1 
*             !         !         !         !         !         ! 
*    @ 25   LOW BASE PAGE ADDRESS 
*             !         !         !         !         !         ! 
*    @ 26   HI BASE PAGE ADDRESS + 1
*             !         !         !         !         !         ! 
*    @ 27   DISC ADDRESS (LU (15),TRACK (14-7),SECTOR(6-0)
*             !         !         !         !         !         ! 
*      28   SWAP DISC ADDRESS (LU (15),TRACK (14-7),#TRACKS(6-0)
*             !         !         !         !         !         ! 
*      29   ID EXTENSION # (15-10)  EMA SIZE  (9-0) 
*             !         !         !         !         !         ! 
*      30   HIGH MAIN + LARGEST SEGMENT + 1  ( = 0 IF NO SEGMENT) 
*             !         !         !         !         !         ! 
*      31   SESSION MONITOR WORD 1
*             !         !         !         !         !         ! 
*      32   SESSION MONITOR WORD 2
*             !         !         !         !         !         ! 
*      33   SESSION MONITOR WORD 3
*             !         !         !         !         !         ! 
*           15  14 13 12  11 10  9   8  7  6   5  4  3   2  1  0
* 
*    @      WORDS USED IN SHORT ID SEGMENTS 
      SPC 5 
*     <<<<<<<<<<ID EXTENSION>>>>>>>>> 
      SPC 5 
*           15  14 13 12  11 10  9   8  7  6   5  4  3   2  1  0
* 
*       1   NS /       CURRENT MSEG #            / # PAGES MSEG 
*             !         !         !         !        !          ! 
*       2   MSEG STRT PAGE #/DE/   EMA START PAGE PHYSICAL
*             !         !         !         !        !          ! 
*       3                       /# OF TRACKS FOR EMA SWAP 
*           15  14 13 12  11 10  9   8  7  6   5  4  3   2  1  0
      SKP 
*     WHERE THE FLAG BITS MEAN: 
* 
*     TM = TEMP LOAD (COPY OF ID-SEG NOT ON DISC) 
*     CL = CORE LOCK (MAY NOT SWAP) 
*     AM = ALL MEMORY (PROGRAM USES ALL OF ITS AREA)
*     SS = SHORT SEGMENT (INDICATES A 9-WORD ID-SEGMENT)
*     NA = NO ABORT (PASS ABORT ERRORS TO THE PROGRAM INSTEAD)
*     NP = NO PRAMS ALLOWED ON RESCHEDULE.
*     W  = WAIT BIT (WAITING FOR PROG. WHOES ID-SEG ADD. IS IN WD.2)
*     A  = ABORT ON NEXT LIST ENTRY FOR THIS PGM. 
*     L  = LOAD IN PROGRESS 
*     O  = OPERATOR SUSPEND ON NEXT SCHEDULE ATTEMPT
*     R  = RESOURCE SAVE (SAVE RESOURCES WHEN SETING DORMANT) 
*     D  = DORMANT BIT (SET DORMANT ON NEXT SCHEDULE ATTEMPT) 
*     T  = TIME LIST ENTRY BIT (PROG IS IN THE TIME LIST) 
*     BA = BATCH (PROGRAM IS RUNNING UNDER BATCH) 
*     FW = FATHER IS WAITING (HE SCHEDULE WITH WAIT)
*     AT = ATTENTION BIT (OPERATOR HAS REQUESTED ATTENTION) 
*     RM = RE-ENTRENT MEMORY MUST BE MOVED BEFORE DISPATCHING PGM.
*     RE = RE-ENTRENT ROUTINE IN CONTROL NOW
*     PW = PROGRAM WAIT (SOME PROGRAM WANTS TO SCHEDULE THIS ONE )
*     RN = RESOURCE NUMBER EITHER OWNED OR LOCKED BY THIS PGM.
*     RP = RESERVED PARTITION FOR REQUESTING PROGRAMS ONLY. 
*     NS = 0/1 MSEG POINTING TO STD SEGMENT(SET BY .EMAP) / 
*              MSEG POINTING TO NON STD SEG (SET BY .EMIO)/ 
*     DE = SET IF EMA SIZE WAS DEFAULTED
* 
* 
*     $LIST STATE TRANSITION TABLE: 
* 
*     THE FOLLOWING TABLE DETAILS THE STATE TRANSITIONS EFFECTED BY 
*     $LIST.  THE MAJOR STATES ARE 0 THRU 6 (DORMANT THRU OP-SUSP)
*     AND THE STATE MODIFIERS ARE THE ADDITIONAL BITS SET FROM TIME 
*     TO TIME IN THE STATUS WORD. THE BITS WHICH AFFECT OR ARE
*     MODIFIED BY $LIST ARE (SEE ABOVE DESCRIPTION):
* 
*     BIT WEIGHT    POSITION
*      O  10        9 
*      W  4         12
*      R  2         7 
*      D  1         6 
* 
* 
* 0- OP SUSPEND BIT IS A DEFERRED ACTION BIT. SUSPEND ON NEXT SCHEDULE
*    ATTEMPT.  CAN'T DO IT NOW BECAUSE PROGRAM IS OP SUSPENDED OR 
*    IN THE TIME LIST.
* 
* W- WAIT BIT (EXEC 9 & 23) THIS PROGRAM SCHEDULED ANOTHER WITH WAIT. 
*    ID ADDRESS OF PERSON HE SCHEDULED IS IN 2ND OF WORD OF ID. 
* 
* R- SAVE RESOURCES WHEN SETTING DORMANT. NOT LEFT IN ID SEG AFTER
*    PROG IS SET DORMANT. 
* 
* D- DORMANT BIT IS A DEFERRED ACTION BIT.  IT MEANS TO SET THE 
*    PROGRAM DORMANT ON THE NEXT SCHEDULE ATTEMPT.  WE CAN'T DO IT
*    NOW BECAUSE HE IS I/O SUSPENDED. 
* 
* 
* 
* 
*     THESE BITS ARE COMBINED TO FORM 16 SUBSTATES AS PER THE TABLE BELOW 
*     THE ENTRYS IN EACH SQUARE OF THE TABLE DEFINE THE NEXT STATE AS 
*     FOLLOWS:
* 
*     THE FIRST DIGIT IS THE REQUESTED MAJOR TRANSITION (FROM 
*     THE $LIST CALL).
*     THE SECOND TWO NUMBERS (SEPERATED BY A ".") DEFINE THE NEXT 
*     MAJOR STATE . SUBSTATE.  THUS 62.10 INDICATES A OP-SUSPEND
*     REQUEST (6) CAUSES A MOVEMENT TO I/O SUSPEND (2) SUBSTATE 10
*     (THE O BIT IS SET). 
*      A "*" AS THE DESTINATION INDICATES THE CURRENT STATE/SUB-
*     STATE I.E. NO CHANGE. 
*     ILLEGAL OR UNEXPECTED STATES ARE MARKED WITH "X"
*     ONLY EXPECTED CALLS ARE PLOTTED.
* 
*     IN GENERAL CODE EXTERNAL TO $LIST MOVES PROGRAMS FROM SUB-STATE 
*     TO SUB-STATE WHILE ONLY $LIST CAN MOVE A PROGRAM FROM ONE 
*     MAJOR STATE TO ANOTHER. 
* 
*     ONE FINAL NOTE TO THE UNWARY.  THE CODE OF THE LIST PROCESSOR 
*     IN NO WAY FOLLOW THE CHART BELOW.  THE CHART IS TO GIVE THE 
*     READER AN IDEA OF WHAT THE FOREST LOOKS LIKE NOT THE TREES. 
*     DON'T MAKE THE MISTAKE OF THINKING THAT THE CHART SHOWS HOW 
*     ANYTHING IS DONE. 
      HED SYSTEM STATE TABLE******SYSTEM STATE TABLE*** 
*MAJOR STATE 0      1       2       3       4       5       6 
*SUB-STATES 
*---------!-----!-------!-------!-------!-------!-------!------ 
*    0      11.0  00.0    02.1    00.0    00.0    00.0    00.0
*                 22.0    11.0    11.0    11.0    11.0    11.0
*                 33.0    62.10   66.0    66.0    66.0
*                 44.0
*                 55.0
*                 66.0
*---------!-----!-------!-------!-------!-------!-------!------ 
*    1 D    X     X       02.1    X       X       X       X 
*                         10.0
*                         62.11 
*---------!-----!-------!-------!-------!-------!-------!------ 
*    2 R    11.0  00.2    02.3    00.2    00.2    00.2    06.3
*           66.3
*---------!-----!-------!-------!-------!-------!-------!------ 
*    3 RD   X     X       0*      X       X       X       0*
*                         10.2                            10.2
*---------!-----!-------!-------!-------!-------!-------!------ 
*    4 W    00.0  33.4    00.0    00.0    00.0    00.0    00.0
*                                 1*                      13.4
*                                 66.4
*---------!-----!-------!-------!-------!-------!-------!------ 
*    5 WD   X     X       X       X       X       X       X 
*---------!-----!-------!-------!-------!-------!-------!------ 
*    6 WR   0*    X       X       00.6    X       X       06.7
*           13.4
*           66.7
*---------!-----!-------!-------!-------!-------!-------!------ 
*    7 WRD  X     X       X       X       X       X       0*
*                                                         10.6
*---------!-----!-------!-------!-------!-------!-------!------ 
*   10 O    16.0  X       02.11   X       X       X       X 
*                         16.0
*                         6*
*---------!-----!-------!-------!-------!-------!-------!------ 
*   11 OD   X     X       0*      X       X       X       X 
*                         10.0
*                         6*
*---------!-----!-------!-------!-------!-------!-------!------ 
*   12 OR   X     X       02.13   X       X       X       X 
*---------!-----!-------!-------!-------!-------!-------!------ 
*   13 ORD  X     X       0*      X       X       X       X 
*                         16.3
*                         6*
*---------!-----!-------!-------!-------!-------!-------!------ 
*   14 OW   X     X       X       X       X       X       X 
*---------!-----!-------!-------!-------!-------!-------!------ 
*   15 OWD  X     X       X       X       X       X       X 
*---------!-----!-------!-------!-------!-------!-------!------ 
*   16 OWR  X     X       X       X       X       X       X 
*---------!-----!-------!-------!-------!-------!-------!------ 
*   17 OWRD X     X       X       X       X       X       X 
*---------!-----!-------!-------!-------!-------!-------!------ 
      HED REAL TIME SCHEDULER---LIST PROCESSOR SECTION--- 
* 
*        THE $LIST PROCESSOR SECTION OF THE HP-2100 REAL TIME 
*     EXECUTIVE PROCESSES THE FOLLOWING LIST REQUESTS 
*     1. DORMANT
*     2. SCHEDULE 
*     3. OPERATOR SUSPEND 
*     4. NON-OPERATOR SUSPEND 
*        A. I/O 
*        B. MEMORY AVAILABLE
*        C. DISC AVAILABLE
*     5. SEGMENT LOADING
* 
* 
* 
*        CALLING SEQUENCE 
* 
*               JSB $LIST 
*               OCT (ADDRESS CODE)(FUNCTION CODE) 
*               DEF (ADDRESS) <THIS WORD NOT ALWAYS REQUIRED> 
* 
*               IF A = 0, THEN NO MESSAGE & B = PROG ID ADDRESS 
*               IF A NOT= 0, THE A = ASCII ERROR CODE ADDRESS 
*                  & B CONTAINS DECIMAL ERROR CODE
* 
* 
*               ADDRESS CODES OF 0, 6, & 7 ARE RESERVED FOR 
*               DRIVERS.  THE ONLY FUNCTION CODE ALLOWED WITH 
*               THESE ADDRESS CODES IS  1 (SCHEDULE)
*               IF SUCCESSFUL A = 0  ELSE 
*                             B = 3  ILLEGAL STATUS 
*                             B = 5  NO SUCH PROG 
* 
*               FOR A DRIVER THAT WANTS TO CONVERT A PROG NAME
*               TO AN ID ADDRESS :     JSB $LIST
*                                      OCT 217
*                                      DEF PNAME   (PROG NAME)
* 
*               THIS PERFORMS A SIMPLE LIST MOVE LIKE CHANGES TO PRIORITY.
*               (IF THE PROGRAM IS DORMANT ITS A BIG NOP ). UPON
*               A SUCCESSFUL RETURN (A = 0) B WILL BE THE ID ADDRESS
*               OF THE PROGRAM. IF THE PROGRAM IS SCHEDULED MANY TIMES
*               DOING THIS REMOVES THE SEARCH TIME FOR THE ID SEG OF
*               THE PROGRAM.
* 
*                   FUNCTION CODE 
*                       0 = DORMANT REQUEST 
*                       1 = SCHEDULE REQUEST
*                       2 = I/O SUSPEND REQUEST 
*                       3 = GENERAL WAIT LIST REQUEST 
*                       4 = MEMORY AVAILABEL REQUEST
*                       5 = DISK ALLOCATION REQUEST 
*                       6 = OPERATOR SUSPEND REQUEST
*                      17 = RELINK PROGRAM REQUEST
*                      10 THRU 16 ARE NOT ASSIGNED
* 
*                   ADDRESS CODE
*                       0 = ID SEGMENT ADDRESS(5 PARAMETERS PASSED) 
*                       1 = ID SEGMENT ADDRESS(AS NEXT OCT VALUE) 
*                       2 = ASCII PROGRAM NAME ADDRESS(A DEF) 
*                       3 = ID SEGMENT ADDRESS IN WORK <NO DEF ADDR.> 
*                       4 = ID SEGMENT ADDRESS IN B-REG<NO DEF ADDR.> 
*                       5 = ID SEGMENT ADDRESS IN XEQT <NO DEF ADDR.> 
*                       6 = ID SEGMENT ADDRESS (NEXT PRAM IS VALUE TO 
*                                               PUT INTO B REG @ SUSP)
*                       7 = ASCII PROG NAME (PASSES 5 PARAMETERS) 
* 
* 
* 
*                   FOR EXAMPLE 
* 
* ---0,7,& 6 (FOR DRIVERS)-------  ---1----   ---2----  ----3-----
* -                             -  -      -   -      -  -        -
* 
* JSB $LIST  JSB $LIST  JSB $LIST  JSB $LIST  JSB $LIST JSB $LIST 
* OCT 001    OCT 701    OCT 601    OCT 1XX    OCT 2XX   OCT 3XX 
* DEF RETRN  DEF RETRN  OCT IDADR  OCT IDADR  DEF PNAME  ID ADR IN $WORK
* OCT IDADR  DEF PNAME  OCT BVAL
* DEF PRAM1  DEF PRAM1
* DEF PRAM2  DEF PRAM2
* DEF PRAM3  DEF PRAM3       (NO INDIRECT DEFS !!)
* DEF PRAM4  DEF PRAM4
* DEF PRAM5  DEF PRAM5
* 
* 
* 
* ---4-----       ------5-------- 
* -       -       -             - 
* 
* JSB $LIST         JSB $LIST 
* OCT 4XX           OCT 5XX 
*  ID ADR IN B REG    ID ADR IN XEQT
* 
* 
* 
* 
* 
      SKP 
* 
* 
**************  WATCH THE E REGISTER  ******************
* 
* 
*     ENTRY MADE BY       $LIST NOP 
*                               RSA 
*                               SJP $LIST 
* 
* 
$LST  RAL,RAL       ROTATE THE DMS STATUS AND SAVE
      STA DMST      NOW PUT DMS STATUS IN E-REGISTER
      RAL,ELA       E = 0/1 CALL CAME FROM SYS/USER MAP 
* 
      LDA $LIST     GET ADDRESS OF CALL 
      STA $LSTM     SAVE FOR CRASH DUMP ANALIZER ( HOPE WE
*                                         NEVER USE IT !!!!!!)
      SEZ           (E= 0/1 CAME FROM SYS/USER MAP) 
      JMP UMAP1     CALL CAME FROM THE USER MAP ! 
* 
      LDA $LIST,I   CALL FROM SAME MAP (SYSTEM MAP) 
      AND D15       PUT FUTURE STATUS INTO L0091
      STA L0091      STORE AWAY FUNCTION CODE 
      XOR $LIST,I  FORM ADDR CODE 
* 
LIST1 ALF,ALF        AND PUT INTO LOW END 
      RAL,RAL 
      CPA D4        ADDRESS IN B-REG? 
      JMP L0021     YES GO SET UP 
      CPA D3        ADDRESS IN WORK?
      JMP L0060     YES GO SET UP 
      LDB XEQT      PRESET FOR CURRENT EXECUTING PGM. 
      CPA D5        CURRENT PGM?
      JMP L0021     YES GO SET IT UP
      ISZ $LIST     STEP TO ADDRESS WORD
* 
      SEZ           WHICH MAP ? 
      JMP UMAP2     USER MAP (ALTERNATE MAP)
* 
      LDB $LIST,I   THIS MAP SO GET IT TO B 
LIST2 CPA D1        IS ADDRESS NOW IN B?
      JMP L0021     YES GO SET IT UP
* 
      CPA D2        DOES B POINT TO AN ASCII NAME ? 
      JMP DL02      YES SO SEE IF THE PROGRAM EXISTS
      CPA D6
      JMP DL06
* 
      STB RETRN     B MUST BE A RETURN ADDRESS
      ISZ $LIST     BUMP TO THE PROGRAM ADDRESS OR NAME 
      LDB $LIST     AND SAVE AS A POINTER 
      STB TEMP1     FOR PARAMETER PASSING 
      LDB RETRN     GET THE RETURN ADDRESS
      CMB,INB       DECREMENT WITHOUT AFFECTING E-REG 
      CMB 
      STB $LIST     THIS THEN SETS UP RETURN ADDRESS
* 
      SEZ           WHICH MAP 
      JMP UMAP3     STILL THE USER MAP
      LDB TEMP1,I   GET THE ID ADDRESS OR PROG NAME ADDR
* 
LIST3 CPA D7        ASCII PROGRAM NAME ?
      JMP DL07      YES 
      SZA,RSS       ID ADDRESS
      JMP DL00      YES 
* 
* 
* 
L0075 LDA $ILST     ILLEGAL STATUS MESSAGE
      LDB D3        ILLEGAL STATUS ERROR CODE 
      JMP L0015 
* 
      SPC 6 
* 
* 
* 
* 
UMAP1 XLA $LIST,I   GET THE REQUEST CODE
      AND D15       SAVE LOWER BITS 
      STA L0091     SOCK IT AWAY AS FUTURE STATE OF PROGRAM 
      XLA $LIST,I   GET IT AGAIN
      XOR L0091     NOW GET THE UPPER BITS
      JMP LIST1     NOW GO SEE WHAT TYPE CALL 
* 
* 
UMAP2 XLB $LIST,I   GET POSSIBLE ID ADDRESS 
      JMP LIST2     AND CONTINUE
* 
* 
UMAP3 XLB TEMP1,I   GET ID ADDRESS OF PROGRAM NAME ADDRESS &
      JMP LIST3     CONTINUE
      HED LIST PROCESSOR--REQUEST CODE DETERMINATION
* 
*     PROCESS ID SEGMENT ACCORDING TO REQUEST CODE
* 
DL02  SEZ           IS NAME IN THIS MAP 
      JSB PLNAM     NO, SO PULL IT IN LOCALLY 
      JSB TNAME     NOW ID ADDR IN B REG
      SEZ,RSS       SKIP IF NOT FOUND OR SHORT ID 
      JMP L0021     GO SET UP WORK ADDRESSES
* 
NPRG  LDA $NOPG     GET THE NO SUCH PROG ADDRESS
      LDB D5        AND THE NO SUCH PROG ERROR CODE 
      JMP L0015     GO TO RETURN
* 
* 
L0060 LDB WORK     GET ID SEGMENT ADDRESS 
L0021 JSB DORM?    GO SET UP WORK ADDRESSES 
* 
      LDB L0091    GET THE REQUEST CODE 
      SZB,RSS       CHECK IF DORMANT REQUEST
      JMP L0100     DORMANT REQUEST 
      CPB D1        CHECK IF SCHEDULE REQUEST 
      JMP L0200     YES 
      CPB D6        CHECK IF OPERATOR SUSPEND REQUEST 
      JMP L0300     YES 
      CPB D15       CHECK IF LINKAGE UPDATE REQUEST 
      JMP L0135     YES 
      JMP L0400     MUST BE A SIMPLE LIST MOVE
       SPC 3
      HED LIST PROCESSOR--DRIVER SERVICING SECTION. 
* 
*     THIS PROCESSES LIST CALLS OF 0, 6, & 7.  THESE ARE RESERVED 
*     FOR DRIVERS.  THE OPERATING SYSTEM MAKES THE ASSUMPTION 
*     THAT IF YOU KNOW HOW TO CALL $LIST YOU KNOW WHAT YOUR 
*     DOING.  IN ADDITION, IF A DRIVER WANTS A PROGRAM IT WANTS 
*     IT IN A HURRY.  THUS $LIST DOES MINIMAL ERROR CHECKING FOR
*     DRIVERS (AND NONE FOR THE OP SYSTEM).  HERE A CHECK IS MADE 
*     ONLY TO SEE IF THE PROGRAM IS DORMANT (ALSO IF THE PROGRAM
*     EXISTS IF THE CALL WAS BY NAME RATHER THAN BY ID ADDRESS).
*     NO SIZE CHECKS OR EMPTY ID CHECKS ARE MADE.  IF YOUR KNOW 
*     ENOUGH TO CALL $LIST, YOU KNOW ENOUGH TO MAKE SURE THE
*     PROGRAM EXISTS AND THAT THERE IS A PARTITION TO RUN IT IN.
*     THE REAL ADVANTAGE TO THIS PHILOSOPHY IS THAT DRIVERS ARE 
*     GIVEN OP SYSTEM STATUS AND THEREFOR OP SYSTEM SPEED IN
*     PROGRAM SCHEDULING.  THE SYSTEM WILL SCHEDULE THE PROGRAM AS
*     FAST AS IT POSSIBLY CAN.
*     HINT.  IF YOUR SCHEDULING DISC RESIDENT PROGRAMS, HAVE THEM 
*     TERMINATE SAVING RESOURCES OR SERIALLY REUSABLE.  IT WILL 
*     SAVE LOTS OF DISC TIME. 
* 
* 
* 
* 
DL07  SEZ           WELL WHICH MAP IS IT IN ? 
      JSB PLNAM     ALTERNATE MAP, SO PULL IN LOCALLY 
      JSB TNAME     GET THE ID ADDRESS
      SEZ           DID THE PROGRAM EXIST ? 
      JMP NPRG      NO, SO TELL THE FOLKES
* 
DL00  JSB DORM?     SET UP THE $LIST PRAMS & SEE IF DORMANT 
      SZA           PROG DORMANT ?
      JMP L0075     NO, TELL THE DRIVER TO FORGET IT
      JSB PRAMX     GO PICK UP THE PARAMETERS 
      JMP L0275     GO SCHEDULE THE PROGRAM 
* 
DL06  ISZ $LIST     BUMP TO FUTURE B-REG @ SUSP(SETS RETURN ADDR) 
      SEZ           WHICH MAP ? 
      JMP DL061     THE OTHER ONE.
* 
      LDA $LIST,I   GEY THE B REG @ SUSP
DL062 STA TEMPX     AND SAVE TEMPORARIALLY
      JSB DORM?     SET UP LIST PARAMETERS & CHK FOR DORMANT
      SZA           PROG DORMANT ?
      JMP L0075     TELL DRIVER TO FORGET IT. 
      LDB WORK      GET THE ID ADDRESS
      ADB D10       AND INDEX TO THE B REG @ SUSP WORD
      LDA TEMPX     GET THE VALUE 
      STA B,I       AND PUT IT IN THE ID SEG
      JMP L0275     NOW GO SCHEDULE THE PROGRAM 
* 
DL061 XLA $LIST,I   GET THE B REG AT SUSP VALUE 
      JMP DL062        CONTINUE 
* 
* 
      SKP 
* 
      HED LIST PROCESSOR--DORMANT REQUEST 
* 
*         DORMANT REQUEST 
* 
*        THE DORMANT REQUEST IS PROCESSED AS FOLLOWS: 
*              IF ABORT BIT SET, MAKE PROGRAM DORMANT 
*              IF ALREADY DORMANT, RETURN 
*              IF SCHEDULED, THEN ENTERED INTO DORMANT LIST, POINT
*                   OF SUSPENSION CLEARED.
*                   IF ID SEGMENT ADDRESS IS SAME AS RESIDING 
*                   BACKGROUND DISC RESIDENT PROGRAM, THEN BKRES
*                   FLAGS ARE CLEARED SO ANOTHER PROGRAM MAY BE 
*                   LOADED INTO THE AREA. 
*                   IF ID SEGMENT ADDRESS IS SAME AS RESIDING REAL
*                   TIME DISC RESIDENT PROGRAM, THEN RDISK FLAGS
*                   ARE CLEARED SO ANOTHER PROGRAM MAY BE LOADED
*                   INTO THE AREA.
*              IF NOT ONE OF ABOVE, THEN DORMANT BIT SET IN STATUS
      SPC 1 
L0100 LDB WSTAT,I  CHECK IF ABORT BIT SET 
      BLF 
      RBL,SLB,BLF 
      JMP L0115    YES, SO GO MAKE DORMANT
      CPA D2        IF I/O SUSPENDED
L0103 ALF,SLA,RAL   SET DORMANT BIT 
      JMP L0350     ELSE GO CHECK RESOURCE BIT
* 
      IOR WSTAT,I   MERGE THE CURRENT STATUS
      AND CL.NP     CLEAR NO PARMS BIT
L0105 STA WSTAT,I   RESET THE NEW STATUS
      JMP L0014    GO TO EXIT 
* 
L0115 LDA WORK     CLEAR ID SEG TEMP AND SET B
      LDB DEF0    (CLEAR 5 TEMP WORDS TO 0) 
      JSB PRAM
      LDB WORK      SET FLAG FOR DISPATCHER 
      CLA 
      CPB XEQT
      STA $PVCN 
      ADB D8        LINK THROUGH XSUSP
      LDA $ZZZZ     SO RESIDENT FLAGS 
      STB $ZZZZ     ARE 
      STA B,I       CLEARED 
      ADB D6        INDEX TO TYPE WORD
      LDA B,I       AND CLEAR 
      AND NCLAM     THE CORE LOCK AND ALL OF MEMORY 
      STA B,I       BITS
      CLA 
      STA XEQT      CLEAR CURRENT PGM FLAG IN CASE IT IS
      SPC 1 
L0130 STA WSTAT,I   SET THE NEW STATUS
      AND D15       GET THE ADDITION CODE 
L0135 LDB L0090     SET B FOR LINK
      JSB LINK      RELINK THE PROG 
L0014 CLA           SET FOR NORMAL RETURN 
      LDB WORK      RETURN THE ID ADDRESS 
L0015 ISZ $LIST     STEP TO RETURN ADDRESS
      JRS DMST $LIST,I  LOOK MA !  NO LABEL !!
      SPC 1 
      SPC 1 
L0350 SLB,RSS       IF RESOURCE BIT NOT SET 
      JMP L0115     GO MAKE DORMANT 
      CPA D6        IF OPERATOR SUSPENDED 
      JMP L0103     GO SET DORMANT BIT TOO. 
* 
L0355 LDA WSTAT,I   GET OLD STATUS
      AND CLD.R     CLEAR THE "R" AND "D" BITS
      LDB WORK      IF NOT CURRENT
      CPB XEQT      PROGRAM THEN
      RSS 
      IOR B20K      SET THE NO PRAMS BIT. 
      JMP L0130     GO PUT IN THE DORM LIST 
      SPC 2 
$LSTM NOP           DON'T MOVE OR REARRANGE THESE THREE 
L0090 NOP           WORDS. CRASH DUMP ANALIZER USES THEM. 
L0091 NOP 
      SPC 1 
NCLAM OCT 177637
CL.NP OCT 157777
      HED LIST PROCESSOR--SCHEDULE REQUEST
* 
*     SCHEDULE REQUEST
* 
*        THE SCHEDULE REQUEST IS PROCESSED AS FOLLOWS:
*              IF ABORT BIT SET, STORE ID SEGMENT ADDRESS SUCH THAT 
*                   PROGRAM WILL BE ABORTED AT NEXT ENTRY FROM XEQ
*              IF DORMANT BIT SET, GO TO DORMANT REQUEST
*              IF OPERATOR-SUSPEND BIT SET, GO TO OPERATOR-SUSPEND
*                   REQUEST 
*              IF SCHEDULED, THEN STATUS ERROR EXIT 
*              IF CURRENT STATUS NOT ONE OF ABOVE, THE PROGRAM IS 
*                   ENTERED INTO THE SCHEDULE LIST. 
*              NOTE: THE ID TIMESLICE WORD IS SET TO A 1 TO INDICATE
*                    A NEW SCHEDULE HAS BEEN PERFORMED. 
* 
* 
L0200 CPA D6        IF OP-SUSP
      JMP L0250     GO CHECK FOR DORMANT BIT
      LDB WSTAT,I   GET WHOLE STATUS WORD 
* 
      SZA           IF DORMANT OR 
      CPA D2        IF I/O SUSP. THEN 
      BLF,SLB,BLF   ROTATE AND SKIP 
      JMP L0255     ELSE GO CHECK WAIT BIT
* 
      RBR,SLB,RBL   IF OP-SUSP BIT SET
      JMP L0220     GO CHECK FURTHER
* 
L0270 RBL           DORM BIT TO 15
L0271 CLA,INA       SET A FOR SCHEDULE
      SSB           IF DORM BIT SET 
      JMP L0100     GO SET DORMANT
* 
*        CHECK FOR SERIALLY REUSABLE OR SAVE RESOURCES
*        OR OP SUSPEND TERMINATION LAST TIME THROUGH .
* 
* 
      LDB L0090     GET THE CURRENT STATUS
      SZB           IF 0
      CPB D6        OR 6
      RSS           THEN CHECK ON THE PROGS LAST PARTITION
      JMP L0290     ELSE GO SCHEDULE THE PROGRAM
* 
L0275 LDB WORK      GET THE ID ADDRESS
      ADB D14       INDEX TO THE TYPE WORD
      LDA B,I       GET THE TYPE
      AND D15                   ONLY
      CPA D1        NOW IF ITS MEMORY RES, THEN NO PARTITION
      JMP L0290     SO, WE JUST SCHEDULE
* 
      ADB D7        MUST BE 1ST DISPATCH & DISC RES 
      LDA B,I       GET THE PARTITION WORD
      AND B77       AND USE IT TO INDEX INTO THE
      MPY D7       $MATA TABLE
      ADA $MATA 
      ADA D3        GET TO THE D BIT WORD 
      LDA A,I       AND PULL IT IN
      AND B20K      MASK IT 
      SZA,RSS       IS IT SET ? 
      JMP L0290     NO, SO GO SCHEDULE
* 
      LDA WORK      GET THE ID ADDRESS TP 1 
      JSB DMAL      AND SEE IF HE IS STILL IN THE PARTITION.
* 
L0290 CLA,INA       SET FOR SCHEDULE
      STA WTSLC,I   INDICATE NEW SCHEDULE 
      JMP L0130     AND DO IT TO IT !!! 
* 
* 
* 
* 
* 
L0220 RBL,SLB       CHECK RESOURCE BIT
      JMP L0230     IF SET GO CLEAR OP-SUSP 
      SSB           IF DORM BIT SET 
      JMP L0271     GO MAKE DORMANT 
* 
L0230 XOR B1006     CLEAR THE OP-SUSP BIT AND 
      JMP L0280     GO OP-SUSP THE PGM. 
* 
L0250 LDA WSTAT,I   IF OP-SUSP BIT SET
      AND B100      AND DORM BIT SET
      SZA 
      JMP L0355     GO CLEAR BIT AND SET DORMENT
* 
L0255 LDB WSTAT,I   GET THE WHOLE STATUS WORD 
      BLF,BLF          SHIFT LEFT EIGHT.
      LDA WSTAT,I   IF WAIT BIT SET 
      ALF,SLA,ALF   THEN
      ALF,SLA,ALF   GO MOVE TO WAIT LIST (SKIPS)
      JMP L0270     ELSE, GO SCHEDULE.
* 
      XOR D3        CHANGE STATUS TO 3
      AND D15 
L0280 XOR WSTAT,I   AND 
      JMP L0130     GO RELINK 
      HED  LIST PROCESSOR--SUSPEND REQUESTS 
* 
*     OPERATOR SUSPEND REQUEST
* 
*        THE OPERATOR-SUSPEND REQUEST IS PROCESSED AS FOLLOWS:
*              IF DORMANT, THEN ENTER INTO OPERATOR SUSPEND LIST
*              IF ALREADY OPERATOR SUSPEND, THEN STATUS ERROR EXIT
*              IF SCHEDULED, THEN ENTER INTO OPERATOR SUSPEND LIST
*              IF NOT ONE OF ABOVE, THEN OPERATOR-SUSPEND BIT SET 
* 
L0300 CPA D6        OR OP-SUSP
      JMP L0075     REJECT THE REQUEST
* 
      CPA D2        IF I/O SUSP 
      JMP L0310     GO SET TO "O" BIT 
* 
      CCE,SZA       IF DORM WITH RESOURCES SKIP 
      JMP L0400     ELSE GO RELINK I.E. SET OP-SUSP.
* 
      ELA,ELA       IF DORM BUT IN TIME LIST
      ADA WSTAT 
      LDA A,I 
      AND B10K      THEN SET O BIT
      SZA           IN TIME LIST ?
      JMP L0310     YES 
* 
      LDB WSTAT,I   GET FULL STATUS WORD
      SZB,RSS       ENTIRE STATUS WORD = 0  ? 
      JMP L0075     YES, ITS AN ERROR 
* 
      LDA B306      ELSE SET "R" AND "D" BITS AND 
      IOR B         PUT IN OP-SUSP LIST 
      JMP L0130 
* 
L0310 LDA B1000     SET OPER-SUSP BIT IN STATUS 
      IOR WSTAT,I 
      JMP L0105     GO SET BIT AND EXIT 
      SPC 1 
* 
*     NON-OPERATOR SUSPEND REQUEST
* 
*        THE NON-OPERATOR SUSPEND REQUEST IS PROCESSED AS FOLLOWS:
*              THE PROGRAM IS ENTERED INTO THE REQUESTED LIST AND 
*              THE NEW STATUS REPLACES THE 4 LOW ORDER BITS OF THE
*              PROGRAM STATUS-THUS SAVING THE DORMANT OR OPERATOR-
*              SUSPEND BITS THAT MAY BE PRESENT.
* 
* 
L0400 LDA WSTAT,I  UPDATE STATUS SAVING ALL 
      AND C17      BUT LOW 4 BITS 
      IOR L0091 
      JMP L0130    GO TO EXIT 
      SPC 1 
C17   OCT 177760
B100  OCT 100 
B306  OCT 306 
B1006 OCT 1006
CLD.R OCT 57460 
D21   DEC 21
      SKP 
* 
*  THE PLNAM SUBROUTINE PULLS THREE WORDS OUT OF THE ALTERNATE
*  MAP (ASCII PROGRAM NAME).  THE ROUTINE IS TYPICALLY CALLED 
*  DIRECTLY BEFORE TNAME SO THAT THE PROGRAM NAME IS LOCAL AND
*  THE ID SEGMENTS CAN BE SEARCHED. 
* 
* 
*  CALLING SEQUENCE      LDB ADDRESS OF THREE WORD ARRAY
*                        JSB PLNAM
* 
*  ON RETURN             B = LOCAL ADDRESS OF ARRAY 
*                        A = DESTROYED
* 
* 
PLNAM NOP 
      XLA B,I       GET THE 1ST ONE 
      STA PNAME     AND SAVE IT 
      INB           DO THIS TWO MORE TIMES
      XLA B,I 
      STA PNAME+1 
      INB 
      XLA B,I 
      STA PNAME+2 
      LDB DPNAM 
      JMP PLNAM,I 
* 
DPNAM DEF PNAME 
PNAME BSS 3         DON'T REARRANGE THESE WORDS OR MOVE THEM
TEMPX NOP           I NEED THEM LATER FOR CONTIGIOUS SPACE
TEMPY NOP            IN THE PRAMX ROUTINE 
TEMPZ NOP 
* 
* 
*   THE DORM? SUBROUTINE IS CALLED BY THE $LIST PROCESSOR FOR 
*   ALL CALLS IT'S PRIMARY FUNCTION IN LIFE IS TO SET UP
*   WORK, WPRIO, WSTAT, AND L0090.  IN ADDITION IT RETURNS
*   L0090, THE PROGRAMS CURRENT STATUS IN THE A REGISTER. 
*   $LIST FUNCTION CODES OF 0, 6, AND 7  (THE DRIVER $LIST
*   CALLS) USE THIS TO SEE IF THE PROGRAM IS DORMANT. 
* 
*        CALLING SEQUENCE    LDB ID ADDRESS 
*                            JSB DORM?
*        ON RETURN           A-REG = CURRENT STATUS 0-6 
* 
* 
DORM? NOP 
      STB $WORK     SET UP THE ID ADDRESS FOR LATER 
      ADB D6        AND 
      STB WPRIO     THE PRIORITY WORD 
      ADB D9        AND 
      STB WSTAT     THE STATUS WORD 
      LDA B,I       GET THE OLD STATUS
      AND D15       KEEP ONLY STATUS
      STA L0090     SET UP THE STATUS WORDTATUS 
      ADB D15       ADVANCE TO ID 30
      STB WTSLC      AND DEFINE TIMESLICE WORD
      JMP DORM?,I   RETURN TO THE CALLER
* 
WTSLC NOP 
      HED SET UP ID SEGMENT TEMP PARAMETERS 
* 
* 
*  THE PRAMX SUBROUTINE IS CALLED BY THE $LIST PROCESSOR
*  FOR ADDRESS CODES OF 0 & 7.  THESE ADDRESS CODES 
*  HAVE BEEN RESERVED FOR DRIVERS WHO WISH TO SCHEDULE
*  PROGRAMS.  THE SUBROUTINE CALLS EITHOR THE PRAM OR 
*  XPRAM SUBROUTINE TO STUFF THE PARAMETERS INTO THE PROGRAMS 
*  ID SEGMENT TEMP AREA. PRAM IS CALLED IF THE DRIVER CALLED
*  $LIST FROM THE SYSTEM MAP, XPRAM IS CALLED IF THE DRIVER 
*  IS IN THE SYSTEM MAP.
*  ACTUALLY PRAMX IS ONLY CALLED ONCE & THUS NEED NOT BE A
*  SUBROUTINE.  HOWEVER, FOR THOSE WHO MUST READ THIS CODE
*  IT HELPS SEPERATE THE LIST MOVE PROBLEM FROM THE PARAMETER 
*  MOVE PROBLEM AND MAKES THE CODE MUCH EASIER TO READ &
*  UNDERSTAND.
* 
* 
*   CALLING SEQUENCE   JSB PRAMX
* 
*   $WORK  HAS PROG ID ADDRESS
*   DMST   HAS THE DMS STATUS IN IT 
*   TEMP1  POINTS TO THE WORD BEFORE THE PARAMETER LIST 
*   RETRN  HAS RETURN ADDRESS OF THE LIST CALL
* 
*  RESTRICTIONS - ASSUMPTIONS 
*  1) DEFS IN THE $LIST CALL MUST BE DIRECT 
*        (NEED NOT APPLY IF DRIVER IN SYSTEM MAP) 
*  2) AT LEAST ONE PARAMETER MUST BE SUPPLIED (IE 1 DEF)
*  3) RETURN ADDRESS MUST DELIMIT PARAMETER LIST. 
*  4) 5 PARAMETERS MAX
* 
* 
PRAMX NOP 
      ISZ TEMP1     BUMP $LIST TO POINT TO 1ST PRAM 
      LDB RETRN     GET RETURN ADDRESS
      CMB,INB       AND USE THIS TO 
      ADB TEMP1     SEE HOW MANY PARAMETERS TO PASS 
      STB DM5       SAVE TO FAKE OUT PRAM OR XPRAM
* 
      LDA DMST      NOW GET THE DMS STATUS
      RAL,ELA       E = 1 MEANS CALL FROM USER MAP
      SEZ,RSS       WELL, WHICH MAP ? 
      JMP PRMEX     SYS MAP , SO GO STUFF THE PRAMETERS 
* 
      CMB,INB       USER, SO PULL ADDRESSES IN LOCALLY
      CBX           PUT # IN X
      LDA TEMP1     GET SOURCE
      LDB DPNAM     AND DESTINATION 
      MWF           AND BRING EM IN.
* 
      LDA WORK      NOW GET THE PROGRAMS ID ADDRESS 
      LDB DPNAM     AND THE LOCAL ADDRESS 
      ADB SIGN      MAKE IT ADDRESS INDIRECT
      JSB XPRAM     AND GO STUFF THE ID SEGMENT 
      JMP PRMX3     NOW GO RETURN 
* 
PRMEX LDA WORK       ID ADDRESS TO A
      LDB TEMP1      ADDRESS OF PARAMETERS TO B 
      ADB SIGN       SET THE SIGN BIT TOO 
      JSB PRAM       GO STUFF THE ID SEGMENT
* 
PRMX3 LDA DMM5       GET A -5 BACK TO 
      STA DM5        LOCATIOM DM5 SO THAT THE OTHER PROCESSORS
      JMP PRAMX,I    ARE HAPPY.  - RETURN TO CALLER - 
* 
* 
* 
* 
      HED LINK UPDATE PROCESSOR 
* 
*        THE LINK PROCESSOR SECTION OF THE HP-21XX REAL TIME
*     EXECUTIVE 
*     1. REMOVES A PROGRAM FROM A LIST
*      AND
*     2. ENTERS THE PROGRAM INTO ANOTHER LIST AT THE PROPER PLACE 
*        ACCORDING TO PRIORITY LEVEL. 
* 
* 
*     NOTE: THE ROUTINE $RLNK PROVIDES AN INTERFACE BETWEEN THE 
*           RTIME MODULE AND THE LINK PROCESSOR. IT'S FUNCTION
*           IS TO MOVE A PROGRAM BEHIND ALL OTHER PROGRAMS (OF THE
*           SAME PRIORITY) IN THE SCHEDULED LIST. THIS ROUTINE IS 
*           CALLED ONLY WHEN A TIMESLICED PROGRAM HAS USED A FULL 
*           TIMESLICE.
* 
* 
* 
*     CALLING SEQUENCE
* 
*         LDB CODE1 
*         LDA CODE2 
*         JSB LINK
* 
*              WHERE
*                CODE1 = CODE OF REMOVAL LIST 
*                CODE2 = CODE OF INSERTION LIST 
*              THE ID SEGMENT IS ASSUMED TO BE LOCATED IN WORK
*              AND WPRIO SET
* 
* 
*        THE REMOVAL OF PROGRAM FROM A LIST CONSISTS OF:
*              1. IF I/O LIST (CODE 2), THEN THIS IS SPECIAL CASE 
*                 AND DOES NOT REQUIRE REMOVAL. 
*              2. IF NULL LIST, THEN ERROR EXIT TAKEN.
*              3. IF FIRST AND ONLY PROGRAM IN LIST, THEN LIST
*                 VALUE SET TO ZERO.
*              4. IF FIRST PROGRAM IN LIST, BUT NOT THE ONLY
*                 PROGRAM IN LIST(LINKAGE NOT ZERO), THEN SET LIST
*                 VALUE TO THE LINKAGE VALUE. 
*              5. IF IN MIDDLE OF LIST, THE LINKAGE OF THE ID SEG 
*                 MENT WHICH POINTS TO THE PROGRAM TO BE REMOVED
*                 IS SET TO THE LINKAGE VALUE OF THE PROGRAM THAT 
*                 IS REMOVED. 
*              6. IF LAST PROGRAM IN LIST, THE LINKAGE VALUE OF 
*                 PREVIOUS PROGRAM IN LIST IS SET TO ZERO.
* 
LINK  NOP           ENTRY/EXIT
      SZB           IGNOR DORMANT AND 
      CPB D2        I/O LIST REQUESTS 
      JMP LK100      YES, SEE IF ADDITION.
      ADB LLIST     ADD TOP OF LIST POINTER 
* 
LK010 STB TEMP     TOP OF REMOVAL LIST
      LDB B,I      GET TOP OF LIST POINTER
      SZB,RSS      END OF LIST? 
      JMP LINK,I    FORGET IT ????????????????????????????? 
      CPB WORK     MATCHES PROGRAM? 
      RSS           YES 
      JMP LK010     NO, KEEP SEARCHING
      LDB B,I      UPDATE LINKAGE TO BYPASS 
      STB TEMP,I   THE DELETED ID SEG 
      HED LINK PROCESSOR--ADDING PROGRAM TO A LIST
* 
*     ADD A PROGRAM TO A LIST 
* 
*        THE ADDITION OF PROGRAM TO A LIST CONSISTS OF: 
*              1. IF I/O LIST (CODE 2), THEN THIS IS SPECIAL CASE 
*                 AND NO ADDITION MADE TO LIST. 
*              2. IF NULL LIST, THEN LIST VALUE SET TO POINT TO ID
*                 SEGMENT OF PROGRAM TO BE ADDED AND THE LINKAGE
*                 SET TO ZERO.
*              3. IF NOT NULL LIST, THE PROGRAM IS INSERTED INTO
*                 LIST ACCORDING TO PRIORITY LEVEL AND LINKAGES 
*                 CHANGED TO REFLECT THIS INSERTION.
*              4. IF OF LOWER PRIOR. THAN ANY PROGRAM IN LIST, THEN 
*                 LAST LINKAGE IS SET TO POINT TO THE PROGRAM TO
*                 BE ADDED AND THE PROGRAM LINKAGE IS CLEARED.
* 
LK100 SZA           IGNOR DORMANT AND 
      CPA D2        I/O LIST REQUESTS 
      JMP LINK,I     YES, RETURN
      ADA LLIST     ADD TOP OF LIST POINTER 
* 
LK110 STA TEMP      SAVE TOP OF LIST POINTER
      LDA A,I       GET POINTER 
      SZA,RSS       END OF LIST?
      JMP LK140      YES, LINK IN NEW PROG
      CPA WORK     IS IT A DUPLIC. PROG?
      JMP LK150     YES, DUPLIC SO RETURN 
      STA B        NOT DUPLIC, COMPARE PRIORITY 
      ADB D6         OF WORK ID SEG 
      LDB B,I        AGAINST
      CMB,INB        CURRENT
      ADB WPRIO,I    ID SEG 
      SSB,RSS       WORK < CURRENT? 
      JMP LK110      NO, SEE NEXT ONE 
* 
LK140 STA WORK,I    LINK THIS TO FOLLOW WORK
      LDA WORK      LINK WORK TO FOLLOW 
      STA TEMP,I     PREVIOUS PROG
* 
LK150 JMP LINK,I    RETURN
* 
* 
LLIST DEF DORMT    TOP OF LIST ADDRESS
WSTAT NOP           WORK STATUS ADDRESS 
DM32  DEC -32 
B1000 OCT 1000
B4000 OCT 4000
COM   OCT 54
TBUF  DEF TEMP5 
TBUFS DEF TEMP5+7 
DM58  DEC -58 
      SKP 
* 
*  $RLNK ALLOWS THE RTIME MODULE TO MOVE A PROGRAM BEHIND ALL 
*  OTHER PROGRAMS OF THE SAME PRIORITY IN THE SCHEDULED LIST. 
*  THIS IS ACCOMPLISHED BY CALLING LINK TO REMOVE THE PROGRAM 
*  FROM THE SCHEDULED LIST AND THEN INSERT THE PROG BACK INTO 
* 
* 
* 
$RLNK NOP 
      LDA XEQT      DEFINE THE PROGRAM
      STA WORK        TO BE RELINKED
      LDA XPRIO     DEFINE IT'S 
      STA WPRIO       PRIORITY ALSO 
* 
      CLA,INA       REMOVAL CODE (SCHEDULED LIST) 
      CLB,INB       INSERTION CODE (SCHEDULED LIST) 
      STA $LIST     FORCE A SCAN OF SCHEDULED LIST
* 
      JSB LINK      GO DO IT
      JMP $RLNK,I   RETURN
      SKP 
*  THE SAME LIST (SCHEDULED LIST).
      HED OPERATOR INPUT MESSAGE PROCESSOR
* 
*        THE $MESS PROCESSOR SECTION OF HP-2116 REAL TIME EXECUTIVE 
*     PROCESSES THE FOLLOWING OPERATOR INPUT REQUESTS:
* 
*     1. TURN ON A PROGRAM
*           ON[IH],XXXXX
*           ON[IH],XXXXX,NOW
*           ON[IH],XXXXX,P1,...,P5
*           ON[IH],XXXXX,NOW,P1,...,P5
*     2. TURN OFF A PROGRAM 
*           OF,XXXXX,P
*     3. OPERATOR SUSPEND A PROGRAM 
*           SS,XXXXX
*     4. CONTINUE A OPERATOR SUSPENDED PROGRAM
*           GO[IH],XXXXX
*           GO[IH],XXXXX,P1,...,P5
*     5. CURRENT STATUS OF A PROGRAM
*           ST,XXXXX
*     6. CHANGE PROGRAM ID SEGMENT TIME PARAMETERS. 
*           IT,XXXXX,R,MMM
*           IT,XXXXX,R,MMM,HR,MN
*           IT,XXXXX,R,MMM,HR,MN,SC 
*           IT,XXXXX,R,MMM,HR,MN,SC,MS
*     7. CHANGE PROGRAM PRIORITY
*           PR,XXXXX,ZZ 
*     8. SET REAL TIME CLOCK AND START TIME BASE GENERATOR
*           TM,DAY,HR,MN,SC 
*     9. CURRENT REAL TIME CLOCK VALUES 
*           TI
*    10. SET A SLOT OR DEVICE DOWN. 
*           DN,N1 
*           DN,,N2
*    11. SET A SLOT AND DEVICES UP
*           UP,NN 
*    12. LOGICAL UNIT SWITCH AND STATUS 
*           LU,N1 
*           LU,N1,N2
*           LU,N1,N2,N3 
*    13. EQUIPMENT STATUS 
*           EQ,NN 
*    14. SET SOURCE FILE
*           LS,P1,P2
*    15. SELECT LOAD-AND-GO 
*           LG,P
*    16. CHANGE DEVICE TIME-OUT PARAMETER 
*           TO,N1 
*           TO,N1,N2
*    17. RELEASE PROGRAM'S TRACKS 
*           RT,XXXXX
*    19.  SET BREAK FLAG
*           BR,XXXXX
*    20.  ABORT JOB REQUEST 
*           AB
*    21.  RUN REQUEST 
*           RU[IH],XXXXX
*           RU[IH],XXXXX,P1,...,P5
*    22. BUFFER LIMIT PRINT/CHANGE
*           BL       OR  BL,N1,N2 
*    23. SIZE REQUEST/CHANGE
*           SZ,XXXXX
*           SZ,XXXXX,P1 
*           SZ,XXXXX,P1,P2
*    24. ASSIGN PROGRAM TO PARTITION
*           AS,XXXXX,N
*    25  UNRESERVE A PARTITION
*           UN, N 
*    26  EXAMINE OR ALTER TIMESLICING PARAMETERS
*           QU,ZZZZZ,XXXXX
* 
* 
* 
* 
* 
      SPC 3 
*  IN GENERAL THERE ARE TWO CLASSES OF COMMANDS.  THOSE THAT PERFORM
*  A SERVICE IN WHICH SPEED IS OF IMPORTANCE (RU, ON, OF  ETC) AND
*  AND THOSE COMMANDS WHICH GIVE STATUS INFORMATION OR WHICH MUST 
*  BE ENTERED BEFORE A PROGRAM IS RUN.  IN THE FORMER CASE A CONSIDERABLE 
*  AMOUNT OF EFFORT IS SPENT EXECUTING THE COMMAND AS FAST AS POSSIBLE. 
*  IN THE LATER CASE EFFORT IS SPENT IN MAKING THE CODE AS SMALL AS 
*  POSSIBLE SO AS TO SAVE ROOM. 
* 
* 
      HED OPERATOR INPUT MESSAGE DECIPHER ROUTINE 
* 
*     CALLING SEQUENCE
*         JSB $MESS 
*         B CONTAINS NUMBER OF CHARACTERS 
*         A IS THE BUFFER ADDRESS 
* 
* 
* 
*        INPUT DECIPHER ROUTINE ROUTINE SCANS THE ASCII OPERATOR
*     INPUT AND STORES THE DATA INTO PARAMETERS.
*        THIS ROUTINE ASSUMES THE CHARACTER COUNT IN B ON ENTRY AND 
*    DATA IN BUFFR. COMMA IS USED TO SEPARATE PARAMETERS. A PARA- 
*    METER MAY BE UP TO 6 ASCII CHARACTERS- EXCEPT FOR OP CODE
*    WHICH MUST BE 2 CHARACTERS. A MAXIMUM OF 40 CHARACTERS MAY BE
*    INPUT. A COUNT IS KEPT OF THE NUMBER OF PARAMETERS INPUT AND 
*    A CHARACTER COUNT IS KEPT FOR EACH PARAMETER. THE VALUES ARE 
*    STORED LEFT ADJUSTED IN THE BUFFERS. 
* 
*    MESS MUST KEEP TRACK OF WHICH MAP THE CALLER CAME IN FROM
*    IF THE ENTRY TO $MESS IS FROM THE SYSTEM MAP THEN THE CALL 
*    WAS FROM THE $TYPE ROUTINE.  IF FROM THE USER MAP THEN THE 
*    CALL IS FROM THE SYSTEM LIBRARY ROUTINE MESSS.  (PRMPT & 
*    R$PN$ THING) 
*    IF FROM $TYPE, THEN INPUT BUFFER = INBUF 
*                        OUTPUT BUFFER = INBUF
*    IF FROM MESSS, THEN INPUT BUFFER PULLED IN LOCALLY TO
*                                        IBUFX
*                        OUTPUT BUFFER = THE PROCESSOR'S BUFFER 
*                                        GENERALLY SHARED W/PARSE 
*                                        BUFFER.
* 
* 
*    ENTRY MADE BY        $MESS NOP 
*                               SSM $MEU
*                               SJP $MSG
* 
*                         NOTE: BFCNT=BUFFER CHAR COUNT (USED BY "OP")
*                               BFADD=BUFFER LOCATION  "              " 
* 
* 
* 
$MSG  STA BFADD     SAVE INPUT BUF ADDRESS FOR STRING ROUTINE 
      STA OP        INVALIDATE PREVIOUS CMND (GLM.2013) 
      STB BFCNT     SAVE COUNT FOR STRING ROUTINE TOO.
      STB NWCNT     ONE MORE TIME.
* 
      LDA $MEU     GET THE DMS STATUS 
      RAL,RAL       ROTATE THE STATUS FOR 
      STA $MEU     OUR RETURN TRIP
* 
      SSB           IF NEG ITS AN ERROR 
      JMP $INER 
      SZB,RSS       IF THE CHAR COUNT = 0 
      JMP M0150     JUST RETURN 
* 
      RAL,ELA       PUT DMS STATUS IN E REG (0/1 SYS USER)
      LDA BFADD     GET THE BUFFER ADDRESS BACK AGAIN 
      SEZ,RSS       WELL, WHICH MAP ? 
      JMP NMESS     SYSTEM (SYSTEM CONSOLE) 
* 
      INB           CONVERT CHAR COUNT TO 
      BRS           WORD COUNT (DIVIDE BY 2)
      CBX           SAVE WORD COUNT FOR MOVE
* 
      ADB DM41      NOW CHECK OUT WORD COUNT
      SSB           GREATER THAN 22 WORDS ? 
      JMP GTMES     NO,SO PULL IT IN LOCALLY
      LDB D40       YES, SO ONLY PULL IN 22 WORDS ANYWAY
      CBX           SAVE FOR MOVE 
      RBL           NOW CONVERT TO CHARACTERS FOR $PARS ROUTINE 
      STB NWCNT 
* 
GTMES LDB IBUFX     GET THE DESTINATION 
      STB BFADD     SAVE BUFF ADDR FOR OP COMMAND AND STRING PASSING
      MWF           AND MOVE THE WORDS
* 
      LDA IBUFX     GET THE BUFFER ADDRESS
      LDB NWCNT     AND THE LENGTH
NMESS JSB $PRSE     AND GO PARSE THE INPUT STRING 
BUFAD DEF PRAMS 
* 
* 
* 
      HED MESSAGE PROCESSOR--OP REQUEST SEARCH
* 
*        THIS SECTION CHECKS THE OPERATOR REQUEST CODE AGAINST THE
*    LEGAL REQUEST CODES AND JUMPS TO THE PROPER PROCESSOR. 
******************************************************************* 
*    TO ADD NEW REQUEST ONE MERELY, 
*        A. ADDS ASCII OPERATION CODE TO TABLE -LDOPC-
*        B. ADDS PROCESSOR START ADDRESS TO TABLE -LDJMP- 
*        C. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. 
******************************************************************* 
* 
      LDB OP         OPERATION CODE INTO B
      STB OPP       SET STOP FLAG 
      LDA LDOPC     SET OPERATION TABLE POINTER 
      STA TEMP1 
      LDA LDJMP     SET OPERATION PROC. JUMP ADDRESS
      STA TEMP2 
      LDA P1        SEND P1 IN A REG. 
      UNL 
      IFN 
      LST 
      CPB DBUG      **********DEBUG********** 
      CLB,RSS       **********DEBUG********** 
      JMP M0030     **********DEBUG********** 
      STB FLG       **********DEBUG********** 
      ENT $DDDT     **********DEBUG********** 
$DDDT JSB $DDT      **********DEBUG********** 
      DEF $TYPE+2   **********DEBUG********** 
DBUG  ASC 1,DB      **********DEBUG********** 
      EXT $DDT      **********DEBUG********** 
      UNL 
      XIF 
      LST 
M0030 CPB TEMP1,I   COMPARE WITH TABLE VALUE
      JMP TEMP2,I   COMPARES GO DO IT 
      ISZ TEMP1     DOES NOT COMPARE-INCREMENT OP TABLE 
      ISZ TEMP2                      INCREMENT JUMP ADR.
      JMP M0030     GO TO COMPARE NEXT OP CODE
* 
OPER  LDA $OPER     ILLEGAL OPERATION CODE REQUEST
$MSEX JRS $MEU $MESS,I RETURN AND RESTORE MEU STATUS
MSEX  EQU $MSEX 
D40   DEC 40
DM41  DEC -41 
      UNL 
      IFZ           NON-DEBUG BSS 7 
      BSS 7         MAKE RELEASED LISTING ALLIGN W/DBUG 
      XIF 
      LST 
* 
* 
* 
      SKP 
* 
* 
LDOPC DEF *+1       OPERATION CODE TABLE ADDRESS
      ASC 8,RTONOFSSGOSTPRIT
$ASTM ASC 9,TMDNUPLUEQLSLGTOTI
      ASC 8,BRABRUBLSZASURQU
* 
******IFN           SYSTEM SESSION CONSOLE
      ASC 2,ENOP
******XIF 
* 
OPP   NOP           OPCODE FOR CURRENT REQUEST
LDJMP DEF *+1,I     JUMP ADDRESS FOR EACH OPER. CODE
      DEF M0070     RELEASE PROGRAM'S TRACKS
      DEF M0100     TURN ON 
      DEF M0200     TURN OFF
      DEF M0300     OPERATOR SUSPEND
      DEF M0400     REMOVE OPERATOR SUSPEND 
      DEF M0500     STATUS
      DEF M0650     PRIORITY CHANGE 
      DEF M0600     INTERVAL TIME CHANGE
      DEF M0700    REAL TIME CLOCK INITIALIZATION 
      DEF M0800    DN REQUEST 
      DEF $IOUP+0  UP REQUEST 
      DEF M0850    LU REQUEST 
      DEF M0900    EQ REQUEST 
      DEF M0960     LS REQUEST
      DEF M0970     LG REQUEST
      DEF M0990     TO REQUEST
      DEF M0750     TI REQUEST
      DEF M0725     BR REQUEST
      DEF M0950     AB REQUEST
      DEF M0408     RU REQUEST
      DEF BLIM      BL REQUEST
      DEF SIZE      SZ REQUEST
      DEF ASIGN     AS REQUEST
      DEF URESV     UR REQUEST
      DEF QUTM      QU REQUEST
* 
******IFN           SYSTEM/SESSION CONSOLE WORK 
      DEF ENAB      EN COMMAND
      DEF OPIN      OP COMMAND
******XIF 
* 
      DEF OPER      OPERATOR ERROR
* 
ON    EQU LDOPC+2 
RU    EQU LDOPC+20
OF    EQU LDOPC+3 
ST    EQU LDOPC+6 
* 
* 
      HED PARSE SUBROUTINE FOR OPERATOR MESSAGES
*     CALLING SEQUENCE: 
*     LDA BUFFER ADDRESS
*     LDB CHARACTER COUNT 
*     JSB $PRSE 
*     DEF PRAM BUFFER 
*     -RETURN-
* 
*     THE PRAM BUFFER IS 33 WORDS LONG AND CONTAINS UP TO 8 
*     PRAMETER DESCRIPTERS FOLLOWED BY THE PRAMETER COUNT.
* 
*     EACH PARAMETER DESCRIPTER CONSISTS OF FOUR WORDS: 
* 
*     WORD          MEANING 
*     1             FLAG WORD 0=NULL PRAMETER 
*                             1=NUMERIC PRAMETER
*                             2=ASCII PRAMETER
*     2             0 IF NULL,VALUE IF NUMERIC,ASCII(1,2) IF ASCII
*     3             0 IF NOT ASCII ELSE ASCII(3,4)
*     4             0 IF NOT ASCII ELSE ASCII(5,6)
* 
*                                   TEMP USAGE IN PARSE SECTION:
* 
*                                   TEMPP = CHARACTER ADDRESS 
*                                   TEMP  = PARAMETER FLAG ADDRESS
*                                   TEMP1 = TEMP BUFFER FETCH ADD.
*                                   TEMP2 = TEMP BUFFER STORE ADD.
*                                   TEMP3 = LAST INPUT CHAR.+1 ADD. 
*                                   TEMP4 = PARAMETER VALUE ADDRESS.
*                                   TBUF  = DEF TEMP5 (6 LOCATIONS)
*                                   TBUFS = DEF TEMP5+7 
* 
$PRSE NOP 
      CLE,ELA       MAKE CHARACTER ADD. 
      STA TEMPP     SET BUFFER CHAR ADD.
      ADA B         COMPUTE END ADDRESS.
      STA TEMP3     AND SET IT. 
      LDB DM32     CLEAR PARAMETER AREA 
      STB TEMP
      LDB $PRSE,I 
      CLA 
MES1  STA B,I 
      INB 
      ISZ TEMP
      JMP MES1
* 
      STA B,I       CLEAR THE PRAM COUNT
      STB WSTAT     SET ADDRESS OF PRAM COUNT 
DEC09 LDA TBUF       INITIALIZE TEMP BUFFER ADDRESS 
      STA TEMP1 
      STA TEMP2 
* 
DEC10 LDB TEMPP     GET THE BUFFER CHAR ADDRESS 
      CPB TEMP3     IF NO MORE CHARACTERS 
      JMP DEC60     GO PROCESS PRAM 
      ISZ TEMPP     STEP INPUT POINTER
      CLE,ERB       CONVERT TO WORD SET UP IN E 
      LDA B,I       GET WORD FROM THE BUFFER
      SEZ,RSS       CHECK TO EXAMINE UPPER/LOWER
      ALF,ALF       UPPER, SO ROTATE TO LOWER BITS
      AND B377      MASK OFF ALL BUT LOW ORDER
      CPA COM       SEE IF A COMMA
      JMP DEC60     YES 
      CPA LASCI     CHECK IF BLANK CHAR 
      JMP DEC10     YES, SO SKIP CHAR 
      LDB TEMP2     CHECK IF SIX CHARS IN PARM
      CPB TBUFS     IF SO 
      JMP DEC10     SKIP STORE
      STA TEMP2,I   STORE THE CHAR
      STA SABRT     SAVE THE LAST CHAR
      ISZ TEMP2     STEP FOR NEXT CHAR
* 
      JMP DEC10     GO TO PROCESS NEXT CHAR 
* 
*  ATTEMPT NUMERIC CONVERSION OF PARM.
* 
DEC60 LDA WSTAT,I   FIRST SET UP POINTERS 
      RAL,RAL       TAKE 4 TIMES THE PRAM NUMBER
      ADA $PRSE,I   PLUS THE OP CODE ADDRESS-1
      STA TEMP      SET FLAG ADDRESS
      CLE,INA       ONE MORE AND WE HAVE
      STA VALOC     THE PRAMETER VALUE LOCATION 
      LDA TEMP2     IF NO CHARACTERS
      CPA TBUF      INPUT 
      JMP DEC75     GO TRY NEXT ONE 
* 
*                                   NOW TRY FOR A NUMBER
* 
      ISZ TEMP,I    SET FLAG TO 1 FOR NUMBER
      LDB TEMP1,I   GET FIRST CHAR
      CPB DASH       MINUS SIGN?
      ISZ TEMP1      YES, INCRE TO NEXT CHAR
      CPA TEMP1     (A) STILL = TEMP2 
      JMP DEC80     IF "-" WAS ONLY CHAR, THEN ASCII
* 
      LDB D10       SET UP CONVERSION BASE
      LDA SABRT 
      CPA "B"       IF B SUFFIX 
      LDB D8         SET FOR BASE 8 
      STB TEMP4     SET BASE
DEC65 MPY VALOC,I   BUMP THE CURRENT VALUE
VALOC EQU *-1 
      LDB TEMP1,I   GET THE NEXT CHAR.
      ADB DM58      IF GREATER THAN "9" 
      SEZ,CLE,RSS   THEN NOT A NUMBER 
      ADB D10       IF LESS THAN "0"
      SEZ,CLE,RSS   THEN
      JMP DEC80     NOT A NUMBER
      ADA B         ACCUMULATE THE
      STA VALOC,I   NUMBER
      ISZ TEMP1     STEP THE BUFFER ADDRESS 
      LDA TEMP4     GET THE BASE TO A
      LDB TEMP1     AND THE NEXT CHAR. LOC. TO B
      CPB TEMP2     IF END THEN 
      JMP DEC70     GO TO NEXT PRAM 
* 
      INB           IF BASE 8 CONVERSION
      CPB TEMP2     AND LAST
      CPA D10       CHAR. THEN DONE SO SKIP 
      JMP DEC65     ELSE GO GET THE NEXT ONE
* 
      SPC 1 
DEC70 LDB VALOC,I   GET VALUE 
      LDA TBUF,I    IF NEG NUMBER,
      CPA DASH
      CMB,INB        NEGATE VALUE 
      STB VALOC,I   STORE VALUE 
* 
DEC75 ISZ WSTAT,I   COUNT THE PRAMETER
      LDA WSTAT,I   IF
      LDB TEMP3      EOL OR 
      CPB TEMPP       8 PRAMS LINE
      RSS               THEN
      CPA D8
      JMP DEC90          GO PROCESS 
      JMP DEC09     ELSE GO GET NEXT CHARACTER
      SPC 1 
DEC80 ISZ TEMP,I    SET NOT NUMBER FLAG 
      LDA AASCI     FILL THE PRAM WITH BLANKS 
      LDB VALOC     PRAM ADDRESS TO B 
      INB           DON'T WORRY ABOUT FIRST WORD
      STA B,I       SET SECOND WORD 
      CLE,INB       STEP TO THIRD WORD
      STA B,I       SET THIRD WORD TO DOUBLE BLANK. 
      LDB TBUF      GET THE TEMP BUFFER POINTER 
DEC85 CPB TEMP2     END OF INPUT? 
      JMP DEC75     YES GO PROCESS NEXT PRAM
      CPB STOP      SIXTH CHAR YET? 
      JMP DEC75      YES, END PARAM 
      LDA B,I       GET THE CHARACTER 
      SEZ,RSS       IF UPPER CHARACTER
      ALF,SLA,ALF   ROTATE AND SKIP 
      XOR VALOC,I   LOWER ADD THE UPPER CHAR. 
      XOR LASCI     ADD/DELETE THE LOWER BLANK
      STA VALOC,I   STORE THE PACKED WORD 
      SEZ,CME,INB   STEP B,SKIP IF UPPER
      ISZ VALOC     ELSE STEP STORE ADDRESS.
      JMP DEC85     GO GET OTHER CHAR.
      SPC 2 
DEC90 ISZ $PRSE     STEP RETURN ADDRESS 
      JMP $PRSE,I   RETURN
      SPC 2 
"B"   OCT 102       ASCII "B" 
DASH  OCT 55        ASCII "-" 
STOP  DEF TEMP5+6   ASCII 6TH CHAR STOP 
      HED  MESSAGE PROCESSOR--RT,XXXXX COMMAND
* 
*     RT,XXXXX
* 
*         THE RELEASE TRACKS ROUTINE FUNCTIONS AS FOLLOWS:
*               IF PROGRAM STATUS NOT DORMANT, STATUS ERROR.
*               IF DORMANT, ALL TRACKS ASSIGNED TO THAT PROGRAM 
*                   ARE RELEASED - ALL PROGRAMS IN DISC TRACK 
*                   ALLOCATION SUSPENSION ARE RESCHEDULED.
* 
M0070 JSB TTNAM     GO FIND ID SEGMENT ADDRESS
      ADB D8        PROGRAM MUST BE DORMANT.
      LDA B,I        WILL BE IF POINT OF
      SZA             SUSPENSION IS ZERO. 
      JMP M0405     OTHERWIZE, ILL STATUS ERROR.
      LDA WORK      GET ID SEGMENT ADDRESS
      JSB $OTRL     RESCHEDULE DISC-SUSP PROGRAMS 
      JMP M0150     RETURN- 
      HED MESSAGE PROCESSOR--ON,XXXXX COMMAND 
* 
***************************************************************** 
* 
*     ON[IH],XXXXX
*     ON[IH],XXXXX,NOW
*     ON[IH],XXXXX,P1,...,P5
*     ON[IH],XXXXX,NOW,P1,...,P5
* 
*        THE ON REQUEST FUNCTIONS AS FOLLOWS: 
*              IF NO RESOLUTION CODE, THEN PROGRAM SCHEDULED. 
*              IF -NOW- OPTION, THEN ENTER PROGRAM INTO TIME LIST 
*                   AND SET TIME VALUES TO CURRENT TIME PLUS 10 MSC 
*              IF NOT ONE OF ABOVE, AND TIME VALUES ARE ZERO THEN 
*                   PROGRAM FUNCTIONS SAME AS -NOW- OPTION. 
*              IF NOT ONE OF ABOVE, AND TIME VALUES ARE PRESENT,
*                   THEN PROGRAM IS ADDED TO TIME LIST. 
*              NOTE: 1)ALL THE ABOVE OPTIONS ALLOW PARAMETERS TO BE 
*                      PASSED TO THE PROGRAM. THESE MUST BE ASCII 
*                      DECIMAL NUMBERS WHICH ARE CONVERTED TO BINARY
*                      AND STORED IN ID SEGMENT TEMP AREA. UPON 
*                      EXECUTION, THE B REGISTER WILL POINT TO TEMP.
*                      UP TO 5 PARAMETERS MAY BE INPUT. IF NO PARA- 
*                      METERS ARE INPUT, THE TEMP AREA ARE ZEROS BUT
*                      B REGISTER WILL STILL POINT TO TEMP. AREA
*                   2) THE ABOVE OPTIONS WILL ALLOW THE ORIGINAL
*                      SCHEDULING STRING TO BE SAVED(UNLESS 'IH'
*                      IS SPECIFIED OR THERE ARE NO PARAMETERS).
*                      THE SCHEDULED PROGRAM MAY RECOVER THIS STRING
*                      WITH AN EXEC 14 CALL.
* 
********************************************************************
* 
M0100 JSB TTNAM    FIND ID SEGMENT ADDR 
      LDB WSTAT,I  IF NO PARAMETERS 
      RBL,RBL       BIT IS SET, THEN
      SSB,RSS        ILLEGAL STATUS.
      SZA          CHECK IF PROGRAM DORMANT 
      JMP M0405    ILLEGAL STATUS ERROR 
      JSB $SZIT    CHECK OUT THE PROGRAM SIZE 
      SZA          IS IT OK ? 
      JMP MSEX     NO, FLUSH HIM !
* 
      JSB PLOAD     GO TO PROCESS CONTROL PRAMETERS 
      LDB WORK
      ADB D17      COMPUTE RES/T/MULT ADDR
      LDA B,I 
      ALF,RAR 
      AND D7       CHECK RESOLUTION CODE
      SZA          NONE, SO GO TO SCHED NOW 
      JMP M0110 
M0105 JSB $LIST    SCHEDULE PROGRAM 
      OCT 301 
      JMP MSEX     RETURN 
M0110 INB           SET B FOR $ONTM 
      LDA CP2       IF ASCII
      RAR,SLA       "NO" ENTERED
      LDA P2        THEN
      CPA NO        GO PUT
      CCA           IN THE TIME LIST FOR NOW+10MS.
      JMP $ONTM      COMPLETE IN TIME MODULE
      HED MESSAGE PROCESSOR--OF,XXXXX COMMAND 
* 
*     OF,XXXXX
*     OF,XXXXX,1[,NP]    "ABORT"
*     OF,XXXXX,8[,NP]    "ABORT AND REMOVE FROM SYSTEM" 
* 
*     THE NP OPTION SUPPRESSES THE "PROGX ABORTED" MESSAGE. 
* 
*        THE OF REQUEST FUNCTIONS AS FOLLOWS: 
*              IF PROGRAM DORMANT, IT MAY STILL BE IN TIME LIST SO
*                   A CALL IS MADE TO REMOVE PROGRAM FROM TIME LIST 
*                   IF ABORT OPTION 1, THEN $ABRT PROCESSOR IS
*                   CALLED. IF ABORT OPTION 8, IN ADDITION TO 
*                   $ABRT PROCESSOR BEING CALLED, IF BIT 7 OF THE 
*                   TYPE FIELD IS SET, THEN TRACK(S) WHERE PROGRAM
*                   IS STORED IS ALSO RELEASED BY $DREL. THE NAME 
*                   FIELD IN THE ID SEGMENT IS CLEARED SO THAT THE
*                   PROGRAM CANNOT BE CALLED AGAIN. 
*              IF PROGRAM SCHEDULED OR OPERATOR-SUSPENDED, THEN 
*                   DORMANT REQUEST MADE VIA LIST PROCESSOR AND 
*                   PROCEED AS ABOVE. 
*              IF PROGRAM STATUS NOT ONE OF ABOVE, THE DORMANT BIT
*                   IS SET IN STATUS, IF NOT ABORT OPTION. IF ABORT 
*                   OPTION, CHECK IF AVAILABLE MEMORY OR UNAVAILABL 
*                   DISC TRACK SUSPENSION-IN WHICH CASE THE ABORT 
*                   BIT IS SET AND $ABRT CALLED. IF STATUS IS I/O 
*                   SUSPENSION, SET ABORT BIT AND RETURN. 
*                   IF INPUT SUSPENSION, CHECK IF 
*                   PROGRAM BEING READ IN FROM DISC. IF YES, THEN 
*                   SET ABORT BIT AND RETURN. IF NOT BEING READ IN
*                   FROM DISC, SET ABORT BIT AND CALL $IOCL TO
*                   CLEAR THE I/O REQUEST 
* 
M0200 JSB TTNAM    GO TO FIND ID SEG ADDR 
M0202 LDB WORK      GET ID SEG ADDRESS AND
      STB TEMPH     SAVE IT IN LOCAL STORE
      SEZ           IF SHORT ID-SEG.
      JMP M0207     GO TEST FOR 8 
* 
*  CLEAR NO-PARMS BIT IN CASE PROG IS IN THE TIME LIST
* 
      ADB D15       ADVANCE TO ID16 
      LDA B,I        FETCH IT 
      AND CL.NP     REMOVE THE NO-PARM BIT
      STA B,I       RESTORE THE WORD
      LDB WORK      FETCH ID ADDR AGAIN 
* 
      LDA P2        GET PRAM TWO
      SZA           IF NOT ZERO 
      JMP CHKNP      CHECK NO PRINT PARAMETER 
* 
M0240 JSB SABRT     GO DO SOFT ABORT
      JMP $XEQ      EXIT DONE 
* 
CHKNP LDA P3        NO PRINT OPTION CHOSEN? 
      CPA NP
      STA NOPRN     YES, SET THE NO PRINT FLAG
M0250 LDA WSTAT,I   POWER ABORT SO
      AND D15       GET CURRENT STATUS
      SWP            PUT ID-SEG. ADDRESS IN A,STAT IN B 
      CPB D2        IF I/O SUSP THEN
      JMP $IOCL     GO ABORT THE I/O
* 
      JSB $ABRT    GO TO ABORT ROUTINE
B40   CLE           CLEAR E FOR TRACK RELEASE 
M0207 LDA P2         RELEASE PROG'S TRACKS? 
      CPA D8        IF P = 8, 
      RSS           YES 
      JMP $XEQ      NO-SO RETURN
* 
      LDB TEMPH 
      ADB D14       GET ADDRESS OF LAST 
      LDA B,I       NAME WORD 
      ALF,ALF       CHECK IF TYPE BIT 7 SET 
      SSA,RSS 
      JMP $XEQ      NO-CANNOT REL PROG TRACKS 
* 
      SEZ,INB,RSS   IF SHORT ID-SEG. SKIP 
      ADB D7        ELSE INDEX TO MEM ADDRESS FOR LONG
* 
      ALF,ALF       *A790216** RE-POSITION TYPE TO LOW END
      AND D15       SAVE PROGRAM TYPE 
      STA TEMP5       FOR TYPE 5 CHECK
*                  *A790216** 
      LDA B,I 
      CMA,INA 
      INB 
      ADA B,I 
      STA TEMP3     # WORDS OF MAIN 
      INB 
      LDA B,I 
      CMA,INA 
      INB 
      ADA B,I       # WORDS IN BASE PAGE
      INB           SET UP THE DISC ADDRESS POINTER 
      STB TEMP1     IN TEMP1
* 
* 
*  IF THE PROGRAM BEING TERMINATED IS A CLONE (I AM A COPY BIT IS SET)
*  DON'T RELEASE TRACKS, GO KILL THE ID. NOTE: DON'T ALTER (A). 
* 
* 
*                  *A790216** 
      LDB TEMP5     FETCH PROGRAM TYPE
      CPB D5        IF SEG, SKIP CLONE CHECK
      JMP M0208 
*                  *A790216** 
* 
      LDB TEMP1     FETCH ID 27 ADDR
      ADB D5        ADVANCE TO 2ND SESSION WORD 
      LDB B,I         AND FETCH IT
      BLF,BLF       IF THE "IM A COPY" BIT (BIT 9)
      RBR,SLB         IS SET
      JMP M0227     DON'T GIVE THE TRACKS BACK
* 
M0208 CLB           CLEAR FOR DOUBLE SHIFT
      ADA B177      ROUND UP TO NEAREST SECTOR
      IOR B177      SET THE LOW BITS AND
      ADA TEMP3     ADD AND ROUND UP THE MAIN 
      LSR 6         DIVIDE BY 64 TO GET SECTORS 
      STA TEMP5     TOTAL # SECTORS IN PROGRAM
      LDA TEMP1,I   GET THE DISC ADDRESS
      LSR 7         SHIFT TO TRACK
      AND B377        ADDRESS AND 
      LDB TEMP1,I     CHECK IF LU 2 OR 3
      SSB                LU 2 
      ADA TATSD          LU 3 
      STA TEMP2     ACTUAL STARTING TRACK # 
      LDB SECT2 
      LDA TEMP1,I     CHECK IF LU 2 OR 3 SO CAN DIVIDE
      SSA                BY # OF TRACKS FOR THAT
      LDB SECT3        DISC.
      STB TEMP
      LDA TEMP1,I     GET THE TRACK ADDRESS 
      AND B177      MASK OUT THE SECTOR ADDRESS 
      CMA,INA,SZA,RSS IF ZERO RELEASE THIS TRACK
      JMP M0226 
      ADA TEMP      ELSE SUBTRACT FROM TRACK
      ISZ TEMP2     SIZE  STEP TO NEXT TRACK
      CMA,INA       AND COMPUTE THE REMAINING SECTORS 
M0226 ADA TEMP5     A IS TOTAL NUMBER TO
      CLB           CLEAR FOR DIVIDE
      SZA           GEORGES FIX 3/13
      SSA           RELEASE  IF NEGATIVE
      JMP M0227     FORGET THE WHOLE THING
      DIV TEMP
      SZB           CHECK IF PARTIAL TRACK
      INA                YES
      STA B         (B)=# TRACKS
      LDA TEMP2     (A)=STARTING TRACK
      JSB $DREL     CALL EXEC SYS RELEASE TRACKS
M0227 LDB TEMPH 
      ADB D12 
      CLA 
      STA TEMP1,I   CLEAR THE TRACK WORD
      STA B,I 
      INB 
      STA B,I 
      INB 
      LDA B,I       SAVE THE OLD SHORT/LONG 
      AND B77       FLAG
      STA B,I 
* 
* 
*  NOTE: MEMORY RESIDENT ID'S ARE SAME LENGTH AS DISC RESIDENT
* 
      AND D7        LOOK FOR AN ID EXTENSION
      CPA D5        A SEGMENT ? 
      JMP $XEQ      THEN WE'RE FINISHED 
* 
      ADB D14       INDEX TO ID EXT WORD
      LDA B,I       PULL IN EMA INFO
      SZA,RSS       IS THIS AN EMA PROG ? 
      JMP $XEQ      NO, SO WERE DONE
* 
      ALF           YES, SO GET THE ID EXT
      RAL,RAL 
      AND M77 
      ADA $IDEX     GET THE ID EXT ADDRESS
      LDA A,I       NOW HAVE THE ADDRESS
      CLB 
      STB A,I       NOW ZAP THE WORD. 
      JMP $XEQ      NOW WE'RE DONE. GO SEE WHAT'S NEW.
* 
M77   OCT 77
NP    ASC 1,NP
NOPRN NOP 
* 
* 
* 
      SKP 
      SPC 1 
* 
*     THE SOFT ABORT ROUTINE CLEARS ANY RESOURCE FLAGS
*     CALLS THE TERMINATION ROUTINE AND REMOVES A PROGRAM FROM
*     THE TIME LIST.
* 
*     IT ALSO SETS THE ABORT FLAG (100000) IN THE FATHERS ID-SEG. 
*     (IF THERE IS A FATHER AND HE IS WAITING) SO THAT RMPAR
*     MAY RECOVER THE PRAMETER. 
* 
*     IF THE PROGRAM IS WAITING FOR A SON IT CLEARS THE SONS
*     "FATHER IS WAITING" FLAG. 
* 
*     CALLING SEQUENCE: 
* 
*     LDB ID-SEG. ADDRESS 
*     JSB SABRT 
* 
*     RETURN REGISTERS MEANING LESS.
* 
*     THIS ROUTINE DOES NOT GENERATE AN ABORT MESSAGE NOR DOES IT 
*     PULL A PROGRAM OUT OF AN I/O LIST. ($LIST DOES SET A FLAG 
*     WHICH WILL PUT THE PROGRAM DORMANT ON I/O COMPLETION. 
* 
SABRT NOP 
      STB TEMPH     SAVE THE ID ADDRESS 
      ADB D15       GET THE STATUS
      LDA B,I       WORD
      AND ZAPR      CLEAR THE RESOURCE BIT
      STA B,I       RESET IT
      INB           SET B TO THE TIME LIST WORD 
      JSB $TREM     REMOVE PGM FROM THE TIME LIST 
      LDB TEMPH     RESTORE THE ID ADDRESS AND
      ADB D15       INDEX TO THE STATUS WORD
      LDB B,I       AND FETCH IT
      BLF,SLB       IF PROGRAM IS WAITING 
      JMP SABT2     GO CLEAR THE SONS FLAG
* 
SABT1 LDB TEMPH     RESTORE THE ID-SEG. ADDRESS AND 
      JSB TERM      CALL THE TERMINATION PROCESSOR
      ISZ POP       STEP TO THE FATHER'S FIRST PRAM WORD
      RSS 
      JMP SABRT,I 
      LDA SIGN      SET SIGN BIT FOR FATHER ABORT FLAG
      STA POP,I     SET THE ABORT FLAG
      LDB POP       CACULATE THE B-REG ADDRESS
      ADB D9        AND 
      LDA POP   SET IT TO 
      STA B,I       POINT TO THE ABORT WORD 
      JMP SABRT,I   DONE RETURN 
* 
SABT2 LDB TEMPH     GET THE SONS ID ADDRESS 
      INB           FROM WORD TWO 
      LDB B,I       OF THE ID-SEGMENT 
      ADB D20       INDEX TO THE FATHER WAIT FLAG WORD
      LDA B,I       GET THE WORD
      RAL,CLE,RAL   CLEAR BIT 14
      ERA,RAR       AND 
      STA B,I       RESTORE THE WORD
      JMP SABT1     GO TERMINATE THE PROGRAM
      SPC 2 
TEMPH DEF FMGR
D12   DEC 12
DM24  DEC -24 
DM60  DEC -60 
ZAPR  OCT 177477
      HED MESSAGE PROCESSOR--SS,XXXXX COMMAND 
* 
*    SS,XXXXX  PROCESSOR
* 
*        THE SUSPEND REQUEST FUNCTIONS AS FOLLOWS:
*              IF PROGRAM DORMANT OR OPERATOR SUSPENDED, THEN 
*                   ILLEGAL STATUS ERROR
*              IF SCHEDULED, THEN OPERATOR SUSPEND VIA $LIST
*              IF OTHER THAN ABOVE, SET THE OPERATOR-SUSPEND BIT
*                   IN STATUS.       AND ALL THESE WONDERS ARE
*                   BY $LIST. 
* 
M0300 JSB $LIST 
      OCT 206       SCHED TO OPER-SUSP
DEFP1 DEF P1        BY NAME 
      SZA            IF ERROR 
      JMP MSEX      EXIT
* 
      LDA WSTAT,I   SET THE NO PRAMS
      IOR B20K      BIT 
      STA WSTAT,I   TO PREVENT PRAMS ON RESTART 
      LDA WORK      GET ID ADR
      JSB ALDM      GO PUT IN DORM LIST & SET DM FLAG 
      JMP M0150    EXIT 
      SPC 2 
B20K  OCT 20000 
      HED MESSAGE PROCESSOR--GO COMMAND 
* 
***************************************************************** 
* 
*     GO[IH],XXXXX
*     GO[IH],XXXXX,P1,...,P5
* 
*        THE CONTINUE FROM POINT OF SUSPENSION FUNCTIONS AS 
*        FOLLOWS: 
*              IF NOT OPERATOR SUSPEND: 
*                    BIT SET - REMOVE OPER-SUSP BIT IN STATUS 
*                    BIT NOT SET - ERROR EXIT FOR MESSAGE 
*              IF OPERATOR SUSPEND, SCHEDULE PROGRAM.  UNLESS 
*                  'IH' IS SPECIFIED OR NO PARAMETERS ARE GIVEN,
*                  ANY PREVIOUS OPERATOR SCHEDULING STRING IS 
*                  RELEASED AND THE 'GO' SCHEDULING STRING IS 
*                  SAVED FOR RETRIEVAL BY THE PROGRAM USING AN
*                  EXEC 14 CALL.
* 
***************************************************************** 
* 
M0400 JSB TTNAM    GO TO FIND ID SEG ADDR 
      CPA D6        CHECK IF PROGRAM OPERATOR-SUSPEND 
      JMP M0410     OPERATOR-SUSPEND--SO GO TO PROCESS
      LDA WSTAT,I   NOT OPER SUSP - 
      AND B1000      IS BIT SET?
      SZA,RSS 
      JMP M0405     NO, ERROR-
      XOR WSTAT,I   YES, CLEAR BIT
      STA WSTAT,I   AND 
M0150 CLA           EXIT
      JMP MSEX
* 
M0405 LDA $ILST    ILLEGAL STATUS MESSAGE ADDRESS 
      JMP MSEX     EXIT 
      SKP 
* 
***************************************************************** 
* 
*     RU[IH],XXXXX
*     RU[IH],XXXXX,P1,...,P5
* 
*        THE RU COMMAND FUNCTIONS AS FOLLOWS: 
*              IF DORMANT, THE PROGRAM IS SCHEDULED.
*              PARAMETERS MAY BE PASSED TO THE PROGRAM.  THESE
*                   ARE TREATED LIKE PARAMETERS IS THE GO COMMAND 
*                   (SEE NOTE 1 FOR THE GO COMMAND).
*              THE SCHEDULING STRING MAY BE SAVED.  SEE NOTE 2
*                   FOR THE GO COMMAND. 
* 
******************************************************************* 
* 
M0408 JSB TTNAM     RUN COMMAND ROUTINE 
      LDB WSTAT,I   IF NO PARAMETERS
      RBL,RBL        BIT IS SET, THEN 
      SSB,RSS         ILLEGAL STATUS. 
      SZA           IF NOT DORMANT
      JMP M0405      GIVE THE MESSAGE,ELSE DO IT
* 
      JSB $SZIT      CHECK OUT PROGRAM SIZE 
      SZA           OK ?
      JMP MSEX      NO !
* 
M0410 LDA D2       CHECK IF CONTROL PARAMETERS FOLLOW 
      CPA PARAM 
      JMP M0105     NO,DO NOT RETURN STRING,SCHEDULE PROGRAM. 
* 
      JSB PLOAD    GO TO PROCESS CONTROL PARAMETERS 
      JMP M0105     GO SCHEDULE THE PROGRAM 
      HED MESSAGE PROCESSOR--ST,XXXXX COMMAND 
* 
*    ST,XXXXX  PROCESSOR
* 
*     IF XXXXX = 0  NAME AND PARTITION# OF CURRENT PGM IS PRINTED 
*     IF XXXXX > 0  NAME OF THE PGM IN PARTITION #XXXXX IS PRINTED
*        THE STATUS REQUEST OUTPUTS THE REQUESTED PROGRAM STATUS
*        IN THE FOLLOWING FORMAT: 
*              PRPRP S R MMMM HR MN SC MS T 
* 
*              PRPRP =PRIORITY
*              S = STATUS (0 THRU 6 
*              R = RESOLUTION CODE (0 THRU 4) 
*              MMM = MULTIPLE VALUE 
*              HR = NEXT START TIME -HR 
*              MN = NEXT START TIME -MIN
*              SC = NEXT START TIME -SEC
*              MS = NEXT START TIME -10 MSEC
*              T  =  PRESENT IF PROGRAM IN TIME LIST
* 
M0500 LDB XEQT      IF ZERO 
      SZA,RSS        GIVE STATUS OF 
      JMP M0540     CURRENT PGM 
      SSA 
      JMP M0505     IF NEG, ASSUME WANT PRG STATUS
      LDB $MNP       GET THE MAX # OF PARTITIONS
      CMB           IF (A) .LE. TOTAL 
      ADB A          NUMBER OF PTTNS
      SSB            THEN GIVE PTTN STATUS
      JMP M0530 
* 
M0505 JSB TTNAM    GO TO FIND ID SEGMENT ADDR 
      CPB D5       IS THIS A SEGMENT ?
      LDA D9       THEN GET THE SEGMENT FLAG
      CLB,CCE 
      STB RQP3      SET UP FOR $TIMV CALL 
      JSB $CNV1     CONVERT STATUS TO ASCII.
      ALF,ALF       MOVE TO HIGH HALF WORD
      STA BUFF4     STORE STATUS IN BUFFER. 
      LDB DM28
      CPA BL9       IF SHORT ID-SEG 
      LDB DM8       SET FOR 8 CHAR. MESS
      STB BUFFR     STORE CHARACTER COUNT IN BUFFER 
      LDB WORK
      ADB D6        PRIORITY ADDRESS
      CPA BL9       IF SHORT ID-SEG 
      CLA,RSS       SET PR TO 0 
      LDA B,I 
      JSB $CNV1    CONVERT PRIORITY TO ASCII
      LDB ASCI1     GET DIGITS 23-45 TO B-A 
      RRL 8                    34-52 IN B-A 
      STB BUFF2     SET 34
      LDB ASCI                  1-52 IN B-A 
      ALF,ALF                   1-25 IN B-A 
      RRL 8                     12-5  IN B-A
      STB BUFF1     SET 12
      STA BUFF3     SET 5 BLANK 
      LDB TEMP6     RESTORE B TO PRIOR ADDRESS
      ADB D11       RESOL CODE/MULT ADDRESS 
      LDA B,I 
      ALF,RAR 
      AND D7
      JSB $CNV1    CONVERT RESOLUTION CODE TO ASCII 
      ALF,ALF       ROTATE TO HIGH HALF WORD
      STA BUFF5    STORE RESOLUTION CODE IN BUFFER
      LDA B,I 
      AND B7777 
      JSB $CNV1    CONVERT MULTIPLE TO ASCII
      STA BUFF7     STORE MULTIPLE IN BUFFER
      LDA ASCI1 
      STA BUFF6    STORE MULTIPLE IN BUFFER 
      LDA B,I      CHECK IF PROG IN TIME LIST 
      ALF,SLA       TEST BIT 12 (T) BIT 
      JMP M0510    YES
      LDA AASCI    PROGRAM NOT IN TIME LIST 
      RSS 
M0510 LDA TZERO    PROG IN TIME LIST
      STA BUF14    STORE ASCII BLANK OR T IN BUFFER 
      INB           SET B TO TIME ADDRESS 
      LDA DTEMP     SET UP TO GET TIME TO 
      STA RQP2      TEMP AREA 
      DLD B,I       GET TIME FROM ID-SEG
      JSB $TIMV     CONVERT THE TIME
      LDA TEMP3     GET HOURS 
      JSB $CNV1     CONVERT 
      LDB ASCI1     GET VALUE 
      RRR 8         ROTATE TO BLANK ON EACH SIDE
      DST BUFF8     SET IN MESSAGE
      LDA TEMP2     GET MIN. VALUE
      JSB $CNV1     CONVERT 
      STA BUF10     STUFF IN BUFFER 
      LDA TEMP1     AND AGAIN FOR SEC 
      JSB $CNV1 
      LDB ASCI1     VALUE TO A BLANK TO B 
      RRR 8         ROTATE
      DST BUF11     SET IN BUFFER 
      LDA TEMP      ONE MORE TIME FOR 10'S OF MS. 
      JSB $CNV1 
      STA BUF13    STORE TENS OF MSEC IN BUFFER 
M0520 LDA BUFAD    LOAD A WITH OUTPUT BUFFER ADDRESS
      JMP MSEX     RETURN 
      SPC 1 
TZERO ASC 1, T
D11   DEC 11
B7777 OCT 7777
DTEMP DEF TEMP
BL9   ASC 1,9       BLANK 9 
DM28  DEC -28 
DM1   DEC -1
      SPC 1 
M0530 ADA DM1 
      MPY D7       (PTTN#-1)*7 IS 
      ADA $MATA      ADDR OF ENTRY IN MATA
      ADA D2        +2 FOR ID SEG ADDR WORD 
      LDB A,I       (B)=ID SEG ADDR 
      JMP M0550     GO PRINT PRG NAME 
* 
M0540 SZB,RSS       ANY PRG RUNNING?
      JMP M0550      NO PRINT 0 
      ADB D21       GET PARTITION # 
      LDA B,I        FROM ID SEG WORD 22
      AND B77 
      CCE,INA       GET USERS ACTUAL PART NUMBER
      JSB $CNV1     CONVERT TO DECIMAL
      STA BUFF4      SET IN MESSAGE 
      LDB XEQT      (B)=ID SEG ADDR 
      LDA DM8       (A)=COUNT 8 CHARS 
      JMP M0560     GO PRINT
M0550 CCA            SET A FOR ZERO PRINT 
      SZB            SKIP IF NO PROGRAM 
      LDA DM5       ELSE RESET A FOR PGM PRINT
M0560 STA BUFFR     SET MESSAGE LENGTH
      LDA MPT81     GET UPPER ASCII "0" TO A
      SZB            SKIP IF NO PGM 
      ADB D12       ELSE STEP TO NAME ADDRESS 
      LDA B,I 
      STA BUFF1     SET NAM12 
      INB            STEP TO NEXT NAME WORD 
      DLD B,I       GET THE NEXT WORDS
      STA BUFF2     SET NAM34 
      LDA AASCI     FILL RIGHT BLANK
      BLF,BLF        INTO NAM5
      RRL 8 
      STB BUFF3     SET NAM5
      JMP M0520     GO EXIT 
* 
* 
      SPC 2 
      HED OVERLAY - INPUT - OUTPUT BUFFER AREA
$PBUF DEF PRAMS     SET ADDR OF OVERLAY AREA FOR EXEC 
*********************************************************************** 
* INPUT MESSAGE BUFFER
IBUFX DEF *+1       LOCAL MESS INPUT BUFFER (FOR MESSS) 
IBUFY BSS 40
* 
* 
INBUF BSS 40        MESSAGE INPUT BUFFER
BUFFL EQU *-INBUF+*-INBUF      LENGTH IN #CHARS 
* 
*********************************************************************** 
* 
      SPC 2 
*     SYSTEM OUTPUT BUFFER
* 
BUFFR EQU *        SHOULD BE AT LEAST 15 WORDS LONG 
BUFF1 EQU BUFFR+1 
BUFF2 EQU BUFFR+2 
BUFF3 EQU BUFFR+3 
BUFF4 EQU BUFFR+4 
BUFF5 EQU BUFFR+5 
BUFF6 EQU BUFFR+6 
BUFF7 EQU BUFFR+7 
BUFF8 EQU BUFFR+8 
BUFF9 EQU BUFFR+9 
BUF10 EQU BUFFR+10
BUF11 EQU BUFFR+11
BUF12 EQU BUFFR+12
BUF13 EQU BUFFR+13
BUF14 EQU BUFFR+14
* 
*     PARAMETER POINTERS FOR DATA STORAGE 
* 
PRAMS BSS 1        CHARACTER COUNT-OP CODE
OP    BSS 3         OPERATION CODE
CP1   BSS 1        CHAR COUNT-PARAM 1 
P1    BSS 3         PARAM 1 (UP TP 3 WORDS-6CHAR.)
CP2   BSS 1        CHAR COUNT-PARAM 2 
P2    BSS 3        PARAMETER 2
CP3   BSS 1        CHAR COUNT-PARAM 3 
P3    BSS 3        PARAMETER 3
CP4   BSS 1        CHAR COUNT-PARAM 4 
P4    BSS 3        PARAMETER 4
CP5   BSS 1        CHAR COUNT -PARAM 5
P5    BSS 3        PARAMETER 5
CP6   BSS 1        CHAR COUNT-PARAM 6 
P6    BSS 3        PARAMETER 6
CP7   BSS 1        CHAR COUNT-PARAM 7 
P7    BSS 3        PARAMETER 7
PARAM BSS 1         PARAMETER COUNTER 
* 
$OP   EQU OP
ENDT  EQU * 
**********************************************************************
* 
      HED      SYSTEM START UP ROUTINE
* 
*  WHEN THE SYSTEM IS BOOTED UP A JMP 3,I  IS MADE. 
*  THE DESTINATION OF THE JUMP IS $STRT.  THE CODE FROM HERE TO 
*  OVCHK IS EXECUTED ONCE AT START UP AND LATER OVERLAYED FOR I/O 
*  BUFFERS AND OTHER TEMPS NEEDEDBY THE SYSTEM. 
* 
* 
      ORG IBUFY     PUT INIT CODE IN BUFFER 
* 
* 
$STRT LIA 1         GET THE SWITCH REGISTER 
      LIB 1 
      AND B70K      KEEP TOP OCTAL DIGIT
      SZA,RSS       = 0 ? 
      JMP TOIT      YES, NO HALT &NO DBUG 
      ALF           ROTATATE TO LOW END 
* 
      IFN 
      CPA D7        IF = 7 & DDT IN SYS, THEN HALT
      CLA,RSS       TO LET THEM SET SWITCH REGISTER 
      JMP DOHLT     AND THEN CALL $DDT ON THEIR BEHALF
      OTA 1         CLEAR THE SWITCH REGISTER FIRST 
      HLT 75B 
      JSB $DDT
      DEF TOIT
      XIF 
      UNL 
      IFZ 
      BSS 7 
      XIF 
      LST 
* 
DOHLT CPA D6
      HLT 76B 
TOIT  JSB $SYMP     SET UP THE SYSTEM MAP 
      JSB $CNFG     NOW GO DO RECONFIGURATION 
* 
      LDA DM5       GET THE LOOP VARIABLE 
      STA TEMP5     PREPARE TO CALL $ALC
      LDA DEQT1      TO RETURN BLOCKS OF MEMORY 
      STA TEMP6      TO INITIALIZE SYSTEM AVAILABLE MEMORY
MRTNL LDA TEMP6,I   BLOCK ADDRESSES ARE IN PAIRS
      STA MADR1      EQT1 THRU EQT12
      ISZ TEMP6 
      LDA TEMP6,I 
      STA NWDS1 
      ISZ TEMP6 
      JSB $RTN      RETURN A BLOCK
MADR1  NOP
NWDS1  NOP
      ISZ TEMP5     DONE WITH EQT1 THRU EQT10?
      JMP MRTNL      NO, RELEASE NEXT BLOCK 
      JMP $ALC       NEXT GO TO $ALC FOR CONFIGURATION
* 
DEQT1 DEF EQT1      GOES TO GTFMG FROM $ALC VIA $WORK 
* 
GTFMG LDB TEMPH     GET FMGR'S NAME ADDRESS 
      JSB $ZZZZ     GO TO DISPATCHER TO SET UP
      LDB TERM      GET ADDRESS 
      JSB TNAME     OF D.RTR TO B 
      SEZ,RSS       IF NONE SKIP
      STB ID.RT     SET FOR LATER.
      LDB P1OR2     LOOK UP EDIT'S ADDRESS
      JSB TNAME     ALSO
      SEZ,RSS       IF NONE SKIP
      STB ID.RT+1   SET IN LIST 
      LDB TEMPH     NOW FIND
      JSB TNAME     FMGR'S ID-SEGMENT ADDRESS 
      SEZ,RSS       IF NONE SKIP
      STB IDFMG     SET ADDRESS 
      LDB DSMP
      JSB TNAME 
      SEZ,RSS 
      STB $IDSM 
* 
      LDA IDFMG     GET FMGR'S ID ADDRESS 
      SZA,RSS       ANY FMGR ?
      JMP NOFMG     NO, SO FORGET ABOUT ANY CHECKS
* 
      STA WORK      SET UP HIS ADDRESS IN $WORK 
      JSB $SZIT     SEE IF THERE'S A PART'N LARGE ENOUGH
      SZA           WELL IS THERE ? 
      JMP NGFMG     NO, YOU BLEW THE RECONFIGURATION TURKEY !!!!
* 
      LDA ID.RT     OK, SO YOU DID THAT RIGHT. BUT DID YOU
      SZA,RSS       YOU GIVE D.RTR ENOUGH ROOM ?
      JMP NOFMG     NO D.RTR HUH .
* 
      STA WORK      SET UP FOR THE TEST 
      JSB $SZIT     SEE IF THERE IS ENOUGH ROOM 
      SZA           OK ?
      JMP NGFMG     NO. 
* 
NOFMG LDA D$RN      TRACK DOWN RN TABLE ADDRESS 
      RAL,CLE,SLA,ERA IF INDIRECT 
      LDA A,I       USE NEXT LEVEL
* 
      LDB IDADS     GET ADDRESS OF ID ADDRESSES 
      JMP $ERMG     GO TO EXEC TO SET UP  NO RETURN 
* 
NGFMG HLT 10B       NO ROOM FOR FMGR, SO YOU LOSE !!!!!!! 
      JMP *-1       YOU LOSE AGAIN !
* 
* 
* 
IDADS DEF ID.RT 
FMGR  ASC 3,FMGR
D.RTR ASC 3,D.RTR 
DSMP  DEF *+1 
      ASC 3,SMP 
D$RN  DEF $RNTB 
* 
$SYMP NOP 
      LDA $DLP      GET THE LOAD POINT
      ALF           AND GET THE # OF PAGES
      RAL,RAL 
      STA $CMST 
* 
      LDA $DLP      GET IT AGAIN
      CMA,INA       MAKE IT NEG 
      ADA BKCOM     ADD LENGTH & START OF COMMON
      LDB $MPFT 
      ADB D3
      ADA B,I 
* 
      SZA,RSS       ANY COMMON AT ALL ? 
      JMP NCOMN      NO 
      AND B76K      YES. SO GET PAGE BITS 
      ALF           TO LOW END
      RAL,RAL       AND SAVE IT 
NCOMN STA $COML     THIS IS THE LENGTH(IN PAGES) OF COMMON
* 
      ADA $CMST     ADD IN START PAGE OF COMMON & 
      STA $SDA      WE HAVE THE START OF THE SYS DVR AREA 
* 
      LDB $PLP      GET THE PRIV LOAD POINT 
      BLF           GET PAGE # TO LOW END 
      RBL,RBL 
      CMA,INA       SUBTRACT FROM START OF SYS DVR AREA 
      ADA B         TO GET LENGTH OF TB 1 & SYS DVR AREA
      STA $SDT2 
* 
      LDA LBORG     NOW GET THE LIBRARY ORGIN 
      ALF           CONVERT TO PG # 
      RAL,RAL 
      STA $RLB      AND SET AS START OF RES LIB 
* 
      LDB $MPFT     NOW 
      INB           GET START OF MEM RES AREA 
      LDB B,I       TO LOW END
      BLF 
      RBL,RBL 
      CMA,INA       ADD IN START OF LIBRARY 
      ADA B         AND WE GET THE LENGTH 
      STA $RLN      OF THE RES LIBRARY
* 
* 
      SPC 1 
*     SET UP THE SYSTEM MAP AND RETURN
      SPC 1 
* 
      CLA           START REGISTER 0
      CLB           START VALUE = 0 
      LDX $SDA      SET EM UP TO START OF SYS DVR AREA
      XMS           DO IT ! 
* 
      ADB WRTPR     NOW GET THE WRITE PROTECT 
      STA TBL       SAVE START REGISTER 
      LDA $SDA      GET START VALUE 
      CMA,INA       MAKE NEG TO GET # OF REGS 
      ADA D32       LEFT TO SET UP
      CAX           PUT IN X-REG
      LDA TBL       RESTORE START REG 
      XMS           AND PLAY IT AGAIN SAM.
* 
      LDA $MPSA     GET START PAGE SYS AV 
      AND B1777 
      STA TBL       B HAS START VALUE 
      LDA EQT1
      AND B1777 
      XOR EQT1      KEEP ONLY PAGE
      ALF 
      RAL,RAL       GET IN LOW 5 BITS 
      STA NWDS1     START PAGE OF SAM 
      LDA TBL 
      XOR $MPSA     GET LENGTH
      ALF 
      RAL,RAL       A HAS LENGTH
      CAX           PUT IN XREG 
      LDB TBL       START PAGE NUMBER 
      ADB WRTPR     AND WRITE PROTECT 
      LDA NWDS1     START REGISTER
      XMS           LOAD MAP
* 
* 
      STA NWDS1     SAVE REGISTER # 
      LDA $MPS2     GET THE 2ND CHUNK OF SAM
      AND B1777     SAVE THE PHY PG # 
      LDB A         PUT IN B
      ADB WRTPR     AND SET UP WRITE PROTECT
      XOR $MPS2     NOW GET # OF PAGES
      ALF 
      RAL,RAL       TO LOW END
      CAX           AND PUT INTO X AS # OF REGISTERS
      LDA NWDS1     GET START REG BACK AGAIN
      XMS           AND DO IT 
      SJP $SYMP,I   SET UP SYSTEM MAP & RETURN
TBL   NOP 
*$MPSA-$MPS2   0-9 START PG SAM 
*              10 - 15 NUMBER PGS SAM 
WRTPR OCT 40000 
B70K  OCT 70000 
B76K  OCT 76000 
* 
OVCHK EQU *-ENDT    OVERLAY CHECK 
* 
      HED MESSAGE PROCESSOR--IT,XXXXX COMMAND 
*     IT,XXXXX
*     IT,XXXXX,R,MMM
*     IT,XXXXX,R,MMM,HR,MN
*     IT,XXXXX,R,MMM,HR,MN,SC 
*     IT,XXXXX,R,MMM,HR,MN,SC,MS
* 
*        R=RESOLUTION CODE
*           1= TEN MILLISECOND CODE 
*           2= SECONDS CODE 
*           3= MINUTES CODE 
*           4= HOURS CODE 
*       MM= MULTIPLICATION FACTOR 
*       HR= START HOURS 
*       MN= START MINUTES 
*       SC= START SECONDS 
*       MS= START TENS OF MILLISECONDS
* 
M0600 JSB TTNAM    GO FIND ID SEG ADDR
      SZA          PROG MUST BE DORMANT TO CONTINUE 
      JMP M0405    ILLEGAL STATUS ERROR 
      LDA WORK      SET 
      ADA D17        UP THE TIME PRAMETER 
      STA TEMPP      STARTING ADDRESS.
      LDB P2        GET THE RESOLUTION
      ADB DM5        CODE AND TEST
      SSB,RSS         FOR MORE THAN 4.
      JMP $INER         GREATER THAN 4-ILLEGAL CODE 
      LDA P3        GET THE MULT. FACTOR. 
      LDB TEMPP,I   GET THE OLD TIME PRAM.
      BLF,ERB       IF IN TIME LIST 
      ALF,ERA       SET BIT IN NEW WORD.
      LDB P2        GET RESOLUTION TO B 
      SZB,RSS       IF ZERO RESOLUTION
      JMP M0605     GO REMOVE FROM TIME LIST
      LSR 3         SHIFT THE WHOLE MESS TO A 
M0604 STA TEMPP,I   SET NEW RESOLUTION MULT.
      ISZ TEMPP     INCR TO TMS ADDRESS 
      LDA P7        GET TENS OF MS. 
      ADA DM100 
      SSA,RSS      MINUS, IF LEGAL VALUE
      JMP $INER    INPUT ERROR
      LDA P6        GET SECONDS VALUE 
      ADA DM60
      SSA,RSS      MINUS, IF LEGAL VALUE
      JMP $INER    INPUT ERROR
      LDA P5        GET MINUTES.
      ADA DM60
      SSA,RSS      YES, SO CONVERT TO DECIMAL 
      JMP $INER    INPUT ERROR
      LDA P4        GET HOURS 
      ADA DM24
      SSA,RSS      MINUS, IF LEGAL VALUE
      JMP $INER    INPUT ERROR
      LDA DP4       SET DEFS TO THE PRAMS 
      STA RQP5      ON THE BASE 
      LDA DP5       PAGE FOR
      STA RQP6      $ETTM 
      LDA DP6       THE SET TIME
      STA RQP7      SUBROUTINE
      LDA DP7       IN THE
      STA RQP8      RTIME MODULE
      LDB TEMPP     GET ID-SEG ADDRESS AND
      JSB $ETTM     GO SET VALUES IN ID-SEG 
      JMP M0150     EXIT $MESS
      SPC 2 
M0605 CCB           REMOVE PGM FROM TIME
      ADB TEMPP     LIST
      JSB $TREM 
      CLA           AND CONTINUE
      JMP M0604     SETTING UP THE ID-SEG 
     SPC 1
DM100 DEC -100
      SPC 2 
BLIM  CLB,CCE,INB   CHECK TO SEE IF EXAMINE 
      CPB PARAM     ONE PRAM? 
      JMP BLIMP     YES  GO PRINT LIMITS
* 
      LDB P2        GET THE SECOND PRAMETER 
* 
* LOWER LIMIT IN (A) UPPER LIMIT IN (B) 
* 
      SSB,RSS       NEGATIVE LIMITS 
      SSA             ARE NOT 
      JMP $INER         ALLOWED 
* 
      CMB,INB,SZB   GET NEW UPPER LIMIT 
      STB $BLUP     IF ZERO SKIP THE STORE
      CMA,INA       SET UP THE LOWER LIMIT
      STA $BLLO 
      JMP M0150     GO EXIT DONE
      SPC 1 
BLIMP LDA $BLLO     GET THE LOWER LIMIT 
      CMA,INA       SET POSITIVE
      JSB $CNV1     CONVERT TO ASCII OCTAL
      STA BUFF3     SET LOW DIGITS
      DLD ASCI      GET THE HIGH 4 DIGITS 
      DST BUFF1     AND SET IN BUFFER 
      LDA $BLUP     GET THE UPPER LIMIT 
      CMA,CCE,INA   SET POSITIVE
      JSB $CNV1     CONVERT 
      STA BUFF7     SET THE LOW DIGITS
      DLD ASCI      GET THE HIGH DIGITS 
      DST BUFF5     SET IN THE BUFFER 
      LDA AASCI     GET A DOUBLE BLANK
      STA BUFF4     SET BETWEEN THE NUMBERS 
      LDA DM14      GET RECORD LENGTH 
      STA BUFFR     SET IN THE BUFFER AND 
      JMP M0520     GO SEND THE MESSAGE 
      SPC 1 
      HED MESSAGE PROCESSOR--PR,XXXXX,ZZ COMMAND
* 
*    PR,XXXXX,ZZ PROCESSOR
* 
*        THE PRIORITY CHANGE ROUTINE FUNCTIONS AS FOLLOWS:
*              IF PROGRAM STATUS OTHER THAN DORMANT, STATUS ERROR.
*              IF DORMANT, THEN PRIORITY VALUE CHANGED AND PROGRAM
*                   LIST UPDATED VIA LINK PROCESSOR.
* 
M0650 JSB TTNAM    GO TO FIND ID SEG ADDR 
      LDA P2        GET PRIORITY
      SSA,RSS 
      SZA,RSS      CHECK IF ZERO PRIORITY REQ 
      JMP $INER      ERROR-ILLEGAL VALUE
      LDB WORK
      ADB D6
      STA B,I      STORE NEW PRIORITY VALUE 
      STA NPCNG     SAVE NEW PRIORITY 
      JSB $LIST     RELINK THE PROGRAM
      OCT 317       BY NEW PRIORITY 
      LDB NPCNG     GET NEW PRIO
      LDA WORK      GET ID ADR
      JSB PRCNG     GO RELINK IN ALLOCATED LIST 
      CLA 
      JMP MSEX     RETURN 
NPCNG BSS 1 
      SPC 5 
*     MESSAGE PROCESSOR -- TM COMMAND 
* 
M0700 LDB DEFP1     PASS PRAM. ADDRESS TO 
      JMP $TMRQ     RTIME PROCESSOR 
      SPC 2 
*     MESSAGE PROCESSOR -- BR,XXXX REQUEST
* 
*     SET BREAK BIT IN PROGRAMS ID-SEGMENT
* 
M0725 JSB TTNAM     LOOK UP THE PROGRAM 
M0730 ADB D20       INDEX TO BREAK WORD 
      LDA B,I       GET WORD
      IOR B10K      SET BREAK BIT 
      STA B,I       RESTORE THE WORD
      JMP M0150     EXIT
      HED MESSAGE PROCESSOR--TI COMMAND 
* 
*     TI COMMAND
* 
*        THE REQUEST TO GET CURRENT SYSTEM TIME OUTPUTS CURRENT 
*        YEAR, DAY NUMBER, HOUR, MINUTES, AND SECONDS IN THE
*              FOLLOWING FORMAT:
*              YEAR.DAY..HR..MN..SC 
*          WHERE THE .'S ARE BLANKS 
* 
M0750 LDA DM20
      STA BUFFR     SET OUTPUT CHARACTER COUNT
      LDA DTEMP     SET UP TO GET THE TIME
      STA RQP2      TO TEMP AREA
      ADA D5
      STA RQP3
      DLD $TIME 
      JSB $TIMV     GO GET TIME 
      JSB $CNV1     CONVERT YEARS 
      STA BUFF2     SET LEAST TWO DIGITS
      LDA ASCI1     GET THE NEXT TWO DIGITS 
      STA BUFF1     AND SET THEM
      LDA TEMP4     GET DAYS
      JSB $CNV1    CONVERT AND STORE DAYS 
      STA BUFF4     SET LEAST TWO DIGITS
      LDA ASCI1     GET NEXT DIGIT
      STA BUFF3     SET IN BUFFER 
      LDA AASCI     STUFF NECESSARY WORDS WITH
      STA BUFF5     BLANKS
      STA BUFF7 
      STA BUFF9 
      LDA TEMP3     GET HOURS 
      JSB $CNV1    CONVERT AND STORE HOURS
      STA BUFF6 
      LDA TEMP2 
      JSB $CNV1    CONVERT AND STORE MINUTES
      STA BUFF8 
      LDA TEMP1 
      JSB $CNV1    CONVERT AND STORE SECONDS
      STA BUF10 
      JMP M0520     GO SET A AND EXIT 
      SPC 1 
DM20  DEC -20 
* 
*     DN,N1 OR DN,,N2 
* 
*     THE REQUEST TO DOWN AN EQT OR LU WORKS AS FOLLOWS:
*       IF N1 IS GIVEN, DOWN THE EQT POINTED TO BY N1.
*       IF N2 IS GIVEN, DOWN THE LU POINTED TO BY N2. 
* 
M0800 CCE           NO THIRD PARAMETER. 
      JSB P1OR2     SET A=PARAMETER 1, B=PARAMETER 2. 
      JMP $IODN     GO TO 'DOWN' ROUTINE. 
      HED MESSAGE PROCESOR--LU,EQ AND TO COMMANDS 
* 
*    MESSAGE PROCESSOR --LU,N1,N2  COMMAND
* 
*   REQUEST OF LOGICAL UNIT ASSIGNMENT (N1 VALUE ONLY) OR 
*   REQUEST LOGICAL UNIT REASSIGNMENT(N1 & N2 - OR
*   N1, N2 ,& N3 PRESENT) 
* 
M0850 CLE           SET THE N3 POSSIBLE SWITCH
      JSB P1OR2     SET UP PARAMETERS 
      JMP $LUPR 
* 
* 
      SPC 1 
      SPC 1 
* 
*     MESSAGE PROCESSOR ---- EQ,N1,N2  COMMAND
* 
* 
*   REQUEST EQUIPMENT STATUS (N1 PARAMETER ONLY)
*   REQUEST EQUIPMENT BUFFERING OR NON BUFFERING (N1 & N2)
*             N2 = 0   FOR NO BUFFERING 
*             N2 = 1   FOR BUFFERING
* 
M0900 CCE           CLEAR N3 POSSIBLE SWITCH
      JSB P1OR2     SET IT UP 
      JMP $EQST 
* 
* 
D29   DEC 29
D28   DEC 28
DM12  DEC -12 
DM6   DEC -6
      SPC 1 
      SPC 1 
*     MESSAGE PROCESSOR   TO,N1,N2 COMMAND
* 
* 
*     REQUEST DEVICE TIME OUT PARAMETERS (N1 ONLY)
*     REQUEST TO ASSIGN DEVICE TIMEOUT (N1 & N2)
*           N1 = DEVICE EQT # 
*           N2 = TIME OUT PARAMETER TO BE ASSIGNED
* 
M0990 CCE           CLEAR N3 POSSIBLE SWITCH
      JSB P1OR2     SET IT UP 
      JMP $CHTO 
* 
* 
* 
* 
      SKP 
P1OR2 DEF ABM      ENTRY/EXIT 
      LDA CP2      CHECK IF JUST
      SZA,RSS       ONE PARAMETER 
      JMP P1OR5     YES - GO  EXIT
      LDA P2        GET SECOND PRAM.
      SEZ,RSS      IS A THIRD PARAMETER POSSIBLE? 
      JMP P1OR7     YES 
P1OR3 LDB A        LOAD B WITH 'N2' OR 'N3:N2'
P1OR4 LDA P1        LOAD A WITH N1
      JMP P1OR2,I 
P1OR5 CCB          SET B REG TO -1 FOR 1 PARAMETER
      JMP P1OR4 
P1OR7 AND B377     SAVE BITS 7-0
      STA P2        OF 'N2' 
      LDA P3        GET 'N3'
      AND B37      KEEP BITS 4-0 AND
      LSL 11          MOVE THEM TO POSITIONS 15-11
      ADA P2        ADD IN THE 'N2' PRAM
      JMP P1OR3     GO EXIT 
* 
B37   OCT 37
* 
*           INPUT ERROR MESSAGE OUTPUT
* 
* 
$INER LDA $ERIN     INPUT ERROR MESSAGE 
      JMP MSEX     RETURN 
      HED MESSAGE PROCESSOR -- AB COMMAND 
* 
*     MESSAGE PROCESSOR -- AB COMMAND 
* 
*     THE AB COMMAND ABORTS THE BATCH PROGRAM CURRENTLY 
*     BEING EXECUTED
* 
*     IT TRACKS DOWN THE LOWEST LEVEL USING FMGR AS THE 
*     FIRST LEVEL.  IF FMGR IS NOT WAITING THEN IT'S BREAK
*     FLAG IS SET.  IF FMGR IS DORMANT THE REQUEST IS ILLEGAL 
*     IF D.RTR IS AT THE END OF THE LIST THEN THE 
*     INVOLKING PROGRAM IS ABORTED OR, IF FMGR, THE BREAK FLAG
*     IS SET. 
* 
M0950 ALR,ALF       KILL BIT 3 (NEVER =8) 
      STA P2        SET THE OPTION FLAG 
      LDB IDFMG     GET FMGR'S ID-SEG. ADDRESS
M0951 STB WORK      AND SET UP WORK 
      SZB           IF NO FMGR SKIP 
      ADB D15       INDEX TO STATUS 
      LDA B,I       GET STATUS
      AND D15       IF FMGR IS DORMANT
      SZA,RSS       THEN
      JMP M0405     ILLEGAL STATUS EXIT 
* 
      LDA B,I       GET STATUS
      ALF,CLE,SLA   IF WAITING
      JMP M0958     GO TRACK DOWN 
* 
M0955 LDB IDFMG     GET FMGR'S ID-SEG ADDRESS 
      CPB WORK      IF SAME AS CURRENT
      JMP M0730     GO SET BREAK FLAG 
* 
      JMP M0202     ABORT 
* 
M0958 LDB WORK      GET CURRENT ID
      INB           STEP TO WAIT PROGRAM
      LDB B,I       GET ADDRESS 
      CPB ID.RT     IF D.RTR
      JMP M0955     GO DO PREVIOUS PGM. 
* 
      CPB $IDSM     IF SMP
      JMP M0955     GO TO PREV. 
      JMP M0951     AND CONTINUE
      HED MESSAGE PROCESSOR - LS N1,N2  PROCESSOR 
* 
*  SET "SOURCE FILE" IDENTIFICATION 
* 
*  THE OPERATOR REQUEST IS: 
*    "LS,LUN,1ST TRACK # "
*  THIS STATEMENT SETS THE SOURCE FILE CONTROL WORD 
*  IN THE COMMUNICATION AREA IN THE FOLLOWING 
*  FORMAT( THE WORD IS LABELED "SFCUN" ): 
*    *******************************
*    *LU* ST. TRACK #*    ZERO     *
*    *******************************
*     15,14    -    7,6     -     0  (BITS) 
* 
*  THE LOGICAL UNIT # AND STARTING TRACK # ARE
*  RECORDED BY THE 'EDITOR' WHEN THE SOURCE FILE
*  IS CREATED.
* 
*  VALIDITY CHECKS ARE FOR  LOGICAL UNIT = 2 OR 3,
*  HOWEVER, A LU = 0 WILL SET "SFCUN" = 0.
* 
M0960 CLB            IF PARAM 1 = 0, GO TO
      SZA,RSS 
      JMP M0961      CLEAR "SFCUN"
      CLE,ERA       SET E IF LU 3.
      CPA D1        IF NOT LU 2 OR THREE
      CPB CP2       OR P2 NOT SUPPLIED THEN TAKE
      JMP $INER     ERROR EXIT. 
      ERB           SET SIGN OF B TO 1 IF LU 3. 
      ADB P2        ADD THE TRACK AND 
      ASL 7         NORMALIZE (I.E. PUT IN 14-07) 
* 
M0961 STB SFCUN     SET "SFCUN" 
      JMP M0150     GO EXIT 
* 
ID.RT NOP 
ID.ED NOP 
IDFMG NOP 
$IDSM JMP GTFMG     START UP CODE 
      HED MESSAGE PROCESSOR - LG,N COMMAND
* 
*  SET "LOAD-AND-GO" PARAMETERS 
* 
*  THE OPERATOR STATEMENT IS: 
*     "LG,# OF TRACKS"
* 
*  THIS STATEMENT ALLOWS THE OPERATOR TO: 
*   1. ALLOCATE A NUMBER OF CONTIGUOUS DISC 
*      TRACKS FOR 'LOAD-AND-GO' USAGE.
*   2. RELEASE TRACK(S) CURRENTLY ASSIGNED TO LGO.
* 
*  THIS REQUEST HAS NO EFFECT IF LGO CURRENTLY IN USE 
* 
*  THE BASE PAGE COMMUNICATION AREA WORDS DESCRIBED 
*  BELOW CONTAIN THE LGO TRACK ASSIGNMENTS: 
* 
*           ********************************
*   'LGOTK' *LU* ST. TRACK # * # OF TRACKS *
*           ********************************
*            15,14---------07,06---------00 
* 
*           ********************************
*   'LGOC'  *LU*  TRACK #    * SECTOR  #   *
*           ********************************
*            15,14---------07,06---------00 
* 
*   LGOTK DEFINES THE LU #, THE STARTING TRACK #
*    AND THE NUMBER OF CONTIGUOUS TRACKS. THIS
*    WORD IS ZERO IF NO TRACKS ARE ALLOCATED. 
* 
*   LGOC  DEFINES THE CURRENT AVAILABLE SECTOR. 
*    THIS IS UPDATED BY 'RTIOC' AND RESET TO
*    THE BEGINNING OF THE AREA BY THE LOADER
*    AFTER LOADING FROM THE LGO AREA; ALSO BY 
*    THIS ROUTINE WHEN THE TRACKS ARE ALLOCATED.
* 
* 
M0970 AND B177       MAX. VALUE OF 127. 
      STA P1         -SAVE P- 
      SZA,RSS       IF P = 0, GO TO 
      JMP M0971      RELEASE LGO TRACK(S).
      CLA           CHECK FOR 
      CPA LGOTK      CURRENT ASSIGNMENT.
M0975 CLB,RSS        -NONE
      JMP M0971      -RELEASE CURRENT 
* 
      LDA P1        (A) = # OF TRACKS 
      JSB $DREQ     ALLOCATE TRACKS 
* 
      SZB,RSS       IF P TRACKS NOT 
      JMP M0972      AVAILABLE, GO FOR DIAG. RETURN.
* 
      RBR           SET SIGN OF B IF LU 3.
      ASL 16        MOVE THE TRACK UP 
      ASL 7          TO BITS 14-07 OF B.
      STB LGOC      SET LGOC. 
      ADB P1        SET # OF TRACKS IN 06-00
      STB LGOTK      AND SET LGOTK. 
* 
      JMP MSEX       -RETURN- 
* 
M0971 CPA LGOTK 
      JMP MSEX
      LDB LGOTK     GET ASSIGNMENT WORD TO RELEASE. 
      CLE,ELB       SET E IF LU = 3 
      LSR 8         SET FIRST TRACK IN B
      ALF,ALF       PUT # OF
      RAR            TRACKS IN A
      CMA,SEZ,CLE,INA SET NEGATIVE,SKIP IF LU 2.
      ADB TATSD     ADD SYSTEM DISC SIZE
      JSB $CREL     GO RELEASE IF POSSIBLE
      SZB           RELEASE OK? 
      JMP M1973     NO SEND THE NASTY MESSAGE.
      STB LGOTK     CLEAR 'LOAD-AND-GO' 
      STB LGOC       CONTROL WORDS. 
      CPB P1        IF P = 0, 
      JMP M0150      -RETURN- 
      JMP M0975      GO TO ALLOCATE NEW TRACKS. 
* 
M0972 LDA $NOLG     PRINT: NO LGO SPACE 
      RSS 
M1973 LDA $LGBS     PRINT: LGO IN USE 
      JMP MSEX
* 
      HED MESSAGE PROCESSOR SIZE COMMAND
* 
* 
*  THE SIZE COMMAND COMES IN THREE FLAVORS
* 
*   1) SZ,XXXXX          PRINTS SIZE INFORMATION ON PROGRAM XXXXX 
*   2) SZ,XXXXX,P2       FOR NON EMA PROGRAMS, CHANGES MAX LOGICAL
*                        ADDRESS SPACE OF XXXXX TO P2 PAGES.
*                        FOR EMA PROGRAMS P2 BECOMES THE NEW
*                        SIZE OF PROGRAM + EMA SIZE, IE, THE
*                        NEW MINIMUM PARTITION SIZE OF THE PROG.
*   3) SZ,XXXXX,P2,P3    THIS FORM IS FOR EMA PROGRAMS ONLY. P2 
*                        IS AS DESCRIBED ABOVE.  P3 IS THE NEW
*                        MSEG SIZE. 
* 
* 
*  TEMPS:    TEMPY = # OF PAGES IN PROG (NO MSEG) + DYNAMIC BUFFER AREA 
*                    IF THE PROGRAM IS AN EMA PROGRAM 
*                  = NEG LOW MAIN ADDRESS IF PROG NOT EMA 
* 
* 
* 
SIZE  LDA PARAM     GET THE PARAMETER COUNT 
      CPA D2        IS IT JUST 2 ?
      JMP SZRPT     YES,SO REPORT THE SIZE INFO 
* 
      JSB SZCHK     NO, SO GO SEE IF MODS OK
      JSB $SZIT     NOW GO GET ALL THE PARAMETERS 
      LDB TEMPB,I   *E
      SZB           *E IS IT AN EMA PROG? 
      JMP ESIZX       YES 
* 
      LDB WORK      GET THE LOW MAIN ADDRESS
      ADB D22 
      LDA B,I 
      STA TEMPI     SAVE IT FOR LATER 
      CMA,INA       MAKE NEG
      STA TEMPY     AND SAVE
      ADB D7        NOW CALCULATE THE # OF WORDS IN 
      ADA B,I       IN THE PROGRAM CODE 
      ADB DM6 
      CPA TEMPY     PROG SEGMENTED  ? 
      ADA B,I       NO. 
      ADA B1777     ALLIGN TO PAGE
      ALF           NOW, CONVERT TO # OF PAGES OF CODE. 
      RAL,RAL 
      AND B37 
      CMA           MAKE NEG & ADD IN BASE PAGE 
      ADA P2        NOW ADD NEW SIZE SPECIFIED
      SSA           IS LOWER LIMIT CHECK OK ? 
      JMP SZERR     NO, SO ITS A SIZE ERROR 
* 
*   WE ALREADY HAVE MAX PARTITION SIZE, BUT MIGHT BE GREATER
*   THAN MAX PROGRAM ADDRESS SPACE.  LETS SEE.
* 
      LDA TEMPI     GET THE LOW MAIN ADDRESS
      ALF           GET PAGE #
      RAL,RAL 
      ADA DM32      NOW SEE WHICH IS SMALLER
      LDB A         SAVE IT 
      CMB,INB       BUT MAKE POSITIVE 
      ADA TEMPA     ADD IN LARGEST PARTITION SIZE 
      SSA,RSS       OF THE TWO KEEP THE SMALLEST
      STB TEMPA     USE LOGICAL ADDRESS SPACE 
* 
* 
      LDB P2        GET THE INPUT SIZE
      CMB,INB       MAKE NEG
      ADB TEMPA     ADD IN MAX SIZE 
      INB 
      SSB           OK ?
      JMP SZERR     NO !  SEND SIZE ERROR.
* 
      CCB           NOW GO
      ADB P2        GET THE REQUESTED SIZE
ESIZW BLF,BLF       AND SHIFT UP
      RBL,RBL 
      LDA TEMPC,I   GET THE # OF PAGES WORD 
      AND BPG#      OUT GOES THE OLD
      ADA B         IN GOES THE NEW 
* 
      SSA,RSS       IF PART'N ISN'T RESERVED, ZAP PART'N #
      AND B177K     BECAUSE PROG MIGHT NOT RUN THERE ANTMORE
      STA TEMPC,I   SOCK IT AWAY
      JMP M0150     AND RETURN
* 
* 
B177K OCT 177700
      SPC 2 
*     EMA PROGRAM CHECK 
      SPC 2 
* 
ESIZX LDA TEMPF     GET THE MSEG SIZE 
      CMA,INA       SUBTRACT FROM PROG SIZE 
      ADA TEMPI 
      STA TEMPY     TEMPY = PROG SIZE (NO MSEG) 
* 
      LDB CP3       GET THE LAST PARAMETER
      SZB,RSS       ANY SUPPLIED ?
      JMP ESFX1     NO, SO DON'T CHECK IT OUT
      CCB           NOW CHECK MSEG SIZE 
      ADB P3
      SSB,INB       MUST NOT BE LESS THAN 1 
      JMP $INER     IT IS, SO FORGET IT 
* 
      CLA,INA       *E
      ADA TEMPE     *E INDEX TO 2ND ID EXT WORD 
      LDA A,I       *E  AND GET MSEG START PAGE 
      ALF,RAL       *E
      AND B37       *E GET VALUE FROM LOW 5 BITS
      CMA,INA       *E SUBTRACT FROM 32 TO GET
      ADA D32       A = MAX MSEG SIZE 
      CMB,INB       B = - INPUT SIZE
      ADA B 
      SSA           WELL,IS IT OK OR NOT ?
      JMP SZERR     NOT ! FLUSH HIM 
      JMP ESFX3     IS. 
* 
ESFX1 LDA TEMPF     USE OLD MSEG SIZE AS NEW. 
      STA P3
* 
ESFX3 LDA CP2       WAS THIS PARAMETER SUPPLIED ? 
      SZA,RSS       WELL ?
      JMP ESFX2     NO
      LDA TEMPE     GET ADDRESS OF ID EXTENSION 
      INA 
      LDA A,I       INDEX TO DE BIT WORD
      ALF,RAL       NOW IF THE DE BIT IS CLEAR
      SSA,RSS       THEN CHANGE IS ILLEGAL
      JMP SZERR     SO YOU LOSE ! 
* 
      LDA P2        GET THE INPUT EMA SIZE
      SZA           IF = 0
      SSA           OR IF < 0 
      JMP $INER     ITS AN ERROR. 
* 
      ADA TEMPY     ADD # OF PAGES OF PROG (NO MSEG)
      CMA,INA       NOW SEE IF PROGRAM WILL FIT INTO
      ADA TEMPA     PROPER PARTITION
      SSA           WELL ?
      JMP SZERR     NO, YOU LOSE. 
* 
      LDA TEMPB,I   GET THE EMA WORD
      XOR TEMPG     OUT GOES THE OLD
      ADA P2        IN GOES THE NEW 
      STA TEMPB,I 
* 
ESFX2 LDA TEMPE,I   GET THE 1ST ID EXTENSION WORD 
      XOR TEMPF     OUT GOES THE OLD
      ADA P3        IN GOES THE NEW 
      IOR SIGN      ANS THE NON STANDARD BIT
      STA TEMPE,I 
* 
      LDB TEMPY     GET THE # OF PAGES IN PROG
      ADB P3        ADD IN THE NEW MSEG SIZE
      JMP ESIZW     NOW GO PUT IT IN THE ID SEG 
* 
D32   DEC 32
      SKP 
* 
* 
SZRPT JSB TTNAM     GET THE ID INFO 
      ADB D14       GET THE PROGRAM TYPE
      LDA B,I 
      AND D7
      CPA D1        MEMORY RESIDENT ? 
      JMP $INER     YES, INPUT ERROR. 
      JSB $SZIT     PICK UP THE SIZE WORDS
      LDB WORK      NOW GET THE ID ADDRESS
      ADB D29       INDEX TO HIGH MAIN OF LARGEST SEG 
      LDA B,I       PULL IT IN
      ADB DM6       NOW INDEX TO HIGH MAIN OF PROG
      CLE,SZA,RSS   IF ZERO THEN NO SEGMENT SO USE
      LDA B,I       PROGRAM SIZE
      JSB $CNV3     NOW CONVERT TO ASCII (OCTAL)
* 
      LDA ASCI      GET THE 1ST WORD
      STA BUFF1     AND PUT IT IN THE BUFFER
      DLD ASCI1     AND GET THE LAST 2 WORDS
      DST BUFF2     AND SAVE THEM TOO 
* 
* 
      LDA TEMPI     GET SIZE OF PROG (+ MSEG IF EMA ) 
      LDB TEMPB,I   IS THE PROGRAM EMA ?
      SZB,RSS 
      JMP LSIZE     NO JUST GO LIST SIZE
      LDB TEMPF     YES GET MSEG SIZE 
      CMB,INB       AND SUBTRACT IT 
      ADB TEMPG     FROM THE EMA SIZE 
      ADA B         AND ADD (A = PROG + EMA SIZE) 
LSIZE CCE,INA       ACCOUNT FOR BASE PG & DO DECIMAL CONVERSION 
      JSB $CNV3     DO THE CONVERSION 
* 
      DLD ASCI1     GET THE LOWER 2 WORDS (MAX = 1024)
      DST BUFF5     AND SET INTO BUFFER 
      LDA ASCI      GET A BLANK 
      STA BUFF4     AND PUT IT OUT AS A DELIMITER 
      STA BUFF7     ON BOTH SIDES 
      STA BUF10     AND FOR THE NEXT ONE
      STA BUF11     AND FOR THE NEXT ONE
* 
      LDA TEMPB,I   GET THE EMA WORD
      AND B1777     KEEP ONLY EMA SIZE
      LDB DM12      GET A CHAR COUNT
      CCE,SZA,RSS   (DECIMAL CONVERSION) IF NO EMA THEN,
      JMP SZEXT     WE'RE DONE
* 
      JSB $CNV3     NOW THEN,CONVERT TO ASCII 
* 
      DLD ASCI1     GET THE RESULT (MAX = 1024) 
      DST BUFF8 
* 
      LDA TEMPF     AS LONG AS WE'RE HERE LETS
      JSB $CNV3     GIVE THEM THE MSEG SIZE TOO.
      DLD ASCI1 
      DST BUF12 
* 
* 
      LDB DM26      GET THE CHAR COUNT
SZEXT STB BUFFR     AND PUT IT IN THE BUFFER
      LDA BUFAD     THE BUFFER ADDRESS TO A 
      JMP MSEX      NOW , GO TELL THE FOLKES. 
* 
DM26  DEC -26 
      SKP 
*     THE SZCHK SUBROUTINE IS CALLED BY THE SZ & AS PROCESSORS
*     IT MAKES SURE THAT THE PROGRAM EXISTS, IS NOT A SEGMENT,
*     IS DORMANT, IS NOT MEMORY RESIDENT, AND DOES NOT CURRENTLY
*     OWN ANY PARTITION.
* 
* 
SZCHK NOP 
      JSB TTNAM     GO LOOK FOR THE PROGRAM 
      SZA           IF NOT DORMANT, TAKE GAS !
      JMP M0405     SEND ILLEGAL STATUS ERROR.
* 
      LDB WORK      NOW GO SEE WHAT TYPE
      ADB D14       PROGRAM THIS IS 
      LDA B,I 
      AND D7        KEEP ONLY LOWER 3 BITS
      CPA D1        IS IT MEMORY RESIDENT ? 
      JMP M0405     THEN SEND ILLEGAL STATUS ERROR
* 
      ADB D7        NOW GET TO THE PARTITION WORD 
      LDA B,I       PULL IT IN AND KEEP ONLY
      AND B77       THE PARTITION BITS
      MPY D7       USE THIS AS AND INDEX INTO 
      ADA $MATA     THE $MATA TABLE 
      ADA D2        SO WE CAN SEE WHO OWNS THAT PARTITION 
      LDA A,I       PULL IN THE OWNERS ID ADDRESS 
      CPA WORK      AND COMPARE IT TO THIS GUY
      JMP M0405     IF SAME THEN SEND ILLEGAL STATUS ERROR
      JMP SZCHK,I   IF YOU GOT HERE, YOUR A WINNER !!!
* 
* 
SZERR LDA $SERR 
      JMP MSEX
* 
* 
$SERR DEF *+1 
      DEC -10 
      ASC 5,SIZE ERROR
* 
BPG#  OCT 101777
B1777 OCT 1777
* 
* 
      HED     MESSAGE PROCESSOR ---  UR COMMAND 
* 
* 
*   WHY, YOU ASK YOURSELF,  IS THERE A UNRESERVE COMMAND. 
*   IT SEEMS INTUITIVELY OBVIOUS TO THE MOST CASUAL OBSERVER
*   THAT A RESERVE COMMAND WOULD BE MORE USEFUL.  BUT WHAT
*   HAPPENS TO THE POOR PROGRAM THAT IS SWAPPED OUT, AND THEN 
*   THE ONLY PARTITION HE WILL RUN IN IS RESERVED.  WHERE IS
*   HE TO GO ?   REMEMBER !  PARANOIA IS THE WATCH WORD OF
*   A GOOD OPERATING SYSTEM.
*        UR, N     N = NUMBER OF PARTITION TO BE UNRESERVED 
* 
URESV ADA DM1       SUBTRACT 1 FROM PART'N #
      SSA           IF NEG, SEND ILLEGEL PART'N MESSAGE 
      JMP IPRTN 
      CMA           MAKE NEG & CHECK AGAINST
      ADA $MNP      MAX # OF PARTITIONS 
      SSA           IS IT OK ?
      JMP IPRTN      NO SEND ILLEGAL PARTITION MESSAGE
* 
      CCA 
      ADA P1        INDEX INTO
      MPY D7       PROPER MATA TABLE ENTRY
      ADA $MATA 
      LDB A,I       GET THE LINK WORD 
      SSB           IF PARTITION UNDEFINED
      JMP IPRTN     SEND ERROR MESSAGE
* 
      ADA D4        NOW GET THE ENTRY 
      LDB A,I 
      STB TEMPX     SAVE THE SIZE FOR A LATER CHECK 
      RBL,CLE,ERB   STRIP SIGN BIT
      STB A,I       AND PUT IT BACK 
* 
      INA           BUMP TO TYPE WORD 
      LDB A,I       GET IT
      SSB           IS IT RT ?
      JMP URRT      YES CHECK SIZE
      ADA DM2       NOW GO CHECK MOTHER BIT 
      LDB A,I       PULL IT IN
      SSB           IS IT SET ? 
      JMP URMT      YES 
* 
      LDB $MBGP     GET MAX BG PART'N SIZE
MCHEK LDA TEMPX     GET PARTITION SIZE
      AND B1777     KEEP ONLY SIZE
      CMB           AND COMPARE AGAINST THAT TYPE PTN SIZE
      ADA B         NOW IS THE UNRESERVED 
      SSA           PARTITION BIGGER THAN LAST OLD PARTITION ?
      JMP M0150     NO SO WERE FINISHED 
* 
      JSB $MAXP     YES, SO SET UP THE LARGER PARTITION 
      JMP M0150 
* 
* 
* 
URRT  LDB $MRTP     GET CURRENT RT MAX SIZE 
      JMP MCHEK 
* 
URMT  LDB $MCHN 
      JMP MCHEK 
* 
* 
IPRTN LDA $ILPN 
      JMP MSEX
* 
B777K OCT 77700 
* 
$ILPN DEF *+1 
      DEC -14 
      ASC 7,ILLEGAL PART'N
* 
      HED MESSAGE PROCESSOR  ---  AS  COMMAND 
* 
*         AS,XXXXX, Y 
* 
* 
*    THE AS COMMAND WILL ASSIGN PROGRAM XXXXX TO PARTITION # Y
*    XXXXX MUST BE DORMANT AND NOT RESIDENT IN ANY PARTITION. 
*    (IE HE MAY NOT HAVE PREVIOUSLY TERMINATED SERIALLY 
*     REUSABLE.  DO AN OF,XXXXX,1 IF HE DID)
* 
ASIGN JSB SZCHK     1ST GO SEE IF CMND LEGAL
      JSB $SZIT     GET THE NEEDED ADDRESSES. 
      LDA P2        GET THE PARTITION 
      CLE,SZA,RSS   IF = 0 WE UNASSIGN
      JMP ASTUF     GO UNASSIGN 
* 
      SSA           IF NEG IT'S AN
      JMP IPRTN     ERROR 
      CMA,INA       IF GREATER THAT MAX # PART'NS ITS 
      ADA $MNP      AN ERROR
      SSA 
      JMP IPRTN     ALSO. 
* 
      CCA           NOW GO LOOK AT THE PARTITION
      ADA P2        ACCOUNT FOR BASE PAGE 
      STA P2        AND SAVE
      MPY D7       INDEX TO THE 
      ADA $MATA     PROPPER $MATA ENTRY 
      LDB A,I       GET THE LENGTH WORD 
      SSB           IF ENTRY UNDEFINED ITS AN ERROR 
      JMP IPRTN 
* 
      ADA D4        NOW INDEX TO THE # PAGES
      LDA A,I       WORD. 
      AND B1777     KEEP ONLY THE PAGES 
      STA TEMPX     AND SAVE FOR LATER
* 
      LDB TEMPB,I   GET THE EMA WORD
      SZB           IS THIS AN EMA PROG ? 
      JMP EMASS     YES, SO DO THE EMA THING
* 
GTPGS LDA TEMPI     GET THE # OF PAGES WORD 
      CMA,INA       MAKE IT NEG 
      ADA TEMPX     AND CHECK IT. 
      CCE,SSA       IF NEG ITS AN ERROR 
      JMP IPRTN 
* 
ASTUF LDA TEMPC,I   GET THE SIZE WORD BACK
      AND B777K     THROW AWAY OLD PARTITION
      IOR P2        PUT IN NEW PARTITION
      RAL,ERA       FIX THE RESERVED BIT
      STA TEMPC,I   AND PUT THE WORD BACK 
      JMP M0150     AND RETURN
* 
* 
EMASS LDA TEMPE     GET THE ID EXTENSION ADDRESS
      INA 
      LDA A,I       GET THE DE BIT WORD 
      ALF,RAL       PUT IN SIGN BIT 
      SSA,RSS       WAS DEFAULT TAKEN ? 
      JMP EMESS     NO. 
* 
      LDA TEMPB,I   GET THE EMA SIZE WORD 
      XOR TEMPG     GET RID OF OLD SIZE 
      INA           SET DISPATCHER FLAG FOR MAX SIZE
      STA TEMPB,I 
      CLA,INA,RSS 
* 
EMESS LDA TEMPG     GET THE EMA SIZE
      CMA,INA 
      ADA TEMPF     REDUCE BY MSEG SIZE 
EMES1 ADA TEMPX     OFSET THE PARTITION SIZE
      STA TEMPX     AND RESET IT
      JMP GTPGS     NOW GET # OF PAGES IN PROGRAM 
      HED MESSAGE PROCESSOR  ---  QU  COMMAND 
* 
*      QU,XXXXX,YYYYY 
* 
*  THE QU COMMAND WILL ASSIGN A SYSTEM SLICE VALUE AND/OR 
*  THE PROGRAM PRIORITY LEVEL AT WHICH TIMESLICING BEGINS.
*  THE STATUS OF THE SYSTEM SLICE AND PRIORITY LEVEL IS 
*  ALWAYS RETURNED UPON COMPLETION OF THIS COMMAND. 
* 
* 
* 
QUTM  LDA PARAM     FETCH PARAMETER COUNT 
      CPA D1        IF JUST DISPLAY REQUEST,
      JMP QURPT       GO DO IT
* 
     LDA $SVAL      FETCH CURRENT SYSTEM QUANTUM
      LDB CP1       WAS A NEW QUANTUM ENTERED ? 
      CPB D2        IF ASCII, 
      JMP $INER         INPUT ERROR 
* 
      SZB,RSS       IF NULL,
      JMP NOQU         DON'T ALTER SYSTEM QUANTUM 
* 
      LDA P1        FETCH NEW SYSTEM QUANTUM
      SSA             IF NEGATIVE,
      JMP $INER         INPUT ERROR 
* 
      CLB           CONVERT TO
      DIV D10         10'S OF MILLISECONDS
      ADB N5            IF REMAINDER
      SSB,RSS             >= 5
      INA                   BUMP TO NEXT TENTH OF MS
* 
*  NOTE: (A) MUST NOT BE ALTERED UNTIL PRIORITY IS CHECKED OUT
*        AND THE SYSTEM QUANTUM IS UPDATED (@QUTM2).
* 
NOQU  LDB CP2       SEE IF A PRIORITY WAS ENTERED.
      CPB D2        IF ASCII, 
      JMP $INER       INPUT ERROR 
* 
      SZB,RSS       NULL ?
      JMP QUTM2       YEP -- CONTINUE 
* 
      LDB P2        FETCH NEW PRIORITY
      SSB           IF NEGATIVE,
      JMP $INER       INPUT ERROR 
* 
      CMB,INB       SET IT NEGATIVE 
      STB $SPRI       AND SAVE IN GLOBAL LOCATION 
* 
QUTM2 STA $SVAL     SAVE SYSTEM QUANTUM IN GLOBAL LOCATION ALSO 
* 
      CLA           FORCE A 
      STA XEQT        NEW DISPATCH
      ISZ $LIST        USING THE NEW TIMESLICE PARAMETERS 
      JMP $XEQ
* 
* 
* 
* 
* 
* 
*  THIS SECTION FORMATS AND PRINTS THE TIMESLICE PARAMETERS IN
*  THE FOLLOWING FORMAT:
* 
*  Q=XXXXX P=YYYYY
* 
* 
* 
QURPT LDA $SVAL     FETCH SYSTEM VALUE
      CCE           SET E FOR DECIMAL CONVERSION
      JSB $CNV3     CONVERT IT TO ASCII 
      INA           ADVANCE TO LAST TWO WORDS 
      DLD A,I         AND FETCH THEM
      DST QUB2      SAVE IN BUFFER
* 
* 
* 
      LDA $SPRI     FETCH PRIORITY
      CMA,INA       SET IT POSITIVE 
      JSB $CNV3     AND CONVERT 
      LDB A,I       FETCH FIRST 2 CHARS OF RESULT 
      STB QUB6
      INA           ADVANCE TO LAST 2 WORDS 
      DLD A,I       FETCH 
      DST QUB7        THEN SAVE IN PRINT BUFFER 
      LDA DQUBF     FETCH BUFFER ADDRESS
      JMP MSEX
* 
      SPC 5 
N5    DEC -5
$SPRI DEC -50       BOOT PRIORITY=-50 
$SVAL DEC 150       BOOT QUANTUM=1500MS  NOTE: STORED AS 10' OF MS
DQUBF DEF *+1 
      DEC -16 
QUBUF ASC 8,Q=XXXX0 P=YYYYYY
QUB2  EQU QUBUF+1 
QUB6  EQU QUBUF+5 
QUB7  EQU QUBUF+6 
      HED MESSAGE PROCESSOR  CONSTANTS ETC. 
LASCI OCT 000040   ASCII BLANK IN LOW CHARACTER 
MASKU OCT 177400    UPPER CHARACTER MASK (AND)
TEMPP NOP          TEMPORARY STORAGE
KEY   NOP          TEMPORARY STORAGE
* 
DEFP2 DEF DP2,I 
DP0   DEF OP
DP1   DEF P1
DP2   DEF P2
DP3   DEF P3
DP4   DEF P4
DP5   DEF P5
DP6   DEF P6
DP7   DEF P7
      HED CONTROL PARAMETER STORE IN ID SEGMENT 
* 
* 
*  THE PLOAD SUBROUTINE IS CALLED BY THE RU, ON,  & GO PROCESSORS 
*  IT DECIDES WHETHER THE USER WANTED TO DO STRING PASSING AND/OR 
*  SET UP THE 5 TEMP WORDS IN THE PROGRAMS ID SEGMENT.
* 
*  NOTE ! THE STRING TO BE PASSED IS ASSUMED TO BE IN THE SYSTEM
*         MAP. IF THE REQUEST CAME FROM THE USER MAP, THE $MSG
*         ROUTINE MOVES THE COMMAND BUFFER INTO A LOCAL BUFFER
*         IN THE SYSTEM MAP.
* 
* 
* 
PLOAD NOP          ENTRY/EXIT 
      LDA WSTAT,I  IF NO PRAM BIT IS
      RAL,RAL       SET THEN DO NOT PASS
      CLE,SSA        THE SCHEDULING STRING
      JMP PLOAD,I     (SET E=0 FOR ALCST BELOW).
      LDB PARAM     IF NO PARAMETERS, 
      CPB D2         THEN DO NOT PASS 
      JMP PLOD5       THE SCHEDULING STRING.
      LDB OP+1      CHECK FOR "IH" IN 
      CPB ASCIH      COMMAND TO INHIBIT 
      JMP PLOD5       PASSAGE OF STRINGS. 
* 
      CCA,CLE       INDICATE THAT BUFFER IS IN SYSTEM MAP 
      STA MVFLG       AND SET A FLAG FOR THE ALCST SUBROUTINE 
* 
      LDB WORK      NO "IH",SO GET ID-SEG ADDRESS 
      JSB ALCST      AND GO STORE THE STRING. 
      JMP NOMEM     MEMORY ALLOCATION ERROR?
      JMP NOMEM      YES, GO SEND MESSAGE.
* 
PLOD5 LDB DEFP2     GET INDIRECT DEF TO PRAMS.
      LDA CP2        GET PRAM FLAG
      RAR,SLA        IF ASCII "NO"
      LDA P2         ENTERED
      CPA NO         THEN STEP PRAM ADDRESS FIRST TIME
      INB              STEP PRAM ADDRESS
      LDA WORK       GET ID-SEGMENT ADRESS
      JSB PRAM       GO SET PRAMS.
      JMP PLOAD,I     RETURN. 
* 
NOMEM LDA $NMEM     GO ISSUE NO MEMORY
      JMP $MSEX      MESSAGE AND RETURN.
* 
ASCIH ASC 1,IH
NO    ASC 1,NO
      SKP 
* 
*     SUBROUTINE TO SET UP THE PRAMETERS IN A PROGRAMS
*     ID-SEGMENT.  PRAM SETS FIVE PRAMETERS AND THE B 
*     REGISTER.  IF THE NO PRAMETER FLAG IS SET NO
*     ACTION IS TAKEN.
* 
*     CALLING SEQUENCE: 
* 
*     LDB PRAM ADDRESS (OR INDIRECT TO LIST OF ADDRESSES) 
*     LDA ID-SEGMENT ADDRESS
*     JSB PRAM
* 
*     RETURN: 
*          <E>=1  NO PRAMS BIT SET. 
*             =0  NO PRAMS BIT NOT SET. 
*          OTHER REGISTERS MEANINGLESS. 
* 
PRAM  NOP 
      INA           STEP TO THE PRAM AREA 
      STA TEMP      SET IN TEMP 
      ADA D9        STEP TO THE B-REGISTER
      STA TEMP1     ADDRESS AND SAVE
      ADA D5        STEP TO THE STATUS ADDRESS
      LDA A,I       GET THE STATUS AND CHECK
      RAL,RAL       THE NO PRAM ALLOWED BIT 
      CCE,SSA       IF SET THEN (SET E REG) 
      JMP PRAM,I    JUST EXIT 
* 
      LDA TEMP      GET THE PRAM AREA ADDRESS AND 
      STA TEMP1,I   SET IT IN THE B REG. SAVE AREA
      LDA DM5       SET UP THE
      STA TEMP1     COUNTER 
PRAM1 CLA           ZERO ADDRESS GETS A ZERO
      LDA B,I       GET PRAM
      STA TEMP,I    STUFF IT
      ISZ TEMP      STEP STORE ADDRESS
      CLE,INB       STEP SOURCE ADDRESS (CLEAR E REG) 
      ISZ TEMP1     DONE? 
      JMP PRAM1     NO- CONTINUE
      JMP PRAM,I    YES , SO EXIT 
      HED CROSS MAP PARAMETER CONTROL STORE 
      SKP 
* 
*     SUBROUTINE TO SET UP THE PRAMETERS IN A PROGRAMS
*     ID-SEGMENT.  XPRAM SETS FIVE PRAMETERS AND THE B
*     REGISTER.  IF THE NO PRAMETER FLAG IS SET NO
*     ACTION IS TAKEN.
*     NOTE THAT THE PARAMETERS THAT ARE BROUGHT IN ARE
*     FROM THE USER MAP, THAT IS, THE ALTERNATE MAP.  THIS
*     MEANS THAT THE PARAMETERS TRUE ADDRESS MUST BE IN THE 
*     CURRENT MAP BECAUSE THE CROSS LOAD INSTRUCTION CHASES 
*     DOWN INDIRECTS IN THE CURRENT MAP BEFORE GOING ACROSS 
*     MAPS TO PICK UP THE VALUE.
* 
*     CALLING SEQUENCE: 
* 
*     LDB PRAM ADDRESS (OR INDIRECT TO LIST OF ADDRESSES) 
*     LDA ID-SEGMENT ADDRESS
*     JSB XPRAM 
* 
*     RETURN: 
*          <E>=1  NO PRAMS BIT SET. 
*             =0  NO PRAMS BIT NOT SET. 
*          OTHER REGISTERS MEANINGLESS. 
* 
XPRAM NOP 
      INA           STEP TO THE PRAM AREA 
      STA TEMP      SET IN TEMP 
      ADA D9        STEP TO THE B-REGISTER
      STA TEMP1     ADDRESS AND SAVE
      ADA D5        STEP TO THE STATUS ADDRESS
      LDA A,I       GET THE STATUS AND CHECK
      RAL,RAL       THE NO PRAM ALLOWED BIT 
      CCE,SSA       IF SET THEN (SET E REG) 
      JMP XPRAM,I    JUST EXIT
* 
      LDA TEMP      GET THE PRAM AREA ADDRESS AND 
      STA TEMP1,I   SET IT IN THE B REG. SAVE AREA
      LDA DM5       SET UP THE
      STA TEMP1     COUNTER 
XRAM1 CLA           ZERO ADDRESS GETS A ZERO
      XLA B,I       GET PRAM
      STA TEMP,I    STUFF IT
      ISZ TEMP      STEP STORE ADDRESS
      CLE,INB       STEP SOURCE ADDRESS (CLEAR E REG) 
      ISZ TEMP1     DONE? 
      JMP XRAM1     NO- CONTINUE
      JMP XPRAM,I        YES-EXIT 
* 
      HED MESSAGE PROCESSOR NAME SEARCH 
* 
*     CALL BY NAME SEARCH ROUTINE 
* 
*     CALLING SEQUENCE: 
* 
*     JSB TTNAM     NAME ASSUMED TO BE IN P1
* 
*     ON RETURN:
* 
*     WORK = ID ADDRESS 
*     B    = ID ADDRESS IF A PROGRAM, IF SEGMENT   B = 5  (IE TYPE) 
*     A    = LEAST 4 STATUS BITS
*     E    = 0     STANDARD ID SEGMENT
*     E    = 1     SHORT ID SEGMENT 
* 
* 
TTNAM NOP           ENTRY/EXIT
      LDB DEFP1    ADDRESS OF ASCII PROG NAME 
      JSB TNAME     CALL TO NAME SEARCH ROUTINE 
      SZA,RSS      IF ZERO, THEN PROG NOT FOUND 
      JMP NXPRG     SO TAKE GAS!
* 
      LDA WORK      SEE WHAT TYPE PROGRAM IS
      ADA D14         WITHOUT EFFECTING E REG 
      LDA A,I 
      AND D7
      CPA D5        IS IT A SEGMENT ? 
      JMP OPOK?     YES, SEE WHO WANTS TO KNOW
      SPC 2 
OPOK! LDA WSTAT,I   GET STATUS TO A 
      AND D15       MASK IT AND 
      JMP TTNAM,I   RETURN
      SPC 2 
OPOK? STA B         A SEGMENT SET B = 5, B NOT = ID ADDR. 
      LDA OP        GET THE INPUT COMMAND 
      CPA OF        OFF COMMAND ? 
      JMP OPOK!     YES.
      CPA ST        ST COMMAND  ? 
      JMP OPOK!     YES.
      SPC 2 
NXPRG LDA $NOPG    NO SUCH PROG ERROR (YOU LOSE !)
      JMP MSEX     EXIT 
      HED SEARCH KEYWORD LIST FOR PROGRAM NAME
*     ON ENTRY
*         B IS ADDRESS OF ASCII PROGRAM NAME
*     ON RETURN 
*         A IS 0 IF PROGRAM NOT FOUND (E=1) 
*         B AND WORK ARE THE ID SEGMENT ADDRESS OF REQUESTED PROGRAM
*         WSTAT = THE STATUS WORD ADDRESS.
*         E = 0 IF STANDARD ID SEGMENT
*         E = 1 IF SHORT (9 WORD ) ID SEGMENT OR NOT FOUND
* 
TNAME NOP          ENTRY/EXIT 
      STB TEMP3     ADDRESS OF NAME 1 AND 2 
      INB          INCR TO CHAR 3 AND 4 ADDR
      STB TEMP4     SAVE IT 
      INB          INCR TO CHAR 5 ADDR
      LDA B,I      ASCII NAME CHAR 5 AND X
      AND MASKU         MASK OFF X
      STA TEMP5 
      SZA           IF NULL CHAR. FOURCE ERROR RETURN 
      LDA KEYWD 
      STA KEY      TOP OF KEYWORD LIST
TN005 LDA KEY,I    CHECK IF AT END OF LIST
      CCE,SZA,RSS 
      JMP TNAME,I  END OF LIST ERROR RETURN 
      ADA D12 
      LDB A,I      ID SEG ASCII NAME CHARS 1 AND 2
      CPB TEMP3,I  COMPARE WITH REQUESTED CHAR 1,2
      INA,RSS      COMPARES 
      JMP TN030    DOES NOT COMPARE-GO TO NEXT PROG 
      LDB A,I      ID SEG ASCII NAME CHARS 3 AND 4
      CPB TEMP4,I  COMPARE WITH REQUESTED CHARS 3,4 
      INA,RSS      COMPARES 
      JMP TN030    DOES NOT COMPARE-GO TO NEXT PROG 
      STA WSTAT     SET UP WSTAT IN CASE
      LDA A,I      ID SEG ASCII NAME CHARS 5,X
      STA B         SAVE FOR SHORT ID TEST
      AND MASKU         MASK OFF X
      CPA TEMP5    COMPARE CHARACTER 5
      JMP TN040    COMPARES-SO PROGRAM FOUND
* 
TN030 ISZ KEY      INCREMENT KEYWORD ADDRESS
      JMP TN005    GO TO COMPARE CHARACTERS 
TN040 LSR 4         MOVE SHORT ID BIT TO LEAST B
      ERB           SET E FOR RETURN
      LDB KEY,I    LOAD B WITH ID SEGMENT ADDRESS 
      STB WORK      SET IN WORK 
      ISZ WSTAT     STEP TO STATUS ADDRESS AND
      JMP TNAME,I  EXIT 
      HED CVT3 (BINARY TO ASCII CONVERSION) 
* 
*         BINARY TO ASCII CONVERSION ROUTINE
* 
*     CALLING SEQUENCE
* 
*         SET E TO 0 IF OCTAL CONVERSION OR 
*         SET E TO 1 FOR DECIMAL CONVERSION 
*         LDA NUMBER TO BE CONVERTED
*         JSB $CNV3 
* 
*         RETURN ADDRESS OF ASCI IN A AND E=1.
*              RESULTS IN ASCI, ASCI+1, ASCI+2
*               LEADING 0'S SUPPRESSED
* 
$CNV3 NOP 
      STB TEMP6    SAVE B REGISTER
      LDB PTTE      INIT LOCATION OF BUFFER 
      STB TMP 
      LDB AASCI     SET BUFFER=ASCII BLANK'S
      STB ASCI
      STB ASCI1 
      STB ASCI2 
      LDB DF10      ASSUME BASE TEN 
      SEZ,CLE,RSS   IF BASE EIGHT 
      INB           SET UP FOR BASE EIGHT 
      STB BASE      SET CONVERSION BASE ADDRESS 
DPCRL CLB           START CONVERSION
      DIV BASE      DIVIDE BY BASE
BASE  EQU *-1       DEFINE BASE ADDRESS 
      ADB B20       CONVERT TO ASCII-BLANK
      SEZ           IF HIGH DIGIT 
      BLF,BLF       ROTATE
      ADB TMP,I     ADD CURRENT VALUE 
      STB TMP,I     STORE THE CONVERTED VALUE 
      CCB,SEZ       PREPARE FOR SUBTRACT
      ADB TMP       IF HIGH CHAR. BACKUP
      SEZ,CME       BUFFER POINTER
      STB TMP       AND RESET 
      SZA           IF MORE DIGITS
      JMP DPCRL     GO SET THE NEXT ONE 
* 
      CCE           SET E FOR NEXT CALL (ASSUME BASE 10)
      LDA PTT      LOAD A WITH ASCI BUFFER ADDRESS
      LDB TEMP6    RESTORE B
      JMP $CNV3,I   RETURN
* 
B20   OCT 20
DF10  DEF D10 
D10   DEC 10
D8    DEC 8 
PTT   DEF ASCI
PTTE  DEF ASCI2 
      HED $CNV1 (BINARY TO ASCII CONVERSION)
*     CALLING SEQUENCE: SAME AS $CNV3 
* 
*     RETURN RESULTS LEAST TWO DIGITS IN A. 
*     OTHERS AS PER $CNV3 
* 
$CNV1 NOP 
      JSB $CNV3     GO CONVERT THE NUMBER 
      LDA ASCI2     GET LEAST TWO DIGITS
      JMP $CNV1,I   RETURN
      HED PROGRAM SIZE .VS. PART'N SIZE CHECK 
* 
* 
*   THE $SZIT SUBROUTINE IS CALLED BY THE EXEC 9,10,23 & 24 
*   PROCESSORS AND IS CALLED FOR THE ON, RU, & SZ COMMANDS. 
*   IT IS ALSO CALLED BY THE DISPATCHER IF A PARITY ERROR 
*   HAS OCCURED AT ANY TIME IN THE PAST AND A SEARCH WAS MADE 
*   FOR A PARTITION & NONE OF THE PROPER SIZE WAS FOUND.
*   THE SUBROUTINE MAKES SURE THAT THE PROGRAM TO BE SCHEDULED
*   WILL FIND A PARTITION LARGE ENOUGH TO RUN IN.  THAT IS
*   IT MAKES SURE THAT NO PROGRAM IS FOREVER SCHEDULED BUT
*   BUT NEVER DISPATCHED.  THIS CASE WILL OCCUR IF A PROGRAM
*   IS LOADED, THEN SP 'D , THE SYSTEM THEN REDEFINED, AND THEN 
*   THE PROGRAM RP 'D AND PROGRAM EXECUTION ATTEMPTED.
* 
* 
*       CALLING SEQUENCE    JSB $SZIT 
*        ID ADDRESS IN WORK 
* 
*    ON RETURN     A = 0    ALL IS WELL 
*                  A = ASCII ERROR CODE ADDRESS. (PROG TOO LARGE) 
*                  B =  8 IF PROG ASSIGNED TO A PARTITION 
*                    =  9 IF PROGRAM IS NOT ASSIGNED TO ANY PARTITION.
* 
*    TEMPS :  TEMPA = $MBGP, $MRTP, $MCHN, OR  PARTITION SIZE 
*             TEMPB = ADDR OF ID SEG WORD # 29, THE EMA SIZE WORD 
*             TEMPC = ADDR OF ID SEG WORD # 22, SIZE - PARTITION WORD 
*             TEMPD = ERROR COSE  8 OR 9 (AS IN B-REG ABOVE)
*             TEMPE = ADDRESS OF ID EXTENSION 
*             TEMPF = MSEG SIZE 
*             TEMPG = EMA SIZE
*             TEMPI = #OF PAGES OF PROG (INCLUDES 1 MSEG) 
* 
* 
* 
$SZIT NOP 
      LDB WORK      GET THE ID ADDRESS
      ADB D14       INDEX TO THE TYPE WORD
      LDA B,I       PULL IT IN
      AND D7        KEEP ONLY TYPE BITS 
      CPA D1        IF MEM RES
      JMP SIZOK     THE MAKE SUCCESSFUL RETURN
* 
      LDB $MBGP     ASSUME PROG IS BG 
      CPA D2        IS IT ? 
      LDB $MRTP     NO, BETTER LUCK NEXT TIME.
      STB TEMPA     SAVE THE PROPER SIZE WORD 
* 
      LDB WORK      GET THE ID ADDRESS AGAIN
      ADB D28       NOW GET TO THE EMA WORD 
      STB TEMPB     (SAVE THE ADDRESS TOO ) 
      LDA B,I       AND PULL IT IN
      LDB $MCHN     GET THE MAX EMA SIZE
      SZA           IS PROG EMA ? 
      STB TEMPA     YES SO SIZE IS EMA
* 
      LDB WORK      GET THE ID ADRESS AGAIN 
      ADB D21       INDEX TO THE PARTITION WORD 
      STB TEMPC     (SAVE THE ADDRESS TOO ) 
      LDA B,I       PULL IT IN
NOTAS LDB D9        GET THE PROPPER ERROR CODE
      SSA,RSS       IS PROG ASSIGNED ?
      JMP GOSIZ     NO
* 
      AND B77       GET THE PARTITION 
      MPY D7       AND USE AS INDEX 
      ADA $MATA     INTO THE
      LDB A,I       GET THE 1ST WORD
      SSB           IF UNASSIGNED,
      JMP UNASN     THEN UNASSIGN THE PROGRAM & TRY AGAIN 
      ADA D4        $MATA TABLE 
      LDA A,I       GET THE SIZE OF THE 
      AND B1777     PARTITION 
      STA TEMPA     AND SAVE
      LDB D8        GET THE ERROR CODE
* 
* 
GOSIZ STB TEMPD     AND SAVE IT IF WE NEED IT 
      LDA TEMPC,I 
      ALF           GET # OF PAGES IN PROG (+ MSEG IF EMA)
      RAL,RAL 
      AND B37 
      STA TEMPI     SAVE FOR LATER
* 
      LDB TEMPB,I   GET THE EMA FLAG
      SZB           IS PROGRAM EMA ?
      JMP EMACK     YES SO CHECK IT OUT 
* 
      CMA,INA       NOW SEE IF
      ADA TEMPA     IF IT IS DISPATCHABLE 
SZBAD LDB TEMPD     GET THE ERROR CODE READY
* 
      SSA,RSS       WELL ?
SIZOK CLA,RSS       YES ALL IS WELL, SO CLEAR A 
      LDA $SERR     NO, SEND ERROR CODE TO CALLER 
      JMP $SZIT,I   RETURN
* 
UNASN LDA TEMPC,I   GET THE PART'N WORD 
      AND B777K     UNASSIGN THE PROGRAM
      STA TEMPC,I    AND
      JMP NOTAS         TRY AGAIN.
* 
TEMPA NOP 
TEMPB NOP 
TEMPC NOP 
TEMPD NOP 
TEMPE NOP 
TEMPF NOP 
TEMPG NOP 
TEMPI NOP 
* 
* 
EMACK LDA B 
      ALF           GET ID EXTENSION TO LOW END 
      RAL,RAL 
      AND B77       NOW USE THIS AS AN INDEX TO THE 
      ADA $IDEX     PROG'S ID EXTENSION 
      LDA A,I       PULL IT IN
      STA TEMPE     SAVE THE ADDRESS
      LDA A,I       NOW GET THE 
      AND B37       MSEG SIZE 
      STA TEMPF     SAVE THIS TOO 
* 
      LDA TEMPB,I   NOW GET THE EMA SIZE
FXEMA AND B1777 
      LDB A         PUT IN IN B=REG TOO 
      STB TEMPG     AND SAVE AGAIN
      ADA TEMPI     A= [ #PGS + EMA SIZE ]
      CMA,INA       A= -[ #PGS + EMA SIZE ] 
      ADA TEMPA     A = $MCHN - [#PGS + EMA SIZE] 
      ADA TEMPF     A = $MCHN -[#PGS - MSEG + EMA SIZE ]
      SPC 1 
* A = $MCHN - [#PGS - MSEG + EMA SIZE ]   OR
      SPC 1 
      SSA,RSS       IS IT OK ?
      JMP SIZOK     YES 
* 
      CPB D1        IF EMA SIZE = 1, THEN IT'S AN 
      JMP SZBAD     ERROR 
* 
      CLB,INB       WELL, PAL YOU GET ONE LAST CHANCE 
      ADB TEMPE     INDEX TO THE DE BIT IN THE
      LDB B,I       ID EXTENSION
      BLF,RBL       NOW SEE IF THE EMA SIZE WAS DEFAULTED 
      SSB,RSS       WELL ?
      JMP SZBAD     NO, SO YOU'RE A LOSER ! 
* 
      LDB WORK      OK, BUT HAS THE PROGRAM EXECUTED ?
      ADB D8
      LDB B,I       GET POINT OF SUSPENSION 
      SZB           HAS IT EVER EXECUTED ?
      JMP SZBAD     YES, CAN ONLY HAVE BEEN A PARITY ERROR
* 
      LDA TEMPB,I   GET THE EMA WORD
      XOR TEMPG     OUT GOES THE OLD SIZE 
      INA           IN GOES THE DEFAULT (A FLAG TO THE
      STA TEMPB,I   DISPATCHED TO GIVE LARGEST SIZE)
      JMP FXEMA     PLAY IT AGAIN SAM 
      HED OUTPUT *_ ON SYSTEM TELETYPE
******************************************************************* 
*        THE $TYPE SECTION FUNCTIONS AS FOLLOWS:
*              ENTRY IS MADE BY STRIKING ANY SYSTEM TELETYPE KEY. 
*              IF TELETYPE FLAG NOT BUSY, THEN * IS OUTPUT AND A
*                   REQUEST IS MADE FOR INPUT. IF FLAG IS SET THEN
*                   IGNORE REQUEST. UPON COMPLETION OF INPUT (LF),
*                   THE MESSAGE PROCESSOR ROUTINE IS CALLED.
*                   UPON RETURN, IF A REGISTER IS ZERO THEN NO
*                   MESSAGE TO BE OUTPUT. IF A NON-ZERO, THEN A IS
*                   ADDRESS OF MESSAGE TO OUTPUT WITH CHARACTER 
*                   COUNT THE FIRST WORD IN BUFFER. 
******************************************************************* 
* 
$TYPE LDA FLG      CHECK SYSTEM TTY FLAG
      SZA 
      JMP $XEQ     BUSY, SO RETURN TO $XEQ
* 
******IFN           SYSTEM\SESSION CONSOLE WORK 
      LDA $CES+1     CHECK SYS/SES CON FLAG 
      SZA           IF ENABLED
      JMP $SCON     GO PROCESS SESSION WORK 
******XIF 
* 
*  STANDARD SYSTEM CONSOLE PROCESSING 
* 
      JSB $XSIO    CALL TO OUTPUT ASTERISK(*) 
      OCT 1              ON SYSTEM TELETYPE 
      NOP 
      NOP 
      OCT 2 
      DEF ASTRK 
DM4   DEC -4       OUTPUT CHARACTER COUNT 
      OCT 0         SAYS DON'T NEED USER MAP
      JSB $XSIO    CALL TO REQUEST OPERATOR INPUT 
      OCT 1 
      DEF TYP10    INPUT COMPLETION ADDRESS 
      NOP 
      OCT 401      INPUT WITH TYPEOUT 
IBUF  DEF INBUF 
      ABS -BUFFL   DETERMINED BY $STRT ROUTINE
      OCT 0         DONT NEED USER MAP
      ISZ FLG       SET SYSTEM TTY BUSY FLAG
      JMP $XEQ     GO TO $XEQ 
* 
*  SYSTEM SESSION CONSOLE CONTINUES HERE FOR "OP" CMND PROCESSING 
* 
TYP10 CLA           CLEAR THE COM FLAG
      STA FLG 
      LDA IBUF      GET BUFFER ADDRESS TO A 
* 
TYP11 JSB $MESS    GO TO MESSAGE PROCESSOR ROUTINE
      SZA,RSS       CHECK IF MESSAGE TO BE OUTPUT 
      JMP TYP27     NO MESSAGE-SO GO RETURN 
* 
      ISZ FLG       SET THE COM FLAG
      LDB A,I 
      STB TYP26 
      BRS           CONVERT CHARACTER COUNT  
      CMB,INB        TO POSITIVE WORD COUNT.
      STB TYPCO     SAVE WORD COUNT.
      LDB IBUF      GET BUFFER
      INA            ADDRESSES. 
      MVW TYPCO     GO MOVE WORDS.
* 
      JSB $XSIO    CALL TO OUTPUT ERR MESSAGE 
      OCT 1 
      DEF TYP30    COMPLETION ADDRESS 
TYPCO NOP 
      OCT 2 
      DEF INBUF 
TYP26 NOP 
      OCT 0         DONT NEED USER MAP
      JMP $XEQ     GO TO $XEQ 
* 
TYP27 LDA OP       GET THE OP CODE
      CPA RU       WAS IT A RUN ? 
      RSS          YES
      CPA ON       NO, WAS IT AN  ON ?
      RSS          YES
      JMP TYP30    NO, DO COMPLETION STUFF
* 
      LDB WORK     GET THE ID ADDRESS 
      ADB D32      GET SESSION WORD # 3 ADDRESS 
      CCA          A = -1 (NEG LU # OF SYS CONSOLE) 
      STA B,I      SET THE LU IN THE ID SEGMENT 
TYP30 CLA           CLEAR SYSTEM FLAG FOR NEXT
      STA FLG       REQUEST 
      JMP $XEQ
ASTRK OCT 006412   CR, LF 
      ASC 1,*_     ASTERISK, LEFT ARROW 
****
****  11 WORD LOG-ON PROMPT FIELD 
****
**
$BRKP DEC -15        COMMON BREAK MODE PROMPT (11 WORDS ALSO) 
BRKMS ASC 10,S= 1 COMMAND ?_
****
****
******IFN           SYSTEM/SESSION CONSOLE WORK 
      HED SYSTEM/SESSION CONSOLE ROUTINES 
* 
* 
* 
* 
* 
* 
*     LDA $SHED 
*     JSB MAPIN     *SET UP CORRECT MAP 
* 
$SCON LDA $SHED     FETCH HEAD OF SCB LIST
      SZA,RSS       ANYTHING DEFINED ?
      JMP SLGON     NO-- GO ISSUE LOG-ON PROMPT.
* 
      ADA $SMST     OFFSET TO SESSION ID
      LDA A,I       FETCH IT
      CPA D1        IF=1
      JMP SBREK     A SESSION ALREADY EXISTS
* 
*  ISSUE LOGON PROMPT 
* 
*  NOTE: THE DEFAULT LOG-ON PROMPT IS "PLEASE LOG-ON:". THE 
*        ACCTS PROGRAM HAS THE ABILITY OF CHANGING THIS BY
*        MOVING THE NEW PROMPT STRING INTO THE 11 WOR BUFFER
* 
SLGON LDB !BITM     FETCH WORD WITH POSSIBLE
      RBR,SLB       LU 1 BUSY FLAG SET. 
      JMP LPEN      IT'S BUSY, GO DO SPECIAL PROMPT 
* 
* 
      LDA $LMES     SET LOG-ON
      STA LLEN       PROMPT LENGTH
* 
* 
      JSB $XSIO 
      OCT 1         WRITE LOG-ON PROMPT 
      NOP 
      NOP 
      OCT 2 
      DEF $LMES+1   MESSAGE BUFFER
LLEN  NOP 
      OCT 0         DON'T NEED USER MAP 
* 
*  IF IN SHUT DOWN STATE, ISSUE MESSAGE THEN GIVE SPECIAL PROMPT. 
* 
      LDA $DSCS+1   FETCH SHUT DOWN FLAG
      SSA           IF SHUT DOWN
      JMP LPEN        GO ISSUE SPECIAL PROMPT 
* 
* 
*  ISSUE READ OF RESPONSE 
* 
* 
      JSB $XSIO 
      OCT 1 
      DEF SESIN     COMPLETION ADDR 
      NOP 
      OCT 401       READ WITH ECHO
      DEF INBUF+1   FIRST WORD OF BUFF USED AS FLAG 
      ABS -BUFFL+1
      OCT 0         DON'T NEED USER MAP 
      ISZ FLG       SET SYS CON BUSY
      JMP $XEQ      CONTINUE
* 
* 
* 
* 
*  LOG-ON COMPLETION PROCESSOR
* 
* 
* 
SESIN STB TLOG      SAVE TRANSFER LOG 
      CLA           SET LOG-ON FLAG 
      STA INBUF       FOR STRING
* 
* 
*  SEND STRING TO COMMUNICATION PROGRAM. THE STRING IS THEN 
*  PASSED TO LOGON OR PRMPT VIA A CLASS WRITE\READ REQUEST. 
* 
* 
* 
* 
* 
*  TLOG=BYTE COUNT OF STRING
* 
*  INBUF=FLAG(FIRST WORD) AND STRING
*        FLAG=0 IF LOG-ON REQUEST 
*            =1 IF BREAK MODE REQUEST 
* 
* 
PSTNG LDB DCOM      FETCH ADDR
      JSB TNAME       OF NAME OF COMMUNICATION
      SZA,RSS           PROGRAM. FIND IT? 
      JMP NOTIN     NO--NOT INITIALIZED ERROR 
* 
      STB COMID     SAVE COMMUNICATION PROG'S ID ADDR 
      LDA IBUF      SET UP FOR STRING 
      STA BFADD       REQUEST 
      LDB TLOG      FETCH BYTE COUNT
      ADB D2        ADD TWO CHARS FOR FLAG
      STB BFCNT     SET STRING LENGTH 
* 
      CCA,CLE       CLEAR E FOR CALL AND SET BUFFER 
      STA MVFLG       IN SYSTEM MAP FLAG
      LDB COMID     FETCH PROG'S ID ADDR
      JSB ALCST       AND GO SET UP STRING
       NOP
       JMP MEMER    NO MEMORY ERROR 
* 
      LDB COMID     MAKE SURE PROGRAM IS SCHEDULED
      ADB D15 
      LDA B,I 
      AND D15 
      SZA           IF NOT DORMANT
      JMP SETB      CONTINUE
* 
      LDB COMID     ELSE
      JSB $LIST      CALL LIST
      OCT 401         PROCESSOR TO GET PROGRAM SCHEDULED
* 
SETB  LDA D2        SET SESSION BUSY
      IOR !BITM       FLAG IN 
      STA !BITM         BIT MAP 
      CLA           CLEAR SYS CON BUSY
      STA FLG         FLAG
      JMP $XEQ      CONTINUE
* 
* 
TLOG  NOP 
"OP"  ASC 2,OP, 
B.SY  ASC 9,S=?? COMMAND ?OP,_
* 
DCOM  DEF COMPG     COMMUNICATION PROGRAM NAME
COMPG ASC 3,$YCOM 
COMID NOP 
      SPC 5 
MEMER LDA $NMEM,I   FETCH MESSAGE LENGTH
      STA ELN.1     SAVE FOR XSIO 
* 
      JSB $XSIO     ISSUE THE NO MEMORY ERROR 
      OCT 1 
      NOP 
      NOP 
      OCT 2 
      DEF $NMEM+2 
ELN.1 NOP 
      NOP 
      JMP LPEN      GO ISSUE SPECIAL PROMPT FOR THIS TYPE OF A MESS 
*                    I.E., THE ONLY COMMAND ALLOWED IS THE "OP" COMMAND 
* 
* 
      SKP 
* 
* 
* 
*  A SESSION EXISTS FOR LU 1. THIS SECTION PROCESSES THE BREAK
*  MODE REQUESTS. 
* 
* 
SBREK JSB $XSIO 
      OCT 1 
      NOP           PROMPT
      NOP             FOR BREAK MODE
      OCT 2             INPUT 
      DEF BRKMS 
      DEC -15 
      OCT 0         DON'T NEED USER MAP 
* 
* 
      JSB $XSIO 
      OCT 1 
      DEF BRKIN     COMPLETION ROUTINE
      NOP           FOR READ OF INPUT 
      OCT 401 
DIBF  DEF INBUF+1 
      ABS -BUFFL+1  1ST WORD IS FLAG
      OCT 0 
* 
      ISZ FLG       SET SYS CON BUSY FLAG 
      JMP $XEQ      CONTINUE
* 
* 
* 
BRKIN STB TLOG      SAVE TRANSFER LOG 
      LDA DIBF      FETCH BUFFER ADDR 
      JSB $PRSE     GO DO A PARSE ON INPUT
      DEF PRAMS 
      CLA,INA       SET FLAG FOR
      STA INBUF       BREAK MODE STRING REQUEST 
* 
      LDA OP        FETCH OPERATION CODE
      CPA "OP"      IF OPERATOR REQUEST 
      CLA,RSS       SKIP
      JMP PSTNG     NOT OPERATOR REQUEST--SEND COMMAND TO SESSION MONITOR 
* 
      STA FLG       CLEAR TTY BUSY FLAG 
      LDA DIBF      FETCH INPUT BUFFER ADDR 
      LDB TLOG        AND TRANSFER LENGTH 
      JMP TYP11     GO PROCESS COMMAND
* 
* 
* 
      SKP 
* 
* 
* 
* 
* 
*  THE ACTION IN PROGRESS BIT (BIT MAP !BITM) WAS SET AND ANOTHER 
*  INTERRUPT WAS RECEIVED. THE ONLY COMMAND PERMITTED IN THIS STATE 
*  IS THE "OP" COMMAND. THEREFORE, THE PROMPT ISSUED HERE CONTAINS
*  THE "OP" TO INFORM THE OPERATOR OF THE STATE.
* 
* 
* 
LPEN  JSB $XSIO 
      OCT 1         WRITE 
      NOP 
      NOP 
      OCT 2         BUSY STATE PROMPT 
      DEF B.SY
      DEC -18 
      OCT 0 
* 
* 
      DLD "OP"      SET ASCII "OP, " INTO BUFFER FOR PARSE
      DST INBUF 
* 
* 
*  ISSUE READ OF RESPONSE 
* 
      JSB $XSIO 
      OCT 1 
      DEF LP.CM      COMPLETION ROUTINE 
      NOP 
      OCT 401 
D.BF  DEF INBUF+2 
      ABS -BUFFL+4
      OCT 0 
      ISZ FLG       SET SYS CON BUSY
      JMP $XEQ      CONTINUE
* 
* 
*  BUSY STATE COMPLETION PROCESSOR
* 
* 
* 
LP.CM ADB D4        ADD LENGTH OF "OP, "
      JMP TYP10     GO PROCESS THE REQUEST
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
*  ENABLE FOR SESSION 
* 
*  $DSCS= SESSION INITIALIZED FLAG  <0=NOT INIT 
*  $CES = SYSTEM SECURITY CODE  (SET BY FMGR) 
*  $CES+1= SESSION ENABLED FLAG   0=NOT ENABLED, <0=ENABLED BUT SEC 
*                                CODE NOT REQUIRED, >0= ENABLED AND 
*                                SECURITY CODE REQUIRED (=$CES).
* 
*  FORMAT OF COMMAND=   EN,SC,OPTION
* 
* 
* 
* 
* 
ENAB  LDB $DSCS     FETCH SESSION INIT FLAG 
      SSB           IF NOT INITIALIZED
      JMP NOTIN       GO REPORT IT
* 
      LDB DCOM      FETCH ADDR OF NAME OF COMM PROGRAM
      JSB TNAME     SEE IF COMMUNICATION PROGRAM IS PRESENT 
      SZA,RSS       IF NOT FOUND
      JMP NOTIN       ISSUE INITIALIZATION ERROR
* 
*  SEE IF SEC CODE REQUIRED AND IF IT WAS PASSED. 
* 
      LDA $CES      FETCH REQUIRED PASSWORD 
      SZA,RSS       IF NOT REQUIRED 
      JMP NOSEC       SKIP VERIFICATION 
* 
      XOR MSKSC     REMOVE SECURITY CODE MASK 
      INA           AND ADD ONE BACK IN 
      CPA P1             IF REQUIRED, WAS IT CORRECTLY
      RSS               SPECIFIED -- SKIP 
      JMP $INER     ELSE ISSUE "INPUT ERROR"
* 
      LDB P2        FETCH OPTION WORD 
      SZB,RSS         IF SC OPTION NOT SELECTED 
NOSEC CCA           SET NOT REQUIRED FLAG   (GLM.2013)
      STA $CES+1     ELSE SET REQUIRED SC AS FLAG 
* 
* 
      CLA,RSS 
* 
NOTIN LDA SESER 
      JMP MSEX
* 
* 
SESER DEF *+1 
      DEC -15 
      ASC 8,NOT INITIALIZED 
* 
* 
MSKSC DEC 31178 
* 
* 
* 
* 
* 
* 
* 
* 
*  "OP" COMMAND 
* 
*  OP,SC,COMMAND
* 
* 
OPIN  LDB BFCNT     FETCH CHAR COUNT
      CMB,INB        SET IT NEGATIVE
      STB BFCNT 
      LDA $CES+1     FETCH ENABLED FLAG 
      SZA,RSS       IF NOT ENABLED
      JMP $INER       THIS WAS A BOO BOO
* 
      SSA,RSS       IF $CES+1 < 0 S.C. NOT REQUIRED 
      CPA P1        REQUIRED, DOES IT MATCH ? 
      RSS           CONTINUE
      JMP $INER     BAD INPUT "INPUT ERROR" 
* 
      LDA DM2 
      STA TEMP1     TEMP1 
* 
      LDB BFADD     FETCH BYTE ADDR OF PRE-PARSE INPUT BUFFER 
      CLE,ELB 
NBYTE LBT 
      CPA B54       COMMA 
      JMP C.1 
NBYT2 ISZ BFCNT 
      JMP NBYTE 
      LDA $OPER     ISSUE 
      JMP MSEX        "OP CODE ERROR" 
* 
* 
B54   OCT 54
* 
C.1   ISZ TEMP1 
      JMP NBYT2 
* 
      SLB,RSS       IF COMMAND STARTS ON
      JMP EVEN        WORD BOUNDARY - CONTINUE
* 
      ADB DM1       BACK UP TO COMMA ADDR 
      LDA B40       ASCII BLANK 
      SBT 
* 
EVEN  SLB,RSS       IF STARTS ON WORD BOUNDRY 
      ISZ BFCNT     SUBTRACT 1 FOR LAST COMMA FOUND 
* 
      CLE,ERB       SET WORD ADDR 
      LDA B         MOVE WORD ADDRESS TO (A)
      LDB BFCNT     B=CHAR COUNT
      CMB,INB       SET IT POSITIVE
      STB BFCNT     RESTORE CHARACTER COUNT 
      STA BFADD     RESTORE BUFFER ADDRESS
      JMP NMESS     GO PARSE INPUT STRING & DO REAL COMMAND 
* 
*  NOTE (A) AND (B) MUST BE SET-UP FOR NMESS WORK 
* 
******XIF 
      HED $ABRT ROUTINE  TO ABORT A PROGRAM 
* ROUTINE:    < $ABRT > 
* 
*  PURPOSE:  THIS ROUTINE PROVIDES FOR REMOVING 
*           A USER PROGRAM FROM EXECUTION USUALLY 
*           AFTER AN ERROR CONDITION IS DETECTED
*           WHICH PROHIBITS CONTINUED EXECUTION.
*           THE PROGRAM IS SET TO THE DORMANT 
*           STATE, TIME INTERVAL REMOVED AND ANY
*           DISC TRACKS ASSIGNED TO THE PROGRAM 
*           RELEASED. 
* 
*            THE PROGRAM NAME IS SET IN THE MESSAGE 
*           "XXXXX ABORTED" WHICH IS PRINTED
*           ON THE SYSTEM TELETYPE AND THE SESSION TERMINAL 
*           (UNLESS THE NO PRINT OPTION WAS SPECIFIED). 
* 
*  CALL:    (A) = ID SEGMENT ADDRESS
*         (P)   JSB ABORT 
*         (P+1) -RETURN- (REGISTERS MEANINGLESS)
* 
$ABRT NOP          SET ID SEGMENT ADDRESS 
      STA TEMPH     FOR SABRT CALL
      ADA D15       INDEX TO THE STATUS WORD
      LDB A,I       GET THE WORD
      ADB B4000     SET THE ABORT BIT 
      STB A,I       RESET THE STATUS WORD 
      LDB TEMPH     SET B AND CALL
      JSB SABRT     THE SOFT ABORT ROUTINE
      LDA TEMPH     GET THE ADDRESS AND 
      JSB $SDRL     GO RELEASE THE DISC TRACKS
      LDA NOPRN     GET NO PRINT OPTION FLAG
      SZA,RSS       SET?
      JMP PRNT      NO, PRINT MESSAGE 
* 
      CLA           CLEAR THE FLAG
      STA NOPRN 
      JMP $ABRT,I   EXIT
* 
PRNT  LDB TEMPH    SET (B) = ADDRESS OF 3-WORD
      ADB D12       PROGRAM NAME IN ID SEGMENT. 
      LDA B,I      SET
      STA ABM       PROGRAM 
      INB           NAME
      LDA B,I       IN
      STA ABM+1     MESSAGE 
      INB 
      LDA B,I 
      AND MASKU     MASK OUT THE LOWER CHARACTER
      IOR LASCI     REPLACE WITH A BLANK
      STA ABM+2 
* 
      LDB TEMPH     FETCH PROG'S ID ADDR
      JSB $LU??     GET SESSION/MTM TERM LU 
       CCE,RSS      DIDN'T FIND A GOOD LU--PRINT ON LU 1 ONLY 
       CMA,CLE,INA  SET E IF LU=1 (LU-1)
      LDA ABMA      FETCH BUFFER ADDRESS
      LDB TEMPH     FETCH ID ADDR FOR POSSIBLE ECHO WORK
      SEZ,RSS       IF TERM LU NOT = 1
      JSB $BFOT       GO ECHO ON SESSION TERMINAL 
      JSB $YMG      ISSUE "XXXXX ABORTED" ON LU 1 
      JMP $ABRT,I  EXIT 
* 
* 
ABMA  DEF *+1 
DM14  DEC -14 
ABM   ASC 7,PROGX ABORTED 
AASCI ASC 1,
      HED MEMORY PROTECT VIOLATION SCHEDULER PREPROCESSORS
******************************************************************* 
*        THE $MPT1 THRU $MPT9 PREPROCESSORS CONSIST OF MEMORY 
*        PROTECT VIOLATION CALLS FROM EXEC THAT INVOLVE LIST
*        PROCESSING.
*        THE FOLLOWING REQUESTS ARE HANDLED:
*              PROGRAM COMPLETION (DORMANT) 
*              SUSPEND (OPERATOR) 
*              BACKGROUND SEGMENT LOAD
*              SCHEDULE WITH WAIT 
*              SCHEDULE WITHOUT WAIT
*              CURRENT SYSTEM TIME (TIME ROUTINE CALL)
*              SET ID SEGMENT TIME VALUES (TIMER ROUTINE CALL)
*              SET/CLEAR ALL-OR-MEMORY AND CORE-LOCK FLAGS
*              GET/PUT A COMMAND STRING 
******************************************************************* 
      SPC 3 
* 
*     DORMANT REQUEST - PROGRAM HAS RUN TO COMPLETION 
* 
$MPT1 JSB GETID     GET THE ID-SEGMENT ADDRESS OF AFFECTED
      STB P2        PROGRAM - SAVE THE ID ADDRESS FOR PRAM MOVE 
      CPB XEQT      IF CURRENT PGM. SKIP
      JMP MPT1A     FATHER CHECKS 
* 
      ADB D20       STEP TO FATHER POINTER ADDRESS
      CCA           GET 
      ADA B,I       TO A
      AND B377      AND MASK
      ADA KEYWD     ADDRESS OF ID OF FATHER IN A
      LDA A,I       NOW 
      CPA XEQT      CURRENT PROGRAM?
      RSS           YES SKIP
      JMP ESC04     NO GO FLUSH 
* 
MPT1A LDB P2        RESTORE THE ID-SEGMENT ADDRESS TO B 
      LDA RQRTN     UPDATE THE RETURN 
      STA XSUSP,I   ADDRESS 
      CLA           SET A TO ZERO IN CASE 
      XLA RQP3,I    PRAMETER NOT SUPPLIED 
$EX6  NOP           SZA FOR RTE-M4, TERM.REUSABLE (GLM.2013)
      CMA,SZA,RSS   IS THIS GUY SERIALLY REUSABLE 
      JMP MPT1E     YES, GO DO IT 
      INA,SZA,RSS 
      JMP MPT1B     STANDARD TERMINATION CALL.
* 
      INA,SZA,RSS   IS IT 
      JMP MPT1C     A SAVE RESOURCES TERMINATION
* 
      INA,SZA,RSS   MAY BE A SOFT ABORT 
      JMP M0240     YES GO TO ABORT ROUTINE 
* 
      INA,SZA,RSS   HARD ABORT (LAST CHANCE)
      JMP M0250     WOW THAT WAS CLOSE! 
* 
ESC02 LDB D2        YOU LOSE - UNRECOGNIZED PRAMETER. 
      JMP ESCXX     GO ABORT HIM
* 
MPT1C LDA WORK      GET ID ADR
      JSB ALDM      GO PUT IN DORMANT LIST & SET FLG
      LDB WORK      RESTORE B 
      LDA WSTAT,I   SET THE 
      IOR B200      RESOURCE BIT IN THE STATUS
      STA WSTAT,I   AND THEN
      CPB XEQT      IF CURRENT PROGRAM
      JMP MPT1D      SKIP DORMANT REQUEST 
      JSB $LIST 
      OCT 400 
      JMP $XEQ      GO TO DISPATCHER
* 
MPT1E CPB XEQT      TERM SON AS REUSABLE
      RSS 
      JMP MPT1B     GO DO NORMAL TERMINATE
      JSB TERM      CALL TERMINATE ROUTINE
      ISZ TMP,I     IF OK, SET FLAG FOR SERIAL REUSE
      LDA IDCKK 
      JSB ALDM      GO PUT IN DORMANT LIST & SET FLAG 
      JMP MPT1F     GO FINISH PROCESSING
* 
MPT1D JSB $WATR     FIND WAITERS
      LDB XEQT
MPT1B JSB TERM      CALL TERMINATION ROUTINE
MPT1F ISZ TMP,I     FINALLY, ALSO SET A FLAG (BIT 1)
      ISZ TMP,I      IN WORD 20 TO INDICATE NORMAL_TERM.
      LDA DM3       IF REQUEST PRAMS
      ADA RQCNT      THEN 
      SSA             SKIP
      JMP $XEQ         ELSE GO TO THE DISPATCHER. 
* 
      LDB DEFR4     GET DEF TO PRAMS
      LDA P2        GET ID-ADDRESS
      JSB XPRAM     TRANSFER THE PRAMETERS
      JMP $XEQ      GO TO THE DISPATCHER
      SPC 1 
DM3   DEC -3
      SKP 
*     THE TERM SUBROUTINE PERFORMS THE FOLLOWING FUNCTIONS: 
* 
*     1. CALL $LIST TO PUT THE PROGRAM IN THE DORMANT LIST
*     2. IF THE PROGRAM HAS A FATHER WHO IS WAITING THE 
*         FATHER IS RESCHEDULED 
*     3. CHECKS TO SEE IF ANOTHER PROGRAM IS WAITING FOR THIS ONE 
*         AND SCHEDULES IT IF SO. 
* 
*     CALLING SEQUENCE: 
* 
*     LDB ID ADDRESS
*     JSB TREM
* 
*     ON RETURN THE FATHER POINTER (IF ANY) IS IN POP.
*     AND IF HE WAS WAITING E WILL BE SET ELSE E=0. 
* 
TERM  DEF D.RTR 
      JSB $LIST     PUT PGM. IN DORMANT 
      OCT 400       LIST
* 
      STB IDCKK     SAVE THE ID-ADDRESS 
      ADB D20       INDEX TO THE PA POINTER 
      LDA B,I       GET THE WORD
      STB TMP       SAVE THE ADDRESS
      RAL,ELA       SET E IF FATHER IS WAITING
      CCB,SEZ,CME,RSS E=0 IF FATHER/1 IF NO FATHER
      JMP TERM2     IF NO FATHER GO SET -1. 
      ADB KEYWD     KEYWD-1 TO B (SETS E) 
      RAR,CLE,RAR   RESTORE A AND SET E TO FATHER WAITING.
      AND B377      GET THE FATHER ID NUMBER
      ADB A         ID ADDRSS TO B
      LDB B,I       GET THE ID-SEG ADDRESS
TERM2 STB POP       SAVE THE ADDRESS
      ADB D15       REMOVE THE POP'S WAIT BIT 
      LDA B,I       GET POP'S STATUS
      AND B7777     KNOCK OUT THE WAIT BIT
      SEZ,RSS       IF WAITING
      STA B,I       RESTORE THE WORD
      AND D15       IF POP'S
      CPA D3        IN THE WAIT LIST
      SEZ           AND WAITING 
      JMP TERM3 
      JSB $LIST     THEN RESCHEDULE 
      OCT 101       THE FATHER
POP   DEF POP 
* 
TERM3 LDA TMP,I     GET THE FLAG WORD 
      AND B7400      AND KEEP ONLY RE,RM,RN FLAGS 
      STA TMP,I      IN WORD
      JMP TERM,I    RETURN
* 
* 
D20   DEC 20
SIGN  OCT 100000
B200  OCT 200 
B7400 OCT 7400
DEFR4 DEF RQP4,I
      SPC 2 
$WATR NOP 
      LDA B 
      ADB D20 
      LDB B,I 
      BLF,BLF 
      RBR,SLB 
      JSB $SCD3     SCHEDULE IF ANY WAITING 
      JMP $WATR,I   RETURN
* 
      SPC 2 
* 
*     PROGRAM SUSPEND REQUEST 
* 
$MPT2 LDA XEQT      GET ADDR OF ID SEG
      ADA D20 
      LDA A,I       GET FATHER POINTER
      CLB 
      SSA            IF BATCH FLAG IS SET 
      JMP ESCXX      ABORT SC00 
      LDA XEQT      GET CURRENT ID ADR
      JSB ALDM      GO PUT IN DORMANT LST & SET DM FLAG 
      JSB $LIST 
      OCT 506      OPERATOR SUSPEND REQUEST 
      JMP MEM15     GO UPDATE XSUSP 
      SPC 3 
* 
*     READ IN BACKGROUND PROGRAM SEGMENT
* 
$MPT3 CCA          CHECK PARAMETER COUNT
      ADA RQCNT 
      SSA 
      JMP ESC01    ERROR, SO RETURN 
      LDB RQP2     ADDR OF ASCII PROG SEGMENT 
      JSB PLNAM    PULL IT IN LOCALLY 
      JSB TNAME     GO FIND THE ID SEG. 
      SZA,RSS       IF NOT FOUND
      JMP ESC05     TAKE GAS! 
      ADB D7        STEP TO PRIMARY ENT PT. 
      SEZ           IF SHORT ID-SEG. STEP 
      ADB D4        TO THE SHORT ID-SEG PRI ENT PT. ADD 
      LDA B,I       FETCH AND 
      STA $WATR     SET AS RETURN ADDRESS 
      ADB D7        STEP TO TYPE ADDRESS
      LDA B,I       BET TYPE
      AND D7        MASK IT 
      SEZ,RSS       IF SHORT IT MUST BE A SEG.
      CPA D5        SEGMENT?? 
      CCE,RSS       YES SKIP. 
      JMP ESC03     NO TAKE GAS!
      LDA $WATR     SET UP RETURN ADDRESS 
      STA RQRTN 
      LDB WORK      GET THE ID-SEG ADDRESS
      STB XA,I
      JSB $BRED     GO SET UP TO LOAD 
      CCB           SET THE ALL OF CORE 
      ADB WSTAT     BIT 
      LDA B,I       FOR THE 
      IOR LASCI     DISPATCHER
      STA B,I 
      JSB PRAMO     PASS PRAMETERS IF ANY 
      JMP MEM15     ADVANCE THE RETURN ADDRESS AND EXIT 
      SPC 3 
*     PRAMO PASSES PRAMETERS FROM RQP3,4,5,6,AND 7 TO 
*     THE ID-SEGMENT POINTED TO BY WORK.
* 
*     CALLING SEQUENCE: 
* 
*     SET UP WORK 
*     JSB PRAMO 
* 
*     ID-SEGMENT MUST NOT HAVE NO PRAM BITS SET IN IT'S STATUS. 
* 
PRAMO NOP 
      CLB,INB       IF NO PRAMS 
      CPB RQCNT     THEN
      JMP PRAMO,I   JUST EXIT 
* 
      LDA WORK      SET ADDRESS IN A
      LDB DEFR3     PRAM ADDRESS IN B AND 
      JSB XPRAM      GO MOVE THE PRAMS. 
      JMP PRAMO,I   RETURN. 
      SKP 
* 
*     $SCD3 SCHEDULES PROGRAMS IN THE WAIT LIST (STATUS-3)
*     WHICH ARE WAITING FOR THE GIVEN RESOURCE. 
* 
*     CALLING SEQUENCE: 
* 
*     LDA RESOURCE FLAG (CONTENTS OF XTEMP OF WAITER) 
*     JSB $SCD3 
*     RETURN - B,E = 0 A = ?
* 
* 
*     ENTRY MADE BY       $SCD3 NOP 
*                               RSB 
*                               SJP $SCD
* 
* 
* 
$SCD  RBL,RBL 
      STB TEMPD 
      STA $IDNO     SAVE THE RESOURCE ID FLAG 
      LDB SUSP2     GET THE LIST HEAD 
SCD31 CLE,SZB       IF END OF LIST
      JMP SCDMR 
      JRS TEMPD $SCD3,I   RETURN
* 
SCDMR LDA B         GET THIS ENTRIES
      INA           FLAG FROM 
      LDA A,I       HIS ID-SEGMENT
      CPA $IDNO     THIS ONE??
      JMP SCD32     YES GO RESCHEDULE 
* 
      LDB B,I       NO GET NEXT ENTRY TO B
      JMP SCD31     AND GO TEST IT. 
* 
SCD32 LDA B,I       GET THE NEXT ID IN LIST 
      STA PRAMO     AND SAVE IT 
      JSB $LIST     SCHEDULE THE PROGRAM
      OCT 401       WHOES ID-SGEMENT ADDRESS IS IN B
      LDB PRAMO     GET NEXT ID TO B
      JMP SCD31     SCAN THE REST OF THE LIST 
* 
      SKP 
*    SCHEDULE REQUEST WITH WAIT 
* 
$MPT4 JSB IDCKK     CHECK IF PROGRAM DORMANT
      CLE           CLEAR E FOR SCHOK ROUTINE 
* 
*  NOTE: "WORK" MUST = ID ADDR OF TARGET PROGRAM
* 
      JSB SCHOK     GO CHECK TIME LIST RESTRICTIONS OF TARGET PROGRAM 
      JSB PASES     GO PASS SESSION WORD OF FATHER TO SON 
      LDB XEQT      GET THE ADDRESS 
      ADB D20       OF THE BATCH FLAG 
      LDA $IDNO,I   FETCH SON'S FATHER WORD 
      XOR B,I       AND SET IT
      AND C120K     INTO THE
      XOR B,I       THE NEW PROGRAM 
      IOR B40K      SET THE FATHER IS WAITING BIT 
      STA $IDNO,I   SET THE WORD IN THE SON'S ID. 
      JSB $LIST     PUT CURRENT PGM IN
      OCT 503       THE WAIT LIST 
      LDB XEQT
      ADB D15 
      LDA B,I 
      IOR B10K     SET STATUS WAIT REQUEST BIT
      STA B,I       INTO CURRENT EXEC PROGRAM 
      JMP MEM15 
* 
*     SCHEDULE REQUEST WITHOUT WAIT 
* 
$MPT5 JSB IDCKK     CHECK IF PROGRAM DORMANT
      CLE           CLEAR E FOR SCHOK 
* 
*  NOTE: "WORK" MUST = ID ADDR OF TARGET PROGRAM
* 
      JSB SCHOK     GO CHECK TIME LIST RESTRICTIONS OF TARGET PROGRAM 
      JSB PASES     GO PASS SESSION WORD FROM FATHER TO SON 
* 
MEM15 LDA RQRTN     SET UP SUSPENSION 
      STA XSUSP,I  POINT
      JMP $XEQ
* 
ESC01 CLB,INB,RSS   ILLEGAL PARAMETER COUNT 
ESC03 LDB D3
      RSS 
ESC04 LDB D4
      RSS 
ESC05 LDB D5        NO SUCH PROGRAM ERROR CODE. 
      RSS 
ESC07 LDB D7
      RSS 
ESC10 LDB B400      (SC10) NO MEM EVER FOR STRING PASSAGE.
      RSS 
ESC11 LDB B401      (SC11) REQUESTED PROGRAM IN TIME LIST FOR DIFF SESSION
ESCXX LDA ASY      OUTPUT SC ERROR CODE 
      JMP $ERAB    CALL SYSTEM ERROR MESSAGE ROUTINE
$SCXX EQU ESCXX 
* 
B40K  OCT 40000 
B400  OCT 400 
B401  OCT 401 
C120K OCT 57777 
      SKP 
* 
*  SCHOK CHECKS THE TARGET PROGRAM TO SEE IF IT MAY BE SCHEDULED
*  OR HAVE IT'S TIME VALUES CHANGED BY THE CURRENTLY EXECUTING
*  PROGRAM. 
* 
*  IF THE TARGET IS IN THE TIME LIST, ONLY PROGRAMS OF THE SAME 
*  SESSION MAY ACCESS IT. THIS IS BECAUSE THE PROGRAM MAY DEPEND
*  ON OPERATING WITHIN THE ENVIRONMENT DEFINED BY IT'S SESSION. IF
*  ANOTHER SESSION WERE TO RUN THIS PROGRAM, THE ORIGIONAL SESSION
*  WORD WOULD BE REPLACED BY THE NEW SESSION'S SCB ADDR.
* 
*  ANY REQUEST TO DEFINE THE TIME VALUES OF A PROGRAM (EXEC 12) IS
*  ALSO RESTRICTED TO WORK ONLY WITH PROGRAMS OF THE SAME SESSION.
* 
* 
      SPC 3 
*  CALLING SEQUENCE: XEQT=ID ADDR OF REQUESTING PROGRAM 
*                    WORK=ID ADDR OF TARGET PROGRAM 
*                    E=1 IF EXEC 12 REQUEST 
*                        ELSE E=0 
* 
*                    JSB SCHOK
* 
*         RETURN  :  ALL REGISTERS MODIFIED 
* 
* 
* 
* 
SCHOK NOP 
      LDB WORK      FETCH ID ADDR OF TARGET PROG
      ADB D17       ADVANCE TO TIME LIST WORD 
      LDA B,I 
      ALF,SLA       IF IN THE TIME LIST 
       JMP CKSSN     GO DO MORE CHECKS
* 
      SEZ,RSS       NOT IN TIME LIST SO RETURN IF 
       JMP SCHOK,I  CALL IS NOT FOR EXEC 12 REQUEST 
* 
CKSSN ADB D15       ADVANCE TO SESSION WORD OF TARGET 
      LDA B,I 
      SZA           IF PROGRAM NOT UNDER
      SSA             SESSION CONTROL 
       JMP SCHOK,I      LET THE REQUEST GO THROUGH
* 
      LDB XEQT      FETCH 
      ADB D32         SESSION WORD
      CPA B,I           IF MATCH WITH TARGET PROGRAM
       JMP SCHOK,I        LET IT CONTINUE 
* 
      JMP ESC11     REJECT WITH SC11 ERROR
* 
* 
      SPC 5 
* 
* 
* PASES WILL PASS THE SESSION WORD FROM FATHER TO SON 
* "WORK" MUST BE SET UP TO POINT AT THE SON PROGRAM 
* 
* 
PASES NOP 
      LDB XEQT      FETCH 
      ADB D32        FATHER'S 
      LDB B,I         SESSION WORD
      LDA WORK      FETCH 
      ADA D32        ADDR OF SON'S SESSION WORD 
      STB A,I       PLACE FATHER'S SESSION WORD INTO SON'S ID 
      JMP PASES,I 
* 
      SKP 
* 
*     CALL TO GET SYSTEM REAL TIME
* 
$MPT6 LDA RQP2     SAVE THE BUFFER
      STA TEMP1    ADDRESSES
      LDA RQP3
      STA TEMP2 
* 
      LDA DPNAM     GET THE ADDRESS OF OUR LOCAL BUFFER 
      STA RQP2      AND USE IT
      ADA D5        INSTEAD 
      STA RQP3
* 
      DLD $TIME     GET THE TIME
      JSB $TIMV     AND CONVERT IT
* 
      LDA D5        GET THE # OF
      CAX           TO X
      LDA DPNAM     THE SOURCE
      LDB TEMP1     THE DESTINATION 
      MWI           GIVE THE DATA TO THE USER 
* 
      LDA DPNAM+6   GET THE YEAR
      XSA TEMP2,I   GIVE TO USER(IF TEMP2 = 0 ITS A NOP)
      JMP MEM15     GO TO STORE RETURN ADDRESS
* 
*     GETID IS A SUBROUTINE TO GET THE ID-SEGMENT ADDRESS 
*     FROM PRAMETER NUMBER TWO WHERE THE USER MAY 
*     SUPPLY  ZERO (HIS ID) OR NOTHING (HIS ID) OR
*     AN ASCII NAME.
* 
*     CALLING SEQUENCE: 
* 
*     JSB GETID 
*     RETURN B= THE ID-SEGMENT ADDRESS. 
*     IF NOT FOUND THEN ERROR "SC05"IS GENERATED
*     E=0 
*     A=0  ON ALL RETURNS 
*     WORK = THE ID-ADDRESS 
*     WSTAT = THE ID-STATUS ADDRESS 
* 
GETID NOP 
      CLA           IF NOT SUPPLIED PRESET TO ZERO
      LDB XEQT      AND CURRENT PGM 
      ADB D12       SET B TO POINT TO CURRENT NAME
      XLA RQP2,I    GET THE PRAMETER
      SZA,RSS        ANY SUPPLIED ? 
      JMP GTID#      NO 
      LDB RQP2      GET ADDRESS OF NAME 
      JSB PLNAM     PULL IT IN LOCALLY
GTID# JSB TNAME     GO SEARCH FOR IT
      CLA,SEZ       IF FOUND SKIP 
      JMP ESC05     ELSE FLUSH HIM OUT OF THE SYSTEM
* 
      JMP GETID,I   RETURN
      SPC 2 
*     $IDNO COMPUTES THE ID-SEGMENT NUMBER OF A PROGRAM 
* 
*     CALLING SEQUENCE
*     LDB ID-SEGMENT ADDRESS
*     JSB $IDNO 
*     RETURN ID NUMBER IN B 
* 
$ID#  RAL,RAL 
      STA TEMPD 
      STB GETID     SAVE THE REQUESTED ID-ADDRESS 
      LDB KEYWD 
IDNO  LDA B,I       GET KEYWORD BLOCK ENTRY 
      INB           STEP FOR NEXT ONE 
      CPA GETID     THIS IT?
      CMB,INB,RSS   YES NEGATE AND SKIP 
      JMP IDNO      NO CONTINUE LOOP
* 
      ADB KEYWD     NEGATIVE OF NUMBER TO B 
      CMB,INB       SET POSITIVE AND
      JRS TEMPD $IDNO,I   RETURN
* 
      SKP 
* 
*     CALL TO SET ID SEGMENT TIME VALUES
* 
$MPT7 LDA DM7      CHECK PARAM COUNT FOR 4 OR 7 
      ADA RQCNT 
      SZA,RSS      IF SEVEN THEN
      JMP MPT7A               CONTINUE, ELSE
      ADA D3       CHECK FOR 4
      SZA 
      JMP ESC01    YOU LOSE, WRONG # OF PRAMS 
      XLA RQP5,I   NO CHECK PRAM 5
      SZA,RSS      IF  = 0
      JMP ESC02    YOU LOSE 
* 
MPT7A XLA RQP3,I    IF RESOLUTION CODE
      LDB D6
      SZA           ZERO OR 
      ADA DM5       GREATER THAN 4
      SSA,RSS       THEN
      JMP ESCXX     ABORT 
* 
      JSB GETID     GO GET SET UP ID-SEG POINTERS ("WORK")
* 
      CCE           SET (E) FOR SCHOK 
      JSB SCHOK     GO CHECK TIME LIST RESTRICTIONS 
      JSB PASES     GO PASS SESSION WORD FROM FATHER TO SON 
      LDB WORK      FETCH ID ADDR 
      LDA RQRTN     PUT RETURN
      STA XSUSP,I   ADDRESS IN THE ID SEG.
      JMP $TIMR     GO CONTINUE REQUEST IN TIME ROUTINE 
* 
DM7   DEC -7
* 
      SKP 
* 
*     THE IDCKK SUBROUTINE CHECKS THE STATUS OF POTENTIAL 
*     SON PROGRAMS & DETERMINES WHETHER TO HONOR THE FATHER-
*     SON SCHEDULE REQUEST. 
* 
* 
* 
      SPC 1 
*     CHECK IF PROGRAM DORMANT AND THEN SCHEDULE
IDCKK NOP 
      LDB RQP2      GET PROG NAME ADDRESS 
      JSB PLNAM     PULL IT IN LOCALLY
      JSB TNAME     NOW SEE IF THE PROGRAM EXISTS 
      SEZ 
      JMP ESC05     NO SUCH PROGRAM ERROR 
      ADB D14       MAKE SURE IT IS NOT 
      LDA B,I       A SEGMENT 
      AND D7
      CPA D5        IF SEGMENT
      JMP ESC03     TAKE GAS! 
      JSB $SZIT     SEE IF IT WILL FIT
      SZA           WELL ?
      JMP ESCXX     NO,SO TAKE GAS !
* 
      LDB XEQT      COMPUTE THE ID NUMBER 
      JSB $IDNO     AND 
      STB GETID     SAVE IT 
      LDA WORK      ALSO COMPUTE THE
      ADA D20       FATHER POINTER WORD ADDRESS 
      STA $IDNO     AND SAVE IT 
      LDA WSTAT,I   CHECK PROGRAM STATUS FOR DORMANT
      AND S&NP      KEEP JUST THE IMPORTANT BITS
      STA XA,I      RETURN PROG STATUS IN A REG 
      SZA           DORMANT?
      JMP IDCK2      NO - CHECK FURTHER 
* 
      XLB RQP9,I    (A MUST=0)CHECK IF THE OPTIONAL 
      SZB,RSS        PARAMETER STRING IS INCLUDED.
      JMP IDCK4     IF NOT,SKIP STRING STORAGE. 
      JSB $CVWD     CONVERT BUFFER LENGTH TO
      STB BFCNT      POSITIVE CHARS AND SAVE. 
      LDA RQP8      SET UP BUFFER ADDRESS.
      STA BFADD 
      CLE 
      LDB WORK      GET ID-SEGMENT ADDRESS
      JSB ALCST      AND STORE PARM.STRING. 
      JMP ESC10     ABORT PROGRAM(SC10)IF NO MEM EVER.
      JMP NMNOW     SUSPEND FATHER IF NO MEM NOW. 
* 
IDCK4 JSB PRAMO     PASS THE PARAMETERS,IF ANY,TO 
IDCK5 JSB $LIST      THE ID-SEG.AND THEN SCHEDULE.
      OCT 301 
      STA XA,I      SHOW THAT IT WAS DONE 
      STB XTEMP,I   SON'S ID ADDR TO FATHER'S 1ST TEMP WORD 
      LDA $IDNO,I   (MIGHT BE EXEC 9). GET THE CURRENT FLAG BITS
      AND C377      MASK OUT ANY OLD FATHER NUMBER. 
      IOR GETID     ADD THE FATHER NUMBER 
      STA $IDNO,I   AND RESET IT. 
      JMP IDCKK,I   RETURN
      SPC 1 
IDCK2 RAL,ALR       IF JUST THE NO PRAMS
      CMA,CLE,INA   SET E 
      LDA $IDNO,I   CHECK TO SEE
      AND B377      IF THIS GUY IS THE FATHER 
      CPA B         IF NOT
      RSS           THEN
      JMP MPT15     GO TEST FOR QUEING
* 
      SEZ           IF JUST "NP" BIT THEN 
      JMP IDCK5     GO SCHEDULE HIM 
* 
      LDA WSTAT,I   IF "R" AND "D" BITS BOTH SET
      AND B300      THEN JUST 
      CPA B300      CLEAR THEM ELSE 
      CLB,RSS 
      JMP MPT15     GO CHECK FOR QUEUEING 
* 
      XOR WSTAT,I   CLEAR THE "R" AND "D" BITS
      STA WSTAT,I   AND RESET IN SON'S ID 
      STB XA,I      INDICATE SUCESS.
      JMP MEM15     AND EXIT. 
* 
DM8   DEC -8
C377  OCT 177400
      SKP 
* 
*SCHEDULE WITH WAIT WITH WAIT REQUEST 
* 
*     IF REQUESTED PROGRAM IS NOT DORMANT THE REQUESTER IS
*     SUSPENDED UNTIL IT IS.
* 
MPT15 LDA RQP1      HERE AFTER FINDING REQUESTED PGM BUSY 
      CPA D9        IF NO WAIT
      RSS           THEN JUST DO
      CPA D10       THE OLD 
      JMP MEM15     THING 
* 
      LDB WORK      ELSE SET THE SUSPEND REASON 
      STB XTEMP,I   IN REQUESTERS ID-SEGMENT
      LDA $IDNO,I   TO INDICATE 
      IOR B1000     WE WERE HERE
      STA $IDNO,I 
      JSB $LIST     PUT REQUESTER IN WAIT LIST
      OCT 503 
      JMP $XEQ      GO TRY SOMEBODY ELSE. 
      SPC 2 
ASY   ASC 1,SC     ASCII -SC- FOR SCHED ERROR 
DEFR3 DEF RQP3,I
B10K  OCT 10000 
S&NP  OCT 20017     STATUS PLUS NO PRAMS BIT MASK 
B300  OCT 300 
      SKP 
* 
*     $MPT8         SET/CLEAR ALL OF MEMORY AND CORE LOCK FLAGS 
* 
*     EXEC 22 REQUEST WITH ONE PRAMETER 
*     PRAMETER      MEANING 
*     0             CLEAR CORE LOCK 
*     1             SET CORE LOCK 
*     2             CLEAR ALL OF MEMORY FLAG
*     3             SET ALL OF MEMORY FLAG. 
* 
$MPT8 LDB XEQT      GET THE ADDRESS 
      ADB D14       OF THE BITS IN THE ID-SEGMENT 
      STB $LIST     SAVE ADDRESS
      LDA B,I       GET CURRENT STATUS
      XLB RQP2,I    GET THE REQUEST WORD
      CMB,INB,SZB,RSS IF ZERO 
      JMP CLCL      CLEAR THE CORE LOCK 
* 
      INB,SZB,RSS   IF ONE
      JMP STCL      SET THE CORE LOCK 
* 
      INB,SZB,RSS   IF TWO
      JMP MEM15     CLEAR ALL OF MEMORY FLAG
* 
      INB,SZB       IF NOT THREE THEN 
      JMP ESC02     GO ABORT HIM. 
      JMP MEM15 
* 
STCL  LDB SWAP      CHECK IF LEGAL REQUEST
      RBR,RBR       GET LEGAL FLAG
      SLA           TO LEAST B
      RBR,CLE 
      CLE,SLB,RSS   IF ILLEGAL
      JMP ESC07     GO DO HIM IN
* 
CLCL  LDB B100      GET THE CORE LOCK FLAG TO B 
MPT81 IOR B         SET THE FLAG
      SEZ           AND IF A CLEAR REQUEST
      XOR B         CLEAR THE FLAG
      STA $LIST,I   RESET THE WORD
      JMP MEM15     GO EXIT.
      SKP 
**********************************************************************
* 
*     EXEC 14--GET/PUT A COMMAND STRING.
* 
*     FOUR PARAMETERS USED: 
*             . 
*             . 
*             . 
*          JSB EXEC 
*          DEF RTN
*          DEF ICODE
*          DEF GPCOD
*          DEF IBUFR
*          DEF IBUFL
*    RTN      . 
*             . 
*             . 
*    ICODE DEC 14 
*    GPCOD DEC 1 OR 2    1 = GET(RETRIEVE)PARAMETER STRING
*                        2 = PUT(WRITE)PARAMETER STRING TO FATHER 
*    IBUFR BSS N         BUFFER OF N WORDS
*    IBUFL DEC N(OR -2N) BUFFER LENGTH  WORDS(+) OR CHARACTERS(-) 
* 
******************************************************************
* 
$MPT9 LDA RQCNT     CHECK TO SEE
      ADA DM3        IF THERE ARE 
      SSA             FOUR PARAMETERS.
      JMP ESC01     SORRY BUDDY, YOU BLEW IT! 
      LDA RQP3      SAVE ADDRESS
      STA BFADD      OF BUFFER. 
      XLB RQP4,I    GET BUFFER LENGTH, SAVE 
      STB $IDNO      FOR TRANS.LOG CHECK, 
      JSB $CVWD       CONVERT TO POSITIVE 
      STB BFCNT        CHAR COUNT AND SAVE. 
      XLA RQP2,I    GET TYPE OF REQUEST.
      ADA DM2 
      SZA,RSS 
      JMP MPT9W      2=WRITE. 
      INA,SZA        1=READ.
      JMP ESC02      ILLEGAL REQUEST. 
* 
      LDB XEQT      READ A STRING BLOCK FOR AN ID-SEG.
      JSB $STSH      TO THE BUFFER(E=1,EXTRA WORD). 
      SZA,RSS       GET THE STRING BLOCK ADDRESS
      JMP NOPAW      FOR THIS PROG.  IF NO STRING,
      ADA D2          THEN SET A=1, CLEAR B, AND RETURN.
      LDB A,I       GET ACTUAL SIZE OF STORED 
      CMB,CLE,INB    STRING AND COMPARE TO
      ADB BFCNT       TO THE REQUESTED
      LDB A            STRING SIZE. 
      SEZ,INA,RSS   SET A REG. TO SOURCE ADDRESS. 
      LDB BFCTA     USE WHICHEVER SIZE IS 
      LDB B,I        SMALLER AND CONVERT
      STB BFCNT 
      INB             TO WORDS AND USE
      BRS              AS MOVE WORDS
      STB XB,I          COUNT.
      LDB BFADD     SET B REG. TO DESTINATION ADD.
      LDX XB,I
      MWI           GO MOVE WORDS.
      LDB XEQT      WHEN COMPLETE, RETURN THE 
      JSB $RTST      STRING BLOCK TO MEMORY.
      LDB XB,I      GET MOVE WORDS COUNT. 
      LDA $IDNO     IF ORIGINAL REQUEST WAS 
      SSA            FOR CHARS, THEN DOUBLE 
      LDB BFCNT       WORD COUNT FOR TRANS.LOG. 
      JMP MPT91  GO SETUP REGS. AND RETURN. 
* 
MPT9W LDA XEQT      WRITE A STRING BLOCK TO THE FATHER. 
      ADA D20       GET CURRENT PROGRAM 
      LDA A,I        AND DETERMINE IF THERE 
      AND B377        IS A FATHER.
      SZA,RSS 
      JMP NOPAW     ERROR, NO FATHER. 
      CCB,CCE       GET ID(SET E=1 FOR ALCST) 
      ADB KEYWD      SEGMENT
      ADB A           ADDRESS OF
      LDB B,I          FATHER.
      JSB ALCST     DEALLOCATE AND THEN ALLOC.BLOCK FOR PAW.
      JMP ESC10     IF SUCCESS ALLOC.,THEN SET A=0.IF NO
      JMP NMNOW      MEM EVER,ABORT SON(SC10).IF NO MEM 
MPT91 CLA             NOW, SUSPEND THE SON. 
* 
MPT95 STB XB,I      SET UP B REGISTER.
      STA XA,I      SET UP A REGISTER.
      JMP MEM15     RETURN. 
* 
NMNOW LDA WORDS     FETCH STRING LENGTH   (GLM.2013)
      STA XTEMP,I    AND SAVE FOR WAKE-UP CALL    (GLM.2013)
      JSB $LIST     NOT ENOUGH MEMORY NOW SO
      OCT 504        LINK PROGRAM INTO MEMORY 
      JMP $XEQ        SUSPENSION LIST.
* 
NOPAW INA           IF NO STRING ON 'GET' OR
      CLB            NO FATHER ON 'PUT', THEN 
      JMP MPT95       SET A=1 OR B=0. 
* 
DM2   DEC -2
      SKP 
**************************************************************
* 
*     SUBROUTINE TO STORE A STRING IN SYSTEM AVAILABLE MEMORY.
*     ALCST DEALLOCATES ANY STRING MEMORY, ALLOCATES A BLOCK OF 
*     MEMORY, TRANSFERS THE STRING INTO THE BLOCK, AND LINKS THE
*     BLOCK INTO THE HEAD OF THE STACK LOCATED AT $STRG.  THE LINKED
*     BLOCKS LOOK AS FOLLOWS: 
* 
* 
*       ***********   ********************* 
* $STRG *    ---------*     0 OR LINK-------------- 
*       ***********   *-------------------* 
*   EXTRA WORD BIT------* ID SEG ADDRESS  * 
*                     *-------------------* 
*                     * # CHARS IN STRING * 
*                     *-------------------* 
*                     * CHAR 1     CHAR 2 * 
*                     *-------------------* 
*                     *                   * 
*                     *-------------------* 
*                     * CHAR M            * 
*                     ********************* 
*                     *     EXTRA WORD    * 
*                     *-------------------* 
* 
* 
*     WORD 1 = LINK TO NEXT BLOCK OR 0 FOR LAST BLOCK 
*     WORD 2 = BITS 0-14 = ID-SEGMENT ADDRESS 
*              BIT 15    = EXTRA WORD IN BLOCK BIT(SEE $ALC)
*     WORD 3 = ACTUAL NUMBER OF CHARS (M) IN STRING 
* 
*     CALLING SEQUENCE: 
*          BFADD:= BUFFER ADDRESS 
*          BFCNT:= POSITIVE BUFFER CHARACTER COUNT
*          MVFLG:= -1/0  STRING IN SYS/USER MAP 
*          CLE/CCE  (SEE BELOW) 
*          LDB ID-SEGMENT ADDRESS 
*          JSB ALCST
* 
*          RETURN:
*       (P+1) <A>=-1, <B>=XTEMP   UNSUCCESSFUL,NO MEM EVER
*       (P+2) <A>=0 , <B>=XTEMP   UNSUCCESSFUL,NO MEM NOW 
*       (P+3) <A>=+ , <B>=XTEMP   SUCCESSFUL ALLOCATION EVER
* 
*             <BFADD> AND <BFCNT> ARE MODIFIED
*             TEMP1, TEMP4 AND TEMP6 ARE USED.
*             CALLS $RTST WHICH USES TEMP2, TEMP3 AND TEMP5.
* 
*         ON ENTRY, IF E REG=0, THE BASE PAGE WORD XTEMP(1721B)IS 
*         SET TO THE ID SEGMENT WORD 2 ADDRESS INDICATED BY THE B REG 
*         AND THEN RESTORED ON EXIT.  IF THE E REG = 1, THEN XTEMP IS 
*         NOT MODIFIED.  SINCE ON "NOT ENOUGH MEMORY", $ALC WILL STORE
*         THE AMOUNT OF MEMORY REQUIRED IN 'XTEMP,I', THIS WILL RESULT: 
*             1)E=0,SAVE MEMORY SIZE IN XTEMP OF B REG PROGRAM, OR
*             2)E=1,SAVE MEMORY SIZE IN XTEMP OF CURRENT PROGRAM(USED 
*               ONLY IN EXEC 14 CALL FROM SON TO FATHER). 
* 
***************************************************************	
* 
ALCST NOP 
      STB TEMP1     SAVE ID ADDRESS.
      LDA XTEMP     SAVE CURRENT PROGRAM'S ID 
      STA TEMP4      WORD 4.
*     INB           IF E=0, THE SET UP OUR PROGRAM'S ID 
      SEZ,INB,RSS        WORD 2 FOR USE BY $ALC.
      STB XTEMP       OTHERWIZE, USE CURRENT PROGRAM. 
      LDB TEMP1     GET ID ADDRESS AND
      JSB $RTST      RETURN ANY STRING MEMORY.
      LDA BFCNT     GET CHAR COUNT. 
      INA           CHANGE TO 
      ARS            WORD COUNT 
      STA RTSTW       AND SAVE. 
      ADA D3        INCREMENT WORD COUNT BY 
      STA WORDS      3 FOR LINKAGE WORDS AND
      JSB $ALC        GO GET MEMORY.
WORDS NOP 
      JMP ALST9     NO MEMORY EVER RETURN.
      JMP ALST8     NO MEMORY NOW RETURN. 
      CCE           OK RETURN.  SET E REG TO
      CPB WORDS      1 IF AN EXTRA WORD WAS 
      CLE             RETURNED. 
      LDB $STRG     LINK THE BLOCK INTO 
      STB A,I        THE HEAD OF THE
      STA $STRG       STACK HEADED AT $STRG.
      LDB TEMP1     GET ID-SEG ADDRESS, ADD IN
      RBL,ERB        EXTRA BLOCK WORD BIT,
      INA             AND STORE IN SECOND 
      STB A,I          BLOCK WORD.
      LDB BFCNT      STORE BUFFER CHAR
      INA             COUNT IN THIRD
      STB A,I          WORD OF BLOCK. 
      INA 
      LDB A          GET ADD.OF DESTINATION BUFFER. 
      LDA BFADD      GET ADDRESS OF SOURCE BUFFER.
* 
      ISZ MVFLG      WHERE IS THE STRING RIGHT NOW ?
      JMP ALST5      USER MAP 
* 
      MVW RTSTW      SYS MAP, SO GO MOVE THE WORDS
      JMP ALST6 
* 
ALST5 LDX RTSTW 
      MWF           GO MOVE WORDS FROM USER MAP.
ALST6 ISZ ALCST     SUCCESSFUL RETURN.
ALST8 ISZ ALCST     NO MEMORY NOW RETURN. 
ALST9 CLB           CLEAR OUT SYS/USER MAP FLG
      STB MVFLG 
      LDB TEMP4     RESTORE CURRENT PROGRAM'S 
      STB XTEMP      ID WORD 2 ADDRESS. 
      JMP ALCST,I  NO MEMORY EVER RETURN--A=STATUS. 
* 
STRGA DEF $STRG 
$STRG OCT 0         HEAD OF STRING STORAGE STACK. 
BFCTA DEF BFCNT 
BFCNT BSS 1 
BFADD BSS 1 
MVFLG NOP           -1/0  STRING CURRENTLY IN SYS/USER MAP
      SKP 
**************************************************************
* 
*     SUBROUTINE TO RETURN  SYSTEM AVAILABLE MEMORY ALLOCATED 
*     FOR A STRING.  GIVEN A PROGRAM'S ID-SEGMENT ADDRESS, $RTST
*     LOCATES THE STRING IN THE BLOCK HEADED AT $STRG, UNLINKS
*     IT AND RETURNS IT TO SAVMEM.
* 
*     CALLING SEQUENCE: 
*          LDB ID-SEGMENT ADDRESS 
*          JSB $RTST
* 
*     RETURN: 
*          NO REGISTERS ARE SAVED.
*          USES TEMP2 AND TEMP5 FOR TEMPOARAY STROAGE.
*          CALLS $STSH WHICH USES TEMP3.
* 
**************************************************************
* 
$RTST NOP 
      STB TEMP2     SAVE ID-SEGMENT ADDRESS.
RTST1 JSB $STSH     GET STRING BLOCK ADD.(E=1,EXTRA WD).
      SZA,RSS       CHECK IF STRING 
      JMP $RTST,I    BLOCK FOUND. 
      STA RTSTA     STORE STARTING BLOCK ADDRESS. 
      LDA A,I       UNLINK BLOCK
      STA B,I        FROM STACK.
      LDA RTSTA 
      ADA D2        GET SIZE OF 
      LDB A,I        BLOCK, CONVERT 
      INB             TO WORDS
      BRS              AND
      ADB D3            ADD 3.
      SEZ           IF EXTRA WORD BIT SET,
      INB            ADD 1 TO SIZE. 
      STB RTSTW     STORE TOTAL SIZE OF BLOCK.
      JSB $RTN      RETURN MEMORY BLOCK.
RTSTA NOP 
RTSTW NOP 
* 
      LDB TEMP2     GET ID SEGMENT ADDRESS. 
      STB WORK      SET UP $WORK IN CASE ANY PROG SCHEDULED 
      JMP RTST1     CHECK FOR ANY MORE BLOCKS.
* 
      SKP 
**********************************************************************
* 
*     SUBROUTINE $STSH CHASES DOWN A STRING BLOCK IN THE STACK
*     HEADED AT $STRG GIVEN THE ID-SEGMENT ADDRESS.  ASSUMES ENTRY
*     IN THE SYSTEM MAP.
* 
*     CALLING SEQUENCE: 
*          LDB ID-SEGMENT ADDRESS 
*          JSB $STSH
* 
*     RETURN: 
*          <A>=0 = COULD NOT FIND NAMED BLOCK 
*          <A>=+ = ADDRESS OF BLOCK, E=1 = EXTRA WORD IN BLOCK
*                                    B= ADDRESS OF PREVIOUS BLOCK 
*          USES TEMPORARY LOCATION TEMP3. 
* 
**********************************************************************
* 
$STSH NOP 
      STB TEMP3     SAVE ID-SEGMENT ADDRESS 
      LDB STRGA     GET POINTER TO HEAD OF STACK. 
STSH1 LDA B,I       GET BLOCK ADDRESS AND 
      CLE,SZA,RSS    IF ZERO, THEN END
      JMP STSH9       OF STACK. 
      INA           OTHERWIZE,INCREMENT IT,AND GET
      LDA A,I        GET ID-SEGMENT ADDRESS.
      ELA,RAR       SAVE EXTRA WORD BIT IN E REG. 
      CPA TEMP3     IF THIS IS CORRECT
      JMP STSH2      BLOCK, THEN RETURN.
      LDB B,I       OTHERWIZE, GO CHECK 
      JMP STSH1      NEXT BLOCK.
* 
STSH2 LDA B,I       SET A=BLOCK ADDRESS AND 
STSH9 JMP $STSH,I    RETURN.
* 
**********************************************************************
* 
*     $CVWD CONVERTS NEGATIVE CHARACTER COUNT OR POSITIVE WORD COUNT
*     TO POSITIVE CHARACTER COUNT.
* 
*     CALLING SEQUENCE: 
*          LDB COUNT(+ = WORDS, - = CHARACTERS) 
*          JSB $CVWD
* 
*     RETURN: 
*          B = +CHARACTERS
* 
**********************************************************************
* 
$CVWD NOP 
      SSB           CONVERT NEGATIVE
      CMB,INB,RSS    CHARACTERS AND 
      BLS             POSITIVE WORDS TO 
      JMP $CVWD,I      POSITIVE CHARACTERS. 
      HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** 
* 
* 
*** SYSTEM BASE PAGE  COMMUNICATION  AREA *** 
* 
XI    EQU 1647B 
.     EQU 1650B     ESTABLISH ORIGIN OF AREA
* 
* SYSTEM TABLE DEFINITION * 
* 
EQTA  EQU .+0      FWA  OF  EQUIPMENT TABLE 
EQT#  EQU .+1       # OF EQT ENTRIES
* 
DRT   EQU .+2      FWA  OF  DEVICE REFERENCE TABLE
LUMAX EQU .+3       # OF LOGICAL UNITS (IN DRT) 
* 
INTBA EQU .+4      FWA  OF  INTERRUPT TABLE 
INTLG EQU .+5       # OF INTERRUPT TABLE ENTRIES
* 
TAT   EQU .+6      FWA  OF  TRACK ASSIGNMENT TABLE
* 
KEYWD EQU .+7      FWA  OF  KEYWORD BLOCK 
* 
* I/O MODULE/DRIVER COMMUNICATION 
* 
EQT1  EQU .+8      ADDRESSES
EQT2  EQU .+9 
EQT3  EQU .+10      OF
EQT4  EQU .+11
EQT5  EQU .+12      CURRENT 
EQT6  EQU .+13
EQT7  EQU .+14      15-WORD 
EQT8  EQU .+15
EQT9  EQU .+16      EQT 
EQT10 EQU .+17
EQT11 EQU .+18      ENTRY 
EQT12 EQU .+81
EQT13 EQU .+82
EQT14 EQU .+83
EQT15 EQU .+84
* 
CHAN  EQU .+19     CURRENT DMA CHANNEL #
TBG   EQU .+20     I/O ADDRESS OF TIME-BASE CARD
SYSTY EQU .+21     EQT ENTRY ADDRESS OF SYSTEM TTY
* 
* SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION *
* 
RQCNT EQU .+22     # OF REQUEST PARAMETERS -1 
RQRTN EQU .+23      RETURN POINT ADDRESS
RQP1  EQU .+24      ADDRESSES 
RQP2  EQU .+25
RQP3  EQU .+26       OF REQUEST 
RQP4  EQU .+27
RQP5  EQU .+28       PARAMETERS 
RQP6  EQU .+29
RQP7  EQU .+30       (SET FOR MAXIMUM OF
RQP8  EQU .+31        9 PARAMETERS) 
RQP9  EQU .+32
* 
* DEFINITION OF SYSTEM LISTS (QUEUES) * 
* 
DORMT EQU .+32     ADDRESS OF 'DORMANT' LIST, 
SKEDD EQU .+33      'SCHEDULE' LIST,
SUSP2 EQU .+35      'WAIT' LIST,
SUSP3 EQU .+36      'AVAILABLE MEMORY' LIST,
SUSP4 EQU .+37      'DISC ALLOCATION'  LIST,
SUSP5 EQU .+38      'OPERATOR SUSPEND' LIST 
* 
* DEFINITION OF EXECUTING PROGRAM  ID SEGMENT' *
* 
XEQT  EQU .+39     ID SEGMENT ADDR. OF CURRENT PROG.
XLINK EQU .+40       'LINKAGE'
XTEMP EQU .+41       'TEMPORARY (5-WORDS) 
XPRIO EQU .+46       'PRIORITY' WORD
XPENT EQU .+47       'PRIMARY ENTRY POINT'
XSUSP EQU .+48       'POINT OF SUSPENSION'
XA    EQU .+49       'A REGISTER' AT SUSPENSION 
XB    EQU .+50       'B REGISTER' 
XEO   EQU .+51       'E AND OVERFLOW
* 
* SYSTEM MODULE COMMUNICATION FLAGS * 
* 
OPATN EQU .+52     OPERATOR/KEYBOARD ATTENTION FLAG 
OPFLG EQU .+53     OPERATOR COMMUNICATION FLAG
SWAP  EQU .+54     RT DISC RESIDENT SWAPPING FLAG 
DUMMY EQU .+55     I/O ADDRESS OF DUMMY INT. CARD 
IDSDA EQU .+56     DISC ADDR. OF FIRST ID SEGMENT 
IDSDP EQU .+57      -POSITION WITHIN SECTOR 
* 
* DEFINITION OF MEMORY ALLOCATION BASES * 
* 
BPA1  EQU .+58     FWA R/T DISC RES. BP LINK AREA 
BPA2  EQU .+59     LWA R/T DISC RES. BP LINK AREA 
BPA3  EQU .+60     FWA BKG DISC RES. BP LINK AREA 
LBORG EQU .+61     FWA OF RESIDENT LIBRARY AREA 
RTORG EQU .+62     FWA OF REAL-TIME AREA
RTCOM EQU .+63     LENGTH OF REAL TIME COMMON AREA
RTDRA EQU .+64     FWA OF R/T DISC RESIDENT AREA
AVMEM EQU .+65     FWA OF SYSTEM AVAILABLE MEMORY 
BKORG EQU .+66     FWA OF BACKGROUND AREA 
BKCOM EQU .+67     LENGTH OF BACKGROUND COMMON AREA 
BKDRA EQU .+68     FWA OF BKG DISC RESIDENT AREA
* 
* UTILITY PARAMETERS
* 
TATLG EQU .+69     LENGTH OF TRACK ASSIGNMENT TABLE 
TATSD EQU .+70      # OF TRACKS ON SYSTEM DISC
SECT2 EQU .+71      # SECTORS/TRACK ON LU 2 (SYSTEM)
SECT3 EQU .+72      # SECTORS/TRACK ON LU 3 (AUX.)
* 
DSCLB EQU .+73     DISC ADDR OF RES LIB ENTRY PTS 
DSCLN EQU .+74      # OF RES LIB ENTRY POINTS 
DSCUT EQU .+75     DISC ADDR OF RELOC UTILITY PROGS 
DSCUN EQU .+76      # OF RELOC UTILITY PROGS
LGOTK EQU .+77     LOAD-N-GO: LU,STG TRACK,# OF TRKS
LGOC  EQU .+78      CURRENT LGO TRACK/SECTOR ADDRESS
SFCUN EQU .+79     SOURCE FILE LU AND DISC ADDRESS
MPTFL EQU .+80      MEMORY PROTECT ON/OFF FLAG (0/1)
FENCE EQU .+85      MEM PROTECT FENCE ADDRESS 
* 
BKLWA EQU .+87     LWA OF MEMORY IN BACKGROUND
* 
* 
FREG1 EQU LBORG 
FREG2 EQU RTORG 
FREG3 EQU BKORG 
FLG   EQU OPFLG 
* 
A     EQU 0B        LOCATION OF A REGISTER
B     EQU 1B        LOCATION OF B REGISTER
      ORG *         PROGRAM LENGTH
      END $LST
                                                                                                                    