Trailing-Edge
-
PDP-10 Archives
-
BB-H348C-RM_1982
-
swskit-v21/listings/rsx11s/reqsb.list
There are no other files named reqsb.list in the archive.
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3
1 .TITLE REQSB
2 .IDENT /09/
3
4 ;
5 ; COPYRIGHT (C) 1974, 1978
6 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
7 ;
8 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
9 ; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
10 ;
11 ; VERSION 09
12 ;
13 ; D. N. CUTLER 10-AUG-73
14 ;
15 ; PREVIOUSLY MODIFIED BY:
16 ;
17 ; D. N. CUTLER
18 ; T. J. MILLER
19 ;
20 ; MODIFIED BY:
21 ;
22 ; T. J. MILLER 7-DEC-76
23 ;
24 ; TM068 -- CHECK FOR TASK EXITTING IN TEST FOR
25 ; CHECKPOINT.
26 ;
27 ; T. J. MILLER 26-MAY-77
28 ;
29 ; TM086 -- ADDITION OF COMMON EVENT FLAG SETTING ROUTINE.
30 ;
31 ; P. WANNHEDEN 8-JUN-77
32 ;
33 ; PW001 -- ADDITION OF ROUTINE TO QUEUE AST FROM
34 ; USER INTERRUPT SERVICE ROUTINE
35 ; (INTERRUPT VIA VECTOR CONNECTED TO WITH
36 ; CINT$ DIRECTIVE).
37 ;
38 ; T. J. MILLER 17-SEP-77
39 ;
40 ; TM106 -- CORRECT ERROR IN CONDITIONALIZATION.
41 ;
42 ; T. J. MILLER 31-SEP-77
43 ;
44 ; TM101 -- MODIFY $SETCR FOR ELIMINATION OF NULL TASK.
45 ;
46 ; T. J. MILLER 8-DEC-77
47 ;
48 ; TM118 -- CORRECT ERROR IN CONDITIONALIZATION IN SYSTEMS
49 ; WITH SYSTEM CONTROLLED PARTITIONS BUT NO
50 ; CHECKPOINTING.
51 ;
52 ; TASK REQUEST RELATED SUBROUTINES
53 ;
54 ; MACRO LIBRARY CALLS
55 ;
56
57 .MCALL HDRDF$,ITBDF$,PCBDF$,TCBDF$ ; PW001
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-1
58 000000 HDRDF$ ;DEFINE TASK HEADER OFFSETS ;**-1
59 000000 ITBDF$ ;DEFINE INTERRUPT TRANSFER BLOCK OFFSETS; PW001
60 000000 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS
61 000000 TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS
62
63 ;+
64 ; **-$ABCTK-ABORT CURRENT TASK
65 ; **-$ABTSK-ABORT TASK
66 ;
67 ; THIS ROUTINE IS CALLED TO MARK A TASK FOR ABORT AND TO FORCE A TASK EXIT.
68 ; THE REASON FOR ABORT AND THE CURRENT OUTSTANDING I/O COUNT ARE STORED
69 ; IN THE FIRST TASK EVENT FLAG WORD.
70 ;
71 ; INPUTS:
72 ;
73 ; R0=REASON FOR ABORT.
74 ; R1=ADDRESS OF THE TCB OF THE TASK TO BE ABORTED (ENTRY AT $ABTSK ONLY).
75 ;
76 ; OUTPUTS:
77 ;
78 ; THE TASK IS MARKED FOR ABORT AND A CONDITIONAL SCHEDULE REQUEST IS
79 ; SET.
80 ;-
81
82 000000 016701 000000G $ABCTK::MOV $TKTCB,R1 ;SET TCB ADDRESS TO CURRENT TASK
83 000004 010061 000022 $ABTSK::MOV R0,T.EFLG(R1) ;INSERT REASON FOR ABORT
84 000010 116161 000003 000023 MOVB T.IOC(R1),T.EFLG+1(R1) ;SAVE OUTSTANDING I/O COUNT
85 000016 010100 MOV R1,R0 ;COPY TCB ADDRESS
86 000020 062701 000032 ADD #T.STAT,R1 ;POINT TO FIRST TASK STATUS WORD
87 000024 042721 000100 BIC #TS.CKR,(R1)+ ;CLEAR STATUS BITS
88 000030 042711 000025 BIC #T2.STP!T2.SPN!T2.WFR,(R1) ;MAKE SURE TASK IS RUNNABLE
89 000034 052711 140300 BIS #T2.AST!T2.DST!T2.HLT!T2.ABO,(R1) ;DSBL AST'S & FRC EXIT
90 000040 005741 TST -(R1) ;OUT FOR INITIAL LOAD OR OTHERWISE BLKD?
91 000042 001002 BNE 10$ ;IF NE YES
92 000044 CALL $SETCR ;SET A CONDITIONAL SCHEDULE REQUEST
93 000050 016000 000046 10$: MOV T.PCB(R0),R0 ;POINT TO TASK PCB
94
95
96 .IF DF D$$ISK
97
98 CALLR $NXTSK ;REALLOCATE TASK PARTITION IF NECESSARY
99
100 .IFF
101
102 000054 RETURN ;
103
104 .ENDC
105
106
107 ;+
108 ; **-$BILDS-BUILD STACK AND INITIALIZE HEADER
109 ;
110 ; THIS ROUTINE SETS UP THE TASK STACK AND INITIALIZES THE HEADER. IT IS
111 ; CALLED PRIOR TO PLACING A TASK INTO CONTENTION FOR THE PROCESSOR WHEN
112 ; AN EXECUTION REQUEST IS MADE FOR A TASK THAT IS FIXED IN MEMORY OR
113 ; WHEN A DISK RESIDENT TASK HAS FINISHED LOADING.
114 ;
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-2
115 ; INPUTS:
116 ;
117 ; R0=ADDRESS OF THE TCB OF THE TASK TO INITIALIZE.
118 ;
119 ; OUTPUTS:
120 ;
121 ; 1-TASK LOCAL EVENT FLAGS 1.-32. ARE CLEARED.
122 ; 2-CURRENT UIC IS SETUP IN THE HEADER.
123 ; 3-TASK CONTEXT IS SETUP TO CAUSE THE TASK TO START EXECUTION AT ITS ENTR
124 ; 4-REDISPATCHING OF THE PROCESSOR IS CONDITIONALLY REQUESTED.
125 ;
126 ; R3 IS PRESERVED ACROSS CALL.
127 ;-
128
129 000056 016001 000046 $BILDS::MOV T.PCB(R0),R1 ;GET ADDRESS OF TASK PCB
130 000062 016101 000000G MOV P.HDR(R1),R1 ;POINT TO TASK HEADER
131 000066 016061 000022 000010 MOV T.EFLG(R0),H.CUIC(R1) ;SET SPECIFIED UIC
132 000074 001003 BNE 10$ ;IF NE UIC WAS SPECIFIED
133 000076 016161 000012 000010 MOV H.DUIC(R1),H.CUIC(R1) ;SET DEFAULT UIC
134
135
136 .IF DF M$$MUP
137
138 BR 15$ ;
139
140 .IFTF
141
142 000104 10$: ;REF LABEL
143
144 .IFT
145
146 MOV T.ACTL(R0),H.DUIC(R1) ;SET DEFAULT UIC
147
148 .ENDC
149
150
151 000104 032760 000100 000034 15$: BIT #T2.ABO,T.ST2(R0) ;TASK MARKED FOR ABORT?
152 000112 001010 BNE 20$ ;IF NE YES
153 000114 005060 000022 CLR T.EFLG(R0) ;CLEAR TASK LOCAL EVENT FLAGS
154 000120 032760 100000 000036 BIT #T3.ACP,T.ST3(R0) ;TASK ACP?
155 000126 001002 BNE 20$ ;IF NE YES
156 000130 005060 000024 CLR T.EFLG+2(R0) ;
157 000134 20$: ;REF LABEL
158
159
160 .IF DF M$$MGE
161
162 000134 016111 000020 MOV H.ISP(R1),(R1) ;SET INITIAL STACK POINTER
163 000140 016102 000072 MOV H.GARD(R1),R2 ;POINT TO CONTEXT SAVE AREA
164 000144 162702 000016 SUB #16,R2 ;POINT TO SAVED PC
165 000150 016112 000016 MOV H.IPC(R1),(R2) ;SET INITIAL PC WORD
166 000154 016142 000014 MOV H.IPS(R1),-(R2) ;SET INITIAL PS WORD
167
168 .IFF
169
170 MOV H.ISP(R1),R2 ;GET INITIAL STACK POINTER
171 MOV H.IPS(R1),-(R2) ;SET INITIAL PS WORD
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-3
172 MOV H.IPC(R1),-(R2) ;SET INITIAL PC WORD
173 CMP -(R2),-(R2) ;ADJUST TO BOTTOM OF STACK
174 MOV R2,(R1) ;SET INITIAL STACK POINTER
175
176 .ENDC
177
178
179 ;+
180 ; **-$ACTTK-PUT TASK IN ACTIVE TASK LIST
181 ;
182 ; THIS ROUTINE IS CALLED TO PUT AN ACTIVE TASK IN THE ACTIVE TASK LIST.
183 ;
184 ; INPUTS:
185 ;
186 ; R0=ADDRESS OF THE TCB OF THE TASK TO PUT IN THE ACTIVE LIST.
187 ;
188 ; OUTPUTS:
189
190 ; THE SPECIFIED TASK IS MERGED INTO THE ACTIVE TASK LIST BY
191 ; PRIORITY.
192 ;
193 ; R3 IS PRESERVED ACROSS CALL.
194 ;-
195
196 000160 012701 177726G $ACTTK::MOV #$ACTHD-T.ACTL,R1 ;SET ADDRESS OF PREVIOUS TCB
197 000164 010102 10$: MOV R1,R2 ;SAVE ADDRESS OF PREVIOUS TCB
198 000166 016201 000052 MOV T.ACTL(R2),R1 ;GET ADDRESS OF NEXT TCB
199 000172 126160 000002 000002 CMPB T.PRI(R1),T.PRI(R0) ;TASK HIGHER OR SAME PRIORITY?
200 000200 103371 BHIS 10$ ;IF HIS YES
201 000202 010062 000052 MOV R0,T.ACTL(R2) ;LINK NEW TASK TO PREVIOUS
202 000206 010160 000052 MOV R1,T.ACTL(R0) ;SET LINK TO NEXT IN NEW TASK
203
204 ;+
205 ; **-$SETCR-SET CONDITIONAL SCHEDULE REQUEST
206 ; **-$SETRQ-SET SCHEDULE REQUEST
207 ; **-$SETRT-SET SCHEDULE REQUEST FOR CURRENT TASK
208 ;
209 ; THIS ROUTINE IS CALLED TO FORCE REDISPATCHING OF THE PROCESSOR
210 ; FROM A SPECIFIED POSITION IN THE TASK LIST. IF A PREVIOUS REQUEST
211 ; HAS BEEN SET, THEN REDISPATCHING STARTS AT WHICH EVER REQUEST
212 ; HAS THE HIGHEST PRIORITY.
213 ;
214 ; INPUTS:
215 ;
216 ; IF ENTRY AT $SETRT, THEN
217 ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.
218 ; IF ENTRY AT $SETRQ OR $SETCR, THEN
219 ; R0=ADDRESS OF THE TCB TO START DISPATCHING AT.
220 ;
221 ; OUTPUTS:
222 ;
223 ; A SCHEDULE REQUEST IS SET WHICH WILL FORCE A REDISPATCH-
224 ; ING OF THE PROCESSOR WHEN A SYSTEM EXIT IS EXECUTED.
225 ;
226 ; R2 AND R3 ARE PRESERVED ACROSS CALL.
227 ; R0 IS PRESERVED ACROSS CALL IF ENTRY IS NOT AT $SETRT.
228 ;-
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-4
229
230 .ENABL LSB
231 000212 020067 000000G $SETCR::CMP R0,$TKTCB ;REQUESTED TASK SAME AS CURRENT? ; TM101
232 000216 001410 BEQ $SETRQ ;IF EQ YES ;**-2
233 000220 126760 000000G 000002 CMPB $CURPR,T.PRI(R0) ;CURRENT TASK HIGHER PRIORITY? ; TM101
234 000226 101020 BHI 30$ ;IF HI YES ;**-1
235 000230 103403 BLO $SETRQ ;IF LO NO
236 000232 10$: CALLR $DRDSE ;SAME PRIORITY-DECLARE SIGNIFICANT EVENT
237 000236 010500 $SETRT::MOV R5,R0 ;SET ADDRESS OF DISPATCH TCB
238 000240 016701 000000G $SETRQ::MOV $RQSCH,R1 ;GET PREVIOUS SCHEDULE REQUEST
239 000244 001407 BEQ 20$ ;IF EQ NO PREVIOUS REQUEST
240 000246 020001 CMP R0,R1 ;TASK ALREADY RESCHEDULED? ; TM086
241 000250 001407 BEQ 30$ ;IF EQ YES ; TM086
242 000252 126160 000002 000002 CMPB T.PRI(R1),T.PRI(R0) ;COMPARE PRIORITIES
243 000260 101003 BHI 30$ ;IF HI PREVIOUS IS HIGHER PRIORITY
244 000262 001763 BEQ 10$ ;IF EQ SAME PRIORITY
245 000264 010067 000000G 20$: MOV R0,$RQSCH ;SET SCHEDULE REQUEST
246 000270 30$: RETURN ;
247 .DSABL LSB
248
249 ;+ ; TM086
250 ; **-$SETF/$SETM-SET EVENT FLAG ; TM086
251 ; ; TM086
252 ; THESE ROUTINES SET AN EVENT FLAG AND TAKE CARE OF THE REQUIRED ; TM086
253 ; RESCHEDULING. ; TM086
254 ; ; TM086
255 ; INPUTS: ; TM086
256 ; ; TM086
257 ; R0=EVENT FLAG NUMBER ($SETF) OR EVENT FLAG MASK ($SETM). ; TM086
258 ; R1=EVENT FLAG WORD ADDRESS ($SETM ONLY). ; TM086
259 ; R5=TCB ADDRESS FOR WHICH FLAG IS BEING SET. ; TM086
260 ; ; TM086
261 ; OUTPUTS: ; TM086
262 ; ; TM086
263 ; R0=TCB ADDRESS OF TASK WHOSE FLAG WAS SET ; TM086
264 ; R3 IS PRESERVED. ; TM086
265 ;- ; TM086
266 ; TM086
267 000272 $SETF:: CALL $CEFI ;CONVERT EVENT FLAG TO MASK AND ADDRESS ; TM086
268 000276 032765 000100 000034 $SETM:: BIT #T2.ABO,T.ST2(R5) ;IS TASK MARKED FOR ABORT? ; TM086
269 000304 001001 BNE 10$ ;IF NE YES, DO NOT TOUCH EVENT FLAG WORD; TM086
270 000306 050011 BIS R0,(R1) ;SET THE EVENT FLAG ; TM086
271 000310 010500 10$: MOV R5,R0 ;COPY TCB ADDRESS FOR $SETCR ; TM086
272 000312 005301 DEC R1 ;WRAP AROUND ON 0 TO -1 ; TM086
273 000314 020127 000002G CMP R1,#$COMEF+2 ;IS IT A COMMON EVENT FLAG? ; TM086
274 000320 103403 BLO 20$ ;IF LO YES ; TM086
275 000322 005767 000000G TST $SIGFL ;IS SOME TASK WAITING FOR A SIG EVENT? ; TM086
276 000326 001731 BEQ $SETCR ;IF EQ NO, SET SCHEDULE REQUEST ; TM086
277 000330 20$: CALLR $DRDSE ;DECLARE SIGNIFICANT EVENT AND RETURN ; TM086
278 000334 RETURN ; ; TM086
279 ;+
280 ; **-$DASTT-DECLARE AST TRAP
281 ;
282 ; THIS ROUTINE IS CALLED TO DECLARE A NON-I/O RELATED AST TRAP. THE
283 ; HEADER OF THE SPECIFIED TASK IS EXAMINED TO DETERMINE IF THE SPECIFIED
284 ; AST IS ENABLED (SETUP). IF IT IS THEN THE AST IS DECLARED.
285 ;
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-5
286 ; INPUTS:
287 ;
288 ; R4=OFFSET INTO THE TASK HEADER TO THE AST CONTROL BLOCK ADDRESS.
289 ; R5=ADDRESS OF THE TCB OF THE TASK TO DECLARE THE AST FOR.
290 ;
291 ; OUTPUTS:
292 ;
293 ; C=1 IF THE TASK IS NOT SETUP FOR THE SPECIFIED AST.
294 ; C=0 IF THE TASK IS SETUP FOR THE AST AND THE AST HAS BEEN DECLARED.
295 ; R1=ADDRESS OF THE AST CONTROL BLOCK.
296 ;
297 ; NOTE: R4 IS DESTROYED BY THIS ROUTINE
298 ;-
299
300
301 .IF DF A$$TRP!F$$LPP!P$$RFL!R$$SND!P$$SRF
302
303 .ENABL LSB
304 000336 016500 000046 $DASTT::MOV T.PCB(R5),R0 ;GET ADDRESS OF TASK PCB
305 000342 066004 000000G ADD P.HDR(R0),R4 ;CALCULATE ADDRESS OF AST CONTROL BLOCK
306 000346 000261 SEC ;ASSUME AST CANNOT BE DECLARED
307 000350 032765 100600 000032 BIT #TS.CKP!TS.EXE!TS.OUT,T.STAT(R5) ;ACTIVE AND RESIDENT?
308 000356 001017 BNE 10$ ;IF NE NO
309 000360 010500 MOV R5,R0 ;COPY TCB ADDRESS
310 000362 011401 MOV (R4),R1 ;PICK UP ADDRESS OF AST CONTROL BLOCK
311 000364 001414 BEQ 10$ ;IF EQ THERE IS NONE
312 000366 005014 CLR (R4) ;ELSE INDICATE CONTROL BLOCK IS IN USE
313 ; PW001
314 .IF DF C$$INT ; PW001
315 ; PW001
316 BR $QASTT ;GO QUEUE THE AST ; PW001
317 ; PW001
318 ;+ ; PW001
319 ; **-$DQAC-DEQUEUE AST BLOCK QUEUED BY $QASTC. ; PW001
320 ; (TO BE CALLED FROM SYSXT ONLY). ; PW001
321 ; ; PW001
322 ; INPUT: ; PW001
323 ; R0 POINTER TO AST BLOCK ; PW001
324 ; ; PW001
325 ; OUTPUT: ; PW001
326 ; A.CBL SET TO 1 TO INDICATE AST BLOCK FREE ; PW001
327 ; (NOT IN AST QUEUE). ; PW001
328 ; ; PW001
329 ; REGISTERS ALTERED: NONE ; PW001
330 ;- ; PW001
331 ; PW001
332 ; PW001
333 $DQAC:: INC A.CBL(R0) ; SET AST BLOCK FREE ; PW001
334 RETURN ; PW001
335 ; PW001
336 ; PW001
337 ;+ ; PW001
338 ; **-$QASTC-QUEUE AST TO TASK. ; PW001
339 ; ; PW001
340 ; THIS IS A VARIANT OF $QASTT TO BE USED BY A TASK ISR, ENTERED ; PW001
341 ; VIA A VECTOR CONNECTED TO VIA THE CINT$ DIRECTIVE. ; PW001
342 ; ; PW001
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-6
343 ; INPUT: ; PW001
344 ; R5 POINTER TO FORK BLOCK IN ITB ; PW001
345 ; ; PW001
346 ; OUTPUT: ; PW001
347 ; CC-C 0 IF OK, 1 IF AST ADDRESS NOT SPECIFIED IN CINT$ CALL. ; PW001
348 ; ; PW001
349 ; NOTE - IF THE AST BLOCK IS ALREADY QUEUED FOR THE TASK, ; PW001
350 ; NO ACTION IS TAKEN. RETURN CC-C = 0. ; PW001
351 ; ; PW001
352 ; REGISTERS ALTERED: R0,R1,R2,R3 ; PW001
353 ;- ; PW001
354 ; PW001
355 ; PW001
356 $QASTC::MOV R5,R1 ; PW001
357 ADD #X.AST-X.FORK,R1 ;GET AST BLOCK ; PW001
358 TST A.CBL(R1) ;AST BLOCK ALREADY IN AST QUEUE? ; PW001
359 BEQ 10$ ;Y - EXIT WITH CC-C = 0 ; PW001
360 TST A.AST(R1) ;AST ADDRESS SPECIFIED? ; PW001
361 SEC ;ASSUME NO ; PW001
362 BEQ 10$ ;N - EXIT WITH CC-C = 1 ; PW001
363 CLR A.CBL(R1) ;INDICATE AST BLOCK IN USE ; PW001
364 MOV X.TCB-X.FORK(R5),R0 ;GET TCB ADDRESS ; PW001
365 ;FALL THRU TO $QASTT ; PW001
366 ; PW001
367 .ENDC ; PW001
368 ; PW001
369 ; PW001
370
371 ;+
372 ; **-$QASTT-QUEUE AST TO TASK
373 ;
374 ; THIS ROUTINE IS USED TO QUEUE AN AST TO A TASK AND INSURE THE TASK
375 ; WILL BE SCHEDULED AND RECONSIDERED FOR ELIGIBILITY IN THE PARTITION.
376 ;
377 ; INPUTS:
378 ;
379 ; R0=TCB ADDRESS OF TASK TO RECEIVE AST
380 ; R1=ADDRESS OF AST CONTROL BLOCK TO BE USED
381 ;
382 ; OUTPUTS:
383 ;
384 ; C=0
385 ; R1 IS PRESERVED
386 ;-
387
388 000370 062700 000016 $QASTT::ADD #T.ASTL,R0 ;POINT TO TASK AST LISTHEAD
389 000374 010146 MOV R1,-(SP) ;SAVE ADDRESS OF AST CONTROL BLOCK
390 000376 CALL $QINSF ;INSERT CONTROL BLOCK IN AST QUEUE
391 000402 162700 000016 SUB #T.ASTL,R0 ;POINT BACK TO TCB ADDRESS
392 000406 CALL $SETCR ;SET A CONDITIONAL SCHEDULE REQUEST
393
394
395 .IF DF D$$ISK&C$$CKP
396
397 BIT #T2.STP,T.ST2(R0) ;IS TASK STOPPED?
398 BEQ 5$ ;IF EQ NO
399 MOV T.PCB(R0),R0 ;POINT TO TASK PCB
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-7
400 CALL $NXTSK ;REALLOCATE TASK PARTITION
401
402 .ENDC
403
404
405 000412 012601 5$: MOV (SP)+,R1 ;RESTORE AST CONTROL BLOCK ADDRESS
406 000414 000241 CLC ;RETURN CARRY CLEAR
407 000416 10$: RETURN ;
408 .DSABL LSB
409
410 .ENDC
411
412
413 ;+
414 ; **-$SRSTD-SEARCH SYSTEM TASK DIRECTORY
415 ;
416 ; THIS ROUTINE IS CALLED TO SEARCH THE TASK DIRECTORY FOR A TASK OF THE
417 ; SPECIFIED NAME.
418 ;
419 ; INPUTS:
420 ;
421 ; R3=ADDRESS OF THE TASK NAME TO SEARCH FOR.
422 ;
423 ; OUTPUTS:
424 ;
425 ; C=1 IF SPECIFIED TASK IS NOT FOUND.
426 ; C=0 IF SPECIFIED TASK IS FOUND.
427 ; R0=ADDRESS OF THE TCB.
428 ;
429 ; R1,R2, AND R3 ARE PRESERVED ACROSS CALL.
430 ;-
431
432 .ENABL LSB
433 000420 016700 000000G $SRSTD::MOV $TSKHD,R0 ;POINT TO FIRST TCB IN LIST
434 000424 026013 000006 10$: CMP T.NAM(R0),(R3) ;FIRST HALF OF NAME MATCH?
435 000430 001004 BNE 20$ ;IF NE NO
436 000432 026063 000010 000002 CMP T.NAM+2(R0),2(R3) ;SECOND HALF OF NAME MATCH?
437 000440 001406 BEQ 30$ ;IF EQ YES
438 000442 016000 000030 20$: MOV T.TCBL(R0),R0 ;GET LINK TO NEXT TCB
439 000446 005760 000030 TST T.TCBL(R0) ;NULL TASK?
440 000452 001364 BNE 10$ ;IF NE NO
441 000454 000261 25$: SEC ;INDICATE FAILURE
442 000456 30$: RETURN ;
443
444 ;+
445 ; **-$ACTRM-REMOVE TASK FROM THE ACTIVE TASK LIST
446 ;
447 ; THIS ROUTINE IS CALLED TO REMOVE A TCB FROM THE ACTIVE TASK LIST.
448 ;
449 ; INPUTS:
450 ;
451 ; R0=ADDRESS OF THE TCB TO REMOVE.
452 ;
453 ; OUTPUTS:
454 ;
455 ; C=1 IF THERE IS NO ENTRY IN THE LIST THAT MATCHES THE TCB ADDRES
456 ; C=0 IF A MATCHING ENTRY IS REMOVED FROM THE LIST.
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-8
457 ;
458 ; R0 IS PRESERVED ACROSS THE CALL.
459 ;
460 ;-
461
462 000460 012701 177726G $ACTRM::MOV #$ACTHD-T.ACTL,R1 ;GET ADDR OF LISTHEAD
463 000464 010102 40$: MOV R1,R2 ;SAVE PREVIOUS TCB ADDR
464 000466 016201 000052 MOV T.ACTL(R2),R1 ;GET NEXT TCB ADDR
465 000472 001770 BEQ 25$ ;IF EQ END OF LIST FOUND
466 000474 020001 CMP R0,R1 ;DOES NEXT TCB ADDR EQ OURS?
467 000476 001372 BNE 40$ ;IF NE NO -- KEEP LOOKING
468 000500 016062 000052 000052 MOV T.ACTL(R0),T.ACTL(R2) ;REMOVE ENTRY
469 000506 RETURN ;EXIT
470 .DSABL LSB
471
472 ;+
473 ; **-$STPCT-STOP CURRENT TASK
474 ; **-$STPTK-STOP TASK
475 ;
476 ; THESE ROUTINES ARE CALLED TO STOP A TASK AND REALLOCATE THE TASK'S
477 ; PARTITION.
478 ;
479 ; INPUTS:
480 ;
481 ; R0=TCB ADDRESS OF TASK TO STOP (IF ENTRY AT $STPTK)
482 ;
483 ; OUTPUTS:
484 ;
485 ; NONE
486 ;-
487
488 000510 016700 000000G $STPCT::MOV $TKTCB,R0 ;PICK UP ADDRESS OF CURRENT TASK TCB ;**-4
489 000514 052760 000020 000034 $STPTK::BIS #T2.STP,T.ST2(R0) ;SET STOP BIT IN TASK'S TCB
490 ; TM106
491 ; TM106
492 .IF DF D$$ISK ; TM106
493 ; TM106
494 CALL $SETCR ;INSURE THAT TASK WILL STOP
495 MOV T.PCB(R0),R0 ;POINT TO TASK PCB
496 BR $NXTSK ;REALLOCATE TASK PARTITION
497
498 .IFF ; TM106
499 ; TM106
500 000522 CALLR $SETCR ;INSURE THAT TASK WILL STOP ; TM106
501 ; TM106
502 .IFT ; TM106
503 ; TM106
504 ;+
505 ; **-$RLPAR-RELEASE TASK PARTITION
506 ; **-$RLPR1-RELEASE PARTITION
507 ;
508 ; THIS ROUTINE IS CALLED TO RELEASE A PARTITION OWNED BY A TASK AND TO
509 ; ASSIGN THE PARTITION TO THE NEXT HIGHEST PRIORITY TASK WAITING TO
510 ; OCCUPY THE PARTITION.
511 ;
512 ; INPUTS:
513 ;
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-9
514 ; R0=ADDRESS OF THE TCB OF THE OWNER TASK (IF ENTRY AT $RLPAR)
515 ; R1=ADDR OF SUBPARTITION PCB TO RELEASE (IF ENTRY AT $RLPR1)
516 ; R3=ADDRESS OF MAIN PARTITION PCB (IF ENTRY AT $RLPR1)
517 ;
518 ; OUTPUTS:
519 ;
520 ; THE PARTITION IS RELEASED AND ASSIGNED TO THE NEXT HIGHEST
521 ; PRIORITY TASK WAITING TO OCCUPY THE PARTITION.
522 ;-
523
524 $RLPAR::MOV T.PCB(R0),R1 ;GET ADDRESS OF PARTITION PCB
525 MOV P.MAIN(R1),R0 ;GET MAIN PCB ADDRESS
526 MOV R0,R3 ;COPY MAIN PCB ADDRESS
527
528
529 .IF DF D$$YNM&M$$MGE
530
531 BIT #PS.SYS,P.STAT(R0) ;SYSTEM CONTROLLED PARTITION?
532 BEQ $RLPR1 ;IF EQ NO
533 10$: MOV R0,R2 ;SAVE ADDRESS OF PREVIOUS PCB
534 MOV P.SUB(R2),R0 ;GET ADDRESS OF NEXT PCB
535 CMP R0,R1 ;TASK PCB?
536 BNE 10$ ;IF NE NO
537 MOV P.SUB(R0),P.SUB(R2) ;REMOVE PCB FROM LIST
538
539 .ENDC
540
541
542 $RLPR1::ADD #P.BUSY,R1 ;POINT TO BUSY FLAG
543 BICB (R1)+,(R1) ;CLEAR SUBPARTITION BUSY
544 BICB -(R1),P.BUSY+1(R3) ;CLEAR MAIN PARTITION BUSY
545
546 ;+
547 ; **-$NXTSK-ASSIGN NEXT TASK TO PARTITION
548 ;
549 ; THIS ROUTINE IS CALLED TO ASSIGN A PARTITION TO THE HIGHEST PRIORITY
550 ; TASK WAITING TO OCCUPY THE PARTITION.
551 ;
552 ; INPUTS:
553 ;
554 ; R0=ADDRESS OF THE PCB OF THE PARTITION TO ASSIGN.
555 ;
556 ; OUTPUTS:
557 ;
558 ; THERE ARE FIVE POSSIBLE OUTPUTS
559 ;
560 ; 1-THE PARTITION IS NOT CURRENTLY BUSY AND A TASK IS WAITING TO
561 ; OCCUPY THE PARTITION. THE PARTITION IS ASSIGNED TO THE
562 ; WAITING TASK AND A REQUEST IS PLACED IN THE LOADER
563 ; QUEUE TO LOAD THE TASK.
564 ;
565 ; 2-THE PARTITION IS CURRENTLY OCCUPIED BY A TASK THAT IS EITHER OF
566 ; HIGHER PRIORITY THEN ALL WAITING TASKS OR IS NOT CHECK-
567 ; POINTABLE. THE PARTITION CANNOT BE ASSIGNED TO ANOTHER
568 ; TASK.
569 ;
570 ; 3-THE PARTITION IS CURRENTLY OCCUPIED BY A LOWER PRIORITY CHECK-
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-10
571 ; POINTABLE TASK. A REQUEST IS PLACED IN THE LOADER QUEUE
572 ; TO CHECKPOINT THE OWNER TASK.
573 ;
574 ; 4-THE HIGHEST PRIORITY TASK WAITING TO OCCUPY THE PARTITION
575 ; REQUIRES THE MAIN PARTITION WHICH IS CURRENLTY
576 ; OCCUPPIED BY ONE OF MORE TASKS THAT ARE EITHER OF
577 ; HIGHER PRIORITY OR ARE NOT CHECKPOINTABLE. THE PARTITION
578 ; CANNOT BE ASSIGNED.
579 ;
580 ; 5-THE HIGHEST PRIORITY TASK WAITING TO OCCUPY THE PARTITION
581 ; REQUIRES THE MAIN PARTITION WHICH IS CURRENTLY
582 ; OCCUPIED BY ONE OR MORE TASKS OF LOWER PRIORITY
583 ; THAT ARE CHECKPOINTABLE. A REQUEST IS PLACED IN THE
584 ; LOADER QUEUE TO CHECKPOINT EACH TASK.
585 ;-
586
587 $NXTSK::SAVNR ;SAVE R4 AND R5
588 MOV P.MAIN(R0),R5 ;GET MAIN PARTITION PCB ADDRESS
589 10$: MOV P.WAIT(R5),R4 ;GET 1ST TCB IN WAIT LIST
590 20$: BEQ 100$ ;IF EQ END OF LIST
591 BIT #T2.STP,T.ST2(R4) ;TASK STOPPED?
592
593
594 .IF DF A$$TRP
595
596 BEQ 21$ ;IF EQ NO
597 TST T.ASTL(R4) ;DOES TASK HAVE PENDING AST?
598 BEQ 40$ ;IF EQ NO
599 21$: ;REF LABEL
600
601 .IFF
602
603 BNE 40$ ;IF NE YES
604
605 .ENDC
606
607
608 .IF DF D$$YNM&M$$MGE
609
610 BIT #PS.SYS,P.STAT(R5) ;SYSTEM CONTROLLED PARTITION?
611 BNE 110$ ;IF NE YES
612
613 .ENDC
614
615
616 TSTB P.BUSY+1(R5) ;MAIN PARTITION OCCUPIED?
617 BMI 50$ ;IF MI YES
618 MOV T.PCB(R4),R2 ;GET REQUESTED PARTITION PCB ADDRESS
619 TSTB P.BUSY+1(R2) ;REQUESTED PARTITION BUSY?
620 BNE 30$ ;IF NE YES
621 25$: MOV R5,R0 ;COPY MAIN PARTITION PCB ADDRESS
622 ADD #P.WAIT,R0 ;CALCULATE PCB LISTHEAD ADDRESS
623 MOV R4,R1 ;COPY TCB ADDRESS
624 CALL $QRMVT ;REMOVE TCB FROM LIST
625 MOV T.PCB(R4),R0 ;GET PCB ADDRESS
626 MOV R4,P.TCB(R0) ;PUT TCB ADDRESS IN PCB
627 ADD #P.BUSY,R0 ;POINT TO BUSY FLAG
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-11
628 BISB (R0)+,(R0) ;SET SUBPARTITION BUSY
629 BISB -(R0),P.BUSY+1(R5) ;SET MAIN PARTITION BUSY
630 CALL $LOADT ;PUT TASK IN LOADER QUEUE
631 BR 10$ ;GO AGAIN
632 30$: ;REF LABEL
633
634
635 .IF DF C$$CKP
636
637 TSTB P.BUSY(R2) ;MAIN PARTITION REQUESTED
638 BMI 50$ ;IF MI YES
639 MOV P.TCB(R2),R1 ;GET OWNER TASK TCB ADDRESS
640 CALL $TSTCP ;SHOULD TASK BE CHECKPOINTED?
641 BCS 40$ ;IF CS NO
642 CALL $ICHKP ;INITIATE CHECKPOINT
643
644 .IFTF
645
646 40$: MOV (R4),R4 ;POINT TO NEXT TCB
647 BR 20$ ;
648
649 .IFT
650
651 50$: MOV R5,R0 ;COPY MAIN PCB ADDRESS
652 60$: BITB P.BUSY(R0),P.BUSY+1(R0) ;IS THIS PARTITION BUSY?
653 BEQ 70$ ;IF EQ NO
654 MOV P.TCB(R0),R1 ;GET OWNER TCB ADDRESS
655 CALL $TSTCP ;SHOULD TASK BE CHECKPOINTED?
656 BCS 100$ ;IF CS NO
657 70$: MOV P.SUB(R0),R0 ;GET NEXT PARTITION PCB ADDRESS
658 BNE 60$ ;IF NE MORE TO GO
659 80$: BITB P.BUSY(R5),P.BUSY+1(R5) ;IS THIS PARTITION BUSY?
660 BEQ 90$ ;IF EQ NO
661 MOV P.TCB(R5),R1 ;GET OWNER TCB ADDRESS
662 CALL $ICHKP ;INITIATE CHECKPOINT
663 90$: MOV P.SUB(R5),R5 ;GET NEXT SUBPARTITION PCB
664 BNE 80$ ;IF NE MORE TO GO
665
666 .IFF
667
668 50$: ;REF LABEL
669
670 .IFTF
671
672 100$: RETURN ;EXIT
673
674
675 .IF DF D$$YNM&M$$MGE
676
677 110$: MOV T.PCB(R4),R4 ;POINT TO TASK PCB
678 CALL $FNDSP ;ATTEMPT TO FIND SPACE IN PARTITION
679 MOV P.SIZE(R4),R0 ;SAVE SIZE OF PARTITION
680 MOV P.TCB(R4),R4 ;RESTORE TCB ADDRESS
681 BCC 25$ ;IF CC SPACE WAS FOUND
682
683
684 .IF DF C$$CKP
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-12
685
686 150$: MOV P.REL(R5),R3 ;SET BASE ADDRESS OF FIRST HOLE
687 MOV R5,R2 ;SET ADDRESS OF PREVIOUS PCB
688 160$: MOV P.SUB(R2),R2 ;GET ADDRESS OF NEXT PCB
689 BEQ 210$ ;IF EQ ALLOCATION FAILURE
690
691
692 .IF DF L$$DRV!P$$LAS
693
694 BIT #PS.DRV!PS.COM,P.STAT(R2) ;DRIVER OR COMMON PARTITION?
695 BNE 165$ ;IF NE YES
696
697 .ENDC
698
699
700 MOV P.TCB(R2),R1 ;GET TCB ADDRESS OF OWNER TASK
701 CALL $TSTCP ;CAN TASK BE CHECKPOINTED?
702 BCC 170$ ;IF CC YES
703 165$: MOV R2,R5 ;SAVE ADDRESS OF PREVIOUS PCB
704 MOV P.REL(R5),R3 ;CALCULATE NEW HOLE BASE ADDRESS
705 ADD P.SIZE(R5),R3 ;
706 BR 160$ ;
707 170$: CLR -(SP) ;INITIALIZE TOP OF HOLE
708 MOV P.SUB(R2),R1 ;GET ADDRESS OF NEXT PCB
709 BNE 180$ ;IF NE ONE EXISTS
710 MOV P.MAIN(R2),R1 ;RETRIEVE ADDRESS OF MAIN PCB
711 ADD P.SIZE(R1),(SP) ;CALCULATE ADDRESS OF TOP OF HOLE
712 180$: ADD P.REL(R1),(SP) ;
713 190$: SUB R3,(SP) ;CALCULATE SIZE OF HOLE
714 CMP (SP)+,R0 ;HOLE BIG ENOUGH?
715 BLO 160$ ;IF LO NO
716 MOV R2,R4 ;SAVE ADDRESS OF LAST PCB
717 200$: MOV P.SUB(R5),R5 ;GET ADDRESS OF NEXT PCB
718 MOV P.TCB(R5),R1 ;GET ADDRESS OF TASK TCB
719 CALL $ICHKP ;INITIATE CHECKPOINT
720 CMP R4,R5 ;LAST PCB TO EXAMINE?
721 BNE 200$ ;IF NE NO
722
723
724 .IF DF D$$SHF
725
726 205$: RETURN ;
727 210$: MOV $SHFPT,R0 ;GET TCB ADDRESS OF MEMORY SHUFFLER
728 BEQ 205$ ;IF EQ SHUFFLER NOT PRESENT
729 JMP $EXRQN ;REQUEST SHUFFLER TO RUN
730
731 .IFF
732
733 210$: RETURN ;
734
735 .ENDC
736
737
738 .IFF ; TM118
739 ; TM118
740 RETURN ; ; TM118
741 ; TM118
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-13
742 .ENDC
743
744
745 .ENDC
746
747
748 ;+
749 ; **-$FNDSP-FIND SPACE IN PCB LIST
750 ;
751 ; THIS ROUTINE IS CALLED TO FIND SPACE WITHIN A DYNAMICALLY ALLOCATED
752 ; PCB LIST REPRESENTING THE ALLOCATION STATE OF A SYSTEM CONTROLLED
753 ; PARTITION OR DYNAMIC CHECKPOINT FILE.
754 ;
755 ; INPUTS:
756 ;
757 ; R4=ADDRESS OF PCB TO FIND SPACE FOR
758 ; R5=ADDRESS OF MAIN PCB FOR SPACE IN WHICH TO ALLOCATE
759 ;
760 ; OUTPUTS:
761 ;
762 ; C=0 IF ALLOCATION WAS SUCCESSFUL
763 ; SUB PCB IS LINKED INTO ALLOCATION LIST
764 ; C=1 IF ALLOCATION FAILURE
765 ;
766 ; R0,R1,R2 ARE MODIFIED.
767 ;-
768
769
770 .IF DF D$$YNM&M$$MGE!D$$YNC
771
772 $FNDSP::MOV R5,R0 ;COPY ADDRESS OF MAIN PCB
773 MOV P.REL(R5),R2 ;SET HIGHEST ADDRESS IN LAST PARTITION
774 10$: MOV P.SUB(R0),R1 ;GET ADDRESS OF NEXT PCB
775 BEQ 20$ ;IF EQ END OF LIST
776 MOV P.REL(R1),-(SP) ;CALCULATE SIZE OF HOLE
777 SUB R2,(SP) ;
778 CMP (SP)+,P.SIZE(R4) ;HOLE BIG ENOUGH?
779 BHIS 30$ ;IF HIS YES
780 MOV R1,R0 ;SAVE ADDRESS OF PREVIOUS PCB
781 MOV P.REL(R1),R2 ;CALCULATE BASE ADDRESS OF NEXT HOLE
782 ADD P.SIZE(R1),R2 ;
783 BR 10$ ;
784 20$: MOV P.REL(R5),-(SP) ;CALCULATE SIZE OF LAST HOLE
785 ADD P.SIZE(R5),(SP) ;
786 SUB R2,(SP) ;
787 CMP (SP)+,P.SIZE(R4) ;HOLE BIG ENOUGH?
788 BLO 40$ ;IF LO NO
789 30$: MOV R2,P.REL(R4) ;SET ADDRESS OF TASK PARTITION
790 MOV R4,P.SUB(R0) ;LINK ALLOCATED PARTITION TO PREVIOUS
791 MOV R1,P.SUB(R4) ;LINK NEXT TO TASK PCB
792 40$: RETURN ;
793
794 .ENDC
795
796
797 .IFT
798
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-14
799 ;+
800 ; **-$TSTCP-TEST IF CHECKPOINT SHOULD BE INITIATED
801 ;
802 ; INPUTS:
803 ;
804 ; R1=ADDRESS OF THE TCB OF THE OWNER TASK.
805 ; R4=ADDRESS OF THE TCB OF THE REQUESTED TASK.
806 ;
807 ; OUTPUTS:
808 ;
809 ; C=0 IF CHECKPOINT SHOULD BE INITIATED.
810 ; C=1 IF CHECKPOINT SHOULD NOT BE INITIATED.
811 ;-
812
813 $TSTCP:: ;
814
815
816 .IF DF S$$WPC&D$$ISK
817
818 MOV R5,-(SP) ;SAVE R5
819
820 .IFTF
821
822 BIT #T2.STP,T.ST2(R1) ;TASK STOPPED FOR TERMINAL INPUT?
823
824
825 .IF DF A$$TRP
826
827 BEQ 3$ ;IF EQ NO
828 TST T.ASTL(R1) ;TASK HAVE PENDING AST?
829 BEQ 5$ ;IF EQ NO
830 3$: ;REF LABEL
831
832 .IFF
833
834 BNE 5$ ;IF NE YES
835
836 .ENDC
837
838
839 .IFT
840
841 MOV #S$$WPR,R5 ;PICK UP INITIAL PRIORITY DIFFERENCE
842 BIT #TS.CKP!TS.CKR!TS.OUT,T.STAT(R1) ;TASK IN MEMORY?
843 BNE 4$ ;IF NE NO
844 MOV T.PCB(R1),R5 ;POINT TO TASK PCB
845 MOV P.HDR(R5),R5 ;POINT TO TASK HEADER
846 MOVB H.SPRI(R5),R5 ;PICK UP SWAPPING PRIORITY
847 4$: CLR -(SP) ;EXTRACT TASK PRIORITY BYTE
848 BISB T.PRI(R1),(SP) ;
849 ADD (SP)+,R5 ;CALCULATE EFFECTIVE PRIORITY
850 CMP T.PRI(R4),R5 ;REQUESTED TASK HIGHER PRIORITY?
851 BLE 10$ ;IF LE NO
852
853 .IFF
854
855 CMPB T.PRI(R4),T.PRI(R1) ;REQUESTED TASK HIGHER PRIORITY?
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-15
856 BLOS 10$ ;IF LOS NO
857
858 .IFTF
859
860 5$: CLC ;ASSUME TASK CHECKPOINTABLE
861 BIT #T2.CKD!T2.CHK!T2.FXD!T2.HLT,T.ST2(R1) ;IS IT? ; TM068
862 BEQ 20$ ;IF EQ TASK CAN BE CHECKPOINTED ;**-1
863 10$: SEC ;INDICATE NO CHECKPOINT
864 20$: ;REF LABEL
865
866 .IFT
867
868 MOV (SP)+,R5 ;RESTORE R5
869
870 .ENDC
871
872
873 RETURN ;
874
875 ;+
876 ; **-$ICHKP-INITIATE CHECKPOINT
877 ;
878 ; INPUTS:
879 ;
880 ; R1=ADDRESS OF THE TCB OF THE TASK TO BE CHECKPOINTED.
881 ;-
882
883 $ICHKP::BIT #TS.OUT,T.STAT(R1) ;TASK BEING READ IN?
884 BNE 20$ ;IF NE YES
885 BIT #TS.CKP,T.STAT(R1) ;TASK ALREADY BEING CHECKPOINTED?
886 BNE 30$ ;IF NE YES
887 MOV R1,R0 ;SET ADDRESS OF TCB
888 CALL $SETCR ;SET A CONDITIONAL SCHEDULE REQUEST
889 MOV R0,R1 ;RESTORE ADDRESS OF TCB
890 TSTB T.IOC(R1) ;I/O IN PROGRESS
891 BEQ $CHKPT ;IF EQ NO
892 20$: BIS #TS.CKR,T.STAT(R1) ;SET CHECKPOINT REQUEST
893 30$: RETURN ;
894
895 ;+
896 ; ***-$CHKPT-CHECKPOINT TASK
897 ;
898 ; THIS ROUTINE IS CALLED TO CHECKPOINT A TASK.
899 ;
900 ; INPUTS:
901 ;
902 ; R1=ADDRESS OF THE TCB OF THE TASK TO BE CHECKPOINTED.
903 ;
904 ; OUTPUTS:
905 ;
906 ; THE CHECKPOINT FLAG IS SET IN THE TASK STATUS WORD, THE TASK
907 ; IS PLACED IN THE LOADER QUEUE, AND THE LOADER IS REQUESTED
908 ; TO CHECKPOINT THE TASK.
909 ;-
910
911 $CHKPT:: ;
912
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-16
913
914 .IF DF D$$YNC
915
916 SAVNR ;SAVE R4 AND R5
917 BIC #T2.CAF,T.ST2(R1) ;CLEAR CHECKPOINT ALLOCATION FAILURE
918 MOV R1,R3 ;COPY TCB ADDRESS
919 MOV #P.SIZE+2,R1 ;SET SIZE OF CHECKPOINT PCB
920 CALL $ALOCB ;ATTEMPT TO ALLOCATE PCB
921 BCS 20$ ;IF CS ALLOCATION FAILURE
922 MOV R0,R4 ;COPY ADDRESS OF ALLOCATED PCB
923 ADD R1,R0 ;POINT TO END OF ALLOCATED PCB
924 MOV T.PCB(R3),R1 ;POINT TO TASK PCB
925 MOV P.SIZE(R1),-(R0) ;SET SIZE OF TASK PCB
926
927
928 .IF DF M$$MGE
929
930 ADD #7,(R0) ;ROUND TO NEXT DISK BLOCK
931 ROR (R0) ;CONVERT TO DISK BLOCKS
932 ASR (R0) ;
933 ASR (R0) ;
934
935 .IFF
936
937 ADD #777,(R0) ;ROUND TO NEXT BLOCK BOUNDARY
938 CLRB (R0) ;CLEAR EXCESS BITS
939 SWAB (R0) ;CONVERT TO 256. WORD BLOCKS
940 ASR (R0) ;
941
942 .ENDC
943
944
945 MOV #$CFLPT,R5 ;POINT TO FIRST CHECKPOINT FILE PTR
946 10$: MOV (R5),R5 ;GET NEXT CHECKPOINT FILE PCB ADDRESS
947 BNE 30$ ;IF NE THERE IS ONE
948 MOV R4,R0 ;ELSE GET ADDRESS OF CHECKPOINT PCB
949 MOV #P.SIZE+2,R1 ;SET ITS SIZE
950 MOV R3,R5 ;SAVE TCB ADDRESS
951 CALL $DEACB ;DEALLOCATE CHECKPOINT PCB
952 MOV R5,R3 ;RESTORE TCB ADDRESS
953 20$: MOV R3,R1 ;RESTORE TCB ADDRESS
954 BIS #T2.CAF,T.ST2(R3) ;SET CHECKPOINT ALLOCATION FAILURE
955 BIT #T3.CAL,T.ST3(R3) ;CHECKPOINT SPACE ALLOCATED WITH TASK?
956 BNE 50$ ;IF NE YES
957 MOV $TKNPT,R0 ;ELSE POINT TO TKTN TCB
958 BEQ 25$ ;IF EQ TKTN NOT INSTALLED
959 TST T.STAT(R0) ;TKTN ALREADY ACTIVE?
960 BMI $EXRQN ;IF MI NO
961 25$: RETURN ;
962 30$: TST P.REL(R5) ;ALLOCATION IN THIS FILE TURNED OFF?
963 BNE 10$ ;IF NE YES
964 CALL $FNDSP ;ATTEMPT TO ALLOCATE SPACE IN FILE
965 BCS 10$ ;IF CS ALLOCATION FAILURE
966 MOV R5,P.MAIN(R4) ;SET MAIN PCB POINTER
967 MOV R3,R1 ;COPY TCB POINTER
968 MOV R4,T.CPCB(R1) ;SET ADDRESS OF CHECKPOINT PCB
969 50$: ;REF LABEL
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-17
970
971 .ENDC
972
973
974 BIS #TS.CKP,T.STAT(R1) ;SET CHECKPOINT IN PROGRESS BIT
975
976 .ENDC
977
978
979 ;+
980 ; **-$LOADT-PUT TASK IN LOADER QUEUE
981 ;
982 ; THIS ROUTINE PUTS A TASK IN THE LOADER QUEUE FOR AN INITIAL LOAD OR
983 ; A CHECKPOINT OPERATION.
984 ;
985 ; INPUTS:
986 ;
987 ; R1=ADDRESS OF TASK CONTROL BLOCK
988 ;
989 ; OUTPUTS:
990 ;
991 ; NONE
992 ;-
993
994 $LOADT::MOV $LDRPT,R0 ;PICK UP TCB ADDRESS OF LOADER
995
996 .ENDC
997
998
999 ;+
1000 ; **-$EXRQP-EXECUTIVE REQUEST WITH QUEUE INSERT BY PRIORITY
1001 ; **-$EXRQF-EXECUTIVE REQUEST WITH QUEUE INSERT FIFO
1002 ; **-$EXRQN-EXECUTIVE REQUEST WITH NO QUEUE INSERTION
1003 ;
1004 ; THESE ROUTINES PROVIDE A STANDARD INTERFACE TO ALL TASKS REQUESTED BY
1005 ; THE EXECUTIVE.
1006 ;
1007 ; INPUTS:
1008 ;
1009 ; R0=TCB ADDRESS OF TASK TO REQUEST
1010 ; R1=ADDR OF PACKET TO QUEUE TO TASK (IF ENTRY AT $EXRQP/$EXRQF)
1011 ;
1012 ; OUTPUTS:
1013 ;
1014 ; C=0 IF THE REQUEST WAS SUCCESSFULLY COMPLETED. ; TM086
1015 ; C=1 IF THE TASK WAS NOT SUCCESSFULLY REQUESTED. ; TM086
1016 ; Z=0 IF PCB ALLOCATION FAILURE. ; TM086
1017 ; Z=1 IF TASK ACTIVE, BEING REMOVED, OR BEING FIXED. ; TM086
1018 ;- ;**-1
1019
1020 .ENABL LSB
1021 000526 012746 000000G $EXRQP::MOV #$QINSP,-(SP) ;PUSH ADDR OF QUEUE INSERT BY PRIORITY
1022 000532 000402 BR 1$ ;JOIN COMMON CODE
1023 000534 012746 000000G $EXRQF::MOV #$QINSF,-(SP) ;PUSH ADDR OF QUEUE INSERT FIFO
1024 000540 062700 000012 1$: ADD #T.RCVL,R0 ;POINT TO TASK RECEIVE LIST
1025 000544 CALL @(SP)+ ;INSERT PACKET IN RECEIVE QUEUE
1026 000546 162700 000012 SUB #T.RCVL,R0 ;POINT BACK TO START OF TCB
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-18
1027 000552 032760 000060 000034 $EXRQN::BIT #T2.STP*2!T2.STP,T.ST2(R0) ;TASK STOPPED?
1028 000560 001405 BEQ 2$ ;IF EQ NO
1029 000562 042760 000060 000034 BIC #T2.STP*2!T2.STP,T.ST2(R0) ;CLEAR TASK STOP BIT
1030 000570 CALL $SETCR ;SET CONDITIONAL SCHEDULE REQUEST
1031 000574 005001 2$: CLR R1 ;USE DEFAULT UIC
1032 .DSABL LSB
1033
1034 ;+
1035 ; **-$TSKRT-TASK REQUEST (DEFAULT UCB)
1036 ; **-$TSKRQ-TASK REQUEST (SPECIFY UCB)
1037 ; **-$TSKRP-TASK REQUEST (SPECIFY DEFAULT UIC)
1038 ;
1039 ; THIS ROUTINE IS CALLED TO REQUEST THE EXECUTION OF A TASK.
1040 ;
1041 ; INPUTS:
1042 ;
1043 ; R0=ADDRESS OF THE TCB OF THE TASK TO BE REQUESTED.
1044 ; R1=REQUEST UIC.
1045 ; R2=UCB ADDRESS IF ENTRY AT $TSKRQ.
1046 ; R3=DEFAULT UIC IF ENTRY AT $TSKRP.
1047 ;
1048 ; OUTPUTS:
1049 ;
1050 ; C=1 IF TASK IS ALREADY ACTIVE OR IS BEING FIXED IN MEMORY.
1051 ; Z=1 IF TASK ACTIVE OR BEING FIXED.
1052 ; Z=0 IF PCB ALLOCATION FAILURE.
1053 ; C=0 IF THE REQUEST IS SUCCESSFULLY COMPLETED.
1054 ;-
1055
1056
1057 .IF NDF M$$MUP
1058
1059 000576 016702 000000G $TSKRT::MOV $COPT,R2 ;GET ADDRESS OF COMMAND OUTPUT UCB
1060 000602 $TSKRP:: ;REF LABEL
1061 000602 010003 $TSKRQ::MOV R0,R3 ;POINT TO TASK STATUS WORD
1062 000604 062703 000032 ADD #T.STAT,R3 ;
1063 000610 012746 100000 MOV #TS.EXE,-(SP) ;ASSUME TASK IS ACTIVE OR BEING FIXED
1064 000614 031623 BIT (SP),(R3)+ ;TASK ALREADY ACTIVE?
1065 000616 001417 BEQ 10$ ;IF EQ YES
1066 000620 032723 004000 BIT #T2.BFX,(R3)+ ;TASK BEING FIXED?
1067 000624 001014 BNE 10$ ;IF NE YES
1068 000626 032713 020000 BIT #T3.REM,(R3) ;REMOVE ON EXIT?
1069 000632 001011 BNE 10$ ;IF NE YES
1070 000634 024343 CMP -(R3),-(R3) ;POINT BACK TO FIRST STATUS WORD
1071
1072 .IFF
1073
1074 $TSKRT::MOV $COPT,R2 ;GET ADDRESS OF COMMAND OUTPUT UCB
1075 $TSKRQ::MOV R1,R3 ;MAKE CURRENT UIC DEFAULT UIC
1076 $TSKRP::MOV #TS.EXE,-(SP) ;ASSUME TASK IS ACTIVE OR BEING FIXED
1077 BIT (SP),T.STAT(R0) ;TASK ALREADY ACTIVE?
1078 BEQ 10$ ;IF EQ YES
1079 BIT #T2.BFX,T.ST2(R0) ;TASK BEING FIXED?
1080 BNE 10$ ;IF NE YES
1081 BIT #T3.REM,T.ST3(R0) ;REMOVE TASK ON EXIT?
1082 BNE 10$ ;IF NE YES
1083 MOV R3,T.ACTL(R0) ;SET DEFAULT UIC
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-19
1084 MOV R0,R3 ;POINT TO TASK STATUS WORD
1085 ADD #T.STAT,R3 ;
1086
1087 .ENDC
1088
1089
1090 000636 041623 BIC (SP),(R3)+ ;SET TASK ACTIVE
1091 000640 005016 CLR (SP) ;CLEAR FAILURE INDICATOR
1092 000642 010160 000022 MOV R1,T.EFLG(R0) ;SAVE REQUEST UIC
1093 000646 010260 000026 MOV R2,T.UCB(R0) ;SET ADDRESS OF 'TI' UCB
1094
1095
1096 .IF DF D$$ISK
1097
1098 BIT #T2.FXD,(R3) ;TASK FIXED IN MEMORY?
1099 BNE 20$ ;IF NE YES
1100
1101
1102 .IF DF D$$YNM&M$$MGE
1103
1104 MOV T.PCB(R0),R1 ;GET ADDRESS OF TASK PCB
1105 BIT #PS.SYS,P.STAT(R1) ;SYSTEM CONTROLLED PARTITION?
1106 BEQ 7$ ;IF EQ NO
1107 MOV R0,-(SP) ;SAVE TASK TCB ADDRESS
1108 MOV #P.LGTH,R1 ;SET LENGTH OF BLOCK NEEDED
1109 CALL $ALOCB ;ALLOCATE PCB
1110 MOV R0,R2 ;SAVE ADDRESS OF ALLOCATED BLOCK
1111 MOV (SP)+,R0 ;RETRIEVE TASK TCB ADDRESS
1112 ROR (SP) ;CAPTURE CARRY BIT
1113 BEQ 3$ ;IF EQ ALLOCATION WAS SUCCESSFUL
1114 BIS (SP),T.STAT(R0) ;SET TASK INACTIVE
1115 INC (SP) ;SET ALLOCATION FAILURE
1116 BR 10$ ;
1117 3$: MOV T.PCB(R0),R1 ;GET MAIN PARTITION PCB ADDRESS
1118 MOV R2,T.PCB(R0) ;SET ADDRESS OF ALLOCATED PCB
1119 TST (R2)+ ;SKIP OVER LINK WORD
1120 MOV T.PRI(R0),(R2)+ ;SET PRIORITY AND I/O COUNT
1121 MOV P.NAM(R1),(R2)+ ;INSERT PARTITION NAME
1122 MOV P.NAM+2(R1),(R2)+ ;
1123 CLR (R2)+ ;CLEAR POINTER TO NEXT SUBPARTITION
1124 MOV R1,(R2)+ ;SET BACK POINTER TO MAIN PARTITION PCB
1125 CLR (R2)+ ;CLEAR RELOCATION BASE
1126 MOV T.MXSZ(R0),(R2)+ ;SET PARTITION SIZE IN 32W BLOCKS
1127 CLR (R2)+ ;CLEAR WAIT QUEUE POINTER
1128 MOV T.MXSZ(R0),(R2)+ ;INITIALLIZE SWAP SIZE
1129 CLR (R2)+ ;CLEAR PARTITION BUSY FLAGS
1130 MOV R0,(R2)+ ;SET OWNER TCB ADDRESS
1131 MOV #PS.SYS!PS.DEL,(R2)+ ;SYSTEM CONTROLLED, MARKED FOR DEL
1132 CLR (R2)+ ;INITIALLY CLEAR HEADER POINTER
1133
1134
1135 .IF DF P$$LAS
1136
1137 CLR (R2)+ ;CLEAR PROTECTION WORD
1138 MOV R2,R1 ;SAVE POINTER TO ATTACHMENT LISTHEAD
1139 CLR (R2)+ ;SET UP ATTACHMENT LISTHEAD
1140 MOV R1,(R2)+ ;
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-20
1141
1142 .ENDC
1143
1144
1145 .ENDC
1146
1147
1148 7$: MOV R0,R1 ;COPY TASK TCB ADDRESS
1149 MOV T.PCB(R0),R0 ;GET ADDRESS OF TASK PCB
1150 MOV P.MAIN(R0),R0 ;GET ADDRESS OF MAIN PARTITION PCB
1151 ADD #P.WAIT,R0 ;POINT TO PARTITION WAIT QUEUE LISTHEAD
1152 CALL $QINSP ;PUT TASK IN PARTITION WAIT QUEUE
1153 MOV R1,R0 ;RESTORE TCB ADDRESS
1154 10$: MOV T.PCB(R0),R0 ;GET ADDRESS OF TASK PARTITION PCB
1155 CALL $NXTSK ;SELECT NEXT TASK
1156 BR 30$ ;
1157
1158 .IFTF
1159
1160 000652 20$: CALL $BILDS ;BUILD A STACK FOR TASK
1161
1162 .IFT
1163
1164 30$: ASL (SP)+ ;SET SUCCESS/FAILURE INDICATION
1165
1166 .IFF
1167
1168 000656 006326 10$: ASL (SP)+ ;SET SUCCESS/FAILURE INDICATION
1169
1170 .ENDC
1171
1172
1173 000660 RETURN ;
1174
1175 ;+
1176 ; **-$UISET-ESTABLISH DEFAULT UIC AND CURRENT UIC
1177 ;
1178 ; THIS ROUTINE ESTABLISHES DEFAULT AND CURRENT FOR REQUESTED TASKS
1179 ; IN MULTI-USER SYSTEMS.
1180 ;
1181 ; INPUTS:
1182 ;
1183 ; R1=REQUEST UIC
1184 ; R2=ADDRESS OF SECOND STATUS WORD OF CURRENT TASK
1185 ; R4=ADDRESS OF HEADER OF CURRENT TASK
1186 ;
1187 ; OUTPUTS:
1188 ;
1189 ; R1=CURRENT UIC
1190 ; R3=DEFAULT UIC
1191 ; C=1 IF NONPRIVILEGED TASK IS TRYING TO CHANGE UIC
1192 ; C=0 OTHERWISE
1193 ;-
1194
1195 .IF DF M$$MUP
1196
1197 $UISET::MOV H.DUIC(R4),R3 ;PROPAGATE DEFAULT UIC
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-21
1198 TST R1 ;UIC SPECIFIED?
1199 BEQ 10$ ;IF EQ NO
1200 MOV R1,R3 ;USE SPECIFIED UIC
1201 BIT #T3.PRV,2(R2) ;CURRENT TASK PRIVILEGED?
1202 BNE 20$ ;IF NE YES
1203 CMP R1,H.CUIC(R4) ;NONPRIVILEGED TASK CHANGING UIC?
1204 BEQ 10$ ;IF EQ NO
1205 SEC ;ELSE RETURN C-BIT SET
1206 10$: MOV H.CUIC(R4),R1 ;FORCE PROPAGATION OF CURRENT UIC
1207 20$: RETURN ;
1208
1209 .ENDC
1210
1211
1212 ;+
1213 ; **-$MAPTK-MAP TASK ADDRESS WINDOW
1214 ;
1215 ; THIS ROUTINE IS CALLED TO MAP THE FIRST WINDOW BLOCK IN A TASK'S
1216 ; HEADER IN A MAPPED SYSTEM FROM ITS PCB AND TCB.
1217 ;
1218 ; INPUTS:
1219 ;
1220 ; R1=POINTER TO NUMBER OF WINDOW BLOCKS IN THE TASK HEADER.
1221 ; R5=ADDRESS OF THE TASK CONTROL BLOCK FOR THE TASK.
1222 ;
1223 ; OUTPUTS:
1224 ;
1225 ; R1=ADDRESS OF LAST PDR IMAGE IN TASK HEADER.
1226 ; R2 IS MODIFIED.
1227 ;-
1228
1229
1230 .IF DF M$$MGE
1231
1232 000662 005721 $MAPTK::TST (R1)+ ;POINT TO TASK WINDOW BLOCK
1233 000664 016502 000046 MOV T.PCB(R5),R2 ;PICK UP TASK PCB ADDRESS
1234 000670 010221 MOV R2,(R1)+ ;SET TASK PCB ADDRESS (W.BPCB)
1235
1236
1237 .IF DF P$$LAS
1238
1239 BIT #T3.ROV,T.ST3(R5) ;TASK HAVE RESIDENT OVERLAYS?
1240 BNE 10$ ;IF NE YES, DON'T CHANGE WINDOW BLOCK
1241
1242 .IFTF
1243
1244 000672 012111 MOV (R1)+,(R1) ;INIT HIGH VIRT ADDR (W.BLVR)(W.BHVR)
1245 000674 016202 000016 MOV P.SIZE(R2),R2 ;PICK UP PARTITION SIZE
1246
1247 .IFT
1248
1249 SUB T.OFF(R5),R2 ;REDUCE BY TASK OFFSET IN PARTITION
1250
1251 .IFTF
1252
1253 000700 010246 MOV R2,-(SP) ;PUSH REQUIRED WINDOW SIZE
1254 000702 000316 SWAB (SP) ;CONVERT TO BYTES
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-22
1255 000704 106016 RORB (SP) ;
1256 000706 006016 ROR (SP) ;
1257 000710 006016 ROR (SP) ;
1258 000712 062611 ADD (SP)+,(R1) ;COMPLETE HIGH VIRTUAL ADDRESS (W.BHVR)
1259 000714 005321 DEC (R1)+ ;
1260
1261 .IFT
1262
1263 TST (R1)+ ;POINT TO WINDOW SIZE (W.BATT)
1264 MOV R2,(R1)+ ;SET WINDOW SIZE (W.BSIZ)
1265 MOV T.OFF(R5),(R1)+ ;SET OFFSET IN PARTITION (W.BOFF)
1266 INC R1 ;POINT TO NUMBER OF PDR'S
1267
1268 .IFF
1269
1270 000716 062701 000007 ADD #W.BNPD-W.BATT,R1 ;POINT TO NUMBER OF PDR'S BYTE
1271
1272 .ENDC
1273
1274
1275 000722 006302 ASL R2 ;SHIFT # PDR'S TO HIGH BYTE
1276 000724 000302 SWAB R2 ;# PDR'S TO LO BYTE, LAST PDR SIZE TO HI
1277 000726 162702 000377 SUB #377,R2 ;INC # PDR'S & DEC LAST PDR SIZE
1278 000732 005602 SBC R2 ;IF CS, EVEN BOUNDARY, REDUCE # PDR'S
1279 000734 110221 MOVB R2,(R1)+ ;SET NUMBER OF PDR'S (W.BNPD)
1280 000736 006002 ROR R2 ;ADJUST CORRECT SIZE
1281 000740 010211 MOV R2,(R1) ;SET SIZE FOR LAST PDR (W.BLPD)
1282 000742 112711 000006 MOVB #6,(R1) ;SET FOR READ/WRITE ACCESS (W.BLPD)
1283 000746 10$: RETURN ;
1284
1285 .ENDC
1286
1287
1288 000001 .END
REQSB MACRO M1110 22-AUG-79 07:10 PAGE 3-23
SYMBOL TABLE
AS.DEL= 000010 H.OVLY 000054 PS.PIC= 000100 T.NAM 000006 W.BOFF 000012
AS.EXT= 000004 H.PFVA 000032 PS.SYS= 000040 T.OFF 000060 W.BPCB 000000
AS.RED= 000001 H.RCVA 000036 P$$RTY= 000000 T.PCB 000046 W.BSIZ 000010
AS.WRT= 000002 H.RRVA 000062 P$$TPT= 000000 T.PRI 000002 X$$DBT= 000000
A$$CHK= 000000 H.SPRI 000060 P.BLKS 000016 T.RCVL 000012 X.DSI 000024
A$$CPS= 000000 H.TKVA 000026 P.BUSY 000024 T.RRFL 000064 X.FORK 000012
A$$TRP= 000000 H.TKVL 000030 P.HDR = ****** GX T.SRCT 000063 X.ISR 000010
A.AST 000006 H.VEXT 000056 P.IOC 000003 T.STAT 000032 X.JSR 000002
A.BYT 000004 H.WND 000044 P.LNK 000000 T.ST2 000034 X.LNK 000000
A.CBL 000002 I$$RDN= 000000 P.MAIN 000012 T.ST3 000036 X.PSW 000006
A.DQSR 177776 I.AST 000022 P.NAM 000004 T.TCBL 000030 X.REL 000022
A.IOC 000003 I.ATTL= 000044 P.OWN 000026 T.UCB 000026 X.TCB 000026
A.KSR5 177774 I.EFN 000003 P.PRI 000002 T2.ABO= 000100 $ABCTK 000000RG
A.LGTH= 000014 I.FCN 000012 P.REL 000014 T2.AST= 100000 $ABTSK 000004RG
A.MPCT 000011 I.IOSB 000014 P.SIZE 000016 T2.BFX= 004000 $ACTHD= ****** GX
A.NPR 000010 I.LGTH= 000044 P.STAT 000030 T2.CAF= 000400 $ACTRM 000460RG
A.PCB 000012 I.LNK 000000 P.SUB 000010 T2.CHK= 020000 $ACTTK 000160RG
A.PCBL 000000 I.LN2 000006 P.SWSZ 000022 T2.CKD= 010000 $BILDS 000056RG
A.PRI 000002 I.PRI 000002 P.TCB 000026 T2.DST= 040000 $CEFI = ****** GX
A.PRM 000012 I.PRM 000024 P.WAIT 000020 T2.FXD= 002000 $COMEF= ****** GX
A.STAT 000010 I.TCB 000004 R$$DER= 000000 T2.HLT= 000200 $COPT = ****** GX
A.TCB 000004 I.UCB 000010 R$$EXV= 000000 T2.SPN= 000004 $CURPR= ****** GX
A.TCBL 000006 K$$CNT= 177546 R$$SND= 000000 T2.STP= 000020 $DASTT 000336RG
C$$ORE= 002000 K$$CSR= 177546 R$$11M= 000000 T2.TIO= 001000 $DRDSE= ****** GX
G$$TPP= 000000 K$$IEN= 000115 R$$11S= 000000 T2.WFR= 000001 $EXRQF 000534RG
G$$TTK= 000000 K$$LDC= 000001 S$$YSZ= 001740 T3.ACP= 100000 $EXRQN 000552RG
H$$RTZ= 000074 K$$TPS= 000074 TS.BLK= 170700 T3.CAL= 000100 $EXRQP 000526RG
H.CSP 000000 L$$ASG= 000000 TS.CKP= 000200 T3.CLI= 001000 $MAPTK 000662RG
H.CUIC 000010 L$$DRV= 000000 TS.CKR= 000100 T3.MCR= 004000 $QASTT 000370RG
H.DSW 000046 M$$CRB= 000124 TS.EXE= 100000 T3.NET= 000020 $QINSF= ****** GX
H.DUIC 000012 M$$MGE= 000000 TS.MSG= 020000 T3.NSD= 000200 $QINSP= ****** GX
H.EFLM 000004 M$$NET= 000000 TS.NRP= 010000 T3.PMD= 040000 $RQSCH= ****** GX
H.EFSV 000040 M$$NT2= 000000 TS.OUT= 000400 T3.PRV= 010000 $SETCR 000212RG
H.FCS 000050 N$$LDV= 000001 TS.RDN= 040000 T3.REM= 020000 $SETF 000272RG
H.FORT 000052 PS.APR= 000007 TS.RUN= 004000 T3.ROV= 000040 $SETM 000276RG
H.FPSA 000042 PS.CHK= 010000 T.ACTL 000052 T3.RST= 000400 $SETRQ 000240RG
H.FPVA 000034 PS.CKP= 040000 T.ASTL 000016 T3.SLV= 002000 $SETRT 000236RG
H.GARD 000072 PS.CKR= 020000 T.ATT 000054 V$$CTR= 001200 $SIGFL= ****** GX
H.HDLN 000002 PS.COM= 000200 T.CPCB 000004 V$$RSN= 000031 $SRSTD 000420RG
H.IPC 000016 PS.DEL= 000010 T.DPRI 000040 W.BATT 000006 $STPCT 000510RG
H.IPS 000014 PS.DRV= 000020 T.EFLG 000022 W.BFPD 000014 $STPTK 000514RG
H.ISP 000020 PS.FXD= 004000 T.IOC 000003 W.BHVR 000004 $TKTCB= ****** GX
H.LUN 000076 PS.LIO= 001000 T.LBN 000041 W.BLGH 000020 $TSKHD= ****** GX
H.NLUN 000074 PS.NSF= 000400 T.LDV 000044 W.BLPD 000016 $TSKRP 000602RG
H.NML 000061 PS.OUT= 100000 T.LNK 000000 W.BLVR 000002 $TSKRQ 000602RG
H.ODVA 000022 PS.PER= 002000 T.MXSZ 000050 W.BNPD 000015 $TSKRT 000576RG
H.ODVL 000024
. ABS. 177776 000
000750 001
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 4090 WORDS ( 16 PAGES)
DYNAMIC MEMORY: 5092 WORDS ( 19 PAGES)
ELAPSED TIME: 00:00:43
[11,24]REQSB,SY0:[11,34]REQSB/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,REQSB