1 \fTITLE COMMON - MONITOR COMMON DATA AREA AND CONFIGURATION DEFINITION - V437
\r
2 SUBTTL PART 3 COMMON.MAC - T. HASTINGS/RCC TS 03 JUN 69
\r
4 ;PUT VERSION NUMBER IN GLOB AND LOADER STORAGE MAP
\r
8 ;THE COMMON SUBPROGRAM CONSISTS OF 3 FILES ASSEMBLED TOGETHER AS ONE SUBPROGRAM:
\r
9 1. S.MAC - THE USUAL SYSTEM SYMBOL DEFINTIONS ASSEMBLED WITH EVERY MONITOR SUBPROGRAM
\r
10 2. CONFIG.MAC - THE CONFIGURATION DEFINTION FILE GENERATED BY THE
\r
11 CONFIGURATION CONFIG PROGRAM OR BY AND EDITOR(SEE ABOVE)
\r
12 3. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME
\r
13 SOURCE FOR ALL CONFIGURATIONS.
\r
14 HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY MACROS DEFINED IN 2.
\r
15 THE FOLLOWING SYMBOLS AND TABLES ARE GENERATED:
\r
17 A. MONITOR STARTUP LOCATIONS(140-147), HENCE LOAD THIS FIRST.
\r
18 B. JOB TABLES - LENGTH DEPENDENT ON MAX. NO. OF JOBS ALLOWED
\r
19 C. ALL VARIABLE STORAGE NOT ASSOCIATED WITH A PARTICULAR DEVICE
\r
20 D. COMMON SUBROUTINE RETURNS
\r
21 E. COMMON BYTE POINTERS
\r
22 F. TABLE OF SERVICE ROUTINE INTERRUPT LOCS TO BE LINKED BY ONCE ONLY CODE
\r
23 G. TABLE OF DEVICE DATA BLOCK ADDRESSES AND NUMBER TO BE USED BY ONCE TO LINK
\r
24 THEM TOGETHER AND GENERATE MULTIPLE COPIES.
\r
25 H. ASSIGNMENT OF PI CHANNELS
\r
26 I. PI CHANNEL SAVE AND RESTORE ROUTINES
\r
27 J. UUO TRAP LOCATIONS 40/41, 60/61
\r
28 K. SYSTEM CRASH STOP CONI'S.
\r
30 \f;THE FOLLOWING STANDARD SYMBOLS CAN BE SUPERCEDED BY A CUSTOMER
\r
31 ;HAVING PREVIOUSLY DEFINED THEM ON THE CONFIG.MAC FILE USING
\r
34 IFNDEF LISTSN, <LISTSN==1> ;FORCE S.MAC TO BE LISTED WITH COMMON FILE ONLY
\r
35 ;UNLESS 'LISTSN' DEFINED TO BE 0 WITH MONGEN
\r
36 IFNDEF APRSN,<APRSN==0> ;SERIAL NUMBER OF APR
\r
38 ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY)
\r
39 INTERN STDENS ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY)
\r
41 IFNDEF STDENS,<STDENS==2> ;STAND.== BINARY AT 556 BPI
\r
42 ;STDENS==D+P WHERE D AND P ARE:
\r
43 ;D==1(200 BPI);D==2(556 BPI);D==3(800 BPI)
\r
44 ;P==0(ODD-BINARY PARITY);P==4(EVEN-BCD PARITY)
\r
45 INTERN JIFSEC ;NO. OF CLOCK TICKS(JIFFIES) PER SECOND
\r
46 IFNDEF JIFSEC,<JIFSEC==^D60> ;STAND.==60 JIFFIES PER SEC.
\r
49 INTERN DTTRY ;NO. OF TIMES TO TRY ON DECTAPE ERRORS
\r
50 IFNDEF DTTRY,<DTTRY==4> ;STAND.==4 TRIES
\r
52 INTERN MTSIZ ;SIZE OF MAGTPAE RECORDS(DATA WORDS IN BUFFER+1)
\r
53 IFNDEF MTSIZ,<MTSIZ==^D128> ;STAND.==128 WORDS PER BUFFER
\r
55 INTERN LPTSIZ ;SIZE OF LPT BUFFER(NO. OF DATA WORDS+2)
\r
56 IFNDEF LPTSIZ,<LPTSIZ==^D24+2> ;STAND.==24 WORDS PER LPT BUFFER
\r
58 INTERN BLKQNT ;MAX. NO OF CONSECUTIVE DECTAPE BLOCK SEARCHED BEFORE
\r
59 ; RESCHEDULING IF ANOTHER JOB IS WAITING TO USE CONTROL
\r
60 IFNDEF BLKQNT,<BLKQNT==^D50> ;STAND.==50 DT BLOCKS SEARCHED(3 SECS.)
\r
62 INTERN NSPMEM ;NO. OF NANO-SECONDS PER MEMORY CYCLE
\r
63 IFNDEF NSPMEM,<NSPMEM==^D1760> ;STAND.==1760 NANO-SECONDS PER MEMORY CYCLE
\r
65 INTERN JIFSC2,JIFMIN,WDPJIF
\r
66 JIFSC2==JIFSEC/2 ;HALF NO. OF JIFFIES IN A SEC (FOR ROUNDING)
\r
67 JIFMIN==JIFSEC*^D60 ;NO. OF JIFFIES PER MINUTE
\r
68 WDPJIF==^D100000/NSPMEM*^D5000/JIFSEC ;NO. OF WORDS MOVED
\r
69 IFNDEF MINCOR,<MINCOR==^D54*JOBN> ;DISK DDB AND ACCESS ENTRY
\r
70 ; ALLOCATION REQUIREMENTS IN FREE CORE
\r
71 ;USED TO EXPAND SIZE OF MONITOR AT ONCE ONLY TIME
\r
73 ;32 WORDS/DDB AND 4 WORDS/ACCESS ENTRY = 36 WORDS
\r
74 ;ASSUME 1.5 OPEN FILES/JOB
\r
78 IFNDEF LOGSIZ, <LOGSIZ==2> ;MINSIZ OF VIRTUAL CORE LEFT
\r
79 ;AND STILL ALLOW LOGIN. MUST BE
\r
80 ;AT LEAST AS BIG AS LOGIN CUSP IN K.
\r
82 \f;SYSTEM INITIALIZATION DISPATCH TABLE, STARTING AT LOCATION 140
\r
83 ;THIS SUBROUTINE MUST BE LOADED FIRST
\r
84 ;ROUTINE "ONCE" IS ONCE ONLY CODE. IT CONVERTS THE DATE
\r
85 ;AND SETS UP IO SERVICE CHAIN,
\r
87 EXTERN SYSINI,SYSMAK,NULJOB,ONCE,JSR2
\r
88 INTERN SYSDSP,SYSDDT
\r
90 COMORG=140 ;ORIGIN OF COMMON IS 140
\r
91 LOC COMORG ;MAKE LISTING BE SAME AS LOADING SO IT WILL BE EASY
\r
92 ;TO EXAMINE SYSTEM LOCATIONS WITH CONSOLE SWITCHES
\r
93 ;WITHOUT NEEDING A STORAGE MAP
\r
95 SYSDSP: JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ONCE ONLY
\r
97 IFG DDTN,< ;EXEC DDT TO BE LOADED?
\r
99 JRST PATSYM ;YES, EXEC DDT(PATCH SYMBOL TABLE POINTER FIRST)
\r
103 HALT . ;NO, EXEC DDT
\r
105 JRST SYSMAK ;MAKE NEW SYSTEM
\r
106 JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ALWAYS
\r
107 JEN NULJB1 ;ERROR RECOVERY
\r
108 JSR ONCE ;DO ONCE ONLY CODE OVER AGAIN
\r
109 JRST JSR2 ;BYPASS ONCE ONLY OPERATOR DIALOGUE
\r
110 ;(IN CASE CONSOLE TTY DOWN)
\r
111 SYSCRS: JRST SYSTOP ;STOP MONITOR IN CASE OF DISASTER
\r
112 \f;SYSTEM DATA STORAGE
\r
114 ;SPECIAL ABSOLUTE LOCATIONS IN LOWER MEMORY
\r
116 INTERN SYSSNP,FORTY,NULDAT,SIXTY,NULPDL,ERRPDL,KT10A,RCXIOC,RCXCCW,DDTSYM
\r
117 INTERN T30SYM,RAXIOC,RAXCCW,CRSHWD
\r
119 RAXIOC=26 ;XWD 0,ADDRESS FOR RA10 DATA CHANNEL
\r
120 ; MUST BE EVEN AND .LT. 777
\r
121 RAXCCW=RAXIOC+1 ;XWD CONTROL WORD ADDRESS,DATA ADDRESS
\r
122 ; STORED ON CHANNEL TERMINATION
\r
123 CRSHWD=30 ;NORMALLY THIS WORD WILL BE 0. IF IT IS
\r
124 ;ACCIDENTALLY OR PURPOSEFULLY OVERWRITTEN
\r
125 ;THE MONITOR WILL ATTEMPT TO SAVE THE
\r
126 ;AC'S AND THE STATE OF ALL DEVICES.
\r
127 ;[A LA 147 RESTART]
\r
128 KT10A=33 ;COPY OF CONTENTS OF RELOCATION AND PROTECTION
\r
129 ; DONE BY DTATO APR
\r
130 ; NEEDED BECAUSE KT10A MOD DOES NOT COME WITH
\r
131 ; LIGHTS FOR 2ND REG.
\r
132 RCXIOC=34 ;INITIAL CONTROL WORD FOR DATA CHANNEL
\r
133 ; (TRANSFERS CHANNE TO SEQUENCE OF IOWD'S IN DSKINT)
\r
134 ; MUST BE IN EVEN LOC IN FIRST 1K OF MEMORY
\r
135 RCXCCW=RCXIOC+1 ;CHANNEL STORES FINAL CONTROL WORD
\r
136 ; HERE ON TERMINATION
\r
137 SYSSNP=37 ;WHEN DEPOSITED NON-ZERO,PRINTS SNAP SHOT OF SYSTEM
\r
138 ; ON LPT SEE LPSNAP SUBPROGRAM
\r
139 DDTSYM=36 ;CONTAINS ADR. OF POINTER TO EXEC DDT SYMBOL TABLE
\r
140 FORTY=40 ;PLACE WHERE UUOS ARE STORED ON TRAP
\r
141 NULDAT=42 ;JOB DATA AREA FOR NULL JOB(USES EXEC
\r
142 ; 62 THRU 101 20-36 FOR DUMP ACS)
\r
143 ; AND ABOVE FOR PUSHDOWN LIST
\r
144 SIXTY=60 ;PLACE WHERE UNIMPLEMETNED INSTR. ARE STORED ON
\r
145 ; TRAP(PDP-10 ONLY)
\r
146 NULPDL=101 ;PUSH DOWN LIST FOR NULL JOB
\r
147 ; USES EXEC LOCS 102 THRU 137
\r
148 ; USED FOR RESCHEDULING WHEN CURRENT JOB
\r
149 ; GOES INTO IO WAIT
\r
150 ERRPDL=120 ;PUSH DOWN LIST FOR ERROR IN NULL JOB
\r
151 T30SYM=131 ;PLACE IN 10/30 JOB DATA AREA WHERE SYMBOL TABLE
\r
152 ; POINTER IS STORED BY REGULAR 10/30 LOADER
\r
153 ; (MOVED TO DDTSYM BY ONCE)
\r
154 \f;PROTECTED JOB DATA STORAGE AND OTHER LOCATIONS SET EACH TIME
\r
155 ;A NEW JOB IS RUN(SEE APRSER-CLKINT)
\r
156 INTERN SYSBEG,SYSBG1,SYSEND
\r
158 SYSBEG: ;FIRST LOCATION CLEARED ON 143 RESTART(SEE SYSINI)
\r
161 INTERN JOB,JOBADR,JOBDAT,USRREL,USRSAV
\r
163 JOB: 0 ;CURRENT JOB RUNNING AT UUO LEVEL
\r
164 JOBDAT: ;LOC OF CURRENT JOBS JOB DATA AREA
\r
165 ; SAME AS JBTDAT AND AC JDAT
\r
166 JOBADR: 0 ;XWD PROTECTION,RELOCATION FOR CURRENT JOB
\r
167 ;SAME AS JBTADR(JOB) AND AC PROG
\r
168 USRREL: 0 ;LH==0, RH CONTAINS CONTENTS OF PROTECTION REGISTER
\r
169 ;LOW ORDER BITS==1777, IE THIS IS HIGHEST REL. LOC
\r
170 ;IN CURRENT USER AREA(USED FOR ADDRESS CHECKING)
\r
171 USRSAV: 0 ;TEMPORARY FOR UUO HANDLER(IMPURE ROUTINE!)
\r
173 ;LOCATIONS COPIED FROM JOB DATA AREA INTO MONITOR WHEN A JOB RUNS
\r
174 ;THIS PREVENTS THE USER FROM CLOBBERING THEM AND MAKES IT
\r
175 ;EASIER FOR THE MONITOR TO LOCATE THESE QUANTITIES WHEN IT
\r
176 ;NEEDS TO FOR THE CURRENT JOB
\r
177 ;CONTENTS ARE COPIED BACK WHEN JOB BECOMES INACTIVE (SEE CLOCK)
\r
178 ;COMPARE WITH JOB DATA AREA (SEE JOBDAT)
\r
179 ;THE FOLLOWING LOCATION MUST BE IN SAME ORDER AS JOBDAT
\r
181 INTERN USRPRT,USRPR1,USRPC,USRDDT,USRHCU,USRSAV,USRJDA,USRLO,USRLO1,USRHI
\r
183 USRPRT: ;FIRST LOC. OF PROTECTED JOB DATA
\r
184 USRPR1==USRPRT+1 ;FIRST LOC.+1
\r
186 USRHCU: 0 ;HIGHEST USER IO CHANNEL IN USE
\r
187 ;0 MEANS EITHER NONE OR CHAN. 0 IN USE
\r
188 ;LH=-1 DURING GET OF LOW OR HIGH SEG OR SAVE OF HIGH SEG
\r
189 ;SETREL ROUTINE DOESN'T STORE IN JOBHRL(115) WHEN NEG.
\r
190 ;LH=-2 DURING SAVE OF LOW SEG AS FLAG THAT CORE
\r
192 ;ONLY CHAN. ASSIGNMENTS IN USE ARE COPIED INTO
\r
193 ;MONITOR WHEN JOB RUNS
\r
194 USRPC: 0 ;JOB PC WHEN SCHEDULER IS CALLED
\r
195 USRDDT: 0 ;RH==STARTING ADR. OF USER DDT,LH UNUSED
\r
196 USRJDA: BLOCK 20 ;RH==JOB DEVICE ASSIGNMENTS (DEVICE DATA
\r
198 ; LH==UUOS DONE SO FAR FOR THIS CHANNEL(SEE SYSPAR)
\r
199 ; 0 MEANS NO DEVICE INITIALIZED ON THIS CHANNEL
\r
200 USRLO==USRJDA ;FIRST LOC CLEARED BY SETUSR ROUTINE
\r
201 ;ON A CALL [SIXBIT /RESET/]
\r
202 ;ALSO CLEARS USRHCU
\r
203 USRLO1==USRLO+1 ;FIRST LOC+1
\r
204 USRHI==.-1 ;LAST LOC CLEARED BY SETUSR ROUT.
\r
206 ;OTHER SYSTEM DATA STORAGE
\r
208 INTERN COMCNT,CLKFLG,TIMEF,APRERR,APRPC,SCHEDF
\r
209 INTERN CORLST,CORTAL,HOLEF,SHFWAT
\r
210 INTERN FTTRPSET,FTSLEEP,FTTIME,FTSWAP,FT2REL,FTDISK
\r
211 INTERN HNGTIM,CIPWT,CIPWTM,NULERR,POTLST
\r
213 COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED
\r
214 ;SET BY SCNSER, DECREMENTED BY COMCON
\r
215 HNGTIM: 0 ;HUNG DEVICE TIME COUNT CHECK FOR HUNG IO
\r
216 ;DEVICES WHEN THIS GOES TO ZERO (ONCE A SECOND)
\r
217 CLKFLG: 0 ;NON-ZERO WHEN CLK INTERRUPT FORCED FOR ANY REASON
\r
218 TIMEF: 0 ;NON-ZERO FOR CLOCK INTERRUPT ON APR
\r
219 ;SET BY APRSER, TESTED AND CLEARED BY CLK ROUTINE
\r
220 APRERR: 0 ;APR ERROR BITS ON NON-EX MEM, ETC.
\r
221 ;SET BY APRSER, CLEARED BY CLK ROUTINE(CLOCK)
\r
222 APRPC: 0 ;PC WHEN APR ERROR DETECTED
\r
223 SCHEDF: 0 ;FORCED RESCHEDULING FLAG FOR CLK ROUTINE
\r
224 ;USED TO FORCE RESCHEDULING WHEN JOB IS IN EXEC MODE
\r
225 NULERR: 0 ;SET NON-ZERO IF MONITOR DETECTS ERROR WHILE
\r
226 ; NULL JOB IS RUNNING
\r
227 POTLST: 0 ;-1 WHEN SCHEDULER SEES THAT THERE ARE
\r
228 ;JOBS WHICH ARE POTENTIALLY RUNABLE BUT
\r
229 ;HAS TO RUN NULL JOB.
\r
230 ;0 WHEN IT FINDS A REAL JOB TO
\r
231 ;RUN OR NULL JOB IS ONLY JOB WHICH WANTS
\r
232 ;TO RUN. 'LSTWRD' IS INCREMENTED EVERY JIFFY
\r
233 ;IF THIS FLAG IS -1 AND PREVIOUS JOB WAS NULL JOB
\r
236 STOPTS: 0 ;STOP TIME SHARING OTHER USERS BECAUSE JOB 1 DID
\r
237 ;A TRPSET UUO WITH NON-ZERO AC(IE SET LOWER CORE
\r
238 ; PI TRAP LOCATION. ALSO STOP CORE SHUFFLING
\r
240 SLJOBN=0 ;NO. OF JOBS IF NO SLEEP FEATURE
\r
241 IFN FTSLEEP,<SLJOBN=JOBN> ;LEAVE ONE ENTRY PER JOB
\r
242 CIPWT: BLOCK SLJOBN+3 ;CLOCK REQUEST QUEUE
\r
243 ; LH-MONITOR ADDRESS TO PUSHJ TO AT CLOCK LEVEL
\r
244 ; WHEN BITS 24-35 COUNT DOWN TO ZERO
\r
245 ; BITS 18-23 ARE DATA SET IN AC TAC WHEN PUSHJ DONE
\r
246 ; BITS 24-35 ARE NO. OF CLK TICKS LEFT TO GO
\r
247 CIPWTM=CIPWT-1 ;FIRST LOC-1 OF CLOCK QUEUE
\r
248 \f;STORAGE FOR VARIOUS CORE ALLOCATION FUNCTIONS
\r
250 INTERN NSWTBL,NSWMXL,CORTAB,CORMAX,CORLST,CORTAL,SHFWAT
\r
251 INTERN UPTIME,SHFWRD,STUSER,HIGHJB,CLRWRD,LSTWRD,FTTRACK
\r
254 NSWTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE
\r
255 ; RETURNED BY GETTAB UUO(THESE LOCATIONS
\r
256 ; PRESENT IN NON-SWAPPING SYSTEMS TOO)
\r
257 ; OCTAL NOS. IN () CORRESPOND TO GETTAB ARG
\r
258 CORTAB: BLOCK 10 ;(0-7)BIT=1 IF CORRESPONDING K OF CORE IN USE BY
\r
259 ; ACTIVE,IDLE, OR DORMANT HIGH OR LOW SEGS OR NON-EX
\r
261 ;NUMBER OF BITS IN CORE TABLE
\r
262 CORMAX: 0 ;(10)MAX. CORE REQUEST+1(IE LARGEST REL. ADR,+1)
\r
263 ; CAN BE RESTRICTED TO LESS THAN ALL OF USER CORE
\r
264 ; BY BUILD AND/OR ONCE
\r
265 CORLST: 0 ;(11)1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE
\r
266 ; SET BY SYSINI ON 143 STARTUP
\r
267 CORTAL: 0 ;(12)TOTAL NO. OF FREE+DORMANT+IDLE CORE BLOCKS LEFT
\r
268 SHFWAT: 0 ;(13)JOB NO. SHUFFLER HAS TEMPORARILY STOPPED
\r
269 ;UNTIL ITS IO DEVICES BECOME INACTIVE, BEFORE SHUFFLING
\r
270 HOLEF: 0 ;(14)ABS. ADDRESS OF JOB ABOVE LOWEST HOLE, 0 IF NO JOB.
\r
271 UPTIME: 0 ;(15)NO. OF CLOCK TICKS SINCE SYSTEM LOADED OR
\r
273 SHFWRD: 0 ;(16)TOT. NO. OF WORDS SHUFFLED BY SYSTEM
\r
274 STUSER: 0 ;(17)JOB CURRENTLY USING THE SYSTEM TAPE
\r
275 ; NEEDED SO CONTROL C WILL NOT TIE UP SYSTEM TAPE
\r
276 HIGHJB: 0 ;(20)HIGHEST JOB NUMBER CURRENTLY ASSIGNED
\r
278 CLRWRD: 0 ;(21) TOTAL NO. OF WORDS CLEARED BY "CLRCOR" RTNE.
\r
279 LSTWRD: 0 ;(22) TOTAL NO. OF CLOCK TICKS WHEN NULL
\r
280 ;JOB RAN BUT OTHER JOBS WANTED TO RUN, BUT
\r
281 ;COULD NOT BE BECAUSE:-
\r
282 ; 1. SWAPPED OUT OR ON WAY IN OR OUT
\r
283 ; 2. MONITOR WAITING FOR IO TO STOP SO
\r
284 ; CAN SHUFFLE OR SWAP
\r
285 ; 3. JOB BEING SWAPPED OUT BECAUSE
\r
288 ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST
\r
289 ; TO USERS IN NON-SWAP AND SWAP SYSTEMS
\r
290 NSWMXL=<.-NSWTBL-1>B26 ;MAX. ENTRY FOR GETTAB SHIFTED LEFT 9
\r
292 ;CORE ALLOCATION DATA NOT AVAILABLE VIA GETTAB
\r
293 IFN FTTRACK,<INTERN LASCOR
\r
294 LASCOR: 0 ;LAST JOB OR HIGH SEG TO CALL CORE ROUTINES
\r
295 ; (FOR DEBUGGING ONLY)>
\r
296 \f;DATA LOCATIONS PRESENT ONLY IN SWAPPING SYSTEMS
\r
298 IFG SYS50N,< ;SWAPPING SYSTEM?
\r
299 INTERN SWPTBL,SWPMXL,BIGHOL,FINISH,FORCE,FIT,SWPERC,VIRTAL
\r
300 INTERN FULCNT,MAXSIZ,MAXJBN,SUMCOR
\r
301 SWPTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE
\r
302 ; RETURNED BY GETTAB UUO(THESE LOCATIONS
\r
303 ; PRESENT ONLY IN SWAP SYSTEMS)
\r
304 ; OCTAL NOS. IN () CORRESPOND TO GETTAB ARG
\r
305 BIGHOL: 0 ;(0)CURRENT BIGGEST HOLE IN CORE (1K BLOCKS)
\r
306 FINISH: 0 ;(1)+JOBNO OF JOB BEING SWAPPED IN,
\r
307 ;-JOBNO OF JOB BEING SWAPPED OUT
\r
308 FORCE: 0 ;(2)JOBNO BEING FORCED TO SWAP OUT
\r
309 FIT: 0 ;(3)JOBNO WAITING TO BE FITTED INTO CORE
\r
310 VIRTAL: 0 ;(4)NO. OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT
\r
311 ; (COUNTING DORMANT SEGMENTS AS IF FREE).
\r
312 ; PRINTED WITH CORE COMMAND(NO ARG) OR ERROR
\r
313 ; USUALLY THE SAME AS THE AMOUNT OF VIRTUAL CORE
\r
314 ; LEFT IN SYSTEM, EXCEPT WHILE R,RUN,KJOB,GET
\r
315 ; COMMAND ARE WAITING TO BE SWAPPED IN, BECAUSE
\r
316 ; THE OLD DISK SPACE HAS NOT BEEN RETURNED YET,
\r
317 ; BUT VIRTUAL CORE IS ONLY 140 WORDS FOR SWAPIN
\r
318 SWPERC: 0 ;(5)LH= NO. OF SWAPPER READ OR WRITE FAILURES
\r
319 ; RH= ERROR BITS (BITS 18-21) + NO. OF K OF
\r
320 ; DISCARDED SWAPPING SPACE
\r
324 ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST
\r
325 ; TO USER PROGS IN SWAPPING SYSTEMS
\r
326 SWPMXL=<.-SWPTBL-1>B26 ;MAX. ENTRY FOR GETTAB SHIFTED LEFT 9
\r
327 \f;MORE SWAPPING SYSTEM LOCATIONS (NOT RETURNED BY GETTAB)
\r
329 FULCNT: 0 ;PRINT DISK IS FULL EVERY 30 SECONDS
\r
330 MAXSIZ: 0 ;SIZE OF LARGEST JOB WHICH MIGHT BE SWAPPED OUT
\r
331 MAXJBN: 0 ;NUMBER OF THAT JOB
\r
332 SUMCOR: 0 ;TEMP USED BY SWAPPER FOR SUM OF CORE NEEDED FOR SWAP IN
\r
334 INTERN SWPIN,SWPOUT
\r
335 SWPIN: 0 ;JOB NO. BEING SWAPPED IN IF IT HAS A HIGH SEG
\r
336 ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWAP
\r
338 SWPOUT: 0 ;JOB NO. BEING SWAPPED OUT IF IT HASA HIGH SEG
\r
339 ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWAP
\r
344 INTERN LASOUT,LASIN
\r
346 LASOUT: 0 ;LAST JOB OR HIGH SEG SWAPPED OUT
\r
347 LASIN: 0 ;LAST JOB OR HIGH SEG SWAPPED IN
\r
348 ; ABOVE TWO FOR DEBUGGING ONLY
\r
352 ;DEFINE BLOCK FOR BIT TABLE DENOTING 4. WORD BLOCKS AVAILABLE (=0), IN USE(=1)
\r
353 ; USE MULTIPLES OF 4*36. WORDS SO THE TABLE WILL HAVE A MULTIPLE OF 36. BITS
\r
354 ; ADD 7 WORDS TO ACCOMODATE A POSSIBLE 1K BEYOND MINCOR AMOUNT
\r
357 INTERNAL DDBTAB,MINCOR
\r
359 DDBTAB: BLOCK <MINCOR/^D144>+1+7
\r
361 \f;MONITOR TABLES WITH ONE ENTRY PER JOB
\r
363 INTERN JBTSTS,JBTADR,JBTDAT,JBTNAM,JBTPRG
\r
364 INTERN JOBMAX,JBTMAX,MJOBN,JBTAD1,JOBMXL,JBTMXL
\r
365 INTERN FTTIME,FTKCT,FTPRV
\r
367 JOBMAX==JOBN-1 ;MAX. LEGAL JOB NUMBER
\r
368 JOBMXL==<JOBMAX>B26 ;HIGHEST JOB NO.SHIFTED LEFT 9(FOR GETTAB UUO)
\r
369 MJOBN==-JOBN ;NEG. NOS. OF JOBS(COUNTING NULL JOB)
\r
370 IFG KT10AN,<SEGN==JOBN+SEGN> ;IF ANY HIGH SEGMENTS,
\r
371 ; MUST HAVE AT LEAST AS MANY AS JOBS
\r
372 JBTMAX==JOBN+SEGN-1 ;HIGHEST INDEX IN JBT TABLES
\r
373 JBTMXL=<JBTMAX>B26 ;HIGHEST JBT ENTRY SHIFTED LEFT 9(FOR GETTAB UUO)
\r
374 JBTSTS: BLOCK JOBN+SEGN ;JOB AND HIGH SEG STATUS WORD
\r
375 ;LH==STATUS BITS(SEE S.MAC FOR DESC.)
\r
376 ;RH==QUANTUM RUN TIME LEFT(SEE CLKCSS) FOR LOW SEGS
\r
377 ;RH=IN CORE COUNT FOR HIGH SEGS
\r
378 JBTADR: BLOCK JOBN+SEGN ;JOB AND HIGH SEG CORE ASSIGNMENT
\r
379 ; LH==PROTECTION,(LENGTH-1)RH==RELOCATION
\r
380 ; (ABS. LOC. IN CORE)
\r
381 JBTAD1==JBTADR+1 ;ADR. OF JOB 1(USED BY SYSMAK)
\r
382 JBTDAT==JBTADR ;RH==ADDRESS OF JOB DATA AREA
\r
383 ;SAME AS JBTADR(JDAT==PROG)
\r
385 JBTSGN: IFG SEGN, <
\r
386 BLOCK JOBN ;SEGMENT NUMBER OF HIGH SEGMENT THIS JOB
\r
387 ; IS USING IN CORE OR DISK
\r
388 ; 0 MEANS JOB DOES NOT HAVE HIGH SEG
\r
389 ; LH=USER DEPENDENT HIGH SEG STATUS BITS
\r
391 XP ITMSGN,ITEM+JOBMXL ;LH SYSMBOL FOR GETTAB UUO
\r
395 XP ITMSGN,JOBMXL ;LH SYMBOL FOR GETTAB UUO
\r
396 ;SO THAT JBTSGN IS UNDEFINED
\r
397 ;I.E. MAKE INDEXING BY ITEM BE 0
\r
398 ; BUT ALLOW REFERENCES UP TO JOBMXL
\r
400 IFG DSKN,< ;DISK SYSTEM?
\r
401 INTERN PRJPRG,JBTDIR
\r
402 JBTDIR: ;HIGH SEGMENT DIRECTORY NAME(DSK) OR PHYSICAL
\r
403 ; DEVICE NAME(DTA,MTA)
\r
404 PRJPRG: BLOCK JOBN+SEGN ;XWD PROJECT NO.,PROGRAMMER NO.
\r
406 IFE DSKN,<IFG SEGN,< ;REENTRANT MONITOR WITHOUT DISK?
\r
408 JBTDIR=.-JOBN ;INDEX BY HIGH SEG NUMBER
\r
409 BLOCK SEGN ;HIGH SEGMENT PHYSICAL DEVICE NAME(DTA,MTA)
\r
413 RTIME: BLOCK JOBN ;TOT. RUN TIME SINCE LAST IJOB OR RUNTIME
\r
414 TTIME: BLOCK JOBN ;TOT. RUN TIME SINCE LAST IJOB
\r
416 \f IFG SYS50N,< ;SWAPPING SYSTEM?
\r
417 INTERN JBTSWP,JBTCHK
\r
418 JBTSWP: BLOCK JOBN+SEGN ;LH:==PROTECT TIME WHILE JOB IS IN CORE.
\r
419 ; DISK ADDRESS WHILE SWAPPED OUT
\r
420 ; BITS18-26:==OUTCORE IMAGE SIZE
\r
421 ; BITS27-35:==INCORE IMAGE SIZE
\r
422 ; FOR HIGH SEG, LH ALWAYS DISK ADDRESS
\r
423 \fJBTCHK: BLOCK JOBN+SEGN ;CHECK SUM FOR SWAPPED OUT JOB DATA AREA OR
\r
424 ; SAME AREA FOR HIGH SEG
\r
427 JBTNAM: ;NAME OF HIGH SEGMENT(FILE IT WAS INITIALIZED FROM)
\r
428 JBTPRG: BLOCK JOBN+SEGN ;NAME OF FILE USED IN LAST R,RUN,GET, ETC
\r
429 ; USED BY SYSTAT PROGRAM
\r
432 JBTKCT: BLOCK JOBN ;PRODUCT OF CORE LENGTH(IN K) TIMES NO. OF JIFFIES
\r
433 ; PROGRAM USED CPU. USED FOR TIME ACCOUNTING.
\r
437 JBTPRV: BLOCK JOBN ;PRIVELEGE BITS FOR JOB SET BY LOGIN
\r
440 INTERN MQUEUE,MQTOP
\r
442 MQUEUE: BLOCK JOBN ;DISK MONITOR IO QUEUE
\r
443 MQTOP=. ;LAST LOC+1 OF MONITOR QUEUE
\r
446 ;THE FOLLOWING ARE USED TO CREATE MXQUE
\r
447 ;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER(SCHED)
\r
448 FTDISK==-DSKN ;DEFINE FEATURE SWITCH FTDISK,SINCE IT APPEARS
\r
450 ; WHICH IS DEFINED IN S.MAC
\r
453 LALL ;LIST QUEUE DEFINITIONS FOR ALL TO SEE
\r
455 DEFINE X <MXQUE==MXQUE+2;>
\r
465 XALL ;BACK TO NORMAL MACRO EXPANSION
\r
467 INTERN JBTQ,JBTQM1,JBTQP1,JBTQMN
\r
468 BLOCK MXQUE ;NO. OF QUEUES FOR SWAPPING SCHEDULER
\r
469 JBTQ: BLOCK JOBN ;ONE ENTRY PER JOB,
\r
470 ; LH=PREVIOUS JOB, RH=NEXT JOB IN QUEUE
\r
471 ; NEGATIVE MENAS THIS IS FIRST (LH) OR LAST (RH)
\r
473 JBTQM1==JBTQ-1 ;JBTQ-1
\r
474 JBTQP1==JBTQ+1 ;JBTQ+1
\r
475 JBTQMN==JBTQ-NULZ ;J1
\r
477 \f;TTY TRANSLATOR TABLE
\r
478 ;INDEXED BY TTY LINE NUMBER, CONTAINS TTY DDB ADDRESS IN RH
\r
479 ;(ASSIGNED WHEN FIRST CHARACTER TYPED ON TTY BY SCNSER
\r
480 ;BIT 0==1 IF COMMAND TYPED BUT NOT PROCESSED
\r
481 ;BITS 6-11==JOB NUMBER TTY IS ATTACHED TO
\r
482 ;BITS 12-17==NEXT LINE NUMBER IN TALK RING OR ITS SELF IF NOT TALKING
\r
484 INTERN TTYTAB,PTYTAB,TPYTAB,TCONLN,MLTTYL,MTTYLN,TTPLEN,TTMODL,TTPMXL
\r
486 TTYTAB: BLOCK HGHLIN+1+1 ;NO OF TTYS PLUS CTY
\r
487 TPYTAB==.-1 ;ADDRESS OF LAST ENTRY
\r
488 TCONLN==.-1-TTYTAB ;LINE NUMBER OF CTY
\r
489 BLOCK PTYN ;PSEUDO TTY TRANSLATOR TABLE
\r
490 ; THIS IS FOR THE LINKED TTY LINES,
\r
491 ; NOT THE DEVICE "PTYN"'S DDB
\r
492 TTPLEN==.-TTYTAB ;LENGTH OF ENTIRE TABLE
\r
493 TTPMXL==<TTPLEN-1>B26 ;HIGHEST ENTRY IN TTYTAB SHIFTED LEFT 9(FOR GETTAB UUO)
\r
495 MLTTYL==-JOBN ;NEG, NO OF TTY DDBS (ONE FOR EACH JOB, PLUS 1 EXTRA
\r
496 ; SO JOB CAPACITY EXCEEDED MESSAGE CAN BE TYPED
\r
497 MTTYLN==-TTPLEN ;NEG, LENGTH OF ENTIRE TRANSLATOR TABLE
\r
499 PTYTAB: BLOCK PTYN+1 ;ADDRESSES OF THE DDBS FOR DEVICE PTYN
\r
500 ; NOT THE LINKED TTY LINES. SEE TPYTAB.
\r
501 ;LAST LOCATION CLEARED BY SYSINI ON 143 RESTART
\r
503 \f;ONCE ONLY CODE TO CREATE DEVICE DATA BLOCKS
\r
505 LOC SYSBEG ;PUT IN SYSTEM DATA AREA SO NOT TO TAKE
\r
506 ; VALUABLE SPACE. THIS AREA IS CLEARED
\r
507 ; BY SYSINI AFTER IT HAS BEEN EXECUTED
\r
509 ;CNTDB- ROUTINE TO INCREASE SIZE OF MONITOR FOR MULTIPLE DEVICE DATA BLOCKS
\r
510 ; BOTH DISK AND OTHER DEVICES (DTA,MTA,SCN,PTY)
\r
511 ; CALL: JSP TAC,CNTDB (FROM LONG ONCE DIALOG)
\r
513 ;LINKDB- ROUTINE TO CREATE MULTIPLE DEVICE DATA BLOCKS (EXCEPT DISK)
\r
514 ; AND LINK THEM. THESE ARE STORED ON TOP OF ONCE ONLY CODE
\r
515 ;CALL: JRST LINKDB (FROM LINKSR)
\r
516 ;BOTH ROUTINES UPDATE SYSSIZ AS MORE DDB SPACE IS CONSUMED
\r
518 INTERN LINKDB,CNTDB
\r
521 LINKDB: SETOM DESONC ;PERMIT DESTRUCTION OF ONCE ONLY CODE
\r
522 SKIPA TAC,LINKSR ;GET JSRPC OF CALLER OF LINKSR IN ONCE
\r
523 CNTDB: SETZM DESONC ;PREVENT DESTRUCTION OF ONCE ONLY CODE
\r
524 ;SO THAT E.G. SAT TABLES MAY BE SCANNED
\r
525 HRRM TAC, LINKED ;STORE EXIT FROM THIS ROUTINE (ONCE ONLY CODE WILL
\r
526 ; BE OVERLAYED BY MULTIPLE DEVICE DATA
\r
527 ; BLOCK GENERATION)
\r
528 MOVSI TAC,INTNUM ;NEG NO. OF ENTRIES IN TABLE
\r
529 MOVEI DEVDAT,DEVLST-DEVSER ;MAKE DEVLST LOOK LIKE DEVSER IN A DOB
\r
530 LOOP: MOVE TAC1,INTTB1(TAC) ;GET NEXT DEVICE DATA BLOCK ADDRESS
\r
531 JUMPE TAC1,NEXT ;0 MEANS NO DOB FOR DEVICE
\r
532 SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE?
\r
533 HRLM TAC1,DEVSER(DEVDAT) ;YES, STORE IN PREVIOUS DEVICE DATA BLOCK
\r
534 HRRZ DEVDAT,TAC1 ;MAKE DEVDAT POINT TO CURRENT DOB
\r
535 LDB UUO,DDBNUM ;GET NO. OF DDB'S
\r
536 SOJLE UUO,NEXT ;ONE OR LESS?
\r
537 HRRZ JBUF,DEVDAT ;NO, CREATE MULTIPLE COPIES OF DOB
\r
538 ; SAVE ORIGINAL IN JBUF
\r
539 MOVEI AC3,1 ;STARTING WITH DEV1,DEV2,DEV77
\r
540 LDB AC1,PUNIT ;START UNIT NUMBER FROM
\r
541 ; ASSEMBLE DEVICE DATA BLOCK
\r
542 ; PTY STARTS UNIT NO. AT 1 INSTEAD OF 0
\r
543 ; ALTHOUGH DEVICE NAMES ARE PTY0,PTY1,ETC.
\r
544 \fMULDDB: HRRZ TAC1,SYSSIZ ;ADR. OF NEXT DDB IS AT END OF MONITOR
\r
545 SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE?
\r
546 HRLM TAC1,DEVSER(DEVDAT) ;YES,MAKE PREVIOUS DDB POINT TO ONE ABOUT TO BE CREATED
\r
547 HRL DEVDAT,JBUF ;SOURCE ADDRESS TO LH
\r
548 HRR DEVDAT,TAC1 ;DESTINATION ADDRESS TO RH
\r
549 HLRZ AC2,INTTB1(TAC) ;LENGTH OF DEVICE DATA BLOCK
\r
550 ADDB AC2,SYSSIZ ;LAST LOCATION+1 AFTER MOVE
\r
551 SKIPN DESONC ;OK TO DESTROY ONCE?
\r
552 JRST JUSTCT ;NO, JUST COUNT DDB SPACE
\r
553 BLT DEVDAT,-1(AC2) ;MOVE ORIGINAL TO FREE STORAGE
\r
554 SKIPL INTTAB(TAC) ;IS THIS DECTAPE(ANY OF 3 SERVICES)?
\r
556 HRRZ AC2,DEVDAT ;YES,DESTINATION
\r
557 SUBI AC2,(JBUF) ;-SOURCE=DISTANCE MOVED
\r
558 ADDM AC2,14(DEVDAT) ;INCREMENT POINTER TO DIRECTORY BLOCK
\r
559 ; (SORRY ABOUT NO SYMBOL)
\r
560 NOTDTA: MOVE PROG,PHYNAM ;BYTE POINTER TO NEWLY CREATED
\r
561 ; DDB PHYSICAL NAME
\r
562 MOVE ITEM,AC3 ;MAKE COPY OF UNIT NO.
\r
563 TRNN ITEM,70 ;IS IT 10 OR MORE?
\r
565 ROT ITEM,-3 ;YES, CONVERT HIGH ORDER OCTAL DIGIT TO
\r
566 ADDI ITEM,20 ;SIXBIT
\r
567 IDPB ITEM,PROG ;AND STORE
\r
568 TRZ ITEM,-1 ;CLEAR OUT HIGH ORDER DIGIT
\r
569 ROT ITEM,3 ;MOVE LOW ORDER DIGIT BACK
\r
570 SMALL: ADDI ITEM,20 ;CONVERT LOW ORDER DIGIT IN SIXBIT
\r
571 IDPB ITEM,PROG ;AND STORE IN PHYSICAL NAME
\r
572 ADDI AC1,1 ;INCREMENT BINARY UNIT NUMBER
\r
573 DPB AC1,PUNIT ;STORE UNIT NUMBER
\r
574 JUSTCT: CAIGE AC3,(UUO) ;COMPARE WITH HIGHEST DEVICE NUMBER
\r
575 AOJA AC3,MULDDB ;DO ANOTHER COPY
\r
576 NEXT: AOBJN TAC,.+1 ;MOVE BY TWOS
\r
577 AOBJN TAC,LOOP ;ANY MORE DEVICES
\r
578 MOVEI TAC,0 ;NO, FLAG END OF DEVICE DATA BLOCK CHAIN WITH 0 LINK
\r
579 SKIPE DESONC ;OK TO DESTROY ONCE?
\r
580 HRLM TAC,DEVSER(DEVDAT) ;YES, STORE 0 IN CASE LAST DDB IS MULTIPLE
\r
582 EXTERN LOCORE,CRINIT
\r
583 MOVE TAC,SYSSIZ ;SIZE OF MONITOR SO FAR(SYSMAK,EXEC DDT OR NOT)
\r
584 MOVEM TAC,LOCORE ;SAVE POINTER TO FIRST 4 WORD BLOCK
\r
585 ADDI TAC,MINCOR ;MINIMUM REQUIRED FOR DISK DDBS
\r
586 IORI TAC,1777 ;FORCE TO 1K BOUNDARY
\r
588 MOVEM TAC,SYSSIZ ;STORE SIZE OF MONITOR (FIRST FREE LOC)
\r
589 SUB TAC,LOCORE ;FORM LENGTH OF EXCESS CORE
\r
590 IDIVI TAC,^D144 ;MUST BE MULTIPLE OF 144. WORDS (SEE DDBTAB)
\r
592 HRLM TAC,CRINIT ;STORE USEABLE LENGTH OF DDBTAB
\r
594 LINKED: JRST . ;RETURN TO SYSINI
\r
596 DESONC: 0 ;FLAG =0 IF CALLED BY JSP TAC,CNTDB
\r
597 ; (DO NOT DESTROY ONCE)
\r
598 ; FLAG NON-ZERO IF CALLED BY JRST LINKDB
\r
599 ; (OK TO DESTROY ONCE CODE)
\r
600 DDBNUM: POINT 8,INTTAB(TAC),8 ;POINTER TO DDB NUMBER
\r
601 PHYNAM: POINT 6,DEVNAM(DEVDAT),17 ;BYTE POINTER TO DB PHYSICAL NAME
\r
603 \f;MACRO TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINNING
\r
604 ;INFORMATION FOR ONCE
\r
605 ;SO IT CAN LINK THE DEVICE INTERRUPT SERVICE ROUTINES AND THE DEVICE DATA BLOCKS
\r
606 ;TABLE INTTAB IS GENERATED WITH PAIRS OF ENTRIES FOR EACH DEVICE
\r
607 ;WHICH HAS A DEVICE DATA BLOC(0-7)
\r
608 ;FIRST WORD: BIT 0==1 IF DECTAPE,BITS 1-9==NO. OF DDBS,BITS 9-17==PI CHANNEL(0-7)
\r
609 ;0 MEANS NO PI CHANNEL (EG PTY)
\r
610 ;SECOND WORD:LH==0 IF SINGLE DEVICE,==LENGTH OF DDB IF MULTIPLE,RH==DDB ADDRESS
\r
612 ;MACRO FOR DEVICES WHICH ARE ALWAYS PRESENT(AND WHICH DO NOT USE A CHANNEL SAVE ROUTINE
\r
613 ;AND HAVE NO DDB (EX-APR,CTY,PEN,CLK)
\r
616 DEFINE SPASGINT (DEV,PI) <
\r
621 DEFINE ASGINT (DEV,PI)<
\r
622 IFG DEV'N,<IFG PI,<
\r
623 IFE <PI-.CH>,<.CHAS==1 ;CHANNEL PI IN USE>
\r
626 EXTERN DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION
\r
627 XWD PI,DEV'INT ;GENERATE INTERRUPT ENTRY POINT FOR ONCE
\r
628 XWD 0,0 ;NO DDB TO CHAIN TOGETHER
\r
633 DEFINE ASGIN1 (DEV,PI)<
\r
634 IFDEF CH'PI,< ;WAIT TILL PASS 2 TO DEFINE
\r
638 ;MACRO FOR OPTIONAL DEVICES (ALWAYS USE CHANNEL SAVE ROUTINE)
\r
639 ; (EXAMPLE: CR, DSK, PTR, ETC. ALSO PTY WITH 0 PI)
\r
641 DEFINE SPASGSAV (DEV,PI,NUM) <
\r
647 DEFINE ASGSAV (DEV,PI) <
\r
648 IFG DEV'N, <IFG PI, <
\r
649 EXTERN DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION
\r
655 \f;MACRO FOR: 1. COMPLETION OF THE DEFINITION REQUIRED FOR THOSE
\r
656 ; DEVICES INVOKING THE ASGSAV MACRO
\r
658 ; 2. COMPLETE DEFINITION FOR THOSE DEVICES WITH THEIR
\r
659 ; INTERRUPT ENTRY POINT AND DDB'S IN COMMON
\r
662 DEFINE ASGSV1 (DEV,PI) <
\r
664 IFE <PI-.CH>,<.CHAS==1 ;CHANNEL PI IN USE>
\r
665 DEV'CHN==PI ;DEFINE DEVICE CHANNEL NUMBER
\r
666 INTERN DEV'CHN ;DECLARE INTERNAL - ONLY IF DEVICE WANTED
\r
667 USED'PI==1 ;SET FLAG SO THAT A CHANNEL SAVE
\r
668 ; ROUTINE WILL BE GENERATED FOR
\r
671 IFDEF SAV'PI, < ;WAIT TILL CHANNEL SAVE ROUTINES
\r
672 ; ARE DEFINED BELOW (IN PASS 2)
\r
674 DEV'SAV==SAV'PI ;CHANNEL AC SAVE ROUTINE LOCATION
\r
675 DEV'RET==RET'PI ;CHANNEL AC RESTORE ROUTINE LOCATION
\r
676 ; (USUALLY POPJ USED)
\r
677 DEV'CHL==CH'PI ;LOCATION WHERE INTERRUPT PC IS STORED
\r
678 DEV'SAC==SAVAC'PI ;STARTING CHANNEL SAVE LOCATION FOR AC'S
\r
680 INTERN DEV'SAV, DEV'RET, DEV'CHL, DEV'SAC
\r
683 DTBIT==0 ;ASSUME THIS IS NOT A DECTAPE
\r
685 IFIDN <DEV>,<DTA>,<DTBIT==1> ;IS IT PDP-10 DECTAPES?
\r
686 IFIDN <DEV>,<DTC>,<DTBIT==1> ; OF PDP-6 DECTAPES?
\r
689 XWD DEV'N*1000+0,0 ;NO PI CHANNEL FOR THIS DEVICE
\r
693 XWD DTBIT*400000+DEV'N*1000+PI,DEV'INT ;FIRST WORD
\r
697 XWD DEV'DDS,DEV'DDB ;MULTIPLE DEVICE SECOND WORD
\r
702 XWD 0,DEV'DDB ;SINGLE DEVICE SECOND WORD
\r
704 \f;MACRO'S TO ALLOW GENERATION OF MULTIPLE INTTAB ENTRIES FOR MULTIPLE
\r
705 ; DEVICES SUCH AS LINE PRINTERS
\r
707 DEFINE MULASG (DEV,DE,PI) <
\r
718 DEFINE DEVASG (DE,X,PI) <
\r
724 ;MACROS TO CONTROL ASSIGNMENT OF PI CHANNELS TO DEVICES
\r
726 DEFINE NEXTCH< .CH==.CH+1
\r
730 DEFINE NEXTCQ< IFN .CHAS,<NEXTCH>>
\r
731 DEFINE NEXTCU (N) <IFDEF UNIQ'N,<IFN UNIQ'N,<NEXTCH>>>
\r
732 \f;ASSUME NO PI CHANNEL SAVE ROUTINES NEEDED
\r
742 ;NOW GENERATE THE TABLE FOR ONCE AND DEFINE PI CHANNEL ASSIGNMENTS
\r
744 INTERN INTTAB,INTTB1,INTNUM,SCNN,CTYN
\r
745 CTYN==1 ;ALWAYS ONE CTY
\r
746 SCNN==JOBN ;NUMBER OF SCN DDB
\r
747 ; ONE FOR EACH JOB + NULL JOB(EXTRA ONE)
\r
748 APRN==1 ;ALWAYS AN APR
\r
749 CLKN==1 ;ALWAYS LOWEST PRIORITY CLOCK
\r
752 INTTAB: ;TABLE OF DATA FOR DEFINING PI CHAN AND NO. OF DOB
\r
760 ;THE FOLLOWING DEVICES MUST HAVE A UNIQUE, HIGH PRIORITY
\r
761 ; CHANNEL FOR BLOCK I/O TRANSFERS.
\r
763 ;NOTE THAT THE PDP-6 DECTAPE AND MAGTAPE SHARE A
\r
764 ; 136 DATA CONTROL IF BOTH ARE PRESENT.
\r
766 ;DATA PRODUCTS DISK BLKO/BLKI PI CHANNEL
\r
767 IFNDEF DCBCHN,<IFG DPDN,<XP DCBCHN,.CH
\r
769 ;PDP-6 OR PDP-10 MAGTAPE BLKI/BLKO PI CHANNEL:
\r
770 IFNDEF MTDCHN,<IFG MTAN,<XP MTDCHN,.CH
\r
772 IFNDEF DCTCHN,<IFG MTCN,<XP DCTCHN,.CH
\r
774 ;PDP6 OR PDP10 DECTAPE BLKI/BLKO PI CHANNEL:
\r
775 IFNDEF DTDCHN,<IFG DTAN,<XP DTDCHN,.CH
\r
777 IFNDEF DCTCHN,<IFG DTCN,<XP DCTCHN,.CH
\r
780 IFNDEF BLKMXC,<BLKMXC=.CH> ;REMEMBER THIS CHANNEL ON PASS 1
\r
781 .CH==BLKMXC ;ON PASS 2, SKIP OVER BLKI CHANNELS
\r
783 ;THE FOLLOWING ARE GROUPED ON A CHANNEL FOR HIGH-PRIORITY DEVICES
\r
788 \f;THE FOLLOWING ARE MEDIUM-PRIORITY DEVICES, AS A GROUP
\r
800 ;THE FOLLOWING ARE LOWER-PRIORITY DEVICES,AS A GROUP
\r
809 ;THE DISPLAY GETS ITS OWN LOW-PRIORITY CHANNEL
\r
814 ;LAST IS THE SCHEDULER, ON CHANNEL 7 BY ITSELF
\r
816 IFG <.CH-7>,<PRINTX ;NOT ENOUGH PI'S TO SERVICE THIS CONFIGURATION
\r
817 PRINTX ;SUGGEST EDITING COMMON TO PUT MORE DEVICES ON
\r
818 PRINTX ; A SINGLE CHANNEL>
\r
823 ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLING
\r
824 ; WHICH DO NOT USE A CHANNEL SAVE ROUTINE AND HAVE
\r
825 ; NO DEVIC EDATA BLOCK
\r
827 ;GENERATE ANY SPECIAL DEVICES CUSTOME IS SUPPLYING
\r
828 ; WHICH DO NEED A CHANNEL SAVE ROUTINE
\r
829 ; AND HAVE MULTIPLE DEVICE DATA BLOCKS(0 MEANS NONE)
\r
831 ;END OF THE ASSIGNMENT TABLE
\r
833 INTNUM==INTTAB-. ;-LENGTH OF INTERRUPT CHANNEL ASSIGNMENT TABLE
\r
835 IFLE .-SYSEND,<LOC SYSEND+1>
\r
836 ; SET LOC UP TO SYSEND+1, UNLESS ONCE ONLY CODE
\r
838 \f;SYSTEM CONSTATNS AND PARAMETERS
\r
840 INTERN CNFTBL,CNFMXL,CONFIG,SYSTAP,SYSDAT
\r
843 CNFTBL: ;FIRST LOCATION 0F MONITOR DATA STORAGE
\r
844 ; RETURNED BE GETTAB UUO(THESE LOCATIONS
\r
845 ; NOT CLEARED BY SYSINI)
\r
846 ; CNFTBL IS GETTAB TABLE 11(RH OF AC)
\r
847 ; OCTAL NOS. IN () CORRESPOND TO GETTAB UUO
\r
848 CONFIG: SYSNAM ;(0-4)NAME OF SYSTEM, IN ASCII
\r
849 LOC CONFIG+5 ;ALWAYS LEAVE 5 WORDS(24 CHARS)
\r
850 ; SO GETTAB UUO WILL BE CONSTANT
\r
851 SYSDAT: SYSDAT ;(5,6)GENERATE SYSTEM DATE
\r
852 LOC SYSDAT+2 ;ALWAYS LEAVE 2 WORDS SO GETTAB CONSTANT
\r
853 SYSTAP: SYSDEV ;(7)NAME OF SYSTEM DEVICE, IN SIXBIT
\r
855 \f;LOCATIONS SETUP BY ONCE ONLY OPERATOR DIALOGUE AND NEVER RESET ON RESTARTS
\r
857 INTERN TIME,THSDAT,SYSSIZ,DEVOPR,DEVLST,SEGPTR,TWOREG,STATES
\r
861 TIME: 0 ;(10)TIME OF DAY IN JIFFIES (60TH OR 50THS OF A SEC.)
\r
862 THSDAT: 0 ;(11)TODAY'S DATE((Y-1964)*12+(M-1))*31+(D-1)
\r
863 SYSSIZ: EXP PATCH ;(12)SIZE OF MONITOR(FIRST LOC NOT USED)
\r
864 DEVOPR: SIXBIT /CTY/ ;(13)SIXBIT PHYSICAL NAME OF OPERATORS CONSOLE
\r
865 ; (IF THIS LOCATION CONTAINS 0, NONE HAS
\r
867 ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE
\r
868 ;ALSO UNEXPLAINED MONITOR ERROR MESSAGE WILL BE TYPED
\r
870 DEVLST: XWD 0,0 ;(14)LH CONTAINS ADDRESS OF FIRST DEVICE DATA BLOCK
\r
871 ;ONCE ONLY CODE LINKS DEVICE DATA BLOCKS
\r
872 \fSEGPTR: XWD -SEGN,JOBN ;(15)AOBJN POINTER TO FIRST HIGH SEG IN JBTXXX TABLES
\r
873 ; LH=-NO. OF HIGH SEGS, RH=FIRST HIGH SEG NO.
\r
874 TWOREG: 0 ;(16)FLAG TO INDICATE WHETHER BOTH HARDWARE AND SOFTWARE
\r
875 ; HAVE 2 RELOC REG CAPACITY
\r
876 ; NON-ZERO IF BOTH DO, 0 IF EITHER OR BOTH DO NOT
\r
877 ; SET BY ONCE ONLY CODE
\r
879 IFG DSKN,<ZZ==ZZ!1B0> ;1 IF DISK SYSTEM(ANALOGOUS TO FTDISK)
\r
880 IFG SYS50N,<ZZ==ZZ!1B1> ;1 IF SWAPPING SYSTEM(ANALOGOUS TO FTSWAP)
\r
881 IFG LOGINN,<ZZ==ZZ!1B2> ;1 IF LOGIN(ANALOGOUS TO FTLOGIN)
\r
882 IFN FTTTYSER,<ZZ==ZZ!1B3> ;1 IF FULL DUPLEX SOFTWARE
\r
883 IFN FTPRV,<ZZ==ZZ!1B4> ;1 IF PRIVILEGE FEATURE INCLUDED
\r
884 IFN FT2REL,<ZZ==ZZ!1B5> ;1 IF REENTRANT SOFTWARE
\r
885 IFE JIFSEC-^D50,<ZZ==ZZ!1B6> ;1 IF 50 CYCLE MACHINE, 0 OF 60 CYCLE
\r
886 STATES: EXP ZZ ;(17)BITS WHICH DEFINE TYPE OF SYSTEM IN LH
\r
887 ; RH PATCHED BY MONITOR COMMAND TO
\r
888 ; INDICATE OPERATIONAL STATE OF SYSTEM
\r
889 ;INSERT NEW LOCATIONS OF INTEREST SETUP
\r
890 ; BY ONCE ONLY CODE HERE
\r
891 SERIAL: EXP APRSN ;(20) SERIAL NUMBER OF APR
\r
892 CNFMXL==<.-CNFTBL-1>B26 ;MAX. ENTRY IN CNFTBL FOR GETTAB UUO
\r
894 INTERN ODPTBL,ODPMXL,SWPHGH,K4SWAP,PROT,PROT0
\r
896 IFG SYS50N,< EXTERN ICPROT,ICPRT1 ;THESE ARE DEFINED ONLY IN
\r
897 ; A SWAPPING SYSTEM>
\r
898 IFLE SYS50N,< XP ICPROT,0 ;IF NON-SWAPPING, DECLARE
\r
899 XP ICPRT1,0 ; INTERNAL IN COMMON>
\r
901 ODPTBL: ;FIRST LOC IN MONITOR DATA AREA FOR DISK
\r
902 ; LOCATION WHICH ARE NOT SET TO 0 WHEN SYSTEM
\r
903 ; STARTED. ODPTBL IS GETTAB UUO TABLE 15
\r
905 SWPHGH: 0 ;(0) HIGHEST LOGICAL BLOCK # IN THE SWAPPING
\r
906 ; SPACE ON THE DISK (SET BY SWPINI)
\r
907 K4SWAP: 0 ;(1)K OF DISK WORDS SET ASIDE FOR SWAPPING
\r
908 ; ASSIGNED AT ONCE ONLY REFRESH TIME
\r
909 PROT: EXP ICPROT ;(2) IN-CORE PROTECT TIME PARAMETER USED TO
\r
910 ; MULTIPLY TIMES (K-1) OF CORE
\r
911 PROT0: EXP ICPRT1 ;(3) IN-CORE PROTECT TIME PARAMETER ADDED TO
\r
912 ; ABOVE REULT TO COMPLETE COMPUTATION
\r
916 ;INSERT NEW LOCATIONS OF INTEREST SETUP
\r
917 ; BY ONCE ONLY CODE HERE FOR DISK SYSTEMS
\r
918 ODPMXL==<.-ODPTBL-1>B26 ;MAX. ENTRY IN ODPTBL FOR GETTAB UUO
\r
920 \f;MORE DATA LOCATIONS SETUP AT ASSEMBLY TIME OR ONCE ONLY TIME
\r
921 ; BUT NOT OF INTEREST TO USER PROGRAMS
\r
923 INTERN XJBPFI,PMONTB,MONTAB,MIDNIT
\r
925 XJBPFI: XWD .,0 ;LH FILLED IN WITH EXTERNAL JOBPFI (SEE JOBDAT)
\r
926 ; JOBPFI==HIGHEST LOC, IN USER JOB DATA AREA
\r
927 ; PROTECTED FROM IO
\r
928 ;MONTH TABLE FOR DAYTIME COMMAND PRINTING
\r
930 PMONTB: POINT 6,MONTAB(TAC),5 ;POINTER TO NUMBER OF DAYS INMONTH
\r
931 MONTAB: EXP ^D30B5+"JAN
\r
943 MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT
\r
944 \f;STOP PROCEDURE WHEN SHUTTING DOWN SYSTEM
\r
945 ;BECAUSE OF CATOSTROPHIC FAILURE OR ANY OTHER REASON
\r
946 ;WRITE OUT DIRECTORIES STILL IN CORE (DISK)
\r
947 ;TRANSFER HERE FROM LOC 147
\r
949 ;PROCEDURE TO SAVE CRASHED MONITOR ON DECTAPE FOR LATER DEBUGGING UNDER TIME SHARING
\r
951 ; 1. PUSH STOP AND HOLD IT DOWN
\r
952 ; 2. PUSH CONTINUE(APR PI IN PROGRESS SHOULD COME ON)
\r
953 ; THIS PUTS MACHINE INTO EXEC MODE AND STORES PC OC CRASH
\r
955 ; 4. SET ADDRESS SWITCHES TO 147
\r
956 ; 5. PUSH START(DO NOT PUSH IO RESET AS IT WILL CLEAR DEVICES)
\r
958 INTERN APRSTS,PISTS,SYSTOP,CRASHX,SWTSTS,TTYSTS,PTRSTS,TMCSTS
\r
959 INTERN PTPSTS,DLSSTS,DTSSTS,CRSTS,LPTSTS,PLTSTS,TMSSTS,DSKSTS,DSKDTI
\r
962 EXTERN CRSHAC ;DEFINED IN SYSINI TO BE 143 RESTART CODE
\r
963 ;SO MONITOR CANNOT BE RESTARTED AT 143 AFTER
\r
964 ;BEING STARTED AT 147.
\r
966 CRASHX: MOVEM 17,CRSHAC+17 ;SAVE AC17
\r
968 CAME 17,SYSCRS ;IS LOC 147 WIPED OUT?
\r
969 HALT SYSTOP+1 ;YES - LET OPERATOR DECIDE WHAT TO DO
\r
970 JRST SYSTOP+1 ;NO - GO SAVE AC'S & DEVICE STATES
\r
971 TSTLOC: JRST SYSTOP
\r
973 SYSTOP: MOVEM 17,CRSHAC+17 ;SAVE ALL ACS
\r
974 MOVEI 17,CRSHAC ;SOURCE==0, DESTINATION==CRSHAC
\r
975 BLT 17,CRSHAC+16 ;SO DDT CAN LOOK AT SAVED CRASH LATER
\r
978 APRSTS: CONI APR,. ;STORE APR STATUS HERE
\r
979 PISTS: CONI PI,. ;STORE PI STATUS HERE
\r
980 SWTSTS: DATAI APR,.
\r
992 DSKDTI: DATAI DSK,.
\r
993 CONO APR,APRRST ;RESET SYSTEM
\r
994 MOVEI PDP,SYSPDL ;SETUP PDP TO SPARE AREA
\r
998 HALT 137400 ;STOP AT TENDMP(READY TO READ IN ANYTHING)
\r
1000 ;ERROR RECOVERY - TRY TO START NULL JOB
\r
1002 NULJB1: MOVEI ITEM,0 ;SET JOB NUMBER TO 0
\r
1003 JRST NULJOB ;GO RESTORE NULL JOB
\r
1004 \f;COMMON SUBROUTINE RETURNS
\r
1006 INTERN CPOPJ,CPOPJ1,DPOPJ,TPOPJ,TPOPJ1,CPOPJ2,IPOPJ1,IPOPJ
\r
1007 INTERN CUXIT1,CUXIT,UXIT
\r
1008 INTERN FTTIME,FTSWAP,FTSLEEP,FTKCT,FT2REL,FTPRV
\r
1009 CPOPJ2: AOS (PDP) ;DOUBLE SKIP SUBROUTINE RETURN
\r
1010 CUXIT1: ;OLD SKIP RETURN FOR UUOS
\r
1011 CPOPJ1: AOSA (PDP) ;SKIP SUBROUTINE RETURN
\r
1012 DPOPJ: MOVEM IOS,DEVIOS(DEVDAT) ;DEPOSIT IO STATUS WORD IN DDB
\r
1014 CUXIT: ;OLD RETURN FOR UUOS
\r
1017 TPOPJ1: AOS -1(PDP) ;RESTORE TAC THEN SKIP RETURN
\r
1018 TPOPJ: POP PDP,TAC ;RESTORE TAC
\r
1019 POPJ PDP, ;AND RETURN
\r
1020 IPOPJ1: AOS -1(PDP) ;SET FOR SKIP RETURN
\r
1021 IPOPJ: POP PDP,ITEM ;RESTORE ITEM (USUALLY JOB OR HIGH SEG NUMBER)
\r
1024 ; SYSTEM BYTE POINTERS
\r
1026 INTERN PUUOAC,PIOMOD,PJOBN,PUNIT,PJBSTS,PDVTIM,PDVCNT,PCORSZ,COREP
\r
1029 PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD
\r
1030 PIOMOD: POINT 4,IOS,35 ;MODE BITS
\r
1031 PJOBN: POINT 6,DEVCHR(DEVDAT),5 ;DEVICE JOB ASSIGNMENT
\r
1032 PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO.
\r
1033 PJBSTS: POINT JWSIZ,JBTSTS(ITEM),JWPOS ;JOB WAIT STATE(QUEUE) CODE
\r
1034 ;IN JOB STATUS WORD
\r
1035 PDVTIM: POINT 6,DEVCHR(DEVDAT),17 ;TIME IN SECONDS BEFORE DEVICE
\r
1036 ;IS SAID TO BE HUNG
\r
1037 PDVCNT: POINT 6,DEVCHR(DEVDAT),11 ;COUNTER DOWN EACH SECOND,
\r
1038 ;1 TO 0 TRANSITION MEANS HUNG DEVICE
\r
1039 IADPTR: POINT 2,DEVIAD(DEVDAT),2 ;COUNT OF NO. OF USER CHANNELS INITED
\r
1040 ; ON THIS DEVICE(DECTAPE ONLY)
\r
1041 PCORSZ: POINT 8,JBTADR(ITEM),7 ;BYTE POINTER TO LOW OR HIGH SEG CORE SIZE-1
\r
1043 COREP: POINT 1,CORTAB ;1 BIT POINTER TO CORE ALLOCATION TABLE
\r
1045 IFG SYS50N,< ;SWAPPING SYSTEM?
\r
1046 INTERN IMGIN,IMGOUT,IMGINT,OUTMSK,INMSK,INLEFT
\r
1047 INMSK=000377 ;RH MASK TO IMGIN
\r
1048 INLEFT=12 ;NO. OF BITS TO SHIFT TO LEFT JUSTIFY IN RH
\r
1050 IMGIN: POINT 8,JBTSWP(ITEM),35 ;BYTE POINTER FOR # 1K BLOCKS OF CORE
\r
1051 ;WHEN JOB OR HIGH SEG NEXT SWAPPED IN
\r
1052 ;NON-ZERO ONLY WHEN SWAPPED OUT
\r
1053 IMGOUT: POINT 8,JBTSWP(ITEM),26 ;BYTE POINTER FOR # 1K BLOCK OF DISK
\r
1054 ;WHEN JOB OR HIGH SEG HAS IMAGE ON DISK
\r
1055 ;ZERO MEANS NO DISK SPACE ALLOCATED
\r
1056 OUTMSK=377000 ;RH MASK TO IMGOUT. USED TO TEST FOR 0
\r
1057 ; (IE NO DISK SPACE)
\r
1058 IMGINT: POINT 8,JBTSWP(DEVDAT),35 ;POINTER TO INCORE IMAGE
\r
1060 \f;SPECIAL PROJECT-PROGRAMMER NOS.
\r
1061 IFG DSKN,< ;DISK SYSTEM?
\r
1062 INTERN CUSPPP,SYSPP,DUMPPP,HELPPP
\r
1064 CUSPPP: ;CUSP FILE DIRECTORY, MAKE SEPARATE TAG FROM
\r
1066 SYSPP: XWD 1,1 ;THE MASTER FILE DIRECTORY PROJECT PROGRAMMER NO.
\r
1067 DUMPPP: XWD 1,2 ;THE FAILSAFE PROJ,PROG NO.(CAN READ OR WRITE ANYTHING)
\r
1068 HELPPP: XWD 2,4 ;SYSTAT AND HELP PROJECT,PROGRAMMER NOS IF JOB NOT LOGGED INALREADY
\r
1070 \f;DEFINE PI CHANNEL SAVE AND RESTORE ROUTINES IF A DEVICE IS ON THE CHANNEL
\r
1072 HIGHAC==10 ;HIGHEST AC SAVE ON A PI INTERRUPT
\r
1073 PDL==25 ;LENGTH OF INTERRUPT PI PUSH DOWN LIST
\r
1077 INTERN SAV'PI,RET'PI,CH'PI
\r
1078 CH'PI: 0 ;PC STORED HERE BY JSR ON INTERRUPT TO CHANNEL PI
\r
1079 JEN @CH'PI ;LAST INSTRUCTION ON CONSO DEV, CHAIN
\r
1081 ;HERE FROM AN INTERRUPT ROUTINE WHICH HAS FOUND ITS DEVICE NEEDS SERVICE
\r
1082 ;SAVE ACS 0 THRU HIGHAC, CALLED BY JSR, SETS UP PDP TO PUSH DOWN LIST FOR THIS PI
\r
1084 SAV'PI: 0 ;CALLED BY JSR
\r
1085 MOVEM HIGHAC,SAVAC'PI+HIGHAC ;SAVE AC HIGHAC
\r
1086 MOVEI HIGHAC,SAVAC'PI ;SETUP TO SAVE 0 THRU HIGHAC-1
\r
1087 BLT HIGHAC,SAVAC'PI+HIGHAC-1 ;SAVE ACS
\r
1088 MOVE PDP,SAVAC'PI+HIGHAC+1 ;SETUP PUSH DOWN POINTER
\r
1089 JRST @SAV'PI ;RETURN TO CALLER AND PROCESS INTERRUPT
\r
1091 ;HERE FROM INTERRUPT ROUTINE WHEN IT HAS FINISHED SERVICING INTERRUPT
\r
1092 ;RESTORE ACS AND DISMISS INTERRUPT
\r
1093 ;USUALLY TRANSFERRED TO BY POPJ PDP,
\r
1095 RET'PI: MOVSI HIGHAC,SAVAC'PI ;RESTORE ACS 0 THRU HIGHAC
\r
1097 JEN @CH'PI ;DISMISS INTERRUPT ON THIS PI CHANNEL
\r
1099 SAVAC'PI: BLOCK HIGHAC+1 ;PLACE TO SAVE ACS 0 THRU HIGHAC
\r
1100 XWD -PDL+1,.+1 ;INITIAL PUSH DOWN POINTER
\r
1101 CH'PI'PD1: EXP RET'PI ;FIRST WORD ON LIST,
\r
1102 ; POPJ WILL RETURN TO DISMISS INTERRUPT
\r
1103 BLOCK PDL-1 ;PUSHDOWN LIST SPACE
\r
1107 \f;GENERATE THE CHANNEL SAVE ROUTINE ONLY FOR PI WHICH NEED THEM(ASGSAV MACRO USED)
\r
1109 IFN USED1,<CHAN 1>
\r
1110 IFN USED2,<CHAN 2>
\r
1111 IFN USED3,<CHAN 3>
\r
1112 IFN USED4,<CHAN 4>
\r
1113 IFN USED5,<CHAN 5>
\r
1114 IFN USED6,<CHAN 6>
\r
1115 IFN USED7,<CHAN 7>
\r
1116 ;GENERATE NULL CHANNEL SAVE ROUTINES FOR THOSE CHANNEL NOT USED
\r
1126 IFE USED1,<NULL 1>
\r
1127 IFE USED2,<NULL 2>
\r
1128 IFE USED3,<NULL 3>
\r
1129 IFE USED4,<NULL 4>
\r
1130 IFE USED5,<NULL 5>
\r
1131 IFE USED6,<NULL 6>
\r
1132 IFE USED7,<NULL 7>
\r
1133 \f;HERE ON TRAPS TO LOC 60/61 - UNIMPLEMENTED INSTRUCTIONS(PDP-10 ONLY)
\r
1134 ;OPCODE AND EFFECTIVE ADDRESS STORED IN SIXTY AND 61 EXECUTED(JSR UUO2)
\r
1135 ;OP CODE 100(UJEN) IS USED TO DISMISS USER MODE INTERRUPTS FOR REAL TIME OPERATION
\r
1136 ;USED IN CONJUNCTION WITH TRPSET UUOWHICH IS SOON TO BE REPLACED
\r
1137 ;WITH SOME KNAVE-PROOF REAL TIME UUOS. THIS CODE IS HERE ONLY
\r
1138 ;BECAUSE MANUAL DESCRIBES TRPSET AND TRPJEN UUOS.
\r
1139 ;TRPJEN HAS BEEN REPLACED WITH OPCODE 100(UJEN).
\r
1140 ;CALL: UGEN U ;WHERE U CONTAINS PC STORED BY INTERRUPT JSR
\r
1144 UUO2: 0 ;USER PC STORE HERE BY JSR
\r
1145 EXCH TAC,UUO2 ;GET USER PC, SAVE TAC
\r
1147 TLNN TAC,UIOMOD ;USER IO MODE ON?
\r
1148 JRST UUOER2 ;NO, TREAT AS AN ILLEGAL INSTRUCTION AND PRINT MESS.
\r
1149 HLL TAC,SIXTY ;YES, GET UNIMPLEMENTED OPCODE WHICH TRAPPED
\r
1150 TLNE TAC,677777 ;IS IT OPCODE 100(UJEN)?
\r
1151 JRST UUOER1 ;NO, TREAT AS ILLEGAL INSTRUCTION
\r
1152 MOVE TAC,SIXTY ;YES, GET EFFECTIVE ADDRESS
\r
1153 ADD TAC,JOBADR ;ADD RELOCATION FOR CURRENT JOB
\r
1154 MOVE TAC,(TAC) ;GET PC STORED BY INTERRUPT JSR
\r
1155 EXCH TAC,UUO2 ;RESTORE TAC, AND STORE PC
\r
1156 JEN @UUO2 ;DISMISS INTERRUPT
\r
1158 UUOER1: HRLI TAC,USRMOD!UIOMOD ;SET USER MODE AND USER IO MODE BACK ON
\r
1160 UUOER2: MOVEM TAC,UUO0 ;STORE PC AS IF AN ILLEGAL INSTR. HAD OCCURRED
\r
1161 SETOM FORTY ;MAKE IT LOOK LIKE AN ILLEGAL INSTRUCTION
\r
1163 SKIPA TAC,UUO2 ;RETORE TAC AND FALL INTO REGULAR UUO HANDLER
\r
1164 \f;HERE ON TRAPS TO EXEC LOC 40/41 - OPCODES 0,40-77(0-77 ON PDP-6)
\r
1167 EXTERN UUOUSR,UUOSY1,ERROR
\r
1169 UUO0: 0 ;JSR HERE FROM LOC 41
\r
1170 MOVEM 17,USRSAV ;SAVE 17
\r
1171 MOVE 17,UUO0 ;GET PROCESSOR FLAGS
\r
1172 TLNN 17,USRMOD ;IS UUO FROM MONITOR?
\r
1173 JRST UUOSY1 ;YES, DO NOT SAVE ACS
\r
1174 SKIPN 17,JOBADR ;IS THERE A JOB DATA AREA?
\r
1175 JSP DAT,ERROR ;NO, MUST BE UUO DURING NULL JOB
\r
1176 ; PRINT ERROR IN MONITOR
\r
1177 IFE PDP10N,< ;FOR PDP-6 OPCODES 1-37
\r
1178 EXCH TAC,FORTY ;SAVE TAC, PICK UP UUO
\r
1179 TLNN TAC,740000 ;IS THIS SYSTEM UUO?
\r
1180 TLNN TAC,077000 ;NO, IS IT 0 UUO?
\r
1182 MOVEM TAC,40(17) ;STORE UUO IN USER'S 40
\r
1183 HRRZ TAC,41(17) ;PICK UP ADR OF USER'S JSR
\r
1184 JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UUO
\r
1185 HLL TAC,UUO0 ;USER PD FLAGS(RESTORED ON RETURN)
\r
1186 MOVEI 17,(TAC) ;17 NOW HAS REL.ADR+1 OF USER JSR
\r
1187 CAML 17,USRREL ;IS EFFECTIVE ADDRESS IN BOUNDS?
\r
1188 JRST UUOSY0 ;ERROR, JSR EFF. ADDR. OUTSIDE USER AREA
\r
1189 HRRI TAC,1(TAC) ;YES, INCREMENT PC.
\r
1190 EXCH TAC,UUO0 ;SET UP RETURN TO USER IN UUO0
\r
1191 ; PICKUP USERS FLAGS,PC
\r
1192 ADD 17,JOBADR ;MAKE REL. ADR. INTO ABS. ADR.
\r
1193 MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR
\r
1194 MOVE TAC,FORTY ;RESTORE TAC
\r
1195 MOVE 17,USRSAV ;RESTORE 17
\r
1196 JRST 2,@UUO0 ;RETURN TO USER(RESTORING FLAGS)
\r
1198 UUOSY0: MOVE 17,JOBADR ;SETUP 17 FOR LOW SEGMENT RELOCATION
\r
1199 UUOSYS: EXCH TAC,FORTY ;RESTORE USERS AC(TAC) AND USER'S UUO(FORTY)
\r
1201 JRST UUOUSR ;GO SAVE USER'S ACS IN REL. LOC. 0-17
\r
1202 ; AND DISPATCH ON UUO
\r
1203 \f;GENERATE EXTERNAL GLOBALS TO CAUSE LOADING OF PROPER ROUT. FROM MONITOR LIBRARY TAPE
\r
1207 ;ALWAYS LOAD CLOCK1,COMCON,CORE1,ERRCON,JOBDAT,ONCE,PATCH,SYSMAK,UUOCON
\r
1208 EXTERNAL CLOCK1,COMCON,CORE1,ERRCON,DATJOB,ONCE,PATCH,SYSMAK,UUOCON
\r
1210 IFG DDTN,<EXTERN DDTX>
\r
1211 IFE DDTN,<XP DDTEND,0 ;ONCE REFERENCES END OF DDT>
\r
1212 ;LOAD APPROPRIATE SCHEDULER FOR NON-SWAP OR SWAPPING SYSTEMS
\r
1213 IFG SYS40N,<EXTERN XCKCSS> ;CLKCSS
\r
1214 IFG SYS50N,<EXTERN XCKCSW> ;SCHED
\r
1216 ;LOAD EITHER SEGCON(2REG SOFTWARE) OR NULSEG(1 REG SOFTWARE)
\r
1217 ; UNLESS USER HAS EDITTED S WITH FT2REL=0 SO ALL PUSHJ'S
\r
1218 ; TO SEGCON(NULSEG) ARE REMOVED
\r
1221 IFG KT10AN, <EXTERN SEGCON>
\r
1222 IFE KT10AN, <EXTERN NULSEG>
\r
1226 INTERN PION,PIOFF,REQCLK,PICLK,APRCLR,APRCLE,APRNUL,APRRST,NXM,APRFOV
\r
1229 REPEAT 7-CLKCHN,<CLKBIT==CLKBIT*2>
\r
1230 PION==200 ;CONO PI,PION TURNS PI SYSTEM ON
\r
1231 PIOFF==400 ;TURN IT OFF
\r
1232 REQCLK==1B24+CLKBIT ;REQUEST INTERRUPT ON LOW PRIORITY CLK CHANNEL
\r
1233 PICLK=PION+REQCLK ;TURN ON PI,REQUEST INTERRUPT ON CLK CHANNEL
\r
1234 APRCLR==1000+APRCHN ;TURN APR CLOCK FLAG OFF
\r
1235 APRCLE==431550+APRCHN ;CLEAR ALL APR ERROR BITS
\r
1236 ; AND DISABLE FOV AND AR OVF
\r
1237 APRNUL==433550+APRCHN ;RESET APR FOR NULL JOB
\r
1238 ; CLEAR EVERYTHING BUT DONT IO RESET
\r
1239 APRRST==APRNUL+200000 ;RESET APR FOR SYSINI(IO RESET TOO)
\r
1240 NXM==10000 ;NON-EX MEM I(APR STATUS WORD)
\r
1241 IFG PDP10N,<APRFOV==100 ;FLOADTING OVERFLOW CAN BE ENABLED ON PDP10
\r
1242 ; FOR USER TRAPPING>
\r
1243 IFE PDP10N,<APRFOV==000 ;PC CHANGE CANNOT BE ENABLED ON PDP-6, BEACUSE
\r
1244 ; IT MAKES MONITOR TRAP ALSO>
\r
1246 ;MAKE SURE THAT PROPER VERSION OF FEATURE SWITCH FILES WERE USED TO ASSEMBLE
\r
1247 ;THE REST OF THE MONITOR
\r
1248 ;THE LOADER WILL PRINT MUL. DEF. GLOBAL IF A MISTAKE HAS BEEN MADE
\r
1253 IFG KT10AN,<XP FT2REL,-1> ;IF Z RELOC SOFTWARE, THEN FTZREL MUST BE -1
\r
1254 IFE COREN,<COREN=^D256 ;NO RESTRICTION IF 0 TYPED>
\r
1255 XP USRLIM,COREN ;DEFINE GLOBAL RESTRICTING SIZE OF CORE FOR ANY SINGLE USER
\r
1256 ; ONCE ONLY CODE CAN ALTER THIS VALUE
\r
1257 ; (PATCH RH CORLIM IN SYSIM)
\r
1259 ;SCANNER ENTRY POINTS AND BIT DEFINITIONS
\r
1261 IFG DLSN,<EXTERN DLSINT> ;DATA LINE SCANNER
\r
1262 IFG CCIN,<EXTERN CCIINT> ;DA-10 PDP-8 680
\r
1263 IFG DCSN,<EXTERN DCSINT> ;630 DATA COMMUNICATIONS SYS
\r
1265 IFG FULLN,<EXTERN SCNSRF> ;FULL DUPLEX SOFTWARE ENTRY POINT
\r
1266 IFE FULLN,<EXTERN SCNSRH> ;HALF DUPLEX SOFTWARE ENTRY POINT
\r
1270 LINTAB: ;LINE CHARACTERISTIC BITS (NOT CLEARED ON SYSTEM STARTUP)
\r
1272 ;TELETYPE LINE CHARACTERISTICS(LH OF LINTAB)
\r
1273 ;USED IN SCNSRF ALSO
\r
1275 XP PTYLIN,400000 ;PSEUDO TTY LINE
\r
1276 XP CTYLIN,200000 ;CONSOLE TTY
\r
1277 XP DISLIN,100000 ;KEYBOARD DISPLAY
\r
1278 XP DSDTLN, 40000 ;DATASET DATA LINE
\r
1279 XP DSCTLN, 20000 ;DATASET CONTROL LINE(DC10E)
\r
1280 XP HLFDPX, 10000 ;HALF DUPLEX LINE
\r
1281 XP TTYRMT, 4000 ;REMOTE TTY
\r
1282 XP T35, 10 ;TTY HAS HARDWARE TABS
\r
1283 XP FULTWX, 4 ;SELF-ECHOING LINE
\r
1284 ;USED IN CCIINT,DCSINT,DLSINT & SCNSRF
\r
1286 IFG EDITN,< ;HAS COMMON.MAC BEEN EDITED TO DEFINE TTY LINE CHAR.
\r
1287 ; SO MONGEN TYPE-IN REDUCED?
\r
1288 ;IF NO APR NUMBER, AND THIS IS NOT EDITED FOR THE CUSTOMER,
\r
1289 ; MAKE ALL LINES JUST BE MODEL 33 TELETYPES
\r
1291 IFE APRSN,<REPEAT TTPLEN,<0>>
\r
1293 ;FOLLOWING LINE DEFINITIONS FOR DEC PDP10 #2
\r
1299 REPEAT 3,< XWD T35,0> ;TTY4-6
\r
1300 XWD T35+TTYRMT,0 ;TTY7 - REMOTE 35
\r
1301 XWD DSDTLN,0 ;TTY10
\r
1302 XWD DSDTLN+HLFDPX,0 ;TTY11
\r
1303 XWD DSDTLN,0 ;TTY12
\r
1304 REPEAT 4,< XWD T35,0> ;TTY13-16
\r
1305 XWD TTYRMT,0 ;TTY17 - REMOTE
\r
1306 REPEAT 8,<XWD TTYRMT,0>
\r
1309 ;THIS CONFIGURATION FOR DEC SYSTEM NUMBER 40
\r
1311 REPEAT ^D8,<0 ;MODEL 33'S LOCALLY>
\r
1313 REPEAT ^D8,< XWD DSDTLN,0 ;DATASET>
\r
1316 ; CTY AND PTY SET BY SCNSRF
\r
1317 > ;END PRE-EDITED LINE CHARACTERISTICS
\r
1318 \fIFE EDITN,< ;MONGEN DIALOG DEFINE TTY CONFIG?
\r
1320 DEFINE GENLIN (LIN)<
\r
1321 IFNDEF DSD'LIN,<DSD'LIN=0> ;DATA SET?
\r
1322 IFNDEF TAB'LIN,<TAB'LIN=0> ;HARDWARE TABS?
\r
1323 IFNDEF RMT'LIN,<RMT'LIN=0> ;REMOTE?
\r
1324 IFNDEF HLF'LIN,<HLF'LIN=0> ;HALF DUPLEX SCANNER?
\r
1325 XWD DSD'LIN*DSDTLN+TAB'LIN*T35+RMT'LIN*TTYRMT+HLF'LIN*HLFDPX,0
\r
1328 REPEAT HGHLIN+1,<LINE=.-LINTAB ;DEFINE LINE NUMBER
\r
1333 LOC LINTAB+TTPLEN ;MAKE SURE ENOUGH SPACE FOR CTY+PTY'S
\r
1336 > ;END OF FULL DUPLEX CONDITIONAL
\r
1338 INTERN FSNCHN,SCNON,SCNOFF
\r
1340 FSNCHN==SCNCHN*101 ;CHANNEL ASSIGN. FOR FULL DUPLEX SCN.
\r
1342 REPEAT 7-SCNCHN,<SCNBIT==SCNBIT*2>
\r
1343 SCNON==2000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL ON
\r
1344 SCNOFF==1000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL OFF
\r
1345 IFG TABSN,<TTMODL=-1> ;HARDWARD TABS
\r
1346 IFE TABSN,<TTMODL=0>
\r
1347 XP SCNNUM,HGHLIN+1 ;NO. OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG)
\r
1348 \f;MAGTAPE ENTRY POINT AND BIT DEFINITIONS
\r
1350 IFG MTAN,<EXTERN MTASRX> ;TM10 ENTRY POINT
\r
1351 IFG MTCN,<EXTERN MTCSR6> ;PDP-6 MAGTAPES ENTRY POINT
\r
1354 INTERN MTALOC,MTLOC1,MTBOTH,MTFLAG,MMTSIZ
\r
1356 MTALOC==40+2*MTDCHN ;BLKI/BLKO LOCATION
\r
1357 MTLOC1==MTALOC+1 ;NEXT LOCATION
\r
1358 MTBOTH==MTACHN*10+MTDCHN ;BOTH PI CHANNELS
\r
1359 MTFLAG==400+MTACHN*10
\r
1362 INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT
\r
1363 DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOC
\r
1364 DCLOC1==DCLOC+1 ;NEXT LOCATION
\r
1366 REPEAT 7-DCTCHN,<DCBIT==DCBIT*2>
\r
1367 DCON==2000+DCBIT ;TURN DC PI CHANNEL ON
\r
1368 DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF
\r
1369 DCIN==4010+DCTCHN ;SET DC FOR INPUT
\r
1370 DCOUT==3410+DCTCHN ;SET DC FOR OUTPUT
\r
1372 \f;DECTAPE ENTRY POINT ADN BIT DEFINITIONS
\r
1374 SAVN==1 ;WE ONLY SUPPORT NEW FORMAT NOW
\r
1375 ;MONGEN NO LONGER ASKS QUESTION.
\r
1377 IFG DTAN,<EXTERN DTASRN> ;TD10 WITH NEW FORMAT
\r
1379 IFG SAVN,<EXTERN DTCSRN> ;556 WITH NEW FORMAT
\r
1380 IFE SAVN,<EXTERN DTCSRO> ;556 WITH OLD FORMAT
\r
1382 IFG DTAN,< ;DEFINE SYMBOLS IF PDP-10 DECTAPES(TD10)
\r
1383 INTERN DTALOC,DTALC2,DTBOTH,DTTURN
\r
1384 DTALOC==40+2*DTDCHN ;BLKI/BLKO LOCATION
\r
1385 DTALC2==DTALOC+1 ;NEXT LOCATION
\r
1386 DTBOTH==DTDCHN*10+DTACHN
\r
1387 DTTURN==300200+DTBOTH
\r
1389 IFG DTCN,< ;DEFINE SYMBOLS IF PDP-6 DECTAPES(556)
\r
1390 INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT
\r
1391 DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOC
\r
1392 DCLOC1==DCLOC+1 ;NEXT LOCATION
\r
1394 REPEAT 7-DCTCHN,<DCBIT==DCBIT*2>
\r
1395 DCON==2000+DCBIT ;TURN DC PI CHANNEL ON
\r
1396 DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF
\r
1397 DCIN==4010+DCTCHN ;SET DC FOR INPUT
\r
1398 DCOUT==3410+DCTCHN ;SET DC FOR OUTPUT
\r
1400 ;DEFINE SAVE MODE AND EXTENSION FOR OLD OR NEW FORMAT
\r
1404 SAVDMP==<SIXBIT / DMP/> ;EXTENSION FOR SAVED FILES == "DMP"
\r
1407 SAVDMP==<SIXBIT / SAV/> ;EXTENSION FOR SAVED FILES == "SAV"
\r
1409 \f;DISPLAY AND LITE PEN
\r
1412 IFG T340N,<EXTERN DIS340> ;TYPE 340 ENTRY POINT
\r
1413 IFE T340N,<EXTERN DIST30> ;TYPE 30 ENTRY POINT
\r
1414 INTERN DISBLK,DISJSR,ONDIS,NONDIS,OFFDIS,DISPON,DISPOF
\r
1415 DISBLK==40+2*DISCHN ;BLKI/BLKO LOCATION
\r
1417 ONDIS==100+10*PENCHN+DISCHN
\r
1418 NONDIS==10*PENCHN+DISCHN
\r
1421 REPEAT 7-DISCHN,<DISBIT==DISBIT*2>
\r
1422 DISPON==2000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL ON
\r
1423 DISPOF==1000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL OFF
\r
1427 \f;LINE PRINTER ENTRY POINT AND DDB DEFINITIONS
\r
1431 ;PROTOTYPE DEFINITION FOR LINE PRINTER DEVICE DATA BLOCKS
\r
1433 DEFINE LPTDDB (N) <
\r
1435 XLIST ;TURN OFF LISTING DURING EXPANSION
\r
1437 LP'N'SV1=LP'N'SAC+DEVDAT ;DEFINE DEVDAT SAVE LOCATION
\r
1439 LP'N'INT: CONSO LP'N,0 ;(-4) SKIP IF INTERRUPT FOR THIS LPT
\r
1440 JRST .-1 ;(-3) GO TO NEXT SKIP CHAIN ELEMENT
\r
1441 MOVEM DEVDAT,LP'N'SV1 ;(-2) SAVE DEVDAT IN CHANNEL SAVE AREA
\r
1442 JSP DEVDAT,LPTINT ;(-1) SET UP DDB ADDRESS AND BRANCH
\r
1446 IFE LPTN-1, < SIXBIT /LPT/ ;( 0) PHYSICAL DEVICE NAME >
\r
1447 IFN LPTN-1, < SIXBIT /LPT'N/ ;( 0) PHYSICAL DEVICE NAME >
\r
1448 XWD ^D60*HUNGST,<N>B23+LPTSIZ ;( 1) DEVICE CHARACTERISTICS
\r
1449 0 ;( 2) DEVICE I/O STATUS
\r
1450 XWD 0,LPTDSP ;( 3) LH=DDB LINK, RH=DSP TABLE ADDR.
\r
1451 LPTMOD==1_A+1_AL+1_I ;LPT LEGAL MODES
\r
1452 XWD DVOUT+DVLPT,LPTMOD ;( 4) DEVICE CHARACTERISTICS
\r
1453 0 ;( 5) LOGICAL DEVICE NAME
\r
1454 0 ;( 6) BUFFER HEADER ADDRESSES
\r
1455 LP'N'PTR: 0 ;( 7) BLOCK OUTPUT POINTER
\r
1456 XWD PROG,0 ;(10) CURRENT OUTPUT BUFFER ADDRESS
\r
1457 EXP 11*LP'N'CHN ;(11) INTERRUPT CHANNEL ASSIGNMENTS
\r
1459 MOVE DEVDAT,LP'N'SV1 ;(12) RESTORE DEVDAT, SAVE AC'S
\r
1460 JSR LP'N'SAV ;(13) AND ESTABLISH PDP
\r
1461 MOVEI DEVDAT,LP'N'NAM ;(14) SET UP DDB ADDRESS AND RETURN
\r
1462 JRST LPTNXT ;(15) TO COMMON INTERRUPT HANDLER
\r
1464 MOVE DEVDAT,LP'N'SV1 ;(16) RESTORE DEVDAT AND
\r
1465 JEN @LP'N'CHL ;(17) DISMISS INTERRUPT
\r
1467 0 ;(20) SAVE LOCATION FOR TAC
\r
1469 CONSZ LP'N,LPTECM ;(21) THE REST OF THE DDB CONTAINS
\r
1470 CONSO LP'N,LPTDON ;(22) THE ACTUAL I/O INSTRUCTIONS
\r
1471 ; USED BY THE COMMON SERVICE
\r
1472 CONSO LP'N,(TAC) ;(23) ROUTINE TO CONTROL A LINE
\r
1473 CONSZ LP'N,(TAC) ;(24) PRINTER. THEY ARE EXECUTED
\r
1474 CONI LP'N,TAC ;(25) BY MEANS OF AN XCT INSTRUCTION
\r
1475 CONO LP'N,(TAC) ;(26) INDEXED TO THE PROPER DDB
\r
1476 DATAO LP'N,(TAC) ;(27)
\r
1477 BLKO LP'N,LP'N'PTR ;(30)
\r
1479 LIST ;TURN LISTING BACK ON DURING EXPANSION
\r
1482 EXTERN LPTSER, LPTNXT, LPTECM, LPTDON, LPTINT, LPTDSP
\r
1484 LPT2=524 ;DEVICE SELECT CODE FOR SECOND LPT
\r
1486 IFNDEF LP0, <LP0=LPT> ;DEFINE STANDARD MNEMONIC DEFINITIONS
\r
1487 IFNDEF LP1, <LP1=LPT2> ; BUT ALLOW FOR OVERRIDE
\r
1489 $LPNUM=0 ;TEMPORARY SYMBOL USED TO FACILITATE
\r
1490 ; MACRO GENERATION
\r
1502 \f;CARD READER ENTRY POINT AND BITS
\r
1505 IFG CR10N,<EXTERN CDRSRX> ;CR10 ENTRY POINT
\r
1506 IFE CR10N,<EXTERN CDRSR6> ;PDP-6 CARD READER
\r
1508 CDRBTS==1670+CDRCHN
\r
1512 ;CARD PUNCH ENTRY POINT
\r
1515 EXTERN CDPSER ;ENTRY POINT
\r
1517 \f;PLOTTER ENTRY POINT
\r
1519 IFG PLTN,<EXTERN PLTSER>
\r
1522 ;PAPER TAPE READER ENTRY POINT AND MASK
\r
1524 IFG PTRN,<EXTERN PTRSER ;SAME ROUTINE FOR PDP-6 AND PDP-10 READER
\r
1526 IFG PDP10N,<PTRMSK==0> ;MASK==0 IF PDP-10 READER
\r
1527 IFE PDP10N,<PTRMSK==777777> ;MASK==777777 FOR PDP-6 READER
\r
1531 ;PAPER TAPE PUNCH ENTRY POINT
\r
1533 IFG PTPN,<EXTERN PTPSER>
\r
1536 \f;DISK ENTRY POINTS AND BITS
\r
1539 INTERN DSKBIT,DCBBIT,DSKON,DSKOFF
\r
1540 DCBBIT==0 ;0 UNLESS DATA PRODUCTS DISK(SEE BELOW)
\r
1541 DSKBIT==1 ;LOW PRIORITY DISK PI CHANNEL
\r
1542 REPEAT 7-DSKCHN,<DSKBIT==DSKBIT*2>
\r
1543 DSKON==2000+DSKBIT ;CONO PI, TURN DISK CHANNEL ON
\r
1544 DSKOFF==1000+DSKBIT ;CONO PI, TURN DISKCHANNEL OFF
\r
1545 IFG RD10N,< ;BURROUGHS DISK
\r
1546 EXTERN RCXINT,DSKSRB,RCXWNZ ;LOAD EARLIER VERSIONS OF
\r
1547 ; DSKINT,DSKSRB,ONCEB
\r
1548 IFG SYS50N,<EXTERN RCXSKD> ;LOAD EARLIER VERSION OF SCHEDB
\r
1550 IFG DPDN,< ;IF DATA PRODUCTS DISK
\r
1551 EXTERNAL LDDINT ;LOAD DPDINT
\r
1552 EXTERNAL DSKSRD ;LOAD ONCE+DSKSR FOR DATA PROD DISK
\r
1553 INTERN DCBBIT,DSKX8,DSKX9
\r
1555 REPEAT 7-DCBCHN,<DCBBIT==DCBBIT*2>
\r
1556 DSKX8==40+2*DCBCHN ;DATA-CONTROL BLKI/BLKO LOCS
\r
1559 IFG RA10N,< ;IF BRYANT DISK
\r
1560 EXTERN MDFINT,DSKSER,MDFWNZ
\r
1561 IFG SYS50N,<EXTERN RCXSKD>
\r
1566 ;PSEUDO TTY ENTRY POINT
\r
1568 IFE PTYN,<INTERN PTYPE,PTMNMZ,PTYOW,PTMNMD
\r
1569 PTYPE:PTMNMZ:PTYOW:PTMNMD: HALT CPOPJ ;HALT IF SCNSER CALL PTY ROUTINES
\r
1570 ; BECAUSE NONE LOADED
\r
1573 IFE FULLN,<EXTERN PTYSRH> ;HALF DUPLEX SCANNER SOFTWARE
\r
1574 IFG FULLN,<EXTERN PTYSRF> ;FULL DUPLEX SCANNER SOFTWARE
\r
1577 RELOC .-COMORG ;NOW MAKE RELOCATABLE SO NEXT PROGRAM WILL BE LOADED
\r
1578 ; IMMMEDIATELY AFTER THIS ONE
\r