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 * <<<<<<<<<>>>>>>>> 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) * * 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 * 4 = ID SEGMENT ADDRESS IN B-REG * 5 = ID SEGMENT ADDRESS IN XEQT * 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