Trailing-Edge
-
PDP-10 Archives
-
BB-H348C-RM_1982
-
swskit-v21/listings/tkb-vnp/pcor2.bpt
There are no other files named pcor2.bpt in the archive.
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
1 !<SAUTER.TKB20>PCOR2.BLI.67, 12-Mar-79 07:47:20, Edit by SROBINSON
2 !<SAUTER.TKB20>PCOR2.BLI.61, 5-Feb-79 09:59:32, Edit by SROBINSON
3 !<SAUTER.TKB20>PCOR2.BLI.60, 30-Jan-79 13:12:50, Edit by SROBINSON
4 !<SAUTER.TKB20>PCOR2.BLI.49, 17-Jan-79 17:35:15, Edit by SROBINSON
5 !<SAUTER.TKB20>PCOR2.BLI.44, 17-Jan-79 15:35:07, Edit by SROBINSON
6 !<SAUTER.TKB20>PCOR2.BLI.32, 17-Jan-79 11:22:10, Edit by SROBINSON
7 !<SAUTER.TKB20>PCOR2.BLI.29, 3-Jan-79 06:35:25, Edit by SROBINSON
8 !<SAUTER.TKB20>PCOR2.BLI.27, 2-Jan-79 09:47:47, Edit by SROBINSON
9 !<SAUTER.TKB20>PCOR2.BLI.26, 2-Jan-79 06:44:31, Edit by SROBINSON
10 !<SAUTER.TKB20>PCOR2.BLI.20, 16-Dec-78 13:03:23, Edit by SROBINSON
11 !<SAUTER.TKB20>PCOR2.BLI.19, 16-Dec-78 09:32:59, Edit by SROBINSON
12 !<SAUTER.TKB20>PCOR2.BLI.17, 28-Nov-78 07:58:13, Edit by SROBINSON
13 !<SAUTER.TKB20>PCOR2.BLI.14, 24-Nov-78 11:15:00, Edit by SROBINSON
14 !<SAUTER.TKB20>PCOR2.BLI.9, 15-Nov-78 09:51:17, Edit by SROBINSON
15 !<SAUTER.TKB20>PCOR2.BLI.3, 9-Oct-78 11:09:16, Edit by SROBINSON
16 !<SAUTER.VNP20>PCOR2.BLI.2, 23-Sep-78 08:48:18, Edit by SROBINSON
17 !<SROBINSON>PCOR2.BLI.2, 23-Sep-78 08:38:02, Edit by SROBINSON
18 MODULE PCOR2 ( !PROCESS CORE IMAGE
19 IDENT = 'X0.2-4'
20 ) =
21 BEGIN
22 !
23 !
24 !
25 ! COPYRIGHT (C) 1978, 1979 BY
26 ! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
27 !
28 !
29 ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
30 ! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
31 ! INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
32 ! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
33 ! OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
34 ! TRANSFERRED.
35 !
36 !
37 ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
38 ! AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
39 ! CORPORATION.
40 !
41 ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
42 ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
43 !
44
45 !++
46 ! FACILITY: VNP-20
47 !
48 ! ABSTRACT:
49 !
50 !
51 ! THIS MODULE PROCESSES CORE IMAGES (KERNEL AND TASK) FOR VNP20
52 !
53 !
54 ! ENVIRONMENT: TOPS-20 USER MODE
55 !
56 ! AUTHOR: J. SAUTER, CREATION DATE: 30-MAY-78
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
57 !
58 ! MODIFIED BY:
59 !
60 ! Scott G. Robinson, 16-SEP-78 : VERSION X0.1-2A
61 ! - Finish Development of D_DCP
62 ! - Finish Development of D_DUP
63 ! - Develop support for NSP, DLX, AUX LLCs
64 ! - Correct minor bugs in various routines
65 !
66 ! Scott G. Robinson, 23-SEP-78 : VERSION X0.1-3A
67 ! - Split PCOR into 3 modules (PCOR0, PCOR1, PCOR2)
68 ! - Add support for password data base manipulation
69 !
70 ! Scott G. Robinson, 15-NOV-78 : VERSION X0.2
71 ! - Fix ENA_LINES to use the LLC reverse mapping table
72 ! so that multipoint lines work correctly
73 ! - Change method of getting storage from POOL.. partition
74 !
75 ! Scott G. Robinson, 28-NOV-78 : VERSION X0.2-1, X0.2-2, X0.2-3, X0.2-4
76 ! - Add new routine to process .BIN directives (GET_BIN)
77 ! - Add routine FIX_LLC to hack around a MACY11 problem with
78 ! complex relocatable expressions
79 ! - Fix ENA_LINES to current thoughts on enabling NSP and
80 ! NRM lines
81 ! - Fix ENA_LINES to handle CR and LP NRM entries
82 ! - Fix bug in TELLP which didn't tell device driver name correctly
83 !
84 ! , : VERSION
85 ! 01 -
86 !--
87
88 !<BLF/PAGE>
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
89 !
90 ! TABLE OF CONTENTS:
91 !
92
93 FORWARD ROUTINE
94 RDLIBR, !READ A LIBRARY FILE
95 SEL_LIBR, !SELECT A LIBRARY BLOCK
96 GET_LIBR, !PROCESS A LIBR DIRECTIVE
97 GET_BIN, !PROCESS A BIN DIRECTIVE
98 SET_PASWRDS : NOVALUE, !SETUP THE PASSWORD DATA BASE
99 ENA_LINES : NOVALUE, !ENABLE LINES AND BUILD PLD
100 FIX_LLC : NOVALUE, !FIX REVERSE MAPPING TABLE
101 MOUACP : NOVALUE, !"MOUNT" THE ACP
102 FCLEAN : NOVALUE, !DO FINAL CLEANUP OF THE KERNEL
103 TELLK : NOVALUE, !TELL ABOUT THE CORE IMAGE
104 TELLP : NOVALUE; !TELL ABOUT A PARTITION
105
106 !
107 ! INCLUDE FILES:
108 !
109
110 LIBRARY 'VNP-LIB.L36';
111
112 !REQUIRE 'BLOCKH.REQ'; !PREPARE TO DEFINE STORAGE BLOCKS
113 !REQUIRE 'FILE.REQ'; !DEFINE FILE BLOCK
114 !REQUIRE 'VNPVAL.REQ'; !VALUE BLOCK FOR VNP20
115 !REQUIRE 'LIBR.REQ'; !DEFINE LIBRARY BLOCK
116 !REQUIRE 'BLOCKT.REQ'; !END OF DEFINING STORAGE BLOCKS
117 !REQUIRE 'TSKDEF.REQ'; !DEFINE TASK OFFSETS
118 !
119 ! MACROS:
120 !
121 ! NONE
122 !
123 ! EQUATED SYMBOLS:
124 !
125
126 LITERAL
127 DEBUG = 0;
128
129 !
130 ! OWN STORAGE:
131 !
132 ! NONE
133 !
134 ! EXTERNAL REFERENCES:
135 !
136
137 EXTERNAL ROUTINE
138 ATOR50 : NOVALUE, !CONVERT ASCII TO RADIX50_11
139 R50TOA : NOVALUE, !CONVERT RADIX50_11 TO ASCII
140 OUTPUT : NOVALUE, !WRITE ON A FILE
141 RSTB : NOVALUE, !READ SYMBOL TABLE
142 RCOR : NOVALUE, !READ CORE IMAGE
143 FCOR : NOVALUE, !FREE CORE IMAGE
144 FRESTG : NOVALUE, !FREE SOME MEMORY
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
145 PCRLF : NOVALUE, !PRINT CR THEN LF
146 OUTSTR : NOVALUE, !PRINT A STRING
147 OUTNUM : NOVALUE, !PRINT A NUMBER
148 ERROR : NOVALUE, !SIGNAL PROGRAMMING ERROR
149 ERRMSG : NOVALUE, !ERROR MESSAGE
150 GETBLK, !GET A BLOCK OF STORAGE
151 BLD_CHAIN, !ADD AN ITEM TO A CHAIN
152 FND_CHAIN, !"FIND" AN ITEM IN A CHAIN
153 GETBYT, !GET A PDP-11 BYTE
154 GETWRD, !GET A PDP-11 WORD
155 PUTBYT : NOVALUE, !PUT A PDP-11 BYTE
156 PUTWRD : NOVALUE, !PUT A PDP-11 WORD
157 ALOCB, !ALLOCATE SOME PDP-11 STORAGE
158 ALOC_POOL; !ALLOCATE STORAGE FROM POOL..
159
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
160 ROUTINE RDLIBR (KERNEL_FILE, FILE_CHAN, LIB_NAME, VALUES) = !READ A LIBRARY FILE
161
162 !++
163 ! FUNCTIONAL DESCRIPTION:
164 !
165 ! READ IN A LIBRARY FILE, PUTTING IT IN THE POOL SPACE.
166 ! THIS IS USED FOR SATISFYING REQUESTS IN .DAT FILES.
167 !
168 ! FORMAL PARAMETERS:
169 !
170 ! KERNEL_FILE - POINTER TO THE FILE WHICH HOLDS THE KERNEL
171 ! FILE_CHAN - CHANNEL ON WHICH TO READ THE LIBRARY
172 ! LIB_NAME - NAME OF THE LIBRARY, IN ASCII, 7 CHARACTERS
173 ! VALUES - BLOCK OF LOTS OF GOOD THINGS FOR VNP20
174 !
175 ! IMPLICIT INPUTS:
176 !
177 ! NONE
178 !
179 ! IMPLICIT OUTPUTS:
180 !
181 ! CHAINS A LIBRARY POINTER ONTO THE LIST OF LIBARIES
182 !
183 ! ROUTINE VALUE:
184 !
185 ! THE LIBRARY BLOCK CREATED, OR 0 IF ERROR.
186 !
187 ! SIDE EFFECTS
188 !
189 ! ALLOCATES SPACE FROM THE NETWORK POOL
190 !
191 !--
192
193 BEGIN
194
195 BIND
196 ROUTINE_NAME = UPLIT (%ASCIZ'RDLIBR');
197
198 MAP
199 KERNEL_FILE : REF FILE_BLOCK,
200 VALUES : REF VNPVAL_BLOCK;
201
202 LOCAL
203 LIBR_PTR : REF LIBR_BLOCK,
204 FILE_PTR : REF FILE_BLOCK,
205 LABEL_PTR : REF VECTOR [1024],
206 LIBRARY_LENGTH,
207 LIBRARY_BASE;
208
209 !
210 ! BUILD A FILE POINTER
211 !
212 FILE_PTR = GETBLK (FILE_TYP, FILE_LEN);
213 CH$COPY (LEN_LIBR_NAME, CH$PTR (.LIB_NAME), 0, LEN_FILE_STRING, CH$PTR (FILE_PTR [FILE_NAME]));
214 !
215 ! READ IN THE LIBRARY'S CORE IMAGE AND SYMBOL TABLE
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
216 !
217 RSTB (.FILE_CHAN, .FILE_PTR);
218 RCOR (.FILE_PTR, .FILE_CHAN, 4*2048);
219 !
220 ! COMPUTE THE LENGTH OF THE LIBRARY
221 !
222 LABEL_PTR = .FILE_PTR [FILE_LABEL];
223 LIBRARY_BASE = .LABEL_PTR [L$BSA] + (.LABEL_PTR [L$BSA + 1]*256);
224 LIBRARY_LENGTH = (.LABEL_PTR [L$BHGV] + (.LABEL_PTR [L$BHGV + 1]*256)) - .LIBRARY_BASE + 1;
225 !
226 ! BUILD A LIBRARY BLOCK
227 !
228 LIBR_PTR = GETBLK (LIBR_TYP, LIBR_LEN);
229 LIBR_PTR [LIBR_FILE] = 0; !WE DON'T NEED THE FILE AFTER COPYING
230 CH$MOVE (LEN_LIBR_NAME, CH$PTR (.LIB_NAME), CH$PTR (LIBR_PTR [LIBR_NAME]));
231 LIBR_PTR [LIBR_BASE] = .LIBRARY_BASE;
232 !
233 ! ALLOCATE POOL SPACE TO HOLD THE LIBRARY
234 !
235 LIBR_PTR [LIBR_ADDR] = ALOC_POOL (.LIB_NAME, .LIBRARY_LENGTH, 1, .VALUES);
236 !
237 ! COPY THE LIBRARY INTO THE ALLOCATED POOL SPACE
238 !
239
240 INCR COUNTER FROM 0 TO .LIBRARY_LENGTH - 1 DO
241 PUTBYT (.KERNEL_FILE, .LIBR_PTR [LIBR_ADDR] + .COUNTER, GETBYT (.FILE_PTR, .LIBRARY_BASE + .COUNTER));
242
243 !
244 ! FREE THE FILE ETC.
245 !
246 FCOR (.FILE_PTR);
247 .LIBR_PTR
248 END; !OF RDLIBR
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
249 ROUTINE SEL_LIBR (LIBR_PTR, ASCVAL) = !SELECT A LIBRARY BLOCK
250
251 !++
252 ! FUNCTIONAL DESCRIPTION:
253 !
254 ! SELECT THE LIBRARY BLOCK WHOSE NAME IS PROVIDED
255 !
256 ! FORMAL PARAMETERS:
257 !
258 ! LIBR_PTR - POINTER TO THE LIBRARY BLOCK TO BE TESTED
259 ! ASCVAL - NAME TO BE TESTED FOR
260 !
261 ! IMPLICIT INPUTS:
262 !
263 ! NONE
264 !
265 ! IMPLICIT OUTPUTS:
266 !
267 ! NONE
268 !
269 ! ROUTINE VALUE:
270 !
271 ! 0 = NOT SUITABLE, OTHERWISE A POINTER TO THE LIBR BLOCK
272 !
273 ! SIDE EFFECTS
274 !
275 ! NONE
276 !
277 !--
278
279 BEGIN
280
281 BIND
282 ROUTINE_NAME = UPLIT (%ASCIZ'SEL_LIBR');
283
284 MAP
285 LIBR_PTR : REF LIBR_BLOCK,
286 ASCVAL : REF VECTOR [CH$ALLOCATION (LEN_LIBR_NAME)];
287
288 IF (CH$EQL (LEN_LIBR_NAME, CH$PTR (LIBR_PTR [LIBR_NAME]), LEN_LIBR_NAME, CH$PTR (.ASCVAL)))
289 THEN
290 .LIBR_PTR
291 ELSE
292 0
293
294 END; !OF SEL_LIBR
295
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
296 GLOBAL ROUTINE GET_LIBR (KERNEL_FILE, FILE_CHAN, LIB_NAME, VALUES) = !GET A NAMED LIBRARY BLOCK
297
298 !++
299 ! FUNCTIONAL DESCRIPTION:
300 !
301 ! GET THE LIBRARY BLOCK WHOSE NAME IS PROVIDED, OR CREATE
302 ! IT IF NECESSARY.
303 !
304 ! FORMAL PARAMETERS:
305 !
306 ! KERNEL_FILE - POINTER TO THE FILE WHICH HOLDS THE KERNEL
307 ! FILE_CHAN - CHANNEL ON WHICH TO READ THE LIBRARY, IF NEEDED.
308 ! LIB_NAME - NAME OF THE LIBRARY, IN ASCII, 7 CHARACTERS
309 ! VALUES - BLOCK OF LOTS OF GOOD THINGS FOR VNP20
310 !
311 ! IMPLICIT INPUTS:
312 !
313 ! NONE
314 !
315 ! IMPLICIT OUTPUTS:
316 !
317 ! NONE
318 !
319 ! ROUTINE VALUE:
320 !
321 ! POINTER TO THE LIBRARY BLOCK
322 !
323 ! SIDE EFFECTS
324 !
325 ! MAY READ FROM THE LIBRARY FILE
326 !
327 !--
328
329 BEGIN
330
331 BIND
332 ROUTINE_NAME = UPLIT (%ASCIZ'GET_LIBR');
333
334 MAP
335 KERNEL_FILE : REF FILE_BLOCK,
336 VALUES : REF VNPVAL_BLOCK;
337
338 LOCAL
339 LIBR_PTR : REF LIBR_BLOCK;
340
341 IF ((LIBR_PTR = FND_CHAIN (.VALUES [LIBR_CHAIN], SEL_LIBR, .LIB_NAME)) EQL 0)
342 THEN
343 BEGIN
344 LIBR_PTR = RDLIBR (.KERNEL_FILE, .FILE_CHAN, .LIB_NAME, .VALUES);
345
346 IF ((VALUES [LIBR_CHAIN] = BLD_CHAIN (.VALUES, .VALUES [LIBR_CHAIN], .LIBR_PTR)) EQL 0)
347 THEN
348 ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0);
349
350 END;
351
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
352 .LIBR_PTR
353 END; !OF GET_LIBR
354
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
355 GLOBAL ROUTINE GET_BIN (KERNEL_FILE, FILE_CHAN, BIN_NAME, VALUES) = !PROCESS A BIN DIRECTIVE
356
357 !++
358 ! FUNCTIONAL DESCRIPTION:
359 !
360 ! GET A FILE DESCRIBED BY BIN_NAME AND INSERT IT INTO POOL..
361 !
362 ! FORMAL PARAMETERS:
363 !
364 ! KERNEL_FILE - POINTER TO THE FILE WHICH HOLDS THE KERNEL
365 ! FILE_CHAN - CHANNEL ON WHICH TO READ THE LIBRARY, IF NEEDED.
366 ! BIN_NAME - NAME OF THE BIN FILE, IN ASCII, 7 CHARACTERS
367 ! VALUES - BLOCK OF LOTS OF GOOD THINGS FOR VNP20
368 !
369 ! IMPLICIT INPUTS:
370 !
371 ! NONE
372 !
373 ! IMPLICIT OUTPUTS:
374 !
375 ! NONE
376 !
377 ! ROUTINE VALUE:
378 !
379 ! POINTER TO THE LIBRARY BLOCK
380 !
381 ! SIDE EFFECTS
382 !
383 ! NONE
384 !
385 !--
386
387 BEGIN
388
389 BIND
390 ROUTINE_NAME = UPLIT (%ASCIZ'GET_BIN');
391
392 MAP
393 KERNEL_FILE : REF FILE_BLOCK,
394 VALUES : REF VNPVAL_BLOCK;
395
396 RDLIBR (.KERNEL_FILE, .FILE_CHAN, .BIN_NAME, .VALUES)
397 END; !OF GET_BIN
398
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
399 GLOBAL ROUTINE SET_PASWRDS (KERNEL_FILE, PD_NSP, VALUES) : NOVALUE = !SET PASSWORDS INTO THE NSP DATA BASE
400
401 !++
402 ! FUNCTIONAL DESCRIPTION:
403 !
404 ! INSTALL THE PASSWORDS INTO THE PASSWORD DATA BASE IF ANY EXIST
405 !
406 ! FORMAL PARAMETERS:
407 !
408 ! KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
409 ! THE RSX11S KERNEL
410 ! PD_NSP - THE $PDVTB OFFSET FOR NSP
411 ! VALUES - THE VALUES BLOCK, WHICH CONTAINS A LOT OF THINGS
412 ! FOR VNP20
413 !
414 ! IMPLICIT INPUTS:
415 !
416 ! NONE
417 !
418 ! IMPLICIT OUTPUTS:
419 !
420 ! NONE
421 !
422 ! ROUTINE VALUE:
423 !
424 ! NONE
425 !
426 ! SIDE EFFECTS
427 !
428 ! MODIFIES THE KERNEL'S DATA BASE
429 !
430 !--
431
432 BEGIN
433
434 BIND
435 ROUTINE_NAME = UPLIT (%ASCIZ'SET_PASWRDS');
436
437 MAP
438 KERNEL_FILE : REF FILE_BLOCK,
439 VALUES : REF VNPVAL_BLOCK;
440
441 LOCAL
442 LOC,
443 PSW_POINTER,
444 NSP_PDV,
445 STR_PTR,
446 CHAR;
447
448 !
449 ! GET WHERE PASSWORD DATA BASE IS
450 !
451 NSP_PDV = GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [PDVTA]) + .PD_NSP);
452 PSW_POINTER = GETWRD (.KERNEL_FILE,
453 GETWRD (.KERNEL_FILE, .NSP_PDV + .VALUES [Z_DAT]) + .VALUES [PSW_OFFSET]);
454 !
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
455 ! INSTALL THE RECEIVE PASSWORD
456 !
457
458 IF ((CHAR = CH$RCHAR (CH$PTR (VALUES [RCV_PASWRD], 0))) NEQ 0)
459 THEN
460 BEGIN
461 STR_PTR = 0;
462
463 DO
464 BEGIN
465 PUTBYT (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_RCV_OFFSET] + .STR_PTR, .CHAR);
466 STR_PTR = .STR_PTR + 1;
467 CHAR = CH$RCHAR (CH$PTR (VALUES [RCV_PASWRD], .STR_PTR));
468 END
469 UNTIL ((.CHAR EQL 0) OR (.STR_PTR EQL 8));
470
471 PUTWRD (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_FLG_OFFSET],
472 GETWRD (.KERNEL_FILE,
473 .PSW_POINTER + .VALUES [PSW_FLG_OFFSET]) OR .VALUES [PSW_RCV_FLAG]);
474 END;
475
476 !
477 ! INSTALL THE TRANSMIT PASSWORD IF ANY
478 !
479
480 IF ((CHAR = CH$RCHAR (CH$PTR (VALUES [XMT_PASWRD], 0))) NEQ 0)
481 THEN
482 BEGIN
483 STR_PTR = 0;
484
485 DO
486 BEGIN
487 PUTBYT (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_XMT_OFFSET] + .STR_PTR, .CHAR);
488 STR_PTR = .STR_PTR + 1;
489 CHAR = CH$RCHAR (CH$PTR (VALUES [XMT_PASWRD], .STR_PTR));
490 END
491 UNTIL ((.CHAR EQL 0) OR (.STR_PTR EQL 8));
492
493 PUTWRD (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_FLG_OFFSET],
494 GETWRD (.KERNEL_FILE,
495 .PSW_POINTER + .VALUES [PSW_FLG_OFFSET]) OR .VALUES [PSW_XMT_FLAG]);
496 END;
497
498 !
499 END; !OF SET_PASWRDS
500
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
501 GLOBAL ROUTINE ENA_LINES (KERNEL_FILE, PD_NSP, PD_NRM, VALUES) : NOVALUE =
502 !ENABLE ALL LOADED LINES AND SETUP PHYSICAL LINK DATA BASE
503
504 !++
505 ! FUNCTIONAL DESCRIPTION:
506 !
507 ! LOOK THROUGH THE SLT AND SETUP THE PLD REFLECTING ENABLED LINES
508 !
509 ! FORMAL PARAMETERS:
510 !
511 ! KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
512 ! THE RSX11S KERNEL
513 ! PD_NSP - THE PDVTB OFFSET FOR NSP
514 ! PD_NRM - THE PDVTB OFFSET FOR NRM
515 ! VALUES - THE VALUES BLOCK, WHICH CONTAINS A LOT OF THINGS
516 ! FOR VNP20
517 !
518 ! IMPLICIT INPUTS:
519 !
520 ! NONE
521 !
522 ! IMPLICIT OUTPUTS:
523 !
524 ! NONE
525 !
526 ! ROUTINE VALUE:
527 !
528 ! NONE
529 !
530 ! SIDE EFFECTS
531 !
532 ! MODIFIES THE KERNEL'S DATA BASE
533 !
534 !--
535
536 BEGIN
537
538 BIND
539 ROUTINE_NAME = UPLIT (%ASCIZ'ENA_LINES');
540
541 MAP
542 KERNEL_FILE : REF FILE_BLOCK,
543 VALUES : REF VNPVAL_BLOCK;
544
545 LOCAL
546 LOC,
547 PDV_ADDR,
548 SLT_POINTER,
549 SLT_ADDR,
550 SLT_COUNT,
551 PLD_POINTER,
552 PLD_ADDR,
553 LLC_TABLE,
554 LLC_ADDR,
555 LLC_ENTRY,
556 NSP_PDV,
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
557 NRM_PDV,
558 MPT_NUMBER,
559 TCB_ADDR,
560 TCB_LAST,
561 TCB_TABLE,
562 NRM_DAT;
563
564 ROUTINE ENA_NSP (KERNEL_FILE, PLD_POINTER, LLC_ENTRY, VALUES) : NOVALUE =
565
566 !++
567 ! FUNCTIONAL SPECIFICATION:
568 ! ENA_NSP is an embedded subroutine that processes enabling NSP lines
569 ! in the NSP Physical Link Database.
570 !--
571
572 BEGIN
573
574 MAP
575 KERNEL_FILE : REF FILE_BLOCK,
576 VALUES : REF VNPVAL_BLOCK;
577
578 LOCAL
579 PLD_ADDR;
580
581 PLD_ADDR = .PLD_POINTER + (.VALUES [PLD_LEN]*.LLC_ENTRY<0, 8>);
582 PUTWRD (.KERNEL_FILE, .PLD_ADDR + .VALUES [PLD_LST], .VALUES [PLD_UP]*%O'400' + .VALUES [PLD_WT]);
583 PUTBYT (.KERNEL_FILE, .PLD_ADDR + .VALUES [PLD_TIM], 1);
584 PUTBYT (.KERNEL_FILE, .PLD_ADDR + .VALUES [PLD_CHN], .LLC_ENTRY<0, 8>);
585 !
586 END; !OF ENA_NSP
587 ROUTINE ENA_NRM (KERNEL_FILE, NRM_DAT, TCB_TABLE, LLC_ENTRY, VALUES) : NOVALUE =
588
589 !++
590 ! FUNCTIONAL DESCRIPTION
591 ! ENA_NRM is an embedded subroutine which enables NRM lines in
592 ! the NRM database.
593 !--
594
595 BEGIN
596
597 MAP
598 KERNEL_FILE : REF FILE_BLOCK,
599 VALUES : REF VNPVAL_BLOCK;
600
601 LOCAL
602 TCB_ADDR,
603 TCB_LAST;
604
605 TCB_ADDR = (.TCB_TABLE + (.VALUES [TCB_LEN]*(.LLC_ENTRY<0, 8> - 1)));
606 TCB_LAST = GETWRD (.KERNEL_FILE, .NRM_DAT + .VALUES [TCB_Q]);
607 PUTWRD (.KERNEL_FILE, .NRM_DAT + .VALUES [TCB_Q], .TCB_ADDR);
608 PUTWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [TCB_LINK], .TCB_LAST);
609 PUTWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [TCB_OLINK], 0);
610 PUTWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [TCB_FLAGS],
611 (GETWRD (.KERNEL_FILE,
612 .TCB_ADDR + .VALUES [TCB_FLAGS]) AND NOT (.VALUES [TF_DEA])));
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
613 !
614 END; !OF ENA_NRM
615 !
616 ! GET INFORMATION ABOUT THE SLT SO THAT WE CAN LOOP THROUGH IT
617 !
618 SLT_POINTER = GETWRD (.KERNEL_FILE, .VALUES [SLTTA]);
619 SLT_COUNT = GETWRD (.KERNEL_FILE, .VALUES [SLTNM]);
620 !
621 ! GET REVERSE MAPPING TABLE
622 !
623 LLC_TABLE = GETWRD (.KERNEL_FILE, .VALUES [LLCTA]);
624 !
625 ! GET POINTERS TO NSP RELATED AREAS
626 !
627
628 IF (.PD_NSP NEQ 0)
629 THEN
630 BEGIN
631 !
632 ! GET INFORMATION ON WHERE THE PLD IS LOCATED
633 !
634 NSP_PDV = GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [PDVTA]) + .PD_NSP);
635 PLD_POINTER = GETWRD (.KERNEL_FILE,
636 GETWRD (.KERNEL_FILE, .NSP_PDV + .VALUES [Z_DAT]) + .VALUES [PLD_OFFSET]);
637 !
638 END;
639
640 !
641 ! GET NRM RELATED POINTERS
642 !
643
644 IF (.PD_NRM NEQ 0)
645 THEN
646 BEGIN
647 !
648 ! FORM ADDRESS OF THE NRM DATA BASE AND THE TCB LIST
649 !
650 NRM_PDV = GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [PDVTA]) + .PD_NRM);
651 NRM_DAT = GETWRD (.KERNEL_FILE, .NRM_PDV + .VALUES [Z_DAT]);
652 TCB_TABLE = .NRM_DAT + .VALUES [TCB_START];
653 !
654 END;
655
656 !
657 ! LOOK THROUGH THE SLT FILLING IN THE PHYSICAL LINE DATA BASE
658 !
659
660 INCR SLT_NUMBER FROM 0 TO .SLT_COUNT - 1 DO
661 BEGIN
662 SLT_ADDR = .SLT_POINTER + (.VALUES [L_LEN]*.SLT_NUMBER);
663 LLC_ADDR = .LLC_TABLE + (.SLT_NUMBER*2);
664
665 IF ((GETWRD (.KERNEL_FILE, .SLT_ADDR + .VALUES [L_FLG]) AND .VALUES [LF_RDY]) NEQ 0)
666 THEN
667 BEGIN
668
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
669 IF (((LLC_ENTRY = GETWRD (.KERNEL_FILE, .LLC_ADDR)) AND %O'100000') EQL 0)
670 THEN
671 BEGIN
672 !
673 ! HERE TO PROCESS POINT-TO-POINT LINKS
674 !
675
676 IF ((.PD_NSP NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NSP))
677 THEN
678 BEGIN
679 !
680 ! WE HAVE ENSURED PROCESS IS NSP (PD$NSP), ENABLE THE NSP LINE
681 !
682 ENA_NSP (.KERNEL_FILE, .PLD_POINTER, .LLC_ENTRY, .VALUES);
683 END
684 ELSE
685
686 IF ((.PD_NRM NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NRM))
687 THEN
688 BEGIN
689 !
690 ! WE HAVE ENSURED PROCESS IS NRM (PD$NRM), ENABLE THE NRM LINE
691 !
692 ENA_NRM (.KERNEL_FILE, .NRM_DAT, .TCB_TABLE, .LLC_ENTRY, .VALUES);
693 END
694 ELSE
695 ERRMSG (0, 38, ROUTINE_NAME, UPLIT (%ASCIZ'NSP or NRM'), 0, 0, 0)
696
697 END
698 ELSE
699 BEGIN
700 !
701 ! HERE TO PROCESS MULTIPOINT LINES
702 !
703
704 IF ((LLC_ADDR = .LLC_ENTRY<0, 15>^1) NEQ 0)
705 THEN
706 BEGIN
707 MPT_NUMBER = 0;
708
709 WHILE ((LLC_ENTRY = GETWRD (.KERNEL_FILE, .LLC_ADDR + .MPT_NUMBER)) NEQ %O'177777') DO
710 BEGIN
711
712 IF ((.PD_NRM NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NRM))
713 THEN
714 !
715 ! WE HAVE ENSURED THAT WE HAVE AN NRM PROCESS, ENABLE THE LINE
716 !
717 ENA_NRM (.KERNEL_FILE, .NRM_DAT, .TCB_TABLE, .LLC_ENTRY, .VALUES)
718 ELSE
719
720 IF ((.PD_NSP NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NSP))
721 THEN
722 !
723 ! WE HAVE ENSURED THAT WE HAVE AN NSP PROCESS, ENABLE THE LINE
724 !
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
725 ENA_NSP (.KERNEL_FILE, .PLD_POINTER, .LLC_ENTRY, .VALUES)
726 ELSE
727 ERRMSG (0, 38, ROUTINE_NAME, UPLIT (%ASCIZ'NRM'));
728
729 MPT_NUMBER = .MPT_NUMBER + 2;
730 END;
731
732 END;
733
734 END;
735
736 END;
737
738 END;
739
740 !
741 END; !OF ENA_LINES
742
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
743 GLOBAL ROUTINE FIX_LLC (KERNEL_FILE, VALUES) : NOVALUE = !FIX LLC REVERSE MAPPING TABLE
744
745 !++
746 ! FUNCTIONAL DESCRIPTION:
747 !
748 ! LOOK THROUGH THE LLC REVERVE MAPPING TABLE AND FIXUP MULTIPOINT
749 ! LINES.
750 !
751 ! FORMAL PARAMETERS:
752 !
753 ! KERNEL_FILE - THE SYSTEM IMAGE FILE POINTER
754 ! VALUES - VARIOUS USEFUL THINGS FOR VNP20
755 !
756 ! IMPLICIT INPUTS:
757 !
758 ! NONE
759 !
760 ! IMPLICIT OUTPUTS:
761 !
762 ! NONE
763 !
764 ! ROUTINE VALUE:
765 !
766 ! NONE
767 !
768 ! SIDE EFFECTS
769 !
770 ! MODIFIES THE KERNEL'S DATA BASE
771 !
772 !--
773
774 BEGIN
775
776 BIND
777 ROUTINE_NAME = UPLIT (%ASCIZ'FIX_LLC');
778
779 MAP
780 KERNEL_FILE : REF FILE_BLOCK,
781 VALUES : REF VNPVAL_BLOCK;
782
783 LOCAL
784 SLT_COUNT,
785 LLC_TABLE,
786 LLC_ADDR,
787 LLC_ENTRY;
788
789 !
790 ! GET INFORMATION ABOUT THE SLT
791 !
792 SLT_COUNT = GETWRD (.KERNEL_FILE, .VALUES [SLTNM]);
793 !
794 ! GET REVERSE MAPPING TABLE
795 !
796 LLC_TABLE = GETWRD (.KERNEL_FILE, .VALUES [LLCTA]);
797 !
798 ! LOOK THROUGH THE LLC REVERSE MAPPING TABLE FIXING AS APPROPRIATE
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
799 !
800
801 INCR SLT_NUMBER FROM 0 TO .SLT_COUNT - 1 DO
802 BEGIN
803 LLC_ADDR = .LLC_TABLE + (.SLT_NUMBER*2);
804
805 IF (((LLC_ENTRY = GETWRD (.KERNEL_FILE, .LLC_ADDR)) AND %O'100000') NEQ 0)
806 THEN
807 PUTWRD (.KERNEL_FILE,
808 .LLC_ADDR, .LLC_ENTRY + (.LLC_ADDR/2));
809
810 END;
811
812 END; !OF FIX_LLC
813
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
814 GLOBAL ROUTINE MOUACP (KERNEL_FILE, NTINIT_PCB, VALUES) : NOVALUE = !MOUNT THE ACP
815
816 !++
817 ! FUNCTIONAL DESCRIPTION:
818 !
819 ! "MOUNT" THE NETWORK ACP BY ISSUEING A MESSAGE TO NTINIT AND
820 ! THEN ARRANGING FOR IT TO RUN.
821 !
822 ! FORMAL PARAMETERS:
823 !
824 ! KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
825 ! THE RSX11S KERNEL
826 ! NTINIT_PCB - PDP-11 ADDRESS OF THE NTINIT PCB
827 ! VALUES - THE VALUES BLOCK, WHICH CONTAINS A LOT OF THINGS
828 ! FOR VNP20
829 !
830 ! IMPLICIT INPUTS:
831 !
832 ! NONE
833 !
834 ! IMPLICIT OUTPUTS:
835 !
836 ! NONE
837 !
838 ! ROUTINE VALUE:
839 !
840 ! NONE
841 !
842 ! SIDE EFFECTS
843 !
844 ! MODIFIES THE KERNEL'S DATA BASE
845 !
846 !--
847
848 BEGIN
849
850 BIND
851 ROUTINE_NAME = UPLIT (%ASCIZ'MOUACP');
852
853 MAP
854 KERNEL_FILE : REF FILE_BLOCK,
855 VALUES : REF VNPVAL_BLOCK;
856
857 LOCAL
858 MSG_ADDR,
859 DCB_ADDR,
860 CLK_ADDR,
861 NTINIT_TCB,
862 SEARCH_DONE,
863 R50VAL : VECTOR [4];
864
865 !
866 ! FETCH A POINTER TO THE NTINIT TCB FROM THE PCB
867 !
868 NTINIT_TCB = GETWRD (.KERNEL_FILE, .NTINIT_PCB + .VALUES [P_TCB]);
869 !
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
870 ! SEND AN INITIALIZATION MESSAGE TO NTINIT
871 !
872 MSG_ADDR = ALOCB (.KERNEL_FILE, 36, 0, .VALUES);
873 PUTWRD (.KERNEL_FILE, .MSG_ADDR, 0);
874 !
875 ! MARK THE MESSAGE AS COMING FROM 'VNP20'
876 !
877 ATOR50 (UPLIT (%ASCII'VNP20 '), R50VAL);
878
879 INCR COUNTER FROM 0 TO 3 DO
880 PUTBYT (.KERNEL_FILE, .MSG_ADDR + 2 + .COUNTER, .R50VAL [.COUNTER]);
881
882 PUTWRD (.KERNEL_FILE, .MSG_ADDR + 6 + .VALUES [LR_STS], .VALUES [LS_CEX] OR .VALUES [LS_CXO]);
883 !
884 ! POINT WORD 32 TO DEVICE CO0:
885 !
886 DCB_ADDR = GETWRD (.KERNEL_FILE, .VALUES [DEVHD]);
887 SEARCH_DONE = 0;
888
889 WHILE (.SEARCH_DONE EQL 0) DO
890
891 IF (.DCB_ADDR EQL 0)
892 THEN
893 SEARCH_DONE = -1
894 ELSE
895
896 IF (GETWRD (.KERNEL_FILE, .DCB_ADDR + .VALUES [D_NAM]) EQL (%C'C' + (256*%C'O')))
897 THEN
898 SEARCH_DONE = 1
899 ELSE
900 DCB_ADDR = GETWRD (.KERNEL_FILE, .DCB_ADDR + .VALUES [D_LNK]);
901
902 IF (.SEARCH_DONE LEQ 0)
903 THEN
904 ERROR (UPLIT (%ASCIZ'NO DEVICE CO0: - MOUACP'))
905 ELSE
906 PUTWRD (.KERNEL_FILE,
907 .MSG_ADDR + 32, GETWRD (.KERNEL_FILE, .DCB_ADDR + .VALUES [D_UCB]));
908
909 !
910 ! SET THE UIC TO [1,1]
911 !
912 PUTWRD (.KERNEL_FILE, .MSG_ADDR + 34, (1 + (256*1)));
913 !
914 ! PUT THE MESSAGE ON NTINIT'S RECEIVE QUEUE. THIS CODE ASSUMES
915 ! THAT THE RECEIVE QUEUE IS EMPTY.
916 !
917 PUTWRD (.KERNEL_FILE, .NTINIT_TCB + .VALUES [T_RCVL], .MSG_ADDR);
918 PUTWRD (.KERNEL_FILE, .NTINIT_TCB + .VALUES [T_RCVL] + 2, .MSG_ADDR);
919 !
920 ! NOW ARRANGE TO RUN NTINIT IN ONE CLOCK TICK
921 !
922 CLK_ADDR = ALOCB (.KERNEL_FILE, .VALUES [CLK_LGTH], 0, .VALUES);
923 PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_TIM], GETWRD (.KERNEL_FILE, .VALUES [ABTIM]) + 1);
924 PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_RQT], .VALUES [CLK_SSHT]);
925 PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_TCB], .NTINIT_TCB);
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
926 !
927 ! NOW LINK THIS TO KERNEL'S CLOCK QUEUE. WE ASSUME THAT NO TASK
928 ! WANTS TO RUN SOONER THAN NTINIT.
929 !
930 PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_LNK], GETWRD (.KERNEL_FILE, .VALUES [CLKHD]));
931 PUTWRD (.KERNEL_FILE, .VALUES [CLKHD], .CLK_ADDR);
932 !
933 END; !OF MOUACP
934
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
935 GLOBAL ROUTINE FCLEAN (KERNEL_FILE, GEN_PCB, VALUES) : NOVALUE = !FINAL CLEANUP OF KERNEL
936
937 !++
938 ! FUNCTIONAL DESCRIPTION:
939 !
940 ! DO FINAL CLEANUP OF THE KERNEL. THIS ROUTINE IS CALLED
941 ! AFTER THE LAST TASK HAS BEEN INSTALLED BUT BEFORE THE
942 ! CORE IMAGE IS WRITTEN OUT.
943 !
944 ! FORMAL PARAMETERS:
945 !
946 ! KERNEL_FILE - FILE BLOCK FOR THE KERNEL
947 ! GEN_PCB - PCB FOR THE SYSTEM-CONTROLLED PARTITION
948 ! VALUES - BLOCK WHICH HOLDS VARIOUS USEFUL VALUES
949 !
950 ! IMPLICIT INPUTS:
951 !
952 ! NONE
953 !
954 ! IMPLICIT OUTPUTS:
955 !
956 ! NONE
957 !
958 ! ROUTINE VALUE:
959 !
960 ! NONE
961 !
962 ! SIDE EFFECTS
963 !
964 ! MODIFIES THE KERNEL CORE IMAGE AND LABEL
965 !
966 !--
967
968 BEGIN
969
970 BIND
971 ROUTINE_NAME = UPLIT (%ASCIZ'FCLEAN');
972
973 MAP
974 KERNEL_FILE : REF FILE_BLOCK,
975 VALUES : REF VNPVAL_BLOCK;
976
977 LOCAL
978 KERNEL_LABEL : REF VECTOR [1024],
979 KERNEL_SIZE,
980 ROUNDED_SIZE,
981 GEN_PAR_BASE;
982
983 !
984 ! FETCH POINTERS AND COMPUTE THE SIZE OF THE KERNEL
985 !
986 GEN_PAR_BASE = GETWRD (.KERNEL_FILE, .GEN_PCB + .VALUES [P_REL])*64;
987 KERNEL_LABEL = .KERNEL_FILE [FILE_LABEL];
988 KERNEL_SIZE = (.KERNEL_FILE [FILE_HWM] + 64) AND ( NOT 63);
989 !
990 ! ROUND THE KERNEL SIZE UP TO JUST BELOW 32K, 64K, 96K, OR 124K.
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
991 !
992
993 IF (.KERNEL_SIZE GTR %O'754000')
994 THEN
995 ERRMSG (0, 34, ROUTINE_NAME, KERNEL_FILE [FILE_NAME], .KERNEL_SIZE,
996 %O'754000', 0)
997 ELSE
998
999 IF (.KERNEL_SIZE GTR %O'574000')
1000 THEN
1001 ROUNDED_SIZE = %O'754000'
1002 ELSE
1003
1004 IF (.KERNEL_SIZE GTR %O'374000')
1005 THEN
1006 ROUNDED_SIZE = %O'574000'
1007 ELSE
1008
1009 IF (.KERNEL_SIZE GTR %O'174000') THEN ROUNDED_SIZE = %O'374000' ELSE ROUNDED_SIZE = %O'174000'
1010
1011 ;
1012 !
1013 ! RETURN TO FREE POOL AMOUNT OF MEMORY UNUSED BY THIS SYSTEM
1014 !
1015 FRESTG (.KERNEL_FILE [FILE_CORE] + (.ROUNDED_SIZE/4), (.KERNEL_FILE [FILE_CORE_LEN] - .ROUNDED_SIZE)/4);
1016 KERNEL_FILE [FILE_CORE_LEN] = .ROUNDED_SIZE;
1017 !
1018 ! SET THE SIZE OF THE GEN PARTITION TO COVER ALL OF CORE BEYOND WHAT
1019 ! IS NEEDED BY THE KERNEL AND THE OTHER PARTITIONS.
1020 !
1021 PUTWRD (.KERNEL_FILE, .GEN_PCB + .VALUES [P_SIZE], (.ROUNDED_SIZE - .GEN_PAR_BASE)/64);
1022 !
1023 ! SET SYSTEM SIZE AND THE LABEL TO INDICATE THE NUMBER OF BYTES
1024 ! IN THIS CORE IMAGE.
1025 !
1026 PUTWRD (.KERNEL_FILE, .VALUES [SYSIZ], .ROUNDED_SIZE/64);
1027 KERNEL_LABEL [L$BLDZ] = (.ROUNDED_SIZE/64) MOD 256;
1028 KERNEL_LABEL [L$BLDZ + 1] = (.ROUNDED_SIZE/64)/256;
1029 KERNEL_LABEL [L$BMXZ] = (.ROUNDED_SIZE/64) MOD 256;
1030 KERNEL_LABEL [L$BMXZ + 1] = (.ROUNDED_SIZE/64)/256;
1031 !
1032 ! POINT AT UNUSED PORTION OF POOL.. PARTITION
1033 !
1034 PUTWRD (.KERNEL_FILE, .VALUES [QBIAS], (.VALUES [POOL_BOTTOM] + 63)/64);
1035 PUTWRD (.KERNEL_FILE, .VALUES [POOL_BOTTOM] + 2, (.VALUES [POOL_ALLOC] - .VALUES [POOL_BOTTOM])/64);
1036 END; !OF FCLEAN
1037
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
1038 GLOBAL ROUTINE TELLK (KERNEL_FILE, TELL_CHAN, VALUES) : NOVALUE = !TELL ABOUT CORE IMAGE
1039
1040 !++
1041 ! FUNCTIONAL DESCRIPTION:
1042 !
1043 ! TELL ABOUT THIS CORE IMAGE, AND CHANGE THE NAME OF THE KERNEL
1044 ! FILE TO BE THE NAME OF THE NODE BEING BUILT. THE TYPEOUTS
1045 ! ARE FOR THE SAKE OF SOFTWARE SUPPORT ANALYZING A DUMP.
1046 !
1047 ! FORMAL PARAMETERS:
1048 !
1049 ! KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
1050 ! THE KERNEL.
1051 ! TELL_CHAN - THE CHANNEL NUMBER ON WHICH TO WRITE THE INFO.
1052 ! VALUES - A VECTOR OF LOTS OF GOOD THINGS FOR VNP20
1053 !
1054 ! IMPLICIT INPUTS:
1055 !
1056 ! NONE
1057 !
1058 ! IMPLICIT OUTPUTS:
1059 !
1060 ! NONE
1061 !
1062 ! ROUTINE VALUE:
1063 !
1064 ! NONE
1065 !
1066 ! SIDE EFFECTS
1067 !
1068 ! WRITES ON THE SPECIFIED CHANNEL
1069 !
1070 !--
1071
1072 BEGIN
1073
1074 BIND
1075 ROUTINE_NAME = UPLIT (%ASCIZ'TELLK');
1076
1077 MAP
1078 KERNEL_FILE : REF FILE_BLOCK,
1079 VALUES : REF VNPVAL_BLOCK;
1080
1081 LOCAL
1082 MAIN_PCB_ADDR,
1083 MAIN_SCAN_DONE,
1084 SUB_PCB_ADDR,
1085 SUB_SCAN_DONE,
1086 PCB_ADDR,
1087 KERNEL_SIZE,
1088 ROUNDED_SIZE,
1089 CHAR;
1090
1091 !
1092 ! FETCH THE NODE NAME AND STORE IT IN THE FILE NAME OF THE KERNEL
1093 !
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
1094
1095 INCR COUNTER FROM 0 TO 5 DO
1096 BEGIN
1097 CHAR = GETBYT (.KERNEL_FILE, .VALUES [NTNAM] + .COUNTER);
1098
1099 IF (.CHAR EQL %C' ') THEN CHAR = 0;
1100
1101 CH$WCHAR (.CHAR, CH$PTR (KERNEL_FILE [FILE_NAME], .COUNTER));
1102 END;
1103
1104 CH$WCHAR (0, CH$PTR (KERNEL_FILE [FILE_NAME], 6));
1105 !
1106 KERNEL_SIZE = .KERNEL_FILE [FILE_HWM] + 1;
1107 ROUNDED_SIZE = GETWRD (.KERNEL_FILE, .VALUES [SYSIZ])*64;
1108 PCRLF (.TELL_CHAN);
1109 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' Node name: '));
1110 OUTSTR (.TELL_CHAN, KERNEL_FILE [FILE_NAME]);
1111 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ', number: '));
1112 OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, .VALUES [NSPNM]), 10, 0);
1113 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'.'));
1114 PCRLF (.TELL_CHAN);
1115 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' There are '));
1116 OUTNUM (.TELL_CHAN, .ROUNDED_SIZE - .KERNEL_SIZE, 10, 0);
1117 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' bytes free in the '));
1118 OUTNUM (.TELL_CHAN, ((.ROUNDED_SIZE/64) + 32)/32, 10, 0);
1119 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'K core image,'));
1120 PCRLF (.TELL_CHAN);
1121 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1122 OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [CRAVL]) + 2), 10, 0);
1123 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' bytes free in the kernel pool,'));
1124 PCRLF (.TELL_CHAN);
1125 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1126 OUTNUM (.TELL_CHAN, .VALUES [POOL_ALLOC] - .VALUES [POOL_BOTTOM], 10, 0);
1127 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' bytes free in the network pool.'));
1128 PCRLF (.TELL_CHAN);
1129 PCRLF (.TELL_CHAN);
1130 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' Partition Base Size Task Name'));
1131 PCRLF (.TELL_CHAN);
1132 MAIN_PCB_ADDR = GETWRD (.KERNEL_FILE, .VALUES [PARHD]);
1133 MAIN_SCAN_DONE = 0;
1134
1135 WHILE (.MAIN_SCAN_DONE EQL 0) DO
1136
1137 IF (.MAIN_PCB_ADDR EQL 0)
1138 THEN
1139 MAIN_SCAN_DONE = 1
1140 ELSE
1141 BEGIN
1142
1143 IF (GETWRD (.KERNEL_FILE, .MAIN_PCB_ADDR + .VALUES [P_MAIN]) EQL .MAIN_PCB_ADDR)
1144 THEN
1145 BEGIN
1146 TELLP (.KERNEL_FILE, .TELL_CHAN, .MAIN_PCB_ADDR, .VALUES);
1147 SUB_PCB_ADDR = GETWRD (.KERNEL_FILE, .MAIN_PCB_ADDR + .VALUES [P_SUB]);
1148 SUB_SCAN_DONE = 0;
1149
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
1150 WHILE (.SUB_SCAN_DONE EQL 0) DO
1151 BEGIN
1152
1153 IF (.SUB_PCB_ADDR EQL 0)
1154 THEN
1155 SUB_SCAN_DONE = 1
1156 ELSE
1157 BEGIN
1158 TELLP (.KERNEL_FILE, .TELL_CHAN, .SUB_PCB_ADDR, .VALUES);
1159 END;
1160
1161 SUB_PCB_ADDR = GETWRD (.KERNEL_FILE, .SUB_PCB_ADDR + .VALUES [P_SUB]);
1162 END;
1163
1164 END;
1165
1166 MAIN_PCB_ADDR = GETWRD (.KERNEL_FILE, .MAIN_PCB_ADDR + .VALUES [P_LNK]);
1167 END;
1168
1169 PCRLF (.TELL_CHAN);
1170 END; !OF TELLK
1171
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
1172 ROUTINE TELLP (KERNEL_FILE, TELL_CHAN, PCB_ADDR, VALUES) : NOVALUE = !TELL ABOUT A PARTITION
1173
1174 !++
1175 ! FUNCTIONAL DESCRIPTION:
1176 !
1177 ! TELL ABOUT A PARTITION
1178 !
1179 ! FORMAL PARAMETERS:
1180 !
1181 ! KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
1182 ! THE KERNEL.
1183 ! TELL_CHAN - THE CHANNEL NUMBER ON WHICH TO WRITE THE INFO.
1184 ! PCB_ADDR - PDP-11 ADDRESS OF THE PARTITION CONTROL BLOCK
1185 ! VALUES - A VECTOR OF LOTS OF GOOD THINGS FOR VNP20
1186 !
1187 ! IMPLICIT INPUTS:
1188 !
1189 ! NONE
1190 !
1191 ! IMPLICIT OUTPUTS:
1192 !
1193 ! NONE
1194 !
1195 ! ROUTINE VALUE:
1196 !
1197 ! NONE
1198 !
1199 ! SIDE EFFECTS
1200 !
1201 ! WRITES ON THE SPECIFIED CHANNEL
1202 !
1203 !--
1204
1205 BEGIN
1206
1207 BIND
1208 ROUTINE_NAME = UPLIT (%ASCIZ'TELLP');
1209
1210 MAP
1211 KERNEL_FILE : REF FILE_BLOCK,
1212 VALUES : REF VNPVAL_BLOCK;
1213
1214 LOCAL
1215 R50VAL,
1216 ASCVAL : VECTOR [CH$ALLOCATION (7)],
1217 TCB_ADDR;
1218
1219 !
1220 ! FIRST TELL THE PARTITION NAME, THEN THE BASE ADDRESS AND SIZE,
1221 ! LAST THE NAME OF THE TASK RESIDENT IN THE PARTITION.
1222 !
1223 R50VAL = 0;
1224 R50VAL<16, 16> = GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_NAM]);
1225 R50VAL<0, 16> = GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_NAM] + 2);
1226 R50TOA (.R50VAL, ASCVAL);
1227 PCRLF (.TELL_CHAN);
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
1228 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1229 OUTSTR (.TELL_CHAN, ASCVAL);
1230 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1231 OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_REL])*64, 8, 6);
1232 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1233 OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_SIZE])*64, 8, 6);
1234 TCB_ADDR = GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_TCB]);
1235
1236 IF (.TCB_ADDR NEQ 0)
1237 THEN
1238 BEGIN
1239
1240 IF ((GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_STAT]) AND .VALUES [PS_DRV]) EQL 0)
1241 THEN
1242 BEGIN
1243 R50VAL = 0;
1244 R50VAL<16, 16> = GETWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [T_NAM]);
1245 R50VAL<0, 16> = GETWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [T_NAM] + 2);
1246 R50TOA (.R50VAL, ASCVAL);
1247 END
1248 ELSE
1249 BEGIN
1250 ASCVAL = 0;
1251 CH$WCHAR (GETBYT (.KERNEL_FILE, .TCB_ADDR + .VALUES [D_NAM]), CH$PTR (ASCVAL, 0));
1252 CH$WCHAR (GETBYT (.KERNEL_FILE, .TCB_ADDR + .VALUES [D_NAM] + 1), CH$PTR (ASCVAL, 1));
1253 CH$WCHAR (%C':', CH$PTR (ASCVAL, 2));
1254 END;
1255
1256 OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1257 OUTSTR (.TELL_CHAN, ASCVAL);
1258 END;
1259
1260 END; !OF TELLP
1261 END
1262
1263 ELUDOM
1264 ! Local Modes:
1265 ! Comment Column:36
1266 ! Comment Start:!
1267 ! Mode:Fundamental
1268 ! Auto Save Mode:2
1269 ! End:
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
ABTIM 923
ALOCB 157 872 922
ALOC_POOL 158 235
ASCVAL 249 286 288 1216 1226 1229 1246
1250# 1251 1252 1253 1257
ATOR50 138* 877
BIN_NAME 355 396
BLD_CHAIN 151 346
CH$WCHAR 1101 1104 1251 1252 1253
CHAR 446 458# 465 467# 469 480# 487
489# 491 1089 1097# 1099# 1101
CLKHD 930 931
CLK_ADDR 860 922# 923 924 925 930 931
CLK_LGTH 922
CLK_LNK 930
CLK_RQT 924
CLK_SSHT 924
CLK_TCB 925
CLK_TIM 923
COUNTER 240 241 879 880 1095 1097 1101
CRAVL 1122
DCB_ADDR 859 886# 891 896 900# 907
DEVHD 886
D_LNK 900
D_NAM 896 1251 1252
D_UCB 907
ENA_LINES 99 501*
ENA_NRM 587* 692 717
ENA_NSP 564* 682 725
ERRMSG 149 348 695 727 995
ERROR 148 904
FCLEAN 102 935*
FCOR 143 246
FILE_BLOCK 199 204 335 393 438 542 575
598 780 854 974 1078 1211
FILE_CHAN 160 217 218 296 344 355 396
FILE_CORE 1015
FILE_CORE_LEN 1015 1016
FILE_HWM 988 1106
FILE_LABEL 222 987
FILE_LEN 212
FILE_NAME 213 995 1101 1104 1110
FILE_PTR 204 212# 213 217 218 222 241
246
FILE_TYP 212
FIX_LLC 100 743*
FND_CHAIN 152 341
FRESTG 144 1015
GEN_PAR_BASE 981 986# 1021
GEN_PCB 935 986 1021
GETBLK 150 212 228
GETBYT 153 241 1097 1251 1252
GETWRD 154 451 452 453 472 494 606
611 618 619 623 634 635 636
650 651 665 669 709 792 796
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
805 868 886 896 900 907 923
930 986 1107 1112 1122 1132 1143
1147 1161 1166 1224 1225 1231 1233
1234 1240 1244 1245
GET_BIN 97 355*
GET_LIBR 96 296*
KERNEL_FILE 160 199 241 296 335 344 355
393 396 399 438 451 452 453
465 471 472 487 493 494 501
542 564 575 582 583 584 587
598 606 607 608 609 610 611
618 619 623 634 635 636 650
651 665 669 682 692 709 717
725 743 780 792 796 805 807
814 854 868 872 873 880 882
886 896 900 906 907 912 917
918 922 923 924 925 930 931
935 974 986 987 988 995 1015
1016# 1021 1026 1034 1035 1038 1078
1097 1101 1104 1106 1107 1110 1112
1122 1132 1143 1146 1147 1158 1161
1166 1172 1211 1224 1225 1231 1233
1234 1240 1244 1245 1251 1252
KERNEL_LABEL 978 987# 1027# 1028# 1029# 1030#
KERNEL_SIZE 979 988# 993 995 999 1004 1009
1087 1106# 1116
L$BHGV 224
L$BLDZ 1027 1028
L$BMXZ 1029 1030
L$BSA 223
LABEL_PTR 205 222# 223 224
LEN_FILE_STRING 213
LEN_LIBR_NAME 213 230 286 288
LF_RDY 665
LIBRARY_BASE 207 223# 224 231 241
LIBRARY_LENGTH 206 224# 235 240
LIBR_ADDR 235 241
LIBR_BASE 231
LIBR_BLOCK 203 285 339
LIBR_CHAIN 341 346
LIBR_FILE 229
LIBR_LEN 228
LIBR_NAME 230 288
LIBR_PTR 203 228# 229# 230 231# 235# 241
247 249 285 288 290 339 341#
344# 346 352
LIBR_TYP 228
LIB_NAME 160 213 230 235 296 341 344
LLCTA 623 796
LLC_ADDR 554 663# 669 704# 709 786 803#
805 808
LLC_ENTRY 555 564 581 584 587 605 669#
676 682 686 692 704 709# 712
717 720 725 787 805# 808
LLC_TABLE 553 623# 663 785 796# 803
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
LOC 442 546
LR_STS 882
LS_CEX 882
LS_CXO 882
L_FLG 665
L_LEN 662
MAIN_PCB_ADDR 1082 1132# 1137 1143 1146 1147 1166#
MAIN_SCAN_DONE 1083 1133# 1135 1139#
MOUACP 101 814*
MPT_NUMBER 558 707# 709 729#
MSG_ADDR 858 872# 873 880 882 907 912
917 918
NRM_DAT 562 587 606 607 651# 652 692
717
NRM_PDV 557 650# 651
NSPNM 1112
NSP_PDV 444 451# 453 556 634# 636
NTINIT_PCB 814 868
NTINIT_TCB 861 868# 917 918 925
NTNAM 1097
OUTNUM 147 1112 1116 1118 1122 1126 1231
1233
OUTPUT 140
OUTSTR 146 1109 1110 1111 1113 1115 1117
1119 1121 1123 1125 1127 1130 1228
1229 1230 1232 1256 1257
PARHD 1132
PCB_ADDR 1086 1172 1224 1225 1231 1233 1234
1240
PCOR2 18#
PCRLF 145 1108 1114 1120 1124 1128 1129
1131 1169 1227
PDVTA 451 634 650
PDV_ADDR 547
PD_NRM 501 644 650 686 712
PD_NSP 399 451 501 628 634 676 720
PLD_ADDR 552 579 581# 582 583 584
PLD_CHN 584
PLD_LEN 581
PLD_LST 582
PLD_OFFSET 636
PLD_POINTER 551 564 581 635# 682 725
PLD_TIM 583
PLD_UP 582
PLD_WT 582
POOL_ALLOC 1035 1126
POOL_BOTTOM 1034 1035 1126
PSW_FLG_OFFSET 471 473 493 495
PSW_OFFSET 453
PSW_POINTER 443 452# 465 471 473 487 493
495
PSW_RCV_FLAG 473
PSW_RCV_OFFSET 465
PSW_XMT_FLAG 495
PSW_XMT_OFFSET 487
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
PS_DRV 1240
PUTBYT 155 241 465 487 583 584 880
PUTWRD 156 471 493 582 607 608 609
610 807 873 882 906 912 917
918 923 924 925 930 931 1021
1026 1034 1035
P_LNK 1166
P_MAIN 1143
P_NAM 1224 1225
P_REL 986 1231
P_SIZE 1021 1233
P_STAT 1240
P_SUB 1147 1161
P_TCB 868 1234
QBIAS 1034
R50TOA 139 1226 1246
R50VAL 863 877 880 1215 1223# 1224# 1225#
1226 1243# 1244# 1245# 1246
RCOR 142 218
RCV_PASWRD 458 467
RDLIBR 94 160* 344 396
ROUNDED_SIZE 980 1001# 1006# 1009# 1015 1016 1021
1026 1027 1028 1029 1030 1088 1107#
1116 1118
ROUTINE_NAME 196# 282# 332# 348 390# 435# 539#
695 727 777# 851# 971# 995 1075#
1208#
RSTB 141 217
SEARCH_DONE 862 887# 889 893# 898# 902
SEL_LIBR 95 249* 341
SET_PASWRDS 98 399*
SLTNM 619 792
SLTTA 618
SLT_ADDR 549 662# 665
SLT_COUNT 550 619# 660 784 792# 801
SLT_NUMBER 660 662 663 801 803
SLT_POINTER 548 618# 662
STR_PTR 445 461# 465 466# 467 469 483#
487 488# 489 491
SUB_PCB_ADDR 1084 1147# 1153 1158 1161#
SUB_SCAN_DONE 1085 1148# 1150 1155#
SYSIZ 1026 1107
TCB_ADDR 559 602 605# 607 608 609 610
612 1217 1234# 1236 1244 1245 1251
1252
TCB_FLAGS 610 612
TCB_LAST 560 603 606# 608
TCB_LEN 605
TCB_LINK 608
TCB_OLINK 609
TCB_Q 606 607
TCB_START 652
TCB_TABLE 561 587 605 652# 692 717
TELLK 103 1038*
TELLP 104# 1146 1158 1172*
DSK:PCOR2.XRF[4,31] 31-Aug-79 14:56
TELL_CHAN 1038 1108 1109 1110 1111 1112 1113
1114 1115 1116 1117 1118 1119 1120
1121 1122 1123 1124 1125 1126 1127
1128 1129 1130 1131 1146 1158 1169
1172 1227 1228 1229 1230 1231 1232
1233 1256 1257
TF_DEA 612
T_NAM 1244 1245
T_RCVL 917 918
VALUES 160 200 235 296 336 341 344
346# 355 394 396 399 439 451
453 458 465 467 471 473 480
487 489 493 495 501 543 564
576 581 582 583 584 587 599
605 606 607 608 609 610 612
618 619 623 634 636 650 651
652 662 665 682 692 717 725
743 781 792 796 814 855 868
872 882 886 896 900 907 917
918 922 923 924 925 930 931
935 975 986 1021 1026 1034 1035
1038 1079 1097 1107 1112 1122 1126
1132 1143 1146 1147 1158 1161 1166
1172 1212 1224 1225 1231 1233 1234
1240 1244 1245 1251 1252
VNPVAL_BLOCK 200 336 394 439 543 576 599
781 855 975 1079 1212
XMT_PASWRD 480 489
Z_DAT 453 636 651