DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦5bcf644b6⟧

    Length: 132588 (0x205ec)
    Notes: pts_type(SC)
    Names: »SYSLCO.SC«

Derivation

└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
    └─⟦this⟧ »TOSSWORK/SYSLCO.SC« 

PTS(SC)

	IDENT SYSLCO 	REL 11.0 81-01-26 870105041100 

			=3,CHANGE OF CONDITIONAL ASSEMBLY
			   PRR 11.0 80-12-23 
			=2,A CALLED COBOL PROGRAM CAN CALL AN
			   ASSEMBLER PROGRAM,AND FNDTGC USES 
			   MONITOR BLOCKS AS STACK 
			   PRR 11.0 80-12-03 
			=1,APPLICATION CONTROL BLOCK IS EXTENDED 
			   WITH 1 WORD 
			   PRR 11.0 80-11-19 
				
**********************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   SYSLCO = SYSTEM LOAD - COBOL APPLICATION CONFIGURATION PART 
* 
*   COBOL APPLICATION CONFIGURATION 
* 
**********************************************************
* 
*   COBOL APPLICATION:
*      SYSLCO READS CONFIGURATION FILE (ALREADY IN CORE) AND BUILD
*      WORK-TABLES (TABLES CONTAINING NUMBER OF REAL TASKS &
*      ITCT ADDRESS & MM-TAB ADDRESS & TID & DYNAMIC-CORE ADDRESSES). 
*      SYSLCO THEN MOVES ITSELF TO 'TOP' (LOVEST FREE ADDRESS) AND
*      WILL ALSO MOVE DDIV-PROTOTYPE. 
* 
*      APPLICATION TABLES ARE NOW 
*      BUILT FROM 'BOTTOM' (HIGHEST FREE ADDRESS) OF MEMORY.
*      DYNAMIC-CORE 
*      IS, IN CASE OF MMU AND/OR PAGING IN SYSTEM, ALSO ALLOCATED AT
*      'BOTTOM' OF MEMORY; ELSE, DYNAMIC-CORE AREAS ARE ALLOCATED 
*      AFTER MONITOR 'OVER' SYSLCO. 
* 
*      ALL USER TASKS ARE QUEUED VIA  A C T O T 
	EJECT
				
*************************** 
*                         * 
*  ENTRIES AND EXTERNALS  * 
*                         * 
*************************** 
			 
* LABEL ENTRIES 
	ENTRY	SYSLCO 

* EXTERNAL SUBROUTINES
	EXTRN	MOVE 
	EXTRN	MOVING 
	EXTRN	XMOVE	MOVE BLOCKS INSIDE MEMORY VIA MMU
	EXTRN	MMENT	FIND LAST USED ENTRY IN MM-TAB 
	EXTRN	MOVMMT	MOVE MM-TABLE 
	EXTRN	MMRST	RESET MM-TAB ENTRIES 
	EXTRN	MULT 
	EXTRN	ERROR
	EXTRN	CMPADR	COMPARE ADDRESSES 
	EXTRN	NXTBLK	SKIP TO NEXT CONFIGURATION BLOCK
	EXTRN	NXTCOM	SKIP COMMONDEVICE DEFINITION BLOCK
	EXTRN	CONVRT	CONVERSION ASCII-BINARY 
	EXTRN	GETNUM	CONVERT 3 ASCII-DIGITS TO BINARY
	EXTRN	GETAPP	FIND APPLICATION AND ITS CONF.DATA
	EXTRN	PUSH	STORE REGISTER ON A15-STACK 
	EXTRN	POB	LOAD REGISTER FROM A15-STACK 

* SAVE AND WORK AREA EXTERNALS
	EXTRN	MMTAB	WORK-TABLE 1 (MMU
	EXTRN	TABBE	ABSOLUTE START ADDRESS OF WORK-TAB 1 
	EXTRN	MMEND	ABSOLUTE END ADDRESS OF WORK-TAB 1 
	EXTRN	MMDDIV	WORK-TABLE 2 (MM) RELATIVE 'REL'
	EXTRN	LDALEN	LENGTH OF SYSLCO MODULE 
	EXTRN	APPTYP	APPLICATION TYPE
	EXTRN	PSW
	EXTRN	INILEN	LENGTH OF SYSINI
	EXTRN	LSTPAG	DISPL. TO 'ENTRY-POINTER' 
	EXTRN	MMBEG
	EJECT

* SYSTEM CONTROL TABLE EXTERNALS
	EXTRN	SCTSFA	START OF FREE AREA
	EXTRN	SCTTCT	TC:TAB ADDRESS
	EXTRN	SCTSTB	A15 STACK-BASE
	EXTRN	SCTEFA	END OF FREE AREA
	EXTRN	SCTNOP	NUMBER OF PAGES 
	EXTRN	SCTPSZ	PAGE SIZE 
	EXTRN	SCTMMC		=00002 
	EXTRN	SCTOPT	SYSTEM OPTION 
	EXTRN	SCTPAG	PAGE TABLE ADDRESS
	EXTRN	SCTSWB	ADDRESS TO SWB CONTROL BLOCK TABLE
	EXTRN	SCTBUG	BUGGER ADDRESS
	EXTRN	STKEND	START OF SCRATCH-PAD AREA 
	EXTRN	STKMOV	START OF MOVE-ROUTINE IN STACK
	EXTRN	STKCOM	START OF COMMON-PAD AREA

* EXTERNAL LABELS 
	EXTRN	SYSLDM	START OF MONITOR CONFIGURATION PART 
	EXTRN	PAGQUE	PAGE QUEUE POINTER
	EXTRN	FREQUE	START OF MONITOR BLOCKS 
	EXTRN	REL

* EXTERNAL SUBROUTINES
	EXTRN	ACTOT	QUEUE TASK 
	EXTRN	PFINIT 
	EXTRN	SAVE8	SAVE 8 REGS
	EXTRN	RETUR8	RELOAD 8 REGS 
	EXTRN	TDISP	DISPATCHER ENTRY 

* 
	EXTRN	TTB:SA	START OF SAVE AREA IN TTAB
	EXTRN	TTB:CB	POINTER TO CSEG BASE ADDRESS
	EXTRN	TTB:MT	START OF MMU-TABLE IN TTAB
	EJECT


*************************************** 
* CONDITIONAL ASSEMBLY                * 
*************************************** 

MMUPAG	EQU	0	0 = NO MMU 
DSKPAG	EQU	0	0=NO DISC PAGING 
TEST	EQU	0	1=TEST (DEBUG STARTS AT SYSLDX ENTRY)
TESTMM	EQU	MMUPAG+TEST

********************************************* 
*                                           * 
*    APCTAB DISPLACEMENTS                   * 
*    ====================                   * 
*                                           * 
********************************************* 


APLADA	EQU	22	APPL.REL.BASE (2 WORDS)	=1
APLREL	EQU	18	NUMBER OF RESIDENT SEGMENTS 
APLIOE	EQU	0	APPLICATION RESTART ADDRESS
APLDAD	EQU	0	APPLICATION FILE DISC ADDR. (BIT 0-15) 
APLLAC	EQU	14	APPLICATION LOAD ADDR. (LOGICAL ADDR.)
APLLAP	EQU	12	LOGICAL PAGE ADDRESS
APLLDA	EQU	0	APPLICATION LOAD ADDR. (PHYSICAL ADDR.)
APLMMC	EQU	10	APPLICATION MMU START ENTRY 
APLMMP	EQU	8	SEGMENT START MMU ENTRY
APLSEG	EQU	4	PHYSICAL START OF 1ST SEGMENT
APLNPE	EQU	6	NUMBER OF PAGE ENTRIES IN MMU
APLSWB	EQU	2	APPLICATION SWB
APLSTA	EQU	16	APPL. PGM START ADDRESS 
APLTYP	EQU	8	APPLICATION TYPE 
APLPSZ	EQU	20	APPLICATION SEGMENT SIZE	=1 
	EJECT
	  PROGRAM STRUCTURE: 
*          !-----------------------------------------------------!
*          !  SUBROUTINES                                        ! PART 1 
*  ENTRY ->!                * SYSLCO ENTRY *                     !
*          !  READ CONFIGURATION DATA AND GENERATE:              !
*          !  SHTAB1, SHTAB2, SHTAB3, TIDTAB AND DYNTAB          !
*          !                                                     !
*          !  SHTAB1:                                            !
*          !  -A TABLE OF "NUMBER OF COPIES OF THIS TCL"         !
*          !   IS BUILT AT THE END OF MONITOR                    !
*          !                                                     !
*          !  SHTAB2:                                            !
*          !  -A TABLE OF "ITCT PROTOTYPE ADDRESSES"             !
*          !   IS BUILT AT THE END OF SHTAB1                     !
*          !                                                     !
*          !   SHTAB3:                                           !
*          !   -A TABLE OF "MM-TABLE ADDRESSES"                  !
*          !    IS BUILT AT THE END OF SHTAB2                    !
*          !                                                     !
*          !   TIDTAB:                                           !
*          !   -A TABLE OF "TASK-ID'S IN RUNTIME SYSTEM"         !
*          !    IS BUILT AT THE END OF SHTAB3                    !
*          !                                                     !
*          !   DYNTAB:                                           !
*          !   -A TABLE OF "DYNAMIC-CORE ADDRESSES"              !
*          !    IS BUILT AT THE END OF TIDTAB                    !
*          !                                                     !
*          !   -RELOCATE ITCT     ADDRESSES                      !
*          !   -RELOCATE TCLBLK   ADDRESSES                      !
*          !   -RELOCATE TCLTAB   ADDRESS                        !
*          !   -RELOCATE APPTAB   ADDRESS                        !
*          !   -RELOCATE SHTAB2   ADDRESSES                      !
*          !   -MOVE SYSLCO (NOT PART 1) AND SYSINI              !
*          !    TO FOLLOW DYNTAB                                 !
*          !   -CONTINUE IN PART 2                               !
*          !-----------------------------------------------------!
*          !  SUBROUTINES                                        ! PART 2 
*          !  -MOVE DDIV PROTOTYPE TO FOLLOW SYSLCO              !
*          !                                                     !
*          !  BUILD COMMON DATA AREA                             !
*          !  -PGTG-DATA                                         !
*          !                                                     !
*          !  BUILD CLASS DATA AREAS                             !
*          !  -ICB-PLTGC'S                                       !
*          !                                                     !
*          !  BUILD TASK LOCAL DATA AREAS, ONE PER TCL           !
*          !  -UPDATE ITCT                                       !
*          !   -STACK-SIZE                                       !
*          !   -PGTL-DATA-LENGTH-USED                            !
*          !  -MOVE ITCT                                         !
*          !  -MOVE PGTL-DATA AREA                               !
*          !  -MOVE STATIC-ZERO AREA                             !
*          !  -ALLOCATE DYNAMIC-CORE (INITIATE IF MMU-CASE)      !
*          !  -INCLUDE DDIV PROTOTYPE IN FREE AREA              ! 
*          !  -CONTINUE IN PART 3                                !
*          !-----------------------------------------------------!
*          !  SUBROUTINES                                        ! PART 3 
*          !  R E A L T A                                        !
*          !  BUILD REAL TASK-LOCAL DATA AREAS                   !
*          !  -FILL MM-TABLE IN TTAB                             !
*          !  -COPY ITCT'S ACCORDING TO SHADOW-TABLE             !
*          !  -UPDATE TID IN ITCT                                !
*          !  -COPY PGTL-DATA                                    !
*          !  -COPY STATIC-ZERO                                  !
*          !  -ALLOCATE DYNAMIC-CORE (INITIATE IF MMU-CASE)      !
*          !  -CONTINUE IN SYSINI                                !
*          !-----------------------------------------------------!
	EJECT
****************************
*  COMMON DISPLACEMENTS    *
****************************
APLTAB	EQU	12	ADDRESS TO APPL.CONTROL TABLE 
APPLNO	EQU	18	APPLICATION NUMBER
BUFSIZ	EQU	14	TEMPORARY BUFFER SIZE 
CONLEN	EQU	0	LENGTH OF CONFIGURATION DATA 
CONSTA	EQU	2	START OF CONFIGURATION DATA
DATEND	EQU	34	END OF DDIV PROTOTYPE 
DYNSTA	EQU	52	START OF DYNTAB:S 
FSTADR	EQU	20	1:ST FREE ADDRESS WHEN ALLOCATING BUFFER
FSTPAG	EQU	22	1:ST FREE PAGE (PHYSICAL) 
FYSPAG	EQU	24	LAST PHYSICAL PAGE NUMBER 
LSTADR	EQU	26	LAST ADDRESS WHEN BUILDING DATA PART
MAPLEN	EQU	30	LENGTH OF AREA TO MAP 
MMFROM	EQU	36	2:ND MMU TABLE WORK AREA
MMTO	EQU	38	1:ST MMU TABLE WORK AREA
M:REL	EQU	16	RELOCATIN CONSTANT 
SYSBUF	EQU	28	START OF TEMPORARY BUFFER 
SWBFSA	EQU	4	SWB-FILE START ADDRESS 
SWBFSE	EQU	8	SWB-FILE END ADDRESS 
TTAB	EQU	32	WORK AREA FOR MMU-TABLE 
TOTSGM	EQU	46	NUMBER OF SEGMENTS
SWBFLG	EQU	48	SWAPPABLE WORK BLOCK FLAG 
COM01	EQU	40	COMMON WORK AREA 1 
COM02	EQU	42	COMMON WORK AREA 2 
COM03	EQU	44	COMMON WORK AREA 3 
COM04	EQU	50	COMMON WORK AREA 4 
	EJECT
**************************
*  TABLEN DISPLACEMENTS  *
**************************
SEGTAD	EQU	0	SEGTAB ADDRESS 
ITCTAD	EQU	2	ITCT ADDRESS 
SHADOW	EQU	4	SHADOW TABLE START ADDRESS 
DDIVFR	EQU	6	PROT.DDIV FROM ADDRESS 
PLTGCE	EQU	8	END OF ICB-PLTGC 
PLTGCL	EQU	10	LENGTH OF ICB-PLTGC 
PLTGCS	EQU	12	START OF ICB-PLTGC
DYNTAD	EQU	14	DYNTAB ADDRESS
APCTAB	EQU	16	APLTAB BLOCK ADDRESS
PDDIVL	EQU	18	LENGTH LEFT OF PROT.DDIV
	EJECT
******************************* 
*  SCRATCH-PAD DISPLACEMENTS  * 
******************************* 
ACOSTA	EQU	120	CONF.START FOR AN APPLICATION
ALICOU	EQU	112	SAVE AREA FOR APPLICATION COUNTER
APLTAD	EQU	122	APLTAB BLOCK ADDRESS 
BASADR	EQU	80	BASE ADDRESS FOR DEBUG PURPOSE
DDIVTO	EQU	124	PROT.DDIV TO ADDRESS 
DYNDIS	EQU	60	DYN.CORE DISPLACEMENT 
PDDIV	EQU	114	FLAG : 1=BUILD DDIV TO NEXT APPL. 
			       0=BUILD DDIV TO START OF FREE AREA
INTENT	EQU	62	INTERPRETER ENTRY 
LCOTO	EQU	64	ADR. WHERE TO MOVE SYSLCO TO 
MMREL1	EQU	66 
MONEND	EQU	84	MONITOR END ADDRESS 
MOVLE1	EQU	86	LENGTH TO MOVE
MOVLEN	EQU	68	LENGTTH TO MOVE 
NOCOPS	EQU	70	NUMBER OF RUNNING COBOL TASKS IN
			RUNTIME FOR AN APPLICATION 
RELOCA	EQU	72	TEMPORARY SAVE AREA FOR RELOCATION VALUE
SAEFA1	EQU	116	SCTEFA BIT 0-5 PAGE
SAEFA2	EQU	118	SCTEFA BIT 4-15 DISP. IN PAGE
SAVE01	EQU	88	TEMP. SAVE AREA 
SAVE02	EQU	96	TEMP. SAVE AREA OUTSIDE SUBRUTINES
SAVE03	EQU	126	TEMP. SAVE AREA OUTSIDE SUBRUTINES 
SAVE05	EQU	106	TEMP. SAVE AREA INSIDE LOKAL SUBRUTINES
SAVE06	EQU	108	TEMP. SAVE AREA INSIDE LOKAL SUBRUTINES
SAVE07	EQU	110	TEMP. SAVE AREA INSIDE LOKAL SUBRUTINES
SAVITC	EQU	94	SAVE AREA FOR ITCT ADDRESS
SAVTID	EQU	104	SAVE AREA FOR TASK ID
SHADST	EQU	74	START OF SHADOW TABLES FOR CURRENT APPL.
SHTLEN	EQU	76	SHTAB1-3 LENGTH 
STASK	EQU	82	NZ=ONLY ONE TASK IN THE SYSTEM 
TCLPNT	EQU	78	ADR. TO TCLBLK POINTER
TCLCOU	EQU	100	SAVE AREA FOR TCL COUNTER
TCLITC	EQU	102	SAVE AREA FOR TCL ITCT ADDRESS 
TGCREL	EQU	90	ICB-PLTGC RELOCATION
PGTGAD	EQU	92	PGTG DATA ADDRESS 
LSTENT	EQU	98	LAST USED ENTRY IN MMTAB,UPTO COMMON DAT
	EJECT
		***************** 
		***************** 
		**             ** 
		**  CONSTANTS  ** 
		***************** 
		***************** 
				
******************************* 
* CONFIGURATION FILE (CONFIG) * 
******************************* 
			 
* TASK DEFINITION BLOCK:
TDBBT	EQU	0	1A BLOCK TYPE 
TDBNT	EQU	TDBBT+1	2N NUMBER OF TASKS
TDBID	EQU	TDBNT+2	6A TASK ID START VALUE
TDBMC	EQU	TDBID+6	6A MATCHING TASK CLASS
TDBTL	EQU	TDBMC+6	6A TASK LEVEL 
TDBNC	EQU	TDBTL+6	2N NUMBER OF TERMINAL DEVICE CLASSES
* 
TDBFST	EQU	TDBNC+2	FIRST TERM DEF 
TDC	EQU	7	TERMINAL DEVICE CLASS 
TLC	EQU	7	LINE CONNECTION 
TDBREC	EQU	TDC+TLC	TDB-RECORD LENGTH
* 
SDC	EQU	7	SPECIAL DEVICE CLASS-RECORD 
* 
* COMMON DEVICE DEF. BLOCK: 
CDBBT	EQU	0	1A BLOCK TYPE 
CDBNC	EQU	CDBBT+1	2N NUMBER OF SPEC. DEV. CLASSES 
SDCFST	EQU	CDBNC+2	FIRST SDC-RECORD 
* 
* 
* USER WORK BLOCK TYPE DEF. BLOCK 
UDBBT	EQU	0	1A BLOCK TYPE 
UDBNU	EQU	UDBBT+1	3A NUMBER OF UWB TYPES
* 
UDBFST	EQU	UDBNU+3	FIRST UDB-RECORD 
NAMUWB	EQU	3	NAME OF UWB
NUMUBL	EQU	3	NUMBER OF BLOCKS 
UDBREC	EQU	NAMUWB+NUMUBL	UDB RECORD-LENGTH
	EJECT
				
				
*************************************** 
**                                   ** 
** THE FOLLOWING EQUATES ARE         ** 
** DISPLACEMENTS WITHIN EACH         ** 
** TABLE                             ** 
**                                   ** 
*************************************** 

*************** 
**           ** 
** SEGTAB    ** 
**           ** 
*************** 

SGAPPT	EQU	0	APPTAB POINTER 
SGPGMT	EQU	2	PROGRAM TYPE 'CO'
SGCOML	EQU	6	COMMON LENGTH
SGPAGL	EQU	8	PAGE LENGTH
SGNOSG	EQU	10	NUMBER OF SEGMENTS

*************** 
**           ** 
** APPTAB    ** 
**           ** 
*************** 

APPTCL	EQU	0	TCLTAB POINTER 
APPINT	EQU	2	INTERPRETER ENTRY
APPTGL	EQU	4	PGTG-DATA-AREA LENGTH
APPCOM	EQU	6	COMMON PSEG PNTR 
I:RSTE	EQU	8	DISPL IN APPTAB, INT REENTER ADR 

*************** 
**           ** 
** TCLTAB    ** 
**           ** 
*************** 

TCLCNT	EQU	0	NUMBER OF TCLBLK'S 
TCLTAB	EQU	2	TABLE OF TCLBLK POINTERS 
TCLNAM	EQU	0	TCL NAME 
TCLBLK	EQU	4	TCLBLK POINTER 

*************** 
**           ** 
** TCLBLK    ** 
**           ** 
*************** 

TCLSTK	EQU	0	STACK-SIZE 
TCLTGC	EQU	2	ICB-PLTGC-MAIN POINTER 
TCLTCT	EQU	4	ITCT POINTER 
TCLTLD	EQU	6	PGTL-DATA-LENGTH-USED

*************** 
**           ** 
** ICB-PLTGC ** 
**           ** 
*************** 

TGCSZD	EQU	4	STATIC-ZERO DISP IN TLTAB
TGCSZL	EQU	6	STATIC-ZERO LENGTH 
TGCCAL	EQU	8	CALL-BASE-ADR TAB
TGCCTS	EQU	0	NBR OF ENTRIES IN CALL TABLE 
TGCCTE	EQU	2	CALL TABLE ENTRY 

*************** 
**           ** 
** ITCT      ** 
**           ** 
*************** 

ITCCOM	EQU	0	PGTG-DATA-ADR
ITCTGC	EQU	2	ICB-PLTGC-PNTR 
ITCGLL	EQU	4	PGTL-DATA-LENGTH 
ITCGLA	EQU	6	PGTL-DATA-ADR
ITCCSB	EQU	10	CURRENT SEGMENT BASE
ITCTID	EQU	12	TASK-ID 
ITCDCB	EQU	14	DYNAMIC-CORE,BASE-PNTR
ITCDCC	EQU	16	      "     ,CURRENT-EXTENT 
ITCNEP	EQU	18	      "     ,NEXT PARAMETER 
ITCDCD	EQU	22	      "     ,DDI-POOL-BASE
ITCSPL	EQU	26	SPL-PBS-PNTR
ITCTLT	EQU	34	TLTAB 
ITCTLS	EQU	0	NBR OF ENTRIES IN TLTAB
ITCTLE	EQU	2	TLTAB ENTRY

*************** 
**           ** 
** SPL-PBS   ** 
**           ** 
*************** 

SPLTCD	EQU	0	DIAGNOSTIC,TERM-CODE 
SPLSTU	EQU	2	    "     ,STACK-USED
SPLSTS	EQU	4	    "     ,STACK-SIZE
SPLPRN	EQU	6	    "     ,PROCEDURE-NAME
SPLCPB	EQU	12	CURRENT-PROCEDURE-BLOCK 
SPLDIS	EQU	14	DISPLAY(16 POINTERS)
SPLG1S	EQU	46	GLOBAL1-SAVE
SPLG2S	EQU	48	GLOBAL2-SAVE
SPLG3S	EQU	50	GLOBAL3-SAVE
SPLSTB	EQU	52	STACK-BASE
SPLENT	EQU	54	ENTRY-FINI
SPLLTS	EQU	56	LAST-TS 
SPLRWA	EQU	58	RUNTIME-WORK-AREA(30 BYTES) 
SPLSTA	EQU	88	STACK-AREA
	EJECT
****************
* SOP-HANDLING *
****************
SOP	EQU	/2E	DEVICE ADDRESS

		  LAMP CODE	MEANING 
		  ---------	------- 
LMP1	EQU	/400	SYSLOAD RUNS
LMP2	EQU	/200	READ ERROR
LMP3	EQU	/100	MEMORY OVERFLOW 
LMP4	EQU	/80	FORMAT ERROR (CONFIG)
LMP5	EQU	/40	TID ERROR
LMP6	EQU	/20	UWB OR SWB ERROR 
LMP7	EQU	/10	MM-TABLE OVERFLOW
LMP8	EQU	8
LMP9	EQU	4
LMP10	EQU	2 
LMP11	EQU	1 
NOBLK	EQU	/B	NO BLOCKS	=2 


********************* 
*  OTHER CONSTANTS  * 
********************* 
			 
STKMAX	EQU	500	DEFAULT SPL STACK-SIZE IN BYTES
ENTFIN	EQU	/FFFF	PROGRAMMER DEFINED ENTRY POINT 
SPLSIZ	EQU	SPLSTA+STKMAX	DEFAULT SPL STACK-SIZE + PBS-BLOCK SIZE
COBID	EQU	2	COBOL IDENTIFICATION
SEGREC	EQU	6	RECORD LENGTH IN SEGTAB
NUMSEG	EQU	10	DISPL. TO NUMBER OF SEGMENTS IN SEGTAB
TTBTID	EQU	2	TID IN TTAB
TTB:PP	EQU	6	SAVE AREA FOR TCL IN TTAB
NTPA	EQU	4	INTERPRETER START ADDRESS
IHRTC	EQU	4	RTC INTERRUPT ADDRESS 
RTCDA	EQU	/1B	RTC DEVICE ADDRESS
TABLEN	EQU	20	LENGTH OF EACH APL.TABLE IN SCRATCH-PAD 
ACBLEN	EQU	26	APPL.CONTROL BLOCK LENGTH	=1
	EJECT
***************************************************************** 
*  CALL-FORMAT, PERFORMS:  CFR      A14,A13                     * 
*                          DATA     [REL-ADDRESS]               * 
*                                                               * 
***************************************************************** 
			 
			 
			 
CALL	FORM	16=/F697,16 
	IFT	MMUPAG=1 
	EJECT
			 
			 
********************************************* 
*******                               ******* 
**                                         ** 
*            SYSLOAD PART 1                 * 
**                                         ** 
*****                                   ***** 
********************************************* 
			 
*   READ CONFIGURATION FILE & BUILD         * 
*   SHADOW-TABLES                           * 
*                                           * 
********************************************* 
			 
LCOSTA	EQU	*
	LDKL	A1,START1	GET START OF SYSLCO 
	AD	A1,M:REL+STKCOM	ADD RELOCATION BASE 
	ABR	A1	GO TO START OF SYSLCO 
			 
************************************* 
***                               *** 
**     S U B R O U T I N E S       ** 
**  -USED IN THIS PART ONLY        ** 
************************************* 
	EJECT
*                 B U I L D T                *
*                                            *
* BUILD ONE PART OF TIDTAB FOR CURRENT       *
* TASK DEFINITION BLOCK IN CONF.FILE         *
*                                            *
* INPUT : A1=ITCT ADDRESS                    *
*         A3=TID                             *
*         A4=NUMBER OF COPIES                *
*         A6=POINTER IN SHTAB1               *
*         A8=LENGTH OF SHTAB1                *
*         SHADST=START OF SHADOW TABLES FOR  *
*                CURRENT APPLICATION         *
*                                            *
* OUTPUT: A7=FIRST FREE ENTRY AFTER TIDTAB   *
*         SHADST=START OF SHADOW TABLES FOR  *
*                CURRENT APPLICATION         *
*                                            *
* WORK REGISTERS : A1-A8                     *
*                                            *
* SUBRUTINS : ERROR                          *
*                                            *
**********************************************
BUILDT	EQU	*
	LDR*	A2,A6	HAVE TASKS ALREADY BEEN CONF FOR THIS 
			TCL
	RF(NZ)	BUI100	YES! 
	ES	A3,ITCTID,A1	SAVE TID IN ITCT 
* COUNT NUMBER OF TASKS IN TIDTAB WHICH ARE GOING TO
* LIE BEFORE CURRENT TASKS
BUI100	EQU	*
	SUR	A2,A2	CLEAR TASK COUNTER 
	LDR	A5,A6	GET POINTER TO CURRENT ENTRY IN SHATB1 
BUI200	EQU	*
	ADR*	A2,A5	ADD NUMBER OF TASKS 
	SUK	A5,2	DECREASE SHTAB1 POINTER 
	CW	A5,SHADST+STKEND	ALL TASKS COUNTED? 
	RB(NE)	BUI200	NO!
* LOAD REGISTER A5 WITH POINTER TO START-ENTRY OF 
* CURRENT TASKS IN TIDTAB AND ADD NUMBER OF CURRENT 
* TASKS IN FIRST ENTRY OF TIDTAB
	ADR	A5,A8	ADD SHTAB1 LENGTH
	ADR	A5,A8	ADD SHTAB2 LENGTH
	ADR	A5,A8	ADD SHTAB3 LENGTH
	ADRS	A4,A5	UPDATE NUMBER OF TASKS IN TIDTAB
	ADK	A5,2	POINT AT FIRST TID IN TIDTAB
	SLL	A2,1	2*(NUMBER OF TASKS) 
	ADR	A5,A2	ADD DISPLACEMENT IN TIDTAB 
* COUNT NUMBER OF TASKS IN TIDTAB WHICH ARE GOING 
* TO LIE AFTER CURRENT TASKS
	LDR	A1,A6	GET POINTER TO SHTAB1 ENTRY OF CURRENT 
			TCL
	ADK	A1,2	ENTRY IN SHTAB1 AFTER CURRENT TCL 
	SUR	A2,A2	CLEAR TASK COUNTER 
	LDR	A7,A8	GET SHTAB1 LENGTH
	SUR	A7,A1
	AD	A7,SHADST+STKEND	LENGTH OF SHTAB1 IN BYTES AFTER CURRENT
			TCL
	RF(Z)	BUI350 
BUI300	EQU	*
	ADR*	A2,A1	ADD NUMBER OF TASKS 
	ADK	A1,2	INCREASE SHTAB1 POINTER 
	SUK	A7,2	ALL TASKS COUNTED?
	RB(NZ)	BUI300	NO!
* MAKE SPACE IN TIDTAB FOR CURRENT TASKS
BUI350	EQU	*
	LDR	A7,A5	LOAD START-ENTRY OF CURRENT TASKS IN 
			TIDTAB 
	ADR	A7,A2	ADD 2*(NUMBER OF TASKS AFTER 
	ADR	A7,A2	CURRENT TASKS) 
	SUK	A7,2	POINTER TO LAST TASK ID IN TIDTAB 
	SLL	A4,1	2*(NUMBER OF CURRENT TASKS) 
	CWR	A7,A5	ARE CURRENT TASKS LAST IN TIDTAB 
	RF(L)	BUI500	YES!
BUI400	EQU	*
	LDR*	A1,A7	GET TASK ID IN TIDTAB 
	ADR	A7,A4	NEW ENTRY IN TIDTAB FOR TASK ID
	STR	A1,A7	STORE TASK ID IN NEW ENTRY 
	SUR	A7,A4	GET OLD ENTRY IN TIDTAB
	SUK	A7,2	NEXT ENTRY IN TIDTAB
	CWR	A7,A5	ALL TASK ID MOVED? 
	RB(NL)	BUI400	NO!
* LOAD REGISTER A7 WITH FIRST FREE ENTRY AFTER TIDTAB 
* AND ADD NUMBER OF CURRENT TASKS IN CURRENT ENTRY OF SHTAB1
BUI500	EQU	*
	LDR	A7,A5	LOAD START ENTRY OF CURRENT TASKS IN 
			TIDTAB 
	ADR	A7,A2	ADD NUMBER OF BYTES AFTER CURRENT
	ADR	A7,A2	TASKNAMES IN TIDTAB
	ADR	A7,A4	FIRST FREE ENTRY AFTER TIDTAB
	SRL	A4,1	(2*(NUMBER OF TASKS))/2 
	ADRS	A4,A6	ADD NUMBER OF CURRENT TASKS,FOR	
			CURRENT TCL IN SHTAB1
* PUT CURRENT TASK ID:S IN TIDTAB 
	LD	A1,SHADST+STKEND	GET MONITOR END ADDRESS
	ADR	A1,A8	ADD SHTAB1 LENGTH
	ADR	A1,A8	ADD SHTAB2 LENGTH
	ADR	A1,A8	TIDTAB START ADDRESS 
	ADK	A1,2	FIRST TID IN TIDTAB 
BUI600	EQU	*
	LDR	A6,A1	GET TIDTAB START ADDRESS 
BUI700	EQU	*
	CWR	A6,A5	ALL TID:S OF UPPER PART IN TIDTAB
			SHECKED? 
	RF(NE)	BUI800	NO!
	ADR	A6,A4	FIRST TIDTAB ENTRY OF
	ADR	A6,A4	LOWER PART 
BUI800	EQU	*
	CWR	A6,A7	ALL TID:S OF LOWER PART IN TIDTAB
			SHECKED? 
	RF(E)	BUI950	YES!
	CWR*	A3,A6	TID ALREADY CONFIGURATED? 
	RF(NE)	BUI900	NO!
	LDKL	A1,LMP4	YES! FORMAT ERROR 
	CALL	ERROR 
BUI900	EQU	*
	ADK	A6,2	NEXT ENTRY IN TIDTAB
	RB	BUI700
BUI950	EQU	*
	STR	A3,A5	PUT TID IN TIDTAB
	ADK	A5,2	ADJUST UPPER PART END ADDRESS 
	ADK	A3,1	GENERATE NEXT TID 
	SUK	A4,1	HAVE ALL CURRENT TID:S BEEN CONF. 
	RB(NZ)	BUI600	NO!
	RTN	A14
	EJECT
*      L  I  M  T  G  C                 * 
*                                       * 
* FIND START-ADR, END-ADR, LENGTH OF    * 
* ICB-PLTGC BLOCK                       * 
*                                       * 
* INPUT:A10=POINTER TO CURRENT APPL     * 
*           SAVE AREA IN SCHRATCH-PAD   * 
*       SHADOW=START OF SHADOW TABLES   * 
*              FOR CURRENT APPL.        * 
* OUTPUT:PLTGCS= START ADR OF ICB-PLTGC * 
*        PLTGCE= END   ADR OF ICB-PLTGC * 
*        PLTGCL= LENGTH    OF ICB-PLTGC * 
* WORKREGS: A1-A7,A9,A11                * 
* WORKAREA:USES MONITOR BLOCKS AS STACK * 
*                                       * 
***************************************** 

LIMTGC	EQU	*
	LD	A1,SHADOW,A10	SHTAB1 ADDRESS
	LD	A7,FREQUE	GET MONITOR BLOCK ADDR. 
	LDR*	A2,A1	SHTAB1 LENGTH 
	ADR	A1,A2	SHTAB2 ADDRESS 
LIMTG0	EQU	*
	SUK	A2,2 
	RF(Z)	LIMTG5	ALL DONE
	ADK	A1,2	STEP SHTAB2 
	LDR*	A3,A1	ADR TO ITCT 
	EL	A3,ITCTGC,A3	ADR TO ICB-PLTGC OF MAIN PROGRAM 
LIMTG1	EQU	*
	LDK	A5,0	SET LEVEL TO 0(ZERO)
	CALL	LIMTG2	UPDATE LIMITS FOR ICB-PLTGC'S RELATED
			TO THIS CLASS
	RB	LIMTG0	NEXT TCL 
	EJECT
* 
* UPDATE LIMITS FOR ICB-PLTGC'S 
* RELATED TO ONE TERMINAL-CLASS 
* 
LIMTG2	EQU	*
	CALL	LIMUPD	UPDATE LIMITS
	ELR	A4,A3	GET FIRST WORD IN ICB-PLTGC
	ADKL	A4,/100	INDICATE LIMIT-CONTROL-INIT 
	ESR	A4,A3	SET INDICATION 
	EL	A4,TGCCAL,A3	GET NBR OF CALL-TABLE ENTRIES
LIMTG3	EQU	*
	RF(Z)	LIMTG4	NO ENTRIES (LEFT) 
	ST	A4,2,A7	SAVE NBR.OF ENTRIES ON STACK
	ST	A3,4,A7	SAVE ENTRY ADDRESS ON STACK 
	LDR*	A7,A7	ADJUST STACK POINTER	=2 
	RF(NZ)	LIMT35	MORE BLOCKS AVILABLE	=2
	LDKL	A1,NOBLK	NO BLOCKS AVILABLE	=2
	CALL	ERROR		=2 
LIMT35	EQU	*		=2
	ADK	A5,1	ADJUST LEVEL
	SLL	A4,1	*2 TABLE LENGTH 
	ADR	A4,A3	ADD BASE 
	ADK	A4,TGCCAL	ADD CALL-TABLE DISPLACEMENT
	ELR	A3,A4	GET ICB-PLTGC ADDRESS CALLED 
	ELR	A4,A3	GET THAT FIRST WORD CONTENT
	SRL	A4,8	ONLY FIRST BYTE VALID 
	SUK	A4,/60	FIRST TIME ?
	RB(Z)	LIMTG2	YES 
	LD	A4,-4,A7	GET NBR OF ENTRIES LEFT
LIMTG4	EQU	*
	SUK	A4,1	COUNT NBR OF ENTRIES LEFT 
	RB(P)	LIMTG3	ENTRIES LEFT
	SUK	A5,1	ADJUST LEVEL
	RF(N)	LIMTGX	END OF THIS TERMINAL CLASS
	SUK	A7,6	ADJUST STACK-POINTER
	LD	A4,2,A7	NBR.OF ENTRIES LEFT 
	LD	A3,4,A7	ENTRY ADDRESS 
	RB	LIMTG4	CONTINUE 
LIMTG5	EQU	*
	LD	A3,PLTGCE,A10	PNTR TO LAST ICB-PLTGC
	EL	A4,8,A3	NBR OF CALL-TAB ENTRIES 
	SLL	A4,1	NBR OF BYTES
	ADR	A4,A3	ADD BASE 
	ADK	A4,10	ADD TABLE DISPL
	ST	A4,PLTGCE,A10	SAVE END ADR
	SU	A4,PLTGCS,A10	-(MINUS) START ADR
	ST	A4,PLTGCL,A10	SAVE LENGTH 
LIMTGX	EQU	*
	RTN	A14
	EJECT
* 
* UPDATE ICB-PLTGC LIMITS 
* 
* INPUT: A3=ICB-PLTGC ADR 
* 
LIMUPD	EQU	*
	LDR	A11,A3	ICB-PLTGC ADR 
	LD	A9,PLTGCS,A10	GET CURRENT START ADR 
	CALL	CMPADR	CHECK ADDRESSES
	RF(NL)	LIMUP1	OLD START ADR VALID
	ST	A3,PLTGCS,A10	SET NEW START ADR 
LIMUP1	EQU	*
	LD	A9,PLTGCE,A10	GET CURRENT END ADR 
	CALL	CMPADR	CHECK ADDRESSES
	RF(L)	LIMUP2	OLD END ADR VALID 
	ST	A3,PLTGCE,A10	SET NEW END ADR 
LIMUP2	EQU	*
	RTN	A14
	EJECT
*         R  E  L  O  C           * 
*                                 * 
* RELOCATE AN ADDRESS             * 
*                                 * 
* INPUT: A3  ADDRESS POINTER      * 
*        A6  RELOCATION INCREMENT * 
* WORK:  A10                      * 
*********************************** 

RELOC	EQU	* 
	ST	A10,SAVE05+STKEND	SAVE REGISTER 
	ELR	A10,A3	GET ADDRESS 
	ADR	A10,A6	RELOCATE IT 
	ESR	A10,A3	RESTORE NEW ADDRESS 
	LD	A10,SAVE05+STKEND	RELOAD REGISTER 
	RTN	A14
	EJECT
*                 L E N C O U                *
*                                            *
* COUNT LENGTH OF SHTAB1,AND COUNT NUMBER OF *
* TASKS                                      *
*                                            *
* INPUT : A11=CONFIGURATION START            *
*         SHADST=START OF SHADOW TABLES FOR  *
*                CURRENT APPLICATION         *
*                                            *
* OUTPUT: A6=TOTAL NUMBER OF TASKS           *
*         A7=SHTAB1 LENGTH IN BYTES          *
*         SHADST=START OF SHADOW TABLES FOR  *
*                CURRENT APPLICATION         *
*                                            *
* WORK REGISTERS: A1,A3-A5                   *
*                                            *
* WORK TABLE: TEMPORARY TABLE WITH TCL       *
*             NAMES AFTER START OF FREE      *
*             AREA                           *
*                                            *
* SUBRUTINES: NXTBLK                         *
*                                            *
**********************************************
LENCOU	EQU	*
	LDK	A7,2	TABLE LENGTH-WORD LENGTH
	LDK	A6,0	TOTAL NBR OF TASKS
	CM*	SHADST+STKEND	CLEAR FIRST ENTRY OF TEMPORARY 
			TABLE
* SHECK IF CURRENT TCL NAME ALREADY HAS APEARED IN
* CONFIGURATION FILE , AND IF SO DON'T INCREMENT
* SHTAB1 LENGTH AND PUT CURRENT TCL NAME IN TEMPO-
* RARY TABLE
LEN100	EQU	*
	LC	A3,TDBMC+4,A11
	SLL	A3,8 
	LC	A3,TDBMC+5,A11	TCL NAME OF CURRENT TASK 
			TASK DEF. BLOCK
	LD	A1,SHADST+STKEND	ADDRESS TO FIRST ENTRY IN
			TEMPORARY TABLE
	LDR*	A4,A1	FIRST ENTRY=0?
	RF(Z)	LEN300	YES!
LEN200	EQU	*
	CWR	A4,A3	TCL NAME IN TEMPORARY TABLE
	RF(E)	LEN400	YES!
	ADK	A1,2	NEXT ENTRY IN TEMPORARY TABLE 
	LDR*	A4,A1	ENTRY=0?
	RB(NZ)	LEN200	NO!
LEN300	EQU	*
	ADK	A7,2	COUNT NUMBER OF BYTES IN SHTAB1 
	STR	A3,A1	PUT CURRENT TCL NAME IN
			TEMPORARY TABLE
	ADK	A1,2	NEXT ENTRY IN TEMPORARY TABLE 
	CMR	A1	CLEAR IT
* COUNT TOTAL NUMBER OF TASKS AND GET START OF NEXT 
* TASK DEF. BLOCK 
LEN400	EQU	*
	LC	A4,TDBNT+1,A11	NBR OF COPIES /2 
	SRC	A4,4 
	LC	A4,TDBNT,A11	NBR OF COPIES /1 
	SLC	A4,12
	SRL	A4,8	BINARY VALUE (NBR OF COPIES)
	LDR	A4,A4	NBR OF COPIES
	RF(Z)	LEN500	NO COPY , TRY NEXT BLOCK
	ADR	A6,A4	COUNT TOTAL NBR OF TASKS 
LEN500	EQU	*
	CALL	NXTBLK	NEXT CONFIG.-BLOCK 
	CCK	A2,'TT'	TASK DEF. BLOCK? 
	RB(E)	LEN100	NEXT TASK DEF. BLOCK
	RTN	A14
	EJECT

*            S Y S L C O                 *
*                                        *
* ENTRY FOR COBOL APPLICATION CONFIG     *
*                                        *
******************************************

				
			 
START1	EQU	*
SYSLCO	EQU	*
* 
*  INIT A15 STACK 
* 
	LD	A15,SCTSTB
	SUKL	A15,4 

	XIF
	IFT TESTMM=2 
******************************
* 
* TEST VERSION (DEBUG)
* 

	LD	A2,SCTBUG	DEBUGGER ADDRESS
	LD	A13,M:REL+STKCOM
	ADKL	A13,TEST1	SET RETURN ADDRESS
	ABR(NZ)	A2	JUMP IF DEBUG IN SYSTEM 

TEST1	EQU	* 
	LDR	A8,P	GET PROGRAM-POINTER 
	LDKL	A5,REL+2	GET START OF RELOCATION
			ROUTINE
	AD	A5,M:REL+STKCOM	ADD RELOCATION BASE 
	CFR	A8,A5

* 
* 
******************************

	XIF
	IFT MMUPAG=1 

* 
*        CLEAR SCRATCH-PAD AREA 
* 
	LDKL	A1,STKEND	A1=START OF SCRATCH-PAD AREA
	LDKL	A2,STKMOV 
	SUK	A2,2	A2=END OF SCRATCH-PAD AREA
SYA10	EQU	* 
	CMR	A1	CLEAR MEMORY WORD 
	CWR	A1,A2	ALL WORDS CLEARED? 
	RF(E)	SYA20	YES! 
	ADK	A1,2	NO! NEXT WORD 
	RB	SYA10 
* 
*        INITIATE REGISTERS AND VARIABLES 
* 
SYA20	EQU	* 
	LD	A1,FYSPAG+STKCOM	GET END OF FREE AREA PAGE
	ST	A1,SAEFA1+STKEND	INIT SAEFA1
	LD	A1,LSTADR+STKCOM	GET END OF FREE AREA DISP. 
	ST	A1,SAEFA2+STKEND	INIT SAEFA2
	CM	APPLNO+STKCOM	CLEAR APPL.NUMBER COUNTER 
	LDKL	A10,STKEND	START OF 1:ST APPL. SAVE AREA
			IN SCRATCH-PAD 
	LD	A1,SCTSFA	START ADR.TO SHTAB'S OF 1:ST APPL.
	ST	A1,SHADST+STKEND	SAVE START OF 1:ST SHADOW-TABLE
	CM	PDDIV+STKEND	CLEAR FLAG 
* 
*        GET APPLICATION
* 
SYA100	EQU	*
	LDKL	A1,'CO'	LOAD INPUT TO GETAPP,CO=COBOL APPL. 
	CALL	GETAPP	FIND APPL AND ITS CONF DATA
	RF(NZ)	SYA105	MORE APPL OF THIS TYPE 
	LD	A2,APPLNO+STKCOM	ANY COBOL APPL. TO CONFIG.?
	RF(NZ)	SYA102	YES! 
	LDKL	A1,LCOEND	SYSLCO END ADDR.
	AD	A1,M:REL+STKCOM	RELOCATE
	ABR	A1	LEAVE SYSLCO
SYA102	EQU	*
	LDKL	A2,SYA178	NO MORE APPL OF THIS TYPE 
	AD	A2,M:REL+STKCOM 
	ABR	A2 
SYA105	EQU	*
	ST	A11,ACOSTA+STKEND	SAVE CONF.START FOR THIS APPL 
	ST	A1,APCTAB,A10	SAVE APLTAB BLOCK ADDRESS 
	LD	A2,APLLAC,A1	GET SEGTAB ADDRESS 
	ST	A2,SEGTAD,A10	SAVE
	EJECT
			 
* READ CONFIG FILE AND BUILD SHADOWTABLE
			 
	EL*	A3,APLLAC,A1	APPTAB ADR
	EL	A2,I:RSTE,A3	GET INTERPRETER RESTART ADDRESS
	ST	A2,APLIOE,A1	STORE IT IN APLTAB 
	ELR	A2,A3	TCLTAB ADR 
	ELR	A12,A2	NBR OF TCL'S
	LDR	A4,A2
	ADKL	A4,4	ADR TO TCLBLK PNTR 
	ST	A4,TCLPNT+STKEND	SAVE 
	LC	A2,TDBBT,A11	BLOCK TYPE 
	CCK	A2,'TT'	TASK DEFINITION BLOCK
	RF(NE)	SYA120	NO 
	CALL	LENCOU
	LDR	A5,A7	SHTAB1 LENGTH * 1
	ADR	A5,A7	* 2
	ADR	A5,A7	* 3  SHTAB1-3 TOTAL LENGTH 
	ST	A5,SHTLEN+STKEND	SHTAB1-3 LENGTH
	LDR	A6,A6
	RF(Z)	SYA120	NOTHING TO CONFIGURATE
	ST	A6,NOCOPS+STKEND	SAVE NBR OF RUNNING TASKS/RUNTIME
* 
	LD	A11,SHADST+STKEND	MONITOR END ADR 
	ADR	A11,A5 
	ADR	A11,A6 
	ADR	A11,A6 
	ADKL	A11,2	NEW START OF FREE AREA
	LDKL	A9,LCOSTA	SYSLCO START
	AD	A9,M:REL+STKCOM	SYSLCO START
* CHECK ADDRESSES 
	CALL	CMPADR
	RF(L)	SYA115	OK !
	LDKL	A1,LMP3	MEMORY OVERFLOW 
	CALL	ERROR 
SYA115	EQU	*
	SUR	A8,A8
ZERO	EQU	*
	SUKL	A11,2	NEXT
	STR	A8,A11	CLEAR WORD
	CW	A11,SHADST+STKEND	ALL DONE ?
	RB(NE)	ZERO	NO 
	ST*	A7,SHADST+STKEND	STORE LENGTH IN TABLE LENGTH WORD 
	LDR	A8,A7	SHTAB1 LENGTH
	LD	A11,ACOSTA+STKEND	CONFIG START
	LC	A3,TDBBT,A11	GET BLOCK TYPE FROM CONF.
	CCK	A3,'TT'	TASK DEFINITION BLOCK ?
	RF(E)	SYA125	YES 
SYA120	EQU	*
	LDK	A1,LMP4	NO 
	CALL	ERROR 
SYA125	EQU	*
	LD	A2,TCLPNT+STKEND	ADR. TO TCLBLK POINTER 
	LC	A3,TDBMC+4,A11	TCL-ID 
	SLL	A3,8 
	LC	A3,TDBMC+5,A11	TCL-ID 
	LDR	A7,A12	NBR OF TCL'S
* 
*        CHECK IF TCL-ID FROM CONF. IS IN APPL
* 
SYA130	EQU	*
	SUK	A7,1	COUNT NBR OF TCL'S
	RF(NN)	SYA135	N=END OF TCLBLK'S
	LDK	A1,LMP5	TID IN CONF NOT IN APPL
	CALL	ERROR 
SYA135	EQU	*
	EL	A6,-2,A2	TCL-ID IN TCLBLK 
	CWR	A3,A6	FOUND ?
	RF(E)	SYA140	YES 
	ADK	A2,4	POINT AT NEXT TCLBLK
	RB	SYA130	TRY IN NEXT TCLBLK 
SYA140	EQU	*
	LD	A6,SHADST+STKEND
	ADR	A6,A8	START OF SHTAB2
	ADR	A6,A8	START OF SHTAB3
SYA145	EQU	*
	SUK	A6,2	STEP SHTAB2 
	LD	A3,SHADST+STKEND
	ADR	A3,A8
	CWR	A6,A3	END OF SHTAB2 ?
	RF(E)	SYA150	YES 
	LDR*	A1,A6	ITCT ADR IN SHTAB2
	ELR	A3,A2	GET TCLBLK-ADR 
	EL	A3,TCLTCT,A3	ITCT ADR IN TCLBLK 
	CWR	A1,A3	FOUND ?
	RB(NE)	SYA145	NO 
	RF	SYA155	YES
SYA150	EQU	*
	ADK	A6,2	NEXT ENTRY IN SHTAB2
	LDR*	A3,A6 
	RB(NZ)	SYA150	ENTRY NOT FREE 
	ELR	A3,A2	GET TCLBLK-ADR 
	EL	A1,TCLTCT,A3	ITCT ADR IN TCLBLK 
	STR	A1,A6	STORE ITCT ADR IN SHTAB2 
SYA155	EQU	*
	SUR	A6,A8	POINT AT ENTRY IN SHTAB1 
	LC	A4,TDBNT+1,A11	NBR OF COPIES / 2
	SRC	A4,4 
	LC	A4,TDBNT,A11	NBR OF COPIES / 1
	SLC	A4,12
	SRL	A4,8	BINARY VALUE (NBR OF COPIES)
	LDR	A4,A4	NBR OF COPIES
	RF(Z)	SYA170 
SYA160	EQU	*
	LC	A3,TDBID+4,A11	TID
	SLL	A3,8 
	LC	A3,TDBID+5,A11	TID
	CALL	BUILDT	BUILD TIDTAB PART FOR ONE TCL
SYA170	EQU	*
	CALL	NXTBLK	NEXT CONFIG-BLOCK
	CCK	A2,'TT'	TASK DEF BLOCK ? 
	RB(E)	SYA125	YES 
	LD	A1,NOCOPS+STKEND	TOTAL NBR OF RUNNING TASKS 
	SLL	A1,1	NBR OF BYTES USED 
	ADK	A1,2	ADD LENGTH WORD 
	STR	A1,A7	STORE LENGTH IN TABLE
	ST	A7,DYNTAD,A10	SAVE TABLE START
	ADR	A7,A1	UPDATE "FIRST FREE WORD" 
	SUK	A1,4 
	RF(NZ)	SYA175	MORE THAN ONE TASK IN THE SYSTEM 
	IM	STASK+STKEND	INDICATE SINGLE TASK APPLICATION 
* 
*        PREPARE FOR NEXT APPLICATION 
* 
SYA175	EQU	*
	LD	A2,SHADST+STKEND	GET START OF SHADOW TABLES 
	ST	A2,SHADOW,A10	SAVE IN APPL.SAVE AREA
	ADKL	A10,TABLEN	UPDATE SAVE AREA POINTER 
	ST	A7,SHADST+STKEND	SAVE START OF SHTAB1 
	LDKL	A2,SYA100 
	AD	A2,M:REL+STKCOM	ABSOLUTE BRANCH ADDRESS 
	ABR	A2	CHECK IF MORE APPLICATIONS
SYA178	EQU	*
	EJECT

* GET START OF SYSLCO AFTER MOVE
			 
	ADK	A7,1	TO-ADDRESS (AFTER SHADOW-TABLES)
	ANKL	A7,/FFFE	EVEN ADDRESS 

* CALCULATE RELOCATION

	LDKL	A2,PART2	GET START OF PART2 
	AD	A2,M:REL+STKCOM	ADD RELOCATION BASE 
	SUR	A2,A7	MOVE-LENGTH (SYSLCO) 
	NGR	A2,A2
	ST	A2,RELOCA+STKEND	SAVE NEW RELOCATION TEMPORARY
* CREATE SYSLCO,SYSINI & DDIV MM-TABLE *

	LDR	A2,A7	TO-ADDRESS (SYSLCO)
	ANKL	A2,/F000	FIRST PAGE 
	ST	A2,MMREL1+STKEND	SAVE PHYSICAL PAGE 
	SRL	A2,2	SHIFT FOR MM-PAGING 
	LDKL	A11,MMDDIV
	ADR	A11,A13	GET MM-TABLE START ADDRESSS= 
	LDK	A3,16	SET COUNTER
SYA179	STR	A2,A11	STORE PAGE-POINTER
	ADKL	A11,2	NEXT ENTRY
	ADKL	A2,/400	PAGE INCREMENT
	SUK	A3,1	ALL?
	RB(NZ)	SYA179	NO!
	ANKL	A7,/FFF	GET DISPLACEM. IN PAGE
	ST	A7,LCOTO+STKEND	SAVE (LOGICAL) TO-ADDRESS 
	LDKL	A3,PART2	GET START OF PART2 
	AD	A3,M:REL+STKCOM	ADD RELOCATION BASE 
	LDR	A2,A13	A13=START OF SYSINI 
	SUR	A2,A3	LENGTH 
	ADKL	A2,INILEN	ADKLD LENGTH OF SYSINI
	ST	A2,MOVLE1+STKEND	SAVE LENGTH TO MOVE
	ADR	A7,A2	START OF DDIV AFTER MOVE 
	ST	A7,DDIVTO+STKEND	SAVE NEW DDIV ADDRESS
* CALCULATE DDIV FROM-ADDRESS * 
	CM	APPLNO+STKCOM	RESET NBR OF APPL.
	LDKL	A10,STKEND	START OF 1:ST APPL.SAVE AREA 
SYA180	EQU	*
	LDKL	A1,'CO'	COBOL APPL. 
	CALL	GETAPP	ANY APPLICATION LEFT?
	RF(Z)	OUT01	NO!

	LD	A2,APLLAC,A1	GET SEGTAB 
	ELR	A9,A2	APPTAB ADR 
	EL	A9,APPCOM,A9	COMMON-PSEG-PNTR 
	EL	A3,SGNOSG,A2	NUMBER OF SEGMENTS 
	LDR	A1,A2	SAVE SEGTAB ADDR.
	LDK	A2,SEGREC	SEGMENT BLOCK RECORD LENGTH
	CALL	MULT
	ADR	A1,A3
	ADK	A1,SGNOSG+2	=> START OF DDIV 

	ST	A1,DDIVFR,A10	SAVE DDIV 'FROM'-ADDRESS
	LD	A6,DDIVTO+STKEND	GET DDIV TO ADDR.
	SUR	A6,A1	RELOCATION FOR DDIV
	ST	A6,SAVE01+STKEND	SAVE RELOCATION INCREMENT
	LDKL	A6,/FFFF
	ST	A6,PLTGCS,A10	INIT. START OF PLTGC'S
	CALL	LIMTGC	FIND ICB-PLTGC LIMITS
	LD	A6,SAVE01+STKEND	GET RELOCATION INCREMENT 
	EJECT
* 
* RELOCATE ITCT'S 
* 
RELITC	EQU	*
	LD	A1,DDIVFR,A10	ADR TO APPTAB 
	ELR	A1,A1	ADR TO TCLTAB
	ELR	A2,A1	NBR OF TCL'S 
RELIT1	EQU	*
	SUK	A2,1	ADJUST NBR OF TCL'S 
	RF(N)	RELITX	ALL ITCT'S RELOCATED
	ADK	A1,4	TCLBLK ADR POINTER
	ELR	A3,A1	TCLBLK ADR 
	ADK	A3,TCLTCT	ADR TO ITCT POINTER
	ELR	A3,A3	ITCT ADR 
	CALL	RELOC	RELOCATE PGTG-DATA ADDRESS
	ADK	A3,ITCGLA
	CALL	RELOC	RELOCATE PGTL-DATA-ADR
	ADK	A3,ITCTLT-ITCGLA	TLTAB ADR 
	ELR	A4,A3	NBR OF ENTRIES IN TLTAB
RELIT2	EQU	*
	SUK	A4,1	ADJUST LOOP-COUNTER 
	RB(N)	RELIT1	ALL ENTRIES RELOCATED 
	ADK	A3,ITCTLE	POINT AT NEXT ENTRY
	ELR	A5,A3	ENTRY CONTENT
	RB(Z)	RELIT2	FREE ENTRY
	CALL	RELOC	RELOCATE ENTRY
	RB	RELIT2	NEXT ITCT
RELITX	EQU	*
* 
* RELOCATE TCLBLK'S 
* 
RELTCB	EQU	*
	LD	A1,DDIVFR,A10	APPTAB ADR
	ELR	A1,A1	TCLTAB ADR 
	ELR	A2,A1	NBR OF TCL'S 
RELTB1	EQU	*
	SUK	A2,1	ADJUST NBR OF TCL'S 
	RF(N)	RELTBX	RELOCATION OF TCLBLK'S DONE 
	ADK	A1,4	TCLBLK ADR POINTER
	ELR	A3,A1	TCLBLK ADR 
	ADK	A3,TCLTGC
	CALL	RELOC	RELOCATE ICB-PLTGC-MAIN POINTER 
	ADK	A3,TCLTCT-TCLTGC 
	CALL	RELOC	RELOCATE ITCT POINTER 
	RB	RELTB1	NEXT TCLBLK
RELTBX	EQU	*
* 
* RELOCATE TCLTAB 
* 
RELTCT	EQU	*
	LD	A1,DDIVFR,A10	APPTAB ADR
	ELR	A3,A1	TCLTAB ADR 
	ELR	A2,A3	NBR OF TCL'S 
RELTC1	EQU	*
	SUK	A2,1	COUNT NBR OF TCL'S
	RF(N)	RELTCX	RELOCATION OF TCLTAB DONE 
	ADK	A3,4	TCLBLK ADR POINTER
	CALL	RELOC	RELOCATE TCLBLK POINTER 
	RB	RELTC1	NEXT TCLBLK POINTER
RELTCX	EQU	*
* 
* RELOCATE APPTAB 
* 
RELAPP	EQU	*
	LD	A3,DDIVFR,A10	APPTAB ADR
	CALL	RELOC	RELOCATE TCLTAB-PNTR
RELAPX	EQU	*
* 
* RELOCATE SHADOW-TABLE2 (ITCT ADDRESSES) 
* 
RELSHT	EQU	*
	LD*	A1,SHADOW,A10	SHTAB LENGTH 
	LDR	A2,A1	SAVE SHTAB2 LENGTH 
	AD	A1,SHADOW,A10	SHTAB2 ADR
RELSH1	EQU	*
	SUK	A2,2	ADJUST SHTAB2 LENGTH
	RF(Z)	RELSHX	RELOCATION OF SHTAB2 DONE 
	ADK	A1,2	POINT AT ITCT ADR 
	ADRS	A6,A1	RELOCATE ITCT ADR 
	RB	RELSH1	NEXT 
RELSHX	EQU	*
	ADKL	A10,TABLEN	NEXT APPL. SAVE AREA 
	RB	SYA180	CHECK IF MORE APPL.
OUT01	EQU	* 

	LD	A5,RELOCA+STKEND	GET NEW RELOCATION INCREMENT 
	ADS	A5,M:REL+STKCOM	AND ADJUST RELOCATION BASE 

* CONTINUE IN PART 2 *
			 
	LD	A2,LCOTO+STKEND	GET TO-ADDRESS (SYSLCO) 
	OR	A2,MMREL1+STKEND	PHYSICALL ADDRESS
	LDR	A5,A2	SAVE 
	AD	A5,MOVLE1+STKEND
	SUKL	A5,INILEN	A5=SYSINI START 
	LDKL	A7,START2	GET EXECUTION START ADDRESS 
	AD	A7,M:REL+STKCOM	ADD RELOCATION BASE 
	LD	A3,MOVLE1+STKEND	SYSLCO+SYSINI LENGTH 
	LDKL	A1,PART2	GET START OF PART2 
	AD	A1,M:REL+STKCOM	ADD RELOCATION BASE 
	SU	A1,RELOCA+STKEND	FROM ADDRESS 
* 
* JUMP TO ROUTINE IN SYSTEM-STACK WHICH 
* MOVES SYSLCO, AND THEN CONTINUE IN PART2
* INPUT TO ROUTINE IN STACK IS
*	A1 = FROM ADDR. 
*	A2 = TO ADDR. 
*	A3 = LENGTH 
*	A7 = RESTART ADDR.
* 
	ABL	STKMOV	JUMP TO MOVE-ROUTINE
	EJECT
				
************************************************* 
***                                           *** 
**           SYSLOAD PART 2                    ** 
**                                             ** 
************************************************* 

*   BUILD COMMON AND TASKCLASS DATA AREAS.      * 
*   BUILD TASKDATA PROTOTYPE AREA               * 
*                                               * 
************************************************* 

PART2 	EQU	*

********************************************
***                                      ***
**         S U B R O U T I N E S          **
********************************************

				
	EJECT
*           M O V C O M               * 
*                                     * 
* MOVE ICB-PGTG AND PGTG-DATA         * 
*                                     * 
*************************************** 

MOVCOM	EQU	*
	CALL	FNDCOM	ICB-PGTG ADR 
	LD	A3,DDIVTO+STKEND	APPTAB ADR 
	EL	A3,APPTGL,A3	PGTG-DATA LENGTH 
	CALL	CALLMO	ALLOCATE AND MOVE PGTG-DATA
	ST	A2,PGTGAD+STKEND	SAVE PGTG-DATA NEW ADDRESS 
	LD	A1,DDIVTO+STKEND
	LD	A3,DDIVFR,A10 
	RTN	A14
	EJECT
*         F N D C O M          *
*                              *
* FIND PGTG-DATA               *
*                              *
* EXIT  : A1 PGTG-DATA ADR     *
********************************

FNDCOM	EQU	*
	EL*	A1,DDIVTO+STKEND	ADR TO TCLTAB 
	EL	A1,4,A1	ADR TO TCLBLK 
	EL	A1,TCLTCT,A1	ADR TO ITCT
	ELR	A1,A1	ADR TO PGTG-DATA 
	RTN	A14
	EJECT
*                                       * 
*        R  E  L  T  G  C               * 
*                                       * 
*  RELOCATE ICB-PLTGC CALL-TAB          * 
*                                       * 
*  INPUT: PLTGCS= ICB-PLTGC BLOCK       * 
*                 START ADDRESS         * 
*         PLTGCL= ICB-PLTGC BLOCK       * 
*                 LENGTH                * 
*         A6    = RELOCATION INCREMENT  * 
*         A10   = APPL.SAVE AREA POINTER* 
*                                       * 
***************************************** 

RELTGC	EQU	*
	LD	A3,PLTGCS,A10	ICB-PLTGC START ADR 
	LD	A2,PLTGCL,A10	ICB-PLTGC LENGTH
	ADR	A2,A3	ICB-PLTGC END ADR
RELTG1	EQU	*
	LDR	A1,A3
	LDR	A11,A1	GET ADR FOR COMPARE 
	LDR	A9,A2	GET ADR FOR COMPARE
	CALL	CMPADR	ALL ICB-PLTGC'S RELOCATED ?
	RF(NL)	RELTGX	YES
	ELR	A3,A1	GET FIRST WORD IN ICB-PLTGC
	SRC	A3,8	GET FIRST BYTE
	CCK	A3,/6161	HANDLED BY LIMTGC ? 
	RF(NE)	RELTG2	NO 
	XRK	A3,1	CLEAR BIT 15
	SLC	A3,8	NEW FIRST WORD VALUE
	ESR	A3,A1	RESTORE IT 
RELTG2	EQU	*
	EL	A3,TGCCAL,A1	NBR OF ENTRIES 
	SLL	A3,1	*2 NBR OF BYTES 
	ADR	A3,A1	ADD BASE 
	ADK	A3,10	POINTER TO 1:ST WORD AFTER LAST ENTRY
	LDR	A4,A1	GET BASE 
	ADK	A4,10	1:ST ENTRY 
	LDR	A9,A3
RELTG3	EQU	*
	LDR	A11,A4 
	CALL	CMPADR	END OF THIS ICB-PLTGC ?
	RB(NL)	RELTG1	YES,CONTINUE WITH NEXT ICB-PLTGC 
	ELR	A11,A4	GET ADR TO RELOCATE 
	ADR	A11,A6	RELOCATE
	ELR	A1,A11 
	SRL	A1,8 
	SUK	A1,/60	ICB-PLTGC ? 
	RF(N)	RELTG4	NO, ASM-SUBROUTINE
	SUK	A1,1 
	RF(P)	RELTG4	NO, ASM-SUBROUTINE
	ESR	A11,A4	RESTORE RELOCATED ADR 
RELTG4	EQU	*
	ADK	A4,2	STEP CALL-TAB POINTER 
	RB	RELTG3	NEXT CALL-TAB-ENTRY
RELTGX	EQU	*
	RTN	A14
	EJECT
*             F N D B L K        *
*                                *
* FIND A TCLBLK CORRESPONDING    *
* TO AN ITCT ADDRESS             *
*                                *
* INPUT : A7     ITCT ADR        *
*         DDIVTO APPTAB ADR      *
* EXIT  : A1     TCLBLK-PNTR ADR *
*                IN TLCTAB       *
*         A3     TCLBLK ADR      *
* WORK  : A2,A5                  *
**********************************

FNDBLK	EQU	*
	LD	A1,DDIVTO+STKEND	TCLTAB ADR 
	ELR	A1,A1
	ELR	A2,A1	NBR OF TCLBLK'S
FNDBL0	EQU	*
	SUK	A2,1	COUNT NBR OF TCLBLK'S 
	RF(NN)	FNDBL1	BLOCKS LEFT
	LDK	A1,LMP4
	CALL	ERROR 
FNDBL1	EQU	*
	ADK	A1,4	TCLBLK-PNTR ADR 
	ELR	A3,A1	TCLBLK-PNTR
	EL	A5,TCLTCT,A3	ITCT FOUND ? 
	CWR	A7,A5
	RB(NE)	FNDBL0	NO,TRY NEXT TCLBLK 
	RTN	A14	YES,RETURN 
	EJECT

***************************** 
* START OF PROGRAM PART 2   * 
***************************** 

* LOAD BASE ADDRESS * 
********************* 
* A5=START-ADDRESS
* SAVE01=RELOCATION INCREMENT 
* SAVE03=DDIV TO-ADDRESS
* SAVE04=DDIV FROM ADDRESS
* SAVE05=LENGTH OF REAL ITCTTAB 
				
START2	EQU	*
	LDR	A8,P	LOAD TEMP. STACKBASE
	ADK	A5,2	ADD FOR RELOCATION ROUTINE
	CFR	A8,A5
* 
*        INITIATE REGISTERS AND VARIABLES 
* 
	LDKL	A10,STKEND	START OF 1:ST APPL. SAVE AREA
	LD	A1,APCTAB,A10	FIRST APLTAB BLOCK ADDR.
	LD	A2,APPLNO+STKCOM	GET NUMBER OF APPLICATIONS 
	ST	A2,ALICOU+STKEND	INIT. ALICOU 
	RF	PRT200
* 
*        UPDATE VALUES FOR NEXT APPLICATION 
* 
NXTAPP	EQU	*
	ADKL	A10,TABLEN	NEXT APPL. SAVE AREA 
	LD	A1,APCTAB,A10	NEXT APLTAB BLOCK 
	LD	A2,ALICOU+STKEND	GET APPL.COUNTER 
	SUK	A2,1	DECREMENT APPL.COUNTER
	ST	A2,ALICOU+STKEND	SAVE APPL.COUNTER
	RF(NZ)	PRT200	IF ANY APPL IS LEFT
			DON'T LEAVE SYSLCO YET 
	LD	A2,SAEFA1+STKEND	GET END OF FREE AREA PAGE
	ST	A2,FYSPAG+STKCOM	SET FYSPAG TO THAT PAGE
	LD	A2,SAEFA2+STKEND	GET END OF FREE AREA DISPL.
	ST	A2,LSTADR+STKCOM	SET LSTADR TO THAT DISPL.
	LDKL	A2,LCOEND	GET SYSLCO END ADDRESS
	AD	A2,M:REL+STKCOM	ADD RELOCATION BASE 
	ABR	A2	LEAVE SYSLCO

PRT200	EQU	*
* 
*	GET MMU-TABLE FROM TTAB OF CURRENT TASK 
* 
	LD*	A2,APLMMC,A1	GET TCTAB ENTRY FOR CURRENT TASK
	ADKL	A2,TTB:MT	ADDR. TO 1:ST MMU-TABLE ENTRY 
	TLR	A2	LOAD MMU-TABLE
	TS	MMTAB,A13	STORE MMU-TABLE IN MMTAB
* 
*        CHECK IF END OF FREE AREA STARTS WHERE 
*        PROT. DDIV FOR THIS APPLICATION STARTS 
*        AND IF SO RESET FLAG 
* 
	LD	A2,APLLAC,A1	GET SEGTAB ADDR. 
	ELR	A9,A2	APPTAB ADDR. 
	EL	A3,APPINT,A9	INTERPRETER ACTIV ADDR.
	ST	A3,INTENT+STKEND	SAVE IT
	EL	A9,APPCOM,A9	START OF APPL. 
	ST	A9,APLLAC,A1	STORE NEW APLLAC 
	LDR	A3,A2	SEGTAB ADDR. 
	SRL	A3,11	MMU-ENTRY NUMBER 
	ADKL	A3,MMTAB	MMU-ENTRY ADDR.
	ADR	A3,A13	RELOCATE
	LDR*	A3,A3	GET CONTENTS IN MMU-ENTRY 
	ANKL	A3,/FC00
	CW	A3,SAEFA1+STKEND	SAME PAGE? 
	RF(NE)	PRT205	NO!
	LDR	A3,A2	SEGTAB ADDR. 
	ANKL	A3,/FFF	DISPLACEMENT
	CM	PDDIV+STKEND	RESET FLAG 
	CW	A3,SAEFA2+STKEND	SAME DISPLACEMENT IN PAGE? 
	RF(E)	PRT220	YES!
* 
*        CALCULATE LENGTH OF PROT. DDIV+SEGTAB
* 
PRT205	EQU	*
	LDR	A3,A2	SEGTAB ADDR. 
	ANKL	A3,/FFF	DISPLACEMENT IN PAGE
	SUKL	A3,/800	MORE THAN 2K BYTE TO BUILD IN 
	RF(NP)	PRT210	YES! 
	LDR	A3,A2	SEGTAB ADDR. 
	ADKL	A2,/1000	NEW PAGE 
	ANKL	A2,/F000	DISPLACEMENT IN PAGE = 0 
	CWR	A2,A9	HIGHER ADDR.THEN START OF APPL.? 
	RF(NG)	PRT210	NO!
	LDR	A2,A3	SEGTAB ADDR. 
PRT210	EQU	*
	LDR	A3,A9	APPLICATION START ADDR.
	SUR	A3,A2	LENGTH OF SEGTAB+PROT.DDIV 
	ST	A3,PDDIVL,A10	SAVE
	IM	PDDIV+STKEND	SET FLAG 
PRT220	EQU	*
* 
*	STORE MMTABLE ADDRESSES 
* 
	LDKL	A1,MMDDIV	GET MMU-TABLE ADDR. 
	ADR	A1,A13	RELOCATE
	ST	A1,MMTO+STKCOM	SAVE 
	LDKL	A1,MMTAB	GET MMU-TABLE ADDR.
	ADR	A1,A13	RELOCATE
	ST	A1,MMFROM+STKCOM	SAVE 
* 
*	MOVE DDIV 
* 
	LD	A1,DDIVFR,A10	GET FROM-ADDRESS
	LD	A2,DDIVTO+STKEND	GET TO ADDRESS 
	LDR	A3,A9	GET APPLICATION START (=END OF DDIV
	SUR	A3,A1	=> LENGTH
	CALL	XMOVE 
* UPDATE FSTPAG AND FSTADR
	LD	A1,APCTAB,A10	GET APLTAB BLOCK ADDR.
	LD	A5,APLLAC,A1	DDIV END ADDR. 
	SU	A5,DDIVFR,A10	END-START=DDIV LENGTH 
	AD	A5,DDIVTO+STKEND	NEW DDIV END 
	LDR	A6,A5
	ANKL	A6,/F000	GET LOGICAL PAGE (MM-ENTRY)
	SRL	A6,11	ADJUST FOR ADDRESSING
	ADKL	A6,MMDDIV	ADD RELATIVE START ADDRESS
	ADR	A6,A13	RELOCATE
	LDR*	A6,A6	GET MM-TABLE CONTENTS 
	ST	A6,FSTPAG+STKCOM	SAVE 
	ANKL	A5,/FFF	GET DISPLACEMENT
	ST	A5,FSTADR+STKCOM	AND SAVE 
	SUKL	A9,10	RESERVE 5 WORDS FOR DEBUGGER
* CHECK IF MEMORY OVERFLOW
	LDR	A1,A9	SAVE 
	LDR	A9,A6
	LD	A11,SAEFA1+STKEND 
	CALL	CMPADR
	RF(G)	SYA202	OK! 
	RF(L)	SYA201	NOT OK! 
	LDR	A9,A5
	LD	A11,SAEFA2+STKEND 
	CALL	CMPADR	MEMORY OVERFLOW? 
	RF(NL)	SYA202	NO!
SYA201	EQU	*
	LDKL	A1,LMP3 
	CALL	ERROR 
SYA202	EQU	*
	LDR	A9,A1	RELOAD 
* REMOVE DDIV ENTRIES IN MM-TABLE 

	SRL	A1,11	ADJUST FOR ADDRESSING
	ANK	A1,/1E 
	LDKL	A2,MMTAB-2	GET TABLE ADDRESS
	ADR	A2,A13	RELOCATE
	ADR	A1,A2	APPTAB START ENTRY 
	LDKL	A4,/FC00
SYA205	CWR	A1,A2	ALL? 
	RF(E)	SYA207	YES!
	STR	A4,A1	REPLACE ENTRY WITH PAGE ERROR
	SUK	A1,2 
	RB	SYA205
SYA207	EQU	*
* CHANGE TABLE-ADDRESSES
	LD	A4,MMFROM+STKCOM
	LD	A5,MMTO+STKCOM
	ST	A4,MMTO+STKCOM
	ST	A5,MMFROM+STKCOM
	ANKL	A9,/FFFE	EVEN ADDRESS 
	ST	A9,LSTADR+STKCOM	SAVE END OF FREE AREA
	LDKL	A3,MMTAB	CURRENT MM-TAB 
	ADR	A3,A13 
	CALL	MMENT 
	ST	A9,TTAB+STKCOM
	ST	A1,FYSPAG+STKCOM	SAVE PHYSICAL PAGE 
	CALL	MOVCOM	ALLOC/MOVE PGTG-DATA 
	AD	A1,PLTGCS,A10 
	SUR	A1,A3	ICB-PLTGCS NEW START ADDRESS 
	LD	A3,PLTGCL,A10	ICB-PLTGC LENGTH
	LD	A6,LSTADR+STKCOM	LAST FREE ADR
	SU	A6,PLTGCE,A10	GET DISPL FOR RELOCATION
	CALL	CALLMO	MOVE 
	TL*	MMTO+STKCOM
	ST	A2,PLTGCS,A10	ICB-PLTGCS NEW (FINAL) START ADR
	CALL	RELTGC	RELOCATE ICB-PLTGC CALL TABLE
	ST	A6,TGCREL+STKEND	ICB-PLTGC RELOCATION 
	LD	A4,SHADOW,A10	SHTAB1 ADR
	LDR*	A5,A4	SHTAB1 LENGTH 
	LDR	A6,A4	SHTAB1 ADR 
	ADR	A4,A5	SHTAB2 ADR 
	SUK	A5,2	ADJUST FOR TABLE LENGTH WORD
	LDKL	A3,MMTAB	CURRENT MM-TAB 
	ADR	A3,A13 
	CALL	MMENT	FIND LAST USED ENTRY
	ST	A3,LSTENT+STKEND	SAVE LAST USED ENTRY 
* 
*  GENERATE TASK CLASS DATA 
* 
TCLLOP	EQU	*
	LDKL	A8,MMTAB
	SUKL	A8,MMBEG
	ADR	A8,A13 
	ST	A8,TTAB+STKCOM
	LD	A7,LSTENT+STKEND	LAST USED MM-ENTRY FOR COMMON DATA 
	ST	A7,LSTPAG,A8	SAVE FOR MOVING
	ST	A5,TCLCOU+STKEND
	ADK	A4,2	SHTAB2 ENTRY
	LDR	A8,A4	GET SHTAB2 POINTER 
	TL*	MMFROM+STKCOM
	LDR*	A7,A8	ITCT ADR
	CALL	FNDBLK	FIND TCLBLK
	EL	A5,TCLTLD,A3	PGTL-DATA-LENGTH-USED
	ELR	A1,A3	STACK-SIZE 
	ES	A1,ITCNEP,A7	SAVE IN ITCT 
	ES	A5,ITCGLL,A7	SAVE IN ITCT 
	LD	A5,TCLCOU+STKEND	NBR OF ITCT'S LEFT 
	RF(Z)	TCLEXT	NONE
	LD	A1,TGCREL+STKEND
	EL	A3,ITCTGC,A7
	ADR	A3,A1
	LDR	A1,A7
	ES	A3,ITCTGC,A1	RELOCATE ICB-PLTGC-MAIN IN ITCT
	LD	A3,PGTGAD+STKEND	PGTG-DATA ADDRESS
	ES	A3,ITCCOM,A1	UPDATE POINTER IN ITCT 
	LD	A3,DDIVTO+STKEND	APPTAB ADDRESS 
	EL	A3,APPCOM,A3	COMMON PROGRAM SEGM
	ES	A3,ITCCSB,A1	SAVE IN CURRENT SEGMENT BASE 
	EL	A3,ITCTLT,A7	NBR OF ENTRIES IN TLTAB
	SLL	A3,1	NBR OF BYTES   IN TLTAB 
	ADK	A3,2	ADJUST FOR TLTAB LENGTH WORD
	ADK	A3,ITCTLT	ITCT LENGTH
	CALL	CALLMO	ALLOCATE AND MOVE ITCT 
	STR	A2,A4	NEW ITCT ADR IN SHTAB2 
	ST	A2,SAVITC+STKEND	SAVE NEW ITCT ADR
	CALL	MVPGTL	ALLOCATE AND MOVE PGTL-DATA
	ST	A10,SAVE01+STKEND	SAVE APPL SAVE AREA POINTER 
	CALL	MVSTAT	ALLOCATE AND MOVE STATIC-ZERO
	LD	A10,SAVE01+STKEND	GET APPL SAVE AREA POINTER
	LDK	A2,2 
	ST	A2,DYNDIS+STKEND	INIT.DYN.CORE TABLE DISPL. 
	CALL	ALLDYN	ALLOCATE DYNAMIC-CORE
	LDR	A8,A4	GET ITCT ADDRESS POINTER 
	CALL	INIDYN	INITIATE DYNAMIC CORE
	ST	A10,SAVE01+STKEND	SAVE APPL SAVE AREA POINTER 
	CALL	GETTAB	GET TTAB ADDRESS 
	CALL	MOVMMT	MOVE MMTAB TO TTAB 
	LD	A10,SAVE01+STKEND	GET APPL SAVE AREA POINTER
	CM	LSTPAG,A9	CLEAR SEGMENT BLOCK POINTER 
	LD*	A1,SHADOW,A10	SHTAB1 LENGTH
	LDR	A4,A8	GET SHTAB2 POINTER 
	ADR	A1,A4	SHTAB3 ENTRY 
	STR	A2,A1	MM-TAB ADDRESS 
	LD	A1,LSTENT+STKEND	GET LAST USED ENTRY,UPTO COMMON DATA 
	CALL	MMRST	RESET UNUSED MM-ENTRIES 
	LD	A5,TCLCOU+STKEND
	SUK	A5,2	COUNT NBR OF ITCT'S 
	RB(P)	TCLLOP	ITCT'S LEFT 
TCLEXT	EQU	*
	EJECT
SYA200	EQU	*

* INCLUDE MOVED PROT.DDIV IN FREE AREA
	LD	A5,DDIVTO+STKEND	GET START OF MOVED PROT.DDIV 
	LDR	A8,A5	SAVE 
	ANKL	A5,/F000
	SRL	A5,11
	ADKL	A5,MMDDIV	MMU-TABLE ADDRESS 
	ADR	A5,A13	RELOCATE
	LDR*	A5,A5	GET PAGE FROM MMU-TABLE 
	ST	A5,FSTPAG+STKCOM	SET FSTPAG TO THAT PAGE
	ANKL	A8,/FFF	GET DISPL. IN PAGE
	ST	A8,FSTADR+STKCOM	SET FSTADR TO THAT DISPL.
* CONTINUE IN PART 3 *

	LDKL	A5,START3	RELATIVE START ADDRESS
	AD	A5,M:REL+STKCOM	ADD RELOCATION BASE 
	ABR	A5 
	EJECT


************************************************
***                                          ***
**            SYSLCO  PART 3                  **
**                                            **
************************************************

*   BUILD REAL ITCT'S. COPY ITCT'S ACCORDING TO*
*   SHADOW TABLE                               *
*                                              *
************************************************

PART3	EQU	* 

	EJECT
***************************** 
* START OF PROGRAM PART 3   * 
***************************** 

**              G E T T A B                 **
**                                          **
**                                          **
**  FIND TTAB ADDRESS                       **
**                                          **
**  INPUT :A8=POINTER TO ITCT ADR           **
**  OUTPUT:A2=TTAB-ADDRESS                  **
**         A1=TID                           **
**  WORKREGS:A3,A4,A10                      **
**********************************************

GETTAB	EQU	*
	LDR*	A10,A8	ITCT-ADDRESS 
	EL	A1,ITCTID,A10	GET TID 
GETTTB	EQU	*	ENTRY. INPUT: A1=TID 
	LD	A4,SCTTCT	GET TC:TAB ADDRESS
	LDR*	A3,A4	TCTAB LENGTH
GETT10	ADK	A4,2 
	SUK	A3,2	ALL?
	RF(NN)	GETT20	NO!
	LDR	A3,A1	SAVE A1 (DEBUGGING PURPOS) 
	LDK	A1,LMP5	TID ERROR
	CALL	ERROR 
GETT20	LDR*	A2,A4	TTAB-ADDRESS
	CW	A1,TTBTID,A2	TID EQUAL ?
	RB(NE)	GETT10	NO!
	CM	TTB:PP,A2	RESET PENDING POINTER IN TTAB 
	ST	A2,TTAB+STKCOM	SAVE 
	EL	A3,ITCSPL,A10	GET SPL-PBS.PROGRAM-DATA ADDRESS
	ST	A3,TTB:SA+20,A2	SAVE IN TTAB
	ADKL	A3,SPLSIZ-SPLCPB-2	POINT AT SPL-PBS STACK-BASE
	ST	A3,TTB:SA+28,A2	SAVE IN TTAB
	RTN	A14
	EJECT


**                    Q U E J O B                ** 
**                                               ** 
**                                               ** 
**  QUEUE TASK VIA 'ACTOT' AND SWITCH TO LEVEL   ** 
**  0, ENB.                                      ** 
**                                               ** 
**  INPUT: A10=ITCT-ADDRESS                      ** 
**         A2=TTAB-ADDRESS                       ** 
*************************************************** 

QUEJOB	EQU	*
* QUEUE THIS TASK (THIS TID)

	LDKL	A3,RETUR	GET RETURN (FROM A15) ADDRESS
	AD	A3,M:REL+STKCOM	RELOCATE
	STR	A3,A15	PUT ON STACK
	LDKL	A3,/00C0	SET LEVEL 0 AND ENABLE 
	STR	A3,A15	PSW 
	CF	A15,SAVE8	SAVE 8 REGS 
	LDK	A7,0	CLEAR ABORT INDICATOR 
	LDR	A5,A2	GET TTAB-ADDRESS 
	LD	A2,INTENT+STKEND	INTERPRETER ENTRY
	CF	A15,ACTOT 
GETT40	ABL	RETUR8	RELOAD 8 REGS 
RETUR	EQU	* 
	RTN	A14
	EJECT
*      G E N C O P        * 
*                         * 
*************************** 
GENCOP	EQU	*
	LDR	A3,A1	SAVE A1
	LD	A1,LSTENT+STKEND	LAST USED MM-ENTRY FOR COMMON DATA 
	LDKL	A2,MMTAB
	SUKL	A2,MMBEG
	ADR	A2,A13 
	ST	A2,TTAB+STKCOM
	ST	A1,LSTPAG,A2	SAVE LAST USED ENTRY FOR MOVING
	CALL	MMRST	RESET MMTAB UNUSED ENTRIES
	LDR	A1,A3	RESTORE A1 
	ST	A5,SAVE05+STKEND	SAVE A5
	ST	A6,SAVE06+STKEND	SAVE A6
	CALL	FNDTID	FIND TID 
	LD	A1,TCLITC+STKEND	TCL  ITCT ADDRESS
	LDK	A3,ITCTLT	TLTAB START DISPL
	EL	A2,ITCTLT,A1	NBR OF ENTRIES IN TLTAB
	SLL	A2,1	NBR OF BYTES   IN TLTAB 
	ADK	A2,2	ADJUST FOR TLTAB COUNTER
	ADR	A3,A2	ITCT LENGTH
	CALL	CALLMO	COPY ITCT
	TL*	MMTO+STKCOM
	ST	A2,SAVITC+STKEND	SAVE ITCT ADR
	LD	A3,SAVTID+STKEND	GET NEW TID
	ES	A3,ITCTID,A2	STORE IN ITCT
	LDR	A3,A2	ITCT ADR 
	CALL	MVPGTL	ALLOCATE AND MOVE PGTL-DATA
	LD	A3,SAVITC+STKEND	ITCT ADR 
	CALL	MVSTAT	ALLOCATE AND MOVE STATIC-ZERO
	LD	A3,SAVITC+STKEND	ITCT ADR 
	LD	A10,SAVE01+STKEND	GET APPL.SAVE AREA POINTER
	CALL	ALLDYN	ALLOCATE DYNAMIC CORE
	CALL	INIDYN	INITIATE DYNAMIC CORE
	LD	A1,SAVTID+STKEND	TID
	LDR	A10,A7	ITCT ADDRESS
	CALL	GETTTB	FIND TTAB ADR
	CALL	QUEJOB	QUEUE THIS TASK
	LD	A10,SAVITC+STKEND	ITCT ADR
	LDR	A5,A10	ITCT ADDRESS
	ADK	A5,22
	ST	A5,TTB:SA+26,A2	SAVE ITCT ADR IN TTAB(SAVE-A13) 
	ADKL	A5,ITCCSB-ITCDCD	POINT AT CSB IN ITCT 
	ST	A5,TTB:CB,A2	SAVE IN TTAB 
	LD	A5,SAVE05+STKEND	RESTORE A5 
	LD	A6,SAVE06+STKEND	RESTORE A6 
	CALL	MOVMMT	MOVE MM-TABLE TO TTAB
	CM	LSTPAG,A9	CLEAR SEGMENT BLOCK POINTER 
	LD	A1,SAVTID+STKEND	NEXT TID 
	RTN	A14
	EJECT
*        F N D T I D        * 
*                           * 
* FIND TID FOLLOWING "A1"   * 
* IN SHTAB4                 * 
*                           * 
* INPUT : A1=TID            * 
* EXIT  : A1=NEW TID        * 
* WORK  : A2,A3             * 
***************************** 

FNDTID	EQU	*
	LD	A2,SHADOW,A10	SHTAB1 ADR
	LD*	A3,SHADOW,A10	SHTAB1 LEN 
	ADR	A2,A3	SHTAB2 ADR 
	ADR	A2,A3	SHTAB3 ADR 
	ADR	A2,A3	SHTAB4 ADR 
	LDR*	A3,A2	SHTAB4 LEN
FNDTI0	EQU	*
	SUK	A3,1	FINISHED ?
	RF(NN)	FNDTI1	NO 
	LDK	A1,LMP5	YES,TID ERROR
	CALL	ERROR 
FNDTI1	EQU	*
	ADK	A2,2	ADJUST POINTER
	CWR*	A1,A2	TID FOUND ? 
	RB(NE)	FNDTI0	NO,TRY NEXT
	LD	A1,2,A2	YES,LOAD NEXT TID 
	ST	A1,SAVTID+STKEND	SAVE IT
	RTN	A14
	EJECT

*          I N I D Y N                 *
*                                      *
*  INPUT : A3 = SPL-PBS ADDRESS        *
*                                      *
*  WORK  : A1 - A5                     *
*                                      *
****************************************

INIDYN	EQU	*
	LDR	A1,A3	SPL-PBS ADDRESS
	LDKL	A2,PBSTAB	CONSTANT-TABLE ADDRESS
	AD	A2,M:REL+STKCOM 
INID10	EQU	*
	LDR*	A5,A2	NBR OF COPIES OF THIS WORD
	CWK	A5,/FFFF	END OF CONSTANT-TABLE ? 
	RF(E)	INID30	YES 
	LD	A4,2,A2	WORD TO COPY
	ADK	A2,4	STEP CONSTANT-TABLE POINTER 
INID20	EQU	*
	SUK	A5,1	STEP NBR OF COPIES
	RB(N)	INID10	NEXT WORD 
	ESR	A4,A1	STORE WORD IN SPL-PBS
	ADK	A1,2	STEP SPL-PBS POINTER
	RB	INID20	NEXT COPY
INID30	EQU	*
	LDKL	A5,STKMAX	STACK-SIZE
	ES	A5,SPLSTS,A3	STORE IN SPL-PBS.STACK-SIZE
	LDKL	A1,ENTFIN	ENTRY FINI (ADDRESS)
	ES	A1,SPLENT,A3	STORE IN SPL-PBS.ENTRY FINI
	LDR	A2,A3	SPL-PBS ADDRESS
	ADK	A2,SPLSTA	START OF SPL-STACK AREA
	ADR	A5,A2	+ STACK-AREA ADDRESS 
	ES	A5,SPLSTB,A3	STORE IN SPL-PBS.STACK-BASE
	RTN	A14
	EJECT

*********************************************** 
**                                           ** 
**  EACH WORD IN THIS TABLE CONSISTS OF :    ** 
** WORD1=COUNTER, NBR OF COPIES OF NEXT WORD ** 
** WORD1=WORD                                ** 
**                                           ** 
**  BYTE1 (COUNTER) = /FF MEANS END OF TABLE ** 
**                                           ** 
*********************************************** 

PBSTAB	EQU	*
	DATA	1	TERMINATION-CODE
	DATA	0 
	DATA	1	STACK-USED
	DATA	/6
	DATA	1	STACK-SIZE
	DATA	0 
	DATA	3	PROCEDURE-NAME
	DATA	/2020 
	DATA	20	PGM-DATA UNTIL STACK-BASE
	DATA	0 
	DATA	1	STACK-BASE
	DATA	0 
	DATA	1	ENTRY-FINI
	DATA	0 
	DATA	16	LAST-TS,RUNTIME-WORK-AREA
	DATA	0 
	DATA	/FFFF	E N D   O F   T A B L E 

	EJECT
*        A L L D Y N           *
*                              *
* ALLOCATE DYNAMIC-CORE        *
*                              *
* INPUT : A3 ITCT ADDRESS      *
*        A10 APPL.SAVE AREA   * 
*            POINTER          * 
* EXIT  : ITCT IS UPDATED      *
*         WITH DYNAMIC-CORE    *
*         POINTERS             *
* WORK  : A1-A3,A7             *
********************************

ALLDYN	EQU	*
	TL*	MMTO+STKCOM
	LDR	A7,A3	ITCT ADR 
	EL	A3,ITCNEP,A3	STACK-SIZE REQUIRED
	CALL	CALLMO	ALLOCATE FROM BOTTOM 
	TL*	MMTO+STKCOM
	EL	A3,ITCNEP,A7	STACK-SIZE MOVED 
	ES	A2,ITCDCB,A7	SAVE BASE PNTR 
	ES	A2,ITCDCC,A7	SAVE CURRENT EXTENT
	ADR	A3,A2	+ BASE-PNTR
	SUKL	A3,SPLSIZ	- SPL-STACK-SIZE
	ES	A3,ITCDCD,A7	SAVE DDI-POOL-BASE 
	ADK	A3,SPLCPB	POINT AT SPL-PBS-PNTR
	ES	A3,ITCSPL,A7	SAVE SPL-PBS-PNTR
	LD	A1,DYNTAD,A10	TABLE ADR 
	LD	A2,DYNDIS+STKEND	GET DYN.CORE TABLE DISPL 
	ADR	A1,A2	NEXT TABLE ENTRY TO USE
	ADK	A2,2	COUNT DISPL 
	ST*	A2,DYNTAD,A10	COUNT LENGTH WORD IN TABLE 
	ST	A2,DYNDIS+STKEND	STEP DISPL 
	SUK	A3,SPLCPB	POINT AT SPL-PBS START 
	STR	A3,A1	STORE SPL-PBS ADR IN TABLE 
	RTN	A14
	EJECT
*          M V S T A T         *
*                              *
* ALLOCATE AND MOVE STATIC-    *
* CORE                         *
*                              *
* INPUT : A3 ITCT ADDRESS      *
* EXIT  : A6 -1                *
*         A3 ITCT ADDRESS      *
* WORK  : A1-A2,A7-A8,A10      *
********************************

MVSTAT	EQU	*
	STR	A4,A14	SAVE SHTAB2 POINTER ON STACK
	SUKL	A14,2	ADJUST STACK-POINTER
	LDR	A7,A3	ITCT ADR 
	ADK	A3,ITCTGC	POINT AT ICB-PLTGC-MAIN ADDRESS
	ST	A3,SAVE07+STKEND	SAVE POINTER 
	ADK	A7,ITCTLT	TLTAB ADR
	LDR	A12,A7	SAVE TLTAB-BASE 
	ELR	A6,A7	NBR OF ENTRIES IN TLTAB
MVSTA1	EQU	*
	SUK	A6,1	COUNT 
	RF(NN)	MVSTA2	STATIC-ZERO AREAS LEFT 
	LD	A3,SAVE07+STKEND	LOAD ICB-PLTGC-MAIN ADR POINTER
	SUK	A3,ITCTGC	MAKE IT ITCT POINTER 
	ADKL	A14,2	ADJUST STACK-POINTER
	LDR*	A4,A14	GET SHTAB2 POINTER FROM STACK
	RTN	A14
MVSTA2	EQU	*
	ADK	A7,2	POINT AT STATIC-ZERO ADR
	ELR	A8,A7	STATIC-ZERO ADR
	RB(Z)	MVSTA1	EMPTY ENTRY 
	EL*	A3,SAVE07+STKEND	LOAD ICB-PLTGC-MAIN ADDRESS 
	SUR	A10,A10	LEVEL
	LDK	A1,0	RESET INDICATOR 
	LD	A2,FREQUE	GET MONITOR BLOCK ADR.	=2 
	CALL	FNDTGC	FIND STATIC-ZERO ADR+LENGTH
	LD	A10,SAVE01+STKEND	GET APPL.SAVE AREA POINTER
	CALL	CALLMO	ALLOCATE AND MOVE STATIC-ZERO
	TL*	MMTO+STKCOM
	ESR	A2,A7	UPDATE TLTAB ENTRY 
	RB	MVSTA1
	EJECT
*         F N D T G C            *
*                                *
* FIND STATIC-ZERO ADR+LENGTH    *
* FOR ONE PROGRAM                *
*                                *
* INPUT : A3  ICB-PLTGC ADR      *
*         A8  STATIC-ZERO ADR    *
*             WANTED             *
*         A10 0 (ZERO)           *
*         A12 TLTAB BASE         *
*         A2  MONITIR BLOCK ADR  *		=2
* EXIT  : A1  STATIC-ZERO ADR    *
*         A2  MONITOR BLOCK ADR  *		=2
*         A3  STATIC-ZERO LENGTH *
* WORK  : A2,A4,A5,A9,A11        *
* WORKAREA: USES MONITOR BLOCKS  *		=2
*           AS STACK             *		=2
**********************************

FNDTGC	EQU	*
	ELR	A1,A3		=2
	SRL	A1,8		=2 
	SUK	A1,/60	COBOL PROGRAM?	=2 
	RF(Z)	FNDT00	YES!	=2 
	LDK	A1,0	INDICATE NOT FOUND	=2 
	RF	FNDTG0	RETURN	=2
FNDT00	EQU	*		=2
	EL	A1,TGCSZD,A3	GET DISPL IN TLTAB 
	ADR	A1,A12	POINT AT TLTAB-ENTRY
	ADK	A1,2	ADJUST FOR TLTAB LENGTH-WORD
	ELR	A1,A1	STATIC-ZERO-ADR
	CWR	A1,A8	WANTED ? 
	RF(NE)	FNDTG1	NO 
	ADK	A3,TGCSZL	YES,POINT AT LENGTH WORD 
	ELR	A3,A3	STATIC-ZERO-LENGTH 
FNDTG0	EQU	*
	RTN	A14
FNDTG1	EQU	*
	LDK	A1,0	INDICATE NOT FOUND
	EL	A5,8,A3	NBR OF ENTRIES IN PLTGC CALL TAB
	SLL	A5,1	*2 = TABLE LENGTH 
	ADR	A5,A3	BASE 
	ADK	A5,10	DISPL TO TABLE START 
	LDR	A4,A3	ICB-PLTGC ADR
	ADK	A4,TGCCAL+TGCCTE	ADR TO FIRST ENTRY IN CALL TAB
FNDTG2	EQU	*
	LDR	A9,A4	TABLE START ADR
	LDR	A11,A5	TABLE END ADR 
	CALL	CMPADR	END OF CALL-TABLE ?
	RB(NG)	FNDTG0	YES!	=2
FNDTG3	EQU	*
	ST	A4,2,A2	SAVE ON STACK	=2
	ST	A5,4,A2	SAVE ON STACK	=2
	LDR*	A2,A2	ADJUST STACK POINTER	=2 
	RF(NZ)	FNDTG4	MORE BLOCKS AVILABLE	=2
	LDKL	A1,NOBLK	NO BLOCKS AVILABLE	=2
	CALL	ERROR		=2 
FNDTG4	EQU	*		=2
	ELR	A3,A4	NEXT LINK
	ADKL	A10,1	ADJUST LEVEL
	CALL	FNDTGC	NEXT LEVEL 
	SUK	A2,6	ADJUST STACK POINTER	=2 
	LDR	A1,A1	STATIC-ZERO FOUND
	RB(NZ)	FNDTG0	YES
	SUKL	A10,1	ADJUST LEVEL
	LD	A4,2,A2	TABLE POINTER FROM STACK	=2 
	LD	A5,4,A2	TABLE END POINTER FROM STACK	=2 
	ADK	A4,TGCCTE	POINT TO NEXT TABLE-ENTRY
	RB	FNDTG2
	EJECT
*         M V P G T L             * 
*                                 * 
* ALLOCATE AND MOVE PGTL-DATA     * 
*                                 * 
* INPUT : A2 ITCT ADR             * 
* EXIT  : A1 OLD PGTL-DATA ADR    * 
*         A2 NEW PGTL-DATA ADR    * 
*         A3 ITCT ADR             * 
*********************************** 

MVPGTL	EQU	*
	TL*	MMTO+STKCOM
	EL	A1,ITCGLA,A2	PGTL-DATA ADR
	EL	A3,ITCGLL,A2	PGTL-DATA LENGTH 
	CALL	CALLMO	ALLOCATE AND MOVE PGTL-DATA
	TL*	MMTO+STKCOM
	LD	A3,SAVITC+STKEND	ITCT ADR 
	ES	A2,ITCGLA,A3	NEW PGTL-DATA ADR
	RTN	A14
	EJECT
************************************************
*                                              *
*                 C A L L M O                  *
*                                              *
* CALLMO CHECKS WHERE TO BUILD DATA BEFORE     *
* CALLING MOVING                               *
*                                              *
* INPUT: A3=LENGTH TO MOVE                     *
*        A10=APPL.SAVE AREA POINTER            *
*        PDDIV=FLAG THAT INDICATES IF DDIV IS  *
*              GOING TO BEE BUILT IN PROT.DDIV *
*        PDDIVL=LENGTH LEFT IN PROT.DDIV       *
*        SCTEFA=END OF FREE AREA               *
*                                              *
* OUTPUT: A3=-1                                *
*         PDDIV=1 IF DDIV IS BUILT IN PROT.    *
*               DDIV ELSE PDDIV=0              *
*         PDDIVL=NEW PDDIVL                    *
*         LSTADR=NEW LAST FREE ADDR.           *
*         FYSPAG=NEW LAST FREE PAGE            *
*                                              *
* WORK REG:A2                                  *
*                                              *
************************************************
CALLMO	EQU	*
	LD	A2,PDDIV+STKEND	BUILD DDIV IN PROT.DDIV?
	RF(Z)	CAL200	NO! 
	LD	A2,PDDIVL,A10	GET LENGTH LEFT IN PROT.DDIV
	SUR	A2,A3	ENOUGH SPACE LEFT IN PROT.DDIV 
	RF(NN)	CAL100	YES! 
* 
*	RESET FLAG AND CHANGE FYSPAG AND LSTADR 
*	TO POINT AT END OF FREE AREA
* 
	CM	PDDIV+STKEND	RESET FLAG 
	LD	A2,SAEFA1+STKEND	GET END OF FREE AREA PAGE
	ST	A2,FYSPAG+STKCOM	SET FYSPAG TO THAT PAGE
	LD	A2,SAEFA2+STKEND	END OF FREE AREA (LOGICAL ADDR.) 
	ST	A2,LSTADR+STKCOM	STORE NEW LSTADR 
CAL100	EQU	*
	ST	A2,PDDIVL,A10	LENGTH LEFT IN PROT.DDIV
CAL200	EQU	*
	CALL	MOVING
	RTN	A14
	EJECT


START3	EQU	*


REALTA	EQU	*
	LD*	A8,SHADOW,A10	SHTAB LENGTH 
	LD	A5,SHADOW,A10	SHTAB1 ADR
	ADR	A8,A5	SHTAB2 ADR 
	ST	A8,SAVE03+STKEND	SAVE SHTAB2 ADR
	AD*	A8,SHADOW,A10	SHTAB3 ADR 
	ST	A8,SAVE02+STKEND	SHTAB3 ADR 
SYA300	EQU	*
	LD	A8,SAVE03+STKEND	SHTAB2 POINTER 
	ADKL	A8,2	NEXT 
	CW	A8,SAVE02+STKEND	ALL TCL'S DONE ? 
	RF(E)	SYA310	YES 
	ST	A8,SAVE03+STKEND	SAVE SHTAB2 POINTER
	ADK	A5,2	SHTAB1 POINTER
	LDR*	A4,A5	NBR OF COPIES 
	RB(Z)	SYA300	NONE
	LDR	A4,A8	GET SHTAB2 POINTER 
	AD*	A4,SHADOW,A10	MAKE IT SHTAB3 POINTER 
	LDR*	A4,A4 
	TLR	A4	LOAD MM-TABLE INDICATED IN SHTAB3 
	ST	A4,MMFROM+STKCOM	SAVE MM-TABLE ADDRESS
	ST	A10,SAVE01+STKEND	SAVE APPL.SAVE AREA POINTER 
	CALL	GETTAB	FIND TTAB ADR
	ST	A10,SAVITC+STKEND	SAVE ITCT ADR 
	ST	A10,TCLITC+STKEND	SAVE TCL  ITCT ADDRESS
	CALL	QUEJOB	QUEUE TASK 
	LDR	A6,A10	ITCT ADR
	ADK	A6,22	MAKE IT INT-USABLE 
	ST	A6,TTB:SA+26,A2	SAVE ITCT ADR IN TTAB(SAVE-A13) 
	ADKL	A6,ITCCSB-ITCDCD	POINT AT CSB IN ITCT 
	ST	A6,TTB:CB,A2	SAVE IN TTAB 
	LD	A1,TTAB+STKCOM	TTAB ADDRESS 
	LD	A1,TTBTID,A1	GET TASK-ID
	LDR*	A6,A5	NBR OF COPIES 
SYA305	EQU	*
	LD	A10,SAVE01+STKEND	GET APPL.SAVE AREA POINTER
	SUK	A6,1	COUNT NBR OF COPIES 
	RB(NP)	SYA300	NEXT TCL 
	CALL	GENCOP	GENERATE ONE COPY
	RB	SYA305	NEXT 
	EJECT

* ADJUST END OF FREE AREA 

SYA310	EQU	*
	LD	A1,PDDIV+STKEND	UPDATE END OF FREE AREA?
	RF(NZ)	SYA315	NO!
	LD	A1,LSTADR+STKCOM	GET END OF FREE AREA 
	ANKL	A1,/FFF 
	LD	A2,FYSPAG+STKCOM
	SLL	A2,2 
	ORR	A1,A2
	ST	A1,SCTEFA+2 
	LD	A1,FYSPAG+STKCOM
	SRL	A1,14
	ST	A1,SCTEFA 
	LD	A1,LSTADR+STKCOM	GET END OF FREE AREA 
	ANKL	A1,/FFF 
	ST	A1,SAEFA2+STKEND	UPDATE SAEFA2
	LD	A1,FYSPAG+STKCOM	GET PAGE 
	ST	A1,SAEFA1+STKEND	UPDATE SAEFA1
SYA315	EQU	*
* 
*        JUMP TO LABEL NXTAPP IN PART2 TO SEE IF
*        THERE ARE MORE APPLICATIONS LEFT 
* 
	LD	A10,SAVE01+STKEND	GET APPL.SAVE AREA POINTER
	LDKL	A1,NXTAPP	GET JUMP ADDRESS
	AD	A1,M:REL+STKCOM	ADD RELOCATION BASE 
	ABR	A1	CHECK IF MORE APPLICATIONS


	XIF
	IFT	MMUPAG=0 
	EJECT
			 
			 
********************************************* 
*******                               ******* 
**                                         ** 
*            SYSLOAD PART 1                 * 
**                                         ** 
*****                                   ***** 
********************************************* 
			 
*   READ CONFIGURATION FILE & BUILD         * 
*   SHADOW-TABLES                           * 
*                                           * 
********************************************* 
			 
LCOSTA	EQU	*
	LDKL	A1,START1	GET START OF SYSLCO 
	AD	A1,M:REL+STKCOM	ADD RELOCATION BASE 
	ABR	A1	GO TO START OF SYSLCO 
			 
			 
************************************* 
***                               *** 
**     S U B R O U T I N E S       ** 
**  -USED IN THIS PART ONLY        ** 
************************************* 
	EJECT
*                 B U I L D T                *
*                                            *
* BUILD ONE PART OF TIDTAB FOR CURRENT       *
* TASK DEFINITION BLOCK IN CONF.FILE         *
*                                            *
* INPUT : A1=ITCT ADDRESS                    *
*         A3=TID                             *
*         A4=NUMBER OF COPIES                *
*         A6=POINTER IN SHTAB1               *
*         A8=LENGTH OF SHTAB1                *
*         SHADST=START OFSHADOW TABLES FOR   *
*                CURRENT APPLICATION          * 
*                                            *
* OUTPUT: A7=FIRST FREE ENTRY AFTER TIDTAB   *
*         SHADST=START OFSHADOW TABLES FOR   *
*                CURRENT APPLICATION          * 
*                                            *
* WORK REGISTERS : A1-A8                     *
*                                            *
* SUBRUTINS : ERROR                          *
*                                            *
**********************************************
BUILDT	EQU	*
	LDR*	A2,A6	HAVE TASKS ALREADY BEEN CONF FOR THIS 
			TCL
	RF(NZ)	BUI100	YES! 
	ST	A3,ITCTID,A1	SAVE TID IN ITCT 
* COUNT NUMBER OF TASKS IN TIDTAB WHICH ARE GOING TO
* LIE BEFORE CURRENT TASKS
BUI100	EQU	*
	SUR	A2,A2	CLEAR TASK COUNTER 
	LDR	A5,A6	GET POINTER TO CURRENT ENTRY IN SHATB1 
BUI200	EQU	*
	ADR*	A2,A5	ADD NUMBER OF TASKS 
	SUK	A5,2	DECREASE SHTAB1 POINTER 
	CW	A5,SHADST+STKEND	ALL TASKS COUNTED? 
	RB(NE)	BUI200	NO!
* LOAD REGISTER A5 WITH POINTER TO START-ENTRY OF 
* CURRENT TASKS IN TIDTAB AND ADD NUMBER OF CURRENT 
* TASKS IN FIRST ENTRY OF TIDTAB
	ADR	A5,A8	ADD SHTAB1 LENGTH
	ADR	A5,A8	ADD SHTAB2 LENGTH
	ADR	A5,A8	ADD SHTAB3 LENGTH
	ADRS	A4,A5	UPDATE NUMBER OF TASKS IN TIDTAB
	ADK	A5,2	NEXT TIDTAB ENTRY 
	SLL	A2,1	2*(NUMBER OF TASKS) 
	ADR	A5,A2	ADD DISPLACEMENT IN TIDTAB 
* COUNT NUMBER OF TASKS IN TIDTAB WHICH ARE GOING 
* TO LIE AFTER CURRENT TASKS
	LDR	A1,A6	GET POINTER TO SHTAB1 ENTRY OF CURRENT 
			TCL
	ADK	A1,2	ENTRY IN SHTAB1 AFTER CURRENT TCL 
	SUR	A2,A2	CLEAR TASK COUNTER 
	LDR	A7,A8	GET SHTAB1 LENGTH
	SUR	A7,A1
	AD	A7,SHADST+STKEND	LENGTH OF SHTAB1 IN BYTES AFTER CURRENT
			TCL
	RF(Z)	BUI350	JUMP IF NO TASKS TO COUNT 
BUI300	EQU	*
	ADR*	A2,A1	ADD NUMBER OF TASKS 
	ADK	A1,2	INCREASE SHTAB1 POINTER 
	SUK	A7,2	ALL TASKS COUNTED?
	RB(Z)	BUI300	NO! 
* MAKE SPACE IN TIDTAB FOR CURRENT TASKS
BUI350	EQU	*
	LDR	A7,A5	LOAD START-ENTRY OF CURRENT TASKS IN 
			TIDTAB 
	ADR	A7,A2	ADD 2*(NUMBER OF TASKS AFTER 
	ADR	A7,A2	CURRENT TASKS) 
	SUK	A7,2	POINTER TO LAST TASK ID IN TIDTAB 
	SLL	A4,1	2*(NUMBER OF CURRENT TASKS) 
	CWR	A7,A5	ARE CURRENT TASKS LAST IN TIDTAB 
	RF(L)	BUI500	YES!
BUI400	EQU	*
	LDR*	A1,A7	GET TASK ID IN TIDTAB 
	ADR	A7,A4	NEW ENTRY IN TIDTAB FOR TASK ID
	STR	A1,A7	STORE TASK ID IN NEW ENTRY 
	SUR	A7,A4	GET OLD ENTRY IN TIDTAB
	SUK	A7,2	NEXT ENTRY IN TIDTAB
	CWR	A7,A5	ALL TASK ID MOVED? 
	RB(NL)	BUI400	NO!
* LOAD REGISTER A7 WITH FIRST FREE ENTRY AFTER TIDTAB 
* AND ADD NUMBER OF CURRENT TASKS IN CURRENT ENTRY OF SHTAB1
BUI500	EQU	*
	LDR	A7,A5	LOAD START ENTRY OF CURRENT TASKS IN 
			TIDTAB 
	ADR	A7,A2	ADD NUMBER OF
	ADR	A7,A2	BYTES IN TIDTAB AFTER CURRENT TASKS
	ADR	A7,A4	FIRST FREE ENTRY AFTER TIDTAB
	SRL	A4,1	(2*(NUMBER OF TASKS))/2 
	ADRS	A4,A6	ADD NUMBER OF CURRENT TASKS,FOR	
			CURRENT TCL IN SHTAB1
* PUT CURRENT TASK ID:S IN TIDTAB 
	LD	A1,SHADST+STKEND	GET SHTAB1 START ADDRESS 
	ADR	A1,A8	ADD SHTAB1 LENGTH
	ADR	A1,A8	ADD SHTAB2 LENGTH
	ADR	A1,A8	TIDTAB START ADDRESS 
	ADK	A1,2	FIRST TID IN TIDTAB 
BUI600	EQU	*
	LDR	A6,A1	GET TIDTAB START ADDRESS 
BUI700	EQU	*
	CWR	A6,A5	ALL TID:S IN UPPER PART IN TIDTAB
			SHECKED? 
	RF(NE)	BUI800	NO!
	ADR	A6,A4	FIRST TIDTAB ENTRY OF
	ADR	A6,A4	LOWER PART 
BUI800	EQU	*
	CWR	A6,A7	ALL TID:S OF LOWER PART IN TIDTAB
			SHECKED? 
	RF(E)	BUI950	YES!
	CWR*	A3,A6	TID ALREADY CONFIGURATED? 
	RF(NE)	BUI900	NO!
	LDKL	A1,LMP4	YES! FORMAT ERROR 
	CALL	ERROR 
BUI900	EQU	*
	ADK	A6,2	NEXT ENTRY IN TIDTAB
	RB	BUI700
BUI950	EQU	*
	STR	A3,A5	PUT TID IN TIDTAB
	ADK	A5,2	ADJUST UPPER PART END ADDRESS 
	ADK	A3,1	GENERATE NEXT TID 
	SUK	A4,1	HAVE ALL CURRENT TID:S BEEN CONF. 
	RB(NZ)	BUI600	NO!
	RTN	A14
	EJECT
*      L  I  M  T  G  C                 * 
*                                       * 
* FIND START-ADR, END-ADR, LENGTH OF    * 
* ICB-PLTGC BLOCK                       * 
*                                       * 
* INPUT:A10=POINTER TO CURRENT APPL.    * 
*           SAVE AREA IN SCRATCH-PAD    * 
*       SHADOW=START OF SHADOW TABLES   * 
*              FOR CURRENT APPLICATION  * 
* OUTPUT:PLTGCS= START ADR OF ICB-PLTGC * 
*        PLTGCE= END   ADR OF ICB-PLTGC * 
*        PLTGCL= LENGTH    OF ICB-PLTGC * 
* WORKREGS: A1-A7,A9,A11                * 
* WORKAREA:USES MONITOR BLOCKS AS STACK * 
*                                       * 
***************************************** 

LIMTGC	EQU	*
	LD	A1,SHADOW,A10	SHTAB1 ADDRESS
	LD	A7,FREQUE	GET MONITOR BLOCK ADDR. 
	LDR*	A2,A1	SHTAB1 LENGTH 
	ADR	A1,A2	SHTAB2 ADDRESS 
LIMTG0	EQU	*
	SUK	A2,2 
	RF(Z)	LIMTG5	ALL DONE
	ADK	A1,2	STEP SHTAB2 
	LDR*	A3,A1	ADR TO TCLBLK 
	LD	A3,ITCTGC,A3	ADR TO ICB-PLTGC OF MAIN PROGRAM 
LIMTG1	EQU	*
	LDK	A5,0	SET LEVEL TO 0(ZERO)
	CALL	LIMTG2	UPDATE LIMITS FOR ICB-PLTGC'S RELATED
			TO THIS CLASS
	RB	LIMTG0	NEXT TCL 
	EJECT
* 
* UPDATE LIMITS FOR ICB-PLTGC'S 
* RELATED TO ONE TERMINAL-CLASS 
* 
LIMTG2	EQU	*
	CALL	LIMUPD	UPDATE LIMITS
	LDR*	A4,A3	GET FIRST WORD IN ICB-PLTGC 
	ADKL	A4,/100	INDICATE LIMIT-CONTROL-INIT 
	STR	A4,A3	SET INDICATION 
	LD	A4,TGCCAL,A3	GET NBR OF CALL-TABLE ENTRIES
LIMTG3	EQU	*
	RF(Z)	LIMTG4	NO ENTRIES (LEFT) 
	ST	A4,2,A7	SAVE NBR.OF ENTRIES ON STACK
	ST	A3,4,A7	SAVE ENTRY ADDRES ON STACK
	LDR*	A7,A7	ADJUST STACK-POINTER	=2 
	RF(NZ)	LIMT35	MORE BLOCKS AVILABLE	=2
	LDKL	A1,NOBLK	NO BLOCKS AVILABLE	=2
	CALL	ERROR		=2 
LIMT35	EQU	*		=2
	ADK	A5,1	ADJUST LEVEL
	SLL	A4,1	*2 TABLE LENGTH 
	ADR	A4,A3	ADD BASE 
	ADK	A4,TGCCAL	ADD CALL-TABLE DISPLACEMENT
	LDR*	A3,A4	GET ICB-PLTGC ADDRESS CALLED
	LDR*	A4,A3	GET THAT FIRST WORD CONTENT 
	SRL	A4,8	ONLY FIRST BYTE VALID 
	SUK	A4,/60	FIRST TIME ?
	RB(Z)	LIMTG2	YES 
	LD	A4,-4,A7	GET NBR OF ENTRIES LEFT
LIMTG4	EQU	*
	SUK	A4,1	COUNT NBR OF ENTRIES LEFT 
	RB(P)	LIMTG3	ENTRIES LEFT
	SUK	A5,1	ADJUST LEVEL
	RF(N)	LIMTGX	END OF THIS TERMINAL CLASS
	SUK	A7,6	ADJUST STACK-POINTER
	LD	A4,2,A7	NBR.OF ENTRIES LEFT 
	LD	A3,4,A7	ENTRY ADDRESS 
	RB	LIMTG4	CONTINUE 
LIMTG5	EQU	*
	LD	A3,PLTGCE,A10	PNTR TO LAST ICB-PLTGC
	LD	A4,8,A3	NBR OF CALL-TAB ENTRIES 
	SLL	A4,1	NBR OF BYTES
	ADR	A4,A3	ADD BASE 
	ADK	A4,10	ADD TABLE DISPL
	ST	A4,PLTGCE,A10	SAVE END ADR
	SU	A4,PLTGCS,A10	-(MINUS) START ADR
	ST	A4,PLTGCL,A10	SAVE LENGTH 
LIMTGX	EQU	*
	RTN	A14
	EJECT
* 
* UPDATE ICB-PLTGC LIMITS 
* 
* INPUT: A3=ICB-PLTGC ADR 
* 
LIMUPD	EQU	*
	LDR	A11,A3	ICB-PLTGC ADR 
	LD	A9,PLTGCS,A10	GET CURRENT START ADR 
	CALL	CMPADR	CHECK ADDRESSES
	RF(NL)	LIMUP1	OLD START ADR VALID
	ST	A3,PLTGCS,A10	SET NEW START ADR 
LIMUP1	EQU	*
	LD	A9,PLTGCE,A10	GET CURRENT END ADR 
	CALL	CMPADR	CHECK ADDRESSES
	RF(L)	LIMUP2	OLD END ADR VALID 
	ST	A3,PLTGCE,A10	SET NEW END ADR 
LIMUP2	EQU	*
	RTN	A14
	EJECT
*                 L E N C O U                *
*                                            *
* COUNT LENGTH OF SHTAB1,AND COUNT NUMBER OF *
* TASKS                                      *
*                                            *
* INPUT : A11=CONFIGURATION START            *
*         A10=POINTER TO CURRENT APLTAB BLK. *
*                                            *
* OUTPUT: A6=TOTAL NUMBER OF TASKS           *
*         A7=SHTAB1 LENGTH IN BYTES          *
*         A10=POINTER TO CURRENT APLTAB BLK. *
*                                            *
* WORK REGISTERS: A1,A3-A5                   *
*                                            *
* WORK TABLE: TEMPORARY TABLE WITH TCL       *
*             NAMES AFTER START OF FREE      *
*             AREA                           *
*                                            *
* SUBRUTINES: NXTBLK                         *
*                                            *
**********************************************
LENCOU	EQU	*
	LDK	A7,2	TABLE LENGTH-WORD LENGTH
	LDK	A6,0	TOTAL NBR OF TASKS
	CM*	SHADST+STKEND	CLEAR FIRST ENTRY OF TEMPORARY 
			TABLE
* SHECK IF CURRENT TCL NAME ALREADY HAS APEARED IN
* CONFIGURATION FILE , AND IF SO DON'T INCREMENT
* SHTAB1 LENGTH AND PUT CURRENT TCL NAME IN TEMPO-
* RARY TABLE
LEN100	EQU	*
	LC	A3,TDBMC+4,A11
	SLL	A3,8 
	LC	A3,TDBMC+5,A11	TCL NAME OF CURRENT TASK 
			TASK DEF. BLOCK
	LD	A1,SHADST+STKEND	ADDRESS TO FIRST ENTRY IN
			TEMPORARY TABLE
	LDR*	A4,A1	FIRST ENTRY=0?
	RF(Z)	LEN300	YES!
LEN200	EQU	*
	CWR	A4,A3	TCL NAME IN TEMPORARY TABLE
	RF(E)	LEN400	YES!
	ADK	A1,2	NEXT ENTRY IN TEMPORARY TABLE 
	LDR*	A4,A1	ENTRY=0?
	RB(NZ)	LEN200	NO!
LEN300	EQU	*
	ADK	A7,2	COUNT NUMBER OF BYTES IN SHTAB1 
	STR	A3,A1	PUT CURRENT TCL NAME IN
			TEMPORARY TABLE
	ADK	A1,2	NEXT ENTRY IN TEMPORARY TABLE 
	CMR	A1	CLEAR IT
* COUNT TOTAL NUMBER OF TASKS AND GET START OF NEXT 
* TASK DEF. BLOCK 
LEN400	EQU	*
	LC	A4,TDBNT+1,A11	NBR OF COPIES /2 
	SRC	A4,4 
	LC	A4,TDBNT,A11	NBR OF COPIES /1 
	SLC	A4,12
	SRL	A4,8	BINARY VALUE (NBR OF COPIES)
	LDR	A4,A4	NBR OF COPIES
	RF(Z)	LEN500	NO COPY , TRY NEXT BLOCK
	ADR	A6,A4	COUNT TOTAL NBR OF TASKS 
LEN500	EQU	*
	CALL	NXTBLK	NEXT CONFIG.-BLOCK 
	CCK	A2,'TT'	TASK DEF. BLOCK? 
	RB(E)	LEN100	NEXT TASK DEF. BLOCK
	RTN	A14
	EJECT

*            S Y S L C O                 *
*                                        *
* ENTRY FOR COBOL APPLICATION CONFIG     *
*                                        *
******************************************

				
			 
START1	EQU	*
SYSLCO	EQU	*
* 
*  INIT A15 STACK 
* 
	LD	A15,SCTSTB
	SUKL	A15,4 

	XIF
	IFT TEST-MMUPAG=1		=3
******************************
* 
* TEST VERSION (DEBUG)
* 

	LD	A2,SCTBUG	DEBUGGER ADDRESS
	LD	A13,M:REL+STKCOM
	ADKL	A13,TEST1	SET RETURN ADDRESS
	ABR(NZ)	A2	JUMP IF DEBUG IN SYSTEM 

TEST1	EQU	* 
	LDR	A8,P	GET PROGRAM-POINTER 
	LDKL	A5,REL+2	GET START OF RELOCATION
			ROUTINE
	AD	A5,M:REL+STKCOM	ADD RELOCATION BASE 
	CFR	A8,A5

* 
* 
******************************

	XIF
	IFT MMUPAG=0 

* 
*        CLEAR SCRATCH-PAD AREA 
* 
	LDKL	A1,STKEND	A1=START OF SCRATCH-PAD AREA
	LDKL	A2,STKMOV 
	SUK	A2,2	A2=END OF SCRATCH-PAD AREA
SYA10	EQU	* 
	CMR	A1	CLEAR MEMORY WORD 
	CWR	A1,A2	ALL WORDS CLEARED? 
	RF(E)	SYA20	YES! 
	ADK	A1,2	NO! NEXT WORD 
	RB	SYA10 
* 
*        INITIATE REGISTERS AND VARIABLES 
* 
SYA20	EQU	* 
	CM	APPLNO+STKCOM	CLEAR APPL.NUMBER COUNTER 
	LDKL	A10,STKEND	START OF 1:ST APPL. SAVE AREA
			IN SCRATCH-PAD 
	LD	A1,SCTSFA	START ADR.TO SHTAB'S OF 1:ST APPL.
	ST	A1,SHADST+STKEND	SAVE START OF 1:ST SHADOW-TABLE
	CM	PDDIV+STKEND	CLEAR FLAG 
* 
*        GET APPLICATION
* 
SYA100	EQU	*
	LDKL	A1,'CO'	LOAD INPUT TO GETAPP,CO=COBOL APPL. 
	CALL	GETAPP	FIND APPL AND ITS CONF DATA
	RF(NZ)	SYA105	MORE APPL OF THIS TYPE 
	LD	A2,APPLNO+STKCOM	ANY COBOL APPL. TO CONFIG.?
	RF(NZ)	SYA102	YES! 
	LDKL	A1,LCOEND	SYSLCO START ADDR.
	AD	A1,M:REL+STKCOM	RELOCATE
	ABR	A1	LEAVE SYSLCO
SYA102	EQU	*
	LDKL	A2,SYA178	NO MORE APPL OF THIS TYPE 
	AD	A2,M:REL+STKCOM 
	ABR	A2 
SYA105	EQU	*
	ST	A11,ACOSTA+STKEND	SAVE CONF.START FOR THIS APPL 
	ST	A1,APCTAB,A10	SAVE APLTAB BLOCK ADDRESS 
	LD	A2,APLLAC,A1	GET SEGTAB ADDRESS 
	ST	A2,SEGTAD,A10	SAVE
	EJECT
			 
* READ CONFIG FILE AND BUILD SHADOWTABLE
			 
	LD*	A3,APLLAC,A1	APPTAB ADR
	LD	A2,I:RSTE,A3	GET INTERPRETER RESTART ADDRESS
	ST	A2,APLIOE,A1	STORE IT IN APLTAB 
	LDR*	A2,A3	TCLTAB ADR
	LDR*	A12,A2	NBR OF TCL'S 
	LDR	A4,A2
	ADKL	A4,4	ADR TO TCLBLK PNTR 
	ST	A4,TCLPNT+STKEND	SAVE 
	LC	A2,TDBBT,A11	BLOCK TYPE 
	CCK	A2,'TT'	TASK DEFINITION BLOCK
	RF(NE)	SYA120	NO 
	CALL	LENCOU
	LDR	A5,A7	SHTAB1 LENGTH * 1
	ADR	A5,A7	* 2
	ADR	A5,A7	* 3  SHTAB1-3 TOTAL LENGTH 
	ST	A5,SHTLEN+STKCOM	SHTAB1-3 LENGTH
	LDR	A6,A6
	RF(Z)	SYA120	NOTHING TO CONFIGURATE
	ST	A6,NOCOPS+STKEND	SAVE NBR OF RUNNING TASKS/RUNTIME
* 
	LD	A11,SHADST+STKEND	START OF SHTAB1 
	ADR	A11,A5 
	ADR	A11,A6 
	ADR	A11,A6 
	ADKL	A11,2	NEW START OF FREE AREA
	LDKL	A9,LCOSTA 
	AD	A9,M:REL+STKCOM	SYSLCO START
* CHECK ADDRESSES 
	CALL	CMPADR
	RF(L)	SYA115	OK !
	LDKL	A1,LMP3	MEMORY OVERFLOW 
	CALL	ERROR 
SYA115	EQU	*
	SUR	A8,A8
ZERO	EQU	*
	SUKL	A11,2	NEXT
	STR	A8,A11	CLEAR WORD
	CW	A11,SHADST+STKEND	ALL DONE ?
	RB(NE)	ZERO	NO 
	ST*	A7,SHADST+STKEND	STORE LENGTH IN TABLE LENGTH WORD 
	LDR	A8,A7	SHTAB1 LENGTH
	LD	A11,ACOSTA+STKEND	CONFIG START
	LC	A3,TDBBT,A11	GET BLOCK TYPE FROM CONF 
	CCK	A3,'TT'	TASK DEFINITION BLOCK ?
	RF(E)	SYA125	YES 
SYA120	EQU	*
	LDK	A1,LMP4	NO 
	CALL	ERROR 
SYA125	EQU	*
	LD	A2,TCLPNT+STKEND	ADDR TO TCLBLK POINTER 
	LC	A3,TDBMC+4,A11	TCL-ID 
	SLL	A3,8 
	LC	A3,TDBMC+5,A11	TCL-ID 
	LDR	A7,A12	NBR OF TCL'S
* 
*        CHECK IF TCL-ID FROM CONF IS IN APPLICATON 
* 
SYA130	EQU	*
	SUK	A7,1	COUNT NBR OF TCL'S
	RF(NN)	SYA135	N=END OF TCLBLK'S
	LDK	A1,LMP5	TID IN CONF NOT IN APPL
	CALL	ERROR 
SYA135	EQU	*
	CW	A3,-2,A2	TCL-ID FOUND ? 
	RF(E)	SYA140	YES 
	ADK	A2,4	POINT AT NEXT TCLBLK
	RB	SYA130	TRY IN NEXT TCLBLK 
SYA140	EQU	*
	LD	A6,SHADST+STKEND
	ADR	A6,A8	START OF SHTAB2
	ADR	A6,A8	START OF SHTAB3
SYA145	EQU	*
	SUK	A6,2	STEP SHTAB2 
	LD	A3,SHADST+STKEND
	ADR	A3,A8
	CWR	A6,A3	END OF SHTAB2 ?
	RF(E)	SYA150	YES 
	LDR*	A1,A6	ITCT ADR IN SHTAB2
	LDR*	A3,A2	GET TCLBLK-ADR
	CW	A1,TCLTCT,A3	FOUND ITCT ADR ? 
	RB(NE)	SYA145	NO 
	RF	SYA155	YES
SYA150	EQU	*
	ADK	A6,2	NEXT ENTRY IN SHTAB2
	LDR*	A3,A6 
	RB(NZ)	SYA150	ENTRY NOT FREE 
	LDR*	A3,A2	GET TCLBLK-ADR
	LD	A1,TCLTCT,A3	ITCT ADR IN TCLBLK 
	STR	A1,A6	STORE ITCT ADR IN SHTAB2 
SYA155	EQU	*
	SUR	A6,A8	POINT AT ENTRY IN SHTAB1 
	LC	A4,TDBNT+1,A11	NBR OF COPIES / 2
	SRC	A4,4 
	LC	A4,TDBNT,A11	NBR OF COPIES / 1
	SLC	A4,12
	SRL	A4,8	BINARY VALUE (NBR OF COPIES)
	LDR	A4,A4	NBR OF COPIES
	RF(Z)	SYA170 
SYA160	EQU	*
	LC	A3,TDBID+4,A11	TID
	SLL	A3,8 
	LC	A3,TDBID+5,A11	TID
	CALL	BUILDT	BUILD TIDTAB PART FOR ONE TCL
SYA170	EQU	*
	CALL	NXTBLK	NEXT CONFIG-BLOCK
	CCK	A2,'TT'	TASK DEF BLOCK ? 
	RB(E)	SYA125	YES 
	LD	A1,NOCOPS+STKEND	TOTAL NBR OF RUNNING TASKS 
	SLL	A1,1	NBR OF BYTES USED 
	ADK	A1,2	ADD LENGTH WORD 
	STR	A1,A7	STORE LENGTH IN TABLE
	ST	A7,DYNTAD,A10	SAVE TABLE START
	ADR	A7,A1	UPDATE "FIRST FREE WORD" 
	SUK	A1,4 
	RF(NZ)	SYA175	MORE THAN ONE TASK IN THE SYSTEM 
	IM	STASK+STKEND	INDICATE SINGLE TASK APPLICATION 
* 
*        PREPARE FOR NEXT APPLICATION 
* 
SYA175	EQU	*
	LD	A2,SHADST+STKEND	GET START OF SHADOW TABLES 
	ST	A2,SHADOW,A10	SAVE IN APPL.SAVE AREA
	ADKL	A10,TABLEN	UPDATE SAVE AREA POINTER 
	ST	A7,SHADST+STKEND	SAVE START OF SHTAB1 
	LDKL	A2,SYA100 
	AD	A2,M:REL+STKCOM	ABSOLUTE BRANCH ADDRESS 
	ABR	A2	CHECK IF MORE APPLICATIONS
SYA178	EQU	*
	EJECT
* SAVE MONITOR END ADDRESS
	LD	A2,SCTSFA 
	ST	A2,MONEND+STKEND

* GET START OF SYSLCO AFTER MOVE
			 
	ADK	A7,1	TO-ADDRESS (AFTER SHADOW-TABLES)
	ANKL	A7,/FFFE	EVEN ADDRESS 

* CALCULATE RELOCATION
	LDKL	A2,PART2	GET START OF PART2 
	AD	A2,M:REL+STKCOM	ADD RELOCATION BASE 
	LDR	A3,A2		
	SUR	A2,A7	LENGTH TO MOVE (SYSLCO+SYSINI) 
	NGR	A2,A2
	ST	A2,RELOCA+STKEND	SAVE NEW RELOCATION TEMPORARY
	ST	A7,LCOTO+STKEND	SAVE (LOGICAL) TO-ADDRESS 
	LDR	A2,A13	A13=START OF SYSINI 
	SUR	A2,A3	SYSLCO LENGTH
	ADKL	A2,INILEN	ADD LENGTH OF SYSINI
	ST	A2,MOVLE1+STKEND	SAVE LENGTH TO MOVE
	ADR	A7,A2	NEW DDIV ADDRESS 
	ST	A7,DDIVTO+STKEND	SAVE NEW DDIV ADDRESS
* CALCULATE DDIV FROM-ADDRESS * 
	CM	APPLNO+STKCOM	RESET NBR OF APPL.
	LDKL	A10,STKEND	START OF 1:ST APPL SAVE AREA 
SYA180	EQU	*
	LDKL	A1,'CO'	COBOL APPLICATION 
	CALL	GETAPP	ANY COBOL APPL LEFT? 
	RF(Z)	OUT01	NO!

	LD	A2,APLLAC,A1	GET SEGTAB 
	LD*	A9,APLLAC,A1	APPTAB ADR
	LD	A9,APPCOM,A9	COMMON-PSEG-PNTR 
	LD	A3,SGNOSG,A2	NUMBER OF SEGMENTS 
	LDR	A1,A2	SAVE SEGTAB ADDRESS
	LDK	A2,SEGREC	SEGMENT BLOCK RECORD LENGTH
	CALL	MULT
	ADR	A1,A3
	ADK	A1,SGNOSG+2	=> START OF DDIV 
	ST	A1,DDIVFR,A10	SAVE DDIV FROM-ADDRESS
	LD	A6,DDIVTO+STKEND	GET DDIV TO ADDR.
	SUR	A6,A1	RELOCATION FOR DDIV
	ST	A6,SAVE01+STKEND	SAVE RELOCATION INCREMENT
	LDKL	A6,/FFFF
	ST	A6,PLTGCS,A10	INIT. START OF PLTGC'S
	CALL	LIMTGC	RELOCATE ICB-PLTGC 
	LD	A6,SAVE01+STKEND	GET RELOCATION INCREMENT 
	EJECT
* 
* RELOCATE ITCT'S 
* 
RELITC	EQU	*
	LD	A1,DDIVFR,A10	ADR TO APPTAB 
	LDR*	A1,A1	ADR TO TCLTAB 
	LDR*	A2,A1	NBR OF TCL'S
RELIT1	EQU	*
	SUK	A2,1	ADJUST NBR OF TCL'S 
	RF(N)	RELITX	ALL ITCT'S RELOCATED
	ADK	A1,4	TCLBLK ADR POINTER
	LDR*	A3,A1	TCLBLK ADR
	ADK	A3,TCLTCT	ADR TO ITCT POINTER
	LDR*	A3,A3	ITCT ADR
	ADS	A6,ITCGLA,A3	RELOCATE PGTL-DATA-ADR
	ADS	A6,ITCCOM,A3	RELOCATE PGTG-DATA-ADR
	ADK	A3,ITCTLT	TLTAB ADR
	LDR*	A4,A3	NBR OF ENTRIES IN TLTAB 
RELIT2	EQU	*
	SUK	A4,1	ADJUST LOOP-COUNTER 
	RB(N)	RELIT1	ALL ENTRIES RELOCATED 
	ADK	A3,ITCTLE	POINT AT NEXT ENTRY
	LDR*	A5,A3	ENTRY CONTENT 
	RB(Z)	RELIT2	FREE ENTRY
	ADRS	A6,A3	RELOCATE ENTRY
	RB	RELIT2	NEXT ITCT
RELITX	EQU	*
* 
* RELOCATE TCLBLK'S 
* 
RELTCB	EQU	*
	LD	A1,DDIVFR,A10	APPTAB ADR
	LDR*	A1,A1	TCLTAB ADR
	LDR*	A2,A1	NBR OF TCL'S
RELTB1	EQU	*
	SUK	A2,1	ADJUST NBR OF TCL'S 
	RF(N)	RELTBX	RELOCATION OF TCLBLK'S DONE 
	ADK	A1,4	TCLBLK ADR POINTER
	LDR*	A3,A1	TCLBLK ADR
	ADS	A6,TCLTGC,A3	RELOCATE ICB-PLTGC-MAIN POINTER 
	ADS	A6,TCLTCT,A3	RELOCATE ITCT POINTER 
	RB	RELTB1	NEXT TCLBLK
RELTBX	EQU	*
* 
* RELOCATE TCLTAB 
* 
RELTCT	EQU	*
	LD	A1,DDIVFR,A10	APPTAB ADR
	LDR*	A1,A1	TCLTAB ADR
	LDR*	A2,A1	NBR OF TCL'S
RELTC1	EQU	*
	SUK	A2,1	COUNT NBR OF TCL'S
	RF(N)	RELTCX	RELOCATION OF TCLTAB DONE 
	ADK	A1,4	TCLBLK ADR POINTER
	ADRS	A6,A1	RELOCATE TCLBLK POINTER 
	RB	RELTC1	NEXT TCLBLK POINTER
RELTCX	EQU	*
* 
* RELOCATE APPTAB 
* 
RELAPP	EQU	*
	LD	A1,DDIVFR,A10	APPTAB ADR
	ADRS	A6,A1	RELOCATE TCLTAB-PNTR
RELAPX	EQU	*
* 
* RELOCATE SHADOW-TABLE2 (ITCT ADDRESSES) 
* 
RELSHT	EQU	*
	LD*	A1,SHADOW,A10	SHTAB LENGTH 
	LDR	A2,A1	SAVE SHTAB2 LENGTH 
	AD	A1,SHADOW,A10	SHTAB2 ADR
RELSH1	EQU	*
	SUK	A2,2	ADJUST SHTAB2 LENGTH
	RF(Z)	RELSHX	RELOCATION OF SHTAB2 DONE 
	ADK	A1,2	POINT AT ITCT ADR 
	ADRS	A6,A1	RELOCATE ITCT ADR 
	RB	RELSH1	NEXT 
RELSHX	EQU	*
	ADKL	A10,TABLEN	NEXT APPL.SAVE AREA
	RB	SYA180	CHECK IF MORE APPL.
OUT01	EQU	* 
	LD	A5,RELOCA+STKEND	GET NEW RELOCATION INCREMENT 
	ADS	A5,M:REL+STKCOM	AND ADJUST RELOCATION BASE 
* CONTINUE IN PART 2 *
			 
	LD	A2,LCOTO+STKEND	GET TO-ADDRESS (SYSLCO) 
	LDR	A5,A2
	AD	A5,MOVLE1+STKEND
	SUKL	A5,INILEN	A5=SYSINI START 
	LDKL	A7,START2	GET EXECUTION START ADDRESS 
	AD	A7,M:REL+STKCOM	ADD RELOCATION BASE 
	LD	A3,MOVLE1+STKEND	SYSLCO+SYSINI LENGTH 
	LDKL	A1,PART2
	AD	A1,M:REL+STKCOM 
	SU	A1,RELOCA+STKEND	FROM ADR.
* 
* JUMP TO ROUTINE IN SYSTEM-STACK WHICH 
* MOVES SYSLCO, AND THEN CONTINUE IN PART2
* INPUT TO ROUTINE IN STACK IS
*	A1 = FROM ADDR. 
*	A2 = TO ADDR. 
*	A3 = LENGTH 
*	A7 = RESTART ADDR.
* 
	ABL	STKMOV	JUMP TO MOVE-ROUTINE IN STACK 
	EJECT
				
************************************************* 
***                                           *** 
**           SYSLOAD PART 2                    ** 
**                                             ** 
************************************************* 

*   BUILD COMMON AND TASKCLASS DATA AREAS.      * 
*   BUILD TASKDATA PROTOTYPE AREA               * 
*                                               * 
************************************************* 

PART2 	EQU	*

********************************************
***                                      ***
**         S U B R O U T I N E S          **
********************************************

				
	EJECT
*           M O V C O M               * 
*                                     * 
* MOVE ICB-PGTG AND PGTG-DATA         * 
*                                     * 
*************************************** 

MOVCOM	EQU	*
	CALL	FNDCOM	ICB-PGTG ADR 
	LD	A3,DDIVTO+STKEND	APPTAB ADDRESS 
	LD	A3,APPTGL,A3	PGTG-DATA ADR
	LD	A6,LSTADR+STKCOM	LAST FREE ADDRESS
	SUR	A6,A3	PGTG START ADR 
	CALL	CALLMO	ALLOCATE AND MOVE PGTG-DATA
	ST	A6,PGTGAD+STKEND	SAVE ICB-PGTG NEW ADDRESS
	RTN	A14
	EJECT
*         F N D C O M          *
*                              *
* FIND PGTG-DATA               *
*                              *
* EXIT  : A1 PGTG-DATA ADR     *
********************************

FNDCOM	EQU	*
	LD*	A1,DDIVTO+STKEND	ADR TO TCLTAB 
	LD	A1,4,A1	ADR TO TCLBLK 
	LD*	A1,TCLTCT,A1	ADR TO PGTG-DATA
	RTN	A14
	EJECT
*                                       * 
*        R  E  L  T  G  C               * 
*                                       * 
*  RELOCATE ICB-PLTGC CALL-TAB          * 
*                                       * 
*  INPUT: PLTGCS= ICB-PLTGC BLOCK       * 
*                 START ADDRESS         * 
*         PLTGCL= ICB-PLTGC BLOCK       * 
*                 LENGTH                * 
*         A6    = RELOCATION INCREMENT  * 
*                                       * 
***************************************** 

RELTGC	EQU	*
	LD	A3,PLTGCS,A10	ICB-PLTGC START ADR 
	LD	A2,PLTGCL,A10	ICB-PLTGC LENGTH
	ADR	A2,A3	ICB-PLTGC END ADR
RELTG1	EQU	*
	LDR	A1,A3
	LDR	A11,A1	GET ADR FOR COMPARE 
	LDR	A9,A2	GET ADR FOR COMPARE
	CALL	CMPADR	ALL ICB-PLTGC'S RELOCATED ?
	RF(NL)	RELTGX	YES
	LCR	A3,A1	GET ICB-PLTGC CONTROL-BYTE 
	CCK	A3,/6161	HANDLED BY LIMTGC ? 
	RF(NE)	RELTG2	NO 
	ANK	A3,/F0	NEW CONTROL-BYTE VALUE
	SCR	A3,A1	RESTORE IT 
RELTG2	EQU	*
	LD	A3,TGCCAL,A1	NBR OF ENTRIES 
	SLL	A3,1	*2 NBR OF BYTES 
	ADR	A3,A1	ADD BASE 
	ADK	A3,10	POINTER TO 1:ST WORD AFTER LAST ENTRY
	LDR	A4,A1	GET BASE 
	ADK	A4,10	1:ST ENTRY 
	LDR	A9,A3
RELTG3	EQU	*
	LDR	A11,A4 
	CALL	CMPADR	END OF THIS ICB-PLTGC ?
	RB(NL)	RELTG1	YES,CONTINUE WITH NEXT ICB-PLTGC 
	LDR*	A11,A4	GET ADDRESS TO RELOCATE
	ADR	A11,A6	RELOCATE ADDRESS
	LDR*	A1,A11
	SRL	A1,8 
	SUK	A1,/60	ICB-PLTGC ? 
	RF(N)	RELTG4	NO, ASM-SUBROUTINE
	SUK	A1,1 
	RF(P)	RELTG4	NO, ASM-SUBROUTINE
	ADRS	A6,A4	RELOCATE CALL ADDRESS 
RELTG4	EQU	*
	ADK	A4,2	STEP CALL-TAB POINTER 
	RB	RELTG3	NEXT CALL-TAB-ENTRY
RELTGX	EQU	*
	RTN	A14
	EJECT
*             F N D B L K        *
*                                *
* FIND A TCLBLK CORRESPONDING    *
* TO AN ITCT ADDRESS             *
*                                *
* INPUT : A7     ITCT ADR        *
*         DDIVTO APPTAB ADR      *
* EXIT  : A1     TCLBLK-PNTR ADR *
*                IN TLCTAB       *
*         A3     TCLBLK ADR      *
* WORK  : A2                     *
**********************************

FNDBLK	EQU	*
	LD*	A1,DDIVTO+STKEND	TCLTAB ADR
	LDR*	A2,A1	NBR OF TCLBLK'S 
FNDBL0	EQU	*
	SUK	A2,1	COUNT NBR OF TCLBLK'S 
	RF(NN)	FNDBL1	BLOCKS LEFT
	LDK	A1,LMP4
	CALL	ERROR 
FNDBL1	EQU	*
	ADK	A1,4	TCLBLK-PNTR ADR 
	LDR*	A3,A1	TCLBLK-PNTR 
	CW	A7,TCLTCT,A3	ITCT FOUND ? 
	RB(NE)	FNDBL0	NO,TRY NEXT TCLBLK 
	RTN	A14	YES,RETURN 
	EJECT

***************************** 
* START OF PROGRAM PART 2   * 
***************************** 

* LOAD BASE ADDRESS * 
********************* 
* A5=START-ADDRESS
* SAVE01=RELOCATION INCREMENT 
* SAVE03=DDIV TO-ADDRESS
* SAVE04=DDIV FROM ADDRESS
* SAVE05=LENGTH OF REAL ITCTTAB 
				
START2	EQU	*
	LDR	A8,P	LOAD TEMP. STACKBASE
	ADK	A5,2	ADD FOR RELOCATION ROUTINE
	CFR	A8,A5
* 
*        INITIATE REGISTERS AND VARIABLES 
* 
	LDKL	A10,STKEND	START OF 1:ST APPL. SAVE AREA
	LD	A1,APCTAB,A10	FIRST APLTAB BLOCK ADDR.
	LD	A2,APPLNO+STKCOM	GET NUMBER OF APPLICATIONS 
	ST	A2,ALICOU+STKEND	SAVE 
	RF	PRT200
* 
*        UPDATE VALUES FOR NEXT APPLICATION 
* 
NXTAPP	EQU	*
	ADKL	A10,TABLEN	NEXT APPL. SAVE AREA 
	LD	A1,APCTAB,A10	NEXT APLTAB BLOCK 
	LD	A2,ALICOU+STKEND	GET APPL.COUNTER 
	SUK	A2,1	DECREMENT APPL.COUNTER
	ST	A2,ALICOU+STKEND	SAVE APPL.COUNTER
	RF(NZ)	PRT200	IF ANY APPL IS LEFT
			DON'T LEAVE SYSLCO YET 
	LD	A2,SCTEFA+2	GET END OF FREE AREA
	ST	A2,LSTADR+STKCOM	LAST ADDR.:=END OF FREE AREA 
	LDKL	A2,SYA320	GET SYSLCO END ADDRESS
	AD	A2,M:REL+STKCOM	ADD RELOCATION BASE 
	ABR	A2	START TO MOVE DYNTAB:S

PRT200	EQU	*
	LD*	A9,APLLAC,A1	APPTAB START ADDR.
	LD	A2,APPINT,A9	INTERPRETER ACTIV ADDR.
	ST	A2,INTENT+STKEND	SAVE IT
	LD	A9,APPCOM,A9	GET APPL. START ADDR.
	LDR	A2,A9	APPL. START ADDR.
* 
*        CALCULATE DDIV+SEGTAB LENGTH 
* 
	LD	A4,APLLAC,A1	SEGTAB ADDR. 
	ST	A9,APLLAC,A1	STORE START OF APPL. 
	SUR	A2,A4	DDIV+SEGTAB LENGTH 
* 
*        SET FLAG BIT15=1 => BUILD DDIV IN PROT. DDIV 
* 
	IM	PDDIV+STKEND	SET FLAG 
* 
*        INITIATE PROT. DDIV LENGTH 
* 
	LD	A3,SCTEFA+2	GET END OF FREE AREA
	CWR	A3,A4	START OF SEGTAB=SCTEFA?
	RF(NE)	SAVLEN	NO!
	CM	PDDIV+STKEND	RESET FLAG 
SAVLEN	EQU	*
	ST	A2,PDDIVL,A10	INIT.PROT.DDIV LENGTH 
* 
* MOVE DDIV 
* 
	LD	A1,DDIVFR,A10	GET FROM-ADDRESS
	LD	A2,DDIVTO+STKEND	GET TO ADDRESS 
	LDR	A3,A9	GET APPLICATION START (=END OF DDIV
	SUR	A3,A1	=> LENGTH OF DDIV
	ST	A2,DATEND+STKCOM
	ADS	A3,DATEND+STKCOM 
	LD	A8,TOTSGM+STKCOM	ANY SEGMENTS IN APPLICATION? 
	RF(Z)	NOSGMT	NO! 
	SUR	A8,A8	RESET FSTADR IF SEGMENTS 
	RF	SEGMTS
NOSGMT	LD	A8,SCTSFA	ALLOCATE BUFFERS FROM TOP 
SEGMTS	ST	A8,FSTADR+STKCOM	STORE
MOVNXT	LDR*	A4,A1	GET WORD
	STR	A4,A2	STORE
	ADK	A1,2 
	ADK	A2,2 
	SUK	A3,2	DEC LENGTH
	RB(NN)	MOVNXT
* CHECK IF MEMORY OVERFLOW
	LDR	A1,A9	SAVE 
	LDR	A11,A2 
	LD	A9,SCTEFA+2 
	CALL	CMPADR	MEMORY OVERFLOW? 
	RF(NG)	SYA202	NO!
	LDKL	A1,LMP3 
	CALL	ERROR 
SYA202	EQU	*
	LDR	A9,A1	RELOAD 
	SUKL	A9,10	RESERVE 5 WORDS FOR DEBUGGER
	ANKL	A9,/FFFE	EVEN ADDRESS 
	ST	A9,LSTADR+STKCOM	SAVE END OF FREE AREA
	CALL	MOVCOM	ALLOC/MOVE PGTG-DATA 

				
	LD	A1,DDIVTO+STKEND	PROT. NEW START ADR
	AD	A1,PLTGCS,A10 
	SU	A1,DDIVFR,A10	ICB-PLTGCS NEW START ADR
	LD	A3,PLTGCL,A10	ICB-PLTGC LENGTH
	LD	A6,LSTADR+STKCOM	LAST FREE ADR
	SU	A6,PLTGCE,A10	GET DISPL FOR RELOCATION
	CALL	CALLMO	MOVE 
	ST	A2,PLTGCS,A10	ICB-PLTGCS NEW (FINAL) START ADR
	CALL	RELTGC	RELOCATE ICB-PLTGC CALL TABLE
	ST	A6,TGCREL+STKEND	ICB-PLTGC RELOCATION 
	LD	A4,SHADOW,A10	SHTAB1 ADR
	LDR*	A5,A4	SHTAB1 LENGTH 
	LDR	A6,A4	SHTAB1 ADR 
	ADR	A4,A5	SHTAB2 ADR 
	SUK	A5,2	ADJUST FOR TABLE LENGTH WORD
TCLLOP	EQU	*
	ADK	A4,2	SHTAB2 ENTRY
	LDR*	A7,A4	ITCT ADR
	CALL	FNDBLK	FIND TCLBLK
	LDR*	A1,A3	STACK-SIZE
	ST	A1,ITCNEP,A7	SAVE IN ITCT 
	LD	A1,TCLTLD,A3	PGTL-DATA-LENGTH-USED
	ST	A1,ITCGLL,A7	SAVE IN ITCT 
	LDR	A3,A5	NBR OF ITCT'S LEFT 
	RF(Z)	TCLEXT	NONE
	LDR	A1,A7	ITCT ADR 
	LD	A3,TGCREL+STKEND	GET ICB-PLTGC RELOCATION 
	ADS	A3,ITCTGC,A1	RELOCATE ICB-PLTGC-MAIN IN ITCT 
	LD	A3,PGTGAD+STKEND	PGTG-DATA ADDRESS
	ST	A3,ITCCOM,A1	UPDATE POINTER IN ITCT 
	LD	A3,DDIVFR,A10	APPTAB ADDRESS
	LD	A3,APPCOM,A3	COMMON PROGRAM SEGM
	ST	A3,ITCCSB,A1	SAVE IN CURRENT SEGMENT BASE 
	LD	A3,ITCTLT,A7	NBR OF ENTRIES IN TLTAB
	SLL	A3,1	NBR OF BYTES   IN TLTAB 
	ADK	A3,2	ADJUST FOR TLTAB LENGTH WORD
	ADK	A3,ITCTLT	ITCT LENGTH
	ST	A4,SAVE01+STKEND	SAVE SHTAB2 POINTER
	CALL	CALLMO	ALLOCATE AND MOVE ITCT 
	LD	A4,SAVE01+STKEND	GET SHTAB2 POINTER 
	STR	A2,A4	NEW ITCT ADR IN SHTAB2 
	ST	A2,SAVITC+STKEND	SAVE NEW ITCT ADR
	CALL	MVPGTL	ALLOCATE AND MOVE PGTL-DATA
	CALL	MVSTAT	ALLOCATE AND MOVE STATIC-ZERO
	LDK	A2,2 
	ST	A2,DYNDIS+STKEND	INIT.DYN.CORE TABLE DISPL. 
	CALL	ALLDYN	ALLOCATE DYNAMIC-CORE
	LDR*	A3,A4	ITCT ADR
	SUK	A5,2	COUNT NBR OF ITCT'S 
	RB(P)	TCLLOP	ITCT'S LEFT 
TCLEXT	EQU	*
	EJECT
SYA200	EQU	*
* INCLUDE MOVED PROT.DDIV IN FREE AREA
	LD	A5,DDIVTO+STKEND
	ST	A5,DATEND+STKCOM

* CONTINUE IN PART 3 *

	LDKL	A5,START3	RELATIVE START ADDRESS
	AD	A5,M:REL+STKCOM	ADD RELOCATION BASE 
	ABR	A5 
	EJECT


************************************************
***                                          ***
**            SYSLCO  PART 3                  **
**                                            **
************************************************

*   BUILD REAL ITCT'S. COPY ITCT'S ACCORDING TO*
*   SHADOW TABLE                               *
*                                              *
************************************************

PART3	EQU	* 

	EJECT
***************************** 
* START OF PROGRAM PART 3   * 
***************************** 

**              G E T T A B                 **
**                                          **
**  FIND TTAB ADDRESS                       **
**                                          **
**  INPUT :A8=POINTER TO ITCT ADR           **
**  OUTPUT:A2=TTAB-ADDRESS                  **
**         A1=TID                           **
**  WORKREGS:A3,A4,A10                      **
**********************************************

GETTAB	EQU	*
	LDR*	A10,A8	ITCT ADDRESS 
	LD	A1,ITCTID,A10	GET TID TO MATCH
GETTTB	EQU	*	ENTRY. INPUT: A1=TID 
	LD	A4,SCTTCT	GET TC:TAB ADDRESS
	LDR*	A3,A4	TCTAB LENGTH
GETT10	ADK	A4,2 
	SUK	A3,2	ALL?
	RF(NN)	GETT20	NO!
	LDR	A3,A1	SAVE A1 (DEBUGGING PURPOS) 
	LDK	A1,LMP5	TID ERROR
	CALL	ERROR 
GETT20	LDR*	A2,A4	TTAB-ADDRESS
	CW	A1,TTBTID,A2	TID EQUAL ?
	RB(NE)	GETT10	NO!
	CM	TTB:PP,A2	RESET PENDING POINTER IN TTAB 
	ST	A2,TTAB+STKCOM	SAVE 
	LD	A3,ITCSPL,A10	GET SPL-PBS.PROGRAM-DATA ADDRESS
	ST	A3,TTB:SA+20,A2	SAVE IN TTAB
	ADKL	A3,SPLSIZ-SPLCPB-2	POINT AT SPL-PBS STACK-BASE
	ST	A3,TTB:SA+28,A2	SAVE IN TTAB
	RTN	A14
	EJECT


**                    Q U E J O B                ** 
**                                               ** 
**  QUEUE TASK VIA 'ACTOT' AND SWITCH TO LEVEL   ** 
**  0, ENB.                                      ** 
**                                               ** 
**  INPUT: A10=ITCT-ADDRESS                      ** 
**         A2=TTAB-ADDRESS                       ** 
*************************************************** 

QUEJOB	EQU	*
* QUEUE THIS TASK (THIS TID)

	LDKL	A3,RETUR	GET RETURN (FROM A15) ADDRESS
	AD	A3,M:REL+STKCOM 
	STR	A3,A15	PUT ON STACK
	LDKL	A3,/00C0	SET LEVEL 0 AND ENABLE 
	STR	A3,A15	PSW 
	CF	A15,SAVE8	SAVE 8 REGS 
	LDK	A7,0	CLEAR ABORT INDICATOR 
	LDR	A5,A2	GET TTAB-ADDRESS 
	LD	A1,SAVITC+STKEND	ITCT ADR 
	LDR*	A3,A1 
	ANK	A3,/FF	SEGMENT NBR TO ACTIVATE 
	LD	A1,2,A1	DISPL IN SEGMENT
	LD	A2,INTENT+STKEND	INTERPRETER ENTRY
	CF	A15,ACTOT 
GETT40	ABL	RETUR8	RELOAD 8 REGS 
RETUR	EQU	* 
	RTN	A14
	EJECT
*      G E N C O P        * 
*                         * 
*************************** 
GENCOP	EQU	*
	ST	A5,SAVE05+STKEND	SAVE A5
	ST	A6,SAVE06+STKEND	SAVE A6
	CALL	FNDTID	FIND TID 
	LD	A10,SAVITC+STKEND	GET ITCT ADDRESS
	LDR	A1,A10	ITCT ADR
	LDK	A3,ITCTLT	TLTAB START DISPL
	LD	A2,ITCTLT,A1	NBR OF ENTRIES IN TLTAB
	SLL	A2,1	NBR OF BYTES   IN TLTAB 
	ADK	A2,2	ADJUST FOR TLTAB COUNTER
	ADR	A3,A2	ITCT LENGTH
	CALL	CALLMO	COPY ITCT
	ST	A2,SAVITC+STKEND	SAVE ITCT ADR
	LD	A3,SAVTID+STKEND	GET NEW TID
	ST	A3,ITCTID,A2	STORE IN ITCT
	LDR	A3,A2	ITCT ADR 
	CALL	MVPGTL	ALLOCATE AND MOVE PGTL-DATA
	LD	A3,SAVITC+STKEND	ITCT ADR 
	CALL	MVSTAT	ALLOCATE AND MOVE STATIC-ZERO
	LD	A3,SAVITC+STKEND	ITCT ADR 
	LD	A10,SAVE01+STKEND	GET APPL.SAVE AREA
	CALL	ALLDYN	ALLOCATE DYNAMIC CORE
	LD	A1,SAVTID+STKEND	TID
	LDR	A10,A7	ITCT ADDRESS
	CALL	GETTTB	FIND TTAB ADR
	CALL	QUEJOB	QUEUE THIS TASK
	LD	A10,SAVITC+STKEND	ITCT ADR
	LDR	A5,A10	ITCT ADDRESS
	ADK	A5,22
	ST	A5,TTB:SA+26,A2	SAVE ITCT ADR IN TTAB(SAVE-A13) 
	IFT	DSKPAG=1 
	ADKL	A5,ITCCSB-ITCDCD	POINT AT CSB IN ITCT 
	ST	A5,TTB:CB,A2	SAVE POINTER IN TTAB 
	XIF
	IFT MMUPAG=0 
	LD	A5,SAVE05+STKEND	RESTORE A5 
	LD	A6,SAVE06+STKEND	RESTORE A6 
	RTN	A14
	EJECT
*        F N D T I D        * 
*                           * 
* FIND TID FOLLOWING "A1"   * 
* IN SHTAB4                 * 
*                           * 
* INPUT : A1=TID            * 
* EXIT  : A1=NEW TID        * 
* WORK  : A2,A3             * 
***************************** 

FNDTID	EQU	*
	LD	A2,SHADOW,A10	SHTAB1 ADR
	LD*	A3,SHADOW,A10	SHTAB1 LEN 
	ADR	A2,A3	SHTAB2 ADR 
	ADR	A2,A3	SHTAB3 ADR 
	ADR	A2,A3	SHTAB4 ADR 
	LDR*	A3,A2	SHTAB4 LEN
FNDTI0	EQU	*
	SUK	A3,1	FINISHED ?
	RF(NN)	FNDTI1	NO 
	LDK	A1,LMP5	YES,TID ERROR
	CALL	ERROR 
FNDTI1	EQU	*
	ADK	A2,2	ADJUST POINTER
	CWR*	A1,A2	TID FOUND ? 
	RB(NE)	FNDTI0	NO,TRY NEXT
	LD	A1,2,A2	YES,LOAD NEXT TID 
	ST	A1,SAVTID+STKEND	SAVE IT
	RTN	A14
	EJECT
*        A L L D Y N           *
*                              *
* ALLOCATE DYNAMIC-CORE        *
*                              *
* INPUT : A3 ITCT ADDRESS      *
* EXIT  : ITCT IS UPDATED      *
*         WITH DYNAMIC-CORE    *
*         POINTERS             *
* WORK  : A1-A3,A9,A11         *
********************************

ALLDYN	EQU	*
	LDR	A7,A3	ITCT ADR 
	LD	A3,ITCNEP,A3	STACK-SIZE REQUIRED
	LD	A9,FSTADR+STKCOM	SEGMENTED APPLICATION? 
	RF(NZ)	ALLDY1	NO!! 
	CALL	CALLMO	ALLOCATE FROM BOTTOM 
	LD	A3,ITCNEP,A7	DYN. CORE SIZE 
ALLDY0	EQU	*
	ST	A2,ITCDCB,A7	SAVE BASE PNTR 
	ST	A2,ITCDCC,A7	SAVE CURRENT EXTENT
	ADR	A3,A2	+ BASE-PNTR
	SUKL	A3,SPLSIZ	- SPL-STACK-SIZE
	ST	A3,ITCDCD,A7	SAVE DDI-POOL-BASE 
	ADK	A3,SPLCPB	POINT AT SPL-PBS-PNTR
	ST	A3,ITCSPL,A7	SAVE SPL-PBS-PNTR
	LD	A1,DYNTAD,A10	TABLE ADR 
	LD	A2,DYNDIS+STKEND	GET DYN.CORE TABLE DISPL 
	ADR	A1,A2	NEXT TABLE ENTRY TO USE
	ADK	A2,2	COUNT DISPL 
	ST*	A2,DYNTAD,A10	COUNT LENGTH WORD IN TABLE 
	ST	A2,DYNDIS+STKEND	STEP DISPL 
	SUK	A3,SPLCPB	POINT AT SPL-PBS START 
	STR	A3,A1	STORE SPL-PBS ADR IN TABLE 
	RTN	A14
ALLDY1	EQU	*
	LDR	A2,A9	SAVE START-ADR 
	ADR	A9,A3	ADD LENGTH 
	ADKL	A9,1
	ANKL	A9,/FFFE	EVEN ADR 

* CHECK ADDRESS 

	LD	A11,LSTADR+STKCOM	END OF FREE AREA
	CALL	CMPADR
	RF(NL)	ALLDY2	OK ! 
	LDKL	A1,LMP3	MEMORY OVERFLOW 
	CALL	ERROR 
ALLDY2	EQU	*
	ST	A9,FSTADR+STKCOM	NEW START OF FREE AREA 
	RB	ALLDY0	UPDATE ITCT
	EJECT
*          M V S T A T         *
*                              *
* ALLOCATE AND MOVE STATIC-    *
* CORE                         *
*                              *
* INPUT : A3 ITCT ADDRESS      *
* EXIT  : A6 -1                *
*         A3 ITCT ADDRESS      *
* WORK  : A1-A2,A7-A8,A10      *
********************************

MVSTAT	EQU	*
	CALL	PUSH	SAVE REGISTERS 
	LDR	A7,A3	ITCT ADR 
	ADK	A3,ITCTGC	POINT AT ICB-PLTGC-MAIN ADDRESS
	ST	A3,SAVE07+STKEND	SAVE POINTER 
	ADK	A7,ITCTLT	TLTAB ADR
	LDR	A12,A7	SAVE TLTAB-BASE 
	LDR*	A6,A7	NBR OF ENTRIES IN TLTAB 
MVSTA1	EQU	*
	SUK	A6,1	COUNT 
	RF(NN)	MVSTA2	STATIC-ZERO AREAS LEFT 
	CALL	POB	RELOAD REGISTERS
	LD	A3,SAVE07+STKEND	LOAD ICB-PLTGC-MAIN ADR POINTER
	SUK	A3,ITCTGC	MAKE IT ITCT POINTER 
	LDKL	A6,-1	GIVE A6 ITS OUTPUT VALUE
	RTN	A14
MVSTA2	EQU	*
	ADK	A7,2	POINT AT STATIC-ZERO ADR
	LDR*	A8,A7	STATIC-ZERO ADR 
	RB(Z)	MVSTA1	EMPTY ENTRY 
	LD*	A3,SAVE07+STKEND	LOAD ICB-PLTGC-MAIN ADDRESS 
	SUR	A10,A10	LEVEL
	LDK	A1,0	RESET INDICATOR 
	LD	A2,FREQUE	GET MONITOR BLOCK ADR	=2
	CALL	FNDTGC	FIND STATIC-ZERO ADR+LENGTH
	CALL	CALLMO	ALLOCATE AND MOVE STATIC-ZERO
	STR	A2,A7	UPDATE TLTAB ENTRY 
	RB	MVSTA1
	EJECT
*         F N D T G C            *
*                                *
* FIND STATIC-ZERO ADR+LENGTH    *
* FOR ONE PROGRAM                *
*                                *
* INPUT : A3  ICB-PLTGC ADR      *
*         A8  STATIC-ZERO ADR    *
*             WANTED             *
*         A10 0 (ZERO)           *
*         A12 TLTAB BASE         *
*         A2  MONITOR BLOCK ADR  *		=2
* EXIT  : A1  STATIC-ZERO ADR    *
*         A2  MONITOR BLOCK ADR  *		=2
*         A3  STATIC-ZERO LENGTH *
* WORK  : A2,A4,A5,A9,A11        *
* WORKAREA: USES MONITOR BLOCKS  *		=2
*           AS STACK AREA        *		=2
**********************************

FNDTGC	EQU	*
	LDR*	A1,A3		=2 
	SRL	A1,8		=2 
	SUK	A1,/60	COBOL PROGRAM?	=2 
	RF(Z)	FNDT00	YES!	=2 
	LDK	A1,0	INDICATE NOT FOUND	=2 
	RF	FNDTG0	RETURN	=2
FNDT00	EQU	*		=2
	LD	A1,TGCSZD,A3	GET DISPL IN TLTAB 
	ADR	A1,A12	POINT AT TLTAB-ENTRY
	ADK	A1,2	ADJUST FOR TLTAB LENGTH-WORD
	LDR*	A1,A1	STATIC-ZERO-ADR 
	CWR	A1,A8	WANTED ? 
	RF(NE)	FNDTG1	NO 
	ADK	A3,TGCSZL	YES,POINT AT LENGTH WORD 
	LDR*	A3,A3	STATIC-ZERO-LENGTH
FNDTG0	EQU	*
	RTN	A14
FNDTG1	EQU	*
	LDK	A1,0	INDICATE NOT FOUND
	LD	A5,8,A3	NBR OF ENTRIES IN PLTGC CALL TAB
	SLL	A5,1	*2 = TABLE LENGTH 
	ADR	A5,A3	BASE 
	ADK	A5,10	DISPL TO TABLE START 
	LDR	A4,A3	ICB-PLTGC ADR
	ADK	A4,TGCCAL+TGCCTE	ADR TO FIRST ENTRY IN CALL TAB
FNDTG2	EQU	*
	LDR	A9,A4	TABLE START ADR
	LDR	A11,A5	TABLE END ADR 
	CALL	CMPADR	END OF CALL-TABLE?	=2
	RB(NG)	FNDTG0	YES!	=2
FNDTG3	EQU	*
	ST	A4,2,A2	SAVE ON STACK	=2
	ST	A5,4,A2	SAVE ON STACK	=2
	LDR*	A2,A2	ADJUST STACK POINTER	=2 
	RF(NZ)	FNDTG4	MORE BLOCKS AVILABLE	=2
	LDKL	A1,NOBLK	NO BLOCKS AVILABLE	=2
	CALL	ERROR		=2 
FNDTG4	EQU	*		=2
	LDR*	A3,A4	NEXT LINK 
	ADKL	A10,1	ADJUST LEVEL
	CALL	FNDTGC	NEXT LEVEL 
	SUK	A2,6	ADJUST STACK POINTER	=2 
	LDR	A1,A1	STATIC-ZERO FOUND
	RB(NZ)	FNDTG0	YES
	SUKL	A10,1	ADJUST LEVEL
	LD	A4,2,A2	TABLE POINTER FROM STACK	=2 
	LD	A5,4,A2	TABLE END POINTER FROM STACK	=2 
	ADK	A4,TGCCTE	POINT TO NEXT TABLE-ENTRY
	RB	FNDTG2
	EJECT
*         M V P G T L             * 
*                                 * 
* ALLOCATE AND MOVE PGTL-DATA     * 
*                                 * 
* INPUT : A2 ITCT ADR             * 
* EXIT  : A1 OLD PGTL-DATA ADR    * 
*         A2 NEW PGTL-DATA ADR    * 
*         A3 ITCT ADR             * 
*********************************** 

MVPGTL	EQU	*
	LD	A1,ITCGLA,A2	PGTL-DATA ADR
	LD	A3,ITCGLL,A2	PGTL-DATA LENGTH 
	CALL	CALLMO	ALLOCATE AND MOVE PGTL-DATA
	LD	A3,SAVITC+STKEND	ITCT ADR 
	ST	A2,ITCGLA,A3	NEW PGTL-DATA ADR
	RTN	A14
	EJECT
************************************************
*                                              *
*                 C A L L M O                  *
*                                              *
*                                              *
* INPUT: A3=LENGTH TO MOVE                     *
*        PDDIV=FLAG THAT INDICATES IF DDIV IS  *
*              GOING TO BEE BUILT IN PROT.DDIV *
*        PDDIVL=LENGTH LEFT IN PROT.DDIV       *
*        SCTEFA=END OF FREE AREA               *
*                                              *
* OUTPUT: A3=-1                                *
*         PDDIV=1 IF DDIV IS BUILT IN PROT.    *
*               DDIV ELSE PDDIV=0              *
*         PDDIVL=NEW PDDIVL                    *
*         LSTADR=NEW LAST FREE ADDR.           *
*                                              *
* WORK REG:A2                                  *
*                                              *
************************************************
CALLMO	EQU	*
	LD	A2,PDDIV+STKEND	BUILD DDIV IN PROT.DDIV?
	RF(Z)	CAL200	NO! 
	LD	A2,PDDIVL,A10	GET LENGTH LEFT IN PROT.DDIV
	SUR	A2,A3	ENOUGH SPACE LEFT IN PROT.DDIV 
	RF(NN)	CAL100	YES! 
* 
*        RESET FLAG AND CHANGE LSTADR TO POINT AT 
*        END OF FREE AREA 
* 
	CM	PDDIV+STKEND	RESET FLAG 
	LD	A2,SCTEFA+2	GET END OF FREE AREA
	ST	A2,LSTADR+STKCOM	STORE NEW LSTADR 
CAL100	EQU	*
	ST	A2,PDDIVL,A10	LENGTH LEFT IN PROT.DDIV
CAL200	EQU	*
	CALL	MOVING
	RTN	A14
	EJECT


START3	EQU	*


REALTA	EQU	*
	LD*	A8,SHADOW,A10	SHTAB LENGTH 
	LD	A5,SHADOW,A10	SHTAB1 ADR
	ST	A10,SAVE01+STKEND	SAVE APPL.SAVE AREA POINTER 
	ADR	A8,A5	SHTAB2 ADR 
	ST	A8,SAVE03+STKEND	SAVE SHTAB2 ADR
	AD*	A8,SCTSFA	SHTAB3 ADR 
	ST	A8,SAVE02+STKEND	SHTAB3 ADR 
SYA300	EQU	*
	LD	A8,SAVE03+STKEND	SHTAB2 POINTER 
	ADKL	A8,2	NEXT 
	CW	A8,SAVE02+STKEND	ALL TCL'S DONE ? 
	RF(E)	SYA310	YES 
	ST	A8,SAVE03+STKEND	SAVE SHTAB2 POINTER
	ADK	A5,2	SHTAB1 POINTER
	LDR*	A10,A5	NBR OF COPIES
	RB(Z)	SYA300	NONE
	CALL	GETTAB	FIND TTAB ADR
	ST	A10,SAVITC+STKEND	SAVE ITCT ADR 
	CALL	QUEJOB	QUEUE TASK 
	LDR	A6,A10	ITCT ADR
	ADK	A6,22	MAKE IT INT-USABLE 
	ST	A6,TTB:SA+26,A2	SAVE ITCT ADR IN TTAB(SAVE-A13) 
	IFT DSKPAG=1 
	ADKL	A6,ITCCSB-ITCDCD	POINT AT CSB IN ITCT 
	ST	A6,TTB:CB,A2	SAVE IN TTAB 
	XIF
	IFT MMUPAG=0 
	LDR*	A6,A5	NBR OF COPIES 
SYA305	EQU	*
	LD	A10,SAVE01+STKEND	GET APPL.SAVE AREA POINTER
	SUK	A6,1	COUNT NBR OF COPIES 
	RB(NP)	SYA300	NEXT TCL 
	CALL	GENCOP	GENERATE ONE COPY
	RB	SYA305	NEXT 
	EJECT

* ADJUST START OF FREE AREA 

SYA310	EQU	*
	LD	A1,PDDIV+STKEND	UPDATE SCTEFA?
	RF(NZ)	SYA312	NO!
	LD	A1,LSTADR+STKCOM	GET END OF FREE AREA 
	ST	A1,SCTEFA+2 
SYA312	EQU	*
	LD	A1,FSTADR+STKCOM	START OF FREE AREA 
	RF(Z)	SYA315 
	ST	A1,SCTSFA	STORE START OF FREE AREA
SYA315	EQU	*
	LDKL	A1,NXTAPP 
	AD	A1,M:REL+STKCOM 
	ABR	A1	CHECK IF MORE APPLICATIONS


* 
* MOVE DYNTAB:S AND SAVE IN ONE WORD
* NUMBER OF DYNTAB:S
* 
SYA320	EQU	*
	LDKL	A10,STKEND	START OF 1:ST APPL.SAVE AREA 
	LD	A1,APPLNO+STKCOM	GET NUMBER OF DYNTAB:S 
	LD	A4,SHADOW,A10	GET START OF AREA WHERE TO PUT
			DYNTAB:S AND NUMBER OF DYNTAB:S
	ST	A4,DYNSTA+STKCOM	SAVE START OF DYNTAB:S 
	STR	A1,A4	SAVE NUMBER OF DYNTAB:S
	ADK	A4,2	INCREMENT TO-ADDR 
SYA330	EQU	*
	LD	A2,DYNTAD,A10	GET DYNTAB FROM ADDR
	LDR*	A3,A2	GET LENGTH OF DYNTAB
SYA340	EQU	*
	LDR*	A5,A2	GET DYNTAB WORD 
	STR	A5,A4	STORE
	ADK	A4,2	INCREMENT TO-ADDR 
	ADK	A2,2	INCREMENT FROM-ADDR 
	SUK	A3,2	ALL WORDS MOVED ? 
	RB(NZ)	SYA340	NO!
	ADKL	A10,TABLEN	NEXT APPL.SAVE AREA
	SUK	A1,1	ALL DYNTAB:S MOVED? 
	RB(NZ)	SYA330	NO!
	XIF
LCOEND	EQU	*	SYSLCO END 
	END

Full view