TITLE CLOCK - CLOCK SERVICE ROUTINE SUBTTL T. HASTINGS 6-2-65 INTERNAL CLOCK, CLKINI,NULJOB,APRINT,RSCHED EXTERNAL APRSAV, APRRET, APRCHN,APRILM,APRCHL EXTERNAL COMCNT,COMMAND,JOB,JOBADR,APRSAC,JOBDAC,JOBPDP,JOBREL EXTERNAL USRPDP,JOBPFU,JOBPC,JBTADR,JOBADR,JOBDAT,USRPFU,CLDS,NXTJOB EXTERNAL STOPU,SCHEDF,TIME,JOBLEV,JOBUXT,UUO0,JOBDHI,CLKOFF,JBTSTS ;CLOCK WILL TIME AN INTERVAL AND PUSHJ PDP, TO AN ADDRESS ;AFTER THE INTERVAL HAS EXPIRED ;TO MAKE A REQUEST: ; CONO PI,PIOFF ; DPBI AC,CLOCK ; CONO PI,PION ;AC MUST CONTAIN- XWD ADDRESS,NUMBER OF CLOCK COUNTS+DATA*1000 ;THE HIGH ORDER SIX BITS OF THE RIGHT HALF(DATA) ARE PLACED IN AC ;TAC RIGHT JUSTIFIED BEFORE THE PUSHJ PDP, ADDRES IS DONE ;SYSTEM FLAGS: ; STOPU IS SET NON-ZERO AT EITHER INTERRUPT SERVICE LEVEL OR ; UUO LEVEL AND A CLOCK INTERRUPT IS REQUESTED WHEN CURRENT ; JOB MUST BE STOPPED AND ANOTHER ONE RUN. ; SCHEDF IS SET NON-ZERO BY CLOCK ROUTINE WHEN IF IS IN THE PROCESS ; OF RESCHEDULING. IT IS CLEARED AFTER JOB HAS BEEN SET TO ; CURRENTLY RUNNING JOB. ; TIME IS THE TIME SYSTEM HAS RUN IN 60THS OF A SECOND PION=200 PIOFF=400 STOR=DAT T=TAC JA=JDAT CLOCK: POINT 36,CIPWT-1,35 ;BYTE POINTER TO CLOCK QUEUE CIPWT: BLOCK 12 ;THE QUEUE CLKINI: MOVEI CIPWT-1 ;SET UP BYTE POINTER HRRM CLOCK POPJ PDP, APRINT: JRST .+2 ;HERE ON APR INTERRUPT JRST . ;TO OTHER DEVICES ON THIS CHANNEL CONSO APR,230000 ;IS IT ANY OF THE OTHERS JRST CIP0 ;NO. GO CHECK CLOCK JSR APRSAV ;YES, SAVE ACS JRST APRILM ;AND GO PROCESS ILLEGAL MEMOR CIP0: CONSO APR, 2000 ;IS CLOCK ENABLED JRST CIP1 ;NO. GO TO OTHER DEVICES CONSZ APR, 1000 ;YES, DID CLOCK CAUSE INTERRUPT JRST CIP2 ;YES CIP1: SKIPN STOPU ;NO, IS THIS A REQUEST INTERRUPT JRST APRINT+1 ;NO. GO TO OTHER DEVICES CIP1B: JSR APRSAV ;YES, SAVE ACS JRST CIP6 ;RESCHEDULE BUT DONT TIME CIP2: JSR APRSAV ;SAVE ACS AOS TIME ;INCREMENT TIME MOVE TAC,JOB ;DECREMENT CURRENT JOBS RUNNING TIME SOS JBTSTS(TAC) CONO APR,CLKOFF ;TURN CLOCK FLAG OFF ;PROCESS TIMING REQUESTS STORED IN QUEUE HRRZ STOR, CLOCK ;GET END OF LIST CIP4: CAIN STOR, CIPWT-1 ;END YET JRST CIP5 ;YES SOS TAC1, (STOR) ;DECREMENT TIMING REQUEST TRNE TAC1, 7777 ;TIME EXPIRED YET SOJA STOR, CIP4 ;NO, CONTINUE SCAN CONO PI, PIOFF ;YES. MOVE LAST ITEM IN LIST TO THS MOVE TAC, @CLOCK SOS CLOCK CONO PI, PION MOVEM TAC, (STOR) LDB TAC, [POINT 6, TAC1, 23] ;GET 6 BIT DATA ITEM MOVSS TAC1 ;SETUP DISPATCH ADDRESS PUSH PDP, STOR ;SAVE ONLY VALUABLE AC PUSHJ PDP, (TAC1) ;AND DISPATCH TO TIMING REQUEST ROUTINE POP PDP, STOR SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS CIP5: SKIPE COMCNT ;ANY COMMANDS TO PROCESS PUSHJ PDP, COMMAND ;YES RSCHED: ;RESCHEDULE, HERE AFTER APRILM CIP6: SETZM STOPU ;CLEAR INTERRUPT REQUEST FLAG SETOM SCHEDF ;FLAG THAT SCHEDULING IS IN PROGRESS PUSHJ PDP, NXTJOB ;RETURN HIGHEST PRIORITY JOB IN AC ITEM CAMN ITEM, JOB ;IS IT SAME AS CURRENT JOB JRST CIP8 ;YES, EXIT ;DIFFERENT JOB, SAVE OLD JOB SKIPN JOB ;IS OLD JOB THE NULL JOB JRST CIP7 ;YES, DONT BOTHER TO SAVE ANYTHING MOVE JA, JOBADR ;NO. MOVE CHANNEL ACS TO USER JOB AREA MOVEI T,JOBDAC(JA) HRLI T, APRSAC BLT T, JOBDHI(JA) MOVEI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO JOB DATA A HRLI T, USRPDP BLT T, JOBPFU(JA) MOVE T, 40 ;SAVE LOC. 40 MOVEM T, JOBLEV(JA) MOVE T, UUO0 ;AND UUO PC MOVEM T, JOBUXT(JA) MOVE T, APRCHL ;SET C(CHANNEL INTERRUPT LOC.) AS PC MOVEM T, JOBPC(JA) ;RESTOR NEW JOB CIP7: MOVEM ITEM, JOB ;STORE NEW CURRENT JOB NUMBER SETZB 0,SCHEDF ;INDICATE SCHEDULING FINISHED JUMPE ITEM, NUL0 ;IS NEW JOB NULL JOB MOVE JA, JBTADR(ITEM) ;SETUP STATE VARIABLES FOR CU HRRZM JA, JOBADR ;IN SYSTEM AREA HRRZM JA, JOBDAT HLRZM JA, JOBREL(JA) ;SET RELOCATION AND PROTECTION DATAO JA MOVEI T,USRPDP HRLI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO SYSTEM ARE BLT T, USRPFU MOVE T, JOBLEV(JA) ;RESTORE LOC. 40 MOVEM T, 40 MOVE T, JOBUXT(JA) ;AND UUO PC MOVEM T, UUO0 MOVE T, JOBPC(JA) ;SET C(CHANNEL LOC.) TO C(JOBPC) MOVEM T, APRCHL MOVSI 17, JOBDAC(JA) ;RESTORE USER ACS BLT 17,17 SKIPE STOPU ;HAS STOPU BEEN SET SINCE CIP6 JRST CIP1B ;YES, GO RESCHEDULE JEN @APRCHL ;NO. DISMISS CHANNEL CIP8: SETZM SCHEDF ;CLEAR SCHEDULING FLAG JRST APRRET ;AND DISMISS INTERRUPT ;THE NULL JOB NUL0: JRST 10, NULJOB ;RENABLE AND RUN IN EXEC. MODE NULJOB: MOVE 1,.+1 AOJA 0,1 ;COUNT IN AC0 FOR VISUAL MONITORING ;ALSO PC = 1 END,