APRIN1: 0 ;USER ENABLED CPU FLAGS\r
CLKS17: 0 ;PLACE TO SAVE AC17 ON CLOCK INTERRUPT\r
DAMESS: ASCIZ /-JAN-/\r
-\r
CLOCK: POINT 36,CIPWTM,35 ;BYTE POINTER TO CLOCK REQ QUEUE\r
>\r
\f INTERN APRINT\r
CONO PI,REQCLK ;REQUEST INTERRUPT ON CLK CHANNEL\r
CONSZ APR,@APRIN1 ;IS USER ENABLE FOR ANY FLAGS(INCLUDING CLOCK)\r
; RH ALSO MODIFIED EACH TIME A USER RUNS\r
- JRST APRER ;YES, GO PROCESS TRAP\r
+ JRST APRER1 ;YES, GO PROCESS TRAP\r
CONO APR,1000+APRCHN ;NO, CLEAR ONLY THE CLOCK FLAG\r
JEN @APRCHL ;DISMISS INTERRUPT\r
\r
EXCH JDAT,JOBDAT ;RESTORE JDAT,JOBDAT\r
CONO APR,440+APRCHN ;DISBALE FOV, AROVF IN CASE ON\r
;SO USER MUST REENABLE WITH SETAPR UUO\r
-\r
APRER3: TLZ TAC,440000 ;CLEAR FOV (PC CHANGE ON PDP-6) AND AR OVF FLAGS\r
; SO INTERRUPT MAY BE DISMISSED\r
EXCH TAC,APRCHL ;RESTORE TAC & APRCHL\r
;THEN CALLS SCHEDULER\r
;IF THE CURRENT JOB IS IN EXEC MODE THE ABOVE 4 TASKS ARE\r
;DELAYED UNTIL THE CURRENT JOB ENTERS A STOPPABLE STATE: I.E., UNTIL\r
-\r
; 1. JOB STARTS TO WAIT FOR A BUSY SHARABLE DEVICE\r
; 2. JOB STARTS TO WAIT FOR A IO TO COMPLETE\r
; 3. CONTROL ABOUT TO RETURN TO USER MODE\r
MOVEI AC3,JOBDAC(JDAT) ;SAVE ACS 0-16 IN DUMP ACS\r
BLT AC3,JOBD16(JDAT) ;IN CURRENT JOB DATA AREA\r
MOVEI PDP,NULPDL ;NULL JOB PD LIST\r
- HRLI PDP,MJOBP1 ; OTHERWISE GET PD OUF\r
+ HRLI PDP,MJOBP1 ;USED TO CALL SCHEDULER AND COMMAND DECODE\r
+ ; OTHERWISE GET PD OUF\r
\r
JRST RSCHED ;GO RESCHEDULE\r
\r
+\r
;HERE AT UUO LEVEL WHEN CURRENT JOB RETURNS TO USER MODE\r
;FROM A UUO CALL AND EITHER:\r
; 1. CURRENT JOB TYPED CONTROL C WHILE IN EXEC MODE\r
JEN @CLKCHL\r
\r
SAVPC: MOVEM 17,USRPC ;SAVE PC IN PROTECTED PART OF SYSTEM DATA\r
-\r
; STORAGE FOR CURRENT JOB\r
CLKERR: SKIPN 17,JOBDAT ;CURRENT JOB DATA AREA, IS THERE ONE?\r
MOVEI 17,NULDAT ;NO, MUST BE NULL JOB OR CORE 0\r
ADDI TAC,1 ;MAKE IT NO. OF 1K BLOCKS\r
ADDM TAC,JBTKCT(ITEM) ;ADD IN ACCUMULATED CORE RUNNING TIME PRODUCT\r
; (KILO-CORE TICKS)\r
-\r
IFN FT2REL,<\r
EXTERN CHGHGH\r
PUSHJ PDP,CHGHGH ;CHARGE USER FOR HIGH SEGMENT IF HE HAS ONE\r
MOVE TAC, @CLOCK\r
SOS CLOCK\r
MOVEM TAC, (STOR)\r
- CONI PI,PION\r
+ CONO PI,PION\r
LDB TAC, [POINT 6, TAC1, 23] ;GET 6 BIT DATA ITEM\r
MOVSS TAC1 ;SETUP DISPATCH ADDRESS\r
PUSH PDP, STOR ;SAVE ONLY VALUABLE AC\r
; SINCE IT DOES IO INTO AND OUT OF\r
; CHANNEL LOCATIONS (JOBJDA+1..,JOBJDA+17),\r
ADD JA,T1 ;RELOCATE TO USER AREA\r
- BLT T,JOBJDA(JA) ; STOP WITH USER CHANNEL 0-1+C(USRHCU)\r
+ BLT T,JOBJDA(JA) ;MOVE TO USER JOB DATA AREA\r
+ ; STOP WITH USER CHANNEL 0-1+C(USRHCU)\r
\f;RESTORE SOFTWARE STATE OF NEW JOB,THEN HARDWARE STATE\r
\r
INTERNAL NULJOB,NULADR\r
MOVEI T,USRPRT ;NO, DEST,#PROTECTED AREA IN MONITOR\r
HRLI T,JOBPRT(JA) ;SOURCE#FIRST PROTECT LOC. IN JB DATA AREA\r
SKIPL T1,JOBHCU(JA) ;MOVE NO. OF USER IO CHAN. IN USE\r
- \r
CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT CLOBBER\r
; IF ADRRESS CHECKING MISSES\r
MOVEI T1,0 ;MOVEJUST CHAN 0 IF NEG. OR GREATER THAN 17\r
EXTERN JOB,JBTADR,JOBADR,USRREL,JBTDAT,JOBDAT,JOBREL,KT10A\r
\r
SETREL: MOVE ITEM,JOB ;CURRENT JOB NUMBER\r
-\r
SETRL1: MOVE PROG,JBTADR(ITEM) ;XWD PROTECTION,RELOCATION FOR LOW SEG\r
MOVEM PROG,JOBADR ;SAVE TO MAKE UUO HANDLER FASTER\r
HLRZM PROG,USRREL ;SAVE PROTECTION FOR ADDRESS CHECKING\r
MOVE TAC,JOBENB(JA) ;USER APR CONSO FLAGS (THE ONES HE WANTS TO HANDLE\r
; FALL INTO SETAPR ROUTINE\r
\r
+\r
;ROUTINE TO ENABLE/DISABLE APR FOR TRAPPING TO USER AND EXEC\r
;CALL: MOVE TAC, APR, CONSO FLAGS FOR USER TRAPPING\r
; PUSHJ PDP,SETAPR\r
ANDCAM TAC,JBTSTS(ITEM)\r
IFN FTLOGIN,<\r
EXTERN PRJPRG\r
+\r
SETZM PRJPRG(ITEM) ;CLEAR PROJECT-PROGRAMMER NUMBER WHEN JOB LOGS OUT\r
>\r
; IF THIS IS THE LARGEST JOB IN USE,FIND NEXT\r
MOVSI TAC1,JNA ;YES,JOB NUMBER ASSGINED BIT\r
HRRZ TAC,ITEM ;SCAN DOWNWARD\r
TDNN TAC1,JBTSTS(TAC) ;IS JNA BIT SET FOR THIS JOB?\r
- SOJG TAC,-1 ;NO,KEEP LOOKING,FINISHED(TRUE IF THIS THE ONLY JOB\r
+ SOJG TAC,.-1 ;NO,KEEP LOOKING,FINISHED(TRUE IF THIS THE ONLY JOB\r
MOVEM TAC,HIGHJB ;YES,STORE NEW HIGHEST JOB NUMBER ASSIGNED\r
JRST ESTOP ;GO SET ERROR BIT\r
\f;ROUTINE TO STOP JOB, SET ERROR BIT AND PRINT MESSAGE\r
\f\r
;ROUTINE TO STOP USER AND FLAG AS ERROR STOP\r
\r
+\r
INTERNAL ESTOP,ESTOP1\r
EXTERNAL JBTSTS,STUSER,STREQ,STAVAL\r
EXTERNAL SCHEDF,JOB,CPOPJ\r
IFN FTSWAP,<\r
JRST REQUE ;SET REQUE JOB FLAG\r
>\r
+\r
SKIPL TAC,JBTSTS(ITEM) ;RUN FLAG OFF?\r
TLNN TAC,JERR ;YES, ERROR FLAG ON?\r
JRST STOP2 ;NO\r
;OR IS IN CORE AND HAS ACTIVE DEVICES.\r
;CALLED FROM COMMAND DECODER\r
;CALL: MOVE ITEM,JOB NO.\r
- PUSHJ PDP,DLYCOM\r
+; PUSHJ PDP,DLYCOM\r
\r
INTERNAL DLYCOM\r
\r
>\r
POPJ PDP,\r
\r
-;ROUTINE TO PUT JONB IN NO CORE QUEUE\r
+;ROUTINE TO PUT JOB IN NO CORE QUEUE\r
+\r
\r
INTERNAL FTSWAP\r
IFN FTSWAP,<INTERNAL NOCORQ\r
JRST SETRUN ;SET TTY TO START JOB WHEN COMMAND RESPONSE\r
; IS FINISHED AND KEEP TTY IN MONITOR MODE\r
\r
+\r
;ROUTINE TO SETUP ACS FOR MONITOR JOB STARTING AT UUO LEVEL\r
;SETS UP ITEM, WITH JOB NO.; PROG WITH RELOCATION, AND PDP\r
;WITH PUSH DOWN LIST ADR. IN JOB DATA AREA\r
USTART: MOVE TAC,JOBPC(JDAT) ;GET OLD PC\r
TLNE TAC,USRMOD ;IS IT IN USER MODE TOO?\r
JRST USTRT1 ;YES, DUMP ACS AND PC FLAGS ARE ALREADY HIS\r
-\r
MOVEI TAC,JOBDAC(JDAT) ;NO. MOVE USERS(UUO) ACS TO DUMP ACS\r
HRL TAC,JDAT ;SOURCE=REL, 0,DEST,=JOBDAC IN JOB DATA AREA\r
BLT TAC,JOBD17(JDAT) ;MOVE ALL ACS\r
MSTART: MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC\r
MOVSI TAC,JERR+WTMASK\r
ANDCAM TAC,JBTSTS(ITEM) ;CLEAR ERROR AND WAIT STATUS BITS\r
- ;SET TTY STATE TO INITAL COND.\r
+ JRST TTYSET ;SET TTY STATE TO INITAL COND.\r
; TTYUSR OR TTYURC SHOULD BE CALLED\r
; TO INDICATE WHETHER TTY TO USER OR EXEC MODE\r
; AND THAT JOB IS TO RUN(RUN BIT =1) WHEN\r
; MONITOR COMMAND RESPONSE FINISHES.\r
; SEE SETRUN BELOW\r
\f\r
+\r
;ROUTINE TO SET JOB STATUS RUN BIT(RUN)\r
;CALLED BY SCANNER SERVICE WHEN TTY MONITOR COMMAND\r
;RESPONSE FINISHES, THIS ACTION IS ENABLED BY CALLING\r
;JOB NO. IN AC TAC\r
\r
INTERNAL WAKE\r
-\r
EXTERNAL PJBSTS,RNQ,SLPQ\r
\r
WAKE: MOVEI TAC1,RNQ ;RUN QUEUE CODE\r
SOSL DCREQ ;NO, REDUCE DATA CONTROL REQUEST\r
SETOM DCAVAL ;SET AVAIL., SOME OTHER JOB WAITING FOR IT\r
JRST GETWT ;TRY AGAIN\r
-\f;ROUTINE TO WAIT FOR A SHARABLE DEVICE\r
+\f\r
+;ROUTINE TO WAIT FOR A SHARABLE DEVICE\r
;CALLED AT UUO LEVEL ONLY BY DEVICE SERVICE ROUTINES\r
;CALL: AOSLE XXREQ ;ADD 1 TO SHARABLE DEVICE REQUEST COUNT\r
; ;IS DEVICE AVAILABLE?\r
EXTERNAL JOB,REQTAB\r
\r
MTWAIT:DTWAIT:DCWAIT:STWAIT:DAWAIT:MQWAIT:AUWAIT:\r
-\r
DVWAIT: MOVE AC1,(PDP) ;GET ADR. OF CALLER\r
MOVE AC1,-2(AC1) ;GEET AOSLE XXREQ INSTRUCTION\r
JRST .+2\r
\r
PJBS2: POINT JWSIZ,JBTSTS(TAC),JWPOS ;BYTE POINTER TO JOB STATUS\r
; WORD QUEUE CODE\r
+\r
STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE\r
AOS TSAVAL\r
JRST SETIO1\r
AOS WSAVAL ;INCR, NO, OF JOBS WITH IO WAIT\r
; SATISFIED, NON-ZERO WSAVAL WILL\r
; CAUSE SCHED, TO SCAN FOR IO\r
+ ; SATISFIED JOB.\r
SETIO1: LDB TAC,PJOBN\r
DPB TAC1,PJBS2 ;IN JOB STATUS WORD\r
\r
POPJ PDP, ;RETURN\r
PUSHJ PDP,WSYNC ;WAIT\r
JRST WAIT1\r
-\f;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE\r
+\f\r
+;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE\r
;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETE\r
;CALLED ONLY FROM UUO LEVEL\r
;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK\r
; RETURN IMMEDIATELY IF DEVICE IS INACTIVE\r
; RETURN WHEN DEVICE FINISHES NEXT BUFFER IF IT IS ACTIVE\r
\r
+\r
INTERNAL WSYNC\r
EXTERNAL IOWQ,TIOWQ,PION,PIOFF\r
\r
TLNE AC3,DVTTY ;IS THIS DEVICE A TTY?\r
MOVEI AC1,TIOWQ ;YES, SET TTY WAIT STATE CODE\r
MOVE AC3,JOB ;CURRENT JOB NO.\r
-\r
MOVEI AC2,IOACT ;DEVICE ACTIVE BIT\r
CONO PI, PIOFF ;TURN PI OFF\r
TDNN AC2,DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE?\r
ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVIVCE IO-WAIT BIT\r
POPJ PDP,\r
\r
+\r
CLKEND: END\r