X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/d693caac75dd25e668e43e85c29205bfc8dea06e..571bd6213fa4aed12085cb3172d1615ce0209b98:/src/clock1.mac diff --git a/src/clock1.mac b/src/clock1.mac index 7c7bcdf..92a704e 100644 --- a/src/clock1.mac +++ b/src/clock1.mac @@ -1,5 +1,5 @@ -TITLE CLOCK1 - CLOCK, CONTEXT SWITCHING, AND JOB STARTING AND STOP ROUTINES - V412 -SUBTTL APRINT TH/TH/CHW TS 20 MAY 69 +TITLE CLOCK1 - CLOCK, CONTEXT SWITCHING, AND JOB STARTUP AND STOP ROUTINES - V412 +SUBTTL APRINT TH/TH/CHW TS 20 MAY 69 XP VCLOCK1,412 ; PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP @@ -18,7 +18,7 @@ EXTERNAL JOBDAT,JOBTPC,JOBCNI,JOBAPR,APRERR,SCHEDF EXTERNAL APRILM,COMMAN,CONMES,DEVCHK,DEVSRC,ERROR,INLMES EXTERNAL RELEA9,CRSHWD,CRASHX -INTERNAL FTTTYSER ;THIS ROUTINE MAY BE ASSEMBLED TO WORD EITHER +INTERNAL FTTTYSER ;THIS ROUTINE MAY BE ASSEMBLED TO WORK WITH EITHER ; THE OLD SCNSER OR THE NEW TTYSER. @@ -31,11 +31,10 @@ INTERNAL UUO1 IFE FTCHECK+FTMONP,< INTERN CLOCK,DAMESS EXTERN CIPWTM -APRCON: 231000 ;MONITOR ENABLED CPU FLAGS -APRIN1: 0 ;USER ENABLED CPU FLAGS -CLKS17: 0 ;PLACE TO SAVE AC17 ON CLOCK INTERRUPT -DAMESS: ASCIZ /-JAN-/ - +APRCON: 231000 ;MONITOR ENABLED CPU FLAGS +APRIN1: 0 ;USER ENABLED CPU FLAGS +CLKS17: 0 ;PLACE TO SAVE AC17 ON CLOCK INTERRUPT +DAMESS: ASCIZ /-JAN-/ CLOCK: POINT 36,CIPWTM,35 ;BYTE POINTER TO CLOCK REQ QUEUE > INTERN APRINT @@ -43,11 +42,11 @@ CLOCK: POINT 36,CIPWTM,35 ;BYTE POINTER TO CLOCK REQ QUEUE APRINT: JRST APRPAR ;ALWAYS CHECK APR AND PI DEVICES JRST . ;CHECK OTHER DEVICES -APRPCL: CONO PI,240000 ;TURN OFF MEM PAR, ERR, AND +APRPCL: CONO PI,240000 ;TURN OFF MEM PAR. ERR, AND ; ENABLE FOR MEM PAR AND TRY AGAIN ; (DO NOT TURN OFF POWR FAIL AS THAT PERMANENTLY ; DISABLES POWR FAIL INTERRUPT) -APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? +APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? HALT APRPCL ;YES, HALT MACHINE, CLEAR FLAGS AND TRY AGAIN ; ON CONTINUE CONSO APR,@APRCON ;INTERRUPT FOR APR? @@ -55,8 +54,8 @@ APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? ; RH MODIFIED EACH TIME USER RUNS IN CASE HE IS ; ENABLED FOR PC CHANGE OR AR OVF JRST APRINT+1 ;NO,CHECK OTHER DEVICES ON THIS PI CHANNEL - SKIPE CRSHWD ;IS LOC, 30 CLOBBERED? - JRST CRASHX ;YES ~ GO SAVE AC'S & STATE OF ALL DEVS, + SKIPE CRSHWD ;IS LOC. 30 CLOBBERED? + JRST CRASHX ;YES - GO SAVE AC'S & STATE OF ALL DEVS. CONSO APR,001000 ;YES, IS IT CLOCK? JRST APRER ;NO, GO CHECK ERROR FLAGS AOS TIME ;YES, INCREMENT TIME OF DAY @@ -66,7 +65,7 @@ APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? CONO PI,REQCLK ;REQUEST INTERRUPT ON CLK CHANNEL CONSZ APR,@APRIN1 ;IS USER ENABLE FOR ANY FLAGS(INCLUDING CLOCK) ; RH ALSO MODIFIED EACH TIME A USER RUNS - JRST APRER ;YES, GO PROCESS TRAP + JRST APRER1 ;YES, GO PROCESS TRAP CONO APR,1000+APRCHN ;NO, CLEAR ONLY THE CLOCK FLAG JEN @APRCHL ;DISMISS INTERRUPT @@ -76,7 +75,7 @@ APRER1: CONO APR,1000+APRCHN ;NOW CLEAR CLOCK FLAG EXCH TAC,APRCHL ;SAVE TAC, GET PC TLNE TAC,USRMOD ;IS PC FROM USER MODE? JRST APRER4 ;YES, GO TRAP TO HIM - JRST APRER2 ;NO. GO CHECK IN CASE ALSO A SERIOUS ERROR + JRST APRER2 ;NO, GO CHECK IN CASE ALSO A SERIOUS ERROR ;OTHER APR INTERRUPTS BESIDES CLOCK APRER: EXCH TAC,APRCHL ;SAVE TAC, GET PC @@ -94,27 +93,26 @@ APRER4: EXCH JDAT,JOBDAT ;YES, SAVE JDAT, GET CURRENT JOB DATA AREA ADR. HRRM TAC,APRCON ;PD OVF,ILM,NXM, AND CLOCK HRR TAC,JOBAPR(JDAT) ;GET USER LOC TO TRAP TO EXCH JDAT,JOBDAT ;RESTORE JDAT,JOBDAT - CONO APR,440+APRCHN ;DISBALE FOV, AROVF IN CASE ON + CONO APR,440+APRCHN ;DISABLE FOV, AROVF IN CASE ON ;SO USER MUST REENABLE WITH SETAPR UUO - APRER3: TLZ TAC,440000 ;CLEAR FOV (PC CHANGE ON PDP-6) AND AR OVF FLAGS ; SO INTERRUPT MAY BE DISMISSED EXCH TAC,APRCHL ;RESTORE TAC & APRCHL CONO APR,430110+APRCHN ;CLEAR ALL ERROR FLAGS WHICH CAN CAUSE INTERRUPTS ; EXCEPT CLOCK FLAG(ELSE LOSE TIME OF DAY) JEN @APRCHL ;DISMISS INTERRUPT - APRER2: CONSO APR,NXM!ILM!POV! ;DOES EXEC CARE? - JRST APRER3 ;NO. IGNORE EXEC OVERFLOW (MUST BE FOV OR AROVF + APRER2: CONSO APR,NXM!ILM!POV ;DOES EXEC CARE? + JRST APRER3 ;NO. IGNORE EXEC OVERFLOW (MUST BE FOV OR AROVF) MOVEM TAC,APRPC ;STORE ERROR PC FOR CLK CHANNEL CONI APR,APRERR ;STORE ERROR FLAGS ; (ALSO USED AS ERROR FLAG) SETOM CLKFLG ;SET FLAG FOR CLK INTERRUPT SETOM SCHEDF ;FLAG THAT RESCHEDULING IS NEEDED - ; (EVEN THROUGH PC MAY BE IN EXEC MODE) + ; (EVEN THOUGH PC MAY BE IN EXEC MODE) CONO PI,REQCLK ;REQUEST INTERRUPT IN CLK CHANNEL CONSZ APR,ILM ;WAS ERROR ILLEGAL MEMORY(FROM USER)? HRRI TAC,0 ;YES,CLEAR RH OF PC,SO A SECOND ILM INTERRUPT - ; WILL NOT OCCUR IF THIS IS A WILD(AND A PDP-10) + ; WILL NOT OCCUR IF THIS IS A WILD PC(AND A PDP-10) IFN FTHALT,< CONSZ PI,003400 ;ARE ANY PI'S IN PROGRESS OF LOWER PRIORITY THAN APR? ; (PDP-10 BITS ONLY) @@ -127,10 +125,10 @@ IFN FTHALT,< ;THIS ROUTINE RUNS ON THE LOWEST PRIORITY PI CHANNEL AND AT UUO LEVEL ;TO CAUSE AN INTERRUPT ON CLK CHANNEL: ; SETOM CLKFLG ;FLAG THAT INTERRUPT HAS BEEN REQUESTED -; CONO PI,CLKREQ ;REQUEST PI INTERRUPT ON LOWEST PI CHANNEL +; CONO PI,CLKREQ ;REQUEST PI INTERUPT ON LOWEST PI CHANNEL ;THE FOLLOWING OTHER FLAGS MUST ALSO BE SET ;APRERR-APR DETECTED ERROR IN CURRENT JOB -;SCHEDF-RESCHEDULING MUST TAKE PLACE(EVEN THROUGH PC IN EXEC MODE) +;SCHEDF-RESCHEDULING MUST TAKE PLACE(EVEN THOUGH PC IN EXEC MODE) ;TIMEF-APR CLOCK HAS TICKED ON HIGH PRIORITY CHANNEL ;SEE APRSER AND RUNCSS TO SEE HOW THIS ROUTINE IS CALLED @@ -141,11 +139,10 @@ IFN FTHALT,< ;THEN CALLS SCHEDULER ;IF THE CURRENT JOB IS IN EXEC MODE THE ABOVE 4 TASKS ARE ;DELAYED UNTIL THE CURRENT JOB ENTERS A STOPPABLE STATE: I.E., UNTIL - ; 1. JOB STARTS TO WAIT FOR A BUSY SHARABLE DEVICE -; 2. JOB STARTS TO WAIT FOR A IO TO COMPLETE +; 2. JOB STARTS TO WAIT FOR IO TO COMPLETE ; 3. CONTROL ABOUT TO RETURN TO USER MODE -;THEN CLK SERVICE IS ENTERED AT THE UU0 LEVEL +;THEN CLK SERVICE IS ENTERED AT THE UUO LEVEL STOR=DAT T=TAC @@ -160,7 +157,7 @@ JA=JDAT ; CONO PI,PIOFF ; IDPB AC,CLOCK ;STORE CLOCK REQUEST IN QUEUE ; CONO PI,PION ;TURN PI BACK ON -;C(AC)=XWD ADDRESS,NO. OF CLOCK TICKS*DATA*10000 +;C(AC)=XWD ADDRESS,NO. OF CLOCK TICKS+DATA*10000 ;WHERE DATA IS 6 BITS OF INFO NEEDED WHEN TIME RUNS OUT ;CLK SERVICE WILL PUSHJ PDP,ADR ;WHEN TIME RUNS OUT WITH DATA RIGHT JUSTIFIED IN AC TAC @@ -184,10 +181,12 @@ WSCHED: POP PDP,USRPC ;SAVE PC IN PROTECTED PART OF SYSTEM DATA MOVEI AC3,JOBDAC(JDAT) ;SAVE ACS 0-16 IN DUMP ACS BLT AC3,JOBD16(JDAT) ;IN CURRENT JOB DATA AREA MOVEI PDP,NULPDL ;NULL JOB PD LIST - HRLI PDP,MJOBP1 ; OTHERWISE GET PD OUF + HRLI PDP,MJOBP1 ;USED TO CALL SCHEDULER AND COMMAND DECODER + ; OTHERWISE GET PD OUF JRST RSCHED ;GO RESCHEDULE + ;HERE AT UUO LEVEL WHEN CURRENT JOB RETURNS TO USER MODE ;FROM A UUO CALL AND EITHER: ; 1. CURRENT JOB TYPED CONTROL C WHILE IN EXEC MODE @@ -223,7 +222,6 @@ CLKINT: SKIPN CLKFLG ;CLK INTERRUPT REQUEST? JEN @CLKCHL SAVPC: MOVEM 17,USRPC ;SAVE PC IN PROTECTED PART OF SYSTEM DATA - ; STORAGE FOR CURRENT JOB CLKERR: SKIPN 17,JOBDAT ;CURRENT JOB DATA AREA, IS THERE ONE? MOVEI 17,NULDAT ;NO, MUST BE NULL JOB OR CORE 0 @@ -232,12 +230,12 @@ CLKERR: SKIPN 17,JOBDAT ;CURRENT JOB DATA AREA, IS THERE ONE? MOVEI 16,JOBDAC(17) ;SOURCE=0,DESTINATION=DUMP AC 0 BLT 16,JOBD15(17) ;SAVE ACS 0-15 JUST BELOW AC 16 MOVE TAC,CLKS17 ;NOW SAVE 17 IN JOB DATA AREA - MOVEM TAC,JOBD17(17) ;ALONE WITH OTHER ACS + MOVEM TAC,JOBD17(17) ;ALONG WITH OTHER ACS MOVEI PDP,NULPDL ;SET UP PUSH DOWN LIST IN NULL JOB DATA ; AREA IN LOWER CORE HRLI PDP,MJOBP1 ;-LENGTH+1(LEAVE ROOM FOR UUO PC) SKIPE TAC,APRERR ;IT THIS AN ERROR INTERRUPT? - PUSHJ PDP,APRILM ;YES, GO PROCESS ERROR, APRILM WILL CLEAR APRERR + PUSHJ PDP,APRILM ;YES, GO PROCESS ERROR,APRILM WILL CLEAR APRERR ; FLAG IMMEDIATELY EXTERNAL COMCNT,NXTJOB,HNGTIM,POTLST,LSTWRD EXTERNAL TIMEF,APRERR,CLKFLG,SCHEDF,JOB,PMONTB @@ -256,8 +254,8 @@ IFN FTTIME,< JRST INCTIM ;NO-PROCEED NORMALLY AOS LSTWRD ;YES-INCREMENT LOST TIME COUNT SETZM POTLST ;AND CLEAR LOST TICK INDICATION -INCTIM: AOS RTIME(ITEM) ;INCR, CURRENT JOB INCREMENTAL RUN TIME - AOS TTIME(ITEM) ;INCR, CURRENT JOB TOTAL RUN TIME +INCTIM: AOS RTIME(ITEM) ;INCR. CURRENT JOB INCREMENTAL RUN TIME + AOS TTIME(ITEM) ;INCR. CURRENT JOB TOTAL RUN TIME > IFN FTKCT,< EXTERN USRREL,JBTKCT @@ -265,7 +263,6 @@ IFN FTKCT,< ADDI TAC,1 ;MAKE IT NO. OF 1K BLOCKS ADDM TAC,JBTKCT(ITEM) ;ADD IN ACCUMULATED CORE RUNNING TIME PRODUCT ; (KILO-CORE TICKS) - IFN FT2REL,< EXTERN CHGHGH PUSHJ PDP,CHGHGH ;CHARGE USER FOR HIGH SEGMENT IF HE HAS ONE @@ -276,7 +273,7 @@ IFN FT2REL,< MOVE TAC1,TIME CAMGE TAC1,MIDNIT ;GONE PAST MIDNITE? JRST CIP2 ;NO -CIP3: SETZB IOS,TIME ;YES, RESET TIME OF DAY +CIP3: SETZB IOS,TIME ;YES. RESET TIME OF DAY AOS TAC,THSDAT ;UPDATE DAY IDIVI TAC,^D31 DIVI IOS,^D12 ;NO. @@ -295,7 +292,7 @@ CIP4: CAIN STOR,CIPWTM1 ;END YET? MOVE TAC, @CLOCK SOS CLOCK MOVEM TAC, (STOR) - CONI PI,PION + CONO PI,PION LDB TAC, [POINT 6, TAC1, 23] ;GET 6 BIT DATA ITEM MOVSS TAC1 ;SETUP DISPATCH ADDRESS PUSH PDP, STOR ;SAVE ONLY VALUABLE AC @@ -303,34 +300,35 @@ CIP4: CAIN STOR,CIPWTM1 ;END YET? POP PDP, STOR SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS -CIP5: SOSG HNGTIM ;DECREMENT HUNG ID DEVICE - PUSHJ PDP,DEVCHK ;GO CHECK FOR HUNG ID DEVICES +CIP5: SOSG HNGTIM ;DECREMENT HUNG IO DEVICE + PUSHJ PDP,DEVCHK ;GO CHECK FOR HUNG IO DEVICES SKIPE COMCNT ;ANY COMMANDS TO PROCESS? PUSHJ PDP,COMMAND ;YES, CALL COMMAND DECODER CIP6: PUSHJ PDP,NXTJOB ;CALL SCHEDULER SETZM CLKFLG ;CLEAR CLK INTERRUPT FLAG ; SET ON ALL FORCED CLK INTERRUPTS - SETZM TIMEF ;CLEAR TIME0 (1 JIFFY) INTERRUPT FLAG, + SETZM TIMEF ;CLEAR TIMED (1 JIFFY) INTERRUPT FLAG. SETZM SCHEDF ;CLEAR FORCED SCHEDULING FLAG CAMN ITEM,JOB ;IS NEXT JOB SAME AS LAST ONE? JRST CIP8 ;YES, JUST RESTORE ACS AND DISMISS - ;DIFFERENT JOB. SAVE SOFTWARE STATE(HARDWARE ALREADY SAVED) + ;DIFFERENT JOB, SAVE SOFTWARE STATE(HARDWARE ALREADY SAVED) EXTERNAL JOB,JOBDAT,JOBPRT,USRPRT,USRHCU,JOBJDA SKIPN JA,JOBDAT ;NULL JOB OR CORE 0 ON OLD JOB? - JRST CIP7 ;YES, DO NOT SAVE SOFTWARE STATE - MOVEI T,JOBPRT(JA) ;DEST,#FIRST LOC PROTECTED FROM USER - HRLI T,USRPRT ;SOUR,#SYSTEM DATA STORAGE FOR CURRETN JOB + JRST CIP7 ;YES, DO NO SAVE SOFTWARE STATE + MOVEI T,JOBPRT(JA) ;DEST.=FIRST LOC PROTECTED FROM USER + HRLI T,USRPRT ;SOUR.=SYSTEM DATA STORAGE FOR CURRETN JOB SKIPL T1,USRHCU ;MOVE NO. OF OLD USER IO CHAN. IN USE CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT ; CLOBBER IF ADDRESS CHECKING MISSES) MOVEI T1,0 ;MOVE ONLY CHN 0 IF NEG, OR GR 17 ; SAVGET SETS LH NEGATIVE DURING IO AS A FLAG ; SINCE IT DOES IO INTO AND OUT OF - ; CHANNEL LOCATIONS (JOBJDA+1..,JOBJDA+17), + ; CHANNEL LOCATIONS (JOBJDA+1...JOBJDA+17). ADD JA,T1 ;RELOCATE TO USER AREA - BLT T,JOBJDA(JA) ; STOP WITH USER CHANNEL 0-1+C(USRHCU) + BLT T,JOBJDA(JA) ;MOVE TO USER JOB DATA AREA + ; STOP WITH USER CHANNEL 0-1+C(USRHCU) ;RESTORE SOFTWARE STATE OF NEW JOB,THEN HARDWARE STATE INTERNAL NULJOB,NULADR @@ -347,14 +345,13 @@ IFN FTHALT,< SKIPN JA ;DOES JOB HAVE CORE ASSIGNED? HALT . ;NO -ELSE CLOBBER MONITOR > - MOVEI T,USRPRT ;NO, DEST,#PROTECTED AREA IN MONITOR - HRLI T,JOBPRT(JA) ;SOURCE#FIRST PROTECT LOC. IN JB DATA AREA + MOVEI T,USRPRT ;NO, DEST.=PROTECTED AREA IN MONITOR + HRLI T,JOBPRT(JA) ;SOURCE=FIRST PROTECTED LOC. IN JB DATA AREA SKIPL T1,JOBHCU(JA) ;MOVE NO. OF USER IO CHAN. IN USE - CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT CLOBBER ; IF ADRRESS CHECKING MISSES MOVEI T1,0 ;MOVEJUST CHAN 0 IF NEG. OR GREATER THAN 17 - ; SAVEGET SETS NUG,DURING IO + ; SAVEGET SETS NEG.DURING IO BLT T,USRJDA(T1) ;AND MOVE INTO MONITOR ;RESTORE HARDWARE STATE OF CURRENT JOB @@ -367,18 +364,18 @@ CIP8: SKIPN JA,JBTDAT(ITEM) ;JOB DATA AREA(IS THERE ONE?) ; (ON CLK PI OR HIGHER) JRST CLKERR ;YES, GO PROCESS ERROR SKIPN JOB ;IS THIS JOB THE NULL JOB? - SKIPN NULERR ;YES, HAS AN ERROR OCCURED WHILE NULL JOB + SKIPN NULERR ;YES, HAS AN ERROR OCCURRED WHILE NULL JOB ; WAS RUNNING? IF YES, RESTORE ACS ; ILL UUO LOSED ACS JEN @USRPC ;DISMISS CHANNEL(IF INTERRUPT IN PROGRESS) ;THE NULL JOB -;RUNS IN USER MODE WITH PC=1 AND COUNTS AND AC 0 +;RUNS IN USER MODE WITH PC=1 AND COUNTS IN AC 0 EXTERNAL APRNUL,TIME,THSDAT,MIDNIT,NULERR NULJB: -IFN FTCHECK, ; IF THIS IS THE LARGEST JOB IN USE,FIND NEXT ; HIGHEST AND SET HIGHJB CAMGE ITEM,HIGHJB ;IS THIS THE BIGGEST JOB NUMBER ASSIGNED? - JRST ESTOP ;NO, LEAVE HOLD - MOVSI TAC1,JNA ;YES,JOB NUMBER ASSGINED BIT + JRST ESTOP ;NO, LEAVE HOLE + MOVSI TAC1,JNA ;YES,JOB NUMBER ASSIGNED BIT HRRZ TAC,ITEM ;SCAN DOWNWARD TDNN TAC1,JBTSTS(TAC) ;IS JNA BIT SET FOR THIS JOB? - SOJG TAC,-1 ;NO,KEEP LOOKING,FINISHED(TRUE IF THIS THE ONLY JOB + SOJG TAC,.-1 ;NO,KEEP LOOKING,FINISHED(TRUE IF THIS THE ONLY JOB MOVEM TAC,HIGHJB ;YES,STORE NEW HIGHEST JOB NUMBER ASSIGNED JRST ESTOP ;GO SET ERROR BIT ;ROUTINE TO STOP JOB, SET ERROR BIT AND PRINT MESSAGE -;THEM ADD ^TC +;THEN ADD ^C ;CALL: MOVEI TAC,ADR. OF MESSAGE ; PUSHJ PDP,PHOLD @@ -530,7 +528,7 @@ EXTERN PRJPRG PHOLD: PUSHJ PDP,CONMES ;MOVE MESSAGE TO TTY OUTPUT BUFFER ; FALL INTO HOLD -;ROUTINE TO STOP JOB, SET ERROR BIT. +;ROUTINE TO STOP JOB, SET ERROR BIT, ;AND ADD "^C INTERNAL HOLD,HOLD1 @@ -543,20 +541,21 @@ HOLD: PUSHJ PDP,INLMES ./ HOLD1: PUSHJ PDP,TTYSTC ;MAKE SURE TTY STAYS IN MONITOR MODE - ; AND START TTYP TYPING OUTMESSAGE + ; AND START TTY TYPING OUT MESSAGE ; FALL INTO ESTOP ;ROUTINE TO STOP USER AND FLAG AS ERROR STOP + INTERNAL ESTOP,ESTOP1 EXTERNAL JBTSTS,STUSER,STREQ,STAVAL EXTERNAL SCHEDF,JOB,CPOPJ ESTOP: JUMPE ITEM,CPOPJ ;IS THIS ERROR IN JOB 0? MOVSI TAC,JACCT ;NO, CLEAR ACCOUNTING BIT(IN CASE LOGGING - ANDCAM TAC,JBTSTS(ITEM) ;IN OR OUT0 SO USER CAN USE CONTROL C + ANDCAM TAC,JBTSTS(ITEM) ;IN OR OUT) SO USER CAN USE CONTROL C ; TO RECOVER -ESTOP1: MOVSI TAC,JERR ;SSET ERROR BIT IN JOB STATUS WORD +ESTOP1: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS WORD IORM TAC,JBTSTS(ITEM) ;SO JOB CAN NOT CONTINUE(CONT COM.) CAME ITEM,STUSER ;SYSTEM TAPE USER? JRST STOP1 ;NO @@ -564,33 +563,33 @@ ESTOP1: MOVSI TAC,JERR ;SSET ERROR BIT IN JOB STATUS WORD PUSHJ PDP,DEVSRC ;SYSTEM ERROR IF NOT FOUND JSP DAT,ERROR PUSHJ PDP,RELEA9 ;YES, RELEASE SYSTEM TAPE WITHOUT WAITING - ;ROUTINE TO STOP NY JOB FROM BEING SCHEDULED + ;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED ;CALL: ; MOVE ITEM, JOB NUMBER ; PUSHJ PDP, STOP1 ; EXIT ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER ;PRIORITY PI CHANNEL THAN CLK(LOWEST), OTHERWISE WHEN JOB IS RUNABLE ;CALLED FROM COMMAND DECODER WHEN C TYPED IN BY USER -;OR ON ANY ERROR MESSAGE(SFE PREVIOUS PAGE) +;OR ON ANY ERROR MESSAGE(SEE PREVIOUS PAGE) INTERNAL STOP1 EXTERNAL JBTSTS,PJBSTS,REQTAB,JOB,STUSER,MAXQ,AVALTB -STOP1: MOVSI TAC,RUN - CONO PI,PIOFF ;DONE AT INTERRUPT LEVEL HIGHER THEN DT LEVEL - CAME ITEM,STUSER ;IS THIS JOB CURRENTLY USING THE SYTEM TAPE? +STOP1: MOVSI TAC, RUN + CONO PI, PIOFF ;DONE AT INTERUPT LEVEL HIGHER THAN DT LEVEL + CAME ITEM,STUSER ;IS THIS JOB CURRENTLY USING THE SYSTEM TAPE? TDNN TAC,JBTSTS(ITEM) ;NO, IS RUN BIT OFF IN JOB STATUS WORD JRST STOP1A ;YES ANDCAM TAC,JBTSTS(ITEM) ;NO, SO CLEAR IT - CONO PI,PION + CONO PI, PION LDB TAC,PJBSTS ;GET JOB WAIT QUEUE CODE(IF ANY) CAIG TAC,MAXQ ;DOES STATE HAVE Q ? SOSL REQTAB(TAC) ;YES. REDUCE IT. JRST STOP1A ;NO SOSGE AVALTB(TAC) ;YES REDUCE COUNT SETZM AVALTB(TAC) ;CLEAR AVAL FLAG IF NO ONE WAITING -STOP1A: CONO PI,PION ;MAKE SURE PI ON - CAME ITEM, JOB ;NO. IS THIS JONB CURRENT USER +STOP1A: CONO PI, PION ;MAKE SURE PI ON + CAME ITEM, JOB ;NO, IS THIS JOB CURRENT USER INTERNAL FTSWAP @@ -600,8 +599,9 @@ IFE FTSWAP,< IFN FTSWAP,< JRST REQUE ;SET REQUE JOB FLAG > + SKIPL TAC,JBTSTS(ITEM) ;RUN FLAG OFF? - TLNN TAC,JERR ;YES, ERROR FLAG ON? + TLNN TAC,JERR ;YES. ERROR FLAG ON? JRST STOP2 ;NO SETOM SCHEDF ;YES, FORCE RESCHEDULING EVEN IF JOB IN EXEC MODE JRST STOP2 ;YES, MAKE CLK RESCHEDULE ANOTHER JOB @@ -610,7 +610,7 @@ IFN FTSWAP,< ;OR IS IN CORE AND HAS ACTIVE DEVICES. ;CALLED FROM COMMAND DECODER ;CALL: MOVE ITEM,JOB NO. - PUSHJ PDP,DLYCOM +; PUSHJ PDP,DLYCOM INTERNAL DLYCOM @@ -627,7 +627,8 @@ IFN FTSWAP,< > POPJ PDP, -;ROUTINE TO PUT JONB IN NO CORE QUEUE +;ROUTINE TO PUT JOB IN NO CORE QUEUE + INTERNAL FTSWAP IFN FTSWAP, MOVSI PDP,MJOBPD ;MINUS LENGTH OF SYSTEM PD LIST HRRI PDP,JOBPDL(JDAT) ;FIRST LOC.-1 OF PD LIST - PUSH PDP,TAC1 ;SAVE STOP ADDRESS + PUSH PDP,TAC1 ;SAVE STOP ADRRESS JRST (TAC) ;RETURN AND DO MONITOR JOB - ; WITH TT DDB,OUTPUT BYTE POINTER, AND JOB NO. + ; WITH TTY DDB,OUTPUT BYTE POINTER, AND JOB NO. ;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN ;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS ;CALLED ONLY WHEN JOB IN CORE AND AFTER JOB HAS BEEN @@ -693,34 +695,34 @@ EXTERNAL JOBPC,JOBDAC,JOBD17,TTYSET,JOBOPC,JOBPD1 USTART: MOVE TAC,JOBPC(JDAT) ;GET OLD PC TLNE TAC,USRMOD ;IS IT IN USER MODE TOO? JRST USTRT1 ;YES, DUMP ACS AND PC FLAGS ARE ALREADY HIS - - MOVEI TAC,JOBDAC(JDAT) ;NO. MOVE USERS(UUO) ACS TO DUMP ACS - HRL TAC,JDAT ;SOURCE=REL, 0,DEST,=JOBDAC IN JOB DATA AREA + MOVEI TAC,JOBDAC(JDAT) ;NO, MOVE USERS(UUO) ACS TO DUMP ACS + HRL TAC,JDAT ;SOURCE=REL. 0,DEST.=JOBDAC IN JOB DATA AREA BLT TAC,JOBD17(JDAT) ;MOVE ALL ACS MOVE TAC,JOBPD1(JDAT) ;UUO PC HAS LAST PC HRRI TAC,-1(TAC) ;SUBTRACT 1 FROM RIGHT HALF AND - ; PRESERVE LH PC FLAGS + ; PRESERVE LH PC FLAGS. ; (RH=0 ON HALT 0 OR FIRST START) USTRT1: MOVEM TAC,JOBOPC(JDAT) ;STORE OLD PC FOR USER TO LOOK AT HLL TAC1,TAC ;PRESERVE USER APR FLAGS TLO TAC1,USRMOD ;MAKE SURE NEW PC IN USER MODE TLZ TAC1,37 ;MAKE SURE NO INDIRECT BITS OR INDEX FIELD - + MSTART: MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC MOVSI TAC,JERR+WTMASK ANDCAM TAC,JBTSTS(ITEM) ;CLEAR ERROR AND WAIT STATUS BITS - ;SET TTY STATE TO INITAL COND. + JRST TTYSET ;SET TTY STATE TO INITIAL COND. ; TTYUSR OR TTYURC SHOULD BE CALLED ; TO INDICATE WHETHER TTY TO USER OR EXEC MODE ; AND THAT JOB IS TO RUN(RUN BIT =1) WHEN ; MONITOR COMMAND RESPONSE FINISHES. ; SEE SETRUN BELOW + ;ROUTINE TO SET JOB STATUS RUN BIT(RUN) ;CALLED BY SCANNER SERVICE WHEN TTY MONITOR COMMAND -;RESPONSE FINISHES, THIS ACTION IS ENABLED BY CALLING -;TTYUSR. OR TTYURC IN SCNSER -;CALL: MOVE ITEM,JOB NUMBER +;RESPONSE FINISHES. THIS ACTION IS ENABLED BY CALLING +;TTYUSR, OR TTYURC IN SCNSER +;CALL: MOVE ITEM,JOB NUMBER ; PUSHJ PDP,SETRUN INTERNAL SETRUN @@ -734,7 +736,7 @@ SETRUN: LDB TAC,PJBSTS ;GET JOB STATUS WAIT QUEUE CODE JRST SETR1 ;OTHERS WAITING? AOSG AVALTB(TAC) ;MAKE AVAILABLE SETOM AVALTB(TAC) ;FLAG AS JUST AVAILABLE, BECAUSE - ; NO JONB WAS USING DEVICE. SCHEDULER + ; NO JOB WAS USING DEVICE. SCHEDULER ; WILL SCAN THIS QUEUE SETR1: MOVSI TAC,RUN ;SET RUN BIT IN JOB STATUS WORD IORM TAC,JBTSTS(ITEM) @@ -751,8 +753,7 @@ IFN FTSWAP,< REQUE: MOVSI TAC,JRQ ;MARK JOB TO BE REQUEUED WITH JRQ BIT TDNN TAC,JBTSTS(ITEM) ;INCREMENT COUNT ONLY ONCE FOR EACH JOB - AOS QJOB ;INCREMENT COUNT OF NO. OF JOBS WAITING TO BE REUEUED - + AOS QJOB ;INCREMENT COUNT OF NO. OF JOBS WAITING TO BE REQUEUED IORM TAC,JBTSTS(ITEM) ;SET REQUE BIT FOR SCHEDULER POPJ PDP, @@ -776,7 +777,6 @@ SETSLP: MOVSI TAC,CLKR ;FLAG THAT A CLOCK REQUEST HAS BEEN PUT IN ;JOB NO. IN AC TAC INTERNAL WAKE - EXTERNAL PJBSTS,RNQ,SLPQ WAKE: MOVEI TAC1,RNQ ;RUN QUEUE CODE @@ -785,9 +785,9 @@ WAKE: MOVEI TAC1,RNQ ;RUN QUEUE CODE ANDCAM TAC,JBTSTS(ITEM) ;SO IT CAN PUT ANOTHER ONE IN LDB TAC,PJBSTS ;GET QUEUE CODE CAIE TAC,SLPQ ;IS JOB STILL SLEEPING? - POPJ PDP, ;NO, RETURN TO CLOCK ROUTINE + POPJ PDP, ;NO. RETURN TO CLOCK ROUTINE DPB TAC1,PJBSTS ;YES, STORE RUN QUEUE CODE - ; (CONTROL C, START CAN GET JOB OUT SLEEP) + ; (CONTROL C, START CAN GET JOB OUT OF SLEEP) JRST SETR2 > ;ROUTINE TO GET DATA CONTROL AND ANOTHER SHARABLE DEVICE @@ -810,7 +810,7 @@ GETWT: PUSHJ PDP,DVWAT1 ;NOT AVAIL., GO WAIT FOR IT SOSL REQTAB(AC1) ;REDUCE REQ. COUNT FOR OTHER ; SHARABLE DEVICE. SETOM AVALTB(AC1) ;SET AVAILABLE IF OTHER JOBS WAITING - JFCL DCREQ ;ARGUMENT FOR DCQAIT + JFCL DCREQ ;ARGUMENT FOR DCWAIT PUSHJ PDP,DCWAIT ;WAIT FOR DATA CONTROL FREE MOVE AC1,@(PDP) ;INCREMENT REQ. COUNT AOSN @AC1 ;NOW IS SHARABLE DEVICE FREE? @@ -818,7 +818,8 @@ GETWT: PUSHJ PDP,DVWAT1 ;NOT AVAIL., GO WAIT FOR IT SOSL DCREQ ;NO, REDUCE DATA CONTROL REQUEST SETOM DCAVAL ;SET AVAIL., SOME OTHER JOB WAITING FOR IT JRST GETWT ;TRY AGAIN - ;ROUTINE TO WAIT FOR A SHARABLE DEVICE + +;ROUTINE TO WAIT FOR A SHARABLE DEVICE ;CALLED AT UUO LEVEL ONLY BY DEVICE SERVICE ROUTINES ;CALL: AOSLE XXREQ ;ADD 1 TO SHARABLE DEVICE REQUEST COUNT ; ;IS DEVICE AVAILABLE? @@ -836,9 +837,8 @@ INTERNAL MTWAIT,STWAIT,DTWAIT,DCWAIT,DAWAIT,MQWAIT,AUWAIT EXTERNAL JOB,REQTAB MTWAIT:DTWAIT:DCWAIT:STWAIT:DAWAIT:MQWAIT:AUWAIT: - DVWAIT: MOVE AC1,(PDP) ;GET ADR. OF CALLER - MOVE AC1,-2(AC1) ;GEET AOSLE XXREQ INSTRUCTION + MOVE AC1,-2(AC1) ;GET AOSLE XXREQ INSTRUCTION JRST .+2 DVWAT1: MOVE AC1,@-1(PDP) ;GET ADR. OF CALLER OF THIS ROUTINE SUBI AC1,REQTAB ;COMPUTE WAIT-STATE QUEUE CODE @@ -852,16 +852,16 @@ PJBS1: POINT JWSIZ,JBTSTS(AC3),JWPOS ;BYTE POINTER TO JOB STATUS ; WORD WAIT QUEUE CODE ;ROUTINE TO SET JOB TO RUN AFTER IT HAS BEEN STOPPED ;BECAUSE IT HAD TO WAIT FOR IO TO COMPLETE FOR SOME DEVICE -;EACH SERVICE ROUTINE WILL AT INTERRUPT LEVEL -;CHECK EACH TIME IT FINISHED A TASK(RUNFFERFUL) +;EACH SERVICE ROUTINE AT INTERRUPT LEVEL +;CHECK EACH TIME IT FINISHED A TASK(BUFFERFUL) ;TO SEE IF THE JOB USING THE DEVICE HAS ;PREVIOUSLY CAUGHT UP WITH DEVICE AND HAS BEEN STOPPED -;CALL: MOVE DEVDAT,ADR, OF DEVICE DATA BLOCK +;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK ; MOVE IOS,DEVIOS(DEVDAT) ;GET DEVICE IO STATUS WORD FROM DDB -; TLZE IOS,IOW ;IS JOB AN IO WAIT FOR THIS DEVICE? +; TLZE IOS,IOW ;IS JOB IN AN IO WAIT FOR THIS DEVICE? ; PUSHJ PDP,SETIOD ;YES, GO FLAG JOB TO START UP AGAIN ; RETURN -;SETS THE JOB QUEUE WAIT CODE TO WSQ IN JOB STATUS WORD, +;SETS THE JOB QUEUE WAIT CODE TO WSQ IN JOB STATUS WORD. ;THE SCHEDULER THEN SEES THAT THIS JOB HAS ITS ;IO WAIT SATISFIED AND IS WAITING TO BE RUN AGAIN @@ -870,14 +870,16 @@ EXTERNAL WSQ,WSAVAL,TSQ,TSAVAL,JOB,PJOBN PJBS2: POINT JWSIZ,JBTSTS(TAC),JWPOS ;BYTE POINTER TO JOB STATUS ; WORD QUEUE CODE -STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE + +STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE AOS TSAVAL - JRST SETIO1 + JRST SETID1 SETIOD: MOVEI TAC1,WSQ ;REQUE TO WAIT SATISFIED Q - AOS WSAVAL ;INCR, NO, OF JOBS WITH IO WAIT - ; SATISFIED, NON-ZERO WSAVAL WILL - ; CAUSE SCHED, TO SCAN FOR IO -SETIO1: LDB TAC,PJOBN + AOS WSAVAL ;INCR. NO. OF JOBS WITH IO WAIT + ; SATISFIED. NON-ZERO WSAVAL WILL + ; CAUSE SCHED. TO SCAN FOR IO + ; SATISFIED JOB. +SETID1: LDB TAC,PJOBN DPB TAC1,PJBS2 ;IN JOB STATUS WORD INTERNAL FTSWAP @@ -889,8 +891,8 @@ IFN FTSWAP,< IORM TAC1,JBTSTS(TAC) ;SET REQUEUEING BIT FOR SCHEDULER > NULTST: SKIPE JOB ;IS NULL JOB RUNNING? - POPJ PDP, ;NO LET OTHER JOB RUN TILL SCHEDULER IS TRAPPED TO - ;ROUTINE TO CAUSE CLK TO ROUTINE TO RESCHEDULE + POPJ PDP, ;NO LET OTHER JOB RUN TILL SCHEDULER IS TRAPPPED TO + ;ROUTINE TO CAUSE CLK ROUTINE TO RESCHEDULE ;CALLED AT ANY LEVEL ;CALL: PUSHJ PDP,STOP2 ; RETURN IMMEDIATELY EXCEPT IF AT UUO LEVEL @@ -901,24 +903,24 @@ EXTERNAL PICLK,CLKFLG STOP2: CONO PI,PIOFF ;PREVENT CLOCK INTERRUPT DURING STOP2 CODE SETOM CLKFLG ;SET FLAG TO INDICATE CLK INTERRUPT - ; EVEN THOUGH CLK INTERRUTP IS NOT A ATIME INTERRUPT - CONO PI,PICLK ;TURN PI BACK ON AND REQUESST INTERRUPT TO + ; EVEN THOUGH CLK INTERRUPT IS NOT A TIME INTERRUPT + CONO PI,PICLK ;TURN PI BACK ON AND REQUEST INTERRUPT TO ; CLK PI CHANNEL(LOWEST PRIORITY CHANNEL) POPJ PDP, ;INTERRUPT IMMEDIATELY IF AT UUO LEVEL - ;ROUTINE TO WAIT TILL DEVICE CATCHES UP WITH USER AND BECOMES INCTIVE + ;ROUTINE TO WAIT TILL DEVICE CATCHES UP WITH USER AND BECOMES INACTIVE ,CALLING SEQUENCE , PUSHJ PDP, WAIT1 -, EXIT ALWAYS RETURN HERE +, EXIT ALWAYS RETURNS HERE -,IF DEVICE IS INACTIVBE (IOACT=0), RETURNS TO EXIT, OTHERWISE, SETS -,IOW:=1 AND ENTERS WAIT UNLESS IOCT BECOMES ZERO BEFORE THE -,JUMP IS MADE, IN WHICH CASE IT SETS IOW:=0 AND RETURNS TO EXIT, -,ON LEAVING THE WIAT STATE, RETURNS TO EXIT. +,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE. SETS +,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE +,JUMP IS MADE, IN WHICH CASE IT SETS IOW:=0 AND RETURNS TO EXIT. +,ON LEAVING THE WAIT STATE, RETURNS TO EXIT. ,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING ,CALLING SEQUENCE , PUSHJ PDP, WSYNC , EXIT ALWAYS RETURNS HERE -,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0 +,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0. INTERNAL WAIT1 @@ -927,14 +929,16 @@ WAIT1: MOVE IOS,DEVIOS(DEVDAT) POPJ PDP, ;RETURN PUSHJ PDP,WSYNC ;WAIT JRST WAIT1 - ;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE -;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETE + +;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE +;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED ;CALLED ONLY FROM UUO LEVEL ;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK ; PUSHJ PDP,WSYNC ; RETURN IMMEDIATELY IF DEVICE IS INACTIVE ; RETURN WHEN DEVICE FINISHES NEXT BUFFER IF IT IS ACTIVE + INTERNAL WSYNC EXTERNAL IOWQ,TIOWQ,PION,PIOFF @@ -944,7 +948,6 @@ WSYNC: MOVSI IOS,IOW ;SETUP DEVICE IO WAIT BIT TLNE AC3,DVTTY ;IS THIS DEVICE A TTY? MOVEI AC1,TIOWQ ;YES, SET TTY WAIT STATE CODE MOVE AC3,JOB ;CURRENT JOB NO. - MOVEI AC2,IOACT ;DEVICE ACTIVE BIT CONO PI, PIOFF ;TURN PI OFF TDNN AC2,DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE? @@ -959,7 +962,8 @@ WSYNC: MOVSI IOS,IOW ;SETUP DEVICE IO WAIT BIT ; WITH ACS 0-14 OCTAL RESTORED ; RETURN WHEN IO-WAIT FINISHED WSYNC1: CONO PI, PION - ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVIVCE IO-WAIT BIT + ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVICE IO-WAIT BIT POPJ PDP, + CLKEND: END