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