1 TITLE CLOCK - CLOCK SERVICE ROUTINE
\r
2 SUBTTL T. HASTINGS 6-2-65
\r
3 INTERNAL CLOCK, CLKINI,NULJOB,APRINT,RSCHED
\r
4 EXTERNAL APRSAV, APRRET, APRCHN,APRILM,APRCHL
\r
5 EXTERNAL COMCNT,COMMAND,JOB,JOBADR,APRSAC,JOBDAC,JOBPDP,JOBREL
\r
6 EXTERNAL USRPDP,JOBPFU,JOBPC,JBTADR,JOBADR,JOBDAT,USRPFU,CLDS,NXTJOB
\r
7 EXTERNAL STOPU,SCHEDF,TIME,JOBLEV,JOBUXT,UUO0,JOBDHI,CLKOFF,JBTSTS
\r
9 ;CLOCK WILL TIME AN INTERVAL AND PUSHJ PDP, TO AN ADDRESS
\r
10 ;AFTER THE INTERVAL HAS EXPIRED
\r
15 ;AC MUST CONTAIN- XWD ADDRESS,NUMBER OF CLOCK COUNTS+DATA*1000
\r
16 ;THE HIGH ORDER SIX BITS OF THE RIGHT HALF(DATA) ARE PLACED IN AC
\r
17 ;TAC RIGHT JUSTIFIED BEFORE THE PUSHJ PDP, ADDRES IS DONE
\r
20 ; STOPU IS SET NON-ZERO AT EITHER INTERRUPT SERVICE LEVEL OR
\r
21 ; UUO LEVEL AND A CLOCK INTERRUPT IS REQUESTED WHEN CURRENT
\r
22 ; JOB MUST BE STOPPED AND ANOTHER ONE RUN.
\r
23 ; SCHEDF IS SET NON-ZERO BY CLOCK ROUTINE WHEN IF IS IN THE PROCESS
\r
24 ; OF RESCHEDULING. IT IS CLEARED AFTER JOB HAS BEEN SET TO
\r
25 ; CURRENTLY RUNNING JOB.
\r
26 ; TIME IS THE TIME SYSTEM HAS RUN IN 60THS OF A SECOND
\r
35 CLOCK: POINT 36,CIPWT-1,35 ;BYTE POINTER TO CLOCK QUEUE
\r
36 CIPWT: BLOCK 12 ;THE QUEUE
\r
38 CLKINI: MOVEI CIPWT-1 ;SET UP BYTE POINTER
\r
42 APRINT: JRST .+2 ;HERE ON APR INTERRUPT
\r
43 JRST . ;TO OTHER DEVICES ON THIS CHANNEL
\r
44 CONSO APR,230000 ;IS IT ANY OF THE OTHERS
\r
45 JRST CIP0 ;NO. GO CHECK CLOCK
\r
46 JSR APRSAV ;YES, SAVE ACS
\r
47 JRST APRILM ;AND GO PROCESS ILLEGAL MEMOR
\r
48 CIP0: CONSO APR, 2000 ;IS CLOCK ENABLED
\r
49 JRST CIP1 ;NO. GO TO OTHER DEVICES
\r
50 CONSZ APR, 1000 ;YES, DID CLOCK CAUSE INTERRUPT
\r
52 CIP1: SKIPN STOPU ;NO, IS THIS A REQUEST INTERRUPT
\r
53 JRST APRINT+1 ;NO. GO TO OTHER DEVICES
\r
54 CIP1B: JSR APRSAV ;YES, SAVE ACS
\r
55 JRST CIP6 ;RESCHEDULE BUT DONT TIME
\r
57 CIP2: JSR APRSAV ;SAVE ACS
\r
58 AOS TIME ;INCREMENT TIME
\r
59 MOVE TAC,JOB ;DECREMENT CURRENT JOBS RUNNING TIME
\r
61 CONO APR,CLKOFF ;TURN CLOCK FLAG OFF
\r
63 ;PROCESS TIMING REQUESTS STORED IN QUEUE
\r
64 HRRZ STOR, CLOCK ;GET END OF LIST
\r
65 CIP4: CAIN STOR, CIPWT-1 ;END YET
\r
67 SOS TAC1, (STOR) ;DECREMENT TIMING REQUEST
\r
68 TRNE TAC1, 7777 ;TIME EXPIRED YET
\r
69 SOJA STOR, CIP4 ;NO, CONTINUE SCAN
\r
70 CONO PI, PIOFF ;YES. MOVE LAST ITEM IN LIST TO THS
\r
75 LDB TAC, [POINT 6, TAC1, 23] ;GET 6 BIT DATA ITEM
\r
76 MOVSS TAC1 ;SETUP DISPATCH ADDRESS
\r
77 PUSH PDP, STOR ;SAVE ONLY VALUABLE AC
\r
78 PUSHJ PDP, (TAC1) ;AND DISPATCH TO TIMING REQUEST ROUTINE
\r
80 SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS
\r
82 CIP5: SKIPE COMCNT ;ANY COMMANDS TO PROCESS
\r
83 PUSHJ PDP, COMMAND ;YES
\r
84 RSCHED: ;RESCHEDULE, HERE AFTER APRILM
\r
85 CIP6: SETZM STOPU ;CLEAR INTERRUPT REQUEST FLAG
\r
86 SETOM SCHEDF ;FLAG THAT SCHEDULING IS IN PROGRESS
\r
87 PUSHJ PDP, NXTJOB ;RETURN HIGHEST PRIORITY JOB IN AC ITEM
\r
88 CAMN ITEM, JOB ;IS IT SAME AS CURRENT JOB
\r
89 JRST CIP8 ;YES, EXIT
\r
91 ;DIFFERENT JOB, SAVE OLD JOB
\r
92 SKIPN JOB ;IS OLD JOB THE NULL JOB
\r
93 JRST CIP7 ;YES, DONT BOTHER TO SAVE ANYTHING
\r
94 MOVE JA, JOBADR ;NO. MOVE CHANNEL ACS TO USER JOB AREA
\r
98 MOVEI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO JOB DATA A
\r
101 MOVE T, 40 ;SAVE LOC. 40
\r
102 MOVEM T, JOBLEV(JA)
\r
103 MOVE T, UUO0 ;AND UUO PC
\r
104 MOVEM T, JOBUXT(JA)
\r
105 MOVE T, APRCHL ;SET C(CHANNEL INTERRUPT LOC.) AS PC
\r
110 CIP7: MOVEM ITEM, JOB ;STORE NEW CURRENT JOB NUMBER
\r
111 SETZB 0,SCHEDF ;INDICATE SCHEDULING FINISHED
\r
112 JUMPE ITEM, NUL0 ;IS NEW JOB NULL JOB
\r
113 MOVE JA, JBTADR(ITEM) ;SETUP STATE VARIABLES FOR CU
\r
114 HRRZM JA, JOBADR ;IN SYSTEM AREA
\r
116 HLRZM JA, JOBREL(JA) ;SET RELOCATION AND PROTECTION
\r
119 HRLI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO SYSTEM ARE
\r
121 MOVE T, JOBLEV(JA) ;RESTORE LOC. 40
\r
123 MOVE T, JOBUXT(JA) ;AND UUO PC
\r
125 MOVE T, JOBPC(JA) ;SET C(CHANNEL LOC.) TO C(JOBPC)
\r
127 MOVSI 17, JOBDAC(JA) ;RESTORE USER ACS
\r
129 SKIPE STOPU ;HAS STOPU BEEN SET SINCE CIP6
\r
130 JRST CIP1B ;YES, GO RESCHEDULE
\r
131 JEN @APRCHL ;NO. DISMISS CHANNEL
\r
133 CIP8: SETZM SCHEDF ;CLEAR SCHEDULING FLAG
\r
134 JRST APRRET ;AND DISMISS INTERRUPT
\r
137 NUL0: JRST 10, NULJOB ;RENABLE AND RUN IN EXEC. MODE
\r
140 AOJA 0,1 ;COUNT IN AC0 FOR VISUAL MONITORING
\r