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

⟦38351437f⟧

    Length: 7846 (0x1ea6)
    Notes: pts_type(SC)
    Names: »TLDSEG.SC«

Derivation

└─⟦35fda6e03⟧ Bits:30009701 Philips computer tape "BARCLAY"
    └─⟦this⟧ »M:DEMO/TLDSEG.SC« 
└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
    └─⟦this⟧ »M:DENJ/TLDSEG.SC« 
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
    └─⟦this⟧ »M:DENJ/TLDSEG.SC« 

PTS(SC)

	IDENT TLDSEG 	REL 10.0 80-03-14 870105041000 

* 
* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   TLDSEG = LOAD SEGMENT 
* 
* 
* 
* 
**************************************************
* 
* 
*   THIS MODULE CONTAINS THE LOAD SEGMENT LKM PROCESSOR,
*   USED IN TOSS MEMORY MANAGEMENT SYSTEMS. 
* 
* 
	EJECT			TLDSEG 
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	TLDSEG	LOAD SEGMENT
	ENTRY	TLDS15	ENTRY USED BY LDTASK
	ENTRY	TLDS20	ENTRY USED BY LDTASK
	EJECT			TLDSEG 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	PRUN	TTAB ADDRESS OF RUNNING PROGRAM 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	LKM030	LKM REQUEST ERROR 
	EXTRN	PAG:QB	QUEUE LINK BACKWARDS
	EXTRN	SEG:NS	NUMBER OF SEGMENTS
	EXTRN	PAG:PA	PAGE ADDRESS
	EXTRN	SEG:DS	DISC SECTOR ADDRESS 
	EXTRN	SEG:PB	PAGE BLOCK ADDRESS
	EXTRN	TTB:SA	TTAB SAVE AREA
	EXTRN	TTB:MT	MMU TABLE 
	EXTRN	TTB:CB	CURRENT SEGMENT BASE
	EXTRN	TTB:SP	SEGMENT TABLE ADDRESS 
	EXTRN	TTB:SB	SEGMENT BLOCK ADDRESS 
	EXTRN	QLTDSK	ACTIVATE LDTASK AT ENTRY LT:DSK 
	EXTRN	SCTMMP	MMU TABLE PAGE ENTRY
	EXTRN	SCTNPE	NUMBER OF PAGE ENTRIES
	EXTRN	SCTLAP	LOGICAL ADDRESS OF PAGES
	EJECT			TLDSEG 
* 
* 
***************************************** 
* 
*	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 USING TOSS DISC PAGING
*	IS OBTAINED BY SETTING DSKPAG EQU 1.
* 
DSKPAG	EQU	0
* 
	EJECT			TLDSEG 
* 
* 
**********
* TLDSEG *
**********
* 
* 
*   THIS IS THE LOAD SEGMENT LKM PROCESSOR. 
* 
*   IT IS ENTERED FROM THE LKM HANDLER
*   WITH THE FOLLOWING PARAMETERS:
* 
*   A2 = DISPATCH ADDRESS (NOT UPDATED BY IHLKM)
*   A5 = TTAB ADDRESS 
*   A7 = SEGMENT NUMBER 
* 
*   IT RETURNS TO CALLING TASK WITH 
*   THE FOLLOWING PARAMETERS: 
* 
*   A7 = UNCHANGED IF SEGMENT LOADING IS SUCCESSFUL, ELSE 
*   A7 = -1 IF REQUEST ERROR, ELSE
*   A7 = -2 IF DISC I/O ERROR, ELSE 
*   A7 = -3 IF DISC NOT OPERABLE
* 
*   WHEN REQUESTED SEGMENT IS ALREADY IN CORE:
*   THE REQUEST WILL NOT GO THROUGH THE DISPATCHER AFTER
*   COMPLETION, THUS NO TASK SWITCHING WILL BE PERFORMED, 
*   IN PURPOSE TO MAKE THE REQUEST AS FAST AS POSSIBLE. 
* 
*   WHEN REQUESTED SEGMENT IS NOT IN CORE TLDSEG WILL 
*   ACTIVATE LDTASK WHICH WILL LOAD SEGMENT INTO CORE.
* 
* 
	EJECT			TLDSEG 
* 
*	CHECK VALIDITY OF SEGMENT NUMBER
* 
TLDSEG	EQU	*	LOAD SEGMENT 
	LD	A3,TTB:SP,A5	SEGTAB ADDRESS 
	LDR	A1,A7	CHECK IF SEGMENT NUMBER < 0
	RF(N)	TLDERR	REQUEST ERROR 
	CW	A1,SEG:NS,A3	CHECK IF SEGMENT NUMBER TOO BIG
	RF(NG)	TLDS00	OK 
* 
TLDERR	LDK	A6,/FF	INDICATE ERROR
	ABL	LKM030	BRANCH TO LKM REQUEST ERROR 
* 
*	GET SEGMENT BLOCK ADDRESS.
*	UPDATE RETURN ADDRESS 
* 
TLDS00	EQU	*
	SLL	A1,3	ADJUST FOR INDEXING IN SEGTAB 
	ADR	A1,A3	ADD SEGTAB ADDRESS 
	ADK	A2,2	UPDATE DISPATCH ADDRESS 
	LDR	A3,A5	GET TTAB ADDRESS 
* 
	IFT	DSKPAG=0 
	SUKL	A15,4	ADJUST STACKPOINTER 
	ST	A2,4,A15	SET DISPATCH ADDRESS ON STACK
	XIF
* 
	ADK	A7,0	CHECK SEGMENT NUMBER
	RF(NZ)	TLDS05	NOT SEGMENT 0
	ST	A7,TTB:SB,A3	RESET SEGMENT BLOCK ADDRESS
	LD	A1,SEG:DS,A1	GET LOGICAL ADDRESS OF SEGMENT 0 
* 
	IFT	DSKPAG=1 
	SUKL	A15,4	ADJUST STACKPOINTER 
	ST	A2,4,A15	SET DISPATCH ADDRESS ON STACK
	XIF
	RF	TLDS40
* 
	EJECT			TLDSEG 
* 
* 
TLDS05	EQU	*
	IFT	DSKPAG=1 
	ST	A1,TTB:SB,A3	UPDATE SEGMENT BLOCK ADDRESS 
	LDR*	A4,A1	GET SEGMENT STATUS
	RF(N)	TLDS10	SEGMENT LOADED IN CORE
	ST	A2,TTB:SA,A3
	CM	PRUN
* 
*	ACTIVATE LOAD TASK
* 
	CF	A15,QLTDSK	ACTIVATE LOAD TASK AT ENTRY LT:DSK 
	ABL	TDISP	GO TO DISPATCHER 
* 
TLDS10	EQU	*
	SUKL	A15,4	ADJUST STACKPOINTER 
	ST	A2,4,A15	SET DISPATCH ADDRESS ON STACK
	XIF
* 
TLDS15	EQU	*	ENTRY USED BY LDTASK 
	LD	A1,SEG:PB,A1	PAGE BLOCK ADDRESS 
	IFT	DSKPAG=1 
* 
*	REMOVE PAGE BLOCK FROM PAGE QUEUE 
* 
	LDR*	A2,A1	GET QUEUE LINK FORWARD
	RF(Z)	TLDS20	PAGE BLOCK NOT IN QUEUE 
	LD	A4,PAG:QB,A1	GET QUEUE LINK BACKWARD
	CMR	A1	RESET QUEUE LINK FORWARD OF REMOVED BLK 
	STR	A2,A4	UPDATE QUEUE LINKS 
	ST	A4,PAG:QB,A2
	XIF
* 
	EJECT			TLDSEG 
* 
*	GET PAGE ADDRESS OF REQUESTED SEGMENT 
* 
TLDS20	EQU	*	ENTRY USED BY LDTASK 
	LD	A1,PAG:PA,A1	GET PAGE ADDRESS 
* 
	IFT	MMUPAG=1 
	ECR	A2,A1
	ANK	A2,/FC 
* 
*	GET PAGE ENTRY/ENTRIES TO UPDATE IN MMU TABLE 
* 
	AD	A3,SCTMMP	POINT TO FIRST USED PAGE ENTRY
	LD	A4,SCTNPE	GET NUMBER OF PAGE ENTRIES
* 
*	UPDATE PAGE ENTRY/ENTRIES 
* 
TLDS25	EQU	*
	SCR	A2,A3	UPDATE PAGE ENTRY
	SUK	A4,1 
	RF(NP)	TLDS30	NO MORE PAGE ENTRIES 
	ADK	A3,2	POINT TO NEXT PAGE ENTRY
	ADK	A2,4	UPDATE PAGE ADDRESS 
	RB	TLDS25
* 
	EJECT			TLDSEG 
* 
* 
TLDS30	ANKL	A1,/300	COMPUTE CURRENT SEGMENT BASE
	SLL	A1,2 
	OR	A1,SCTLAP 
	TL	TTB:MT,A5	LOAD MMU REGISTERS
* 
TLDS40	EQU	*
	ES*	A1,TTB:CB,A5	UPDATE CURRENT SEGMENT BASE 
	XIF
* 
	IFT	MMUPAG=0 
TLDS40	EQU	*
	ST*	A1,TTB:CB,A5	UPDATE CURRENT SEGMENT BASE 
	XIF
* 
	IFT	CPU852=0 
	LDR	A6,A5
	ML	6,TTB:SA+2,A6	RESTORE A1-A6 
	RTN	A15	RETURN TO CALLING TASK 
	XIF
* 
	IFT	CPU852=1 
	LD	A1,TTB:SA+2,A5	RESTORE A1-A6
	LD	A2,TTB:SA+4,A5
	LD	A3,TTB:SA+6,A5
	LD	A4,TTB:SA+8,A5
	LD	A6,TTB:SA+12,A5 
	LD	A5,TTB:SA+10,A5 
	RTN	A15	RETURN TO CALLING TASK 
	XIF
* 
* 
* 
	END

Full view