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

⟦567f548d4⟧

    Length: 14210 (0x3782)
    Notes: pts_type(SC)
    Names: »DRIC01.SC«

Derivation

└─⟦7a1dcd5a9⟧ Bits:30009673 Philips computer tape "600134"
    └─⟦this⟧ »PTMON/DRIC01.SC« 
└─⟦928b1fd3e⟧ Bits:30009671 Philips computer tape "600131"
    └─⟦this⟧ »PTMON/DRIC01.SC« 

PTS(SC)

	IDENT DRIC01 	REL 11.0 81-04-02 870105041100 

			=1, ADDR.WR.REQ.IN WRONG QUEUE 
			=1, REL 11.0 81-01-26
* 
* 
**********************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS              *
* 
*   DRIC01 = INTERTASK COMMUNICATION DRIVER  *
* 
* 
* 
* 
* 
* 
**********************************************
* 
*   THIS MODULE HANDLES THE INTERTASK COMMUNICATION 
* 
	EJECT			DRIC01 
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	ITAD	ADDRESS BLOCK 
	ENTRY	IT:BUF	INTERTASK DRIVER BUFFER (MMU) 
	EJECT			DRIC01 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	TENDIO	ENDIO 
	EXTRN	DISIOE	REQUEST ERROR 
	EXTRN	DISEND	TENDIO AND DISPATCH 
	EXTRN	DWTST	DWT STATUS 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTADR	DRIVER ADDRESS BLOCK
	EXTRN	DWTTAB	DWT TTAB ADDRESS
	EXTRN	BUFLEN	DRIVER BUFFER LENGTH
	EXTRN	SETIMP	TIMER 
	EXTRN	FNDTID	FIND TTAB ADDRESS FROM TID
	EXTRN	TTB:ID	TASK IDENTIFICATION 
	EXTRN	TTB:ST	TASK STATUS 
	EXTRN	TTB:TD	TERMINAL DEVICES
	EXTRN	IHRTN	RTN A15 WITHOUT ENABLING INTERRUPTS
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFFECTIVE LENGTH 
	EXTRN	ECBCW	ECB CONTROL WORD 
	EJECT			DRIC01			TOSSIO
* 
* 
***************************************** 
* 
*	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
* 
*	MMU BUFFER SIZE 
* 
X:A	EQU	50
DVBLEN	EQU	999
* 
*	INTERTASK DEVICE INDEX
* 
DEVIND	EQU	8
* 
	EJECT			DRIC01 
* 
* 
********************* 
* DWT DISPLACEMENTS * 
********************* 
* 
* 
DWTDRD	EQU	/10	START OF DRIVER DEFINED PART 
* 
	IFT	MMUPAG=0 
START	EQU	DWTDRD
	XIF
* 
	IFT	MMUPAG=1 
START	EQU	DWTDRD+4
	XIF
* 
DWTTP	EQU	START+/00	TIMER POINTER 
DWTIME	EQU	START+/02	TIME 
DWTANC	EQU	START+/04	POINTER TO FIRST DWT IN QUEUE
DWTQUE	EQU	START+/06	QUEUE ANCHOR ADDRESS 
* 
	EJECT			DRIC01 
* 
* 
***************** 
* ADDRESS BLOCK * 
***************** 
* 
* 
	DATA	DVBLEN+DVBLEN	MMU BUFFER SIZE 
	DATA	DEVIND	INTERTASK DEVICE INDEX 
ITAD	DATA	ICAD	ACTIVATION ADDRESS 
	DATA	ITABRT	ABORT ADDRESS
* 
* 
RD:QUE	DATA	0	QUEUE ANCHOR NOT-ADDRESSED READ REQ.
WR:QUE	DATA	0	QUEUE ANCHOR NOT-ADDRESSED WRITE REQ. 
* 
*	INTERTASK DRIVER BUFFER (MMU) 
* 
IT:BUF	EQU	*
	IFT	MMUPAG=1 
 	RES	DVBLEN+1	MMU BUFFER 
	XIF
* 
	EJECT			DRIC01 
* 
*	A C T I V A T I O N 
* 
*	ORDERS: 
* 
*	/02  READ 
*	/06  WRITE
*	/39  SET TIMEOUT
* 
*	ENTRY PARAMETERS: 
* 
*	A5 = STACK BASE 2 IN DWT
*	A6 = DWT ADDRESS
*	A7 = ORDER CODE 
*	A8 = ECB ADDRESS
*	A12= ADDRESS TO DRIVER ADDRESS BLOCK
* 
ICAD	EQU	*
	LDR	A1,A7	ORDER CODE 
	LD	A7,ECBCW,A8	TASK ID OR TIME VALUE 
	SUK	A1,/02 
	RF(Z)	READ	READ REQUEST
	SUK	A1,/06-/02 
	RF(Z)	WRITE	WRITE REQUEST
	SUK	A1,/39-/06 
	RF(NZ)	DIS:OE	REQUEST ERROR
* 
	EJECT			DRIC01 
* 
*   	S E T   T I M E O U T
* 
	ST	A7,DWTIME,A6
	RF	END:IO
* 
*	REQUEST ERROR EXIT
* 
DIS:OE	ABL	DISIOE	REQUEST ERROR 
* 
	EJECT			DRIC01 
* 
*	READ REQUEST ENTRY
* 
READ	EQU	*	CHECK IF ADDRESSED REQUEST OR NOT
	ADK	A7,0	CHECK ADDRESS MODE
	ABL(Z)	RD:NAD	NOT-ADDRESSED READ REQUEST 
* 
*	WRITE REQUEST ENTRY 
* 
WRITE	EQU	*	CHECK IF ADDRESSED WRITE REQUEST OR NOT 
	ADK	A7,0	CHECK ADDRESS MODE
	RF(Z)	WR:NAD	NOT-ADDRESSED WRITE REQUEST 
* 
	EJECT			DRIC01 
* 
*	R E A D, A D D R E S S E D
* 
*	W R I T E, A D D R E S S E D
* 
*   	FIND TTAB OF ADDRESSED TASK
* 
	CF	A15,FNDTID	TTAB ADDRESS TO A2 
	ADK	A2,0	SET CR
	RB(Z)	DIS:OE	NOT FOUND 
	ADKL	A2,TTB:TD	ADDRESS TO TERMINAL DEVICE TABLE
	LDR*	A1,A2	TABLE LENGTH
	LDR	A7,A12	DRIVER ADDRESS BLOCK
	XRK	A7,1	IF INPUT, POINT TO OUTPUT BLOCK AND V.V.
* 
	EJECT			DRIC01 
* 
*   	FIND DWT OF ADDRESSED TASK 
* 
ITC:05	ADK	A2,4	ADDRESS TO NEXT DWT ADDRESS 
	SUK	A1,4 
	RB(N)	DIS:OE	NOT FOUND 
* 
	LDR*	A4,A2	DWT ADDRESS 
	CW	A7,DWTADR,A4	SEARCHED DWT 
	RB(NE)	ITC:05	NO, TRY NEXT 
* 
	LDR	A2,A4
	LD	A1,DWTST,A2	ANY REQUEST 
	RF(N)	ITC:50	NO
* 
	LD	A1,DWTQUE,A2	QUEUE ANCHOR ADDRESS 
	CWR	A1,A6	CHECK QUEUE ANCHOR 
	RF(E)	ITC:10	REQUEST ISSUED FOR THIS TASK
* 
	ANK	A7,1 
	RF(Z)	ITC:45	READ
	CWK	A1,RD:QUE
	RF(NE)	ITC:50	NO READ REQUEST IN READ QUEUE	=1 
* 
*   	ABORT TIMER IF ANY 
* 
ITC:10	CF	A15,ABREQ	ABORT TIMER AND REMOVE DWT FROM QUEUE 
	ANK	A7,1 
	RF(Z)	RD:N05	READ
* 
	EJECT			DRIC01 
* 
*   	MOVE BUFFER
* 
ITC:15	EQU	*
	LD	A8,DWTECB,A6	SENDING ECB
	LDK	A1,0 
	LD	A9,DWTECB,A2	RECEIVING ECB
	LD	A3,ECBRL,A8	SENDING REQUESTED LENGTH
	RB(NP)	DIS:OE
	CW	A3,ECBRL,A9 
	RF(NG)	ITC:20
	LDK	A1,8	RETURN CODE (INCORRECT LENGTH)
	LD	A3,ECBRL,A9 
	RB(NP)	DIS:OE
* 
ITC:20	EQU	*
	IFT	MMUPAG=1 
	LDKL	A4,ITAD	ADDRESS TO DRIVER ADDRESS BLOCK 
	CW	A3,BUFLEN,A4	CHECK MMU BUFFER SIZE
	RF(NG)	ITC:25	MMU BUFFER LARGE ENOUGH
	LDKL	A1,/8008	NO, INDICATE ERROR 
	RF	END:IO	END REQUEST VIA TENDIO AND TDISP 
* 
ITC:25	EQU	*
	XIF
* 

	ST	A3,ECBEL,A8	EFFECTIVE LENGTH
	ST	A3,ECBEL,A9	EFFECTIVE LENGTH
* 
	IFT	MMUPAG=0 
	ENB
	LD	A4,ECBBA,A8	SENDING BUFFER ADDRESS
	LD	A7,ECBBA,A9	RECEIVING BUFFER ADDRESS
* 
ITC:30	LCR	A5,A4	MOVE ONE CHARACTER 
	SCR	A5,A7
	ADK	A4,1 
	ADK	A7,1 
	SUK	A3,1 
	RB(P)	ITC:30 
	XIF
* 
	EJECT			DRIC01 
* 
*	TRANSFER SENDING TASK ID TO RECEIVING ECB AND VICE VERSA
* 
	LD	A3,DWTTAB,A2	TTAB RECEIVING TASK
	LD	A3,TTB:ID,A3	TASK ID
	ST	A3,ECBCW,A8	RETURN TASK ID TO SENDING TASK
	LD	A3,DWTTAB,A6	TTAB SENDING TASK
	LD	A3,TTB:ID,A3	TASK ID
	ST	A3,ECBCW,A9	RETURN TASK ID TO RECEIVING TASK
	CF	A15,TENDIO	END WRITE
	LDR	A6,A2
* 
	IFT	MMUPAG=1 
	LD	A3,ECBBA,A8	DRIVER BUFFER ADDRESS (EVEN/UNEVEN) 
	ST	A3,ECBBA,A9	SET IN OTHER DWT
	XIF
* 
END:IO	EQU	*
	ABL	DISEND	END REQUEST VIA TENDIO AND TDISP
* 
ITC:35	EQU	*
	CMR	A6	RESET QUEUE LINK
* 
ITC:40	EQU	*
	LDK	A1,/40	RETURN CODE 
	RB	END:IO
* 
	EJECT			DRIC01 
* 
* 
ITC:45	EQU	*
	CWK	A1,WR:QUE
	RB(E)	ITC:10	COMPLEMENTARY REQUEST 
* 
ITC:50	LDK	A7,0	INDICATE ADDRESSED REQUEST
* 
*	CHECK TIMER VALUE AND SET TIMER IF REQUESTED
* 
ITC:60	EQU	*
	LD	A3,DWTIME,A6	TIME 
	RB(Z)	ITC:35	TIME IS ZERO, RETURN
	RF(N)	ITC:70	NO TIMING REQUESTED 
	LDR	A1,A6	PARAM = DWTOUT IF WRITE, ELSE DWTIN
	LDK	A4,DWTTP 
	ADR	A4,A6	TIMER POINTER
	ST	A3,TIME 
	CF	A15,SETIMP	SET TIMER
	DATA	TIMOUT	TIMEOUT ADDRESS
TIME	DATA	0 
* 
	EJECT			DRIC01 
* 
*   	INSERT IN QUEUE WITHIN PRIORITY
* 
ITC:70	EQU	*
	ST	A2,DWTQUE,A6	STORE QUEUE ANCHOR IN DWT
	LD	A5,DWTTAB,A6	TTAB ADDRESS 
	LD	A1,TTB:ST+1,A5	LEVEL
	SUK	A7,1 
	RF(Z)	ITC:80	NOT-ADDRESSED REQUEST 
	ADK	A2,DWTANC	POINT TO ADDRESS OF FIRST DWT IN QUEUE 
* 
ITC:80	LDR	A4,A2	SAVE 
	LDR*	A2,A2	NEXT IN QUEUE 
	RF(Z)	ITC:90	END FOUND 
	LD	A5,DWTTAB,A2	TTAB ADDRESS 
	CC	A1,TTB:ST+1,A5	COMPARE LEVELS 
	RB(NL)	ITC:80
* 
ITC:90	STR	A2,A6	INSERT IN QUEUE
	STR	A6,A4
	ABL	TDISP	GO TO DISPATCHER 
* 
	EJECT			DRIC01 
* 
*	W R I T E, N O T  A D D R E S S E D 
* 
WR:NAD	EQU	*	WRITE, NOT-ADDRESSED 
	LD	A2,DWTANC,A6	CHECK QUEUE OF ADDRESSED READ REQUESTS 
	RF(NZ)	WR:N10	ANYTHING IN QUEUE
	LD	A2,RD:QUE	CHECK QUEUE OF NOT-ADDRESSED READ REQ.
	RF(Z)	WR:N20	QUEUE EMPTY 
	LDR*	A3,A2	NO, REMOVE FROM QUEUE 
	ST	A3,RD:QUE	UPDATE QUEUE ANCHOR 
* 
WR:N05	CF	A15,ABTIM2	ABORT TIMER IF ANY 
	RB	ITC:15
* 
WR:N10	LDR*	A3,A2	REMOVE FROM QUEUE 
	ST	A3,DWTANC,A6	UPDATE QUEUE ANCHOR
	RB	WR:N05
* 
WR:N20	LDKL	A2,WR:QUE	WR:QUE ADDRESS
* 
WR:N30	EQU	*
	LDK	A7,1	INDICATE NOT-ADDRESSED REQUEST
	RB	ITC:60	INSERT IN QUEUE
* 
	EJECT			DRIC01 
* 
*	R E A D, N O T  A D D R E S S E D 
* 
RD:NAD	EQU	*	READ, NOT-ADDRESSED
	LD	A2,DWTANC,A6	CHECK QUEUE OF ADDRESSED WRITE REQUESTS
	RF(NZ)	RD:N10	ANYTHING IN QUEUE
	LD	A2,WR:QUE	CHECK QUEUE OF NOT-ADDRESSED WRITE REQ. 
	RF(Z)	RD:N20	QUEUE EMPTY 
	LDR*	A3,A2	NO, REMOVE FROM QUEUE 
	ST	A3,WR:QUE	UPDATE QUEUE ANCHOR 
* 
RD:N00	EQU	*
	CF	A15,ABTIM2	ABORT TIMER IF ANY 
* 
RD:N05	EQU	*
	XRR	A2,A6	EXCHANGE A2 AND A6 
	XRR	A6,A2
	XRR	A2,A6
	RB	ITC:15
* 
RD:N10	LDR*	A3,A2	REMOVE FROM QUEUE 
	ST	A3,DWTANC,A6	UPDATE QUEUE ANCHOR
	RB	RD:N00
* 
RD:N20	LDKL	A2,RD:QUE	RD:QUE ADDRESS
	RB	WR:N30	INSERT IN QUEUE
* 
	EJECT			DRIC01 
* 
*	T I M E O U T 
* 
*  THIS ENTRY IS CALLED AT TIMEOUT. IT WILL 
*  RESET TIMER POINTER AND REMOVE DWT FROM QUEUE
*  BEFORE TERMINATING THE REQUEST VIA TENDIO. 
* 
*  INPUT:  A1 = DWT ADDRESS 
*          A2 = ADDRESS TO 2ND TIMER BLOCK
* 
TIMOUT	EQU	*
	CM*	0,A2	RESET TIMER POINTER 
	LDR	A2,A1
	CF	A15,ABR:10	REMOVE DWT FROM QUEUE
	LDR	A6,A2	DWT ADDRESS
	RB	ITC:40	END REQUEST VIA TENDIO AND TDISP 
* 
	EJECT			DRIC01 
* 
*	I T A B R T 
* 
*  THIS SUBROUTINE IS CALLED FROM TABORT. 
*  IT WILL UPDATE QUEUE AND ABORT TIMER (IF ANY), 
*  AND TERMINATE THE REQUEST VIA TENDIO.
* 
*  INPUT:  A6 = DWT ADDRESS 
*	  A8 = ECB ADDRESS
* 
ITABRT	EQU	*
	LDR	A2,A6
	CF	A15,ABREQ	ABORT TIMER AND REMOVE DWT FROM QUEUE 
	LDK	A1,0	RETURN CODE 
	RB	END:IO	END REQUEST VIA TENDIO AND TDISP 
* 
	EJECT			DRIC01 
* 
*	A B R E Q 
* 
*  ABORT TIMER AND REMOVE DWT FROM QUEUE. 
* 
*  INPUT:  A2 = DWT ADDRESS 
* 
*  OUTPUT: A1, A3 ARE DESTROYED 
* 
ABREQ	EQU	* 
	CF	A15,ABTIM	ABORT TIMER 
* 
*	REMOVE DWT FROM QUEUE 
* 
ABR:10	EQU	*
	LD	A1,DWTQUE,A2	QUEUE ACHHOR 
	CWK	A1,RD:QUE
	RF(E)	ABR:20	NOT-ADDRESSED READ REQUEST
	CWK	A1,WR:QUE
	RF(E)	ABR:20	NOT-ADDRESSED WRITE REQUEST 
	ADK	A1,DWTANC	POINT TO ADDRESS OF FIRST DWT IN QUEUE 
* 
ABR:20	LDR	A3,A1	SAVE 
	LDR*	A1,A1	NEXT IN QUEUE 
	CWR	A1,A2	SEARCHED DWT 
	RB(NE)	ABR:20	NO 
	LDR*	A1,A1	REMOVE FROM QUEUE 
	STR	A1,A3	UPDATE QUEUE LINKS 
	CMR	A2	RESET QUEUE LINK
	RF	IH:RTN	RETURN 
* 
	EJECT			DRIC01 
* 
*	A B T I M 
* 
*  SUBROUTINE FOR ABORTING TIMER (IF ANY).
* 
*  INPUT:  A2 = DWT ADDRESS 
* 
*  OUTPUT: A1, A3 ARE DESTROYED 
* 
ABTIM2	EQU	*
	CMR	A2	RESET QUEUE LINK
* 
ABTIM	LDK	A1,DWTTP
	ADR	A1,A2	TIMER POINTER ADDRESS
	LDR*	A3,A1 
	RF(Z)	IH:RTN	NO TIMER ACTIVE 
	CM*	0,A1 
	CMR	A1	INDICATE NO TIMER SET 
* 
	IFT	CPU852=1 
IH:RTN	ABL	IHRTN
	XIF
* 
	IFT	CPU852=0 
IH:RTN	RTN	A15
	XIF
* 
* 
* 
	END

Full view