Google
 

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