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