Cleaned up more typos and fixed paging issues.
[retro-software/dec/tops10/v4.5.git] / src / common.mac
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
3 XP VCOMMN,437\r
4                 ;PUT VERSION NUMBER IN GLOB AND LOADER STORAGE MAP\r
5 \r
6 REPEAT 0, <\r
7 \r
8 ;THE COMMON SUBPROGRAM CONSISTS OF 3 FILES ASSEMBLED TOGETHER AS ONE SUBPROGRAM:\r
9   1. S.MAC - THE USUAL SYSTEM SYMBOL DEFINITIONS ASSEMBLED WITH\r
10         EVERY MONITOR SUBPROGRAM\r
11   2. CONFIG.MAC - THE CONFIGURATION DEFINITION FILE GENERATED BY THE\r
12         CONFIGURATION PROGRAM (MONGEN) OR BY AN EDITOR (SEE ABOVE)\r
13   3. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME SOURCE FOR\r
14         ALL CONFIGURATIONS.  HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY\r
15         SYMBOLS AND MACROS DEFINED IN 2.\r
16         THE FOLLOWING SYMBOLS AND TABLES ARE GENERATED BELOW:\r
17 \r
18         A. MONITOR STARTUP LOCATIONS (140-147), HENCE LOAD THIS FIRST.\r
19         B. JOB TABLES - LENGTH DEPENDENT ON MAXIMUM NUMBER OF JOBS ALLOWED\r
20         C. ALL VARIABLE STORAGE NOT ASSOCIATED WITH A PARTICULAR DEVICE\r
21         D. COMMON SUBROUTINE RETURNS\r
22         E. COMMON BYTE POINTERS\r
23         F. TABLE OF SERVICE ROUTINE INTERRUPT LOCS TO BE LINKED BY ONCE ONLY CODE\r
24         G. TABLE OF DEVICE DATA BLOCK ADDRESSES AND NUMBER TO BE USED BY ONCE TO LINK\r
25         THEM TOGETHER AND GENERATE MULTIPLE COPIES.\r
26         H. ASSIGNMENT OF PI CHANNELS\r
27         I. PI CHANNEL SAVE AND RESTORE ROUTINES\r
28         J. UUO TRAP LOCATIONS 40/41, 60/61\r
29         K. SYSTEM CRASH STOP CONI'S.\r
30 >\r
31 \f;THE FOLLOWING STANDARD SYMBOLS CAN BE SUPERCEDED BY A CUSTOMER\r
32 ;HAVING PREVIOUSLY DEFINED THEM ON THE CONFIG.MAC FILE USING \r
33 ;MONGEN PROGRAM\r
34 \r
35 IFNDEF LISTSN, <LISTSN==1>      ;FORCE S.MAC TO BE LISTED WITH COMMON FILE ONLY\r
36                         ;UNLESS 'LISTSN' DEFINED TO BE 0 WITH MONGEN\r
37 IFNDEF APRSN,<APRSN==0> ;SERIAL NUMBER OF APR\r
38 \r
39 ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY)\r
40         INTERN STDENS           ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY)\r
41 \r
42         IFNDEF STDENS, <STDENS==2>      ;STAND. == BINARY AT 556 BPI\r
43                                 ;STDENS==D+P WHERE D AND P ARE:\r
44                                 ;D==1(200 BPI);D== (556 BPI);D==3(800 BPI)\r
45                                 ;P==0(ODD-BINARY PARITY);P=4(EVEN-BCD PARITY)\r
46         INTERN JIFSEC                   ;NO. OF CLOCK TICKS(JIFFIES) PER SECOND\r
47         IFNDEF JIFSEC,<JIFSEC==^D60>    ;STAND.==60 JIFFIES PER SEC.\r
48         XP HNGSEC,2*JIFSEC\r
49 \r
50         INTERN DTTRY                    ;NO. OF TIMES TO TRY ON DECTAPE ERRORS\r
51         IFNDEF DTTRY,<DTTRY==4>         ;STAND.==4 TRIES\r
52 \r
53         INTERN MTSIZ                    ;SIZE OF MAGTAPE RECORDS(DATA WORDS IN BUFFER+1)\r
54         IFNDEF MTSIZ,<MTSIZ==^D128>     ;STAND.==128 WORDS PER BUFFER\r
55 \r
56         INTERN LPTSIZ                   ;SIZE OF LPT BUFFER(NO. OF DATA WORDS+2)\r
57         IFNDEF LPTSIZ,<LPTSIZ==^D24+2>  ;STAND.==24 WORDS PER LPT BUFFER\r
58 \r
59         INTERN BLKQNT                   ;MAX. NO OF CONSECUTIVE DECTAPE BLOCKS SEARCHED BEFORE\r
60                                         ; RESCHEDULING IF ANOTHER JOB IS WAITING TO USE CONTROL.\r
61         IFNDEF BLKQNT,<BLKQNT==^D50>    ;STAND.==50 DT BLOCKS SEARCHED(3 SECS.)\r
62 \r
63         INTERN NSPMEM                   ;NO OF NANO-SECONDS PER MEMORY CYCLE\r
64         IFNDEF NSPMEM,<NSPMEM==^01760>  ;STAND.==1760 NANO-SECONDS PER MEMORY CYCLE\r
65 INTERNAL 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 REQUIRMENTS IN FREE CORE\r
71                                 ;USED TO EXPAND SIZE OF MONITOR AT ONCE ONLY TIME\r
72 \r
73                                 ;32 WORDS/DDB AND 4 WORDS/ACCESS ENTRY = 36 WORDS\r
74                                 ;ASSUME 1.5 OPEN FILE/JOB\r
75 \r
76 \r
77 INTERN LOGSIZ\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
81                                 ;(STANDARD = 2K)\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 I/O SERVICE CHAIN,\r
86 \r
87         EXTERN SYSINI,SYSMAK,NULJOB,ONCE,JSR2\r
88         INTERN SYSDSP,SYSDDT\r
89 \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
94 \r
95 SYSDSP: JRST SYSINI             ;INITIALIZE SYSTEM VARIABLES ONCE ONLY\r
96 SYSDDT:\r
97 IFG DDTN, <             ;IF EXEC DDT IS LOADED.....\r
98         EXTERN PATSYM\r
99         JRST PATSYM             ;YES, EXEC DDT(PATCH SYMBOL TABLE POINTER FIRST)\r
100 \r
101 >\r
102         IFE DDTN, <\r
103         HALT .          ;NO. EXEC DDT\r
104 >\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
113 \r
114 ;SPECIAL ABSOLUTE LOCATIONS IN LOWER MEMORY\r
115 \r
116         INTERN SYSSNP,FORTY,NULDAT,SIXTY,NULPDL,ERRPDL,KT10A,RCXIOC,RCXCCW,DDTSYM\r
117         INTERN T30SYM,RAXIOC,RAXCCW,CRSHWD\r
118 \r
119         RAXIOC=26               ;XWD 0,ADDRESS FOR RA-10'S 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 DATAO 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 CHANNEL 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 ADDRESS 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 AC)\r
143                                 ; AND ABOVE FOR PUSHDOWN LIST\r
144         SIXTY=60                ;PLACE WHERE UNIMPLEMENTED 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 RE-SCHEDULING 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 \r
157         INTERN SYSBEG,SYSBG1,SYSEND\r
158 \r
159 SYSBEG:                         ;FIRST LOCATION CLEARED ON 143 RESTART (SEE SYSINI)\r
160 XP SYSBG1,SYSBEG+1\r
161 \r
162         INTERN JOB,JOBADR,JOBDAT,USRREL,USRSAV\r
163 \r
164 JOB:    0                       ;CURRENT JOB RUNNING AT UUO LEVEL\r
165 JOBDAT:                         ;LOC OF CURRENT JOBS JOB DATA AREA\r
166                                 ; SAME AS JBTDAT AND AC JDAT\r
167 JOBADR: 0                       ;XWD PROTECTION,RELOCATION FOR CURRENT JOB\r
168                                 ;SAME AS JBTADR(JOB) AND AC PROG\r
169 USRREL: 0                       ;LH==0, RH CONTAINS CONTENTS OF PROTECTION REGISTER\r
170                                 ;LOW ORDER BITS==1777, IE THIS IS HIGHEST REL. LOC\r
171                                 ;IN CURRENT USER AREA (USED FOR ADDRESS CHECKING)\r
172 USRSAV: 0                       ;TEMPORARY FOR UUO HANDLER (IMPURE ROUTINE!)\r
173 \r
174 ;LOCATIONS COPIED FROM JOB DATA AREA INTO MONITOR WHEN A JOB RUNS\r
175 ;THIS PREVENTS THE USER FROM CLOBBERING THEM AND MAKES IT\r
176 ;EASIER FOR THE MONITOR TO LOCATE THESE QUANTITIES WHEN IT\r
177 ;NEEDS TO FOR THE CURRENT JOB\r
178 ;CONTENTS ARE COPIED BACK WHEN JOB BECOMES INACTIVE (SEE CLOCK)\r
179 ;COMPARE WITH JOB DATA AREA (SEE JOBDAT)\r
180 ;THE FOLLOWING LOCATION MUST BE IN SAME ORDER AS JOBDAT\r
181 \r
182         INTERN USRPRT,USRPR1,USRPC,USRDDT,USRHCU,USRSAV,USRJDA,USRLO,USRLO1,USRHI\r
183 \r
184 USRPRT:                         ;FIRST LOCATION OF PROTECTED JOB DATA\r
185         USRPR1==USRPRT+1        ;FIRST LOCATION+1\r
186 \r
187 USRHCU: 0                       ;HIGHEST USER I/O CHANNEL IN USE\r
188                                 ;0 MEANS EITHER NONE OR CHANNEL 0 IN USE\r
189                                 ;LH=-1 DURING GET OF LOW OR HIGH SEG OR SAVE OF HIGH SEG\r
190                                 ;SETREL ROUTINE DOESN'T STORE IN JOBHRL(11$) WHEN NEG,\r
191                                 ;LH=-2 DURING SAVE OF LOW SEG AS FLAG THAT CORE\r
192                                 ; IS COMPRESSED. \r
193                                 ;ONLY CHANNEL ASSIGNMENTS IN USE ARE COPIED INTO\r
194                                 ; MONITOR WHEN JOB RUNS\r
195 USRPC:  0                       ;JOB PC WHEN SCHEDULER IS CALLED\r
196 USRDDT: 0                       ;RH==STARTING ADDRESS OF USER DDT, LH UNUSED\r
197 USRJDA: BLOCK   20              ;RH==JOB DEVICE ASSIGNMENTS (DEVICE DATA\r
198                                 ; BLOCK ADDRESSES)\r
199                                 ;LH==UUO'S DONE SO FAR FOR THIS CHANNEL (SEE SYSPAR)\r
200                                 ;0 MEANS NO DEVICE INITIALIZED ON THIS CHANNEL\r
201         USRLO==USRJDA           ;FIRST LOC CLEARED BY SETUSR ROUTINE\r
202                                 ;ON A CALL [SIXBIT /RESET/]\r
203                                 ;ALSO CLEARS USRHCU\r
204         USRLO1==USRLO+1         ;FIRST LOC+1\r
205         USRHI==.-1              ;LAST LOC CLEARED BY SETUSR ROUTINE\r
206 \f\r
207 ;OTHER SYSTEM DATA STORAGE\r
208 \r
209         INTERN COMCNT,CLKFLG,TIMEF,APRERR,APRPC,SCHEDF\r
210         INTERN CORLST,CORTAL,HOLEF,SHFWAT\r
211         INTERN FTTRPSET,FTSLEEP,FTTIME,FTSWAP,FT2REL,FTDISK\r
212         INTERN HNGTIM,CIPWT,CIPWTM,NULERR,POTLST\r
213 \r
214 COMCNT: 0                       ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED\r
215                                 ;SET BY SCNSER, DECREMENTED BY COMCON\r
216 HNGTIM: 0                       ;HUNG DEVICE TIME COUNT CHECK FOR HUNG I/O\r
217                                 ;DEVICES WHEN THIS GOES TO ZERO (ONCE PER HNGSEC)\r
218 CLKFLG: 0                       ;NON-ZERO WHEN CLK INTERRUPT FORCED FOR ANY REASON\r
219 TIMEF:  0                       ;NON-ZERO FOR CLOCK INTERRUPT ON APR\r
220                                 ;SET BY APRSER, TESTED AND CLEARED BY CLK ROUTINE\r
221 APRERR: 0                       ;APR ERROR BITS ON NON-EX MEM, ETC.\r
222                                 ;SET BY APRSER, CLEARED BY CLK ROUTINE (CLOCK)\r
223 APRPC:  0                       ;PC WHEN APR ERROR DETECTED\r
224 SCHEDF: 0                       ;FORCED RESCHEDULING FLAG FOR CLK ROUTINE\r
225                                 ;USED TO FORCE RESCHEDULING WHEN JOB IS IN EXEC MODE\r
226 NULERR: 0                       ;SET NON-ZERO IF MONITOR DETECTS ERROR WHILE\r
227                                 ; NULL JOB IS RUNNING\r
228 POTLST: 0                       ;-1 WHEN SCHEDULER SEES THAT THERE ARE \r
229                                 ;JOBS WHICH ARE POTENTIALLY RUNABLE BUT\r
230                                 ;HAS TO RUN NULL JOB.\r
231                                 ;0 WHEN IT FINDS A REAL JOB TO \r
232                                 ;RUN OR NULL JOB IS ONLY JOB WHICH WANTS TO\r
233                                 ;RUN.  'LSTWRD' IS INCREMENTED EVERY JIFFY\r
234                                 ;IF THIS FLAG IS -1 AND PREVIOUS JOB WAS NULL JOB.\r
235         IFN     FTTRPSET,<\r
236         INTERN STOPTS\r
237 STOPTS: 0                       ;STOP TIME SHARING OTHER USERS BECAUSE JOB 1 DID\r
238                                 ;A TRPSET UUO WITH NON-ZERO AC(IE SET LOWER CORE\r
239                                 ; PI TRAP LOCATION,ALSO STOP CORE SHUFFLING\r
240 >\r
241         SLJOBN=0                ;NUMBER OF JOBS IF NO SLEEP FEATURE\r
242         IFN FTSLEEP,<SLJOBN=JOBN>       ;LEAVE ONE ENTRY PER JOB\r
243 CIPWT:  BLOCK SLJOBN+3          ;CLOCK REQUEST QUEUE\r
244                                 ; LH-MONITOR ADDRESS TO PUSHJ TO AT CLOCK LEVEL\r
245                                 ; WHEN BITS 24-35 COUNT DOWN TO ZERO\r
246                                 ; BITS 18-23 ARE DATA SET IN AC TAC WHEN PUSHJ DONE\r
247                                 ; BITS 24-35 ARE NUMBER OF CLK TICKS LEFT TO GO\r
248         CIPWTM=CIPWT-1          ;FIRST LOC-1 OF CLOCK QUEUE\r
249 \f;STORAGE FOR VARIOUS CORE ALLOCATION FUNCTIONS\r
250 \r
251         INTERN NSWTBL,NSWMXL,CORTAB,CORMAX,CORLST,CORTAL,SHFWAT\r
252         INTERN UPTIME,SHFWRD,STUSER,HIGHJB,CLRWRD,LSTWRD,FTTRACK\r
253 \r
254 \r
255 NSWTBL:                         ;FIRST LOCATION OF MONITOR DATA STORAGE\r
256                                 ; RETURNED BY GETTAB UUO (THESE LOCATIONS\r
257                                 ; PRESENT IN NON-SWAPPING SYSTEMS TOO)\r
258                                 ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG\r
259 CORTAB: BLOCK 10                ;(0-7) BIT=1 IF CORRESPONDING K OF CORE IN USE BY\r
260                                 ; ACTIVE,IDLE, OR DORMANT HIGH OR LOW SEGS OR NON-EX\r
261         XP CORBLK,^D256\r
262                                 ;NUMBER OF BITS IN CORE TABLE\r
263 CORMAX: 0                       ;(10)MAX. CORE REQUEST+1(IE LARGEST REL. ADR.+1)\r
264                                 ; CAN BE RESTRICTED TO LESS THEN ALL OF USER CORE\r
265                                 ; BY BUILD AND/OR ONCE\r
266                         \r
267 \r
268 CORLST: 0                       ;(11) 1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE\r
269                                 ; SET BY SYSINI ON 143 STARTUP\r
270 CORTAL: 0                       ;(12) TOTAL NUMBER OF FREE+DORMANT+IDLE CORE BLKS LEFT\r
271 SHFWAT: 0                       ;(13) JOB NUMBER SHUFFLER HAS TEMPORARILY STOPPED\r
272                                 ;UNTIL ITS IO DEVICES TO BECOME INACTIVE BEFORE SHUFFLING\r
273 HOLEF:  0                       ;(14) ABSOLUTE ADDRESS OF LOWEST HOLE IN CORE, 0=NONE\r
274 UPTIME: 0                       ;(15) NUMBER OF CLOCK TICKS SINCE SYSTEM LOADED OR\r
275                                 ; RESTARTED AT 143\r
276 SHFWRD: 0                       ;(16) TOT NO. OF WORDS SHUFFLED BY SYSTEM\r
277 STUSER: 0                       ;(17) JOB CURRENTLY USING THE SYSTEM TAPE\r
278                                 ; NEEDED SO CONTROL C WILL NOT TIE UP SYSTEM TAPE\r
279 HIGHJB: 0                       ;(20) HIGHEST JOB NUMBER CURRENTLY ASSIGNED\r
280 CLRWRD: 0                       ;(21) TOTAL NO. OF WORDS CLEARED BY 'CLRCOR' RTN.\r
281 LSTWRD: 0                       ;(22) TOTAL NO. OF CLOCK TICKS WHEN NULL JOB RAN\r
282                                 ; BUT OTHER JOBS WANTED TO RUN AND COULD NOT\r
283                                 ; DO SO BECAUSE: ---\r
284                                 ;  1. SWAPPED OUT OR ON WAY IN OR OUT\r
285                                 ;  2. MONITOR WAITING FOR I/O TO STOP SO\r
286                                 ;      IT CAN SHUFFLE OR SWAP\r
287                                 ;  3. JOB BEING SWAPPED OUT BECAUSE IT IS\r
288                                 ;      EXPANDING CORE\r
289 \r
290                                 ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST\r
291                                 ; TO USERS IN NON-SWAP AND SWAP SYSTEMS\r
292 NSWMXL=<.-NSWTBL-1>B26          ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9\r
293 \r
294 ;CORE ALLOCATION DATA NOT AVAILABLE VIA GETTAB\r
295 IFN FTTRACK, <INTERNAL LASCOR   ; (FOR DEBUGGING ONLY)\r
296 LASCOR: 0                       ;LAST JOB OR HIGH SEG TO CALL CORE ROUTINES\r
297 >\r
298 \f;DATA LOCATIONS PRESENT ONLY IN SWAPPING SYSTEMS\r
299 \r
300         IFG SYS50N, <                   ;SWAPPING SYSTEM ?\r
301         INTERN SWPTBL,SWPMXL,BIGHOL,FINISH,FORCE,FIT,SWPERC,VIRTAL\r
302         INTERN FULCNT,MAXSIZ,MAXJBN,SUMCOR\r
303 SWPTBL:                         ;FIRST LOCATION OF MONITOR DATA STORAGE\r
304                                 ; RETURNED BY GETTAB UUO (THESE LOCATIONS\r
305                                 ; PRESENT ONLY IN SWAP SYSTEMS)\r
306                                 ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG\r
307 BIGHOL: 0                       ;(0) CURRENT BIGGEST HOLE IN CORE (1K BLOCKS)\r
308 FINISH: 0                       ;(1) IF +, THEN JOB NUMBER OF JOB BEING SWAPPED IN,\r
309                                 ;IF -, THEN JOB NUMBER OF JOB BEING SWAPPED OUT\r
310 FORCE:  0                       ;(2) JOB NUMBER BEING FORCED TO SWAP OUT\r
311 FIT:    0                       ;(3) JOB NUMBER WAITING TO BE FITTED INTO CORE\r
312 VIRTAL: 0                       ;(4) NUMBER OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT\r
313                                 ; (COUNTING DORMANT SEGMENTS AS IF FREE).\r
314                                 ; PRINTED WITH CORE COMMAND (NO ARG) OR ERROR\r
315                                 ; USUALLY THE SAME AS THE AMOUNT OF VIRTUAL CORE\r
316                                 ; LEFT IN SYSTEM, EXCEPT WHILE R,RUN,KJOB,GET\r
317                                 ; COMMAND ARE WAITING TO BE SWAPPED IN, BECAUSE\r
318                                 ; THE OLD DISK SPACE HAS NOT BEEN RETURNED YET,\r
319                                 ; BUT VIRTUAL CORE IS ONLY 140 WORDS FOR SWAPIN\r
320 SWPERC: 0                       ;(5) LH= NUMBER OF SWAPPER READ OR WRITE FAILURES\r
321                                 ; RH= ERROR BITS (BITS 18-21) + NUMBER OF K OF\r
322                                 ; DISCARDED SWAPPING SPACE\r
323 \r
324 \r
325 \r
326                                 ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST\r
327                                 ; TO USER PROGS IN SWAPPING SYSTEMS\r
328 SWPMXL=<.-SWPTBL-1>B26  ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9\r
329 \f;MORE SWAPPING SYSTEM LOCATIONS (NOT RETURNED BY GETTAB)\r
330 \r
331 FULCNT: 0                       ;PRINT DISK IS FULL EVERY 30 SECONDS\r
332 MAXSIZ: 0                       ;SIZE OF LARGEST JOB WHICH MIGHT BE SWAPPED OUT\r
333 MAXJBN: 0                       ;NUMBER OF THAT JOB\r
334 SUMCOR: 0                       ;TEMP USED BY SWAPPER FOR SUM OF CORE NEEDED FOR SWAP IN\r
335         IFN FT2REL,<\r
336         INTERN SWPIN,SWPOUT\r
337 SWPIN:  0                       ;JOB NUMBER BEING SWAPPED IN IF IT HAS A HIGH SEG\r
338                                 ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG\r
339 \r
340 SWPOUT: 0                       ;JOB NUMBER BEING SWAPPED OUT IF IT HAS A HIGH SEG\r
341                                 ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG\r
342 \r
343 >\r
344         INTERN FTTRACK\r
345 IFN FTTRACK, <          \r
346         INTERN LASIN,LASOUT\r
347 LASIN:  0               ;LAST JOB OR HIGH SEG SWAPPED IN\r
348 LASOUT: 0               ;LAST JOB OR HIGH SEG SWAPPED OUT\r
349                         ; ABOVE TWO FOR DEBUGGING ONLY\r
350 >\r
351 >\r
352 \r
353 ;DEFINE BLOCK FOR BIT TABLE DENOTING 4 WORD BLOCKS AVAILABLE (=0), IN USE (=1)\r
354 ; USE MULTIPLES OF 4*^D36 WORDS SO THE TABLE WILL HAVE A MULTIPLE OF ^D36 BITS\r
355 ; ADD 7 WORDS TO ACCOMODATE A POSSIBLE 1K BEYOND MINCOR AMOUNT\r
356 \r
357 IFG DSKN, <\r
358 INTERNAL DDBTAB,MINCOR\r
359 \r
360 DDBTAB: BLOCK <MINCOR/^D144>+1+7\r
361 >\r
362 \r
363 \f;MONITOR TABLES WITH ONE ENTRY PER JOB\r
364 \r
365         INTERN JBTSTS,JBTADR,JBTDAT,JBTNAM,JBTPRG\r
366         INTERN JOBMAX,JBTMAX,MJOBN,JBTAD1,JOBMXL,JBTMXL\r
367         INTERN FTTIME,FTKCT,FTPRV\r
368 \r
369         JOBMAX==JOBN-1          ;MAXIMUM LEGAL JOB NUMBER\r
370         JOBMXL==<JOBMAX>B26     ;HIGHEST JOB NUMBERSHIFTED LEFT 9 (FOR GETTAB UUO)\r
371         MJOBN==-JOBN            ;NEGATIVE NUMBERS OF JOBS (COUNTING NULL JOB)\r
372         IFG KT10AN, <SEGN==JOBN+SEGN> ;IF ANY HIGH SEGMENTS,\r
373                                 ; MUST HAVE AT LEAST AS MANY AS JOBS\r
374         JBTMAX==JOBN+SEGN-1     ;HIGHEST INDEX IN JBT TABLES\r
375         JBTMXL=<JBTMAX>B26      ;HIGHEST JBT ENTRY SHIFTED LEFT 9 (FOR GETTAB UUO)\r
376 JBTSTS: BLOCK JOBN+SEGN         ;JOB AND HIGH SEG STATUS WORD\r
377                                 ;LH==STATUS BITS (SEE S.MAC FOR DESCRIPTION)\r
378                                 ;RH==QUANTUM RUN TIME LEFT (SEE CLKCSS) FOR LOW SEGS\r
379                                 ;RH=IN CORE COUNT FOR HIGH SEGS\r
380 JBTADR: BLOCK JOBN+SEGN         ;JOB AND HIGH SEG CORE ASSIGNMENT\r
381                                 ; LH==PROTECTION (LENGTH-1)\r
382                                 ; RH==RELOCATION (ABSOLUTE LOCATION IN CORE)\r
383         JBTAD1==JBTADR+1        ;ADDRESS OF JOB 1 (USED BY SYSMAK)\r
384         JBTDAT==JBTADR          ;RH==ADDRESS OF JOB DATA AREA\r
385                                 ;SAME AS JBTADR (JDAT==PROG)\r
386         INTERN JBTSGN\r
387 JBTSGN: IFG SEGN, <\r
388         BLOCK JOBN              ;SEGMENT NUMBER OF HIGH SEGMENT THIS JOB\r
389                                 ; IS USING IN CORE OR ON DISK\r
390                                 ; 0 MEANS JOB DOES NOT HAVE HIGH SEG\r
391                                 ;LH=USER DEPENDENT HIGH SEG STATUS BITS\r
392                                 ; (SEE S.MAC)\r
393         XP ITMSGN,ITEM+JOBMXL   ;LH SYMBOL FOR GETTAB UUO\r
394 >\r
395         IFE SEGN, <\r
396         0\r
397         XP ITMSGN,JOBMXL        ;LH SYMBOL FOR GETTAB UUO\r
398                                 ;SO THAT JBTSGN IS UNDEFINED\r
399                                 ;I.E., MAKE INDEXING BY ITEM BE 0\r
400                                 ;       BUT ALLOW REFERENCES UP TO JOBMXL\r
401 >\r
402         IFG DSKN, <             ;DISK SYSTEM ?\r
403         INTERN PRJPRG,JBTDIR\r
404 JBTDIR:                         ;HIGH SEGMENT DIRECTORY NAME (DSK) OR PHYSICAL\r
405                                 ; DEVICE NAME (DTA,MTA)\r
406 PRJPRG: BLOCK JOBN+SEGN         ;XWD PROJECT NUMBER,PROGRAMMER NUMBER\r
407 >\r
408         IFE DSKN, <IFG SEGN, <  ;REENTRANT MONITOR WITHOUT DISK ?\r
409         INTERN JBTDIR\r
410         JBTDIR=.-JOBN           ;INDEX BY HIGH SEG NUMBER\r
411         BLOCK SEGN              ;HIGH SEGMENT PHYSICAL DEVICE NAME (DTA,MTA)\r
412 >>\r
413         IFN FTTIME, <\r
414         INTERN RTIME,TTIME\r
415 RTIME:  BLOCK JOBN              ;TOTAL RUN TIME SINCE LAST IJOB OR RUNTIME\r
416 TTIME:  BLOCK JOBN              ;TOTAL RUN TIME SINCE LAST IJOB\r
417 >\r
418 \f       IFG SYS50N,<            ;SWAPPING SYSTEM ?\r
419         INTERNAL JBTSWP,JBTCHK\r
420 JBTSWP: BLOCK JOBN+SEGN         ;LH:==PROTECT TIME WHILE JOB IS IN CORE.\r
421                                 ; DISK ADDRESS WHILE SWAPPED OUT\r
422                                 ;BIT 0=1 IF SEGMENT IS FRAGMENTED\r
423                                 ; BITS18-26:==OUTCORE IMAGE SIZE\r
424                                 ; BITS27-35:==INCORE IMAGE SIZE\r
425                                 ; FOR HIGH SEG, LH ALWAYS DISK ADDRESS\r
426 \fJBTCHK:        BLOCK JOBN+SEGN         ;CHECK SUM FOR SWAPPED OUT JOB DATA AREA OR\r
427                                 ; SAME AREA FOR HIGH SEG\r
428 \r
429 >\r
430 JBTNAM:                         ;NAME OF HIGH SEGMENT (FILE IT WAS INITIALIZED FROM)\r
431 JBTPRG: BLOCK JOBN+SEGN         ;NAME OF FILE USED IN LAST R,RUN,GET, ETC\r
432                                 ; USED BY SYSTAT PROGRAM\r
433         IFN FTKCT, <\r
434         INTERN JBTKCT\r
435 JBTKCT: BLOCK JOBN              ;PRODUCT OF CORE LENGTH (IN K) TIMES NUMBER OF JIFFIES\r
436                                 ; PROGRAM USED CPU. USED FOR TIME ACCOUNTING.\r
437 >\r
438         IFN FTPRV, <\r
439         INTERN JBTPRV\r
440 JBTPRV: BLOCK JOBN              ;PRIVILEGE BITS FOR JOB SET BY LOGIN\r
441 >\r
442         IFG DSKN, <\r
443         INTERN MQUEUE,MQTOP\r
444 MQUEUE: BLOCK JOBN              ;DISK MONITOR I/O QUEUE\r
445         MQTOP=.                 ;LAST LOC+1 OF MONITOR QUEUE\r
446 >\r
447         IFG SYS50N, <\r
448 ;THE FOLLOWING ARE USED TO CREATE MXQUE\r
449 ;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER (SCHED)\r
450         FTDISK=-DSKN            ;DEFINE FEATURE SWITCH FTDISK,SINCE IT APPEARS\r
451                                 ; IN MACRO QUEUES\r
452                                 ; WHICH IS DEFINED IN S.MAC\r
453         XP      MXQUE,0\r
454 \r
455         LALL                    ;LIST QUEUE DEFINITIONS FOR ALL TO SEE\r
456 \r
457         DEFINE  X       <MXQUE==MXQUE+2;>\r
458         QUEUES\r
459 DEFINE  X       (A)\r
460 \r
461                 <A'Z==MXQUE\r
462         INTERN  A'Z\r
463                 MXQUE==MXQUE+1>\r
464         CODES\r
465                 MXQUE==MXQUE+3\r
466 \r
467         XALL                    ;BACK TO NORMAL MACRO EXPANSION\r
468 \r
469         INTERN JBTQ,JBTQM1,JBTQP1,JBTQMN\r
470         BLOCK MXQUE             ;NUMBER OF QUEUES FOR SWAPPING SCHEDULER\r
471 JBTQ:   BLOCK JOBN              ;ONE ENTRY PER JOB,\r
472                                         ; LH=PREVIOUS JOB, RH=NEXT JOB IN QUEUE\r
473                                 ; NEGATIVE MEANS THIS IS FIRST (LH) OR LAST (RH)\r
474                                 ; JOB IN QUEUE\r
475         JBTQM1==JBTQ-1                  ;JBTQ-1\r
476         JBTQP1==JBTQ+1                  ;JBTQ+1\r
477         JBTQMN==JBTQ-NULZ               ;J1\r
478 >\r
479 \f;TTY TRANSLATOR TABLE\r
480 ;INDEXED BY TTY LINE NUMBER, CONTAINS TTY DDB ADDRESS IN RH\r
481 ;(ASSIGNED WHEN FIRST CHARACTER TYPED ON TTY BY SCNSER\r
482         ;BIT 0==1 IF COMMAND TYPED BUT NOT PROCESSED\r
483         ;BITS 6-11==JOB NUMBER TTYP IS ATTACHED TO\r
484         ;BITS 12-17==NEXT LINE NUMBER IN TALK RING OR ITS SELF IF NOT TALKING\r
485 \r
486         INTERN TTYTAB,PTYTAB,TPYTAB,TCONLN,MLTTYL,MTTYLN,TTPLEN,TTMODL,TTPMXL\r
487 \r
488 TTYTAB: BLOCK HGHLIN+1+1        ;NO OF TTYS PLUS CTY\r
489         TPYTAB==.-1             ;ADDRESS OF LAST ENTRY\r
490         TCONLN==.-1-TTYTAB      ;LINE NUMBER OF CTY\r
491         BLOCK PTYN              ;PSEUDO TTY TRANSLATOR TABLE\r
492                                 ; THIS IS FOR LINKED TTY LINES,\r
493                                 ; NOT THE DEVICE "PTYN"'S DDB\r
494         TTPLEN==.-TTYTAB        ;LENGTH OF ENTIRE TABLE\r
495         TTPMXL=<TTPLEN-1>B26    ;HIGHET ENTRY IN TTYTAB SHIFTED LEFT 9(FOR GETTAB UUO)\r
496 \r
497         MLTTYL==-JOBN           ;NEG, NO OF TTY DDBS (ONE FOR EACH JOB, PLUS 1 ETRA\r
498                                 ; SO JOB CAPACITY EXCEEDED MESSAGE CAN BE TYPED\r
499         MTTYLN==-TTPLEN         ;NEG, LENGTH OF ENTIRE TRANSLATOR TABLE\r
500 \r
501 PTYTAB: BLOCK PTYN+1            ;ADDRESS OF THE DDBS FOR DEVICE PTYN\r
502                                 ; NOT THE LINKED TTY LINES. SEE TPYTAB.\r
503 ;LAST LOCATION CLEARED BY SYSINI ON 143 RESTART\r
504         SYSEND==.-1\r
505 \f;ONCE ONLY CODE TO CREATE DEVICE DATA BLOCKS\r
506 \r
507         LOC SYSBEG              ;PUT IN SYSTEM DATA AREA SO NOT TO TAKE\r
508                                 ; VALUABLE SPACE.  THIS AREA IS CLEARED\r
509                                 ; BY SYSINI AFTER IT HAS BEEN EXECUTED\r
510 \r
511 ;CNTDB- ROUTINE TO INCREASE SIZE OF MONITOR FOR MULTIPLE DEVICE DATA BLOCKS\r
512 ; BOTH DISK AND OTHER DEVICES (DTA,MTA,SCN,PTY)\r
513 ; CALL:  JSP TAC,CNTDB  (FROM LONG ONCE DIALOG)\r
514 ;\r
515 ;LINKDB- ROUTINE TO CREATE MULTIPLE DEVICE DATA BLOCKS (EXCEPT DISK)\r
516 ; AND LINK THEM. THESE ARE STORED ON TOP OF ONCE ONLY CODE\r
517 ;CALL:  JRST LINKDB (FROM LINKSR)\r
518 ;BOTH ROUTINES UPDATE  SYSSIZ AS MORE DDB SPACE IS CONSUMED\r
519 \r
520         INTERN LINKDB,CNTDB\r
521         EXTERN LINKSR\r
522 \r
523 LINKDB: SETOM DESONC            ;PERMIT DESTRUCTION OF ONCE ONLY CODE\r
524         SKIPA TAC,LINKSR                ;GET JSRPC OF CALLER OF LINKSR IN ONCE\r
525 CNTDB:  SETZM DESONC            ;PREVENT DESTRUCTION OF ONCE ONLY CODE\r
526                                 ;SO THAT E.G. SAT TABLES MAY BE SCANNED\r
527         HRRM TAC, LINKED        ;STORE EXIT FROM THIS ROUTINE (ONCE ONLY CODE WILL\r
528                                 ; BE OVERLAYED BY MULTIPLE DEVICE DATA\r
529                                 ; BLOCK GENERATION)\r
530         MOVSI TAC,INTNUM        ;NEG NUMBER OF ENTRIES IN TABLE\r
531         MOVEI DEVDAT,DEVLST-DEVSER      ;MAKE DEVLST LOOK LIKE DEVSER IN A DOB\r
532 LOOP:   MOVE TAC1,INTTB1(TAC)   ;GET NEXT DEVICE DATA BLOCK ADDRESS\r
533         JUMPE TAC1,NEXT         ;0 MEANS NO DOB FOR DEVICE\r
534         SKIPE DESONC            ;OK TO DESTROY ONCE ONLY CODE ?\r
535         HRLM TAC1,DEVSER(DEVDAT)        ;YES, STORE IN PREVIOUS DEVICE DATA BLOCK\r
536         HRRZ DEVDAT,TAC1        ;MAKE DEVDAT POINT TO CURRENT DOB\r
537         LDB UUO,DDBNUM          ;GET NUMBER OF DDB'S\r
538         SOJLE UUO,NEXT          ;ONE OR LESS ?\r
539         HRRZ JBUF,DEVDAT        ;NO, CREATE MULTIPLE COPIES OF DOB\r
540                                 ; SAVE ORIGINAL IN JBUF\r
541         MOVEI AC3,1             ;STARTING WITH DEV1,DEV2,DEV77\r
542         LDB AC1,PUNIT           ;START UNIT NUMBER FROM\r
543                                 ; ASSEMBLE DEVICE DATA BLOCK\r
544                                 ; PTY STARTS UNIT NUMBER AT 1 INSTEAD OF 0\r
545                                 ; ALTHOUGH DEVICE NAMES ARE PTY0,PTY1,ETC.\r
546 \fMULDDB:        HRRZ TAC1,SYSSIZ        ;ADR. OF NEXT DDB IS AT END OF MONITOR\r
547         SKIPE DESONC            ;OK TO DESTROY ONCE ONLY CODE ?\r
548         HRLM TAC1,DEVSER(DEVDAT) ;YES, MAKE PREVIOUS DDB POINT TO THE ONE ABOUT TO BE CREATED\r
549         HRL DEVDAT,JBUF         ;SOURCE ADDRESS TO LH\r
550         HRR DEVDAT,TAC1         ;DESTINATION ADDRESS TO RH\r
551         HLRZ AC2,INTTB1(TAC)    ;LENGTH OF DEVICE DATA BLOCK\r
552         ADDB AC2,SYSSIZ         ;LAST LOCATION+1 AFTER MOVE\r
553         SKIPN DESONC            ;OK TO DESTROY ONCE ?\r
554         JRST JUSTCT             ;NO, JUST COUNT DDB SPACE\r
555         BLT DEVDAT,-1(AC2)      ;MOVE ORIGINAL TO FREE STORAGE\r
556         SKIPL INTTAB(TAC)       ;IS THIS DECTAPE (ANY OF 3 SERVICES)?\r
557         JRST NOTDTA             ;NO\r
558         HRRZ AC2,DEVDAT         ;YES,DESTINATION\r
559         SUBI AC2,(JBUF)         ;-SOURCE=DISTANCE MOVED\r
560         ADDM AC2,14(DEVDAT)     ;INCREMENT POINTER TO DIRECTORY BLOCK\r
561                                 ; (SORRY ABOUT NO SYMBOL)\r
562 NOTDTA: MOVE PROG,PHYNAM        ;BYTE POINTER TO NEWLY CREATED\r
563                                 ; DDB PHYSICAL NAME\r
564 \r
565         MOVE ITEM,AC3           ;MAKE COPY OF UNIT NUMBER\r
566         TRNN ITEM,70            ;IS IT 10 OR MORE ?\r
567         JRST SMALL              ;NO\r
568         ROT ITEM,-3             ;YES, CONVERT HIGH ORDER OCTAL DIGIT TO\r
569         ADDI ITEM,20            ;SIXBIT\r
570         IDPB ITEM,PROG          ;AND STORE\r
571         TRZ ITEM,-1             ;CLEAR OUT HIGH ORDER DIGIT\r
572         ROT ITEM,3              ;MOVE LOW ORDER DIGIT BACK\r
573 SMALL:  ADDI ITEM,20            ;CONVERT LOW ORDER DIGIT IN SIXBIT\r
574         IDPB ITEM,PROG          ;AND STORE IN PHYSICAL NAME\r
575         ADDI AC1,1              ;INCREMENT BINARY UNIT NUMBER\r
576         DPB AC1,PUNIT           ;STORE UNIT NUMBER\r
577 JUSTCT: CAIGE AC3,(UUO)         ;COMPARE WITH HIGHEST DEVICE NUMBER\r
578         AOJA AC3,MULDDB         ;DO ANOTHER COPY\r
579 NEXT:   AOBJN TAC,.+1           ;MOVE BY TWOS\r
580         AOBJN TAC,LOOP          ;ANY MORE DEVICES\r
581         MOVEI TAC,0             ;NO, FLAG END OF DEVICE DATA BLOCK CHAIN WITH 0 LINK\r
582         SKIPE DESONC            ;OK TO DESTROY ONCE ?\r
583         HRLM TAC,DEVSER(DEVDAT) ;YES, STORE 0 IN CASE LAST DDB IS MULTIPLE\r
584 IFG DSKN, <\r
585         EXTERNAL LOCORE,CRINIT\r
586         MOVE TAC,SYSSIZ         ;SIZE OF MONITOR SO FAR (SYSMAK, EXEC DDT OR NOT)\r
587         MOVEM TAC,LOCORE        ;SAVE POINTER TO FIRST 4 WORD BLOCK\r
588         ADDI TAC,MINCOR         ;MINIMUM REQUIRED FOR DISK DDBS\r
589         IORI TAC,1777           ;FORCE TO 1K BOUNDARY\r
590         ADDI TAC,1\r
591         MOVEM TAC,SYSSIZ        ;STORE SIZE OF MONITOR (FIRST FREE LOC)\r
592         SUB TAC,LOCORE          ;FORM LENGTH OF EXCESS CORE\r
593         IDIVI TAC,^D144         ;MUST BE MULTIPLE OF 144. WORDS (SEE DDBTAB)\r
594         MOVN TAC,TAC            ; -N\r
595         HRLM TAC,CRINIT         ;STORE USEABLE LENGTH OF DDBTAB\r
596 >\r
597 LINKED: JRST .                  ;RETURN TO SYSINI\r
598 \r
599 DESONC: 0                       ;FLAG =0 IF CALLED BY JSP TAC,CNTDB\r
600                                 ; (DO NOT DESTROY ONCE)\r
601                                 ; FLAG NON-ZERO IF CALLED BY JRST LINKDB\r
602                                 ; (OK TO DESTROY ONCE CODE)\r
603 DDBNUM: POINT 8,INTTAB(TAC),8   ;POINTER TO DDB NUMBER\r
604 PHYNAM: POINT 6,DEVNAM(DEVDAT),17       ;BYTE POINTER TO DB PHYSICAL NAME\r
605 \r
606 \f;MACROS TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINING\r
607 ;INFORMATION FOR ONCE \r
608 ;SO IT CAN LINK THE DEVICE INTERRUPT SERVICE ROUTINES AND THE DEVICE DATA BLOCKS\r
609 ;TABLE INTTAB IS GENERATED WITH PAIRS OF ENTRIES FOR EACH DEVICE\r
610 ;WHICH HAS A DEVICE DATA BLOCK(0-7)\r
611 ;FIRST WORD: BIT 0==1 IF DECTAPE,BITS 1-9==NO. OF DDBS, BITS 9-17==PI CHANNEL(0-7)\r
612 ;0 MEANS NO PI CHANNEL (EG PTY)\r
613 ;SECOND WORD:LH==0 IF SINGLE DEVICE,==LENGTH OF DDB IF MULTIPLE, RH==DDB ADDRESS\r
614 \r
615 ;MACRO FOR DEVICES WHICH ARE ALWAYS PRESENT(AND WHICH DO NOT USE A CHANNEL SAVE ROUTINE\r
616 ;AND HAVE NO DDB (EX-APR,CTY,PEN,CLK)\r
617 \r
618 DEFINE SPASGINT (DEV,PI) <\r
619         DEV'N==1\r
620         ASGINT DEV,PI\r
621 >\r
622 \r
623 DEFINE ASGINT (DEV,PI) <\r
624         IFG DEV'N, <IFG PI, <\r
625         IFE <PI-.CH>, <.CHAS==1 ;CHANNEL PI IN USE.>\r
626         INTERNAL DEV'CHN\r
627                 DEV'CHN==PI\r
628         EXTERNAL DEV'INT        ;INTERRUPT SERVICE CONSO INSTRUCTION\r
629                 XWD PI,DEV'INT  ;GENERATE INTERRUPT ENTRY POINT FOR ONCE\r
630                 XWD 0,0         ;NO DDB TO CHAIN TOGETHER\r
631         ASGIN1 DEV,\PI\r
632 >\r
633 >>\r
634 \r
635 DEFINE ASGIN1 (DEV,PI) <\r
636         IFDEF   CH'PI, <                ;WAIT TILL PASS 2 TO DEFINE\r
637                         DEV'CHL==CH'PI\r
638                 INTERNAL DEV'CHL\r
639 >>\r
640 \r
641 ;MACRO FOR OPTIONAL DEVICES WHICH ALWAYS USE A CHANNEL SAVE ROUTINE\r
642 ; (EXAMPLES: CDR, DSK, PTR, ETC.  ALSO PTY WITH 0 PI)\r
643 \r
644 DEFINE  SPASGSAV (DEV,PI,NUM) <\r
645         DEV'N==NUM\r
646         ASGSAV DEV,PI\r
647 >\r
648 \r
649 DEFINE  ASGSAV (DEV,PI) <\r
650         IFG DEV'N, <IFG PI, <\r
651                 EXTERN DEV'INT          ;INTERRUPT SERVICE CONS INSTRUCTION\r
652                 >\r
653         EXTERN DEV'DDB\r
654         ASGSV1 (DEV,\PI)\r
655         >>\r
656 \f;MACRO FOR:    1. COMPLETION OF THE DEFINITION REQUIRED FOR THOSE\r
657 ;                  DEVICES INVOKING THE ASGSAV MACRO\r
658 ;\r
659 ;               2. COMPLETE DEFINITION FOR THOSE DEVICES WITH THEIR\r
660 ;                  INTERRUPT ENTRY POINT AND DDB'S HERE IN COMMON\r
661 ;                  (EXAMPLE: LPT'S)\r
662 \r
663 DEFINE ASGSV1 (DEV,PI) <\r
664         IFG PI, <\r
665                 IFE <PI-.CH>, <.CHAS==1         ;CHANNEL PI IN USE.>\r
666                 DEV'CHN==PI             ;DEFINE DEVICE CHANNEL NUMBER\r
667                 INTERN DEV'CHN          ;DECLARE INTERNAL - ONLY IF DEVICE WANTED\r
668                 USED'PI==1              ;SET FLAG SO THAT A CHANNEL SAVE\r
669                                         ; ROUTINE WILL BE GENERATED FOR\r
670                                         ; THIS PI CHANNEL\r
671         IFDEF SAV'PI, <         ;WAIT TILL CHANNEL SAVE ROUTINES\r
672                                         ; ARE DEFINED BELOW (IN PASS 2)\r
673 \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
679                 INTERN DEV'SAV, DEV'RET, DEV'CHL, DEV'SAC\r
680         >>\r
681 \r
682         DTBIT==0                        ;ASSUME THIS IS NOT A DECTAPE\r
683 \r
684         IFIDN <DEV>, <DTA>, <DTBIT==1>  ;IS IT PDP-10 DECTAPES ?\r
685         IFIDN <DEV>, <DTC>, <DTBIT==1>  ; OR PDP-6 DECTAPES ?\r
686 \r
687         IFE PI, <\r
688                 XWD DEV'N*1000+0,0      ;NO PI CHANNEL FOR THIS DEVICE\r
689         >\r
690 \r
691         IFG PI, <\r
692                 XWD DTBIT*400000+DEV'N*1000+PI,DEV'INT  ;FIRST WORD OF INTTAB ENTRY\r
693         >\r
694 \r
695         IFG DEV'N-1, <\r
696                 XWD DEV'DDS,DEV'DDB     ;MULTIPLE DEVICE SECOND WORD OF INTTAB ENTRY\r
697                 EXTERN DEV'DDS\r
698         >\r
699         IFE DEV'N-1, <\r
700                 XWD 0,DEV'DDB           ;SINGLE DEVICE SECOND WORD OF INTTAB ENTRY\r
701         >>\r
702 \f\r
703 ;MACRO'S TO ALLOW GENERATION OF MULTIPLE INTTAB ENTRIES FOR MULTIPLE\r
704 ; DEVICES SUCH AS LINE-PRINTERS\r
705 \r
706 DEFINE MULASG (DEV,DE,PI) <\r
707         IFG DEV'N, <\r
708                 ZZ==0\r
709                 REPEAT DEV'N, <\r
710                         DEVASG DE,\ZZ,PI\r
711                         ZZ==ZZ+1\r
712                 >\r
713         >\r
714 >\r
715 \r
716 DEFINE DEVASG (DE,X,PI) <\r
717         DE'X'N==1\r
718         ASGSV1 DE'X,\PI\r
719 >\r
720 \r
721 \r
722 ;MACROS TO CONTROL ASSIGNMENT OF PI CHANNELS TO DEVICES\r
723 \r
724 DEFINE NEXTCH < .CH==.CH+1\r
725 .CHAS==0\r
726 NEXTCU \.CH     \r
727 >\r
728 DEFINE NEXTCQ < IFN .CHAS,<NEXTCH>>\r
729 DEFINE NEXTCU (N) < IFDEF UNIQ'N,<IFN UNIQ'N,<NEXTCH>>>\r
730 \r
731 \r
732 \r
733 \r
734 \r
735 \r
736 ;ASSUME NO PI CHANNEL SAVE ROUTINES NEEDED\r
737 \r
738         USED1==0\r
739         USED2==0\r
740         USED3==0\r
741         USED4==0\r
742         USED5==0\r
743         USED6==0\r
744         USED7==0\r
745 \r
746 ;NOW GENERATE THE TABLE FOR ONCE AND DEFINE PI CHANNEL ASSIGNMENTS\r
747 \r
748         INTERN INTTAB,INTTB1,INTNUM,SCNN,CTYN\r
749 \r
750                 CTYN==1         ;ALWAYS ONE CTY\r
751                 SCNN==JOBN      ;NUMBER OF SCN DDB\r
752                                 ; ONE FOR EACH JOB + NULL JOB (EXTRA ONE)\r
753                 APRN==1         ;ALWAYS AN APR\r
754                 CLKN==1         ;ALWAYS LOWEST PRIORITY CLOCK\r
755 \r
756 \r
757 INTTAB:                 ;TABLE OF DATA FOR DEFINING PI CHAN AND NUMBER OF DOB\r
758         INTTB1==INTTAB+1\r
759 \r
760         ASGSAV PTY,0    \r
761 \r
762 .CHAS==0\r
763 .CH==0\r
764 NEXTCH\r
765 \r
766 ;THE FOLLOWING DEVICES MUST HAVE A UNIQUE, HIGH PRIORITY\r
767 ; CHANNEL FOR BLOCK I/O TRANSFERS.\r
768 \r
769 ;NOTE THAT THE PDP-6 DECTAPE AND MAGTAPE SHARE A\r
770 ; 136 DATA CONTROL IF BOTH ARE PRESENT.\r
771 \r
772         ;DATA PRODUCTS DISK BLKI/BLKO PI CHANNEL:\r
773         IFNDEF DCBCHN, <IFG DPDN, <XP DCBCHN,.CH\r
774         NEXTCH>>\r
775         ;PDP-6 OR PDP-10 MAGTAPE BLKI/BLKO PI CHANNEL:\r
776         IFNDEF MTDCHN, <IFG MTAN, <XP MTDCHN,.CH\r
777         NEXTCH>>\r
778         IFNDEF DCTCHN, <IFG MTCN, <XP DCTCHN,.CH\r
779         NEXTCH>>\r
780         ;PDP-6 OR PDP-10 DECTAPE BLKI/BLKO PI CHANNEL:\r
781         IFNDEF DTDCHN, <IFG DTAN, <XP DTDCHN,.CH\r
782         NEXTCH>>\r
783         IFNDEF DCTCHN, <IFG DTCN, <XP DCTCHN,.CH\r
784         NEXTCH>>\r
785 \r
786 IFNDEF BLKMXC, <BLKMXC=.CH>     ;REMEMBER THIS CHANNEL ON PASS 1\r
787 .CH==BLKMXC                     ;ON PASS 2, SKIP OVER BLKI CHANNELS\r
788 \r
789 \f;THE FOLLOWING ARE GROUPED ON A CHANNEL FOR HIGH-PRIORITY DEVICES\r
790         ASGSAV CDR,.CH\r
791         ASGINT APR,.CH\r
792 \r
793 NEXTCQ\r
794 \r
795 ;THE FOLLOWING ARE MEDIUM-PRIORITY DEVICES, AS A GROUP\r
796         ASGSAV SCN,.CH\r
797         ASGSAV PTR,.CH\r
798         MULASG LPT,LP,.CH\r
799         ASGSAV DTA,.CH\r
800         ASGSAV DTC,.CH\r
801         ASGSAV MTA,.CH\r
802         ASGSAV MTC,.CH\r
803         ASGINT CTY,.CH\r
804 \r
805 NEXTCQ\r
806 \f\r
807 ;THE FOLLOWING ARE LOWER-PRIORITY DEVICES, AS A GROUP\r
808         ASGSAV DSK,.CH\r
809         ASGSAV PEN,.CH\r
810         ASGSAV PTP,.CH\r
811         ASGSAV CDP,.CH\r
812         ASGSAV PLT,.CH\r
813 NEXTCQ\r
814 \r
815 \r
816 ;THESE DEVICES GET LOW PRIORITY CHANNEL\r
817         ASGSAV DIS,.CH\r
818 \r
819 NEXTCQ\r
820 \f\r
821 ;LAST IS THE SCHEDULER, ON CHANNEL 7 BY ITSELF\r
822 \r
823 IFG <.CH-7>, <  PRINTX ;NOT ENOUGH PI'S TO SERVICE THIS CONFIGURATION.\r
824                 PRINTX ;SUGGEST EDITING COMMON TO PUT MORE DEVICES ON\r
825                 PRINTX ; A SINGLE CHANNEL\r
826 >\r
827 \r
828 .CH==7\r
829         ASGINT CLK,.CH\r
830 \r
831         SPCINT\r
832                                 ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING\r
833                                 ; WHICH DO NOT USE A CHANNEL SAVE ROUTINE AND HAVE\r
834                                 ; NO DEVICE DATA BLOCK\r
835         SPCSAV\r
836                                 ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING\r
837                                 ; WHICH DO NEED A CHANNEL SAVE ROUTINE\r
838 \r
839 ;END OF THE ASSIGNMENT TABLE\r
840 \r
841         INTNUM==INTTAB-.        ;-LENGTH OF INTERRUPT CHANNEL ASSIGNMENT TABLE\r
842 \r
843         IFLE .-SYSEND, <LOC SYSEND+1>\r
844                                 ; SET LOC UP TO SYSEND+1, UNLESS ONCE ONLY CODE\r
845                                 ; IS BIGGER\r
846 \r
847 \f\r
848 \r
849 ;SYSTEM CONSTANTS AND PARAMETERS\r
850 \r
851         INTERN CNFTBL,CNFMXL,CONFIG,SYSTAP,SYSDAT\r
852 \r
853 \r
854 CNFTBL:                         ;FIRST LOCATION OF MONITOR DATA STORAGE\r
855                                 ; RETURNED BE GETTAB UUO (THESE LOCATIONS\r
856                                 ; NOT CLEARED BY SYSINI)\r
857                                 ; CNFTBL IS GETTAB TABLE 11 (RH OF AC)\r
858                                 ; OCTAL NO. IN () CORRESPOND TO GETTAB UUO\r
859 CONFIG: SYSNAM\r
860 \r
861         LOC CONFIG+5            ;ALWAYS LEAVE 5 WORDS (24 CHARS)\r
862                                 ; SO GETTAB UUO WILL BE CONSTANT\r
863 SYSDAT: SYSDAT\r
864                                 ;(5,6) GENERATE SYSTEM DATE\r
865         LOC SYSDAT+2            ;ALWAYS LEAVE 2 WORDS SO GETTAB CONSTANT\r
866 SYSTAP: SYSDEV\r
867                                 ;(7) NAME OF SYSTEM DEVICE, IN SIXBIT\r
868 \r
869 ;LOCATIONS SETUP BY ONCE ONLY OPERATOR DIALOGUE AND NEVER RESET ON RESTARTS\r
870 \r
871         INTERN TIME,THSDAT,SYSSIZ,DEVOPR,DEVLST,SEGPTR,TWOREG,STATES\r
872         INTERN SERIAL\r
873         EXTERN PATCH\r
874 \r
875 TIME:   0                       ;(10) TIME OF DAY IN JIFFIES (60TH OR 50THS OF A SEC)\r
876 THSDAT: 0                       ;(11) TODAY'S DATE ((Y-1964)*12+(M-1))*31+(D-1)\r
877 SYSSIZ: EXP PATCH               ;(12) SIZE OF MONITOR (FIRST LOC NOT USED)\r
878 DEVOPR: SIXBIT /CTY/            ;(13) SIXBIT PHYSICAL NAME OF OPERATORS CONSOLE\r
879                                 ; (IF THIS LOCATION CONTAINS 0, NONE HAS\r
880                                 ;  BEEN DESIGNATED)\r
881                                 ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE.\r
882                                 ; ALSO UNEXPLAINED MONITOR ERROR MESSAGES\r
883                                 ; WILL BE TYPED ON TTY OPR\r
884 DEVLST: XWD 0,0                 ;(14) LH CONTAINS ADDRESS OF FIRST DEVICE DATA BLOCK\r
885                                 ; ONCE ONLY CODE LINKS DEVICE DATA BLOCKS\r
886 \fSEGPTR:        XWD -SEGN,JOBN          ;(15) AOBJN POINTER TO 1ST HIGH SEG IN JBTXXX TABLES\r
887                                 ; LH=-NO. OF HIGH SEGS,  RH= ST HIGH SEG NO.\r
888 TWOREG: 0                       ;(16) FLAG TO INDICATE WHETHER BOTH HARDWARE AND SOFTWARE\r
889                                 ; HAVE 2 RELOC REG CAPACITY\r
890                                 ; NON-ZERO IF BOTH DO, 0 IF EITHER OR BOTH DO NOT\r
891                                 ; SET BY ONCE ONLY CODE\r
892 \r
893         ZZ==0\r
894         IFG DSKN,<ZZ==ZZ!1B0>   ;1 IF DISK SYSTEM (ANALOGOUS TO FTDISK)\r
895         IFG SYS50N,<ZZ==ZZ!1B1> ;1 IF SWAPPING SYSTEM (ANALOGOUS TO FTSWAP)\r
896         IFG LOGINN,<ZZ==ZZ!1B2> ;1 IF LOGIN (ANALOGOUS TO FTLOGIN)\r
897         IFN FTTTYSER,<ZZ==ZZ!1B3>       ;1 IF FULL DUPLEX SOFTWARE\r
898         IFN FTPRV,<ZZ==ZZ!1B4>  ;1 IF PRIVILEGE FEATURE INCLUDED\r
899         IFN FT2REL,<ZZ==ZZ!1B5> ;1 IF REENTRANT SOFTWARE\r
900         IFE JIFSEC-^D50,<ZZ==ZZ!1B6>    ;1 IF 50 CYCLE MACHINE, 0 IF 60 CYCLE\r
901 STATES: EXP ZZ                  ;(17) BITS WHICH DEFINE TYPE OF SYSTEM IN LH\r
902                                 ; RH PATCHED BY MONITOR COMMAND TO\r
903                                 ; INDICATE OPERATIONAL STATE OF SYSTEM\r
904 SERIAL: EXP APRSN       ;(20) SERIAL NUMBER OF APR\r
905 CNFMXL==<.-CNFTBL-1>B26 ;MAXIMUM ENTRY IN CNFTBL FOR GETTAB UUO\r
906 \fIFG DSKN, <\r
907         INTERN ODPTBL,ODPMXL,SWPHGH,K4SWAP,PROT,PROT0\r
908 \r
909 IFG SYS50N,<    EXTERN ICPROT,ICPRT1    ;THESE ARE DEFINED ONLY IN\r
910                                         ; A SWAPPING SYSTEM>\r
911 IFLE SYS50N,<   XP ICPROT,0             ;IF NON-SWAPPING, DECLARE\r
912                 XP ICPRT1,0             ; INTERNAL IN COMMON>\r
913 \r
914 ODPTBL:                         ;FIRST LOC IN MONITOR DATA AREA FOR DISK\r
915                                 ; LOCATIONS WHICH ARE NOT SET TO 0 WHEN SYSTEM\r
916                                 ; STARTED, ODPTBL IS GETTAB UUO TABLE 15\r
917 \r
918 SWPHGH: 0                       ;(0) HIGHEST LOGICAL BLOCK # IN THE SWAPPING\r
919                                 ; SPACE ON THE DISK (SET BY SWPINI)\r
920 K4SWAP: 0                       ;(1)K OF DISK WORDS SET ASIDE FOR SWAPPING\r
921                                 ; ASSIGNED AT ONCE ONLY REFRESH TIME\r
922 \r
923 PROT:   EXP ICPROT              ;(2) IN-CORE PROTECT TIME PARAMETER TO BE\r
924                                 ; MULTIPLIED BY (K-1) OF CORE IN JOB.\r
925 PROT0:  EXP ICPRT1              ;(3) IN-CORE PROTECT TIME PARAMETER TO \r
926                                 ; BE ADDED TO ABOVE RESULT.\r
927 \r
928                                 ;INSERT NEW LOCATIONS OF INTEREST SETUP\r
929                                 ; BY ONCE ONLY CODE HERE FOR DISK SYSTEMS\r
930 ODPMXL==<.-ODPTBL-1>B26 ;MAXIMUM ENTRY IN ODPTBL FOR GETTAB UUO\r
931 >       \r
932 \r
933 \f;MORE DATA LOCATIONS SETUP AT ASSEMBLY TIME OR ONCE ONLY TIME\r
934 ; BUT NOT OF INTEREST TO USER PROGRAMS\r
935 \r
936         INTERN XJBPFI,PMONTB,MONTAB,MIDNIT\r
937 \r
938 XJBPFI: XWD .,0                 ;LH FILLED IN WITH EXTERNAL JOBPFI (SEE JOBDAT)\r
939                                         ; JOBPFI==HIGHEST LOC, IN USER JOB DATA AREA\r
940                                 ; PROTECTED FROM I/O\r
941 ;MONTH TABLE FOR DAYTIME COMMAND PRINTING\r
942 \r
943 PMONTB: POINT 6,MONTAB(TAC),5   ;POINTER TO NUMBER OF DAYS INMONTH\r
944 MONTAB: EXP ^D30B5+"JAN"\r
945         EXP ^D27B5+"FEB"\r
946         EXP ^D30B5+"MAR"\r
947         EXP ^D29B5+"APR"\r
948         EXP ^D30B5+"MAY"\r
949         EXP ^D29B5+"JUN"\r
950         EXP ^D30B5+"JUL"\r
951         EXP ^D30B5+"AUG"\r
952         EXP ^D29B5+"SEP"\r
953         EXP ^D30B5+"OCT"\r
954         EXP ^D29B5+"NOV"\r
955         EXP ^D30B5+"DEC"\r
956 MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT\r
957 \f;STOP PROCEDURE WHEN SHUTTING DOWN SYSTEM\r
958 ;BECAUSE OF CATOSTROPHIC FAILURE OR ANY OTHER REASON\r
959 ;WRITE OUT DIRECTORIES STILL IN CORE (DISK)\r
960 ;TRANSFER HERE FROM LOC 147\r
961 \r
962 ;PROCEDURE TO SAVE CRASHED MONITOR ON DECTAPE FOR LATER DEBUGGING UNDER TIME SHARING\r
963 ;OPERATOR SHOULD:\r
964 ;  1. PUSH STOP AND HOLD IT DOWN\r
965 ;  2. PUSH CONTINUE (APR PI IN PROGRESS SHOULD COME ON)\r
966 ;               THIS PUTS MACHINE INTO EXEC MODE AND STORES PC OC CRASH\r
967 ;  3. LETUP ON STOP\r
968 ;  4. SET ADDRESS SWITCHES TO 147\r
969 ;  5. PUSH START (DO NOT PUSH I/O RESET AS IT WILL CLEAR DEVICES)\r
970 \r
971 INTERN APRSTS,PISTS,SYSTOP,CRASHX,SWTSTS,TTYSTS,PTRSTS,TMCSTS\r
972 INTERN PTPSTS,DLSSTS,DTSSTS,CRSTS,LPTSTS,PLTSTS,TMSSTS,DSKSTS,DSKDTI\r
973 EXTERN SYSPDL\r
974 \r
975 EXTERN CRSHAC                   ;DEFINED IN SYSINI TO BE 143 RESTART CODE\r
976                                 ;SO MONITOR CANNOT BE RESTARTED AT 143 AFTER\r
977                                 ;BEING STARTED AT 147.\r
978 \r
979 CRASHX: MOVEM 17,CRSHAC+17      ;SAVE AC17\r
980         MOVE 17,TSTLOC\r
981         CAME 17,SYSCRS          ;IS LOC 147 WIPED OUT?\r
982         HALT SYSTOP+1           ;YES - LET OPERATOR DECIDE WHAT TO DO\r
983         JRST SYSTOP+1           ;NO - GO SAVE AC'S & DEVICE STATES\r
984 TSTLOC: JRST SYSTOP\r
985 \r
986 SYSTOP: MOVEM 17,CRSHAC+17      ;SAVE ALL ACS\r
987         MOVEI 17,CRSHAC         ;SOURCE==0, DESTINATION==CRSHAC\r
988         BLT 17,CRSHAC+16        ;SO DDT CAN LOOK AT SAVED CRASH LATER\r
989 \r
990 APRSTS: CONI APR,.              ;STORE APR STATUS HERE\r
991 PISTS:  CONI PI,.               ;STORE PI STATUS HERE\r
992 SWTSTS: DATAI APR,.\r
993 TTYSTS: CONI TTY,.\r
994 PTRSTS: CONI PTR,.\r
995 PTPSTS: CONI PTP,.\r
996 DLSSTS: CONI DLS,.\r
997 DTSSTS: CONI DTS,.\r
998 CRSTS:  CONI CR,.\r
999 LPTSTS: CONI LPT,.\r
1000 PLTSTS: CONI PLT,.\r
1001 TMSSTS: CONI TMS,.\r
1002 TMCSTS: CONI    TMC,.\r
1003 DSKSTS: CONI    DSK,.\r
1004 DSKDTI: DATAI   DSK,.\r
1005         CONO APR,APRRST         ;RESET SYSTEM\r
1006         MOVEI   PDP,SYSPDL      ;SETUP PDP TO SPARE AREA\r
1007         IFG DSKN, <\r
1008         EXTERN DSKSTP\r
1009         PUSHJ   PDP,DSKSTP>\r
1010         HALT 137400             ;STOP AT TENDMP(READY TO READ IN ANYTHING)\r
1011 ;ERROR RECOVERY - TRY TO START NULL JOB\r
1012 \r
1013 NULJB1: MOVEI ITEM,0    ;SET JOB NUMBER TO 0\r
1014         JRST NULJOB     ;GO RESTORE NULL JOB\r
1015 \f\r
1016 \r
1017 \r
1018 ;COMMON SUBROUTINE RETURNS\r
1019 \r
1020         INTERN CPOPJ,CPOPJ1,DPOPJ,TPOPJ,TPOPJ1,CPOPJ2,IPOPJ1,IPOPJ\r
1021         INTERN CUXIT1,CUXIT,UXIT\r
1022         INTERN FTTIME,FTSWAP,FTSLEEP,FTKCT,FT2REL,FTPRV\r
1023 CPOPJ2: AOS     (PDP)           ;DOUBLE SKIP SUBROUTINE RETURN\r
1024 CUXIT1:                         ;OLD SKIP RETURN FOR UUOS\r
1025 CPOPJ1: AOSA    (PDP)           ;SKIP SUBROUTINE RETURN\r
1026 DPOPJ:  MOVEM   IOS,DEVIOS(DEVDAT) ;DEPOSIT I/O STATUS WORD IN DDB\r
1027 UXIT:\r
1028 CUXIT:                          ;OLD RETURN FOR UUOS\r
1029 CPOPJ:  POPJ    PDP,\r
1030 \r
1031 TPOPJ1: AOS     -1(PDP)         ;RESTORE TAC THEN SKIP RETURN\r
1032 TPOPJ:  POP     PDP,TAC         ;RESTORE TAC\r
1033         POPJ    PDP,            ;AND RETURN\r
1034 IPOPJ1: AOS -1(PDP)             ;SET FOR SKIP RETURN\r
1035 IPOPJ:  POP PDP,ITEM            ;RESTORE ITEM (USUALLY JOB OR HIGH SEG NUMBER)\r
1036         POPJ PDP,\r
1037 \r
1038 \f; SYSTEM BYTE POINTERS\r
1039 \r
1040         INTERN PUUOAC,PIOMOD,PJOBN,PUNIT,PJBSTS,PDVTIM,PDVCNT,PCORSZ,COREP\r
1041         INTERN IADPTR\r
1042 \r
1043 PUUOAC: POINT   4,UUO,12        ;UUO AC FIELD\r
1044 PIOMOD: POINT   4,IOS,35        ;MODE BITS\r
1045 PJOBN:  POINT   6,DEVCHR(DEVDAT),5 ;DEVICE JOB ASSIGNMENT\r
1046 PUNIT:  POINT   6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NUMBER\r
1047 PJBSTS: POINT   JWSIZ,JBTSTS(ITEM),JWPOS ;JOB WAIT STATE (QUEUE) CODE\r
1048                                 ;IN JOB STATUS WORD\r
1049 PDVTIM: POINT   6,DEVCHR(DEVDAT),17 ;TIME IN SECONDS BEFORE DEVICE\r
1050                                     ;IS SAID TO BE HUNG\r
1051 PDVCNT: POINT   6,DEVCHR(DEVDAT),11 ;COUNTED DOWN EACH SECOND,\r
1052                                 ;1 TO 0 TRANSITION MEANS HUNG DEVICE\r
1053 IADPTR: POINT   2,DEVIAD(DEVDAT),2      ;COUNT OF NUMBER OF USER CHANNELS INITED\r
1054                                 ; ON THIS DEVICE (DECTAPE ONLY)\r
1055 PCORSZ: POINT 8,JBTADR(ITEM),7  ;BYTE POINTER TO LOW OR HIGH SEG CORE SIZE-1\r
1056 \r
1057 COREP:  POINT   1,CORTAB        ;1 BIT POINTER TO CORE ALLOCATION TABLE\r
1058 \r
1059         IFG SYS50N, <           ;SWAPPING SYSTEM ?\r
1060         INTERN IMGIN,IMGOUT,IMGINT,OUTMSK,INMSK,INLEFT\r
1061         INMSK=000377            ;RH MASK TO IMGIN\r
1062         INLEFT=12               ;NUMBER OF BITS TO SHIFT TO LEFT JUSTIFY IN RH\r
1063 \r
1064 IMGIN:  POINT 8,JBTSWP(ITEM),35 ;BYTE POINTER FOR # 1K BLOCKS OF CORE\r
1065                                 ;WHEN JOB OR HIGH SEG NEXT SWAPPED IN\r
1066                                 ;NON-ZERO ONLY WHEN SWAPPED OUT\r
1067 IMGOUT: POINT 8,JBTSWP(ITEM),26 ;BYTE POINTER FOR # 1K BLOCK OF DISK\r
1068                                 ;WHEN JOB OR HIGH SEG HAS IMAGE ON DISK\r
1069                                 ;ZERO MEANS NO DISK SPACE ALLOCATED\r
1070         OUTMSK=377000           ;RH MASK TO IMGOUT. USED TO TEST FOR 0\r
1071                                 ; (IE NO DISK SPACE)\r
1072 IMGINT: POINT   8,JBTSWP(DEVDAT),35 ;POINTER TO INCORE IMAGE\r
1073 >\r
1074 \r
1075 \f;SPECIAL PROJECT-PROGRAMMER NUMBERS\r
1076         IFG DSKN, <             ;DISK SYSTEM?\r
1077         INTERN CUSPPP,SYSPP,DUMPPP,HELPPP\r
1078 \r
1079 CUSPPP:                 ;CUSP FILE DIRECTORY, MAKE SEPARATE TAG FROM\r
1080                                 ; MFD(SYSPP) \r
1081 SYSPP:  XWD     1,1     ;THE MASTER FILE DIRECTORY PROJECT PROGRAMMER NO.\r
1082 DUMPPP: XWD     1,2     ;THE FAILSAFE PROJ,PROG NO (CAN READ OF WRITE ANYTHING)\r
1083 HELPPP: XWD     2,4     ;SYSTAT AND HELP PROJECT,PROGRAMMER NOS IF JOB NOT LOGGED IN ALREADY\r
1084 >\r
1085 \f;DEFINE PI CHANNEL SAVE AND RESTORE ROUTINES IF A DEVICE IS ON THE CHANNEL\r
1086 \r
1087         HIGHAC==10      ;HIGHEST AC SAVE ON A PI INTERRUPT\r
1088         PDL==25         ;LENGTH OF INTERRUPT PI PUSH DOWN LIST\r
1089 \r
1090 DEFINE CHAN (PI)<\r
1091         XLIST\r
1092         INTERN SAV'PI,RET'PI,CH'PI\r
1093 CH'PI:  0               ;PC STORED HERE BY JSR ON INTERRUPT TO CHANNEL PI\r
1094         JEN @CH'PI      ;LAST INSTRUCTION ON CONSO DEV, CHAIN\r
1095 \r
1096 ;HERE FROM AN INTERRUPT ROUTINE WHICH HAS FOUND ITS DEVICE NEEDS SERVICE\r
1097 ;SAVE ACS 0 THRU HIGHAC, CALLED BY JSR, SETS UP PDP TO PUSH DOWN LIST FOR THIS PI\r
1098 \r
1099 SAV'PI: 0               ;CALLED BY JSR\r
1100         MOVEM HIGHAC,SAVAC'PI+HIGHAC    ;SAVE AC HIGHAC\r
1101         MOVEI HIGHAC,SAVAC'PI   ;SETUP TO SAVE 0 THRU HIGHAC-1\r
1102         BLT HIGHAC,SAVAC'PI+HIGHAC-1    ;SAVE ACS\r
1103         MOVE PDP,SAVAC'PI+HIGHAC+1      ;SETUP PUSH DOWN POINTER\r
1104         JRST @SAV'PI                    ;RETURN TO CALLER AND PROCESS INTERRUPT\r
1105 \r
1106 ;HERE FROM INTERRUPT ROUTINE WHEN IT HAS FINISHED SERVICING INTERRUPT\r
1107 ;RESTORE ACS AND DISMISS INTERRUPT\r
1108 ;USUALLY TRANSFERRED TO BY POPJ PDP,\r
1109 \r
1110 RET'PI: MOVSI HIGHAC,SAVAC'PI   ;RESTORE ACS 0 THRU HIGHAC\r
1111         BLT HIGHAC,HIGHAC\r
1112         JEN @CH'PI              ;DISMISS INTERRUPT ON THIS PI CHANNEL\r
1113 \r
1114 SAVAC'PI:       BLOCK HIGHAC+1  ;PLACE TO SAVE ACS 0 THRU HIGHAC\r
1115         XWD -PDL+1,.+1          ;INITIAL PUSH DOWN POINTER\r
1116 CH'PI'PD1:      EXP RET'PI      ;FIRST WORD ON LIST,\r
1117                                 ; POPJ WILL RETURN TO DISMISS INTERRUPT\r
1118         BLOCK PDL-1             ;PUSHDOWN LIST SPACE\r
1119         LIST\r
1120 >\r
1121 \r
1122 \f;GENERATE THE CHANNEL SAVE ROUTINE ONLY FOR PI WHICH NEED THEM (ASGSAV MACRO USED)\r
1123 \r
1124         IFN USED1, <CHAN 1>\r
1125         IFN USED2, <CHAN 2>\r
1126         IFN USED3, <CHAN 3>\r
1127         IFN USED4, <CHAN 4>\r
1128         IFN USED5, <CHAN 5>\r
1129         IFN USED6, <CHAN 6>\r
1130         IFN USED7, <CHAN 7>\r
1131 \r
1132 \r
1133 \r
1134 ;GENERATE NULL CHANNEL SAVE ROUTINES FOR THOSE CHANNELS NOT USED\r
1135 \r
1136 DEFINE NULL (PI)<\r
1137         XLIST\r
1138         INTERN CH'PI\r
1139 CH'PI:  0\r
1140         JEN @CH'PI\r
1141         LIST\r
1142 >\r
1143 \r
1144         IFE USED1, <NULL 1>\r
1145         IFE USED2, <NULL 2>\r
1146         IFE USED3, <NULL 3>\r
1147         IFE USED4, <NULL 4>\r
1148         IFE USED5, <NULL 5>\r
1149         IFE USED6, <NULL 6>\r
1150         IFE USED7, <NULL 7>\r
1151 \f;HERE ON TRAPS TO LOC 60/61 - UNIMPLEMENTED INSTRUCTIONS (PDP-10 ONLY)\r
1152 ;OPCODE AND EFFECTIVE ADDRESS STORED IN SIXTY AND 61 EXECUTED (JSR UUO2)\r
1153 ;OP CODE 100 (UJEN) IS USED TO DISMISS USER MODE INTERRUPTS FOR REAL TIME OPERATION\r
1154 ;USED IN CONJUNCTION WITH TRPSET UUOWHICH IS SOON TO BE REPLACED\r
1155 ;WITH SOME KNAVE-PROOF REAL TIME UUOS.  THIS CODE IS HERE ONLY\r
1156 ;BECAUSE MANUAL DESCRIBES TRPSET AND TRPJEN UUOS.\r
1157 ;TRPJEN HAS BEEN REPLACED WITH OPCODE 100 (UJEN).\r
1158 ;CALL:  UGEN U                  ;WHERE U CONTAINS PC STORED BY INTERRUPT JSR\r
1159 \r
1160         INTERN UUO2\r
1161 \r
1162 UUO2:   0                       ;USER PC STORE HERE BY JSR\r
1163         EXCH TAC,UUO2           ;GET USER PC, SAVE TAC\r
1164 IFN FTTRPSET, <\r
1165         TLNN TAC,UIOMOD         ;USER I/O MODE ON ?\r
1166         JRST UUOER2             ;NO, TREAT AS AN ILLEGAL INSTRUCTION AND PRINT MESS.\r
1167         HLL TAC,SIXTY           ;YES, GET UNIMPLEMENTED OPCODE WHICH TRAPPED\r
1168         TLNE TAC,677777         ;IS IT OPCODE 100 (UJEN)?\r
1169         JRST UUOER1             ;NO, TREAT AS ILLEGAL INSTRUCTION\r
1170         MOVE TAC,SIXTY          ;YES, GET EFFECTIVE ADDRESS\r
1171         ADD TAC,JOBADR          ;ADD RELOCATION FOR CURRENT JOB\r
1172         MOVE TAC,(TAC)          ;GET PC STORED BY INTERRUPT JSR\r
1173         EXCH TAC,UUO2           ;RESTORE TAC, AND STORE PC\r
1174         JEN @UUO2               ;DISMISS INTERRUPT\r
1175 \r
1176 UUOER1: HRLI TAC,USRMOD!UIOMOD  ;SET USER MODE AND USER I/O MODE BACK ON\r
1177 >\r
1178 UUOER2: MOVEM TAC,UUO0          ;STORE PC AS IF AN ILLEGAL INSTR. HAD OCCURRED\r
1179         SETOM FORTY             ;MAKE IT LOOK LIKE AN ILLEGAL INSTRUCTION\r
1180                                 ; TRAPPED TO 40\r
1181         SKIPA TAC,UUO2          ;RETORE TAC AND FALL INTO REGULAR UUO HANDLER\r
1182 \f;HERE ON TRAPS TO EXEC LOC 40/41 - OPCODES 0,40-77 (0-77 ON PDP-6)\r
1183 \r
1184         INTERN UUO0\r
1185         EXTERN UUOUSR,UUOSY1,ERROR\r
1186 \r
1187 UUO0:   0                       ;JSR HERE FROM LOC 41\r
1188         MOVEM 17,USRSAV         ;SAVE 17\r
1189         MOVE 17,UUO0            ;GET PROCESSOR FLAGS\r
1190         TLNN 17,USRMOD          ;IS UUO FROM MONITOR ?\r
1191         JRST UUOSY1             ;YES, DO NOT SAVE ACS\r
1192         SKIPN 17,JOBADR         ;IS THERE A JOB DATA AREA ?\r
1193         JSP DAT,ERROR           ;NO, MUST BE UUO DURING NULL JOB\r
1194                                 ; PRINT ERROR IN MONITOR\r
1195 IFE PDP10N, <                   ;FOR PDP-6 OPCODES 1-37\r
1196         EXCH TAC,FORTY          ;SAVE TAC, PICK UP UUO\r
1197         TLNN TAC,740000         ;IS THIS SYSTEM UUO ?\r
1198         TLNN TAC,077000         ;NO, IS IT 0 UUO ?\r
1199         JRST UUOSYS             ;YES\r
1200         MOVEM TAC,40(17)        ;STORE UUO IN USER'S 40\r
1201         HRRZ TAC,41(17)         ;PICK UP ADR OF USER'S JSR\r
1202         JUMPE TAC,UUOSYS        ;IF ADDRESS=0,ILLEGAL USER UUO****UWA PATCH\r
1203         HLL TAC,UUO0            ;USER PD FLAGS (RESTORED ON RETURN)\r
1204         MOVEI 17,(TAC)          ;17 NOW HAS REL.ADR+1 OF USER JSR\r
1205         CAML 17,USRREL          ;IS EFFECTIVE ADDRESS IN BOUNDS ?\r
1206         JRST UUOSY0             ;ERROR, JSR EFF. ADDR. OUTSIDE USER AREA\r
1207         HRRI TAC,1(TAC)         ;YES, INCREMENT PC.\r
1208         EXCH TAC,UUO0           ;SET UP RETURN TO USER IN UUO0\r
1209                                 ; PICKUP USERS FLAGS,PC\r
1210         ADD 17,JOBADR           ;MAKE REL. ADDRESS INTO ABSOLUTE ADDRESS\r
1211         MOVEM TAC,(17)          ;STORE FLAGS AND PC LIKE JSR\r
1212         MOVE TAC,FORTY          ;RESTORE TAC\r
1213         MOVE 17,USRSAV          ;RESTORE 17\r
1214         JRST 2,@UUO0            ;RETURN TO USER (RESTORING FLAGS)\r
1215 \r
1216 UUOSY0: MOVE 17,JOBADR          ;SETUP 17 FOR LOW SEGMENT RELOCATION\r
1217 UUOSYS: EXCH TAC,FORTY          ;RESTORE USERS AC(TAC) AND USER'S UUO (FORTY)\r
1218 >               \r
1219         JRST UUOUSR             ;GO SAVE USER'S ACS IN REL. LOCATION 0-17\r
1220                                 ; AND DISPATCH ON UUO\r
1221 \f;GENERATE EXTERNAL GLOBALS TO CAUSE LOADING OF PROPER ROUTINES FROM MONITOR LIBRARY TAPE\r
1222 ;IF THERE IS ONE\r
1223 \r
1224 \r
1225 ;ALWAYS LOAD CLOCK1,COMCON,CORE1,ERRCON,JOBDAT,ONCE,PATCH,SYSMAK,UUOCON\r
1226 \r
1227 EXTERNAL CLOCK1,COMCON,CORE1,ERRCON,DATJOB,ONCE,PATCH,SYSMAK,UUOCON\r
1228 \r
1229 ;LOAD DDT\r
1230         IFG DDTN, <EXTERN DDTX>\r
1231         IFE DDTN, <XP DDTEND,0  ;ONCE REFERENCES END OF DDT>\r
1232 \r
1233 ;LOAD SCHEDULER FOR NON-SWAPPING OR SWAPPING SYSTEM\r
1234         IFG SYS40N,<EXTERN XCKCSS>      ;CLKCSS\r
1235         IFG SYS50N,<EXTERN XCKCSW>      ;SCHED\r
1236 \r
1237 ;LOAD EITHER SEGCON (2REG SOFTWARE) OR NULSEG (1 REG SOFTWARE)\r
1238 ; UNLESS USER HAS EDITTED S WITH FT2REL=0 SO ALL PUSHJ'S\r
1239 ; TO SEGCON (NULSEG) ARE REMOVED\r
1240 \r
1241 IFN FT2REL, <\r
1242         IFG KT10AN, <EXTERN SEGCON>\r
1243 \r
1244         IFE KT10AN, <EXTERN NULSEG>\r
1245 >\r
1246 \r
1247 \r
1248 ;APR AND PI BITS\r
1249         INTERN  PION,PIOFF,REQCLK,PICLK,APRCLR,APRCLE,APRNUL,APRRST,NXM,APRFOV\r
1250 \r
1251         CLKBIT==1\r
1252         REPEAT 7-CLKCHN, <CLKBIT==CLKBIT*2>\r
1253         PION==200               ;CONO PI,PION TURNS PI SYSTEM ON\r
1254         PIOFF==400              ;TURN IT OFF\r
1255         REQCLK==1B24+CLKBIT     ;REQUEST INTERRUPT ON LOW PRIORITY CLK CHANNEL\r
1256         PICLK=PION+REQCLK       ;TURN ON PI,REQUEST INTERRUPT ON CLK CHANNEL\r
1257         APRCLR==1000+APRCHN     ;TURN APR CLOCK FLAG OFF\r
1258         APRCLE==431550+APRCHN   ;CLEAR ALL APR ERROR BITS\r
1259                                 ; AND DISABLE FOV AND AR OVF\r
1260         APRNUL==433550+APRCHN   ;RESET APR FOR NULL JOB\r
1261                         ; CLEAR EVERYTHING BUT DON'T I/O RESET\r
1262         APRRST==APRNUL+200000   ;RESET APR FOR SYSINI (I/O RESET TOO)\r
1263         NXM==10000              ;NON-EX MEM (APR STATUS WORD)\r
1264         IFG PDP10N,<APRFOV==100 ;FLOADTING OVERFLOW CAN BE ENABLED ON PDP10\r
1265                                 ; FOR USER TRAPPING>\r
1266         IFE PDP10N,<APRFOV==000 ;PC CHANGE CANNOT BE ENABLED ON PDP-6, BEACUSE\r
1267                                 ; IT MAKES MONITOR TRAP ALSO>\r
1268 \r
1269 ;MAKE SURE THAT PROPER VERSION OF FEATURE SWITCH FILES WERE USED TO ASSEMBLE\r
1270 ;THE REST OF THE MONITOR\r
1271 ;THE LOADER WILL PRINT NUL. DEF. GLOBAL IF A MISTAKE HAS BEEN MADE\r
1272         XP FTDISK,-DSKN\r
1273         XP FTSWAP,-SYS50N\r
1274         XP FTRC10,-RD10N\r
1275 \r
1276         IFG KT10AN,<XP FT2REL,-1>       ;IF Z RELOC SOFTWARE, THEN FTZREI MUST BE -1\r
1277         IFE COREN,<COREN=^D256          ;NO RESTRICTION IF 0 TYPED>\r
1278         XP USRLIM,COREN                 ;DEFINE GLOBAL RESTRICTING SIZE OF CRE FOR ANY SINGLE USER\r
1279                                         ; ONCE ONLY CODE CAN ALTER THIS VALUE\r
1280                                         ; (PATCH RH CORLIM IN SYSIM)\r
1281 \f;SCANNER ENTRY POINTS AND BIT DEFINITIONS\r
1282 \r
1283         IFG DLSN, <EXTERN DLSINT>       ;DATA LINE SCANNER\r
1284         IFG CCIN, <EXTERN CCIINT>       ;DA-10 PDP-8 680\r
1285         IFG DCSN, <EXTERN DCSINT>       ;630 DATA COMMUNICATIONS SYS\r
1286 \r
1287         IFG FULLN, <EXTERN SCNSRF>      ;FULL DUPLEX SOFTWARE ENTRY POINT\r
1288         IFE FULLN, <EXTERN SCNSRH>      ;HALF DUPLEX SOFTWARE ENTRY POINT\r
1289 \r
1290         IFG FULLN, <\r
1291         INTERN LINTAB\r
1292 \r
1293 LINTAB:         ;LINE CHARACTERISTICS BITS (NOT CLEARED ON SYSTEM STARTUP)\r
1294 \r
1295 ;TELETYPE LINE CHARACTERISTICS (LH OF LINTAB)\r
1296 ;USED IN SCNSRF ALSO\r
1297 \r
1298         XP PTYLIN,400000        ;PSEUDO TTY LINE\r
1299         XP CTYLIN,200000        ;CONSOLE TTY\r
1300         XP DISLIN,100000        ;KEYBOARD DISPLAY\r
1301         XP DSDTLN, 40000        ;DATASET DATA LINE\r
1302         XP DSCTLN, 20000        ;DATASET CONTROL LINE(DC10E)\r
1303         XP HLFDPX, 10000        ;HALF DUPLEX LINE\r
1304         XP TTYRMT,  4000        ;REMOTE TTY\r
1305         XP    T35,    10        ;TTY HAS HARDWARE TABS\r
1306         XP FULTWX,     4        ;SELF-ECHOING LINE\r
1307                                 ;USED IN CCIINT,DCSINT,DLSINT & SCNSRF\r
1308 \r
1309 IFG EDITN,<             ;HAS COMMON.MAC BEEN EDITED TO DEFINE TTY LINE CHAR.\r
1310                         ; SO MONGEN TYPE-IN REDUCED?\r
1311 ;IF NO APR NUMBER, AND THIS IS NOT EDITED FOR THE CUSTOMER,\r
1312 ; MAKE ALL LIENS JUST BE MODEL 33 TELETYPES\r
1313 \r
1314 IFE APRN,<REPEAT TTPLEN,<0>>\r
1315 \r
1316 IFE APRSN-2,<\r
1317 ;FOLLOWING LINE DEFINITIONS FOR DEC PDP12 #2\r
1318 \r
1319         XWD T35,0       ;TTY0\r
1320         XWD T35,0       ;TTY1\r
1321         XWD T35,0       ;TTY2\r
1322         XWD 0,0         ;TTY3\r
1323 REPEAT 3,<      XWD T35,0>;TTY4-6\r
1324         XWD T35+TTYRMT,0        ;TTY7 - REMOTE 35\r
1325         XWD DSDTLN,0    ;TTY10\r
1326         XWD DSDTLN+HLFDPX,0     ;TTY11\r
1327         XWD DSDTLN,0    ;TTY12\r
1328 REPEAT 4,<      XWD T35,0>;TTY13-16\r
1329 REPEAT 8,<XWD TTYRMT,0>\r
1330 >\r
1331 \r
1332 IFE APRSN-^D40,<\r
1333 ;THIS CONFIGURATION FOR DEC SYSTEM NUMBER 40\r
1334 \r
1335 REPEAT ^D8,<0           ;MODEL 33'S LOCALLY>\r
1336 \r
1337 REPEAT ^D8,<    XWD DSDTLN,0    ;DATASET>\r
1338 >\r
1339 \r
1340 ; CTY AND PTY SET BY SCNSER\r
1341 >       ;END PRE-EDITED LINE CHARACTERISTICS\r
1342 \f\r
1343 \r
1344 IFE EDITN,<             ;MONGEN DIALOG DEFINE TTY CONFIG?\r
1345 \r
1346 DEFINE GENLIN(LIN)<\r
1347         IFNDEF DSD'LIN,<DSD'LIN=0>      ;DATA SET?\r
1348         IFNDEF TAB'LIN,<TAB'LIN=0>      ;HARDWARE TABS?\r
1349         IFNDEF RMT'LIN,<RMT'LIN=0>      ;REMOTE?\r
1350         IFNDEF HLF'LIN,<HLF'LIN=0>      ;HALF DUPLEX SCANNER?\r
1351         XWD DSD'LIN*TAB'LIN*T35+RMT'LIN*TTYRMT+HLF'LIN*HLFDPX,0\r
1352 >\r
1353 \r
1354 REPEAT HGHLIN+1,<LINE=.-LINTAB          ;DEFINE LINE NUMBER\r
1355         GENLIN \LIN>\r
1356 >\r
1357         LOC LINTAB+TTPLEN       ;MAKE SURE ENOUGH SPACE FOR CTY+PTY;S\r
1358 \r
1359 >       ;END OF FULL DUPLEX CONDITIONAL\r
1360 \r
1361         INTERN FSNCHN,SCNON,SCNOFF\r
1362 \r
1363         FSNCHN==SCNCHN*101      ;CHANNEL ASSIGNMENT FOR FULL DUPLEX SCN.\r
1364         SCNBIT==<1_<7-SCNCHN>>\r
1365         SCNON==2000+SCNBIT      ;CONO PI, TURNS SCANNER PI CHANNEL ON\r
1366         SCNOFF==1000+SCNBIT     ;CONO PI, TURNS SCANNER PI CHANNEL OFF\r
1367         IFG TABSN, <TTMODL=-1>  ;HARDWARD TABS\r
1368         IFE TABSN, <TTMODL=0>\r
1369 XP SCNNUM,HGHLIN+1              ;# OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG)\r
1370 \f;MAGTAPE ENTRY POINT AND BIT DEFINITIONS\r
1371 \r
1372         IFG MTAN, <EXTERN MTASRX>       ;TM10 ENTRY POINT\r
1373         IFG MTCN, <EXTERN MTCSR6>       ;PDP-6 MAGTAPES ENTRY POINT\r
1374 \r
1375         IFG MTAN, <\r
1376 \r
1377         INTERN MMTSIZ,MTALOC,MTLOC1,MTBOTH,MTFLAG\r
1378 \r
1379         MMTSIZ==-MTSIZ\r
1380         MTALOC==40+2*MTDCHN             ;BLKI/BLKO LOCATION\r
1381         MTLOC1==MTALOC+1                ;NEXT LOCATION\r
1382         MTBOTH==MTACHN*10+MTDCHN        ;BOTH PI CHANNELS\r
1383         MTFLAG==400+MTACHN*10\r
1384 >\r
1385 \r
1386         IFG MTCN, <\r
1387 \r
1388         INTERN  DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT\r
1389 \r
1390         DCLOC==40+2*DCTCHN      ;EVEN DC PI CHANNEL LOCATION\r
1391         DCLOC1==DCLOC+1         ;NEXT LOCATION\r
1392                 DCBIT==1\r
1393                 REPEAT 7-DCTCHN, <DCBIT==DCBIT*2>\r
1394         DCON==2000+DCBIT        ;TURN DC PI CHANNEL ON\r
1395         DCOFF==1000+DCBIT       ;TURN DC PI CHANNEL OFF\r
1396         DCIN=4010+DCTCHN        ;SET DATA CHANNEL FOR INPUT\r
1397         DCOUT==3410+DCTCHN      ;SET DATA CHANNEL FOR OUTPUT\r
1398 >\r
1399 \f\r
1400 ;DECTAPE ENTRY POINT AND BIT DEFINITIONS\r
1401 \r
1402         SAVN==1                         ;WE ONLY SUPPORT NEW FORMAT NOW\r
1403                                         ;MONGEN NO LONGER ASKS QUESTION,\r
1404 \r
1405         IFG DTAN, <EXTERN DTASRN>       ;TD10 WITH NEW FORMAT\r
1406         IFG DTCN, <\r
1407         IFG SAVN, <EXTERN DTCSRN>       ;556 WITH NEW FORMAT\r
1408         IFE SAVN, <EXTERN DTCSRO>       ;556 WITH OLD FORMAT\r
1409 >\r
1410         IFG DTAN, <     ;DEFINE SYMBOLS IF PDP-10 DECTAPES (TD10)\r
1411         INTERNAL DTALOC,DTALC2,DTBOTH,DTTURN\r
1412                 DTALOC==40+2*DTDCHN     ;BLKI/BLKO LOCATION\r
1413                 DTALC2==DTALOC+1        ;NEXT LOCATION\r
1414                 DTBOTH==DTDCHN*10+DTACHN\r
1415                 DTTURN==300200+DTBOTH\r
1416 >\r
1417         IFG DTCN, <     ;DEFINE SYMBOLS IF PDP-6 DECTAPES (556)\r
1418         INTERNAL DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT\r
1419                 DCLOC==40+2*DCTCHN      ;EVEN DC PI CHANNEL LOC\r
1420                 DCLOC1==DCLOC+1         ;NEXT LOCATION\r
1421                 DCBIT==1\r
1422                 REPEAT 7-DCTCHN, <DCBIT==DCBIT*2>\r
1423                 DCON==2000+DCBIT        ;TURN DC PI CHANNEL ON\r
1424                 DCOFF==1000+DCBIT       ;TURN DC PI CHANNEL OFF\r
1425                 DCIN==4010+DCTCHN       ;SET DATA CHANNEL FOR INPUT\r
1426                 DCOUT==3410+DCTCHN      ;SET DATA CHANNEL FOR OUTPUT\r
1427 >\r
1428 \r
1429 ;DEFINE SAVE MODE AND EXTENSION FOR OLD OR NEW FORMAT\r
1430 \r
1431         INTERNAL SAVDMP\r
1432         IFE SAVN, <XP SAVMOD,17\r
1433                 SAVDMP==<SIXBIT /   DMP/>       ;EXTENSION FOR SAVED FILES == "DMP"\r
1434 >\r
1435         IFN SAVN, <\r
1436                 SAVDMP==<SIXBIT /   SAV/>       ;EXTENSION FOR SAVED FILES == "SAV"\r
1437 >\r
1438 \f;DISPLAY AND LITE PEN\r
1439 \r
1440         IFG DISN,<\r
1441         IFG T340N,<EXTERN DIS340>       ;TYPE 340 ENTRY POINT\r
1442         IFE T340N,<EXTERN DIST30>       ;TYPE 30 ENTRY POINT\r
1443         INTERN DISBLK,DISJSR,OFFDIS,DISPON,DISPOF\r
1444                 DISBLK==40+2*DISCHN     ;BLKI/BLKO LOCATION\r
1445                 DISJSR==DISBLK+1\r
1446                 ONDIS==100+10*PENCHN+DISCHN\r
1447                 NONDIS==10*PENCHN+DISCHN\r
1448                 OFFDIS==0\r
1449                 DISBIT==1\r
1450                 REPEAT 7-DISCHN, <DISBIT==DISBIT*2>\r
1451                 DISPON==2000+DISBIT     ;CONO PI, TURNS DIS PI CHANNEL ON\r
1452                 DISPOF==1000+DISBIT     ;CONO PI, TURNS DIS PI CHANNEL OFF\r
1453 >\r
1454 \f;LINE PRINTER ENTRY POINT AND DDB DEFINITIONS\r
1455 \r
1456         IFG LPTN, <\r
1457 \r
1458 ;PROTOTYPE DEFINITION FOR LINE PRINTER DEVICE DATA BLOCKS\r
1459 \r
1460 DEFINE  LPTDDB (N) <\r
1461 \r
1462         XLIST                           ;TURN OFF LISTING DURING EXPANSION\r
1463 \r
1464 LP'N'SV1=LP'N'SAC+DEVDAT                ;DEFINE DEVDAT SAVE LOCATION\r
1465 \r
1466 LP'N'INT: CONSO LP'N,0                  ;(-4) SKIP IF INTERRUPT FOR THIS LPT\r
1467           JRST .-1                      ;(-3)  GO TO NEXT SKIP CHAIN ELEMENT\r
1468           MOVEM DEVDAT,LP'N'SV1         ;(-2) SAVE DEVDAT IN CHANNEL SAVE AREA\r
1469           JSP DEVDAT,LPTINT             ;(-1) SET UP DDB ADDRESS AND BRANCH\r
1470 LP'N'DDB:\r
1471 LP'N'NAM: \r
1472         \r
1473         IFE LPTN-1, < SIXBIT /LPT/      ;( 0) PHYSICAL DEVICE NAME>\r
1474         IFN LPTN-1, < SIXBIT /LPT'N/    ;( 0) PHYSICAL DEVICE NAME>\r
1475           XWD ^D60*HUNGST,<N>B23+LPTSIZ    ;( 1) DEVICE CHARACTERISTICS\r
1476           0                             ;( 2) DEVICE I/O STATUS\r
1477           XWD 0,LPTDSP                  ;( 3) LH=DDB LINK, RH=DSP TABLE ADDR.\r
1478 LPTMOD==1_A+1_AL+1_I                    ;LPT LEGAL MODES\r
1479           XWD DVOUT+DVLPT,LPTMOD        ;( 4) DEVICE CHARACTERISTICS\r
1480           0                             ;( 5) LOGICAL DEVICE NAME\r
1481           0                             ;( 6) BUFFER HEADER ADDRESSES\r
1482 LP'N'PTR: 0                             ;( 7) BLOCK OUTPUT POINTER\r
1483           XWD PROG,0                    ;(10) CURRENT OUTPUT BUFFER ADDRESS\r
1484           EXP 11*LP'N'CHN               ;(11) INTERRUPT CHANNEL ASSIGNMENTS\r
1485 \r
1486           MOVE DEVDAT,LP'N'SV1          ;(12) RESTORE DEVDAT, SAVE AC'S\r
1487           JSR LP'N'SAV                  ;(13)  AND ESTABLISH PDP\r
1488           MOVEI DEVDAT,LP'N'NAM         ;(14) SET UP DDB ADDRESS AND RETURN\r
1489           JRST LPTNXT                   ;(15)  TO COMMON INTERRUPT HANDLER\r
1490 \r
1491           MOVE DEVDAT,LP'N'SV1          ;(16) RESTORE DEVDAT AND\r
1492           JEN @LP'N'CHL                 ;(17)  DISMISS INTERRUPT\r
1493           0                             ;(20) SAVE LOCATION FOR DAT\r
1494           CONSZ LP'N,LPTECM             ;(21) THE REST OF THE DDB CONTAINS\r
1495           CONSO LP'N,LPTDON             ;(22)  THE ACTUAL I/O INSTRUCTIONS\r
1496           CONSO LP'N,(DAT)              ;(23)  USED BY THE COMMON SERVICE\r
1497           CONSZ LP'N,(DAT)              ;(24)  ROUTINE TO CONTROL A LINE\r
1498           CONI  LP'N,DAT                ;(25)  PRINTER. THEY ARE EXECUTED\r
1499           CONO  LP'N,(DAT)              ;(26)  BY MEANS OF AN XCT INSTRUCTION\r
1500           DATAO LP'N,(DAT)              ;(27)  INDEXED TO THE PROPER DDB\r
1501           BLKO  LP'N,LP'N'PTR           ;(30)\r
1502 \r
1503         LIST                            ;TURN LISTING BACK ON AFTER EXPANSION\r
1504 \f\r
1505 >\r
1506         EXTERN LPTSER, LPTNXT, LPTECM, LPTDON, LPTINT, LPTDSP\r
1507 \r
1508         LPT2=234                ;DEVICE SELECT CODE FOR SECOND LPT\r
1509 \r
1510         IFNDEF LP0, <LP0=LPT>   ;DEFINE STANDARD MNEMONIC DEFINITIONS\r
1511         IFNDEF LP1, <LP1=LPT2>  ; BUT ALLOW FOR OVERRIDE\r
1512 \r
1513         $LPNUM=0                ;TEMPORARY SYMBOL USED TO FACILITATE\r
1514                                 ; MACRO GENERATION\r
1515 \r
1516 \r
1517         REPEAT LPTN, <\r
1518 \r
1519                 LPTDDB \$LPNUM\r
1520                 $LPNUM=$LPNUM+1\r
1521         >\r
1522 \r
1523 >\r
1524 \r
1525 \f;CARD READER ENTRY POINT AND BITS\r
1526 \r
1527         IFG CDRN, <\r
1528         IFG CR10N, <EXTERN CDRSRX>      ;CR10 ENTRY POINT\r
1529         IFE CR10N, <EXTERN CDRSR6>      ;PDP-6 CARD READER\r
1530         INTERNAL CDRBTS\r
1531                 CDRBTS==1670+CDRCHN\r
1532 >\r
1533 \r
1534 \r
1535 ;CARD PUNCH ENTRY POINT\r
1536 \r
1537         IFG CDPN, <\r
1538                 EXTERN CDPSER           ;ENTRY POINT\r
1539         >\r
1540 \f;PLOTTER ENTRY POINT\r
1541 \r
1542         IFG PLTN,<EXTERN PLTSER>\r
1543 \r
1544 ;PAPER TAPE READER ENTRY POINT AND MASK\r
1545 \r
1546         IFG PTRN, <EXTERN PTRSER        ;SAME ROUTINE FOR PDP-6 AND PDP-10 READER\r
1547         INTERN PTRMSK\r
1548                 IFG PDP10N, <PTRMSK==0>         ;MASK==0 IF PDP-10 READER\r
1549                 IFE PDP10N, <PTRMSK==777777>    ;MASK==777777 FOR PDP-6 READER\r
1550 >\r
1551 \r
1552 \r
1553 ;PAPER TAPE PUNCH ENTRY POINT\r
1554 \r
1555         IFG PTPN,<EXTERN PTPSER>\r
1556 \f;DISK ENTRY POINTS AND BITS\r
1557 \r
1558 \r
1559         IFG DSKN,<\r
1560         INTERN DSKBIT,DCBBIT,DSKON,DSKOFF\r
1561                 DCBBIT==0       ;0 UNLESS DATA PRODUCTS DISK(SEE BELOW)\r
1562                 DSKBIT==1       ;LOW PRIORITY DISK PI CHANNEL\r
1563                 REPEAT 7-DSKCHN,<DSKBIT==DSKBIT*2>\r
1564                 DSKON==2000+DSKBIT      ;CONO PI, TURN DISK CHANNEL ON\r
1565                 DSKOFF=1000+DSKBIT      ;CONO PI, TURN DISKCHANNEL OFF\r
1566         IFG RD10N,<     ;BURROUGHS DISK\r
1567                 EXTERN RCXINT,DSKSRB,RCXWNZ     ;LOAD EARLIER VERSION\r
1568                                         ; DSKINT,DSKSRB,ONCEB\r
1569                 IFG SYS50N,<EXTERN RCXSKD>      ;LOAD EARLIER VERSION OF SCHEDB\r
1570         >\r
1571         IFG DPDN,<      ;IF DATA PRODUCTS DISK\r
1572                 EXTERNAL LODINT         ;LOAD DPDINT\r
1573                 EXTERNAL DSKSRD         ;LOAD ONCE=DSKSR FOR DATA PROD DISK\r
1574 \r
1575                 INTERN DCBBIT,DSKX8,DSKX9\r
1576                         DCBBIT==1\r
1577                         REPEAT 7-DCBCHN,<DCBBIT==DCBBIT*2>\r
1578                         DSKX8==40+2*DCBCHN      ;DATA-CONTROL BLKI/BLKO OCS\r
1579                         DSKX9==DSKX8+1\r
1580         >\r
1581         IFG RA10N,<     ;IF BRYANT DISK\r
1582                 EXTERN MDFINT,DSKSER,MDFWNZ\r
1583         IFG SYS50N,<EXTERN RCXSKD>\r
1584         >\r
1585 >\r
1586 \r
1587 ;PSEUDO TTY ENTRY POINT\r
1588 \r
1589         IFE PTYN, <INTERN PTYPE,PTMNMZ,PTYOW,PTMNMD\r
1590 PTYPE:PTMNMZ:PTYOW:PTMNMD:      HALT CPOPJ      ;HALT IF SCNSER CALL PTY ROUTINES\r
1591                                                 ; BECAUSE NONE LOADED\r
1592 >\r
1593         IFG PTYN, <\r
1594         IFE FULLN,<EXTERN PTYSRH>       ;HALF DUPLEX SCANNER SOFTWARE\r
1595         IFG FULLN,<EXTERN PTYSRF>       ;FULL DUPLEX SCANNER SOFTWARE\r
1596 >\r
1597         LIT\r
1598         RELOC .-COMORG          ;NOW MAKE RELOCATABLE SO NEXT PROGRAM WILL BE LOADED\r
1599                                 ; IMMEDIATELY AFTER THIS ONE\r
1600 \r
1601 COMEND: END\r
1602 \r