ASMB,R,L,C ** SCHEDULER MODULE ** * COMPARED WITH RTE-II LISTING ON 750729 HED RTE SCHEDULER/MESSAGE PROCESSOR * NAME: XMSC * SOURCE: PROD.-SOUR. * RELOC: PROD.-RELO. * PGMR: G.A.A.,L.W.A.,E.J.W. * DATE: DATE * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. 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 XMSC,0 760608 * SUP ******************************************************************* ***** AMD ***** JUL,73 ***** DSD ***** APR,75 ******************************************************************* * * SCHED ENTRY POINT NAMES * ENT $LIST,$CVT3,$CVT1,$ABRT,$TYPE ENT $MPT2,$INER,$MSEX ENT $STRT,$SCD3 ENT $MPT8,$WORK,$WATR * * SCHED EXTERNAL REFERENCE NAMES * EXT $ERMG EXT $SCLK EXT $ZZZZ,$PVCN EXT $NOPG,$ILST EXT $XEQ,$ALC,$RTN EXT $SYMG EXT $SABR * * UNL $TEMP$ SUPPRESS LONG COMMENTS ******* UNL $TEMP$ * ******************************************************************* * * 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 * ******************************************************************* * LST $TEMP$ * --BUFFERS, CONSTANTS, POINTERS, ETC * $STRT EQU * SYSTEM INITIALIZATION ENTRY POINT * T4 JSB PATCH ***DEBUG * T0 JMP TEMPP -NOP- BECOMES NOP AFTER STARTUP ST2 JSB $RTN RE-INITIALIZE MEMORY T1 NOP WITH MAX T2 NOP ST3 JMP TEMP5 -NOP- BECOMES NOP AFTER STARTUP * EXT $CLCH,$ETEQ LDA EQT# ***DEBUG*** CMA,INA ***DEBUG*** STA PATCH ***DEBUG*** LDA EQTA ***DEBUG*** STA PTR ***DEBUG*** EQLOP STA PTR ***DEBUG*** JSB $ETEQ ***DEBUG*** CLA ***DEBUG*** STA EQT1,I ***DEBUG*** STA EQT15,I ***DEBUG*** LDA EQT5,I ***DEBUG*** AND C140K ***DEBUG*** STA EQT5,I ***DEBUG*** JSB $CLCH ***DEBUG*** LDA PTR ***DEBUG*** ADA D15 ***DEBUG*** ISZ PATCH ***DEBUG*** JMP EQLOP ***DEBUG*** * LDB KEYWD ***DEBUG*** STB PTR ***DEBUG*** RSLOP LDB PTR,I ***DEBUG*** SZB,RSS ***DEBUG*** JMP RSDON ***DEBUG*** ADB D20 ***DEBUG*** LDA B,I ***DEBUG*** AND CLRPA ***DEBUG*** STA B,I ***DEBUG*** LDA PTR,I ***DEBUG*** JSB $ABRT ***DEBUG*** ISZ PTR JMP RSLOP ***DEBUG*** RSDON NOP ***DEBUG*** JSB $SCLK CLA ***DEBUG*** STA FLG ***DEBUG*** STA OPATN ***DEBUG*** JMP $TYPE ***DEBUG*** * JMP $XEQ * OPATN EQU 1734B ***DEBUG*** CLRPA OCT 6400 ***DEBUG*** KEEP ONLY RM,RE,RN C140K OCT 37777 EXT $MPFT,$EMRP ***DEBUG*** PATCH NOP ***DEBUG*** CCA ***DEBUG*** ADA AVMEM ***DEBUG*** STA $EMRP ***DEBUG*** LDA RTORG ***DEBUG*** STA MPFT ***DEBUG*** STA MPFT+1 ***DEBUG*** STA MPFT+3 ***DEBUG*** STA MPFT+4 ***DEBUG*** LDA DMPFT ***DEBUG*** STA $MPFT ***DEBUG*** LDA B14 ***DEBUG*** STA SWAP ***DEBUG*** LDB KEYWD ***DEBUG*** STB PTR ***DEBUG*** CLB ***DEBUG*** IDLOP LDA PTR,I ***DEBUG*** SZA,RSS ***DEBUG*** JMP IDDON ***DEBUG*** ADA D18 ***DEBUG*** STB A,I ***DEBUG*** INA ***DEBUG*** STB A,I ***DEBUG*** INA ***DEBUG*** STB A,I ***DEBUG*** INA ***DEBUG*** STB A,I ***DEBUG*** ISZ PTR ***DEBUG*** JMP IDLOP ***DEBUG*** * IDDON STB T4 ***DEBUG*** JMP PATCH,I ***DEBUG*** * D18 DEC 18 ***DEBUG*** B14 OCT 14 ***DEBUG*** PTR OCT 0 ***DEBUG*** DMPFT DEF MPFT ***DEBUG*** MPFT OCT 0,0,0,0,0 ***DEBUG*** * TEMPP LDA AVMEM ***TEMPORARY WORKING STORAGE AREA TEMP STA T1 * DO NOT REARRANGE! TEMP1 CMA,INA * TEMP2 ADA BKORG * TEMP3 STA T2 * TEMP4 JMP ST2 * THESE TEMPS ARE USED TO INITIALIZE TEMP5 CLA *** SYSTEM AVAILABLE MEMORY. TEMP6 STA T0 * AND ALSO TMP STA ST3 * USED BY $PARS AS CONTIGUOUS BUFFER SPACE TEMPH JMP $ALC * TBUF DEF TEMP5 $WORK JSB $ZZZZ * TBUFS DEF TEMP5+7 WPRIO NOP * ASCI NOP * ASCI1 NOP * ASCI2 JMP $ERMG *** WSTAT NOP DM5 DEC -5 * D2 DEC 2 D4 DEC 4 D5 DEC 5 D6 DEC 6 D9 DEC 9 D15 DEC 15 * D1 OCT 1 D3 DEC 3 * ZERO REP 5 NOP DEF0 DEF ZERO UNL $TEMP$ 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) * ! ! ! ! ! ! * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * * @ WORDS USED IN SHORT ID SEGMENTS 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. * * * $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 * * 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. 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 X 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 * A NOT 0, THEN ADDR OF MESSAGE * IF ERROR, (B) CONTAINS ASCII ERR CODE * WHERE * 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 * 1 = ID SEGMENT ADDRESS * 2 = ASCII PROGRAM NAME ADDRESS * 3 = ID SEGMENT ADDRESS IN WORK * 4 = ID SEGMENT ADDRESS IN B-REG * 5 = ID SEGMENT ADDRESS IN XEQT * * * ADDRESS * KEYWORD, ID SEGMENT, OR * PROGRAM NAME ADDRESS AS SPECIFIED BY CODE * MUST NOT BE SUPPLIED FOR * ADDRESS CODES 3 AND 4. * LST $TEMP$ SKP $LIST OCT 1 ENTRY/EXIT (INIT.#0 FOR DISPATCHER) LDA $LIST,I WORD 1 AND D15 STA L0091 STORE AWAY REQUEST CODE XOR $LIST,I FORM ADDR CODE ALF,ALF 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 LDB $LIST,I GET IT TO B CPA D1 IS ADDRESS NOW IN B? JMP L0021 YES GO SET IT UP SPC 1 LDA $NOPG NO SUCH PROG ERROR MESSAGE LDB D5 NO SUCH PROG ERROR CODE JMP L0015 GO TO RETURN * * PROCESS ID SEGMENT ACCORDING TO REQUEST CODE * L0021 STB $WORK SET ADDRESS IN WORK * L0060 LDA $WORK ID SEGMENT ADDRESS ADA D6 STA WPRIO PRIORITY ADDRESS ADA D9 STA WSTAT STATUS ADDRESS LDA WSTAT,I AND D15 STA L0090 STORE CURRENT PROG STATUS LDB L0091 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 * L0075 LDA $ILST ILLEGAL STATUS MESSAGE ADDRESS LDB D3 ILLEGAL STATUS ERROR CODE JMP L0015 GO TO EXIT 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 * L0105 IOR WSTAT,I MERGE THE CURRENT STATUS STA WSTAT,I RESET THE NEW STATUS JMP L0014 GO TO EXIT * L0350 EQU * NO RESOURCES IN L0115 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 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 L0015 ISZ $LIST STEP TO RETURN ADDRESS JMP $LIST,I LOOK MA! NO LABEL! SPC 1 * L0355 LDA WSTAT,I GET OLD STATUS AND CLD.R CLEAR "R" AND "D" (BITS 7,6) 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 L0090 NOP L0091 NOP B20K OCT 20000 SPC 1 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. * L0200 CPA D6 IF OP-SUSP JMP L0250 GO CHECK FOR DORMANT BIT LDB WSTAT,I GET WHOLE STATUS WORD 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 CLA,INA SET A FOR SCHEDULE RBL DORM BIT TO 15 SSB IF DORM BIT SET JMP L0100 GO SET DORMANT JMP L0130 SCHEDULE * L0220 RBL CHECK RESOURCE BIT (EXCEPT IN M-I) SSB IF DORM BIT SET JMP L0100 GO MAKE DORMANT * L0230 LDA B1004 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 LDA WSTAT,I IF WAIT BIT SET ALF,SLA,ALF THEN ALF,SLA,ALF GO MOVE TO WAIT LIST (SKIPS) JMP L0270 ELSE, SCHEDULE THE PROGRAM * 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 OR OPERATOR SUSPENDED, STATUS ERROR! * IF SCHEDULED, ADD TO OPERATOR SUSPEND LIST * IF NOT ONE OF ABOVE, SET OPERATOR-SUSPEND BIT * L0300 LDB WSTAT,I GET THE FULL STATUS WORD SZB IF ZERO (DORMANT) CPA D6 OR OP-SUSP JMP L0075 REJECT THE REQUEST * CPA D2 IF I/O SUSP JMP L0310 GO SET TO "O" BIT * JMP L0400 ELSE GO RELINK I.E. SET OP-SUSP. * L0310 LDA B1000 SET OPER-SUSP BIT IN STATUS 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 B1004 OCT 1004 CLD.R OCT 57460 CLEARS STATUS, R, D, NP, AND NA BITS HED LINK UPDATE PROCESSOR * * THE LINK PROCESSOR OF THE REAL TIME EXECUTIVE. * 1. REMOVES A PROGRAM FROM A LIST * 2. ENTERS THE PROGRAM INTO ANOTHER LIST AT THE PROPER PLACE * ACCORDING TO PRIORITY LEVEL. * * * * 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 LK150 YES, RETURN 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