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

⟦0ce673c13⟧

    Length: 17520 (0x4470)
    Notes: pts_type(SC)
    Names: »LDTASK.SC«

Derivation

└─⟦4358b8014⟧ Bits:30009669 Philips computer tape "600124"
    └─⟦this⟧ »MON10/LDTASK.SC« 
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
    └─⟦this⟧ »M:DECE/LDTASK.SC« 
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
    └─⟦this⟧ »MON10/LDTASK.SC« 

PTS(SC)

	IDENT LDTASK 	REL 10.0 80-03-14 870105041000 

* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   LDTASK = LOAD TASK
* 
* 
* 
* 
**************************************************
* 
* 
*   THIS MODULE CONTAINS THE LOAD TASK
*   FOR TOSS MEMORY MANAGEMENT SYSTEMS. 
* 
*   IT CONTAINS TWO ENTRY POINTS: 
* 
*   - LT:DSK   USED IN DISC PAGING SYSTEMS
*   - LT:SWB   USED IN SWAPPABLE WORK BLOCK SYSTEMS 
* 
* 
	EJECT			LDTASK 
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	LT:DSK	DISC PAGING ENTRY 
	ENTRY	LT:SWB	SWAPPABLE WORK BLOCK ENTRY
	ENTRY	TTABLD	LOAD TASK TTAB
	ENTRY	QLTDSK	ACTIVATE LDTASK AT ENTRY LT:DSK 
	ENTRY	QLTSWB	ACTIVATE LDTASK AT ENTRY LT:SWB 
	ENTRY	QLTASK	ACTIVATE LDTASK 
	ENTRY	LD:ECB	LDTASK ECB AREA 
	ENTRY	LD:BUF	LDTASK BUFFER 
	ENTRY	LD:BUE	END OF BUFFER 
	ENTRY	PQEMTY	PAGE QUEUE EMPTY FLAG 
	ENTRY	LD:STB	LDTASK STACK BASE 
	EJECT			LDTASK 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	TLDS15	ENTRY IN TLDSEG 
	EXTRN	TLDS20	ENTRY IN TLDSEG 
	EXTRN	QMEXIT	QUEUE TASK AND EXIT MONITOR TASK
	EXTRN	LKMERR	HALT SYSTEM DUE TO FATAL LKM ERROR
	EXTRN	ACTOT	ACTIVATE TASK
	EXTRN	RELPA2	RELEASE PAGE
	EXTRN	PAGQUE	FREE PAGE QUEUE 
	EXTRN	PAG:QB	QUEUE LINK BACKWARDS
	EXTRN	PAG:PA	PAGE ADDRESS
	EXTRN	PAG:SB	SEGMENT BLOCK ADDRESS 
	EXTRN	SEG:FC	FILE CODE 
	EXTRN	SEG:DS	DISC SECTOR ADDRESS 
	EXTRN	SEG:EL	SEGMENT LENGTH
	EXTRN	SEG:PB	PAGE BLOCK ADDRESS
	EXTRN	SWB:DS	DISC SECTOR ADDRESS OF FIRST COPY 
	EXTRN	SWB:EL	SWB LENGTH (BYTES)
	EXTRN	SWB:NS	SWB LENGTH (SECTORS)
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFFECTIVE LENGTH 
	EXTRN	ECBRC	ECB RETURN CODE
	EXTRN	ECBCW1	ECB CONTROL WORD 1
	EXTRN	ECBCW2	ECB CONTROL WORD 2
	EXTRN	TTB:SA	TTAB SAVE AREA
	EXTRN	TTB:MT	MMU TABLE 
	EXTRN	TTB:CB	CURRENT SEGMENT BASE
	EXTRN	TTB:SP	SEGTAB ADDRESS
* 
	EJECT			LDTASK 
* 
* 
	EXTRN	SCTIPL	PROGRAM LOADING DEVICE
	EXTRN	SCTIOE	APPLICATION RESTART ADDRESS 
	EXTRN	SCTPSZ	PAGE SIZE 
	EXTRN	SCTLAP	LOGICAL ADDRESS OF PAGES
	EJECT			LDTASK 
* 
* 
***************************************** 
* 
*	CONDITIONAL ASSEMBLY
* 
***************************************** 
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	1
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	0
* 
* 
*	A PROGRAM VERSION INCLUDING TOSS SWAPPABLE WORK 
*	BLOCKS IS OBTAINED BY SETTING SWPBLK EQU 1. 
* 
SWPBLK	EQU	0
* 
	EJECT			LDTASK 
* 
*	LDTASK ECB AND BUFFER AREAS 
* 
LD:ECB	DATA	0,0,0,0,0,0,0	LDTASK ECB AREA 
* 
LD:BUF	RES	128	INTERMEDIATE BUFFER FOR LOAD TASK
LD:BUE	EQU	*	END OF BUFFER
* 
	RES	4	LDTASK STACK (TWO LEVELS)
LD:STB	EQU	*-2	LOAD TASK STACK BASE 
* 
	EJECT			LDTASK 
* 
*	TTABLD (LOAD TASK TTAB) 
* 
	IFT	MMUPAG=1 
	RES	16	LDTASK MMU TABLE
	XIF
* 
	DATA	0	CURRENT SEGMENT BASE
PQEMTY	DATA	0	PAGE QUEUE EMPTY FLAG 
	DATA	0	SEGMENT BLOCK ADDRESS 
* 
TTABLD	EQU	*	TTABLD ENTRY 
	DATA	0	DISPATCHER QUEUE LINK 
	DATA	'#L'	TASK IDENTIFICATION
	DATA	49	PRIORITY LEVEL 
	DATA	0	PENDING POINTER 
	DATA	/C4C0	PSW (PROGRAM STATUS WORD) 
	DATA	0	DISPATCH ADDRESS
	DATA	0,0,0,0,0,0,0	REGISTER SAVE AREA, A1-A14
	DATA	0,0,0,0,0,0,0 
	DATA	2	DEVICE TABLE LENGTH 
* 
	EJECT			LDTASK 
* 
* 
**********
* LT:DSK *
**********
* 
* 
*   LT:DSK PERFORMS LOADING OF DISC RESIDENT SEGMENTS INTO CORE.
* 
*   INPUT:  A1 = SEGMENT BLOCK ADDRESS
*           A3 = TTAB ADDRESS OF CALLING TASK 
* 
* 
LT:DSK	EQU	*	LDTASK DISC PAGING ENTRY 
	LDR*	A2,A1	SEGMENT STATUS
	RF(NN)	LTD:05	SEGMENT NOT LOADED IN CORE 
* 
*	UPDATE MMU TABLE FOR CALLING TASK (IF MMU) AND
*	REMOVE PAGE FROM PAGQUE 
* 
	LDR	A7,A3	SAVE A3
	LDR	A5,A3
	INH
	CF	A15,TLDS15
	LDR	A5,A7	TTAB ADDRESS OF CALLING TASK 
	ABL	QMEXIT	QUEUE TASK AND EXIT LDTASK
* 
	EJECT			LDTASK 
* 
*	NO PAGE AVAILABLE. PAUSE LDTASK UNTIL RESTARTED 
*	BY RELPAG WHEN PAGE AVAILABLE AGAIN.
* 
LTD:00	EQU	*
	IM	PQEMTY	INDICATE PAGE QUEUE EMPTY
	LKM
	DATA	5	PAUSE LDTASK
* 
*	TAKE FIRST PAGE FROM PAGQUE 
* 
LTD:05	EQU	*
	LD	A2,PAGQUE+2 
	CWK	A2,PAGQUE
	RB(E)	LTD:00	NO PAGE AVAILABLE 
* 
	EJECT			LDTASK 
* 
*	TAKE FOUND PAGE OUT OF PAGQUE 
* 
	INH
	LD	A4,PAG:QB,A2	ADDRESS TO NEXT PAGE BLOCK 
	ST	A4,PAGQUE+2	UPDATE QUEUE ANCHOR 
	LDR*	A5,A2	PAGQUE ADDRESS
	STR	A5,A4	UPDATE QUEUE LINK FORWARD NEXT BLOCK 
	CMR	A2	RESET QUEUE LINK FORWARD THIS BLOCK 
	LDKL	A6,/4000	SEGMENT UNDER LOADING BIT
	LD	A4,PAG:SB,A2	OLD SEGMENT BLOCK ADDRESS
	RF(Z)	LTD:10 
	SCR	A6,A4	RESET STATUS 
* 
LTD:10	EQU	*
	ORRS	A6,A1	INDICATE SEGMENT UNDER LOADING
	ST	A2,SEG:PB,A1	SET NEW PAGE BLOCK ADDRESS 
	ST	A1,PAG:SB,A2	SET NEW SEGMENT BLOCK ADDRESS
* 
	IFT	MMUPAG=1 
* 
*	UPDATE MMU TABLE FOR CALLING TASK AND LDTASK
* 
	LDKL	A5,TTABLD	LDTASK TTAB ADDRESS 
	MS	3,TTB:SA+2,A5	SAVE A1-A3 IN TTAB SAVE AREA
	TL	TTB:MT,A3	LOAD MMU WITH CALLING TASK
	TS	TTB:MT,A5	STORE IN LDTASK MMU TABLE 
	LD	A1,TTB:CB,A3	CURRENT SEGMENT BASE ADDRESS 
	ST	A1,TTB:CB,A5
	LDR	A1,A2
	LDR	A3,A5	TTAB ADDRESS OF LDTASK 
	CF	A15,TLDS20	UPDATE MMU TABLE FOR LDTASK
	TS	TTB:MT,A3	STORE NEW MMU TABLE FOR CALLING TASK
	XIF
* 
	EJECT			LDTASK 
* 
*	PREPARE FOR READING OF SEGMENT
* 
	ENB
	LD	A4,SCTPSZ	PAGE SIZE 
	SRL	A4,1	CONVERT LENGTH TO WORDS 
	LD	A6,SEG:EL,A1	SEGMENT LENGTH 
	SRL	A6,1	CONVERT LENGTH TO WORDS 
	LDR	A5,A3	TTAB ADDRESS OF CALLING TASK 
	LDR	A9,A1	SAVE SEGMENT BLOCK ADDRESS 
* 
	IFT	SWPBLK=1 
	LDR	A11,A5	INDICATE DISC PAGING (A11 <> 0) 
	XIF
* 
	LD	A12,TTB:SP,A5	SEGTAB ADDRESS
	LD	A12,SEG:FC,A12	SEGMENT DISC FILE CODE 
	LD	A3,PAG:PA,A2	PAGE ADDRESS (PHYSICAL)
	LD	A2,SEG:DS,A1	SEGMENT DISC ADDRESS 
	LDR*	A1,A1 
	ANK	A1,/FF 
* 
	IFT	MMUPAG=0 
	ST*	A3,TTB:CB,A5	UPDATE CURRENT SEGMENT BASE 
	XIF
* 
LTD:15	EQU	*	ENTRY USED BY LT:SWB 
	LDK	A7,/91	PHYSICAL READ 
* 
	EJECT			LDTASK 
* 
*	SET ECB PARAMETERS
* 
LTD:20	EQU	*	ENTRY USED BY LT:SWB 
	LDKL	A8,LD:ECB	LD:ECB ADDRESS
	ST	A1,ECBCW1,A8	SET SECTOR NUMBER IN ECB 
	ST	A2,ECBCW2,A8
	STR	A12,A8	SET DISC FILE CODE IN ECB 
	LDR	A12,A3 
	LDKL	A14,LD:STB	LDTASK STACK BASE
* 
*	CHECK IF ONE OR TWO LKM:S NECCESSARY
* 
	LDR	A10,A6 
	ADKL	A10,127	NEXT HIGHER MULTIPLE OF 128 
	ANKL	A10,/7F80 
	SUR	A4,A10	CHECK IF PAGE IS LARGE ENOUGH 
	RF(NN)	LTD:25	OK, JUST ONE LKM NEEDED
	LDR	A10,A6 
	ANKL	A10,/7F80	NEXT LOWER MULTIPLE OF 128
* 
LTD:25	EQU	*
	SUR	A6,A10	REMAINING LENGTH TO MOVE IN 2ND LKM 
	ADR	A10,A10	CONVERT LENGTH TO BYTES
	RF(Z)	LTD:50	INTERMEDIATE BUFFER NEEDED
	ST	A10,ECBRL,A8	SET REQUESTED LENGTH IN ECB
* 
	IFT	MMUPAG=0 
	ST	A3,ECBBA,A8	SET BUFFER ADDRESS
	XIF
* 
	EJECT			LDTASK 
* 
* 
	IFT	MMUPAG=1 
	ECR	A1,A3
* 
	IFT	SWPBLK=1 
	LDR	A11,A11	CHECK DISC PAGING/SWB FLAG 
	RF(NZ)	LTD:30	DISC PAGING REQUEST
* 
	EJECT			LDTASK 
* 
*	SWB: CONVERT LOGICAL ADDRESS TO PHYSICAL
* 
	SRL	A1,3 
	ANK	A1,/1E	MMUTAB INDEX (5 BITS) 
	ADR	A1,A5	ADD TTAB ADDRESS 
	LC	A1,TTB:MT,A1	PHYSICAL PAGE ADDRESS
	LDR	A2,A1
	ANK	A2,/3C 
	SRC	A2,6 
	ANKL	A3,/FFF 
	ORR	A3,A2
	RF	LTD:40
	XIF
* 
LTD:30	EQU	*
	IFT	MMUPAG=1 
* 
*	SEGMENT: CONVERT PHYSICAL ADDRESS TO LOGICAL
* 
	SLL	A3,2 
	LDR	A12,A3 
	ANKL	A12,/FFF	CONVERT PHYSICAL ADDRESS TO LOGICAL
	OR	A12,SCTLAP
* 
LTD:40	EQU	*
	ST	A3,ECBBA,A8	SET BUFFER ADDRESS
	SRL	A1,2 
	ANK	A1,/30 
	SCR	A1,A8
	XIF
* 
	CF	A14,LTD:90	READ/WRITE SEGMENT/SWB 
	ADK	A6,0	CHECK IF ANYTHING LEFT TO READ/WRITE
	RF(NP)	LTD:70	SEGMENT/SWB HANDLING FINISHED
* 
	EJECT			LDTASK 
* 
*	NOT ROOM ENOUGH IN PAGE FOR LAST SECTOR:
*	READ IT TO MEMORY VIA INTERMEDIATE BUFFER 
* 
	LD	A1,ECBEL,A8	EFFECTIVE LENGTH
	ADR	A12,A1	UPDATE PAGE AREA POINTER
* 
LTD:50	EQU	*
	LDKL	A1,LD:BUF	LDTASK BUFFER ADDRESS 
	ST	A1,ECBBA,A8 
	LDK	A2,/80 
	SCR	A2,A8	INDICATE BUFFER NOW IN SYSTEM AREA 
	ADK	A2,/80	A2 := 256 
	ST	A2,ECBRL,A8	SET REQUESTED LENGTH TO ONE SECTOR
	ECR	A2,A10 
	ADS	A2,ECBCW2,A8	UPDATE SECTOR NUMBER
	RF(O)	LTD:85	OVERFLOW
* 
LTD:60	EQU	*
	CF	A14,LTD:90	READ ONE SECTOR TO LD:BUF
	LDR	A2,A12	PAGE POINTER
	ADR	A6,A6	CONVERT LENGTH TO BYTES
* 
	IFT	MMUPAG=1 
	MVSU	A6	MOVE LAST PART OF SEGMENT/SWB TO PAGE
	XIF
* 
	IFT	MMUPAG=0 
LTD:65	EQU	*
	LDR*	A10,A1	MOVE ONE WORD
	STR	A10,A2 
	ADK	A1,2	INCREMENT BUFFER POINTERS 
	ADK	A2,2 
	SUK	A6,2	DECREMENT COUNTER 
	RB(P)	LTD:65 
	XIF
* 
	EJECT			LDTASK 
* 
* 
LTD:70	EQU	*
	IFT	SWPBLK=1 
	LDR	A11,A11	CHECK DISC PAGING/SWB FLAG 
	RF(Z)	LTD:80	SWB HANDLING
	XIF
* 
	LDKL	A4,/C000	INDICATE SEGMENT SUCCESSFULLY LOADED 
	XRRS	A4,A9 
* 
LTD:80	EQU	*
	ABL	QMEXIT	QUEUE TASK AND EXIT LDTASK
* 
LTD:85	EQU	*	OVERFLOW CORRECTION
	IM	ECBCW1,A8 
	LDKL	A2,/7FFF
	ANS	A2,ECBCW2,A8 
	RB	LTD:60
* 
	EJECT			LDTASK 
* 
*	READ ONE SECTOR FROM DISC 
* 
LTD:90	EQU	*
	LKM
	DATA	1 
	LD	A2,ECBRC,A8	RETURN CODE 
	ANKL	A2,/FEFF	SKIP RETRY BIT 
	RF(NZ)	LTD:95	DISC ERROR 
	RTN	A14	NO, RETURN 
* 
*	ERROR: INSERT PAGE IN PAGQUE AGAIN
* 
LTD:95	ANK	A2,1 
	NGR	A2,A2
	SUK	A2,2	ERROR, SET RETURN CODE -2 OR -3 
 	ST	A2,TTB:SA+14,A5	SET RETURN CODE IN A7
* 
	IFT	SWPBLK=1 
	LDR	A11,A11	CHECK DISC PAGING/SWB FLAG 
	RB(Z)	LTD:80	SWB HANDLING
	XIF
* 
	LD	A3,SEG:PB,A9	PAGE BLOCK ADDRESS 
	INH
	CF	A15,RELPA2	RELEASE PAGE 
	LDK	A4,1	INDICATE SEGMENT ERROR
	SCR	A4,A9
	LD	A4,SCTIOE	APPLICATION RESTART ADDRESS 
	ST	A4,TTB:SA,A5	SET NEW DISPATCH ADDRESS 
	RB	LTD:80
* 
	EJECT			LDTASK 
* 
* 
**********
* LT:SWB *
**********
* 
* 
*   LT:SWB HANDLES THE LOADING/STORING OF SWAPPABLE WORK BLOCKS.
* 
*   INPUT:  A1 = SWAPPABLE WORK BLOCK ADDRESS 
*           A3 = TTAB ADDRESS OF CALLING TASK 
*	   A4 = LKM DATA DIRECTIVE
* 
* 
LT:SWB	EQU	*	LDTASK SWB HANDLING ENTRY
	IFT	SWPBLK=1 
	IFT	MMUPAG=1 
	INH
	LDKL	A5,TTABLD	LDTASK TTAB ADDRESS 
	TL	TTB:MT,A3	LOAD MMU WITH CALLING TASK
	TS	TTB:MT,A5	STORE IN LDTASK MMU TABLE 
	ENB
	XIF
* 
	IFT	SWPBLK=1 
	LDR	A5,A3	TTAB ADDRESS OF CALLING TASK 
	LDR	A7,A4	LKM DATA DIRECTIVE 
	SUR	A11,A11	INDICATE SWB HANDLING (A11 = 0)
	LDR*	A3,A1	DISC ADDRESS OF FIRST COPY
	ANK	A3,/FF 
	LD	A4,SWB:DS,A1
	LD	A6,SWB:EL,A1	SWB COPY LENGTH (BYTES)
	LD	A2,SWB:NS,A1	SWB COPY LENGTH (SECTORS)
* 
	EJECT			LDTASK 
* 
* 
	LD	A1,TTB:SA+14,A5 
	ANK	A1,/FF	SWB COPY INDEX
* 
LTS:10	EQU	*
	SUK	A1,1 
* 
	IFT	CPU852=1 
	RF(NP)	LTS:20
	ADR	A4,A2	COMPUTE DISC ADDRESS OF REQUESTED SWB
	RF(O)	LTS:15	OVERFLOW
	RB	LTS:10
* 
LTS:15	EQU	*	OVERFLOW CORRECTION
	ADK	A3,1 
	ANKL	A4,/7FFF
	RB	LTS:10
* 
LTS:20	EQU	*
	LDR	A1,A3	DISC ADDRESS OF REQUESTED SWB
	LDR	A2,A4
	XIF
* 
	IFT	SWPBLK=1 
	IFT	CPU852=0 
	MUR	A1	COMPUTE DISC ADDRESS OF REQUESTED SWB 
	DAR	A3 
	XIF
* 
	EJECT			LDTASK 
* 
* 
	IFT	SWPBLK=1 
	LD	A3,TTB:SA+16,A5	MEMORY ADDRESS (LOGICAL)
	ADK	A6,1 
	SRL	A6,1	CONVERT SWB LENGTH TO WORDS 
	LDR	A4,A6
	LD	A12,SCTIPL	SWB DISC FILE CODE 
	SUK	A7,19	CHECK LKM DATA DIRECTIVE 
	ABL(Z)	LTD:15	LOAD SWB REQUEST 
	LDKL	A4,/7FFF	PARAMETER TO AVOID INTERMEDIATE BUFFER 
	LDK	A7,/95	PHYSICAL WRITE (STORE SWB REQUEST)
	ABL	LTD:20 
	XIF
* 
	EJECT			LDTASK 
* 
* 
**********
* QLTDSK *
* QLTSWB *
**********
* 
* 
*   THIS ROUTINE PERFORMS ACTIVATION OF THE LOAD TASK.
* 
*   ACTIVATION IS AT LT:DSK WHEN DISC PAGING REQUEST. 
*   ACTIVATION IS AT LT:SWB WHEN SWAPPABLE WORK BLOCK REQUEST.
* 
*   INPUT:  A1 = SEGMENT BLOCK ADDRESS (LT:DSK) 
*  	      = SWAPPABLE WORK BLOCK ADDRESS (LT:SWB) 
*           A3 = TTAB ADDRESS OF CALLING TASK 
*	   A4 = LKM DATA DIRECTIVE (LT:SWB) 
* 
*   OUTPUT: A2, A5 ARE DESTROYED
* 
* 
QLTSWB	EQU	*	ACTIVATE LDTASK AT ENTRY LT:SWB
	IFT	SWPBLK=1 
	LDKL	A2,LT:SWB	DISPATCH ADDRESS
	RF	QLTASK
	XIF
* 
	IFT	SWPBLK=0 
	ABL	LKMERR	INDICATE SYSGEN ERROR AND HALT SYSTEM 
	XIF
* 
QLTDSK	EQU	*	ACTIVATE LDTASK AT ENTRY LT:DSK
	LDKL	A2,LT:DSK	DISPATCH ADDRESS
* 
	EJECT			LDTASK 
* 
* 
QLTASK	EQU	*
	LDKL	A5,TTABLD	LDTASK TTAB ADDRESS 
	ABL	ACTOT	ACTIVATE LDTASK
* 
* 
* 
	END

Full view