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

⟦78bad221e⟧

    Length: 11058 (0x2b32)
    Notes: pts_type(SC)
    Names: »TDISP.SC«

Derivation

└─⟦025d39960⟧ Bits:30009672 Philips computer tape "600133"
    └─⟦this⟧ »M:DSB/TDISP.SC« 
└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
    └─⟦this⟧ »MODMON/TDISP.SC« 
└─⟦245262b9f⟧ Bits:30009679 Philips computer tape "600220"
    └─⟦this⟧ »M:92LP/TDISP.SC« 
    └─⟦this⟧ »M:92NA/TDISP.SC« 
└─⟦38a30a456⟧ Bits:30009662 Philips computer tape "600104"
    └─⟦this⟧ »M:92OD/TDISP.SC« 
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
    └─⟦this⟧ »M:92LP/TDISP.SC« 
└─⟦6349b94c6⟧ Bits:30009684 Philips computer tape "600308"
    └─⟦this⟧ »M:92D1/TDISP.SC« 
└─⟦726a6c4ca⟧ Bits:30009685 Philips computer tape "600309"
    └─⟦this⟧ »M:92D2/TDISP.SC« 
└─⟦9ad21746d⟧ Bits:30009682 Philips computer tape "600304"
    └─⟦this⟧ »M:92NA/TDISP.SC« 
└─⟦a25d6defe⟧ Bits:30009676 Philips computer tape "600210"
    └─⟦this⟧ »M:92NA/TDISP.SC« 

PTS(SC)

	IDENT TDISP 	REL 9.2 79-11-16  870105040920

* 
* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   TDISP = TOSS DISPATCHER 
* 
* 
* 
* 
* 
* 
**************************************************
* 
* 
*   THIS IS THE TASK DISPATCHER IN TOSS.
*   ENTRY POINT IS 'TDISP' WITH 8 REGISTERS ON A15 STACK. 
*   THE DISPATCHER CHECKS IF THERE IS A TASK IN DISPATCHER
*   QUEUE WITH HIGHER PRIORITY THAN INTERRUPTED PROGRAM.
*   - IF SO, THE RUNNING TASK IS QUEUED AND THE HIGHER
*     PRIORITY TASK IS STARTED. 
*   - IF NOT, RETURN IS GIVEN TO INTERRUPTED PROGRAM. 
* 
*   ENTRY 'DISEND' CALLS TENDIO BEFORE TDSIP
* 
*   ENTRY 'DISIOE' SETS BIT 0 IN A1 BEFORE DISEND.
* 
*   ENTRY 'MEXIT' EXITS A MONITOR TASK BEFORE TDISP.
* 
*   ENTRY 'RETUR8' LOADS 8 REGISTERS FROM A15 STACK AND RETURNS.
* 
	EJECT			TDISP
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	TDISP	DISPATCHER ENTRY 
	ENTRY	MEXIT	EXIT FOR MONITOR TASKS 
	ENTRY	DISIOE	I/O ERROR ENTRY 
	ENTRY	DISEND	END I/O AND DISPATCH
	ENTRY	DISQUE	POINTER TO FIRST PLACE IN DISP. QUEUE 
	ENTRY	PRUN	TTAB ADDRESS OF RUNNING PROGRAM 
	ENTRY	RETUR8	LOAD 8 REGISTERS AND RETURN 
	EJECT			TDISP
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	TTB:SA	SAVE AREA 
	EXTRN	TTB:ST	STATUS
	EXTRN	TTB:PW	PROGRAM STATUS WORD 
	EXTRN	TTB:MT	MMUTAB
	EXTRN	TTB:SB	SEGMENT BLOCK ADDRESS 
	EXTRN	SEG:PB	SEGMENT PAGE BLOCK ADDRESS
	EXTRN	PAG:PA	PAGE ADDRESS
	EXTRN	PAG:QB	PAGE QUEUE BACKWARD POINTER 
	EXTRN	T:ACSB	CURRENT SEGMENT BASE IN T:A 
	EXTRN	TENDIO	END I/O 
	EXTRN	EXIT	PROGRAM EXIT
	EXTRN	QLTDSK	ACTIVATE LDTASK AT ENTRY LT:DSK 
	EXTRN	SCTLAP	LOGICAL ADDRESS OF CODE PAGE
	EXTRN	SCTMMP	MMU TABLE PAGE ENTRY
	EXTRN	SCTNPE	NUMBER OF PAGE ENTRIES
	EJECT			TDISP
* 
* 
***************************************** 
* 
*	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
* 
* 
*	A PROGRAM VERSION PREVENTING SEGMENTS TO MOVE WHEN HAVING 
*	APPLICATION TASKS AT DIFFERENT PRIORITY LEVELS USING THE
*	SAME SEGMENT IS OBTAINED BY SETTING DIFPRI EQU 1. 
* 
DIFPRI	EQU	0
* 
* 
*	A PROGRAM VERSION USING TOSS ASSEMBLER OVERLAY
*	IS OBTAINED BY SETTING ASSOLY EQU 1 
* 
ASSOLY	EQU	0
* 
	EJECT			TDISP
* 
*   D I S Q U E 
* 
*   POINTER TO FIRST PLACE IN DISPATCHER QUEUE
* 
DISQUE	DATA	0 
* 
*   P R U N 
* 
*   TTAB ADDRESS OF RUNNING PROGRAM 
* 
PRUN	DATA	0 
	EJECT			TDISP

* 
*   R E T U R 8 
* 
*   LOAD 8 REGISTERS FROM STACK AND RETURN
* 
RETUR8	EQU	*

	IFT	CPU852=0 
	MLR	8,A15
	XIF

	IFT	CPU852=1 
	LDR*	A8,A15
	LDR*	A7,A15
	LDR*	A6,A15
	LDR*	A5,A15
	LDR*	A4,A15
	LDR*	A3,A15
	LDR*	A2,A15
	LDR*	A1,A15
	XIF

	RTN	A15
	EJECT			TDISP

* 
*   M E X I T 
* 
*   DO EXIT ON MONITOR TASK AND GO TO TDISP 
* 
MEXIT	INH 
	LD	A5,PRUN 
	CF	A15,EXIT
	CM	PRUN
	RF	TDISP 

* 
*   D I S I O E 
* 
*   SET BIT 0 IN ECB RETURN CODE AND GO TO DISEND 
* 
DISIOE	LDKL	A1,/8000

* 
*   D I S E N D 
* 
*   CALL TENDIO AND GO TO TDISP 
* 
DISEND	CF	A15,TENDIO
	EJECT			TDISP
* 
*   T D I S P 
* 
*   THIS IS THE DISPATCHER ENTRY
* 
TDISP	INH	
	LC	A1,18,A15	LOAD PSW FROM STACK 
	ANK	A1,/FC 
	SUK	A1,/C4 
	RB(L)	RETUR8	LEVEL < 49, MONITOR ROUTINE 
* 
*	CHECK DISPATCHER QUEUE
* 
TDISCQ	LDKL	A2,DISQUE 
	LDR*	A3,A2 
	RB(Z)	RETUR8	QUEUE EMPTY 

	LD	A5,PRUN 
	RF(Z)	TDCQ10	IDLE LOOP RUNNING 
	LD	A4,TTB:ST+1,A5	COMPARE RUNNING
	CC	A4,TTB:ST+1,A3	AND QUEUED TASK'S PRIORITIES 
	RB(NG)	RETUR8	RUNNING HIGHER OR SAME 
TDCQ10	LDR*	A6,A3	QUEUED HIGHER 
	STR	A6,A2	REMOVE IT FROM QUEUE 

	IFT	DSKPAG=1 
	LD	A1,TTB:SB,A3	GET SEGMENT BLOCK ADDR 
	RF(Z)	TDISSW	NONE
	LDR*	A7,A1 
	RF(N)	TDISSW	SEGMENT LOADED
	CF	A15,QLTDSK	SEGM NOT LOADED QUEUE LOAD TASK
	RB	TDISCQ	TAKE NEXT TASK INSTEAD 
	XIF
	EJECT			TDISP
* 
*	SWITCH TASKS
* 
TDISSW	ST	A3,PRUN	SET NEW RUNNING TASK
	ADK	A5,0	CHECK OLD RUNNING TASK
	RF(Z)	TDISST	IDLE LOOP 

	ADK	A6,0	QUEUE OLD TASK FIRST ON PRIORITY
	RF(Z)	TDSW20	EMPTY QUEUE 
TDSW10	CC	A4,TTB:ST+1,A6	COMPARE PRIORITIES 
	RF(NG)	TDSW20	SAME OR LOWER PRIORITY FOUND 
	LDR	A2,A6
	LDR*	A6,A2 
	RB(NZ)	TDSW10	STILL SOMETHING IN QUEUE 

TDSW20	STR	A5,A2	PUT IN QUEUE 
	STR	A6,A5
	ST	A14,TTB:SA+28,A5	SAVE REGISTERS 
	LDR	A14,A5 

	IFT	CPU852=0 
	MLR	8,A15
	MS	13,TTB:SA+2,A14 
	MLR	2,A15

	XIF
	IFT	CPU852=1 
	LDR*	A8,A15
	LDR*	A7,A15
	LDR*	A6,A15
	LDR*	A5,A15
	LDR*	A4,A15
	LDR*	A3,A15
	LDR*	A2,A15
	LDR*	A1,A15
	ST	A13,TTB:SA+26,A14 
	ST	A12,TTB:SA+24,A14 
	ST	A11,TTB:SA+22,A14 
	ST	A10,TTB:SA+20,A14 
	ST	A9,TTB:SA+18,A14
	ST	A8,TTB:SA+16,A14
	ST	A7,TTB:SA+14,A14
	ST	A6,TTB:SA+12,A14
	ST	A5,TTB:SA+10,A14
	ST	A4,TTB:SA+8,A14 
	ST	A3,TTB:SA+6,A14 
	ST	A2,TTB:SA+4,A14 
	ST	A1,TTB:SA+2,A14 
	LDR*	A2,A15
	LDR*	A1,A15
	XIF

	ST	A1,TTB:SA,A14	AND PC
	ST	A2,TTB:PW,A14	AND PSW IN TTAB 
	IFT	DSKPAG+DIFPRI=2

	LD	A1,TTB:SB,A14	GET SEGM BLOCK ADDR 
	RF(Z)	TDISST	NONE
	LDR*	A2,A1	GET SEGM STATUS 
	LDKL	A3,/1000
	TM	A2,A3	CHECK IF SEGM USED BY INT TASK
	RF(NZ)	TDISST	YES
	ORRS	A3,A1	SET SEGM USED BY INT TASK 
	LD	A3,SEG:PB,A1
	ST	A14,PAG:QB,A3	AND THAT IT WAS THIS TASK 
	XIF
	EJECT			TDISP
* 
*	START NEW TASK
* 
TDISST	LD	A14,PRUN
	IFT	DSKPAG=1 

	LD	A1,TTB:SB,A14	GET SEGM BLOCK ADDR 
	RF(Z)	TDST30	NONE
	LD	A4,SEG:PB,A1	GET PAGE BLOCK ADDR
	IFT	DIFPRI=0 

	LDR*	A2,A4	CHECK IF PAGE IN PAGQUE 
	RF(Z)	TDST20	NOT IN QUEUE

	XIF
	IFT	DSKPAG+DIFPRI=2

	LDR*	A2,A4	CHECK IF PAGE IN PAGQUE 
	RF(NZ)	TDST10	YES
	LDR*	A3,A1	NO GET SEGM STATUS
	ANKL	A3,/1000	CHECK IF SEGM USED BY INT TASK 
	RF(Z)	TDST20	NO
	CW	A14,PAG:QB,A4	YES CHECK IF IT WAS THIS TASK 
	RF(NE)	TDST20	NO 
	XRRS	A3,A1	YES RESET USED BY INT TASK
	RF	TDST20

	XIF
	IFT	DSKPAG=1 

TDST10	LD	A3,PAG:QB,A4	TAKE PAGE OUT OF QUEUE 
	STR	A2,A3
	ST	A3,PAG:QB,A2
	CMR	A4 

TDST20	LD	A1,PAG:PA,A4	GET PAGE ADDRESS 
	LD	A5,TTB:SA+26,A14	AND T:A ADDRESS

	IFT	MMUPAG=1 

	ECR	A2,A1	CALC PHYS PAGE ADDR
	ANK	A2,/FC 
	LDR	A3,A14	AND MMU PAGE ENTRY IN TTAB
	AD	A3,SCTMMP 
	LD	A4,SCTNPE	AND GET NUMBER OF ENTRIES 

TDST22	SCR	A2,A3	UPDATE MMU TABLE JUST IN CASE
	SUK	A4,1 
	RF(Z)	TDST25 
	ADK	A2,4 
	ADK	A3,2 
	RB	TDST22

TDST25	EQU	*
	IFT	ASSOLY=0 
	TL	TTB:MT,A14	LOAD MMU TABLE 
	SLL	A1,2	UPDATE BASE IN T:A ALSO JUST IN CASE
	ANKL	A1,/FFE 
	OR	A1,SCTLAP 
	ES	A1,T:ACSB,A5
	RF	TDST35

	XIF
	IFT	DSKPAG-MMUPAG=1
	ST	A1,T:ACSB,A5	UPDATE BASE IN T:A JUST IN CASE
	XIF

TDST30	EQU	*
	IFT	MMUPAG=1 
	TL	TTB:MT,A14	LOAD MMU TABLE 
	XIF

TDST35	LD	A1,TTB:SA,A14	GET NEW PC
	LD	A2,TTB:PW,A14	AND PSW 
	IFT	CPU852=0 

	MSR	2,A15	PUT PC AND PSW ON STACK
	ML	14,TTB:SA+2,A14	LOAD REGISTERS

	XIF
	IFT	CPU852=1 

	STR	A1,A15	PUT PC
	STR	A2,A15	AND PSW ON STACK
	LD	A1,TTB:SA+2,A14	LOAD REGISTERS
	LD	A2,TTB:SA+4,A14 
	LD	A3,TTB:SA+6,A14 
	LD	A4,TTB:SA+8,A14 
	LD	A5,TTB:SA+10,A14
	LD	A6,TTB:SA+12,A14
	LD	A7,TTB:SA+14,A14
	LD	A8,TTB:SA+16,A14
	LD	A9,TTB:SA+18,A14
	LD	A10,TTB:SA+20,A14 
	LD	A11,TTB:SA+22,A14 
	LD	A12,TTB:SA+24,A14 
	LD	A13,TTB:SA+26,A14 
	LD	A14,TTB:SA+28,A14 

	XIF

	RTN	A15	START THE TASK 

	END

Full view