Initial commit
[retro-software/dec/tops10/v1.19.git] / src / runcss.mac
1 TITLE RUNCSS - RUN CONTROL SUBROUTINES\r
2 SUBTTL T. HASTINGS   8-16-65\r
3 EXTERNAL APRCHN,APRCHL,CH6SAC,JBTADR,JOB,JOBAC,JOBDAT,JOBN\r
4 EXTERNAL JOBPDP,USRDDT,USRPDP,JOBDDT\r
5 EXTERNAL IORELS,JBTSTS,JOBADR,JOBCDP,JOBPC,JOBREL,JOBSA,JOBSYM\r
6 EXTERNAL MESPNT,QUANT1,JOBDAC,TTYSTR,STOPU,SCHEDF\r
7 EXTERNAL UXIT,IOCOMP,DCREQ,DCAVAL,DTREQ,DTAVAL,MTREQ,MTAVAL\r
8 EXTERNAL CH1XIT,CH2XIT,CH3XIT,CH4XIT,CH5XIT,CH6XIT,CH7XIT\r
9 EXTERNAL JOBFF,MJOBPD,JOBPDL,IOCOMP,PJOBN,USRLO,USRLO1,USRHI\r
10 EXTERNAL TTYFNU,RSCHED\r
11 \f\r
12 ;EXIT UUO ROUTINE\r
13 \r
14           INTERNAL EXIT\r
15 EXTERNAL IORELS,TTYFNU,MESPNT,IOKILL\r
16 \r
17 EXIT:     PUSHJ PDP,IORELS      ;RELEASE ALL DEVICES\r
18           PUSHJ PDP,TTYFNU\r
19           MOVEI TAC1,EXMESS\r
20           PUSHJ PDP,MESPNT\r
21           JRST HOLD ;STOP THIS USER IMMEDIATELY\r
22 \r
23 EXMESS:   ASCIZ /\r
24 EXIT\r
25 /\r
26 ;RESET UUO ROUTINE\r
27 \r
28           INTERNAL RESET\r
29 \r
30 RESET:    PUSHJ PDP,IOKILL      ;RELEASE ALL DEVICES\r
31           PUSHJ PDP,SETUSR      ;CLEAR PART OF JOB DATA AREA\r
32           JRST UXIT             ;AND RETURN TO CALLER\r
33 \f\r
34 \r
35 ;COMMON ERROR HANDLING ROUTINES\r
36 ;DEVDAT MUST BE SET UP TO TTY DDB ON WHICH TO PRINT ERROR MESSAGE\r
37 \r
38 ;HERE ON ERROR DETECTED AT INTERRUPT SERVICE LEVEL\r
39 ;0(PDP) CONTAINS ADR. OF DEVICE DATA BLOCK CAUSING ERROR\r
40 \r
41 ;CALL     MOVE TAC, PI CHANNEL NO DETECTING ERROR\r
42 ;         JRST HOLDI\r
43 \r
44 INTERNAL HOLDI,HOLD,HOLDI1\r
45 \r
46 HOLDI:    MOVE TAC1, 0(PDP)     ;DEVICE DATA BLOCK\r
47           LDB ITEM, [POINT 9, DEVCHR(TAC1), 8]          ;GET JOB NUMBER\r
48 HOLDI1:   PUSH PDP, TAC         ;SAVE PI CHANNEL NO.\r
49           PUSHJ PDP, HOLDSB\r
50           POP PDP, TAC\r
51           JRST CHNTAB(TAC)      ;GO RESTORE ACS AND DISMISS CHANNEL\r
52 \r
53 CHNTAB:   JRST RSCHED           ;INTERRUPT ON CLOCK CHANNEL,RESCHEDULE\r
54           JRST CH1XIT\r
55           JRST CH2XIT\r
56           JRST CH3XIT\r
57           JRST CH4XIT\r
58           JRST CH5XIT\r
59           JRST CH6XIT\r
60           JRST CH7XIT\r
61 \r
62 ;HERE ON ERROR FROM UUO LEVEL. ERROR MESSAGE ALREADY IN TTY BUFFER\r
63 \r
64 ;DAT=BYTE POINTER TO END OF MESSAGE; DEVDAT=TTY DEV. DATA BLOCK\r
65 HOLD:     MOVE ITEM, JOB                ;NO. OF THIS JOB\r
66           PUSHJ PDP,WAIT1               ;WAIT UNTIL TTY FINISHED\r
67 \r
68 HOLDSB:   PUSHJ PDP,CRLF\r
69           PUSHJ PDP, TTYSTR     ;START UP TTY TO PRINT ERROR MESSAGE\r
70 EXTERNAL CRLF\r
71 \r
72 ;ROUTINE TO STOP USER AND FLAG AS ERROR STOP\r
73 ;CALL:    MOVE ITEM, JOB NUMBER\r
74 ;         PUSHJ PDP,ESTOP\r
75 \r
76 \r
77 INTERNAL ESTOP\r
78 \r
79 ESTOP:    MOVSI TAC,JERR                ;SET ERROR BIT IN JOB STATUS\r
80           IORM TAC, JBTSTS(ITEM)\r
81           JRST STOP1\r
82 \f\r
83 \r
84 ,BLOCK TRANSFER PROGRAM OVER LOADER\r
85 \r
86           INTERNAL LDRBLT\r
87           EXTERNAL USRREL\r
88 \r
89           PGADR=2               ;AC CONTAINING BEGINNING OF PROGRAM(LOA\r
90 \r
91 LDRBLT:   PUSHJ PDP,IORELS\r
92           HRRZ TAC, PGADR (JDAT)        ;ADD OFFSET TO SYMBOL TABLE P\r
93           SETZM PGADR(JDAT)     ;THEN CLEAR SO SYSMAK WILL STILL WORK\r
94           HRRZ DAT,PROG\r
95           ADD DAT,TAC\r
96           ADDM TAC,JOBSYM(DAT)\r
97           HRL DAT,PROG\r
98           HLRZ TAC,JOBSA(DAT)\r
99           CAMLE TAC,USRREL      ;IS HIGHEST DESTINATION STILL IN USER A\r
100           MOVE TAC,USRREL       ;NO. MAKE SURE IT IS.\r
101           MOVSS DAT\r
102           ADD TAC,DAT\r
103           ADD DAT,[XWD 30,30]   ;MOVE PROGRAM DOWN\r
104           BLT DAT,(TAC)\r
105           MOVE TAC,JOBDDT(JDAT)\r
106           MOVEM TAC,USRDDT\r
107           PUSHJ PDP,SETUSR\r
108           PUSHJ PDP,TTYFNU\r
109           MOVEI TAC1,LDRMES\r
110           PUSHJ PDP,MESPNT\r
111           JRST HOLD\r
112 \r
113 LDRMES:   ASCIZ /\r
114 LOADER FINISHED\r
115 /\r
116 \f\r
117 \r
118 INTERNAL STOP1, STOP2, CONT1, START1\r
119 \r
120 PION=200\r
121 PIOFF=400\r
122 \r
123 ;ROUTINE TO PUT CURRENT JOB IN IO WAIT\r
124 ;ROUTINE TO STOP CURRENT JOB\r
125 ;MAY BE CALLED FROM ANY LEVEL\r
126 ;CALL;    PUSHJ PDP,STOP0\r
127 ;         RETURN                ;RETURN HERE IMMEDIATELY, IF CALLED FRO\r
128 ;PRIORITY CHANNEL THAN CLOCK. OTHERWISE RETURN WHEN JOB IS RUNABLE AG\r
129 \r
130 INTERNAL STOP0\r
131 \r
132 STOP0:    MOVE ITEM, JOB                ;CURRENT JOB NUMBER\r
133 \r
134 ;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED\r
135 ;CALL:\r
136 ;          MOVE ITEM, JOB NUMBER\r
137 ;          PUSHJ PDP, STOP1\r
138 ;          EXIT     ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER\r
139 ;PRIORITY CHANNEL THAN CLOCK, OTHERWISE RETURN WHEN JOB IC RUNABLE\r
140 ;CALLED WHEN CONTROL C TYPED OR ON ERROR MESSAGES\r
141 \r
142 STOP1:     MOVSI TAC, RUN\r
143            CONO PI, PIOFF       ;DONE AT INTERUPT LEVEL HIGHER THAN DT\r
144            TDNN TAC, JBTSTS(ITEM)               ;IS RUN BIT ON IN JOB STATUS\r
145            JRST STOPA           ;NO\r
146            ANDCAB TAC, JBTSTS(ITEM)             ;YES, SO CLEAR IT\r
147            CONO PI, PION\r
148            TLNE TAC, DTW        ;WAITING TO USE DECTAPE\r
149            SOS DTREQ ;YES, REDUCE REQUEST COUNT\r
150            TLNE TAC, DCW        ;DATA CONTROL\r
151            SOS DCREQ\r
152            TLNE TAC,MTW         ;MAG TAPE\r
153            SOS MTREQ\r
154 STOPA:     CONO PI, PION        ;MAKE SURE PI ON\r
155            SKIPE SCHEDF         ;IS CLOCK IN THE MIDDLE OF SCHEDULING\r
156            JRST STOP2           ;YES, MAKE SURE THIS JOB WONT RUN\r
157            CAME ITEM, JOB       ;NO, IS THIS JOB CURRENT USER\r
158            POPJ PDP,            ;NO\r
159                                 ;YES, MAKE CLOCK RESCHEDULE\r
160 \r
161 ;ROUTINE TO CAUSE CLOCK TO RESCHEDULE\r
162 ;CALL :\r
163 ;          PUSHJ PDP, STOP2\r
164 ;          EXIT         ;RETURN WHEN JOB RUNABLE AGAIN\r
165 \r
166 EXTERNAL PICLK\r
167 \r
168 STOP2:     CONO PI, PIOFF       ;PREVENT CLOCK INTERRUPT\r
169            SETOM STOPU          ;SET FLAG FOR CLOCK ROUTINE\r
170            CONO PI,PICLK        ;REQUEST CLOCK INTERRUPT AND TURN PI ON\r
171                                 ;CLOCK WILL TRAP IMMEDIATELY IF AT UUO\r
172            POPJ PDP,            ;RETURN HERE WHEN JOB RUNABLE AGAIN\r
173 \f\r
174 \r
175 ;SUBROUTINE TO SETUP A MONITOR JOB TO BE RUN\r
176 ;JOB MUST HAVE CORE ASSIGNED\r
177 ;CALL:    MOVE ITEM, JOB NUMBER\r
178 ;         HRRI TAC1, ADDRESS OF MONITOR JOB(A SUBROUTINE)\r
179 ;         HRLI TAC1, RETURN ADDRESS WHEN JOB FINISHED\r
180 ;         PUSHJ PDP, MONJOB\r
181 ;         RETURN IMMEDIATELY IF CALLED FROM CLOCK LEV OR HIGHER\r
182 \r
183 ;ALL ACS WILL BE SAVED FOR THE MONITOR JOB\r
184 \r
185 INTERNAL MONJOB\r
186 EXTERNAL JOBDAC,JOBDHI,JOBPDP,MJOBPD,JOBPDL,JBTADR\r
187 \r
188 MONJOB:   PUSH PDP, TAC1        ;SAVE ARG.\r
189           HRRZ JDAT,JBTADR(ITEM)        ;ADDRESS OF JOBS DATA AREA\r
190           MOVEI TAC1, JOBDAC(JDAT)      ;SAVE 0-17 IN DUMP ACS\r
191           BLT TAC1, JOBDHI(JDAT)        ;IN JOB DATA AREA\r
192           MOVSI TAC1,MJOBPD     ;SET UP PD LIST IN JOB DATA AREA\r
193           HRRI TAC1, JOBPDL(JDAT)\r
194           HLRZ TAC, (PDP)       ;WITH RETURN AS FIRST ITEM\r
195           PUSH TAC1, TAC\r
196           MOVEI TAC, JOBDAC(JDAT)\r
197           MOVEM TAC1,PDP(TAC)\r
198           POP PDP, TAC1         ;SET TO RUN\r
199           ANDI TAC1, 777777     ;FALL INTO STARTU\r
200 \r
201 ;ROUTINE TO START A JOB AND LEAVE CONSOLE IN COMMAND MODE\r
202 ;CALL:    MOVE TAC1, START PC\r
203 ;         MOVE ITEM, JOB NUMBER\r
204 ;         PUSHJ PDP, STARTU\r
205 ;         RETURN IMMEDIATELY\r
206 INTERNAL STARTM\r
207 EXTERNAL TTYURC\r
208 \r
209 STARTM:   PUSHJ PDP, START1\r
210           JRST TTYURC\r
211 \r
212 ;START WITH TTY IN USER MODE\r
213 \r
214 INTERNAL STARTU\r
215 EXTERNAL TTYSET\r
216 \r
217 STARTU:   PUSHJ PDP,START1\r
218           JRST TTYSET           ;SET SCANNER TO CALL SETRUN WHEN\r
219                                 ;CR-LF AND INITIALIZE TTY\r
220 \r
221 INTERNAL CONTM\r
222 EXTERNAL TTYURC\r
223 \r
224 CONTM:    JRST TTYURC\r
225 \r
226 ;ROUTINE TO CONTINUE A JOB FROM COMMAND MODE\r
227 ;CALL:    MOVE ITEM, JOB NUMBER\r
228 ;         PUSHJ PDP, CONTU\r
229 ;         RETURN IMMEDIATELY\r
230 INTERNAL CONTU\r
231 EXTERNAL TTYURC\r
232 \r
233 CONTU:    JRST TTYURC           ;SET SCANNER TO CALL SETRUN WHEN CR-LF\r
234 \f\r
235 \r
236 ;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN\r
237 ;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS\r
238 ;CALL:    MOVE TAC1,STARTING PC\r
239 ;         MOVE ITEM, JOB NUMBER\r
240 ;         MOVE JDAT, ADDRESS OF JOBS DATA AREA(THERE MUST BE ONE)\r
241 ;         PUSHJ PDP, START1\r
242           ;         EXIT        RETURN HERE IMMEDIATELY\r
243 \r
244 START1:   MOVE TAC,JOBPC(JDAT)          ;GET OLD PC\r
245           MOVEM TAC1,JOBPC(JDAT)        ;STORE NEW PC\r
246           TLNE TAC1,USRMOD              ;IS NEW PC IN USER AREA?\r
247           TLNE TAC,USRMOD               ;YES, WAS OLD PC IN USER AREA\r
248           JRST START2                   ;YES,DUMP ACS ARE HIS\r
249           MOVSI TAC1,(JDAT)             ;NO, UUO ACS ARE HIS\r
250           HRRI TAC1,JOBDAC(JDAT)        ;MOVE THEM TO DUMP ACS\r
251           BLT TAC1,JOBDHI(JDAT)\r
252 START2:   MOVSI TAC1,JERR+DCW+DTW+MTW+JIOW      ;CLEAR WAIT BITS\r
253           ANDCAM TAC, JBTSTS(ITEM)      ;IN JOB STATUS WORD\r
254 \r
255 ;ROUTINE TO CONTINUE ANY JOB AT CURRENT PC\r
256 ;CALL:\r
257 ;         MOVE ITEM, JOB NUMBER\r
258 ;         PUSHJ PDP, CONT1\r
259 ;         EXIT      RETURN IMMEDIATELY\r
260 \r
261 CONT1:    POPJ PDP,\r
262 \f\r
263 \r
264 ;ROUTINE TO SET JOB STATUS RUN BIT\r
265 ;CALL:    MOVE ITEM,JOB NUMBER\r
266 ;         PUSHJ PDP,SETRUN\r
267 \r
268           INTERNAL SETRUN\r
269 SETRUN:   MOVSI TAC,RUN\r
270           IORB TAC,JBTSTS(ITEM)\r
271           TLNN TAC,DCW          ;IS JOB WAITING FOR DATA CONTROL?\r
272           JRST CONT2            ;NO\r
273           AOSG DCREQ            ;YES, INCREMENT REQUEST COUNT\r
274           SETOM DCAVAL          ;AND SET DC AS AVAIL IF NOT IN USE\r
275 CONT2:    TLNN TAC,DTW          ;DECTAPE?\r
276           JRST CONT3            ;NO\r
277           AOSG DTREQ\r
278           SETOM DTAVAL\r
279 CONT3:    TLNN TAC,MTW          ;MAG TAPE?\r
280           JRST CONT4\r
281           AOSG MTREQ\r
282           SETOM MTAVAL\r
283 CONT4:    TLNE TAC,IOWS         ;IO WAIT SATISFIED?\r
284           AOS IOCOMP            ;YES\r
285           MOVEI TAC,QUANT1      ;SET TIME TO RUN FOR STRAIGHT QUEUE COM\r
286           HRRM TAC,JBTSTS(ITEM)         ;RESPONSE IS FINISHED\r
287           SKIPE JOB ;IS NULL JOB RUNNING?\r
288           POPJ PDP,             ;NO\r
289           JRST STOP2                    ;YES, RESCHEDULE\r
290 \f\r
291 \r
292 ,ROUTINE TO INIATE A WAIT FOR MAG TAPE. DECTAPE, AND DATA CONTROL AC\r
293           INTERNAL MTWAIT\r
294 MTWAIT:   PUSH PDP,TAC1\r
295           HRLZI TAC1,MTW\r
296 DVWAIT:   PUSH PDP, TAC\r
297           MOVE TAC,JOB\r
298           IORM TAC1,JBTSTS(TAC)\r
299           PUSHJ PDP,STOP2\r
300           POP PDP,TAC\r
301           POP PDP,TAC1\r
302           POPJ PDP,\r
303           INTERNAL DTWAIT\r
304 DTWAIT:   PUSH PDP,TAC1\r
305           HRLZI TAC1,DTW\r
306           JRST DVWAIT\r
307           INTERNAL DCWAIT\r
308 DCWAIT:   PUSH PDP,TAC1\r
309           HRLZI TAC1,DCW\r
310           JRST DVWAIT\r
311           INTERNAL DVWAIT\r
312 \f\r
313 \r
314 \r
315 ,DEC 06 00 EX JOB L PT PRE 02 SETIOD\r
316 ,H.R. MORSE    64-12-26\r
317 ,CALLING SEQUENCE\r
318 ,     PUSHJ PDP, SETIOD\r
319 ,     EXIT              ALWAYS RETURNS HERE\r
320 ,SETS THEBIT (IOWS:=1) IN THE JOB STATUS WORD (JBTSTS)\r
321 ,INFORMING THE SYSTEM THAT AN I/O WAIT HAS BEEN COMPLETED\r
322 ,AND THE JOB IS READY TO RUN AGAIN.\r
323 ,MONITOR INTERFACE\r
324 ,     STORAGE: 6\r
325 ,     SYMBOLS SET/USED:\r
326 ,          ACCUMULATORS:   DEVDAT U      TAC S/U\r
327 ,                          PDP U         TAC1 S/U\r
328 ,          DEVICE DATA BLOCK: DEVCHR U\r
329 ,          SYSTEM DATA STORAGE: JBTSTS S/U\r
330 ,          JOB STATUS WORD:    IOWS S\r
331           INTERNAL SETIOD\r
332 \r
333 SETIOD:   AOS IOCOMP\r
334           LDB TAC,PJOBN\r
335           MOVSI TAC1, IOWS      ;SET IO-WAIT SATISFIED BIT\r
336           IORM TAC1, JBTSTS(TAC)\r
337           MOVSI TAC1, JIOW              ;CLEAR JOB IO-WAIT BIT\r
338           ANDCAM TAC1, JBTSTS(TAC)\r
339           SKIPN JOB             ;IS NULL JOB RUNNING\r
340           JRST STOP2                    ;YES, FORCE CLOCK TO RE-SCHED\r
341           POPJ PDP,;                        RETURN\r
342 \f\r
343 \r
344 \r
345 ;SET CURRENT JOB AREA IN SYSTEM AREA\r
346 \r
347           INTERNAL SETUSR\r
348 \r
349 SETUSR:   HRRI TAC,USRLO1\r
350           HRLI TAC,USRLO\r
351           SETZM USRLO\r
352           BLT TAC,USRHI\r
353           MOVSI TAC,MJOBPD\r
354           HRRI TAC,JOBPDL\r
355           MOVEM TAC,USRPDP\r
356           MOVE JDAT,JOBDAT\r
357           HLR TAC,JOBSA(JDAT)\r
358           HRRM TAC,JOBFF(JDAT)\r
359           POPJ PDP,\r
360 \f\r
361 \r
362 ,DEC 06 00 EX COM L PT PRE 02 WAIT1,WSYNC\r
363 ,H.R. MORSE   64-12-26\r
364 ,CALLING SEQUENCE\r
365 ,     PUSHJ PDP, WAIT1\r
366 ,     EXIT              ALWAYS RETURNS HERE\r
367 \r
368 ,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE, SET\r
369 ,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE\r
370 ,JUMP IS MADE, IN WHICH CHASEIT SETS IOW:=0 AND RETURNS TO EXIT.\r
371 ,ON LEAVING THE WAIT STAT, RETURNS TO EXIT.\r
372 ,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING\r
373 ,CALLING SEQUENCE\r
374 ,     PUSHJ PDP, WSYNC\r
375 ,     EXIT              ALWAYS RETURNS HERE\r
376 ,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0.\r
377 ,MONITOR INTERFACE\r
378 ,     STORAGE:          13\r
379 ,     ROUTINES CALLED:  WAIT\r
380 ,     SYMBOLS SET/USED: \r
381 ,        ACCUMULATORS:     DEVDAT U     PDP U\r
382 ,                          IOS S/U      TAC S/U\r
383 ,     DEVICE DATA BLOCK:   DEVIOS S/U\r
384 ,     IO STATUS WORD:      IOACT U\r
385 ,                          IOW S/U\r
386 \f\r
387 \r
388           INTERN WAIT1, WSYNC\r
389 \r
390 ; WAIT1 WAITS UNTIL DEVICE IS COMPLETELY INACTIVE BEFORE RETURNING\r
391 WAIT1:    MOVE IOS,DEVIOS(DEVDAT)\r
392           TRNN IOS, IOACT               ;IS DEVICE ACTIVE? (IOACT=1?)\r
393           POPJ PDP,;                    RETURN\r
394           PUSHJ PDP,WSYNC;              WAIT\r
395           JRST WAIT1\r
396 \r
397 ;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE\r
398 ;IE  UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED\r
399 ;DEVDAT MUST BE SET UP\r
400 \r
401 PION=200\r
402 PIOFF=400\r
403 \r
404 WSYNC:    REPEAT 0,< PUSH PDP, TAC      ;MUST THESE BE SAVED?\r
405  PUSH PDP, TAC1\r
406  PUSH PDP, DAT>\r
407         \r
408           MOVSI IOS, IOW\r
409           MOVSI AC1, JIOW\r
410           MOVE AC2, JOB\r
411           MOVEI AC3, IOACT\r
412           CONO PI, PIOFF                ;TURN PI OFF\r
413           TDNN AC3, DEVIOS(DEVDAT)      ;IS THE DEVICE ACTIVE?\r
414           JRST WSYNC1                   ;NO\r
415           IORM IOS, DEVIOS(DEVDAT)      ;YES, SET DEVICE IO-WAIT BIT\r
416           IORM AC1, JBTSTS(AC2)         ;AND JOB IO-WAIT BIT\r
417           CONO PI, PION                 ;TURN PI ON\r
418           PUSHJ PDP, STOP2              ;STOP THIS USER BY FORCING CL\r
419                                 ;RETURN WHEN IO-WAIT FINISHED\r
420 WSYNC1:   CONO PI, PION\r
421           ANDCAB IOS, DEVIOS(DEVDAT)    ;CLEAR DEVICE IO-WAIT BIT\r
422 REPEAT 0,< POP PDP, DAT\r
423  POP PDP, TAC1\r
424  POP PDP, TAC>\r
425 \r
426           POPJ PDP,\r
427 \r
428           END,\r