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

⟦d13a86031⟧

    Length: 10514 (0x2912)
    Notes: pts_type(SC)
    Names: »TDISP.SC«

Derivation

└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
    └─⟦this⟧ »M:KMDV/TDISP.SC« 
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/TDISP.SC« 
└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
    └─⟦this⟧ »M:167D/TDISP.SC« 

PTS(SC)

	IDENT TDISP 	REL 8.2 78-09-15  870105040820

* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   TDISP = TERMINAL DISPATCHER 
* 
* 
* 
* 
* 
* 
**************************************************
* 
* 
* 
*   THIS IS THE TERMINAL DISPATCHER IN TOSS.
*   ENTRY POINT IS 'TDISP' WITH 8 REGISTERS ON A15 STACK. 
*   THE DISPATCHER CHECKS IF THERE IS A JOB IN DISPATCHER-
*   QUEUE WITH HIGHER PRIORITY THAN INTERRUPTED PROGRAM.
*   - IF SO THE QUEUED PROGRAM IS STARTED AND REGISTERS 
*     A1-A14 OF INTERRUPTED PROGRAM ARE SAVED ON A15 STACK. 
*   - IF NOT RETURN IS GIVEN TO INTERRUPTED PROGRAM VIA RETUR8. 
* 
*   AN ENTRYPOINT 'LKMDIS' IS ALSO INCLUDED IN THIS MODULE. 
*   THIS PART IS DISPATCHED AFTER EACH LKM-REQUEST.(NO REGISTERS
*   ON STACK) A CHECK IS MADE IF THERE IS A JOB IN DISPATCHER QUEUE 
*   WITH HIGHER PRIORITY THAN INTERRUPTED PROGRAM.
*   - IF QUEUED JOB IS STARTED
*   - IF NOT RETURN IS GIVEN TO INTERRUPTED PROGRAM VIA RETU14. 
* 
* 
*   AN OPTIONALY ENTRYPOINT 'DISIOE' IS ALSO PROVIDED FOR 
*   ERRORS IN I/O DRIVERS. BIT 0 IS SET IN A1 AND THE SUB-
*   ROUTINE 'TENDIO' IS CALLED BEFORE THE 'TDISP'-ENTRY 
*   IS ENTERED. 
*   ENTRY 'DISEND' ONLY CALLS 'TENDIO' BEFORE 'TDISP'-ENTRY.
	EJECT
* 
*********** 
* ENTRIES * 
*********** 
* 
	ENTRY	TDISP	DISPATCHER ENTRY 
	ENTRY	LKMDIS	DISPATCHED AFTER LKM
	ENTRY	DISIOE	I/O ERROR ENTRY 
	ENTRY	DISEND	END I/O AND DISPATCH
	ENTRY	DISQUE	POINTER TO FIRST PLACE IN DISPATCHER-QUEUE
	ENTRY	GBQUE	POINTER TO FIRST TTAB IN BUFFER QUEUE
	ENTRY	PRUN	TTAB-ADDRESS OF RUNING PROGRAM
	ENTRY	SRUN	RUNNING SEGMENT 
	ENTRY	RETU14	RESTORE REGISTER A14-A1 VIA A15 STACK 
	ENTRY	RETU13 
	ENTRY	RETU12 
	ENTRY	RETU11 
	ENTRY	RETU10 
	ENTRY	RETUR9 
	ENTRY	RETUR8 
	ENTRY	RETUR7 
	ENTRY	RETUR6 
	ENTRY	RETUR5 
	ENTRY	RETUR4 
	ENTRY	RETUR3 
	ENTRY	RETUR2 
	ENTRY	RETUR1 
	ENTRY	RTNA15 
	ENTRY	FREQUE 
	ENTRY	BLOCKL 
	EJECT
	ENTRY	DWTCHP	CHANNEL PARAMETER 
	ENTRY	DWTST	STATUS 
	ENTRY	DWTECB	ECB ADDRESS 
	ENTRY	DWTOR	ORDER
	ENTRY	DWTADR	POINTER TO ADDRESS-BLOCK
	ENTRY	DWTTAB	TTAB-ADDRESS
	ENTRY	DWTWAT	WAIT ACTIVATE INDICATOR 
	ENTRY	DWTTQ	TERMINAL QUEUE 
	ENTRY	DWTWA	WORK AREA
	ENTRY	DWTTDM	DM REQUEST TTAB ADDRESS 
	ENTRY	DWTVOL	VOLUME NAME 
	ENTRY	ECBBA,ECBRL,ECBEL
	ENTRY	ECBRC,ECBCW
	ENTRY	SACT	ACTIVE SEGMENT POINTER
	ENTRY	LRUNEW	DUMMY FOR MEMORY MANAGEMENT (OVERLAY) 
	EJECT
* 
************* 
* EXTERNALS * 
************* 
* 
*   DISPLACEMENT IN TTAB
* 
	EXTRN	TTB:SA	SAVE AREA 
	EXTRN	TTB:ST	STATUS
	EXTRN	TENDIO	END I/O 
	EXTRN	EXIT	PROGRAM EXIT
	EXTRN	BLOK:S	START OF BLOCK POOL 
	EXTRN	BLOCKE	BLOCK POOL LENGTH 
	EJECT

* 
******************************************
* 
*   DWT-DISPLACEMENT DECLARATIONS 
* 
***************************************** 
* 

DWTCHP	EQU	0	CHANNEL PARAMETER
DWTST	EQU	2	STSTUS
DWTECB	EQU	4	ECB-ADDRESS
DWTOR	EQU	6	ORDER 
DWTADR	EQU	8	ADDRESS BLOCK POINTER
DWTTAB	EQU	10	TTAB-ADDRESS
DWTWAT	EQU	12	WAIT/ACTIVATE INDICATOR 
DWTTQ	EQU	14	TERMINAL QUEUE 
DWTWA	EQU	16	WORK AREA
DWTTDM	EQU	16	DM RQEUEST TTAB ADDRESS 
DWTVOL	EQU	44	VOLUME NAME 
* 
******************************
* 
*    ECB-DISPLACEMENTS
* 
******************************
* 
ECBBA	EQU	/02 
ECBRL	EQU	/04 
ECBEL	EQU	/06 
ECBRC	EQU	/08 
ECBCW	EQU	/0A 
	EJECT
* 
*   D I S Q U E 
* 
*   POINTER TO FIRST PLACE IN DISPATCHER QUEUE
* 
DISQUE	EQU	*
	DATA	0 
* 
*   P R U N 
* 
*   TTAB-ADDRESS OF RUNING PROGRAM
* 
PRUN	EQU	*
	DATA	0 
* 
*   S R U N 
* 
*   RUNNING SEGMENT POINTER 
* 
SRUN	EQU	*
	DATA	0 
******************************* 
* 
*   S A C T 
* 
****************

SACT	DATA	0	ACTIVE SEGMENT POINTER

* 
*   L R U N E W 
* 
LRUNEW	EQU	*
* 
*   G B Q U E 
* 
*   POINTER TO FIRST TASK TABLE IN BUFFER QUEUE 
* 
GBQUE	EQU	* 
	DATA	0 
FREQUE	DATA	BLOK:S
BLOCKL	DATA	BLOCKE
* 
	EJECT
* 
*   D I S I O E 
* 
*   SET BIT 0 IN ECB RETURN CODE AND GO TO TDISP-ENTRY
* 
DISIOE	EQU	*
	LDKL	A1,/8000	SET RETURN CODE
* 
DISEND	EQU	*
	CF	A15,TENDIO
	EJECT
* 
* 
*   T D I S P 
* 
*   THIS IS THE DISPATCHER ENTRY
* 
TDISP	EQU	* 
	INH
	LD	A5,DISQUE 
	RF(Z)	RETUR8	NO QUEUE,RETURN 
	LD	A1,18,A15	LOAD PSW FROM STACK 
	SRL	A1,10	GET LEVEL
	CC	A1,TTB:ST+1,A5	AND COMPARE WITH QUEUED LEVEL
	RF(NG)	RETUR8	RETURN TO INTERRUPTED PROGRAM
	STR	A9,A15	SAVE A9-A14 ON STACK
	STR	A10,A15
	STR	A11,A15
	STR	A12,A15
	STR	A13,A15
	STR	A14,A15
	LD	A1,PRUN 
	STR	A1,A15	SAVE PRUN ON STACK
			AND DISPATCH QUEUED PROGRAM
	EJECT
* 
* 
*   DISPATCH PROGRAM FIRST IN DISPATCHER QUEUE
* 
*   A5 = TTAB-ADDRESS OF PROGRAM TO BE DISPATCHED 
* 
DIS100	EQU	*
	LDR*	A1,A5	REMOVE JOB FROM DISPATCHER QUEUE
	ST	A1,DISQUE 
	LD	A1,TTB:SA,A5	LOAD DISPATCH ADDRESS
	LD	A2,TTB:ST+1,A5	LOAD LEVEL 
	SLL	A2,10
	CWK	A2,/C000	MONITOR JOB ? 
	RF(E)	DIS200	YES 
	STR	A1,A15	STORE DISPATCH ADDRESS
	STR	A2,A15	AND LEVEL ON STACK
	LDR	A3,A5
	ADK	A3,14	SET ADDRESS TO A1 IN SAVE AREA 
	LDK	A1,14	SET COUNTER
DIS110	LDR*	A2,A3	SET UP A1-A14 ON STACK
	STR	A2,A15 
	ADK	A3,2 
	SUK	A1,1 
	RB(NZ)	DIS110
DIS120	ST	A5,PRUN	SET TABB-ADDRES FOR DISPATCHED PROG.
			START QUEUED PROGRAM (A1-A14 ON STACK) 
	EJECT
* 
* 
*   R E T U R 
* 
*    ENTRYPOINTS RETU14-RETUR1 :RELOAD REGISTERS FROM STACK 
*   AND RETURN VIA A15
* 
RETU14	LDR*	A14,A15 
RETU13	LDR*	A13,A15 
RETU12	LDR*	A12,A15 
RETU11	LDR*	A11,A15 
RETU10	LDR*	A10,A15 
RETUR9	LDR*	A9,A15
RETUR8	LDR*	A8,A15
RETUR7	LDR*	A7,A15
RETUR6	LDR*	A6,A15
RETUR5	LDR*	A5,A15
RETUR4	LDR*	A4,A15
RETUR3	LDR*	A3,A15
RETUR2	LDR*	A2,A15
	RF	RETUR1
RTNA15	STR	A1,A15 
RETUR1	LDK	A1,/40	BIT 9 
	ORS	A1,4,A15	SET PSW IN A15 STACK TO ENB 
	LDR*	A1,A15
	RTN	A15
	EJECT
* 
* 
*   MONITOR JOB DISPATCHING 
* 
DIS200	EQU	*
	LDKL	A3,LKMDIS	STORE ADDRESS TO BE DISPATCHED AFTER MONITOR
	STR	A3,A15	JOB ON STACK
	STR	A2,A15	STORE LEVEL 48 ON STACK 
	SUKL	A15,16	ADJUST STACK POINTER 
	STR	A1,A15	SET MONITOR JOB DISPATCH ADDRESS ON STACK 
	STR	A2,A15	SET LEVEL 
	LD	A1,TTB:SA+2,A5	LOAD PARAMETER IN A1 
	STR	A1,A15	AND SET ON STACK
	CF	A15,EXIT	DO EXIT ON MONITOR JOB AND 
	RB	RETUR1	THEN START IT
	EJECT
* 
* 
*   L K M D I S 
* 
*   THIS PART IS DISPATCHED AFTER EACH LKM-REQUEST
*   NO REGISTERS ON STACK 
* 
* 
LKMDIS	EQU	*
	INH
	LD	A5,DISQUE 
	RF(Z)	DIS010	NO QUEUE,RETURN 
	LD	A1,32,A15	LOAD PSW FROM STACK 
	SRL	A1,10	GET LEVEL
	CC	A1,TTB:ST+1,A5	AND COMPARE WITH QUEUED LEVEL
	RB(G)	DIS100	DISPATCH FROM QUEUE 
DIS010	LDR*	A5,A15
	RB	DIS120	RETURN TO INTERRUPTED PROGRAM
* 
* 
	END

Full view