ASMB,R,Q,C     ** RT SCHEDULER MODULE **
      HED RTE SCHEDULER/MESSAGE PROCESSOR 
*     NAME:   SCHED 
*     SOURCE: 92067-18021 
*     RELOC:  92067-16021 
*     PGMR:   G.A.A.,L.W.A.,D.L.S.,C.M.M. 
*     DATA:   1/1/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-16014 REV.1926 790506 
* 
      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
* 
******************************************************************* 
* 
*   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 
      ENT $MPT9,$RTST,$CVWD,$STRG 
      ENT $MSEX,$LSTM 
      ENT $LST,$SCD,$ID#,$MSG,$SCXX 
* 
*   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,$SYMG,$SDRL 
      EXT $ALDM,$DMAL,$MATA,$PRCN 
      EXT $MBGP,$MRTP,$MCHN,$MAXP 
ALDM  EQU $ALDM 
DMAL  EQU $DMAL 
PRCNG EQU $PRCN 
* 
* 
*******************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      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. 
*     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
                                                                