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
15 EXTERNAL IORELS,TTYFNU,MESPNT,IOKILL
\r
17 EXIT: PUSHJ PDP,IORELS ;RELEASE ALL DEVICES
\r
21 JRST HOLD ;STOP THIS USER IMMEDIATELY
\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
35 ;COMMON ERROR HANDLING ROUTINES
\r
36 ;DEVDAT MUST BE SET UP TO TTY DDB ON WHICH TO PRINT ERROR MESSAGE
\r
38 ;HERE ON ERROR DETECTED AT INTERRUPT SERVICE LEVEL
\r
39 ;0(PDP) CONTAINS ADR. OF DEVICE DATA BLOCK CAUSING ERROR
\r
41 ;CALL MOVE TAC, PI CHANNEL NO DETECTING ERROR
\r
44 INTERNAL HOLDI,HOLD,HOLDI1
\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
51 JRST CHNTAB(TAC) ;GO RESTORE ACS AND DISMISS CHANNEL
\r
53 CHNTAB: JRST RSCHED ;INTERRUPT ON CLOCK CHANNEL,RESCHEDULE
\r
62 ;HERE ON ERROR FROM UUO LEVEL. ERROR MESSAGE ALREADY IN TTY BUFFER
\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
68 HOLDSB: PUSHJ PDP,CRLF
\r
69 PUSHJ PDP, TTYSTR ;START UP TTY TO PRINT ERROR MESSAGE
\r
72 ;ROUTINE TO STOP USER AND FLAG AS ERROR STOP
\r
73 ;CALL: MOVE ITEM, JOB NUMBER
\r
79 ESTOP: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS
\r
80 IORM TAC, JBTSTS(ITEM)
\r
84 ,BLOCK TRANSFER PROGRAM OVER LOADER
\r
89 PGADR=2 ;AC CONTAINING BEGINNING OF PROGRAM(LOA
\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
96 ADDM TAC,JOBSYM(DAT)
\r
99 CAMLE TAC,USRREL ;IS HIGHEST DESTINATION STILL IN USER A
\r
100 MOVE TAC,USRREL ;NO. MAKE SURE IT IS.
\r
103 ADD DAT,[XWD 30,30] ;MOVE PROGRAM DOWN
\r
105 MOVE TAC,JOBDDT(JDAT)
\r
118 INTERNAL STOP1, STOP2, CONT1, START1
\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
132 STOP0: MOVE ITEM, JOB ;CURRENT JOB NUMBER
\r
134 ;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED
\r
136 ; MOVE ITEM, JOB NUMBER
\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
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
146 ANDCAB TAC, JBTSTS(ITEM) ;YES, SO CLEAR IT
\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
152 TLNE TAC,MTW ;MAG TAPE
\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
159 ;YES, MAKE CLOCK RESCHEDULE
\r
161 ;ROUTINE TO CAUSE CLOCK TO RESCHEDULE
\r
164 ; EXIT ;RETURN WHEN JOB RUNABLE AGAIN
\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
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
183 ;ALL ACS WILL BE SAVED FOR THE MONITOR JOB
\r
186 EXTERNAL JOBDAC,JOBDHI,JOBPDP,MJOBPD,JOBPDL,JBTADR
\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
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
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
209 STARTM: PUSHJ PDP, START1
\r
212 ;START WITH TTY IN USER MODE
\r
217 STARTU: PUSHJ PDP,START1
\r
218 JRST TTYSET ;SET SCANNER TO CALL SETRUN WHEN
\r
219 ;CR-LF AND INITIALIZE TTY
\r
226 ;ROUTINE TO CONTINUE A JOB FROM COMMAND MODE
\r
227 ;CALL: MOVE ITEM, JOB NUMBER
\r
229 ; RETURN IMMEDIATELY
\r
233 CONTU: JRST TTYURC ;SET SCANNER TO CALL SETRUN WHEN CR-LF
\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
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
255 ;ROUTINE TO CONTINUE ANY JOB AT CURRENT PC
\r
257 ; MOVE ITEM, JOB NUMBER
\r
259 ; EXIT RETURN IMMEDIATELY
\r
264 ;ROUTINE TO SET JOB STATUS RUN BIT
\r
265 ;CALL: MOVE ITEM,JOB NUMBER
\r
269 SETRUN: MOVSI TAC,RUN
\r
270 IORB TAC,JBTSTS(ITEM)
\r
271 TLNN TAC,DCW ;IS JOB WAITING FOR DATA CONTROL?
\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
279 CONT3: TLNN TAC,MTW ;MAG TAPE?
\r
283 CONT4: TLNE TAC,IOWS ;IO WAIT SATISFIED?
\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
289 JRST STOP2 ;YES, RESCHEDULE
\r
292 ,ROUTINE TO INIATE A WAIT FOR MAG TAPE. DECTAPE, AND DATA CONTROL AC
\r
294 MTWAIT: PUSH PDP,TAC1
\r
296 DVWAIT: PUSH PDP, TAC
\r
298 IORM TAC1,JBTSTS(TAC)
\r
304 DTWAIT: PUSH PDP,TAC1
\r
308 DCWAIT: PUSH PDP,TAC1
\r
315 ,DEC 06 00 EX JOB L PT PRE 02 SETIOD
\r
316 ,H.R. MORSE 64-12-26
\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
325 , SYMBOLS SET/USED:
\r
326 , ACCUMULATORS: DEVDAT U TAC 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
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
345 ;SET CURRENT JOB AREA IN SYSTEM AREA
\r
349 SETUSR: HRRI TAC,USRLO1
\r
357 HLR TAC,JOBSA(JDAT)
\r
358 HRRM TAC,JOBFF(JDAT)
\r
362 ,DEC 06 00 EX COM L PT PRE 02 WAIT1,WSYNC
\r
363 ,H.R. MORSE 64-12-26
\r
366 , EXIT ALWAYS RETURNS HERE
\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
375 , EXIT ALWAYS RETURNS HERE
\r
376 ,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0.
\r
379 , ROUTINES CALLED: WAIT
\r
380 , SYMBOLS SET/USED:
\r
381 , ACCUMULATORS: DEVDAT U PDP U
\r
383 , DEVICE DATA BLOCK: DEVIOS S/U
\r
384 , IO STATUS WORD: IOACT U
\r
388 INTERN WAIT1, WSYNC
\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
394 PUSHJ PDP,WSYNC; WAIT
\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
404 WSYNC: REPEAT 0,< PUSH PDP, TAC ;MUST THESE BE SAVED?
\r
412 CONO PI, PIOFF ;TURN PI OFF
\r
413 TDNN AC3, DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE?
\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