TITLE COMMON - MONITOR COMMON DATA AREA AND CONFIGURATION DEFINITION - V437 SUBTTL PART 3 COMMON.MAC - T. HASTINGS/RCC TS 03 JUN 69 XP VCOMMN,437 ;PUT VERSION NUMBER IN GLOB AND LOADER STORAGE MAP REPEAT 0, < ;THE COMMON SUBPROGRAM CONSISTS OF 3 FILES ASSEMBLED TOGETHER AS ONE SUBPROGRAM: 1. S.MAC - THE USUAL SYSTEM SYMBOL DEFINITIONS ASSEMBLED WITH EVERY MONITOR SUBPROGRAM 2. CONFIG.MAC - THE CONFIGURATION DEFINITION FILE GENERATED BY THE CONFIGURATION PROGRAM (MONGEN) OR BY AN EDITOR (SEE ABOVE) 3. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME SOURCE FOR ALL CONFIGURATIONS. HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY SYMBOLS AND MACROS DEFINED IN 2. THE FOLLOWING SYMBOLS AND TABLES ARE GENERATED BELOW: A. MONITOR STARTUP LOCATIONS (140-147), HENCE LOAD THIS FIRST. B. JOB TABLES - LENGTH DEPENDENT ON MAXIMUM NUMBER OF JOBS ALLOWED C. ALL VARIABLE STORAGE NOT ASSOCIATED WITH A PARTICULAR DEVICE D. COMMON SUBROUTINE RETURNS E. COMMON BYTE POINTERS F. TABLE OF SERVICE ROUTINE INTERRUPT LOCS TO BE LINKED BY ONCE ONLY CODE G. TABLE OF DEVICE DATA BLOCK ADDRESSES AND NUMBER TO BE USED BY ONCE TO LINK THEM TOGETHER AND GENERATE MULTIPLE COPIES. H. ASSIGNMENT OF PI CHANNELS I. PI CHANNEL SAVE AND RESTORE ROUTINES J. UUO TRAP LOCATIONS 40/41, 60/61 K. SYSTEM CRASH STOP CONI'S. > ;THE FOLLOWING STANDARD SYMBOLS CAN BE SUPERCEDED BY A CUSTOMER ;HAVING PREVIOUSLY DEFINED THEM ON THE CONFIG.MAC FILE USING ;MONGEN PROGRAM IFNDEF LISTSN, ;FORCE S.MAC TO BE LISTED WITH COMMON FILE ONLY ;UNLESS 'LISTSN' DEFINED TO BE 0 WITH MONGEN IFNDEF APRSN, ;SERIAL NUMBER OF APR ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY) INTERN STDENS ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY) IFNDEF STDENS, ;STAND. == BINARY AT 556 BPI ;STDENS==D+P WHERE D AND P ARE: ;D==1(200 BPI);D== (556 BPI);D==3(800 BPI) ;P==0(ODD-BINARY PARITY);P=4(EVEN-BCD PARITY) INTERN JIFSEC ;NO. OF CLOCK TICKS(JIFFIES) PER SECOND IFNDEF JIFSEC, ;STAND.==60 JIFFIES PER SEC. XP HNGSEC,2*JIFSEC INTERN DTTRY ;NO. OF TIMES TO TRY ON DECTAPE ERRORS IFNDEF DTTRY, ;STAND.==4 TRIES INTERN MTSIZ ;SIZE OF MAGTAPE RECORDS(DATA WORDS IN BUFFER+1) IFNDEF MTSIZ, ;STAND.==128 WORDS PER BUFFER INTERN LPTSIZ ;SIZE OF LPT BUFFER(NO. OF DATA WORDS+2) IFNDEF LPTSIZ, ;STAND.==24 WORDS PER LPT BUFFER INTERN BLKQNT ;MAX. NO OF CONSECUTIVE DECTAPE BLOCKS SEARCHED BEFORE ; RESCHEDULING IF ANOTHER JOB IS WAITING TO USE CONTROL. IFNDEF BLKQNT, ;STAND.==50 DT BLOCKS SEARCHED(3 SECS.) INTERN NSPMEM ;NO OF NANO-SECONDS PER MEMORY CYCLE IFNDEF NSPMEM, ;STAND.==1760 NANO-SECONDS PER MEMORY CYCLE INTERNAL JIFSC2,JIFMIN,WDPJIF JIFSC2==JIFSEC/2 ;HALF NO. OF JIFFIES IN A SEC (FOR ROUNDING) JIFMIN==JIFSEC*^D60 ;NO., OF JIFFIES PER MINUTE WDPJIF==^D100000/NSPMEM*^D5000/JIFSEC ;NO. OF WORDS MOVED IFNDEF MINCOR, ;DISK DDB AND ACCESS ENTRY ; ALLOCATION REQUIRMENTS IN FREE CORE ;USED TO EXPAND SIZE OF MONITOR AT ONCE ONLY TIME ;32 WORDS/DDB AND 4 WORDS/ACCESS ENTRY = 36 WORDS ;ASSUME 1.5 OPEN FILE/JOB INTERN LOGSIZ IFNDEF LOGSIZ, ;MINSIZ OF VIRTUAL CORE LEFT ;AND STILL ALLOW LOGIN. MUST BE ;AT LEAST AS BIG AS LOGIN CUSP IN K. ;(STANDARD = 2K) ;SYSTEM INITIALIZATION DISPATCH TABLE, STARTING AT LOCATION 140 ;THIS SUBROUTINE MUST BE LOADED FIRST ;ROUTINE "ONCE" IS ONCE ONLY CODE. IT CONVERTS THE DATE ;AND SETS UP I/O SERVICE CHAIN, EXTERN SYSINI,SYSMAK,NULJOB,ONCE,JSR2 INTERN SYSDSP,SYSDDT COMORG=140 ;ORIGIN OF COMMON IS 140 LOC COMORG ;MAKE LISTING BE SAME AS LOADING SO IT WILL BE EASY ;TO EXAMINE SYSTEM LOCATIONS WITH CONSOLE SWITCHES ;WITHOUT NEEDING A STORAGE MAP SYSDSP: JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ONCE ONLY SYSDDT: IFG DDTN, < ;IF EXEC DDT IS LOADED..... EXTERN PATSYM JRST PATSYM ;YES, EXEC DDT(PATCH SYMBOL TABLE POINTER FIRST) > IFE DDTN, < HALT . ;NO. EXEC DDT > JRST SYSMAK ;MAKE NEW SYSTEM JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ALWAYS JEN NULJB1 ;ERROR RECOVERY JSR ONCE ;DO ONCE ONLY CODE OVER AGAIN JRST JSR2 ;BYPASS ONCE ONLY OPERATOR DIALOGUE ;(IN CASE CONSOLE TTY DOWN) SYSCRS: JRST SYSTOP ;STOP MONITOR IN CASE OF DISASTER ;SYSTEM DATA STORAGE ;SPECIAL ABSOLUTE LOCATIONS IN LOWER MEMORY INTERN SYSSNP,FORTY,NULDAT,SIXTY,NULPDL,ERRPDL,KT10A,RCXIOC,RCXCCW,DDTSYM INTERN T30SYM,RAXIOC,RAXCCW,CRSHWD RAXIOC=26 ;XWD 0,ADDRESS FOR RA-10'S DATA CHANNEL ; MUST BE EVEN AND .LT. 777 RAXCCW=RAXIOC+1 ;XWD CONTROL WORD ADDRESS,DATA ADDRESS ; STORED ON CHANNEL TERMINATION CRSHWD=30 ;NORMALLY THIS WORD WILL BE 0. IF IT IS ;ACCIDENTALLY OR PURPOSEFULLY OVERWRITTEN ;THE MONITOR WILL ATTEMPT TO SAVE THE ;AC'S AND THE STATE OF ALL DEVICES, ;[A LA 147 RESTART] KT10A=33 ;COPY OF CONTENTS OF RELOCATION AND PROTECTION ; DONE BY DATAO APR ; NEEDED BECAUSE KT10A MOD DOES NOT COME WITH ; LIGHTS FOR 2ND REG. RCXIOC=34 ;INITIAL CONTROL WORD FOR DATA CHANNEL ; (TRANSFERS CHANNEL TO SEQUENCE OF IOWD'S IN DSKINT) ; MUST BE IN EVEN LOC IN FIRST 1K OF MEMORY RCXCCW=RCXIOC+1 ;CHANNEL STORES FINAL CONTROL WORD ; HERE ON TERMINATION SYSSNP=37 ;WHEN DEPOSITED NON-ZERO,PRINTS SNAP SHOT OF SYSTEM ; ON LPT SEE LPSNAP SUBPROGRAM DDTSYM=36 ;CONTAINS ADDRESS OF POINTER TO EXEC DDT SYMBOL TABLE FORTY=40 ;PLACE WHERE UUOS ARE STORED ON TRAP NULDAT=42 ;JOB DATA AREA FOR NULL JOB (USES EXEC ; 62 THRU 101 20-36 FOR DUMP AC) ; AND ABOVE FOR PUSHDOWN LIST SIXTY=60 ;PLACE WHERE UNIMPLEMENTED INSTR. ARE STORED ON ; TRAP (PDP-10 ONLY) NULPDL=101 ;PUSH DOWN LIST FOR NULL JOB ; USES EXEC LOCS 102 THRU 137 ; USED FOR RE-SCHEDULING WHEN CURRENT JOB ; GOES INTO IO WAIT ERRPDL=120 ;PUSH DOWN LIST FOR ERROR IN NULL JOB T30SYM=131 ;PLACE IN 10/30 JOB DATA AREA WHERE SYMBOL TABLE ; POINTER IS STORED BY REGULAR 10/30 LOADER ; (MOVED TO DDTSYM BY ONCE) ;PROTECTED JOB DATA STORAGE AND OTHER LOCATIONS SET EACH TIME ;A NEW JOB IS RUN (SEE APRSER-CLKINT) INTERN SYSBEG,SYSBG1,SYSEND SYSBEG: ;FIRST LOCATION CLEARED ON 143 RESTART (SEE SYSINI) XP SYSBG1,SYSBEG+1 INTERN JOB,JOBADR,JOBDAT,USRREL,USRSAV JOB: 0 ;CURRENT JOB RUNNING AT UUO LEVEL JOBDAT: ;LOC OF CURRENT JOBS JOB DATA AREA ; SAME AS JBTDAT AND AC JDAT JOBADR: 0 ;XWD PROTECTION,RELOCATION FOR CURRENT JOB ;SAME AS JBTADR(JOB) AND AC PROG USRREL: 0 ;LH==0, RH CONTAINS CONTENTS OF PROTECTION REGISTER ;LOW ORDER BITS==1777, IE THIS IS HIGHEST REL. LOC ;IN CURRENT USER AREA (USED FOR ADDRESS CHECKING) USRSAV: 0 ;TEMPORARY FOR UUO HANDLER (IMPURE ROUTINE!) ;LOCATIONS COPIED FROM JOB DATA AREA INTO MONITOR WHEN A JOB RUNS ;THIS PREVENTS THE USER FROM CLOBBERING THEM AND MAKES IT ;EASIER FOR THE MONITOR TO LOCATE THESE QUANTITIES WHEN IT ;NEEDS TO FOR THE CURRENT JOB ;CONTENTS ARE COPIED BACK WHEN JOB BECOMES INACTIVE (SEE CLOCK) ;COMPARE WITH JOB DATA AREA (SEE JOBDAT) ;THE FOLLOWING LOCATION MUST BE IN SAME ORDER AS JOBDAT INTERN USRPRT,USRPR1,USRPC,USRDDT,USRHCU,USRSAV,USRJDA,USRLO,USRLO1,USRHI USRPRT: ;FIRST LOCATION OF PROTECTED JOB DATA USRPR1==USRPRT+1 ;FIRST LOCATION+1 USRHCU: 0 ;HIGHEST USER I/O CHANNEL IN USE ;0 MEANS EITHER NONE OR CHANNEL 0 IN USE ;LH=-1 DURING GET OF LOW OR HIGH SEG OR SAVE OF HIGH SEG ;SETREL ROUTINE DOESN'T STORE IN JOBHRL(11$) WHEN NEG, ;LH=-2 DURING SAVE OF LOW SEG AS FLAG THAT CORE ; IS COMPRESSED. ;ONLY CHANNEL ASSIGNMENTS IN USE ARE COPIED INTO ; MONITOR WHEN JOB RUNS USRPC: 0 ;JOB PC WHEN SCHEDULER IS CALLED USRDDT: 0 ;RH==STARTING ADDRESS OF USER DDT, LH UNUSED USRJDA: BLOCK 20 ;RH==JOB DEVICE ASSIGNMENTS (DEVICE DATA ; BLOCK ADDRESSES) ;LH==UUO'S DONE SO FAR FOR THIS CHANNEL (SEE SYSPAR) ;0 MEANS NO DEVICE INITIALIZED ON THIS CHANNEL USRLO==USRJDA ;FIRST LOC CLEARED BY SETUSR ROUTINE ;ON A CALL [SIXBIT /RESET/] ;ALSO CLEARS USRHCU USRLO1==USRLO+1 ;FIRST LOC+1 USRHI==.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE ;OTHER SYSTEM DATA STORAGE INTERN COMCNT,CLKFLG,TIMEF,APRERR,APRPC,SCHEDF INTERN CORLST,CORTAL,HOLEF,SHFWAT INTERN FTTRPSET,FTSLEEP,FTTIME,FTSWAP,FT2REL,FTDISK INTERN HNGTIM,CIPWT,CIPWTM,NULERR,POTLST COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED ;SET BY SCNSER, DECREMENTED BY COMCON HNGTIM: 0 ;HUNG DEVICE TIME COUNT CHECK FOR HUNG I/O ;DEVICES WHEN THIS GOES TO ZERO (ONCE PER HNGSEC) CLKFLG: 0 ;NON-ZERO WHEN CLK INTERRUPT FORCED FOR ANY REASON TIMEF: 0 ;NON-ZERO FOR CLOCK INTERRUPT ON APR ;SET BY APRSER, TESTED AND CLEARED BY CLK ROUTINE APRERR: 0 ;APR ERROR BITS ON NON-EX MEM, ETC. ;SET BY APRSER, CLEARED BY CLK ROUTINE (CLOCK) APRPC: 0 ;PC WHEN APR ERROR DETECTED SCHEDF: 0 ;FORCED RESCHEDULING FLAG FOR CLK ROUTINE ;USED TO FORCE RESCHEDULING WHEN JOB IS IN EXEC MODE NULERR: 0 ;SET NON-ZERO IF MONITOR DETECTS ERROR WHILE ; NULL JOB IS RUNNING POTLST: 0 ;-1 WHEN SCHEDULER SEES THAT THERE ARE ;JOBS WHICH ARE POTENTIALLY RUNABLE BUT ;HAS TO RUN NULL JOB. ;0 WHEN IT FINDS A REAL JOB TO ;RUN OR NULL JOB IS ONLY JOB WHICH WANTS TO ;RUN. 'LSTWRD' IS INCREMENTED EVERY JIFFY ;IF THIS FLAG IS -1 AND PREVIOUS JOB WAS NULL JOB. IFN FTTRPSET,< INTERN STOPTS STOPTS: 0 ;STOP TIME SHARING OTHER USERS BECAUSE JOB 1 DID ;A TRPSET UUO WITH NON-ZERO AC(IE SET LOWER CORE ; PI TRAP LOCATION,ALSO STOP CORE SHUFFLING > SLJOBN=0 ;NUMBER OF JOBS IF NO SLEEP FEATURE IFN FTSLEEP, ;LEAVE ONE ENTRY PER JOB CIPWT: BLOCK SLJOBN+3 ;CLOCK REQUEST QUEUE ; LH-MONITOR ADDRESS TO PUSHJ TO AT CLOCK LEVEL ; WHEN BITS 24-35 COUNT DOWN TO ZERO ; BITS 18-23 ARE DATA SET IN AC TAC WHEN PUSHJ DONE ; BITS 24-35 ARE NUMBER OF CLK TICKS LEFT TO GO CIPWTM=CIPWT-1 ;FIRST LOC-1 OF CLOCK QUEUE ;STORAGE FOR VARIOUS CORE ALLOCATION FUNCTIONS INTERN NSWTBL,NSWMXL,CORTAB,CORMAX,CORLST,CORTAL,SHFWAT INTERN UPTIME,SHFWRD,STUSER,HIGHJB,CLRWRD,LSTWRD,FTTRACK NSWTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE ; RETURNED BY GETTAB UUO (THESE LOCATIONS ; PRESENT IN NON-SWAPPING SYSTEMS TOO) ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG CORTAB: BLOCK 10 ;(0-7) BIT=1 IF CORRESPONDING K OF CORE IN USE BY ; ACTIVE,IDLE, OR DORMANT HIGH OR LOW SEGS OR NON-EX XP CORBLK,^D256 ;NUMBER OF BITS IN CORE TABLE CORMAX: 0 ;(10)MAX. CORE REQUEST+1(IE LARGEST REL. ADR.+1) ; CAN BE RESTRICTED TO LESS THEN ALL OF USER CORE ; BY BUILD AND/OR ONCE CORLST: 0 ;(11) 1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE ; SET BY SYSINI ON 143 STARTUP CORTAL: 0 ;(12) TOTAL NUMBER OF FREE+DORMANT+IDLE CORE BLKS LEFT SHFWAT: 0 ;(13) JOB NUMBER SHUFFLER HAS TEMPORARILY STOPPED ;UNTIL ITS IO DEVICES TO BECOME INACTIVE BEFORE SHUFFLING HOLEF: 0 ;(14) ABSOLUTE ADDRESS OF LOWEST HOLE IN CORE, 0=NONE UPTIME: 0 ;(15) NUMBER OF CLOCK TICKS SINCE SYSTEM LOADED OR ; RESTARTED AT 143 SHFWRD: 0 ;(16) TOT NO. OF WORDS SHUFFLED BY SYSTEM STUSER: 0 ;(17) JOB CURRENTLY USING THE SYSTEM TAPE ; NEEDED SO CONTROL C WILL NOT TIE UP SYSTEM TAPE HIGHJB: 0 ;(20) HIGHEST JOB NUMBER CURRENTLY ASSIGNED CLRWRD: 0 ;(21) TOTAL NO. OF WORDS CLEARED BY 'CLRCOR' RTN. LSTWRD: 0 ;(22) TOTAL NO. OF CLOCK TICKS WHEN NULL JOB RAN ; BUT OTHER JOBS WANTED TO RUN AND COULD NOT ; DO SO BECAUSE: --- ; 1. SWAPPED OUT OR ON WAY IN OR OUT ; 2. MONITOR WAITING FOR I/O TO STOP SO ; IT CAN SHUFFLE OR SWAP ; 3. JOB BEING SWAPPED OUT BECAUSE IT IS ; EXPANDING CORE ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST ; TO USERS IN NON-SWAP AND SWAP SYSTEMS NSWMXL=<.-NSWTBL-1>B26 ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9 ;CORE ALLOCATION DATA NOT AVAILABLE VIA GETTAB IFN FTTRACK, ;DATA LOCATIONS PRESENT ONLY IN SWAPPING SYSTEMS IFG SYS50N, < ;SWAPPING SYSTEM ? INTERN SWPTBL,SWPMXL,BIGHOL,FINISH,FORCE,FIT,SWPERC,VIRTAL INTERN FULCNT,MAXSIZ,MAXJBN,SUMCOR SWPTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE ; RETURNED BY GETTAB UUO (THESE LOCATIONS ; PRESENT ONLY IN SWAP SYSTEMS) ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG BIGHOL: 0 ;(0) CURRENT BIGGEST HOLE IN CORE (1K BLOCKS) FINISH: 0 ;(1) IF +, THEN JOB NUMBER OF JOB BEING SWAPPED IN, ;IF -, THEN JOB NUMBER OF JOB BEING SWAPPED OUT FORCE: 0 ;(2) JOB NUMBER BEING FORCED TO SWAP OUT FIT: 0 ;(3) JOB NUMBER WAITING TO BE FITTED INTO CORE VIRTAL: 0 ;(4) NUMBER OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT ; (COUNTING DORMANT SEGMENTS AS IF FREE). ; PRINTED WITH CORE COMMAND (NO ARG) OR ERROR ; USUALLY THE SAME AS THE AMOUNT OF VIRTUAL CORE ; LEFT IN SYSTEM, EXCEPT WHILE R,RUN,KJOB,GET ; COMMAND ARE WAITING TO BE SWAPPED IN, BECAUSE ; THE OLD DISK SPACE HAS NOT BEEN RETURNED YET, ; BUT VIRTUAL CORE IS ONLY 140 WORDS FOR SWAPIN SWPERC: 0 ;(5) LH= NUMBER OF SWAPPER READ OR WRITE FAILURES ; RH= ERROR BITS (BITS 18-21) + NUMBER OF K OF ; DISCARDED SWAPPING SPACE ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST ; TO USER PROGS IN SWAPPING SYSTEMS SWPMXL=<.-SWPTBL-1>B26 ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9 ;MORE SWAPPING SYSTEM LOCATIONS (NOT RETURNED BY GETTAB) FULCNT: 0 ;PRINT DISK IS FULL EVERY 30 SECONDS MAXSIZ: 0 ;SIZE OF LARGEST JOB WHICH MIGHT BE SWAPPED OUT MAXJBN: 0 ;NUMBER OF THAT JOB SUMCOR: 0 ;TEMPORARY STORAGE CELL USED BY SWAPPER FOR SUM OF ; CORE NEEDED FOR SWAP IN IFN FT2REL,< INTERN SWPIN,SWPOUT SWPIN: 0 ;JOB NUMBER BEING SWAPPED IN IF IT HAS A HIGH SEG ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWPOUT: 0 ;JOB NUMBER BEING SWAPPED OUT IF IT HAS A HIGH SEG ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG > INTERN FTTRACK IFN FTTRACK, < INTERN LASIN,LASOUT LASIN: 0 ;LAST JOB OR HIGH SEG SWAPPED IN LASOUT: 0 ;LAST JOB OR HIGH SEG SWAPPED OUT ; ABOVE TWO FOR DEBUGGING ONLY > > ;DEFINE BLOCK FOR BIT TABLE DENOTING 4 WORD BLOCKS AVAILABLE (=0), IN USE (=1) ; USE MULTIPLES OF 4*^D36 WORDS SO THE TABLE WILL HAVE A MULTIPLE OF ^D36 BITS ; ADD 7 WORDS TO ACCOMODATE A POSSIBLE 1K BEYOND MINCOR AMOUNT IFG DSKN, < INTERNAL DDBTAB,MINCOR DDBTAB: BLOCK +1+7 > ;MONITOR TABLES WITH ONE ENTRY PER JOB INTERN JBTSTS,JBTADR,JBTDAT,JBTNAM,JBTPRG INTERN JOBMAX,JBTMAX,MJOBN,JBTAD1,JOBMXL,JBTMXL INTERN FTTIME,FTKCT,FTPRV JOBMAX==JOBN-1 ;MAXIMUM LEGAL JOB NUMBER JOBMXL==B26 ;HIGHEST JOB NUMBERSHIFTED LEFT 9 (FOR GETTAB UUO) MJOBN==-JOBN ;NEGATIVE NUMBERS OF JOBS (COUNTING NULL JOB) IFG KT10AN, ;IF ANY HIGH SEGMENTS, ; MUST HAVE AT LEAST AS MANY AS JOBS JBTMAX==JOBN+SEGN-1 ;HIGHEST INDEX IN JBT TABLES JBTMXL=B26 ;HIGHEST JBT ENTRY SHIFTED LEFT 9 (FOR GETTAB UUO) JBTSTS: BLOCK JOBN+SEGN ;JOB AND HIGH SEG STATUS WORD ;LH==STATUS BITS (SEE S.MAC FOR DESCRIPTION) ;RH==QUANTUM RUN TIME LEFT (SEE CLKCSS) FOR LOW SEGS ;RH=IN CORE COUNT FOR HIGH SEGS JBTADR: BLOCK JOBN+SEGN ;JOB AND HIGH SEG CORE ASSIGNMENT ; LH==PROTECTION (LENGTH-1) ; RH==RELOCATION (ABSOLUTE LOCATION IN CORE) JBTAD1==JBTADR+1 ;ADDRESS OF JOB 1 (USED BY SYSMAK) JBTDAT==JBTADR ;RH==ADDRESS OF JOB DATA AREA ;SAME AS JBTADR (JDAT==PROG) INTERN JBTSGN JBTSGN: IFG SEGN, < BLOCK JOBN ;RH=SEGMENT NUMBER OF HIGH SEGMENT THIS JOB ; IS USING IN CORE OR ON DISK ; 0 MEANS JOB DOES NOT HAVE HIGH SEG ;LH=USER DEPENDENT HIGH SEG STATUS BITS (SEE S.MAC) XP ITMSGN,ITEM+JOBMXL ;LH SYMBOL FOR GETTAB UUO > IFE SEGN, < 0 ;SINGLE-ENTRY NULL JBTSGN TABLE.... XP ITMSGN,JOBMXL ;LH SYMBOL FOR GETTAB UUO SO THAT JBTSGN IS ; UNDEFINED, I.E., MAKE INDEXING BY ITEM BE 0, BUT ; ALLOW REFERENCES UP TO JOBMXL. > IFG DSKN, < ;DISK SYSTEM ? INTERN PRJPRG,JBTDIR JBTDIR: ;HIGH SEGMENT DIRECTORY NAME (DSK) OR PHYSICAL ; DEVICE NAME (DTA,MTA) PRJPRG: BLOCK JOBN+SEGN ;XWD PROJECT NUMBER,PROGRAMMER NUMBER > IFE DSKN, > IFN FTTIME, < INTERN RTIME,TTIME RTIME: BLOCK JOBN ;TOTAL RUN TIME SINCE LAST IJOB OR RUNTIME TTIME: BLOCK JOBN ;TOTAL RUN TIME SINCE LAST IJOB > IFG SYS50N,< ;SWAPPING SYSTEM ? INTERNAL JBTSWP,JBTCHK JBTSWP: BLOCK JOBN+SEGN ;LH:==PROTECT TIME WHILE JOB IS IN CORE. ; DISK ADDRESS WHILE SWAPPED OUT ;BIT 0=1 IF SEGMENT IS FRAGMENTED ; BITS18-26:==OUTCORE IMAGE SIZE ; BITS27-35:==INCORE IMAGE SIZE ; FOR HIGH SEG, LH ALWAYS DISK ADDRESS JBTCHK: BLOCK JOBN+SEGN ;CHECK SUM FOR SWAPPED OUT JOB DATA AREA OR ; SAME AREA FOR HIGH SEG > JBTNAM: ;NAME OF HIGH SEGMENT (FILE IT WAS INITIALIZED FROM) JBTPRG: BLOCK JOBN+SEGN ;NAME OF FILE USED IN LAST R,RUN,GET, ETC ; USED BY SYSTAT PROGRAM IFN FTKCT, < INTERN JBTKCT JBTKCT: BLOCK JOBN ;PRODUCT OF CORE LENGTH (IN K) TIMES NUMBER OF JIFFIES ; PROGRAM USED CPU. USED FOR TIME ACCOUNTING. > IFN FTPRV, < INTERN JBTPRV JBTPRV: BLOCK JOBN ;PRIVILEGE BITS FOR JOB SET BY LOGIN > IFG DSKN, < INTERN MQUEUE,MQTOP MQUEUE: BLOCK JOBN ;DISK MONITOR I/O QUEUE MQTOP=. ;LAST LOC+1 OF MONITOR QUEUE > IFG SYS50N, < ;THE FOLLOWING ARE USED TO CREATE MXQUE ;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER (SCHED) FTDISK=-DSKN ;DEFINE FEATURE SWITCH FTDISK,SINCE IT APPEARS ; IN MACRO QUEUES ; WHICH IS DEFINED IN S.MAC XP MXQUE,0 LALL ;LIST QUEUE DEFINITIONS FOR ALL TO SEE DEFINE X QUEUES DEFINE X (A) CODES MXQUE==MXQUE+3 XALL ;BACK TO NORMAL MACRO EXPANSION INTERN JBTQ,JBTQM1,JBTQP1,JBTQMN BLOCK MXQUE ;NUMBER OF QUEUES FOR SWAPPING SCHEDULER JBTQ: BLOCK JOBN ;ONE ENTRY PER JOB, ; LH=PREVIOUS JOB, RH=NEXT JOB IN QUEUE ; NEGATIVE MEANS THIS IS FIRST (LH) OR LAST (RH) ; JOB IN QUEUE JBTQM1==JBTQ-1 ;JBTQ-1 JBTQP1==JBTQ+1 ;JBTQ+1 JBTQMN==JBTQ-NULZ ;J1 > ;TTY TRANSLATOR TABLE ;INDEXED BY TTY LINE NUMBER, CONTAINS TTY DDB ADDRESS IN RH ;(ASSIGNED WHEN FIRST CHARACTER TYPED ON TTY BY SCNSER ;BIT 0==1 IF COMMAND TYPED BUT NOT PROCESSED ;BITS 6-11==JOB NUMBER TTYP IS ATTACHED TO ;BITS 12-17==NEXT LINE NUMBER IN TALK RING OR ITS SELF IF NOT TALKING INTERN TTYTAB,PTYTAB,TPYTAB,TCONLN,MLTTYL,MTTYLN,TTPLEN,TTMODL,TTPMXL TTYTAB: BLOCK HGHLIN+1+1 ;NO OF TTYS PLUS CTY TPYTAB==.-1 ;ADDRESS OF LAST ENTRY TCONLN==.-1-TTYTAB ;LINE NUMBER OF CTY BLOCK PTYN ;PSEUDO TTY TRANSLATOR TABLE ; THIS IS FOR LINKED TTY LINES, ; NOT THE DEVICE "PTYN"'S DDB TTPLEN==.-TTYTAB ;LENGTH OF ENTIRE TABLE TTPMXL=B26 ;HIGHET ENTRY IN TTYTAB SHIFTED LEFT 9(FOR GETTAB UUO) MLTTYL==-JOBN ;NEG, NO OF TTY DDBS (ONE FOR EACH JOB, PLUS 1 ETRA ; SO JOB CAPACITY EXCEEDED MESSAGE CAN BE TYPED MTTYLN==-TTPLEN ;NEG, LENGTH OF ENTIRE TRANSLATOR TABLE PTYTAB: BLOCK PTYN+1 ;ADDRESS OF THE DDBS FOR DEVICE PTYN ; NOT THE LINKED TTY LINES. SEE TPYTAB. ;LAST LOCATION CLEARED BY SYSINI ON 143 RESTART SYSEND==.-1 ;ONCE ONLY CODE TO CREATE DEVICE DATA BLOCKS LOC SYSBEG ;PUT IN SYSTEM DATA AREA SO NOT TO TAKE ; VALUABLE SPACE. THIS AREA IS CLEARED ; BY SYSINI AFTER IT HAS BEEN EXECUTED ;CNTDB- ROUTINE TO INCREASE SIZE OF MONITOR FOR MULTIPLE DEVICE DATA BLOCKS ; BOTH DISK AND OTHER DEVICES (DTA,MTA,SCN,PTY) ; CALL: JSP TAC,CNTDB (FROM LONG ONCE DIALOG) ; ;LINKDB- ROUTINE TO CREATE MULTIPLE DEVICE DATA BLOCKS (EXCEPT DISK) ; AND LINK THEM. THESE ARE STORED ON TOP OF ONCE ONLY CODE ;CALL: JRST LINKDB (FROM LINKSR) ;BOTH ROUTINES UPDATE SYSSIZ AS MORE DDB SPACE IS CONSUMED INTERN LINKDB,CNTDB EXTERN LINKSR LINKDB: SETOM DESONC ;PERMIT DESTRUCTION OF ONCE ONLY CODE SKIPA TAC,LINKSR ;GET JSRPC OF CALLER OF LINKSR IN ONCE CNTDB: SETZM DESONC ;PREVENT DESTRUCTION OF ONCE ONLY CODE ;SO THAT E.G. SAT TABLES MAY BE SCANNED HRRM TAC, LINKED ;STORE EXIT FROM THIS ROUTINE (ONCE ONLY CODE WILL ; BE OVERLAYED BY MULTIPLE DEVICE DATA ; BLOCK GENERATION) MOVSI TAC,INTNUM ;NEG NUMBER OF ENTRIES IN TABLE MOVEI DEVDAT,DEVLST-DEVSER ;MAKE DEVLST LOOK LIKE DEVSER IN A DOB LOOP: MOVE TAC1,INTTB1(TAC) ;GET NEXT DEVICE DATA BLOCK ADDRESS JUMPE TAC1,NEXT ;0 MEANS NO DOB FOR DEVICE SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE ? HRLM TAC1,DEVSER(DEVDAT) ;YES, STORE IN PREVIOUS DEVICE DATA BLOCK HRRZ DEVDAT,TAC1 ;MAKE DEVDAT POINT TO CURRENT DOB LDB UUO,DDBNUM ;GET NUMBER OF DDB'S SOJLE UUO,NEXT ;ONE OR LESS ? HRRZ JBUF,DEVDAT ;NO, CREATE MULTIPLE COPIES OF DOB ; SAVE ORIGINAL IN JBUF MOVEI AC3,1 ;STARTING WITH DEV1,DEV2,DEV77 LDB AC1,PUNIT ;START UNIT NUMBER FROM ; ASSEMBLE DEVICE DATA BLOCK ; PTY STARTS UNIT NUMBER AT 1 INSTEAD OF 0 ; ALTHOUGH DEVICE NAMES ARE PTY0,PTY1,ETC. MULDDB: HRRZ TAC1,SYSSIZ ;ADR. OF NEXT DDB IS AT END OF MONITOR SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE ? HRLM TAC1,DEVSER(DEVDAT) ;YES, MAKE PREVIOUS DDB POINT TO THE ONE ABOUT TO BE CREATED HRL DEVDAT,JBUF ;SOURCE ADDRESS TO LH HRR DEVDAT,TAC1 ;DESTINATION ADDRESS TO RH HLRZ AC2,INTTB1(TAC) ;LENGTH OF DEVICE DATA BLOCK ADDB AC2,SYSSIZ ;LAST LOCATION+1 AFTER MOVE SKIPN DESONC ;OK TO DESTROY ONCE ? JRST JUSTCT ;NO, JUST COUNT DDB SPACE BLT DEVDAT,-1(AC2) ;MOVE ORIGINAL TO FREE STORAGE SKIPL INTTAB(TAC) ;IS THIS DECTAPE (ANY OF 3 SERVICES)? JRST NOTDTA ;NO HRRZ AC2,DEVDAT ;YES,DESTINATION SUBI AC2,(JBUF) ;-SOURCE=DISTANCE MOVED ADDM AC2,14(DEVDAT) ;INCREMENT POINTER TO DIRECTORY BLOCK ; (SORRY ABOUT NO SYMBOL) NOTDTA: MOVE PROG,PHYNAM ;BYTE POINTER TO NEWLY CREATED ; DDB PHYSICAL NAME MOVE ITEM,AC3 ;MAKE COPY OF UNIT NUMBER TRNN ITEM,70 ;IS IT 10 OR MORE ? JRST SMALL ;NO ROT ITEM,-3 ;YES, CONVERT HIGH ORDER OCTAL DIGIT TO ADDI ITEM,20 ;SIXBIT IDPB ITEM,PROG ;AND STORE TRZ ITEM,-1 ;CLEAR OUT HIGH ORDER DIGIT ROT ITEM,3 ;MOVE LOW ORDER DIGIT BACK SMALL: ADDI ITEM,20 ;CONVERT LOW ORDER DIGIT IN SIXBIT IDPB ITEM,PROG ;AND STORE IN PHYSICAL NAME ADDI AC1,1 ;INCREMENT BINARY UNIT NUMBER DPB AC1,PUNIT ;STORE UNIT NUMBER JUSTCT: CAIGE AC3,(UUO) ;COMPARE WITH HIGHEST DEVICE NUMBER AOJA AC3,MULDDB ;DO ANOTHER COPY NEXT: AOBJN TAC,.+1 ;MOVE BY TWOS AOBJN TAC,LOOP ;ANY MORE DEVICES MOVEI TAC,0 ;NO, FLAG END OF DEVICE DATA BLOCK CHAIN WITH 0 LINK SKIPE DESONC ;OK TO DESTROY ONCE ? HRLM TAC,DEVSER(DEVDAT) ;YES, STORE 0 IN CASE LAST DDB IS MULTIPLE IFG DSKN, < EXTERNAL LOCORE,CRINIT MOVE TAC,SYSSIZ ;SIZE OF MONITOR SO FAR (SYSMAK, EXEC DDT OR NOT) MOVEM TAC,LOCORE ;SAVE POINTER TO FIRST 4 WORD BLOCK ADDI TAC,MINCOR ;MINIMUM REQUIRED FOR DISK DDBS IORI TAC,1777 ;FORCE TO 1K BOUNDARY ADDI TAC,1 MOVEM TAC,SYSSIZ ;STORE SIZE OF MONITOR (FIRST FREE LOC) SUB TAC,LOCORE ;FORM LENGTH OF EXCESS CORE IDIVI TAC,^D144 ;MUST BE MULTIPLE OF 144. WORDS (SEE DDBTAB) MOVN TAC,TAC ; -N HRLM TAC,CRINIT ;STORE USEABLE LENGTH OF DDBTAB > LINKED: JRST . ;RETURN TO SYSINI DESONC: 0 ;FLAG =0 IF CALLED BY JSP TAC,CNTDB ; (DO NOT DESTROY ONCE) ; FLAG NON-ZERO IF CALLED BY JRST LINKDB ; (OK TO DESTROY ONCE CODE) DDBNUM: POINT 8,INTTAB(TAC),8 ;POINTER TO DDB NUMBER PHYNAM: POINT 6,DEVNAM(DEVDAT),17 ;BYTE POINTER TO DB PHYSICAL NAME ;MACROS TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINING ;INFORMATION FOR ONCE ;SO IT CAN LINK THE DEVICE INTERRUPT SERVICE ROUTINES AND THE DEVICE DATA BLOCKS ;TABLE INTTAB IS GENERATED WITH PAIRS OF ENTRIES FOR EACH DEVICE ;WHICH HAS A DEVICE DATA BLOCK(0-7) ;FIRST WORD: BIT 0==1 IF DECTAPE,BITS 1-9==NO. OF DDBS, BITS 9-17==PI CHANNEL(0-7) ;0 MEANS NO PI CHANNEL (EG PTY) ;SECOND WORD:LH==0 IF SINGLE DEVICE,==LENGTH OF DDB IF MULTIPLE, RH==DDB ADDRESS ;MACRO FOR DEVICES WHICH ARE ALWAYS PRESENT(AND WHICH DO NOT USE A CHANNEL SAVE ROUTINE ;AND HAVE NO DDB (EX-APR,CTY,PEN,CLK) DEFINE SPASGINT (DEV,PI) < DEV'N==1 ASGINT DEV,PI > DEFINE ASGINT (DEV,PI) < IFG DEV'N, , <.CHAS==1 ;CHANNEL PI IN USE.> INTERNAL DEV'CHN DEV'CHN==PI EXTERNAL DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION XWD PI,DEV'INT ;GENERATE INTERRUPT ENTRY POINT FOR ONCE XWD 0,0 ;NO DDB TO CHAIN TOGETHER ASGIN1 DEV,\PI > >> DEFINE ASGIN1 (DEV,PI) < IFDEF CH'PI, < ;WAIT TILL PASS 2 TO DEFINE DEV'CHL==CH'PI INTERNAL DEV'CHL >> ;MACRO FOR OPTIONAL DEVICES WHICH ALWAYS USE A CHANNEL SAVE ROUTINE ; (EXAMPLES: CDR, DSK, PTR, ETC. ALSO PTY WITH 0 PI) DEFINE SPASGSAV (DEV,PI,NUM) < DEV'N==NUM ASGSAV DEV,PI > DEFINE ASGSAV (DEV,PI) < IFG DEV'N, EXTERN DEV'DDB ASGSV1 (DEV,\PI) >> ;MACRO FOR: 1. COMPLETION OF THE DEFINITION REQUIRED FOR THOSE ; DEVICES INVOKING THE ASGSAV MACRO ; ; 2. COMPLETE DEFINITION FOR THOSE DEVICES WITH THEIR ; INTERRUPT ENTRY POINT AND DDB'S HERE IN COMMON ; (EXAMPLE: LPT'S) DEFINE ASGSV1 (DEV,PI) < IFG PI, < IFE , <.CHAS==1 ;CHANNEL PI IN USE.> DEV'CHN==PI ;DEFINE DEVICE CHANNEL NUMBER INTERN DEV'CHN ;DECLARE INTERNAL - ONLY IF DEVICE WANTED USED'PI==1 ;SET FLAG SO THAT A CHANNEL SAVE ; ROUTINE WILL BE GENERATED FOR ; THIS PI CHANNEL IFDEF SAV'PI, < ;WAIT TILL CHANNEL SAVE ROUTINES ; ARE DEFINED BELOW (IN PASS 2) DEV'SAV==SAV'PI ;CHANNEL AC SAVE ROUTINE LOCATION DEV'RET==RET'PI ;CHANNEL AC RESTORE ROUTINE LOCATION ; (USUALLY POPJ USED) DEV'CHL==CH'PI ;LOCATION WHERE INTERRUPT PC IS STORED DEV'SAC==SAVAC'PI ;STARTING CHANNEL SAVE LOCATION FOR AC'S INTERN DEV'SAV, DEV'RET, DEV'CHL, DEV'SAC >> DTBIT==0 ;ASSUME THIS IS NOT A DECTAPE IFIDN , , ;IS IT PDP-10 DECTAPES ? IFIDN , , ; OR PDP-6 DECTAPES ? IFE PI, < XWD DEV'N*1000+0,0 ;NO PI CHANNEL FOR THIS DEVICE > IFG PI, < XWD DTBIT*400000+DEV'N*1000+PI,DEV'INT ;FIRST WORD OF INTTAB ENTRY > IFG DEV'N-1, < XWD DEV'DDS,DEV'DDB ;MULTIPLE DEVICE SECOND WORD OF INTTAB ENTRY EXTERN DEV'DDS > IFE DEV'N-1, < XWD 0,DEV'DDB ;SINGLE DEVICE SECOND WORD OF INTTAB ENTRY >> ;MACRO'S TO ALLOW GENERATION OF MULTIPLE INTTAB ENTRIES FOR MULTIPLE ; DEVICES SUCH AS LINE-PRINTERS DEFINE MULASG (DEV,DE,PI) < IFG DEV'N, < ZZ==0 REPEAT DEV'N, < DEVASG DE,\ZZ,PI ZZ==ZZ+1 > > > DEFINE DEVASG (DE,X,PI) < DE'X'N==1 ASGSV1 DE'X,\PI > ;MACROS TO CONTROL ASSIGNMENT OF PI CHANNELS TO DEVICES DEFINE NEXTCH < .CH==.CH+1 .CHAS==0 NEXTCU \.CH > DEFINE NEXTCQ < IFN .CHAS,> DEFINE NEXTCU (N) < IFDEF UNIQ'N,>> ;ASSUME NO PI CHANNEL SAVE ROUTINES NEEDED USED1==0 USED2==0 USED3==0 USED4==0 USED5==0 USED6==0 USED7==0 ;NOW GENERATE THE TABLE FOR ONCE AND DEFINE PI CHANNEL ASSIGNMENTS INTERN INTTAB,INTTB1,INTNUM,SCNN,CTYN CTYN==1 ;ALWAYS ONE CTY SCNN==JOBN ;NUMBER OF SCN DDB ; ONE FOR EACH JOB + NULL JOB (EXTRA ONE) APRN==1 ;ALWAYS AN APR CLKN==1 ;ALWAYS LOWEST PRIORITY CLOCK INTTAB: ;TABLE OF DATA FOR DEFINING PI CHAN AND NUMBER OF DOB INTTB1==INTTAB+1 ASGSAV PTY,0 .CHAS==0 .CH==0 NEXTCH ;THE FOLLOWING DEVICES MUST HAVE A UNIQUE, HIGH PRIORITY ; CHANNEL FOR BLOCK I/O TRANSFERS. ;NOTE THAT THE PDP-6 DECTAPE AND MAGTAPE SHARE A ; 136 DATA CONTROL IF BOTH ARE PRESENT. ;DATA PRODUCTS DISK BLKI/BLKO PI CHANNEL: IFNDEF DCBCHN, > ;PDP-6 OR PDP-10 MAGTAPE BLKI/BLKO PI CHANNEL: IFNDEF MTDCHN, > IFNDEF DCTCHN, > ;PDP-6 OR PDP-10 DECTAPE BLKI/BLKO PI CHANNEL: IFNDEF DTDCHN, > IFNDEF DCTCHN, > IFNDEF BLKMXC, ;REMEMBER THIS CHANNEL ON PASS 1 .CH==BLKMXC ;ON PASS 2, SKIP OVER BLKI CHANNELS ;THE FOLLOWING ARE GROUPED ON A CHANNEL FOR HIGH-PRIORITY DEVICES ASGSAV CDR,.CH ASGINT APR,.CH NEXTCQ ;THE FOLLOWING ARE MEDIUM-PRIORITY DEVICES, AS A GROUP ASGSAV SCN,.CH ASGSAV PTR,.CH MULASG LPT,LP,.CH ASGSAV DTA,.CH ASGSAV DTC,.CH ASGSAV MTA,.CH ASGSAV MTC,.CH ASGINT CTY,.CH NEXTCQ ;THE FOLLOWING ARE LOWER-PRIORITY DEVICES, AS A GROUP ASGSAV DSK,.CH ASGSAV PEN,.CH ASGSAV PTP,.CH ASGSAV CDP,.CH ASGSAV PLT,.CH NEXTCQ ;THESE DEVICES GET LOW PRIORITY CHANNEL ASGSAV DIS,.CH NEXTCQ ;LAST IS THE SCHEDULER, ON CHANNEL 7 BY ITSELF IFG <.CH-7>, < PRINTX ;NOT ENOUGH PI'S TO SERVICE THIS CONFIGURATION. PRINTX ;SUGGEST EDITING COMMON TO PUT MORE DEVICES ON PRINTX ; A SINGLE CHANNEL > .CH==7 ASGINT CLK,.CH SPCINT ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING ; WHICH DO NOT USE A CHANNEL SAVE ROUTINE AND HAVE ; NO DEVICE DATA BLOCK SPCSAV ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING ; WHICH DO NEED A CHANNEL SAVE ROUTINE ;END OF THE ASSIGNMENT TABLE INTNUM==INTTAB-. ;-LENGTH OF INTERRUPT CHANNEL ASSIGNMENT TABLE IFLE .-SYSEND, ; SET LOC UP TO SYSEND+1, UNLESS ONCE ONLY CODE ; IS BIGGER ;SYSTEM CONSTANTS AND PARAMETERS INTERN CNFTBL,CNFMXL,CONFIG,SYSTAP,SYSDAT CNFTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE ; RETURNED BE GETTAB UUO (THESE LOCATIONS ; NOT CLEARED BY SYSINI) ; CNFTBL IS GETTAB TABLE 11 (RH OF AC) ; OCTAL NO. IN () CORRESPOND TO GETTAB UUO CONFIG: SYSNAM LOC CONFIG+5 ;ALWAYS LEAVE 5 WORDS (24 CHARS) ; SO GETTAB UUO WILL BE CONSTANT SYSDAT: SYSDAT ;(5,6) GENERATE SYSTEM DATE LOC SYSDAT+2 ;ALWAYS LEAVE 2 WORDS SO GETTAB CONSTANT SYSTAP: SYSDEV ;(7) NAME OF SYSTEM DEVICE, IN SIXBIT ;LOCATIONS SETUP BY ONCE ONLY OPERATOR DIALOGUE AND NEVER RESET ON RESTARTS INTERN TIME,THSDAT,SYSSIZ,DEVOPR,DEVLST,SEGPTR,TWOREG,STATES INTERN SERIAL EXTERN PATCH TIME: 0 ;(10) TIME OF DAY IN JIFFIES (60TH OR 50THS OF A SEC) THSDAT: 0 ;(11) TODAY'S DATE ((Y-1964)*12+(M-1))*31+(D-1) SYSSIZ: EXP PATCH ;(12) SIZE OF MONITOR (FIRST LOC NOT USED) DEVOPR: SIXBIT /CTY/ ;(13) SIXBIT PHYSICAL NAME OF OPERATORS CONSOLE ; (IF THIS LOCATION CONTAINS 0, NONE HAS ; BEEN DESIGNATED) ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE. ; ALSO UNEXPLAINED MONITOR ERROR MESSAGES ; WILL BE TYPED ON TTY OPR DEVLST: XWD 0,0 ;(14) LH CONTAINS ADDRESS OF FIRST DEVICE DATA BLOCK ; ONCE ONLY CODE LINKS DEVICE DATA BLOCKS SEGPTR: XWD -SEGN,JOBN ;(15) AOBJN POINTER TO 1ST HIGH SEG IN JBTXXX TABLES ; LH=-NO. OF HIGH SEGS, RH= ST HIGH SEG NO. TWOREG: 0 ;(16) FLAG TO INDICATE WHETHER BOTH HARDWARE AND SOFTWARE ; HAVE 2 RELOC REG CAPACITY ; NON-ZERO IF BOTH DO, 0 IF EITHER OR BOTH DO NOT ; SET BY ONCE ONLY CODE ZZ==0 IFG DSKN, ;1 IF DISK SYSTEM (ANALOGOUS TO FTDISK) IFG SYS50N, ;1 IF SWAPPING SYSTEM (ANALOGOUS TO FTSWAP) IFG LOGINN, ;1 IF LOGIN (ANALOGOUS TO FTLOGIN) IFN FTTTYSER, ;1 IF FULL DUPLEX SOFTWARE IFN FTPRV, ;1 IF PRIVILEGE FEATURE INCLUDED IFN FT2REL, ;1 IF REENTRANT SOFTWARE IFE JIFSEC-^D50, ;1 IF 50 CYCLE MACHINE, 0 IF 60 CYCLE STATES: EXP ZZ ;(17) BITS WHICH DEFINE TYPE OF SYSTEM IN LH ; RH PATCHED BY MONITOR COMMAND TO ; INDICATE OPERATIONAL STATE OF SYSTEM SERIAL: EXP APRSN ;(20) SERIAL NUMBER OF APR CNFMXL==<.-CNFTBL-1>B26 ;MAXIMUM ENTRY IN CNFTBL FOR GETTAB UUO IFG DSKN, < INTERN ODPTBL,ODPMXL,SWPHGH,K4SWAP,PROT,PROT0 IFG SYS50N,< EXTERN ICPROT,ICPRT1 ;THESE ARE DEFINED ONLY IN ; A SWAPPING SYSTEM> IFLE SYS50N,< XP ICPROT,0 ;IF NON-SWAPPING, DECLARE XP ICPRT1,0 ; INTERNAL IN COMMON> ODPTBL: ;FIRST LOC IN MONITOR DATA AREA FOR DISK ; LOCATIONS WHICH ARE NOT SET TO 0 WHEN SYSTEM ; STARTED, ODPTBL IS GETTAB UUO TABLE 15 SWPHGH: 0 ;(0) HIGHEST LOGICAL BLOCK # IN THE SWAPPING ; SPACE ON THE DISK (SET BY SWPINI) K4SWAP: 0 ;(1)K OF DISK WORDS SET ASIDE FOR SWAPPING ; ASSIGNED AT ONCE ONLY REFRESH TIME PROT: EXP ICPROT ;(2) IN-CORE PROTECT TIME PARAMETER TO BE ; MULTIPLIED BY (K-1) OF CORE IN JOB. PROT0: EXP ICPRT1 ;(3) IN-CORE PROTECT TIME PARAMETER TO ; BE ADDED TO ABOVE RESULT. ;INSERT NEW LOCATIONS OF INTEREST SETUP ; BY ONCE ONLY CODE HERE FOR DISK SYSTEMS ODPMXL==<.-ODPTBL-1>B26 ;MAXIMUM ENTRY IN ODPTBL FOR GETTAB UUO > ;MORE DATA LOCATIONS SETUP AT ASSEMBLY TIME OR ONCE ONLY TIME ; BUT NOT OF INTEREST TO USER PROGRAMS INTERN XJBPFI,PMONTB,MONTAB,MIDNIT XJBPFI: XWD .,0 ;LH FILLED IN WITH EXTERNAL JOBPFI (SEE JOBDAT) ; JOBPFI==HIGHEST LOC, IN USER JOB DATA AREA ; PROTECTED FROM I/O ;MONTH TABLE FOR DAYTIME COMMAND PRINTING PMONTB: POINT 6,MONTAB(TAC),5 ;POINTER TO NUMBER OF DAYS INMONTH MONTAB: EXP ^D30B5+"JAN" EXP ^D27B5+"FEB" EXP ^D30B5+"MAR" EXP ^D29B5+"APR" EXP ^D30B5+"MAY" EXP ^D29B5+"JUN" EXP ^D30B5+"JUL" EXP ^D30B5+"AUG" EXP ^D29B5+"SEP" EXP ^D30B5+"OCT" EXP ^D29B5+"NOV" EXP ^D30B5+"DEC" MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT ;STOP PROCEDURE WHEN SHUTTING DOWN SYSTEM ;BECAUSE OF CATOSTROPHIC FAILURE OR ANY OTHER REASON ;WRITE OUT DIRECTORIES STILL IN CORE (DISK) ;TRANSFER HERE FROM LOC 147 ;PROCEDURE TO SAVE CRASHED MONITOR ON DECTAPE FOR LATER DEBUGGING UNDER TIME SHARING ;OPERATOR SHOULD: ; 1. PUSH STOP AND HOLD IT DOWN ; 2. PUSH CONTINUE (APR PI IN PROGRESS SHOULD COME ON) ; THIS PUTS MACHINE INTO EXEC MODE AND STORES PC OC CRASH ; 3. LETUP ON STOP ; 4. SET ADDRESS SWITCHES TO 147 ; 5. PUSH START (DO NOT PUSH I/O RESET AS IT WILL CLEAR DEVICES) INTERN APRSTS,PISTS,SYSTOP,CRASHX,SWTSTS,TTYSTS,PTRSTS,TMCSTS INTERN PTPSTS,DLSSTS,DTSSTS,CRSTS,LPTSTS,PLTSTS,TMSSTS,DSKSTS,DSKDTI EXTERN SYSPDL EXTERN CRSHAC ;DEFINED IN SYSINI TO BE 143 RESTART CODE ;SO MONITOR CANNOT BE RESTARTED AT 143 AFTER ;BEING STARTED AT 147. CRASHX: MOVEM 17,CRSHAC+17 ;SAVE AC17 MOVE 17,TSTLOC CAME 17,SYSCRS ;IS LOC 147 WIPED OUT? HALT SYSTOP+1 ;YES - LET OPERATOR DECIDE WHAT TO DO JRST SYSTOP+1 ;NO - GO SAVE AC'S & DEVICE STATES TSTLOC: JRST SYSTOP SYSTOP: MOVEM 17,CRSHAC+17 ;SAVE ALL ACS MOVEI 17,CRSHAC ;SOURCE==0, DESTINATION==CRSHAC BLT 17,CRSHAC+16 ;SO DDT CAN LOOK AT SAVED CRASH LATER APRSTS: CONI APR,. ;STORE APR STATUS HERE PISTS: CONI PI,. ;STORE PI STATUS HERE SWTSTS: DATAI APR,. TTYSTS: CONI TTY,. PTRSTS: CONI PTR,. PTPSTS: CONI PTP,. DLSSTS: CONI DLS,. DTSSTS: CONI DTS,. CRSTS: CONI CR,. LPTSTS: CONI LPT,. PLTSTS: CONI PLT,. TMSSTS: CONI TMS,. TMCSTS: CONI TMC,. DSKSTS: CONI DSK,. DSKDTI: DATAI DSK,. CONO APR,APRRST ;RESET SYSTEM MOVEI PDP,SYSPDL ;SETUP PDP TO SPARE AREA IFG DSKN, < EXTERN DSKSTP PUSHJ PDP,DSKSTP> HALT 137400 ;STOP AT TENDMP(READY TO READ IN ANYTHING) ;ERROR RECOVERY - TRY TO START NULL JOB NULJB1: MOVEI ITEM,0 ;SET JOB NUMBER TO 0 JRST NULJOB ;GO RESTORE NULL JOB ;COMMON SUBROUTINE RETURNS INTERN CPOPJ,CPOPJ1,DPOPJ,TPOPJ,TPOPJ1,CPOPJ2,IPOPJ1,IPOPJ INTERN CUXIT1,CUXIT,UXIT INTERN FTTIME,FTSWAP,FTSLEEP,FTKCT,FT2REL,FTPRV CPOPJ2: AOS (PDP) ;DOUBLE SKIP SUBROUTINE RETURN CUXIT1: ;OLD SKIP RETURN FOR UUOS CPOPJ1: AOSA (PDP) ;SKIP SUBROUTINE RETURN DPOPJ: MOVEM IOS,DEVIOS(DEVDAT) ;DEPOSIT I/O STATUS WORD IN DDB UXIT: CUXIT: ;OLD RETURN FOR UUOS CPOPJ: POPJ PDP, TPOPJ1: AOS -1(PDP) ;RESTORE TAC THEN SKIP RETURN TPOPJ: POP PDP,TAC ;RESTORE TAC POPJ PDP, ;AND RETURN IPOPJ1: AOS -1(PDP) ;SET FOR SKIP RETURN IPOPJ: POP PDP,ITEM ;RESTORE ITEM (USUALLY JOB OR HIGH SEG NUMBER) POPJ PDP, ; SYSTEM BYTE POINTERS INTERN PUUOAC,PIOMOD,PJOBN,PUNIT,PJBSTS,PDVTIM,PDVCNT,PCORSZ,COREP INTERN IADPTR PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD PIOMOD: POINT 4,IOS,35 ;MODE BITS PJOBN: POINT 6,DEVCHR(DEVDAT),5 ;DEVICE JOB ASSIGNMENT PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NUMBER PJBSTS: POINT JWSIZ,JBTSTS(ITEM),JWPOS ;JOB WAIT STATE (QUEUE) CODE ;IN JOB STATUS WORD PDVTIM: POINT 6,DEVCHR(DEVDAT),17 ;TIME IN SECONDS BEFORE DEVICE ;IS SAID TO BE HUNG PDVCNT: POINT 6,DEVCHR(DEVDAT),11 ;COUNTED DOWN EACH SECOND, ;1 TO 0 TRANSITION MEANS HUNG DEVICE IADPTR: POINT 2,DEVIAD(DEVDAT),2 ;COUNT OF NUMBER OF USER CHANNELS INITED ; ON THIS DEVICE (DECTAPE ONLY) PCORSZ: POINT 8,JBTADR(ITEM),7 ;BYTE POINTER TO LOW OR HIGH SEG CORE SIZE-1 COREP: POINT 1,CORTAB ;1 BIT POINTER TO CORE ALLOCATION TABLE IFG SYS50N, < ;SWAPPING SYSTEM ? INTERN IMGIN,IMGOUT,IMGINT,OUTMSK,INMSK,INLEFT INMSK=000377 ;RH MASK TO IMGIN INLEFT=12 ;NUMBER OF BITS TO SHIFT TO LEFT JUSTIFY IN RH IMGIN: POINT 8,JBTSWP(ITEM),35 ;BYTE POINTER FOR # 1K BLOCKS OF CORE ;WHEN JOB OR HIGH SEG NEXT SWAPPED IN ;NON-ZERO ONLY WHEN SWAPPED OUT IMGOUT: POINT 8,JBTSWP(ITEM),26 ;BYTE POINTER FOR # 1K BLOCK OF DISK ;WHEN JOB OR HIGH SEG HAS IMAGE ON DISK ;ZERO MEANS NO DISK SPACE ALLOCATED OUTMSK=377000 ;RH MASK TO IMGOUT. USED TO TEST FOR 0 ; (IE NO DISK SPACE) IMGINT: POINT 8,JBTSWP(DEVDAT),35 ;POINTER TO INCORE IMAGE > ;SPECIAL PROJECT-PROGRAMMER NUMBERS IFG DSKN, < ;DISK SYSTEM? INTERN CUSPPP,SYSPP,DUMPPP,HELPPP CUSPPP: ;CUSP FILE DIRECTORY, MAKE SEPARATE TAG FROM ; MFD(SYSPP) SYSPP: XWD 1,1 ;THE MASTER FILE DIRECTORY PROJECT PROGRAMMER NO. DUMPPP: XWD 1,2 ;THE FAILSAFE PROJ,PROG NO (CAN READ OF WRITE ANYTHING) HELPPP: XWD 2,4 ;SYSTAT AND HELP PROJECT,PROGRAMMER NOS IF JOB NOT LOGGED IN ALREADY > ;DEFINE PI CHANNEL SAVE AND RESTORE ROUTINES IF A DEVICE IS ON THE CHANNEL HIGHAC==10 ;HIGHEST AC SAVE ON A PI INTERRUPT PDL==25 ;LENGTH OF INTERRUPT PI PUSH DOWN LIST DEFINE CHAN (PI)< XLIST INTERN SAV'PI,RET'PI,CH'PI CH'PI: 0 ;PC STORED HERE BY JSR ON INTERRUPT TO CHANNEL PI JEN @CH'PI ;LAST INSTRUCTION ON CONSO DEV, CHAIN ;HERE FROM AN INTERRUPT ROUTINE WHICH HAS FOUND ITS DEVICE NEEDS SERVICE ;SAVE ACS 0 THRU HIGHAC, CALLED BY JSR, SETS UP PDP TO PUSH DOWN LIST FOR THIS PI SAV'PI: 0 ;CALLED BY JSR MOVEM HIGHAC,SAVAC'PI+HIGHAC ;SAVE AC HIGHAC MOVEI HIGHAC,SAVAC'PI ;SETUP TO SAVE 0 THRU HIGHAC-1 BLT HIGHAC,SAVAC'PI+HIGHAC-1 ;SAVE ACS MOVE PDP,SAVAC'PI+HIGHAC+1 ;SETUP PUSH DOWN POINTER JRST @SAV'PI ;RETURN TO CALLER AND PROCESS INTERRUPT ;HERE FROM INTERRUPT ROUTINE WHEN IT HAS FINISHED SERVICING INTERRUPT ;RESTORE ACS AND DISMISS INTERRUPT ;USUALLY TRANSFERRED TO BY POPJ PDP, RET'PI: MOVSI HIGHAC,SAVAC'PI ;RESTORE ACS 0 THRU HIGHAC BLT HIGHAC,HIGHAC JEN @CH'PI ;DISMISS INTERRUPT ON THIS PI CHANNEL SAVAC'PI: BLOCK HIGHAC+1 ;PLACE TO SAVE ACS 0 THRU HIGHAC XWD -PDL+1,.+1 ;INITIAL PUSH DOWN POINTER CH'PI'PD1: EXP RET'PI ;FIRST WORD ON LIST, ; POPJ WILL RETURN TO DISMISS INTERRUPT BLOCK PDL-1 ;PUSHDOWN LIST SPACE LIST > ;GENERATE THE CHANNEL SAVE ROUTINE ONLY FOR PI WHICH NEED THEM (ASGSAV MACRO USED) IFN USED1, IFN USED2, IFN USED3, IFN USED4, IFN USED5, IFN USED6, IFN USED7, ;GENERATE NULL CHANNEL SAVE ROUTINES FOR THOSE CHANNELS NOT USED DEFINE NULL (PI)< XLIST INTERN CH'PI CH'PI: 0 JEN @CH'PI LIST > IFE USED1, IFE USED2, IFE USED3, IFE USED4, IFE USED5, IFE USED6, IFE USED7, ;HERE ON TRAPS TO LOC 60/61 - UNIMPLEMENTED INSTRUCTIONS (PDP-10 ONLY) ;OPCODE AND EFFECTIVE ADDRESS STORED IN SIXTY AND 61 EXECUTED (JSR UUO2) ;OP CODE 100 (UJEN) IS USED TO DISMISS USER MODE INTERRUPTS FOR REAL TIME OPERATION ;USED IN CONJUNCTION WITH TRPSET UUOWHICH IS SOON TO BE REPLACED ;WITH SOME KNAVE-PROOF REAL TIME UUOS. THIS CODE IS HERE ONLY ;BECAUSE MANUAL DESCRIBES TRPSET AND TRPJEN UUOS. ;TRPJEN HAS BEEN REPLACED WITH OPCODE 100 (UJEN). ;CALL: UGEN U ;WHERE U CONTAINS PC STORED BY INTERRUPT JSR INTERN UUO2 UUO2: 0 ;USER PC STORE HERE BY JSR EXCH TAC,UUO2 ;GET USER PC, SAVE TAC IFN FTTRPSET, < TLNN TAC,UIOMOD ;USER I/O MODE ON ? JRST UUOER2 ;NO, TREAT AS AN ILLEGAL INSTRUCTION AND PRINT MESS. HLL TAC,SIXTY ;YES, GET UNIMPLEMENTED OPCODE WHICH TRAPPED TLNE TAC,677777 ;IS IT OPCODE 100 (UJEN)? JRST UUOER1 ;NO, TREAT AS ILLEGAL INSTRUCTION MOVE TAC,SIXTY ;YES, GET EFFECTIVE ADDRESS ADD TAC,JOBADR ;ADD RELOCATION FOR CURRENT JOB MOVE TAC,(TAC) ;GET PC STORED BY INTERRUPT JSR EXCH TAC,UUO2 ;RESTORE TAC, AND STORE PC JEN @UUO2 ;DISMISS INTERRUPT UUOER1: HRLI TAC,USRMOD!UIOMOD ;SET USER MODE AND USER I/O MODE BACK ON > UUOER2: MOVEM TAC,UUO0 ;STORE PC AS IF AN ILLEGAL INSTR. HAD OCCURRED SETOM FORTY ;MAKE IT LOOK LIKE AN ILLEGAL INSTRUCTION ; TRAPPED TO 40 SKIPA TAC,UUO2 ;RETORE TAC AND FALL INTO REGULAR UUO HANDLER ;HERE ON TRAPS TO EXEC LOC 40/41 - OPCODES 0,40-77 (0-77 ON PDP-6) INTERN UUO0 EXTERN UUOUSR,UUOSY1,ERROR UUO0: 0 ;JSR HERE FROM LOC 41 MOVEM 17,USRSAV ;SAVE 17 MOVE 17,UUO0 ;GET PROCESSOR FLAGS TLNN 17,USRMOD ;IS UUO FROM MONITOR ? JRST UUOSY1 ;YES, DO NOT SAVE ACS SKIPN 17,JOBADR ;IS THERE A JOB DATA AREA ? JSP DAT,ERROR ;NO, MUST BE UUO DURING NULL JOB ; PRINT ERROR IN MONITOR IFE PDP10N, < ;FOR PDP-6 OPCODES 1-37 EXCH TAC,FORTY ;SAVE TAC, PICK UP UUO TLNN TAC,740000 ;IS THIS SYSTEM UUO ? TLNN TAC,077000 ;NO, IS IT 0 UUO ? JRST UUOSYS ;YES MOVEM TAC,40(17) ;STORE UUO IN USER'S 40 HRRZ TAC,41(17) ;PICK UP ADR OF USER'S JSR JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UUO****UWA PATCH HLL TAC,UUO0 ;USER PD FLAGS (RESTORED ON RETURN) MOVEI 17,(TAC) ;17 NOW HAS REL.ADR+1 OF USER JSR CAML 17,USRREL ;IS EFFECTIVE ADDRESS IN BOUNDS ? JRST UUOSY0 ;ERROR, JSR EFF. ADDR. OUTSIDE USER AREA HRRI TAC,1(TAC) ;YES, INCREMENT PC. EXCH TAC,UUO0 ;SET UP RETURN TO USER IN UUO0 ; PICKUP USERS FLAGS,PC ADD 17,JOBADR ;MAKE REL. ADDRESS INTO ABSOLUTE ADDRESS MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR MOVE TAC,FORTY ;RESTORE TAC MOVE 17,USRSAV ;RESTORE 17 JRST 2,@UUO0 ;RETURN TO USER (RESTORING FLAGS) UUOSY0: MOVE 17,JOBADR ;SETUP 17 FOR LOW SEGMENT RELOCATION UUOSYS: EXCH TAC,FORTY ;RESTORE USERS AC(TAC) AND USER'S UUO (FORTY) > JRST UUOUSR ;GO SAVE USER'S ACS IN REL. LOCATION 0-17 ; AND DISPATCH ON UUO ;GENERATE EXTERNAL GLOBALS TO CAUSE LOADING OF PROPER ROUTINES FROM MONITOR LIBRARY TAPE ;IF THERE IS ONE ;ALWAYS LOAD CLOCK1,COMCON,CORE1,ERRCON,JOBDAT,ONCE,PATCH,SYSMAK,UUOCON EXTERNAL CLOCK1,COMCON,CORE1,ERRCON,DATJOB,ONCE,PATCH,SYSMAK,UUOCON ;LOAD DDT IFG DDTN, IFE DDTN, ;LOAD SCHEDULER FOR NON-SWAPPING OR SWAPPING SYSTEM IFG SYS40N, ;CLKCSS IFG SYS50N, ;SCHED ;LOAD EITHER SEGCON (2REG SOFTWARE) OR NULSEG (1 REG SOFTWARE) ; UNLESS USER HAS EDITTED S WITH FT2REL=0 SO ALL PUSHJ'S ; TO SEGCON (NULSEG) ARE REMOVED IFN FT2REL, < IFG KT10AN, IFE KT10AN, > ;APR AND PI BITS INTERN PION,PIOFF,REQCLK,PICLK,APRCLR,APRCLE,APRNUL,APRRST,NXM,APRFOV CLKBIT==1 REPEAT 7-CLKCHN, PION==200 ;CONO PI,PION TURNS PI SYSTEM ON PIOFF==400 ;TURN IT OFF REQCLK==1B24+CLKBIT ;REQUEST INTERRUPT ON LOW PRIORITY CLK CHANNEL PICLK=PION+REQCLK ;TURN ON PI,REQUEST INTERRUPT ON CLK CHANNEL APRCLR==1000+APRCHN ;TURN APR CLOCK FLAG OFF APRCLE==431550+APRCHN ;CLEAR ALL APR ERROR BITS ; AND DISABLE FOV AND AR OVF APRNUL==433550+APRCHN ;RESET APR FOR NULL JOB ; CLEAR EVERYTHING BUT DON'T I/O RESET APRRST==APRNUL+200000 ;RESET APR FOR SYSINI (I/O RESET TOO) NXM==10000 ;NON-EX MEM (APR STATUS WORD) IFG PDP10N, IFE PDP10N, ;MAKE SURE THAT PROPER VERSION OF FEATURE SWITCH FILES WERE USED TO ASSEMBLE ;THE REST OF THE MONITOR ;THE LOADER WILL PRINT NUL. DEF. GLOBAL IF A MISTAKE HAS BEEN MADE XP FTDISK,-DSKN XP FTSWAP,-SYS50N XP FTRC10,-RD10N IFG KT10AN, ;IF Z RELOC SOFTWARE, THEN FTZREI MUST BE -1 IFE COREN, XP USRLIM,COREN ;DEFINE GLOBAL RESTRICTING SIZE OF CRE FOR ANY SINGLE USER ; ONCE ONLY CODE CAN ALTER THIS VALUE ; (PATCH RH CORLIM IN SYSIM) ;SCANNER ENTRY POINTS AND BIT DEFINITIONS IFG DLSN, ;DATA LINE SCANNER IFG CCIN, ;DA-10 PDP-8 680 IFG DCSN, ;630 DATA COMMUNICATIONS SYS IFG FULLN, ;FULL DUPLEX SOFTWARE ENTRY POINT IFE FULLN, ;HALF DUPLEX SOFTWARE ENTRY POINT IFG FULLN, < INTERN LINTAB LINTAB: ;LINE CHARACTERISTICS BITS (NOT CLEARED ON SYSTEM STARTUP) ;TELETYPE LINE CHARACTERISTICS (LH OF LINTAB) ;USED IN SCNSRF ALSO XP PTYLIN,400000 ;PSEUDO TTY LINE XP CTYLIN,200000 ;CONSOLE TTY XP DISLIN,100000 ;KEYBOARD DISPLAY XP DSDTLN, 40000 ;DATASET DATA LINE XP DSCTLN, 20000 ;DATASET CONTROL LINE(DC10E) XP HLFDPX, 10000 ;HALF DUPLEX LINE XP TTYRMT, 4000 ;REMOTE TTY XP T35, 10 ;TTY HAS HARDWARE TABS XP FULTWX, 4 ;SELF-ECHOING LINE ;USED IN CCIINT,DCSINT,DLSINT & SCNSRF IFG EDITN,< ;HAS COMMON.MAC BEEN EDITED TO DEFINE TTY LINE CHAR. ; SO MONGEN TYPE-IN REDUCED? ;IF NO APR NUMBER, AND THIS IS NOT EDITED FOR THE CUSTOMER, ; MAKE ALL LIENS JUST BE MODEL 33 TELETYPES IFE APRN,> IFE APRSN-2,< ;FOLLOWING LINE DEFINITIONS FOR DEC PDP12 #2 XWD T35,0 ;TTY0 XWD T35,0 ;TTY1 XWD T35,0 ;TTY2 XWD 0,0 ;TTY3 REPEAT 3,< XWD T35,0>;TTY4-6 XWD T35+TTYRMT,0 ;TTY7 - REMOTE 35 XWD DSDTLN,0 ;TTY10 XWD DSDTLN+HLFDPX,0 ;TTY11 XWD DSDTLN,0 ;TTY12 REPEAT 4,< XWD T35,0>;TTY13-16 REPEAT 8, > IFE APRSN-^D40,< ;THIS CONFIGURATION FOR DEC SYSTEM NUMBER 40 REPEAT ^D8,<0 ;MODEL 33'S LOCALLY> REPEAT ^D8,< XWD DSDTLN,0 ;DATASET> > ; CTY AND PTY SET BY SCNSER > ;END PRE-EDITED LINE CHARACTERISTICS IFE EDITN,< ;MONGEN DIALOG DEFINE TTY CONFIG? DEFINE GENLIN(LIN)< IFNDEF DSD'LIN, ;DATA SET? IFNDEF TAB'LIN, ;HARDWARE TABS? IFNDEF RMT'LIN, ;REMOTE? IFNDEF HLF'LIN, ;HALF DUPLEX SCANNER? XWD DSD'LIN*TAB'LIN*T35+RMT'LIN*TTYRMT+HLF'LIN*HLFDPX,0 > REPEAT HGHLIN+1, > LOC LINTAB+TTPLEN ;MAKE SURE ENOUGH SPACE FOR CTY+PTY;S > ;END OF FULL DUPLEX CONDITIONAL INTERN FSNCHN,SCNON,SCNOFF FSNCHN==SCNCHN*101 ;CHANNEL ASSIGNMENT FOR FULL DUPLEX SCN. SCNBIT==<1_<7-SCNCHN>> SCNON==2000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL ON SCNOFF==1000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL OFF IFG TABSN, ;HARDWARD TABS IFE TABSN, XP SCNNUM,HGHLIN+1 ;# OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG) ;MAGTAPE ENTRY POINT AND BIT DEFINITIONS IFG MTAN, ;TM10 ENTRY POINT IFG MTCN, ;PDP-6 MAGTAPES ENTRY POINT IFG MTAN, < INTERN MMTSIZ,MTALOC,MTLOC1,MTBOTH,MTFLAG MMTSIZ==-MTSIZ MTALOC==40+2*MTDCHN ;BLKI/BLKO LOCATION MTLOC1==MTALOC+1 ;NEXT LOCATION MTBOTH==MTACHN*10+MTDCHN ;BOTH PI CHANNELS MTFLAG==400+MTACHN*10 > IFG MTCN, < INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOCATION DCLOC1==DCLOC+1 ;NEXT LOCATION DCBIT==1 REPEAT 7-DCTCHN, DCON==2000+DCBIT ;TURN DC PI CHANNEL ON DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF DCIN=4010+DCTCHN ;SET DATA CHANNEL FOR INPUT DCOUT==3410+DCTCHN ;SET DATA CHANNEL FOR OUTPUT > ;DECTAPE ENTRY POINT AND BIT DEFINITIONS SAVN==1 ;WE ONLY SUPPORT NEW FORMAT NOW ;MONGEN NO LONGER ASKS QUESTION, IFG DTAN, ;TD10 WITH NEW FORMAT IFG DTCN, < IFG SAVN, ;556 WITH NEW FORMAT IFE SAVN, ;556 WITH OLD FORMAT > IFG DTAN, < ;DEFINE SYMBOLS IF PDP-10 DECTAPES (TD10) INTERNAL DTALOC,DTALC2,DTBOTH,DTTURN DTALOC==40+2*DTDCHN ;BLKI/BLKO LOCATION DTALC2==DTALOC+1 ;NEXT LOCATION DTBOTH==DTDCHN*10+DTACHN DTTURN==300200+DTBOTH > IFG DTCN, < ;DEFINE SYMBOLS IF PDP-6 DECTAPES (556) INTERNAL DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOC DCLOC1==DCLOC+1 ;NEXT LOCATION DCBIT==1 REPEAT 7-DCTCHN, DCON==2000+DCBIT ;TURN DC PI CHANNEL ON DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF DCIN==4010+DCTCHN ;SET DATA CHANNEL FOR INPUT DCOUT==3410+DCTCHN ;SET DATA CHANNEL FOR OUTPUT > ;DEFINE SAVE MODE AND EXTENSION FOR OLD OR NEW FORMAT INTERNAL SAVDMP IFE SAVN, ;EXTENSION FOR SAVED FILES == "DMP" > IFN SAVN, < SAVDMP== ;EXTENSION FOR SAVED FILES == "SAV" > ;DISPLAY AND LITE PEN IFG DISN,< IFG T340N, ;TYPE 340 ENTRY POINT IFE T340N, ;TYPE 30 ENTRY POINT INTERN DISBLK,DISJSR,OFFDIS,DISPON,DISPOF DISBLK==40+2*DISCHN ;BLKI/BLKO LOCATION DISJSR==DISBLK+1 ONDIS==100+10*PENCHN+DISCHN NONDIS==10*PENCHN+DISCHN OFFDIS==0 DISBIT==1 REPEAT 7-DISCHN, DISPON==2000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL ON DISPOF==1000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL OFF > ;LINE PRINTER ENTRY POINT AND DDB DEFINITIONS IFG LPTN, < ;PROTOTYPE DEFINITION FOR LINE PRINTER DEVICE DATA BLOCKS DEFINE LPTDDB (N) < XLIST ;TURN OFF LISTING DURING EXPANSION LP'N'SV1=LP'N'SAC+DEVDAT ;DEFINE DEVDAT SAVE LOCATION LP'N'INT: CONSO LP'N,0 ;(-4) SKIP IF INTERRUPT FOR THIS LPT JRST .-1 ;(-3) GO TO NEXT SKIP CHAIN ELEMENT MOVEM DEVDAT,LP'N'SV1 ;(-2) SAVE DEVDAT IN CHANNEL SAVE AREA JSP DEVDAT,LPTINT ;(-1) SET UP DDB ADDRESS AND BRANCH LP'N'DDB: LP'N'NAM: IFE LPTN-1, < SIXBIT /LPT/ ;( 0) PHYSICAL DEVICE NAME> IFN LPTN-1, < SIXBIT /LPT'N/ ;( 0) PHYSICAL DEVICE NAME> XWD ^D60*HUNGST,B23+LPTSIZ ;( 1) DEVICE CHARACTERISTICS 0 ;( 2) DEVICE I/O STATUS XWD 0,LPTDSP ;( 3) LH=DDB LINK, RH=DSP TABLE ADDR. LPTMOD==1_A+1_AL+1_I ;LPT LEGAL MODES XWD DVOUT+DVLPT,LPTMOD ;( 4) DEVICE CHARACTERISTICS 0 ;( 5) LOGICAL DEVICE NAME 0 ;( 6) BUFFER HEADER ADDRESSES LP'N'PTR: 0 ;( 7) BLOCK OUTPUT POINTER XWD PROG,0 ;(10) CURRENT OUTPUT BUFFER ADDRESS EXP 11*LP'N'CHN ;(11) INTERRUPT CHANNEL ASSIGNMENTS MOVE DEVDAT,LP'N'SV1 ;(12) RESTORE DEVDAT, SAVE AC'S JSR LP'N'SAV ;(13) AND ESTABLISH PDP MOVEI DEVDAT,LP'N'NAM ;(14) SET UP DDB ADDRESS AND RETURN JRST LPTNXT ;(15) TO COMMON INTERRUPT HANDLER MOVE DEVDAT,LP'N'SV1 ;(16) RESTORE DEVDAT AND JEN @LP'N'CHL ;(17) DISMISS INTERRUPT 0 ;(20) SAVE LOCATION FOR DAT CONSZ LP'N,LPTECM ;(21) THE REST OF THE DDB CONTAINS CONSO LP'N,LPTDON ;(22) THE ACTUAL I/O INSTRUCTIONS CONSO LP'N,(DAT) ;(23) USED BY THE COMMON SERVICE CONSZ LP'N,(DAT) ;(24) ROUTINE TO CONTROL A LINE CONI LP'N,DAT ;(25) PRINTER. THEY ARE EXECUTED CONO LP'N,(DAT) ;(26) BY MEANS OF AN XCT INSTRUCTION DATAO LP'N,(DAT) ;(27) INDEXED TO THE PROPER DDB BLKO LP'N,LP'N'PTR ;(30) LIST ;TURN LISTING BACK ON AFTER EXPANSION > EXTERN LPTSER, LPTNXT, LPTECM, LPTDON, LPTINT, LPTDSP LPT2=234 ;DEVICE SELECT CODE FOR SECOND LPT IFNDEF LP0, ;DEFINE STANDARD MNEMONIC DEFINITIONS IFNDEF LP1, ; BUT ALLOW FOR OVERRIDE $LPNUM=0 ;TEMPORARY SYMBOL USED TO FACILITATE ; MACRO GENERATION REPEAT LPTN, < LPTDDB \$LPNUM $LPNUM=$LPNUM+1 > > ;CARD READER ENTRY POINT AND BITS IFG CDRN, < IFG CR10N, ;CR10 ENTRY POINT IFE CR10N, ;PDP-6 CARD READER INTERNAL CDRBTS CDRBTS==1670+CDRCHN > ;CARD PUNCH ENTRY POINT IFG CDPN, < EXTERN CDPSER ;ENTRY POINT > ;PLOTTER ENTRY POINT IFG PLTN, ;PAPER TAPE READER ENTRY POINT AND MASK IFG PTRN, ;MASK==0 IF PDP-10 READER IFE PDP10N, ;MASK==777777 FOR PDP-6 READER > ;PAPER TAPE PUNCH ENTRY POINT IFG PTPN, ;DISK ENTRY POINTS AND BITS IFG DSKN,< INTERN DSKBIT,DCBBIT,DSKON,DSKOFF DCBBIT==0 ;0 UNLESS DATA PRODUCTS DISK(SEE BELOW) DSKBIT==1 ;LOW PRIORITY DISK PI CHANNEL REPEAT 7-DSKCHN, DSKON==2000+DSKBIT ;CONO PI, TURN DISK CHANNEL ON DSKOFF=1000+DSKBIT ;CONO PI, TURN DISKCHANNEL OFF IFG RD10N,< ;BURROUGHS DISK EXTERN RCXINT,DSKSRB,RCXWNZ ;LOAD EARLIER VERSION ; DSKINT,DSKSRB,ONCEB IFG SYS50N, ;LOAD EARLIER VERSION OF SCHEDB > IFG DPDN,< ;IF DATA PRODUCTS DISK EXTERNAL LODINT ;LOAD DPDINT EXTERNAL DSKSRD ;LOAD ONCE=DSKSR FOR DATA PROD DISK INTERN DCBBIT,DSKX8,DSKX9 DCBBIT==1 REPEAT 7-DCBCHN, DSKX8==40+2*DCBCHN ;DATA-CONTROL BLKI/BLKO OCS DSKX9==DSKX8+1 > IFG RA10N,< ;IF BRYANT DISK EXTERN MDFINT,DSKSER,MDFWNZ IFG SYS50N, > > ;PSEUDO TTY ENTRY POINT IFE PTYN, IFG PTYN, < IFE FULLN, ;HALF DUPLEX SCANNER SOFTWARE IFG FULLN, ;FULL DUPLEX SCANNER SOFTWARE > LIT RELOC .-COMORG ;NOW MAKE RELOCATABLE SO NEXT PROGRAM WILL BE LOADED ; IMMEDIATELY AFTER THIS ONE COMEND: END