X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..bb920f47d2b4fd2ac0c46c72df890dfe6931e943:/src/clock1.mac diff --git a/src/clock1.mac b/src/clock1.mac index eff0f89..997a4a6 100644 --- a/src/clock1.mac +++ b/src/clock1.mac @@ -11,6 +11,7 @@ CLOCK1: ;FOR SCHEDULING JOBS AND ERROR HANDLING THAT THE USER ;IS NOT ENABLED TO HANDLE HIMSELF + EXTERNAL TIME,TIMEF,CLKFLG,REQCLK,APRCHL,APRPC,UPTIME EXTERNAL JOBDAT,JOBTPC,JOBCNI,JOBAPR,APRERR,SCHEDF @@ -20,6 +21,7 @@ EXTERNAL RELEA9,CRSHWD,CRASHX INTERNAL FTTTYSER ;THIS ROUTINE MAY BE ASSEMBLED TO WORD EITHER ; THE OLD SCNSER OR THE NEW TTYSER. + INTERNAL FTCHECK,FTMONP IFN FTCHECK+FTMONP,< @@ -36,8 +38,7 @@ DAMESS: ASCIZ /-JAN-/ CLOCK: POINT 36,CIPWTM,35 ;BYTE POINTER TO CLOCK REQ QUEUE > - - INTERN APRINT + INTERN APRINT APRINT: JRST APRPAR ;ALWAYS CHECK APR AND PI DEVICES JRST . ;CHECK OTHER DEVICES @@ -65,7 +66,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,8 +77,7 @@ APRER1: CONO APR,1000+APRCHN ;NOW CLEAR CLOCK FLAG 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 - -;OTHER APR INTERRUPTS BESIDES CLOCK + ;OTHER APR INTERRUPTS BESIDES CLOCK APRER: EXCH TAC,APRCHL ;SAVE TAC, GET PC TLNE TAC,USRMOD ;IS PC IN USER MODE? @@ -96,15 +96,13 @@ APRER4: EXCH JDAT,JOBDAT ;YES, SAVE JDAT, GET CURRENT JOB DATA AREA ADR. EXCH JDAT,JOBDAT ;RESTORE JDAT,JOBDAT CONO APR,440+APRCHN ;DISBALE 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? + 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 @@ -123,8 +121,7 @@ IFN FTHALT,< > JRST APRER3 ;NO,MUST BE UUO LEVEL(OR USER MODE AND ; MEMORY DROPPED OUT) - -SUBTTL CLOCK - LOW PRIORITY CLOCK SERVICE(CLK) + SUBTTL CLOCK - LOW PRIORITY CLOCK SERVICE(CLK) ;THIS ROUTINE RUNS ON THE LOWEST PRIORITY PI CHANNEL AND AT UUO LEVEL ;TO CAUSE AN INTERRUPT ON CLK CHANNEL: @@ -143,7 +140,6 @@ SUBTTL CLOCK - LOW PRIORITY CLOCK SERVICE(CLK) ;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 ; 3. CONTROL ABOUT TO RETURN TO USER MODE @@ -186,8 +182,8 @@ 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 DECODE + ; OTHERWISE GET PD OUF JRST RSCHED ;GO RESCHEDULE ;HERE AT UUO LEVEL WHEN CURRENT JOB RETURNS TO USER MODE @@ -225,7 +221,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 @@ -241,9 +236,8 @@ CLKERR: SKIPN 17,JOBDAT ;CURRENT JOB DATA AREA, IS THERE ONE? SKIPE TAC,APRERR ;IT THIS AN ERROR INTERRUPT? PUSHJ PDP,APRILM ;YES, GO PROCESS ERROR, APRILM WILL CLEAR APRERR ; FLAG IMMEDIATELY - -EXTERNAL COMCNT,NXTJOB,HNGTIM,POTLST,LSTWRD -EXTERNAL TIMEF,APRERR,CLKFLG,SCHEDF,JDB,PMONTB + EXTERNAL COMCNT,NXTJOB,HNGTIM,POTLST,LSTWRD +EXTERNAL TIMEF,APRERR,CLKFLG,SCHEDF,JOB,PMONTB RSCHED: SKIPN TIMEF ;HAS CLOCK GONE OFF SINCE LAST CALL? JRST CIP6 ;NO, JUST RESCHEDULE @@ -286,8 +280,7 @@ CIP3: SETZB IOS,TIME ;YES, RESET TIME OF DAY LDB TAC,PMONTB CAMGE TAC,TAC1 ;END OF MONTH? JRST CIP3 ;YES. - -;PROCESS TIMING REQUESTS STORED IN QUEUE + ;PROCESS TIMING REQUESTS STORED IN QUEUE CIP2: HRRZ STOR,CLOCK ;GET END OF LIST CIP4: CAIN STOR,CIPWTM1 ;END YET? @@ -318,8 +311,7 @@ CIP6: PUSHJ PDP,NXTJOB ;CALL SCHEDULER 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 @@ -335,9 +327,9 @@ EXTERNAL JOB,JOBDAT,JOBPRT,USRPRT,USRHCU,JOBJDA ; SINCE IT DOES IO INTO AND OUT OF ; 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) - -;RESTORE SOFTWARE STATE OF NEW JOB,THEN HARDWARE STATE + 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 EXTERNAL JOB,JBTDAT,JOBDAT,USRPRT,JOBPRT @@ -356,7 +348,6 @@ IFN FTHALT,< MOVEI T,USRPRT ;NO, DEST,#PROTECTED AREA IN MONITOR HRLI T,JOBPRT(JA) ;SOURCE#FIRST PROTECT 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 @@ -391,7 +382,6 @@ IFN FTCHECK, SETZB 0,NULERR ;CLEAR AC 0 USED FOR USUAL MONITORING - ; CLEAR FLAG SAYING ERROR IN NULL JOB ; OF NULL TIME INTERVAL ; LOC JOBDAT (LOCATION OF NULL JOB DATA AREA) TO 0 @@ -402,8 +392,7 @@ IFN FTCHECK, ; IF THIS IS THE LARGEST JOB IN USE,FIND NEXT @@ -531,8 +519,7 @@ EXTERN PRJPRG 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 + ;ROUTINE TO STOP JOB, SET ERROR BIT AND PRINT MESSAGE ;THEM ADD ^TC ;CALL: MOVEI TAC,ADR. OF MESSAGE ; PUSHJ PDP,PHOLD @@ -574,10 +561,8 @@ ESTOP1: MOVSI TAC,JERR ;SSET ERROR BIT IN JOB STATUS WORD MOVSI TAC,637163 ;FIND SYS DDB 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 NY JOB FROM BEING SCHEDULED ;CALL: ; MOVE ITEM, JOB NUMBER ; PUSHJ PDP, STOP1 @@ -613,18 +598,18 @@ IFE FTSWAP,< IFN FTSWAP,< JRST REQUE ;SET REQUE JOB FLAG > + SKIPL TAC,JBTSTS(ITEM) ;RUN FLAG OFF? 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 - -;ROUTINE TO REQUE JOB WHICH HAS HAD A COMMAND TYPED + ;ROUTINE TO REQUE JOB WHICH HAS HAD A COMMAND TYPED ;WHICH NEEDS CORE AND THE CORE IMAGE IS ON THE DISK. ;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 @@ -638,7 +623,6 @@ INTERNAL FTSWAP IFN FTSWAP,< TLNN TAC,CMWB PUSHJ PDP,REQUE - > POPJ PDP, @@ -648,12 +632,11 @@ INTERNAL FTSWAP IFN FTSWAP, - -;ROUTINE TO SETUP MONITOR JOB TO RUN LATER AT UUO LEVEL + ;ROUTINE TO SETUP MONITOR JOB TO RUN LATER AT UUO LEVEL ;CALLED BY COMMANDS WHICH MAY OR MAY NOT NEED TO ;RUN MONITOR JOB DEPENDING ON WHETHER JOB HAS CORE(KJOB,IJOB) ;TTY WILL REMAIN IN MONITOR MODE @@ -690,8 +673,7 @@ IFN JDAT-PROG,< PUSH PDP,TAC1 ;SAVE STOP ADDRESS JRST (TAC) ;RETURN AND DO MONITOR JOB ; WITH TT DDB,OUTPUT BYTE POINTER, AND JOB NO. - -;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN + ;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 ;SAFELY STOPPED IN ONE OF 3 STATES: @@ -710,7 +692,6 @@ 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 BLT TAC,JOBD17(JDAT) ;MOVE ALL ACS @@ -726,13 +707,14 @@ USTRT1: MOVEM TAC,JOBOPC(JDAT) ;STORE OLD PC FOR USER TO LOOK AT 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 INITAL 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 @@ -794,7 +776,7 @@ SETSLP: MOVSI TAC,CLKR ;FLAG THAT A CLOCK REQUEST HAS BEEN PUT IN INTERNAL WAKE -EXTERNAL PJSTS,RNQ,SLPQ +EXTERNAL PJBSTS,RNQ,SLPQ WAKE: MOVEI TAC1,RNQ ;RUN QUEUE CODE MOVE ITEM,TAC ;JOB NO. @@ -807,8 +789,7 @@ WAKE: MOVEI TAC1,RNQ ;RUN QUEUE CODE ; (CONTROL C, START CAN GET JOB OUT SLEEP) JRST SETR2 > - -;ROUTINE TO GET DATA CONTROL AND ANOTHER SHARABLE DEVICE + ;ROUTINE TO GET DATA CONTROL AND ANOTHER SHARABLE DEVICE ;JOB NEVER GETS ONE DEVICE AND WAITS FOR SECOND, SINCE TYPING ;CONTROL C WOULD NEVER FINISH WITH FIRST DEVICE ;CALL PUSHJ PDP,GETDCXX @@ -836,8 +817,7 @@ 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? @@ -855,7 +835,6 @@ 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 JRST .+2 @@ -869,8 +848,7 @@ SETSTT: MOVE AC3,JOB ;CURRENT JOB NO. 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 + ;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) @@ -890,6 +868,7 @@ 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 AOS TSAVAL JRST SETIO1 @@ -897,13 +876,13 @@ 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 + ; SATISFIED JOB. SETIO1: LDB TAC,PJOBN DPB TAC1,PJBS2 ;IN JOB STATUS WORD INTERNAL FTSWAP IFN FTSWAP,< EXTERN QJOB,JBTSTS - MOVSI QJOB,JBTSTS MOVSI TAC1,JRQ ;SET JOB TO BE REQUEUED AT NEXT CLOCK TICK TDNN TAC1,JBTSTS(TAC) ;IS REQUE BIT ALREADY ON? AOS QJOB ;NO, INCREMENT COUNT ONCE FOR EACH JOB @@ -911,8 +890,7 @@ IFN FTSWAP,< > 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 + ;ROUTINE TO CAUSE CLK TO ROUTINE TO RESCHEDULE ;CALLED AT ANY LEVEL ;CALL: PUSHJ PDP,STOP2 ; RETURN IMMEDIATELY EXCEPT IF AT UUO LEVEL @@ -927,8 +905,7 @@ STOP2: CONO PI,PIOFF ;PREVENT CLOCK INTERRUPT DURING STOP2 CODE CONO PI,PICLK ;TURN PI BACK ON AND REQUESST 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 INCTIVE ,CALLING SEQUENCE , PUSHJ PDP, WAIT1 , EXIT ALWAYS RETURN HERE @@ -968,7 +945,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? @@ -986,4 +962,5 @@ WSYNC1: CONO PI, PION ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVIVCE IO-WAIT BIT POPJ PDP, + CLKEND: END