Initial commit
[retro-software/dec/tops10/v1.19.git] / src / clock.mac
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
8 \r
9 ;CLOCK WILL TIME AN INTERVAL AND PUSHJ PDP, TO AN ADDRESS\r
10 ;AFTER THE INTERVAL HAS EXPIRED\r
11 ;TO MAKE A REQUEST:\r
12 ;       CONO PI,PIOFF\r
13 ;       DPBI AC,CLOCK\r
14 ;       CONO PI,PION\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
18 \r
19 ;SYSTEM FLAGS:\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
27 \r
28 PION=200\r
29 PIOFF=400\r
30 \r
31 STOR=DAT\r
32 T=TAC\r
33 JA=JDAT\r
34 \r
35 CLOCK:    POINT 36,CIPWT-1,35           ;BYTE POINTER TO CLOCK QUEUE\r
36 CIPWT:    BLOCK 12                      ;THE QUEUE\r
37 \r
38 CLKINI:   MOVEI CIPWT-1                 ;SET UP BYTE POINTER\r
39           HRRM CLOCK\r
40           POPJ PDP,\r
41 \f\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
51           JRST CIP2             ;YES\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
56 \f\r
57 CIP2:     JSR APRSAV                    ;SAVE ACS\r
58           AOS TIME              ;INCREMENT TIME\r
59           MOVE TAC,JOB          ;DECREMENT CURRENT JOBS RUNNING TIME\r
60           SOS JBTSTS(TAC)\r
61           CONO APR,CLKOFF       ;TURN CLOCK FLAG OFF\r
62 \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
66           JRST CIP5             ;YES\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
71           MOVE TAC, @CLOCK\r
72           SOS CLOCK\r
73           CONO PI, PION\r
74           MOVEM TAC, (STOR)\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
79           POP PDP, STOR\r
80           SOJA STOR, CIP4       ;GO BACK FOR MORE REQUESTS\r
81 \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
90 \f\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
95           MOVEI T,JOBDAC(JA)\r
96           HRLI T, APRSAC\r
97           BLT T, JOBDHI(JA)\r
98           MOVEI T, JOBPDP(JA)   ;MOVE JOB STATE VARIABLES TO JOB DATA A\r
99           HRLI T, USRPDP\r
100           BLT T, JOBPFU(JA)\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
106           MOVEM T, JOBPC(JA)\r
107 \r
108 \f\r
109 ;RESTOR NEW JOB\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
115           HRRZM JA, JOBDAT\r
116           HLRZM JA, JOBREL(JA)          ;SET RELOCATION AND PROTECTION\r
117           DATAO JA\r
118           MOVEI T,USRPDP\r
119           HRLI T, JOBPDP(JA)    ;MOVE JOB STATE VARIABLES TO SYSTEM ARE\r
120           BLT T, USRPFU\r
121           MOVE T, JOBLEV(JA)    ;RESTORE LOC. 40\r
122           MOVEM T, 40\r
123           MOVE T, JOBUXT(JA)    ;AND UUO PC\r
124           MOVEM T, UUO0\r
125           MOVE T, JOBPC(JA)     ;SET C(CHANNEL LOC.) TO C(JOBPC)\r
126           MOVEM T, APRCHL\r
127           MOVSI 17, JOBDAC(JA)          ;RESTORE USER ACS\r
128           BLT 17,17\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
132 \r
133 CIP8:     SETZM SCHEDF                  ;CLEAR SCHEDULING FLAG\r
134           JRST APRRET                   ;AND DISMISS INTERRUPT\r
135 \r
136 ;THE NULL JOB\r
137 NUL0:     JRST 10, NULJOB       ;RENABLE AND RUN IN EXEC. MODE\r
138 \r
139 NULJOB:   MOVE 1,.+1\r
140           AOJA 0,1  ;COUNT IN AC0 FOR VISUAL MONITORING\r
141                                 ;ALSO PC = 1\r
142           END,\r