TITLE RUNCSS - RUN CONTROL SUBROUTINES SUBTTL T. HASTINGS 8-16-65 EXTERNAL APRCHN,APRCHL,CH6SAC,JBTADR,JOB,JOBAC,JOBDAT,JOBN EXTERNAL JOBPDP,USRDDT,USRPDP,JOBDDT EXTERNAL IORELS,JBTSTS,JOBADR,JOBCDP,JOBPC,JOBREL,JOBSA,JOBSYM EXTERNAL MESPNT,QUANT1,JOBDAC,TTYSTR,STOPU,SCHEDF EXTERNAL UXIT,IOCOMP,DCREQ,DCAVAL,DTREQ,DTAVAL,MTREQ,MTAVAL EXTERNAL CH1XIT,CH2XIT,CH3XIT,CH4XIT,CH5XIT,CH6XIT,CH7XIT EXTERNAL JOBFF,MJOBPD,JOBPDL,IOCOMP,PJOBN,USRLO,USRLO1,USRHI EXTERNAL TTYFNU,RSCHED ;EXIT UUO ROUTINE INTERNAL EXIT EXTERNAL IORELS,TTYFNU,MESPNT,IOKILL EXIT: PUSHJ PDP,IORELS ;RELEASE ALL DEVICES PUSHJ PDP,TTYFNU MOVEI TAC1,EXMESS PUSHJ PDP,MESPNT JRST HOLD ;STOP THIS USER IMMEDIATELY EXMESS: ASCIZ / EXIT / ;RESET UUO ROUTINE INTERNAL RESET RESET: PUSHJ PDP,IOKILL ;RELEASE ALL DEVICES PUSHJ PDP,SETUSR ;CLEAR PART OF JOB DATA AREA JRST UXIT ;AND RETURN TO CALLER ;COMMON ERROR HANDLING ROUTINES ;DEVDAT MUST BE SET UP TO TTY DDB ON WHICH TO PRINT ERROR MESSAGE ;HERE ON ERROR DETECTED AT INTERRUPT SERVICE LEVEL ;0(PDP) CONTAINS ADR. OF DEVICE DATA BLOCK CAUSING ERROR ;CALL MOVE TAC, PI CHANNEL NO DETECTING ERROR ; JRST HOLDI INTERNAL HOLDI,HOLD,HOLDI1 HOLDI: MOVE TAC1, 0(PDP) ;DEVICE DATA BLOCK LDB ITEM, [POINT 9, DEVCHR(TAC1), 8] ;GET JOB NUMBER HOLDI1: PUSH PDP, TAC ;SAVE PI CHANNEL NO. PUSHJ PDP, HOLDSB POP PDP, TAC JRST CHNTAB(TAC) ;GO RESTORE ACS AND DISMISS CHANNEL CHNTAB: JRST RSCHED ;INTERRUPT ON CLOCK CHANNEL,RESCHEDULE JRST CH1XIT JRST CH2XIT JRST CH3XIT JRST CH4XIT JRST CH5XIT JRST CH6XIT JRST CH7XIT ;HERE ON ERROR FROM UUO LEVEL. ERROR MESSAGE ALREADY IN TTY BUFFER ;DAT=BYTE POINTER TO END OF MESSAGE; DEVDAT=TTY DEV. DATA BLOCK HOLD: MOVE ITEM, JOB ;NO. OF THIS JOB PUSHJ PDP,WAIT1 ;WAIT UNTIL TTY FINISHED HOLDSB: PUSHJ PDP,CRLF PUSHJ PDP, TTYSTR ;START UP TTY TO PRINT ERROR MESSAGE EXTERNAL CRLF ;ROUTINE TO STOP USER AND FLAG AS ERROR STOP ;CALL: MOVE ITEM, JOB NUMBER ; PUSHJ PDP,ESTOP INTERNAL ESTOP ESTOP: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS IORM TAC, JBTSTS(ITEM) JRST STOP1 ,BLOCK TRANSFER PROGRAM OVER LOADER INTERNAL LDRBLT EXTERNAL USRREL PGADR=2 ;AC CONTAINING BEGINNING OF PROGRAM(LOA LDRBLT: PUSHJ PDP,IORELS HRRZ TAC, PGADR (JDAT) ;ADD OFFSET TO SYMBOL TABLE P SETZM PGADR(JDAT) ;THEN CLEAR SO SYSMAK WILL STILL WORK HRRZ DAT,PROG ADD DAT,TAC ADDM TAC,JOBSYM(DAT) HRL DAT,PROG HLRZ TAC,JOBSA(DAT) CAMLE TAC,USRREL ;IS HIGHEST DESTINATION STILL IN USER A MOVE TAC,USRREL ;NO. MAKE SURE IT IS. MOVSS DAT ADD TAC,DAT ADD DAT,[XWD 30,30] ;MOVE PROGRAM DOWN BLT DAT,(TAC) MOVE TAC,JOBDDT(JDAT) MOVEM TAC,USRDDT PUSHJ PDP,SETUSR PUSHJ PDP,TTYFNU MOVEI TAC1,LDRMES PUSHJ PDP,MESPNT JRST HOLD LDRMES: ASCIZ / LOADER FINISHED / INTERNAL STOP1, STOP2, CONT1, START1 PION=200 PIOFF=400 ;ROUTINE TO PUT CURRENT JOB IN IO WAIT ;ROUTINE TO STOP CURRENT JOB ;MAY BE CALLED FROM ANY LEVEL ;CALL; PUSHJ PDP,STOP0 ; RETURN ;RETURN HERE IMMEDIATELY, IF CALLED FRO ;PRIORITY CHANNEL THAN CLOCK. OTHERWISE RETURN WHEN JOB IS RUNABLE AG INTERNAL STOP0 STOP0: MOVE ITEM, JOB ;CURRENT JOB NUMBER ;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED ;CALL: ; MOVE ITEM, JOB NUMBER ; PUSHJ PDP, STOP1 ; EXIT ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER ;PRIORITY CHANNEL THAN CLOCK, OTHERWISE RETURN WHEN JOB IC RUNABLE ;CALLED WHEN CONTROL C TYPED OR ON ERROR MESSAGES STOP1: MOVSI TAC, RUN CONO PI, PIOFF ;DONE AT INTERUPT LEVEL HIGHER THAN DT TDNN TAC, JBTSTS(ITEM) ;IS RUN BIT ON IN JOB STATUS JRST STOPA ;NO ANDCAB TAC, JBTSTS(ITEM) ;YES, SO CLEAR IT CONO PI, PION TLNE TAC, DTW ;WAITING TO USE DECTAPE SOS DTREQ ;YES, REDUCE REQUEST COUNT TLNE TAC, DCW ;DATA CONTROL SOS DCREQ TLNE TAC,MTW ;MAG TAPE SOS MTREQ STOPA: CONO PI, PION ;MAKE SURE PI ON SKIPE SCHEDF ;IS CLOCK IN THE MIDDLE OF SCHEDULING JRST STOP2 ;YES, MAKE SURE THIS JOB WONT RUN CAME ITEM, JOB ;NO, IS THIS JOB CURRENT USER POPJ PDP, ;NO ;YES, MAKE CLOCK RESCHEDULE ;ROUTINE TO CAUSE CLOCK TO RESCHEDULE ;CALL : ; PUSHJ PDP, STOP2 ; EXIT ;RETURN WHEN JOB RUNABLE AGAIN EXTERNAL PICLK STOP2: CONO PI, PIOFF ;PREVENT CLOCK INTERRUPT SETOM STOPU ;SET FLAG FOR CLOCK ROUTINE CONO PI,PICLK ;REQUEST CLOCK INTERRUPT AND TURN PI ON ;CLOCK WILL TRAP IMMEDIATELY IF AT UUO POPJ PDP, ;RETURN HERE WHEN JOB RUNABLE AGAIN ;SUBROUTINE TO SETUP A MONITOR JOB TO BE RUN ;JOB MUST HAVE CORE ASSIGNED ;CALL: MOVE ITEM, JOB NUMBER ; HRRI TAC1, ADDRESS OF MONITOR JOB(A SUBROUTINE) ; HRLI TAC1, RETURN ADDRESS WHEN JOB FINISHED ; PUSHJ PDP, MONJOB ; RETURN IMMEDIATELY IF CALLED FROM CLOCK LEV OR HIGHER ;ALL ACS WILL BE SAVED FOR THE MONITOR JOB INTERNAL MONJOB EXTERNAL JOBDAC,JOBDHI,JOBPDP,MJOBPD,JOBPDL,JBTADR MONJOB: PUSH PDP, TAC1 ;SAVE ARG. HRRZ JDAT,JBTADR(ITEM) ;ADDRESS OF JOBS DATA AREA MOVEI TAC1, JOBDAC(JDAT) ;SAVE 0-17 IN DUMP ACS BLT TAC1, JOBDHI(JDAT) ;IN JOB DATA AREA MOVSI TAC1,MJOBPD ;SET UP PD LIST IN JOB DATA AREA HRRI TAC1, JOBPDL(JDAT) HLRZ TAC, (PDP) ;WITH RETURN AS FIRST ITEM PUSH TAC1, TAC MOVEI TAC, JOBDAC(JDAT) MOVEM TAC1,PDP(TAC) POP PDP, TAC1 ;SET TO RUN ANDI TAC1, 777777 ;FALL INTO STARTU ;ROUTINE TO START A JOB AND LEAVE CONSOLE IN COMMAND MODE ;CALL: MOVE TAC1, START PC ; MOVE ITEM, JOB NUMBER ; PUSHJ PDP, STARTU ; RETURN IMMEDIATELY INTERNAL STARTM EXTERNAL TTYURC STARTM: PUSHJ PDP, START1 JRST TTYURC ;START WITH TTY IN USER MODE INTERNAL STARTU EXTERNAL TTYSET STARTU: PUSHJ PDP,START1 JRST TTYSET ;SET SCANNER TO CALL SETRUN WHEN ;CR-LF AND INITIALIZE TTY INTERNAL CONTM EXTERNAL TTYURC CONTM: JRST TTYURC ;ROUTINE TO CONTINUE A JOB FROM COMMAND MODE ;CALL: MOVE ITEM, JOB NUMBER ; PUSHJ PDP, CONTU ; RETURN IMMEDIATELY INTERNAL CONTU EXTERNAL TTYURC CONTU: JRST TTYURC ;SET SCANNER TO CALL SETRUN WHEN CR-LF ;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN ;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS ;CALL: MOVE TAC1,STARTING PC ; MOVE ITEM, JOB NUMBER ; MOVE JDAT, ADDRESS OF JOBS DATA AREA(THERE MUST BE ONE) ; PUSHJ PDP, START1 ; EXIT RETURN HERE IMMEDIATELY START1: MOVE TAC,JOBPC(JDAT) ;GET OLD PC MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC TLNE TAC1,USRMOD ;IS NEW PC IN USER AREA? TLNE TAC,USRMOD ;YES, WAS OLD PC IN USER AREA JRST START2 ;YES,DUMP ACS ARE HIS MOVSI TAC1,(JDAT) ;NO, UUO ACS ARE HIS HRRI TAC1,JOBDAC(JDAT) ;MOVE THEM TO DUMP ACS BLT TAC1,JOBDHI(JDAT) START2: MOVSI TAC1,JERR+DCW+DTW+MTW+JIOW ;CLEAR WAIT BITS ANDCAM TAC, JBTSTS(ITEM) ;IN JOB STATUS WORD ;ROUTINE TO CONTINUE ANY JOB AT CURRENT PC ;CALL: ; MOVE ITEM, JOB NUMBER ; PUSHJ PDP, CONT1 ; EXIT RETURN IMMEDIATELY CONT1: POPJ PDP, ;ROUTINE TO SET JOB STATUS RUN BIT ;CALL: MOVE ITEM,JOB NUMBER ; PUSHJ PDP,SETRUN INTERNAL SETRUN SETRUN: MOVSI TAC,RUN IORB TAC,JBTSTS(ITEM) TLNN TAC,DCW ;IS JOB WAITING FOR DATA CONTROL? JRST CONT2 ;NO AOSG DCREQ ;YES, INCREMENT REQUEST COUNT SETOM DCAVAL ;AND SET DC AS AVAIL IF NOT IN USE CONT2: TLNN TAC,DTW ;DECTAPE? JRST CONT3 ;NO AOSG DTREQ SETOM DTAVAL CONT3: TLNN TAC,MTW ;MAG TAPE? JRST CONT4 AOSG MTREQ SETOM MTAVAL CONT4: TLNE TAC,IOWS ;IO WAIT SATISFIED? AOS IOCOMP ;YES MOVEI TAC,QUANT1 ;SET TIME TO RUN FOR STRAIGHT QUEUE COM HRRM TAC,JBTSTS(ITEM) ;RESPONSE IS FINISHED SKIPE JOB ;IS NULL JOB RUNNING? POPJ PDP, ;NO JRST STOP2 ;YES, RESCHEDULE ,ROUTINE TO INIATE A WAIT FOR MAG TAPE. DECTAPE, AND DATA CONTROL AC INTERNAL MTWAIT MTWAIT: PUSH PDP,TAC1 HRLZI TAC1,MTW DVWAIT: PUSH PDP, TAC MOVE TAC,JOB IORM TAC1,JBTSTS(TAC) PUSHJ PDP,STOP2 POP PDP,TAC POP PDP,TAC1 POPJ PDP, INTERNAL DTWAIT DTWAIT: PUSH PDP,TAC1 HRLZI TAC1,DTW JRST DVWAIT INTERNAL DCWAIT DCWAIT: PUSH PDP,TAC1 HRLZI TAC1,DCW JRST DVWAIT INTERNAL DVWAIT ,DEC 06 00 EX JOB L PT PRE 02 SETIOD ,H.R. MORSE 64-12-26 ,CALLING SEQUENCE , PUSHJ PDP, SETIOD , EXIT ALWAYS RETURNS HERE ,SETS THEBIT (IOWS:=1) IN THE JOB STATUS WORD (JBTSTS) ,INFORMING THE SYSTEM THAT AN I/O WAIT HAS BEEN COMPLETED ,AND THE JOB IS READY TO RUN AGAIN. ,MONITOR INTERFACE , STORAGE: 6 , SYMBOLS SET/USED: , ACCUMULATORS: DEVDAT U TAC S/U , PDP U TAC1 S/U , DEVICE DATA BLOCK: DEVCHR U , SYSTEM DATA STORAGE: JBTSTS S/U , JOB STATUS WORD: IOWS S INTERNAL SETIOD SETIOD: AOS IOCOMP LDB TAC,PJOBN MOVSI TAC1, IOWS ;SET IO-WAIT SATISFIED BIT IORM TAC1, JBTSTS(TAC) MOVSI TAC1, JIOW ;CLEAR JOB IO-WAIT BIT ANDCAM TAC1, JBTSTS(TAC) SKIPN JOB ;IS NULL JOB RUNNING JRST STOP2 ;YES, FORCE CLOCK TO RE-SCHED POPJ PDP,; RETURN ;SET CURRENT JOB AREA IN SYSTEM AREA INTERNAL SETUSR SETUSR: HRRI TAC,USRLO1 HRLI TAC,USRLO SETZM USRLO BLT TAC,USRHI MOVSI TAC,MJOBPD HRRI TAC,JOBPDL MOVEM TAC,USRPDP MOVE JDAT,JOBDAT HLR TAC,JOBSA(JDAT) HRRM TAC,JOBFF(JDAT) POPJ PDP, ,DEC 06 00 EX COM L PT PRE 02 WAIT1,WSYNC ,H.R. MORSE 64-12-26 ,CALLING SEQUENCE , PUSHJ PDP, WAIT1 , EXIT ALWAYS RETURNS HERE ,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE, SET ,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE ,JUMP IS MADE, IN WHICH CHASEIT SETS IOW:=0 AND RETURNS TO EXIT. ,ON LEAVING THE WAIT STAT, RETURNS TO EXIT. ,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING ,CALLING SEQUENCE , PUSHJ PDP, WSYNC , EXIT ALWAYS RETURNS HERE ,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0. ,MONITOR INTERFACE , STORAGE: 13 , ROUTINES CALLED: WAIT , SYMBOLS SET/USED: , ACCUMULATORS: DEVDAT U PDP U , IOS S/U TAC S/U , DEVICE DATA BLOCK: DEVIOS S/U , IO STATUS WORD: IOACT U , IOW S/U INTERN WAIT1, WSYNC ; WAIT1 WAITS UNTIL DEVICE IS COMPLETELY INACTIVE BEFORE RETURNING WAIT1: MOVE IOS,DEVIOS(DEVDAT) TRNN IOS, IOACT ;IS DEVICE ACTIVE? (IOACT=1?) POPJ PDP,; RETURN PUSHJ PDP,WSYNC; WAIT JRST WAIT1 ;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED ;DEVDAT MUST BE SET UP PION=200 PIOFF=400 WSYNC: REPEAT 0,< PUSH PDP, TAC ;MUST THESE BE SAVED? PUSH PDP, TAC1 PUSH PDP, DAT> MOVSI IOS, IOW MOVSI AC1, JIOW MOVE AC2, JOB MOVEI AC3, IOACT CONO PI, PIOFF ;TURN PI OFF TDNN AC3, DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE? JRST WSYNC1 ;NO IORM IOS, DEVIOS(DEVDAT) ;YES, SET DEVICE IO-WAIT BIT IORM AC1, JBTSTS(AC2) ;AND JOB IO-WAIT BIT CONO PI, PION ;TURN PI ON PUSHJ PDP, STOP2 ;STOP THIS USER BY FORCING CL ;RETURN WHEN IO-WAIT FINISHED WSYNC1: CONO PI, PION ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVICE IO-WAIT BIT REPEAT 0,< POP PDP, DAT POP PDP, TAC1 POP PDP, TAC> POPJ PDP, END,