ASMB,R,L,C ** RTE-M I SCHEDULER MODULE ** HED ** RTE-M I SCHEDULER MODULE ** * * NAME : $MSC1 * SOURCE: 92064-18001 * RELOC: 92064-16001 * PROGMR: E.J.W.,J.U.F. * BASED ON RTE-III VERSIONS G.A.A.,L.W.A.,D.L.S. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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 $MSC1,0 92064-16001 REV.1940 790712 * SUP * SCHED ENTRY POINT NAMES * ENT $LIST,$MESS,$CVT3,$CVT1,$ABRT,$TYPE ENT $MPT2,$PRAM,$TNAM ENT $PARS,$STRT,$SCD3,$INER,$ASTM ENT $MPT8,$WORK,$WATR ENT $MSEX,$MSBF,$LCTU,$RCTU * * SCHED EXTERNAL REFERENCE NAMES * EXT $XSIO,$IOUP,$IODN,$ERMG EXT $IOCL,$LUPR,$EQST,$SCLK EXT $ZZZZ,$CHTO,$PVCN EXT $ERIN,$NOPG,$OPER,$ILST EXT $XEQ,$ONTM,$ALC,$RTN EXT $SYMG,.MVW EXT $BLRQ,$ITRQ,$TIRQ,$TMRQ EXT $SABR,$STRQ,$PRRQ * * ******************************************************************* * * 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 * ******************************************************************* * * --BUFFERS, CONSTANTS, POINTERS, ETC * $STRT EQU * SYSTEM INITIALIZATION ENTRY POINT * T4 JMP RECON ***TRY RESTART * 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# ***TRY RESTART*** CMA,INA ***TRY RESTART*** STA TEMP1 ***TRY RESTART*** LDA EQTA ***TRY RESTART*** STA TEMP2 ***TRY RESTART*** EQLOP STA TEMP2 ***TRY RESTART*** JSB $ETEQ ***TRY RESTART*** CLA ***TRY RESTART*** STA EQT1,I ***TRY RESTART*** STA EQT15,I ***TRY RESTART*** LDA EQT5,I ***TRY RESTART*** AND C140K ***TRY RESTART*** STA EQT5,I ***TRY RESTART*** JSB $CLCH ***TRY RESTART*** LDA TEMP2 ***TRY RESTART*** ADA D15 ***TRY RESTART*** ISZ TEMP1 ***TRY RESTART*** JMP EQLOP ***TRY RESTART*** * LDB KEYWD ***TRY RESTART*** STB TEMP2 ***TRY RESTART*** RSLOP LDB TEMP2,I ***TRY RESTART*** SZB,RSS ***TRY RESTART*** JMP RSDON ***TRY RESTART*** ADB D20 ***TRY RESTART*** LDA B,I ***TRY RESTART*** AND CLRPA ***TRY RESTART*** STA B,I ***TRY RESTART*** LDA TEMP2,I ***TRY RESTART*** JSB $ABRT ***TRY RESTART*** ISZ TEMP2 JMP RSLOP ***TRY RESTART*** RSDON NOP ***TRY RESTART*** JSB $SCLK CLA ***TRY RESTART*** STA FLG ***TRY RESTART*** STA SKEDD ***TRY RESTART*** STA OPATN ***TRY RESTART*** INA ***TRY RESTART*** STA $LIST ***TRY RESTART*** JMP $TYPE ***TRY RESTART*** * * SKEDD EQU 1711B ***TRY RESTART*** OPATN EQU 1734B ***TRY RESTART*** CLRPA OCT 6400 ***TRY RESTART*** KEEP ONLY RM,RE,RN C140K OCT 37777 * 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 WORK EQU $WORK 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 B77 OCT 77 B377 OCT 377 * ZERO REP 5 NOP DEF0 DEF ZERO 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 * 0 = ID SEGMENT NAME FOLLOWED BY 5 OPTIONAL * PARAMETERS TO GO INTO TEMPORARY AREA OF ID SEG. * 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 * 6 = ID SEG ADD FOLLOWED BY CONTENTS TO BE PUT * INTO "B-REG @ SUSP" WORD OF ID SEG. * 7 = ID SEG NAME FOLLOWED BY 5 PARAMETERS TO GO * INTO ID'S TEMPORARY AREA. * * * ADDRESS * KEYWORD, ID SEGMENT, OR * PROGRAM NAME ADDRESS AS SPECIFIED BY CODE * MUST NOT BE SUPPLIED FOR * ADDRESS CODES 3 AND 4. * 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 CPA D2 DOES B POINT TO AN ASCII NAME? JMP DL02 YES, SO GO SEE IF PROGRAM EXISTS. CPA D6 JMP DL06 * STB RETRN B-REG MUST BE A RETURN ADDRESS, SO SAVE. ISZ $LIST BUMP POINTER TO EITHER PROG.NAME OR ADD. LDB $LIST,I GET THE ID ADD. OR PROG.NAME ADDRESS. SZA,RSS IF ADDRESS = 0 THEN ID ADDRESS. JMP DL00 IF NON ZERO, THEN PROCESS AS ADDRESS * JSB $TNAM OF PROGRAM NAME. GO GET ID ADDRESS. SEZ IF PROGRAM DOES NOT JMP NPRG EXIST, THEN TELL FOLKS. * DL00 JSB DORM? SETUP THE $LIST PRAMS & SEE IF DORMANT. SZA IS THE PROGRAM DORMANT? JMP L0075 NO, GO TELL CALLER TO FORGET IT. * * THE FOLLOWING ROUTINE IS USED FOR ADDRESS CODES 0 AND 7 * TO STUFF PARAMETERS INTO THE PROGRAM'S ID SEGMENT. CODES * 0 AND 7 ARE PROVIDED FOR DRIVERS WHICH WISH TO SCHEDULE * PROGRAMS. * * ASSUMPTIONS * 1) AT LEAST ONE PARAMETER MUST BE SUPPLIED(I.E. ONE DEF). * 2) THE RETURN ADDRESS MUST END THE PARAMETERLIST. * 3) 5 PARAMETERS ARE THE MAXIMUM. * 4) ABSOLUTELY NO ERROR CHECKING IS DONE. * ISZ $LIST BUMP $LIST TO POINT TO FIRST PARAMETER. LDB RETRN USE RETURN ADDRESS CMB,INB TO DETERMINE HOW MANY ADB $LIST PARAMETERS TO PASS. STB DM5 SAVE TO FAKE OUT SUBROUTINE *PRAM*. * LDA WORK SET A-REG TO ID ADDRESS. LDB $LIST SET B-REG TO PARAMETER'S ADDRESS. ADB SIGN SET SIGN BIT OF B-REG. JSB $PRAM GO STUFF THE ID ADDRESS. * LDA DMM5 RESET -5 CONSTANT STA DM5 TO MINUS 5. CCA SET UP THE RETURN ADA RETRN ADDRESS FOR $LIST'S STA $LIST REURN. JMP L0290 NOW GO SCHEDULE THE PROGRAM. * DL06 ISZ $LIST BUMP TO FUTURE B-REG @ SUSP. LDA $LIST,I SET A-REG TO "B-REG @ SUSP". DL062 STA TEMPX AND SAVE TEMPORRIALLY. JSB DORM? SET UP LIST PRAMS & CHECK FOR DORMANT. SZA IF PROGRAM IS DORMANT, JMP L0075 THEN TELL CALLER TO FORGET IT. LDB WORK PUT "B-REG @ SUSP" ADB D10 VALUE INTO THE LDA TEMPX PROPER ID STA B,I SEGMENT JMP L0290 WORD.GO SCHEDULE. * DL02 JSB $TNAM NOW ITS IN B SEZ,RSS SKIP IF NOT FOUND OR SHORT ID SEG. JMP L0021 PROG FOUND, SO GO PROCESS * NPRG 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 * L0060 LDB WORK SET B-REG TO ID ADDRESS. * L0021 JSB DORM? GET CURRENT PROGRAM 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 RETRN NOP DMM5 DEC -5 TEMPX NOP SIGN OCT 100000 SKP * ************************************************************ * * THE DORM? SUBROUTINE IS CALLED BY THE $LIST PROCESSOR * FOR ALL CALLS. IT'S PRIMARY PURPOSE IN LIFE IS TO SET * UP WORK, WPRIO, WSTAT AND L0090. IN ADDITION, IT RETURNS * L0090, THE PROGRAM'S CURRENT STATUS, IN THE A REGISTER. * $LIST FUNCTION CODES OF 0, 6 AND 7(THE DRIVER $LIST CALLS) * USE THIS SUBROUTINE TO SEE IF THE PROGRAM IS DORMANT. * * CALLING SEQUENCE: * LDB ID-ADDRESS * JSB DORM? * * RETURN: * A-REG = CURRENT STATUS(BITS 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 AND KEEP ONLY LOWER STA L0090 STATUS BITS. JMP DORM?,I RETURN TO USER. 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 IF I-O SUSP., MERGE CURR STATUS, SET NP JMP L0375 IF DOER IS NOT CURRENT PROG * L0115 LDA $WORK CLEAR ID SEG TEMP AND SET B LDB DEF0 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 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 ID ADDRESS OF PROG L0015 ISZ $LIST STEP TO RETURN ADDRESS JMP $LIST,I LOOK MA! NO LABEL! 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 "R" AND "D" (BITS 7,6) L0375 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 SPC 1