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

⟦9503ec18b⟧

    Length: 17440 (0x4420)
    Notes: pts_type(SC)
    Names: »TPAGAL.SC«

Derivation

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

PTS(SC)

	IDENT TPAGAL 	REL 11.0 81-01-26 870105041100 

************************************************************* 
*                                                           * 
*                  PHILIPS TERMINAL SYSTEM  PTS             * 
*                                                           * 
*  TPAGAL - PAGE HANDLING PROCESSOR                         * 
*                                                           * 
*  THIS MODULE CONTAINS THE LKM PROCESSOR  USED IN TOSS     * 
*  MEMORY MANAGEMENT SYSTEMS FOR DYNAMICAL ALLOCATION OF    * 
*  LOGICAL CORE MEMORY.                                     * 
*                                                           * 
*  THE FOLLOWING REQUESTS ARE SUPPORTED:                    * 
*                                                           * 
*  	-GET PAGE                                          *
*  	-ATTACH PAGE                                       *
*  	-RELEASE PAGE                                      *
*                                                           * 
**************************************************************
	EJECT
* 
************* 
*  ENTRIES  * 
************* 
* 
	ENTRY	TPAGAL	COMMON ENTRY FOR:  -GET PAGE
	     	      	                   -ATTACH PAGE 
	     	      	                   -RELEASE PAGE
	EJECT
* 
*************** 
*  EXTERNALS  * 
*************** 
* 
	EXTRN	RELPA2	INSERT PAGE IN FREE QUEUE 
* 
	EXTRN	LKMQDI	QUEUE TASK AND DISPATCH 
	EXTRN	LKMRQE	PAGE ERROR ENTRY IN LRPINT
	EXTRN	TTB:AM	DISPLACEMENT TO ALLOCATION TABLE
	EXTRN	TTB:MT	DISPLACEMENT TO START OF MMU
	EXTRN	TTB:ID	DISPLACEMENT TO TASK IDENTIFICATION 
	EXTRN	TTB:SA	DISPLACEMENT TO TTAB SAVE AREA
	EXTRN	SCTPAG	POINTER TO START OF PAGE TABLE
	EXTRN	SCTNOP	NUMBER OF PAGES 
	EXTRN	PAGQUE	ADDRESS TO POINTER TO FREE QUEUE
	EXTRN	PAG:PA	DISPLACEMENT TO PAGE ADDRESS
	EXTRN	PAG:QB	DISPLACEMENT TO QUEUE LINK BACKWARD 
	EXTRN	PAG:SB	DISPLACEMENT TO SEGMENT BLOCK ADDRESS 
	EJECT
* 
*************** 
*  CONSTANTS  * 
*************** 
* 
LPGSIZ	EQU	/100	LOGICAL PAGE SIZE 
MAXATT	EQU	100	MAXIMAL NUMBER OF ATTACH REQUEST 
			ON SAME PAGE 
	EJECT
* 
*************************** 
*  CONDITIONAL ASSEMBLY   * 
*************************** 
* 
*  A PROGRAM VERSION USING TOSS MMU PAGING
*  IS OBTAINED BY SETTING MMUPAG EQU 1
* 
MMUPAG	EQU	0
* 
* 
*  A PROGRAM VERSION USING THE EXTENDED INSTRUCTION SET 
*  IS OBTAINED BY SETTING CPU852 EQU 0
* 
CPU852	EQU	0
* 
* 
	EJECT
* 
* 
****************************
*  FUNCTIONAL DESCRIPTION  *
****************************
* 
* 
* 	************** 
* 	*  GET PAGE  * 
* 	************** 
* 
*  REQUEST:	LKM 
*          	DATA  26
* 
*  REQUEST PARAMETERS:	A7=0 
* 
*  RETURN PARAMETERS:	A1=PAGE NUMBER
*                    	A7=UNCHANGED OR -1 IF NO PAGE IN QUEUE
*                    	A8=LOGICAL ADDRESS TO PAGE
* 
*  FUNCTION:  IF NUMBER OF FREE PAGES IS LESS THAN TWO, 
*             PAGE ERROR IS INDICATED AND THE REQUEST 
*             IS TERMINATED.
* 
	IFT MMUPAG=1 
*             THE MMU TABLE BIT MAP IS EXAMINED FOR FREE SUBENTRIES.
*             WHEN ONE IS FOUND, THE FREE QUEUE IS SCANNED FOR A FREE 
*             PAGE THAT FITS IN THE FREE SUBENTRY.
*             IF SUCH A PAGE IS FOUND, IT IS REMOVED FROM THE FREE
*             QUEUE AND INCLUDED IN THE USER AREA.
*             THE CORRESPONDING BIT IN THE MMU TABLE BIT MAP
*             IS SET AS TO INDICATE THAT THE SUBENTRY IS OCCUPIED.
*             IF NONE OF THE FREE PAGES FITS IN CURRENT SUBENTRY, 
*             THE NEXT FREE SUBENTRY IS TRIED. THIS WILL CONTINUE 
*             UNTIL ALL FREE SUBENTRIES HAS BEEN SCANNED. 
* 
	EJECT
*             IF NO PAGE IS FOUND THAT FITS IN ANY SUBENTRY,
*             OR IF THERE ARE NO FREE PAGES OR FREE SUBENTRIES
*             AT ALL, PAGE ERROR IS INDICATED AND THE REQUEST 
*             IS TERMINATED.
* 
	IFF	MMUPAG=1 
*             THE LAST PAGE IS TAKEN OUT FROM FREE QUEUE
* 
* 
*  FUNCTION:  THE LAST PAGE IN FREE QUEUE IS REMOVED. 
* 
*              IF THERE IS NO FREE PAGES, PAGE ERROR
*              IS INDICATED AND THE REQUEST IS TERMINATED.
* 
	XIF
	IFF	MMUPAG=1 
* 
*	THE LAST PAGE IS REMOVED FROM FREE QUEUE
	XIF
* 
*             THE CALLING TASKS ID IS STORED IN FIRST WORD
*             IN PAGE BLOCK.
*             THE LOGICAL ADDRESS TO PAGE IS STORED IN
*             SECOND WORD IN PAGE BLOCK 
*             IF A SEGMENT IS ATTACHED TO THE PAGE,BIT 0
*             (SEGMENT LOADED IN CORE) IN STATUS WORD IN
*             SEGMENT BLOCK IS CLEARED. 
*             THE FOURTH WORD IN PAGE BLOCK IS SUBSEQUENTLY 
*             USED AS COUNTER FOR NUMBER OF TASKS THE PAGE
*             IS ATTACHED TO. IT IS INITIALLY SET TO ONE. 
* 
	EJECT
* 
* 
*  	******************
*  	*  RELEASE PAGE  *
*  	******************
* 
* 
*  REQUEST:	LKM 
*          	DATA  26
* 
*  REQUEST PARAMETERS:	A7=1 
*                     	A1=PAGE NUMBER 
* 
*  RETURN PARAMETERS:	A7=UNCHANGED OR -1 IF ILLEGAL PAGE
*                    	A8=NUMBER OF REMAINING USERS
* 
* 
*  FUNCTION:  PAGE NUMBER IS CHECKED - IF NEGATIVE OR IF
*             GREATER THAN NUMBER OF AVALIABLE PAGES PAGE 
*             ERROR IS INDICATED AND THE REQUEST IS TERMINATED. 
* 
*             ATTACH COUNTER (FOURTH WORD IN PAGE BLOCK) IS 
*             DECREMENTED BY ONE. IF IT BECOMES ZERO THE PAGE 
*             THE PAGE IS INSERTED IN THE FREE QUEUE. 
* 
	IFT	MMUPAG=1 
*             THE CORRESPONDING BIT IN THE MMU TABLE BIT MAP
*             IS CLEARED. IF NO OTHER BITS CORRESPONDING TO 
*             THE SAME MMU ENTRY ARE SET, THE ADDRESS /FC00 
*             IS STORED IN THE MMU ENTRY. 
	XIF
	EJECT
* 
* 
*  	***************** 
*  	*  ATTACH PAGE  * 
*  	***************** 
* 
* 
*  REQUEST:	LKM 
*          	DATA  26
* 
*  REQUEST PARAMETERS:	A7=2 
*                     	A1=PAGE NUMBER 
* 
*  RETURN PARAMETERS:	A7=UNCHANGED OR -1 IF ILLEGAL PAGE
*                    	A8=LOGICAL ADDRESS TO PAGE
* 
* 
*  FUNCTION:  PAGE NUMBER IS CHECKED - IF NEGATIVE OR IF
*             GREATER THAN NUMBER OF AVALIABLE PAGES ERROR
*             IS INDICATED AND THE REQUEST IS TERMINATED. 
* 
	IFT	MMUPAG=1 
*             IF PAGE NUMBER IS OK, THE LOGICAL ADDRESS 
*             TO CORRESPONDING PAGE IS FETCHED. 
*             IF THE CORRESPONDING SUBENTRY IN THE MMU TABLE IS FREE, 
*             THE PAGE IS INCLUDED IN THE USER AREA ON THE SAME 
*             LOGICAL ADDRESS.. 
*             THE CORRESPONDING BIT IN THE MMU TABLE BIT MAP
*             IS SET TO INDICATE THAT THE SUBENTRY IS OCCUPIED. 
* 
*             IF THE SUBENTRY CORRESPONDING TO THE LOGICAL ADDRESS
*             IS OCCUPIED, PAGE ERROR IS INDICATED AND THE REQUEST
*             IS TERMINATED.
* 
	XIF
* 
*             THE ATTACH COUNTER (FOURTH WORD IN PAGE BLOCK)
*             IS INCREMENTED BY ONE.
* 
	EJECT
TPAGAL	EQU	*
	ADK	A7,0	GET PAGE REQUEST? 
	ABL(NZ)	RAPAG	NO!
* 
*  CHECK NUMBER OF FREE PAGES - IF NOT ENOUGTH, TERMINATE 
*  THE REQUEST WITH A8=0
* 
	LD	A6,PAGQUE+2	GET END OF FREE QUEUE 
	CW	A6,PAGQUE	SAME AS START OF FREE QUEUE?
	RF(E)	PAGERR	NOT ENOUGTH FREE PAGES
	EJECT
GETPAG	EQU	*
	IFF	MMUPAG=1 
	LDR	A1,A6	GET PAGE BLOCK ADDRESS 
	XIF
	IFT	MMUPAG=1 
	LDR	A3,A5	GET TTAB ADDRESS 
	LDR	A8,A3	SAVE 
	ADKL	A3,TTB:AM	START OF ALLOCATION TABLE 
	ADKL	A8,TTB:MT	END OF ALLOCATION TABLE 
	LDR	A10,A8	SAVE
GET:10	LDKL	A6,/8000	INIT OCCUPATION BIT
	LDR*	A4,A3	GET 16 ALLOCATION BITS
	XRKL	A4,/FFFF	ANY FREE SUBENTRY? 
	RF(NZ)	GET:40	YES
GET:20	ADKL	A10,8	INCREMENT MMU TABLE POINTER 
GET:25	ADK	A3,2	INCREMENT ALLOCATION TABLE POINTER
	CWR	A3,A8	END OF ALLOCATION TABLE? 
	RF(E)	PAGERR	YES!
	RB	GET:10
	EJECT
GET:40	LDR	A2,A4	GET ALLOCATION WORD
	ANKL	A2,/F000	ANY FREE SUBENTRY IN THIS ENTRY? 
	RF(NZ)	GET:60	YES
GET:50	SLL	A4,4	NEXT ENTRY
	ADKL	10,2	INCREMENT MMU ENTRY POINTER
	SRL	A6,4	ALL ENTRIES CHECKED?
	RB(E)	GET:25	YES 
	RB	GET:40
GET:60	LDR*	A13,A10	GET CONTENT IN MMU TABLE ENTRY
	ANKL	A13,/FC00	ISOLATE ADDRESS BITS
GET:70	ADK	A2,0	ENTRY FREE? 
	RF(N)	SFQFFP	YES 
	RB(Z)	GET:50 
GET:80	ADKL	A13,LPGSIZ	NEXT PAGE
	SLL	A2,1	CHECK IF NEXT SUBENTRY FREE 
	RB	GET:70
	EJECT
SFQFFP	EQU	*
* 
*  SEARCH FREE QUEUE FOR PAGE TO FIT IN CURRENT MMU SUBENTRY
* 
*  BIT SET IN A1 CORRESPOND TO CURRENT SUBENTRY 
*  A3 - POINTER TO CURRENT ENTRY IN MMU ALLOCATION TABLE
*  A10 - POINTER TO CURRENT MMU ENTRY 
*  A11 - PHYSICAL PAGE ADDRESS
*  A13 - LOGICAL PAGE ADDRESS 
* 
*  PAGQUE CONTAINS POINTER TO FIRST FREE PAGE BLOCK IN QUEUE
*  PAGQUE+2 CONTAINS POINTER TO LAST FREE PAGE BLOCK IN QUEUE 
* 
	LD	A1,PAGQUE+2	GET POINTER TO LAST PAGE
	IFT	MMUPAG=1 
SFQ:10	CWK	A1,PAGQUE	ANY MOORE PAGE IN QUEUE? 
	RB(E)	GET:80	NO! 
SFQ:20	LD	A11,PAG:PA,A1	GET PHYSICAL PAGE ADDRESS 
SFQ:25	CWK	A2,/F000	ALL SUBENTRIES FREE?
	RF(NE)	SFQ:30	NO!
	LDR	A13,A11	GET PHYSICAL PAGE ADDRESS
SFQ:30	LDR	A12,A13	GET PHYS. PAGE ADDRESS TO FIT IN SUBENTRY
	XRR	A12,A11	SAME PHYSICAL ADDRESS
	RF(Z)	SFQ:45	YES 
	LD	A1,PAG:QB,A1	GET BACKWARD POINTER 
	RB	SFQ:10	TRY NEXT PAGE
	XIF
	EJECT
SFQ:45	LD	A4,TTB:ID,A5	GET CALLING TASKS ID 
	LD	A12,PAG:QB,A1	GET BACKWARD POINTER
	LDR*	A9,A1	GET FORWARD POINTER 
	STR	A9,A12	CHANGE FORWARD POINTER
	ST	A12,PAG:QB,A9	CHANGE BACKWARD POINTER 
	STR	A4,A1	STORE TASK IDENTIFICATION
	LD	A4,PAG:SB,A1	ANY SEGMENT ATTACHED?
	RF(Z)	SFQ:55	NO! 
	LDKL	A2,/7FFF	INDICATE NOT LOADED IN CORE
	ANRS	A2,A4	STORE NEW STATUS
	CM	PAG:SB,A1	CLEAR SEGMENT BLOCK ADDRESS 
	EJECT
SFQ:55	EQU	*
	IFT	MMUPAG=1 
	ECR	A4,A13	GET PAGE ADDRESS
	ANK	A4,3	ISOLATE 1K-DISPLACEMENT 
SFQ:60	SUK	A4,1	MOORE DISPLACEMENT? 
	RF(N)	SFQ:70 
	SRL	A6,1 
	RB	SFQ:60
SFQ:70	ADK	A7,0	GET PAGE REQUEST? 
	RF(Z)	SFQ:80	YES!
	LDR	A4,A6	GET OCCUPATION BIT 
	ANR*	A4,A3	SUBENTRY ALREADY OCCUPIED?
	RF(NZ)	PAGERR	YES! 
SFQ:80	ORRS	A6,A3 
* 
*  INCLUDE PAGE IN USER AREA
* 
	LDR	A6,A13	GET LOGICAL PAGE ADDRESS
	ANKL	A6,/300	ISOLATE DISPLACEMENT
	SLA	A6,2	PHYSICAL DISPLACEMENT 
	LDR	A11,A6	SAVE
	ANKL	A13,/FC00	PHYSICAL 4K-PAGE ADDRESS
	STR	A13,A10	STORE IN MMU TABLE 
	EJECT
* 
*  COMPUTE LOGICAL PAGE ADDRESS 
* 
	SUR	A10,A8	BYTE DISPLACEMENT TO CURRENT ENTRY
	LDR	A6,A10	SAVE
	SLA	A6,11	MMU ENTRY IN BITS 0-3
	ADR	A6,A11	ADD DISPLACEMENT
	XIF
	IFF	MMUPAG=1 
	LD	A6,PAG:PA,A1
	XIF
	ST	A6,TTB:SA+16,A5	SAVE IN TTAB SAVE AREA
	XIF
	SUK	A7,2	ATTACH PAGE REQUEST?
	RF(E)	SFQ:90	YES!
	ST	A6,PAG:QB,A1	SAVE LOGICAL ADDRESS TO PAGE 
SFQ:90	IM	PAG:SB,A1	INCREMENT ATTACH COUNTER
* 
*  COMPUTE PAGE NUMBER
* 
RET:30	SU	A1,SCTPAG	COMPUTE DISPLACEMENT
	SRL	A1,3	CONVERT TO BLOCK NUMBER 
RET:40	ST	A1,TTB:SA+2,A5	SAVE 
RET:50	EQU	*
	EJECT
* 
*  RESTORE REGISTER A1-A14
* 
	ABL	LKMQDI	QUEUE TASK AND DISPATCH 
* 
*  ERROR ENTRY
* 
PAGERR	EQU	*
	ABL	LKMRQE	ERROR ENTRY INLRPINT
	EJECT
RAPAG	EQU	* 
	LDR	A4,A1	NEGATIVE PAGE NUMBER 
	RB(N)	PAGERR	YES! ERROR! 
	ADK	A4,1	ADJUST PAGE NUMBER FOR COMPARE
	CW	A4,SCTNOP	PAGE NUMBER > NUMBER OF PAGES?
	RB(G)	PAGERR	YES!
* 
*  GET PAGE BLOCK ADDRESS 
* 
	SLL	A1,3	MULTIPLY PAGE NUMBER BY EIGHT 
	AD	A1,SCTPAG	ADD ADDRESS START OF PAGE TABLE 
	LD	A11,PAG:PA,A1	GET PHYSICAL PAGE ADDRESS 
	LD	A4,PAG:SB,A1	GET ATTACH COUNTER 
	RB(NP)	PAGERR	NO PREVIOUS GET REQUEST ISSUED!
	SUK	A4,MAXATT	SEGMENT BLOCK ADDRESS? 
	RB(G)	PAGERR	YES;NO GET REQUEST ISSUED!
	CWK	A7,1	RELEASE PAGE REQUEST? 
	RF(E)	REL:00	YES!
	LD	A4,TTB:ID,A5	GET CALLING TASKS ID 
	CWR*	A4,A1	PAGE ALREADY ATTACHED?
	RB(E)	PAGERR	YES!
	IFF	MMUPAG=1 
	RB	SFQ:55
	XIF
	IFT	MMUPAG=1 
	EJECT
	LD	A4,PAG:QB,A1	GET LOGICAL ADDRESS
	LDR	A13,A4	SAVE
	SRL	A4,11	2*(BIT 0-3 OF LOGICAL ADDRESS) 
	LDR	A8,A5	GET TTAB ADDRESS 
	ADKL	A8,TTB:MT	START OF MMU TABLE
	LDR	A10,A8	SAVE
	ADR	A10,A4	SELECT MMU ENTRY
	XRR*	A11,A10	CHECK IF SAME PHYSICAL PAGE 
	ANKL	A11,/FC00	ISOLATE PHYSICAL PAGE ADDRESS 
	RB(NE)	PAGERR	NO;PAGE CANNOT BE ATTACHED!
ATT:10	LDR	A3,A4	GET BITS 0-1 
	ANK	A3,24	OF LOGICAL ADDRESS 
	SRL	A3,2	2*(BIT 0-1 OF LOGICAL ADDRESS)
	ADR	A3,A5	ADD TTAB ADDRESS 
	ADKL	A3,TTB:AM	SELECT BIT MAP ENTRY
	ANK	A4,6	GET BIT 2-3 OF LOGICAL ADDRESS
	SRL	A4,1 
	LDKL	A6,/8000	INIT OCCUPATION BIT
ATT:20	SUK	A4,1	SUBENTRY FOUND? 
	RB(N)	SFQ:55	YES!
	SRL	A6,4	NEXT SUBENTRY 
	RB	ATT:20
	EJECT
	XIF
REL:00	EQU	*
	IFT	MMUPAG=1 
	ECR	A4,A11	GET PAGE ADDRESS
	ANK	A4,3	ISOLATE DISPLACEMENT IN 4K-PAGE 
	LDR	A9,A5	GET TTAB ADDRESS 
	LDR	A10,A9	SAVE
	ADKL	A9,TTB:AM	START OF MMU ALLOCATION TABLE 
	ADKL	A10,TTB:MT	START OF MMU TABLE 
	LDR	A8,A10	SAVE
REL:10	LDKL	A2,/8000	INIT SUBENTRY OCCUPATION BIT 
	LDKL	A6,/F000	INIT NIBBLE MASK 
REL:20	LDR	A12,A11	GET PHYSICAL 4K-PAGE ADDRESS 
	ANKL	A12,/FC00	ISOLATE 4K-PAGE ADDRESS 
	XRR*	A12,A10	SAME PHYSICAL PAGE ADDRESS
	ANKL	A12,/FC00	ISOLATE ADDRESS BITS
	RF(E)	REL:40	YES 
REL:30	ADKL	A10,2	NEXT MMU TABLE ENTRY
	SRL	A2,4	NEXT MMU ALLOCATION TABLE ENTRY 
	SRL	A6,4 
	RB(NE)	REL:20	CHECK NEXT 
	ADKL	A9,2	NEXT WORD IN MMU ALLOCATION TABLE
	CWR	A9,A8	END OF MMU ALLOCATION TABLE? 
	RB(E)	PAGERR	YES:ERROR!
	RB	REL:10	CHECK NEXT FOUR ENTRIES
	EJECT
REL:40	SUK	A4,1	MOORE 1K-DISPLACEMENTS
	RF(N)	REL:50	NO:SUBENTRY FOUND 
	SRL	A2,1	NEXT SUBENTRY 
	RB	REL:40
REL:50	LDR	A3,A2	GET SUBENTRY OCCUPATION BIT
	ANR*	A3,A9	SUBENTRY OCCUPIED?
	RB(Z)	REL:30	NO: TRY NEXT ENTRY
	C1R	A2,A2	COMPLEMENT BITS
	ANRS	A2,A9	CLEAR OCCUPATION BIT
	ANR*	A6,A9	ANY OTHER SUBENTRY IN THIS ENTRY OCCUPIED?
	RF(NE)	REL:60	YES
	LDKL	A6,/FC00	ADDRESS TO LAST 4K-PAGE IN 256 KB MEMORY 
	STR	A6,A10	STORE IN FREE MMU TABLE ENTRY 
	XIF
REL:60	LD	A4,TTB:ID,A5	GET CALLING TASKS ID 
	CWR*	A4,A1	GET REQUEST ISSUED BY THIS TASK?
	RF(NE)	REL:70	NO!
	CMR	A1	EXTINGUISH TRACK TO THIS TASK 
REL:70	SUK	A7,2	A7:=-1
	ADS	A7,PAG:SB,A1	DECREMENT ATTACH COUNTER
	LD	A7,PAG:SB,A1	GET REMAINING NUMBER OF USERS
	ST	A7,TTB:SA+16,A5	SAVE RETURN-PARAMETER 
	RF(NZ)	REL:80
* 
*  INSERT PAGE BLOCK IN FREE QUEUE
* 
	LDR	A3,A1
	INH
	CF	A15,RELPA2	INSERT RELEASED PAGE 
	ENB
REL:80	ABL	RET:50 
	END

Full view