ASMB,R,L,C ** RTE-M I MULTI-PROGRAM SCHEDULING MODULE ** HED ** RTE-M I MULTI-PROGRAM SCHEDULING MODULE ** * * NAME : $MMP * SOURCE: 92064-18018 * RELOC: 92064-16006 * PROGMR: E.J.W.,J.U.F. * * **************************************************************** * * (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 $MMP,0 92064-16006 REV.1940 780716 * ENT $SABR,$MPT1,$MPT4,$MPT5,$MPT7 EXT $TREM,$WORK,$LIST,$XEQ,$WATR,$PRAM EXT $TIMR,$TNAM,$ERAB,$IOCL,$ABRT * 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 $SABR * * 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. * $SABR NOP STB TEMPH SAVE THE ID ADDRESS ADB D16 GET ADDR OF 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'S WAITING FOR SON JMP SABT2 GO CLEAR THE SON'S 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 $SABR,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 $SABR,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 D12 DEC 12 D14 DEC 14 SPC 1 * MEMORY PROTECT VIOLATION SCHEDULER PREPROCESSORS ******************************************************************* * THE $MPT1 THRU $MPT7 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) ******************************************************************* SPC 3 * * DORMANT REQUEST - PROGRAM HAS RUN TO COMPLETION * $MPT1 JSB GETID GET THE ID-SEGMENT ADDRESS OF AFFECTED STB P2 PROG - SAVE ID ADDRESS FOR PRAM MOVE CPB XEQT IF CURRENT PGM. SKIP JMP MPT1A FATHER CHECKS * ADB D20 CHECK FOR FATHER KILLING SON CCA ADA B,I AND B377 STEP TO FATHER PTR ADA KEYWD ADDRESS OF FATHER'S ID IN A LDA A,I CPA XEQT CURRENT PROGRAM? RSS YES SKIP JMP ESC04 NO GO FLUSH * LDB $WORK RESTORE THE ID-SEGMENT ADDRESS TO B * MPT1A LDA RQRTN UPDATE RETURN (B)= ID ADDR STA XSUSP,I CLA SET A TO ZERO IN CASE LDA RQP3,I PRAMETER NOT SUPPLIED CMA,SZA,RSS (-1) SERIALLY REUSABLE? JMP MPT1E YES, GO DO IT INA,SZA,RSS JMP MPT1B (0) STANDARD TERMINATION CALL. * INA,SZA,RSS JMP MPT1C (1) SAVE RESOURCES * INA,SZA,RSS JMP M0240 (2) SOFT ABORT * INA,SZA,RSS (3) HARD ABORT (LAST CHANCE) JMP M0250 WOW THAT WAS CLOSE! * LDB D2 JMP ESCXX GO ABORT HIM * M0240 JSB $SABR DO SOFT ABORT JMP $XEQ AND GO TO DISPATCHER * M0250 LDA WSTAT,I DO HARD ABORT 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 JMP $XEQ AND GO TO DISPATCHER * MPT1C LDA WSTAT,I B=WORK, SET 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 JMP MPT1F GO FINISH PROCESSING * MPT1D JSB $WATR FIND WAITERS LDB XEQT MPT1B JSB TERM CALL TERMINATION ROUTINE MPT1F 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 $PRAM TRANSFER THE PRAMETERS JMP $XEQ GO TO THE DISPATCHER SPC 1 DM3 DEC -3 TEMPH NOP P2 NOP SPC 3 * 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 TERM * * ON RETURN THE FATHER POINTER (IF ANY) IS IN POP. * AND IF HE WAS WAITING E WILL BE SET ELSE E=0. * TERM NOP JSB $LIST PUT PGM. IN DORMANT OCT 400 LIST LDB $WORK GET ID SEG 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 * * D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D9 DEC 9 D10 DEC 10 D15 DEC 15 D16 DEC 16 D20 DEC 20 DM4 DEC -4 DM5 DEC -5 DM7 DEC -7 SIGN OCT 100000 B200 OCT 200 B377 OCT 377 B7777 OCT 7777 TMP NOP WSTAT NOP B7400 OCT 7400 DEFR4 DEF RQP4,I SPC 2 SPC 3 * PRAMO PASSES PRAMETERS FORM RQP3,4,5,6,AND 7 TO * THE ID-SEGMENT POINTED TO BY WORK. * *** ONLY CALLED BY IDCKK *** * * 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 $PRAM GO MOVE THE PRAMS. JMP PRAMO,I RETURN. * * SCHEDULE REQUEST WITH WAIT * $MPT4 JSB IDCKK CHECK IF PROGRAM DORMANT LDB XEQT GET THE ADDRESS ADB D20 OF THE BATCH FLAG LDB B,I AND SET IT RBL,SLB,ERB INTO THE RAL,ERA 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 RSS * * SCHEDULE REQUEST WITHOUT WAIT * $MPT5 JSB IDCKK CHECK IF PROGRAM DORMANT LDB TMP GET SAVED A-REG AT SCHED QUEUED CALL LDA RQP1 AND RESTORE BEFORE RETURN AND D16 ONLY IF QUEUED CALL SZA STB XA,I * MEM15 LDA RQRTN STA XSUSP,I POINT JMP $XEQ * * ESC01 CLB,INB,RSS ILLEGAL PARAMETER COUNT ESC03 LDB D3 RSS ESC04 LDB D4 ESCXX LDA ASY OUTPUT SC ERROR CODE JMP $ERAB CALL SYSTEM ERROR MESSAGE ROUTINE * ESC05 LDB D5 NO SUCH PROG ERROR CODE JMP ESCXX * ESC02 LDB D2 .TOO FEW PARAMETERS ? JMP ESCXX SPC 1 B40K OCT 40000 B77 OCT 77 D28 DEC 28 SKP * * 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 LDA RQP2,I GET THE PRAMETER SZA IF ZERO OR NOT SUPPLIED SKIP LDB RQP2 GET ADDRESS OF NAME JSB $TNAM GO SEARCH FOR IT LDA $WORK SET UP ADDR OF STATUS WORD ADA D15 STA WSTAT 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 * *** CALLED BY IDCKK, MTDB, CLASS I/O *** * * CALLING SEQUENCE * LDB ID-SEGMENT ADDRESS * JSB $IDNO * RETURN ID NUMBER IN B * $IDNO NOP 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 JMP $IDNO,I RETURN SKP * * SCHEDULE BY TIME * $MPT7 LDA DM7 CHECK PARAM COUNT FOR 7 ADA RQCNT SZA,RSS JMP MPT7A 7 OK ADA D3 CHECK FOR 4 PARAMETERS SZA JMP ESC01 ERROR IN PARAM COUNT LDA RQP5,I 4 PARAM OK - CHECK FOR NEGATIVE SSA,RSS INITIAL OFFSET JMP ESC02 NOT NEGATIVE AN ERROR * MPT7A LDA 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 THE ID-SEGMENT ADDRESS TO B LDA RQRTN PUT RETURN STA XSUSP,I ADDRESS IN THE ID SEG. JMP $TIMR GO CONTINUE REQUEST IN TIME ROUTINE SPC 1 * CHECK IF PROGRAM DORMANT AND THEN SCHEDULE * *** CALLED BY $MPT4, $MPT5 *** * IDCKK NOP LDB RQP2 GET ID SEGMENT ADDRESS JSB $TNAM SEZ JMP ESC05 NO SUCH PROGRAM ERROR * LDA XA,I SAVE A-REG IN CASE OF STA TMP QUEUED CALL * LDB XEQT COMPUTE THE ID NUMBER JSB $IDNO AND STB GETID SAVE IT LDA $WORK ALSO COMPUTE THE ADA D15 STA WSTAT STATUS WORD ADDR ADA D5 AND FATHER WORD ADDR 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 * IDCK3 JSB PRAMO PASS THE PRAMETERS IF ANY LDB XEQT INDEX TO WORD 29 OF ADB D28 FATHER'S ID SEG LDA B,I AND B77 GET CONSOLE LU IOR SIGN AND SET NEW-RUN FLAG LDB $WORK ADB D28 STORE INTO WORD 29 OF STA B,I SON'S ID SEG JSB $LIST THEN - SCHEDULE OCT 301 STA XA,I SHOW THAT IT WAS DONE LDA $WORK SET UP THE WAIT POINTER STA XTEMP,I INCASE IT IS A 9 REQUEST LDA $IDNO,I GET THE CURRENT FLAG BITS 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 IDCK3+1 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. * *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 LDA TMP RESTORE A-REG FOR QUEUED CALL STA XA,I 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 B1000 OCT 1000 HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * 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 * * DEFINITION OF SYSTEM LISTS (QUEUES) * * * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XTEMP EQU .+41 'TEMPORARY (5-WORDS) XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION * * SYSTEM MODULE COMMUNICATION FLAGS * * * * DEFINITION OF MEMORY ALLOCATION BASES * * * A EQU 0B LOCATION OF A REGISTER B EQU 1B LOCATION OF B REGISTER ORG * PROGRAM LENGTH END