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

⟦c4f8e6f51⟧

    Length: 10956 (0x2acc)
    Notes: pts_type(SC)
    Names: »DRIC01.SC«

Derivation

└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/DRIC01.SC« 

PTS(SC)

	IDENT DRIC01 	REL 8.2 78-09-15  870105040820 

			ABORT INTERTASK WRITE BUG
			REL 8.1 78-04-21 

* 
********************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRIC01 = INTERTASK COMMUNICATION HANDLER
* 
* 
* 
* 
* 
* 
**********************************************
* 
*   THIS MODULE HANDLES THE INTERTASK COMMUNICATION 
* 
****************
* 
*   ORDERS: 
* 
*   /02  READ 
*   /0B  WRITE
*   /39  SET TIMEOUT
* 
****************
* 
*   ENTRY PARAMETERS
* 
*   A5   STACK BASE 
*   A6   DWT-ADDRESS
*   A7   ORDER
*   A8   ECB-ADDRESS
	EJECT
* 
*   E N T R I E S 
* 
	ENTRY	ITADI	ACTIVATION ADDRESS READ
	ENTRY	ITADO	ACTIVATION ADDRESS WRITE 
	ENTRY	ITABRT	ABORT INTERTASK REQUEST 
* 
*   E X T E R N A L S 
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	TENDIO	ENDIO 
	EXTRN	DISIOE	REQUEST ERROR 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTST	DWT STATUS 
	EXTRN	SETIMP	TIMER 
	EXTRN	FNDTID	FIND TTAB ADDRESS FROM TID
	EXTRN	TTB:TD 
	EXTRN	TTB:ST	TTAB STATUS 
	EXTRN	DWTTAB	DWT TTAB ADDRESS
	EXTRN	DWTADR	ACTIVATION ADDRESS
	EXTRN	IHRTN	RTN A15 WITHOUT ENABLING 
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFF. LENGTH
	EXTRN	ECBRC	ECB RETURN CODE
	EXTRN	ECBCW	ECB CONTROL WORD 
* 
*   C O N S T A N T S 
* 
DWTTP	EQU	/10	TIMER POINTER 
DWSTB	EQU	/18	STACK BASE USED 
DWSTB2	EQU	/1E	STACK BASE 2 (NOT USED)
DWTIM	EQU	/12	TIME
DWQACH	EQU	/14	QUEUE ANCHOR 
	EJECT
* 
*   A C T I V A T I O N 
* 
ITADI	DATA	ICAD 
ITADO	DATA	ICAD 

ICAD	EQU	*
	SUK	A7,2 
	RF(Z)	READ	READ ORDER
	SUK	A7,9 
	RF(Z)	WRITE	WRITE ORDER
	SUK	A7,/2E 
	RF(NZ)	DIS:OE	REQUEST ERROR
* 
*   S E T   T I M E O U T 
* 
	LD	A1,10,A8	TIME 
	ST	A1,DWTIM,A6 
	LDK	A1,0	RETURN CODE 
	RF	END:IO
	EJECT
* 
*   W R I T E 
* 
WRITE	EQU	* 
* 
*   FIND INPUT DWT OF ADDRESSED TASK
* 
	LD	A7,ECBCW,A8	TID 
	CF	A15,FNDTID	TTAB ADDRESS TO A2 
	LDR	A2,A2
	RF(Z)	DIS:OE	NOT FOUND 
	CW	A2,DWTTAB,A6
	RF(E)	DIS:OE	ILLEGAL TID 
	ADKL	A2,TTB:TD	ADDRESS TO TERMINAL DEVICE TABLE
	LDR*	A1,A2	TABLE LENGTH
	LDKL	A3,ITADI	READ ACTIV. ADDRESS
WRI:20	ADK	A2,4	ADDRESS TO NEXT DWT ADDR
	SUK	A1,4 
	RF(N)	DIS:OE NOT FOUND 
	LDR*	A4,A2	DWT ADDRESS 
	CW	A3,DWTADR,A4	INPUT DWT? 
	RB(NE)	WRI:20	NO, TRY NEXT 
	LDR	A2,A4
	LD	A1,DWTST,A2	ANY READ REQUEST? 
	RF(N)	WRI:50	NO! 
* 
*   ABORT INPUT TIMER IF ANY
	CF	A15,ABTIM	ABORT TIMER 
* 
*   MOVE BUFFER 
	SUK	A5,DWSTB2-DWSTB
	CF	A5,MOVBUF 
WRI:45	CF	A15,TENDIO	END WRITE
	LDR	A6,A2
END:IO	CF	A15,TENDIO	END READ 
T:DISP	ABL	TDISP
* 
*   NO READ REQUEST, QUEUE WRITE REQUEST
* 
WRI:50	LDK	A1,/40	RETURN CODE 
	LD	A3,DWTIM,A6	TIME
	RB(Z)	END:IO 
	CWK	A3,/FFFF 
	RF(E)	WRI:70	NO TIMING WANTED
	LDR	A3,A3
	RF(N)	DIS:OE	NEG. TIME 
	LDR	A1,A6	DWTOUT=PARAMETER 
	LDK	A4,DWTTP 
	ADR	A4,A6	TIMER POINTER
	ST	A3,TIME 
	CF	A15,SETIMP	SET TIMER
	DATA	TIMOWR	TIMEOUT ADDRESS
TIME	DATA	0 
* 
*   INSERT IN INPUT QUEUE WITHIN PRIORITY 
* 
WRI:70	EQU	*
	ST	A2,DWQACH,A6	STORE QUEUE ANCHOR IN DWT
	LD	A5,DWTTAB,A6	TTAB ADDRESS 
	LC	A1,TTB:ST+1,A5	LEVEL
WRI:80	LDR	A4,A2	SAVE 
	LDR*	A2,A2	NEXT IN QUEUE 
	RF(Z)	WRI:90	END FOUND 
	LD	A5,DWTTAB,A2	TTAB ADDRESS 
	CC	A1,TTB:ST+1,A5	COMPARE LEVELS 
	RB(NL)	WRI:80
WRI:90	STR	A2,A6	INSERT IN QUEUE
	STR	A6,A4
	RB	T:DISP
* 
* 
DIS:OE	ABL	DISIOE	REQUEST ERROR 
	EJECT
* 
*   R E A D 
* 
READ	EQU	*
	LDR*	A2,A6	ANYTHING IN QUEUE 
	RF(Z)	REA:40	NO! 
	LDR*	A3,A2	REMOVE FROM QUEUE 
	STR	A3,A6
	CF	A15,ABTIM	ABORT TIMER IF ANY
* 
*  MOVE BUFFER
* 
	LDR	A4,A6	EXCHANGE A2 AND A6 
	LDR	A6,A2
	LDR	A2,A4
	SUK	A5,DWSTB2-DWSTB
	CF	A5,MOVBUF 
	RB	WRI:45

REA:40	LDK	A1,/40	RETURN CODE 
	LD	A3,DWTIM,A6	TIME
	RB(Z)	END:IO 
	CWK	A3,/FFFF 
	RF(E)	REA:70	NO TIMER WANTED 
	LDR	A3,A3
	RB(N)	DIS:OE	NEG. TIME 
	LDK	A4,DWTTP 
	ADR	A4,A6
	ST	A3,TIMER
	LDR	A1,A6	PARAMETER=DWT ADDRESS
	CF	A15,SETIMP	SET TIMER
	DATA	TIMORE	TIMEOUT ADDRESS
TIMER	DATA	0
REA:70	EQU	*
	RB	T:DISP
	EJECT
* 
*   WRITE REQUEST TIMEOUT 
* 
TIMOWR	LDR	A6,A1	DWT OUT ADDRESS
	LD	A1,DWQACH,A6	QUEUE ANCHOR (READ DWT ADDR) 
* 
*   REMOVE FROM QUEUE 
* 
TWR:10	LDR	A4,A1	SAVE 
	LDR*	A1,A1	NEXT IN QUEUE 
	CWR	A1,A6	THIS DWT?
	RB(NE)	TWR:10	NO!
	LDR*	A3,A1 
	STR	A3,A4	REMOVE FROM QUEUE
TWR:20	CM*	0,A2	RESET TIMER POINTER 
	LDK	A1,/40	RETURN CODE 
	RB	END:IO
* 
*   READ REQUEST TIMEOUT
* 
TIMORE	EQU	*
	LDR	A6,A1	DWT ADDRESS
	RB	TWR:20
	EJECT
* 
*  I T A B R T = ABORT INTERTASK REQUEST
* 
*  THIS SUBROUTINE IS CALLED FROM TABORT. 
*  THE ROUTINE FINDS IF REQUEST TO BE ABORTED IS A
*  INTERTASK REQUEST, AND IF SO IT WILL UPDATE
*  QUEUE AND ABORT TIMER (IF ANY) 
* 
*  ENTRY PARAMETER:  A6  DWT ADDRESS
*         REG. A1,A2,A3,A4  ARE CHANGED 
* 
ITABRT	EQU	*
	LDKL	A3,ITADI	ACTIVATION ADDRESS READ
	CW	A3,DWTADR,A6	INTERTASK REQ.?
	RF(NE)	ITAB20	NO!
	LDR	A2,A6	DWT ADDRESS
	CF	A15,ABTIM	ABORT TIMER 
	RF	IH:RTN
ITAB20	LDKL	A3,ITADO	ACTIVATION ADDRESS WRITE 
	CW	A3,DWTADR,A6
	RF(NE)	IH:RTN	NOT INTERTASK
* 
*  ABORT WRITE REQUEST
* 
	LDR	A2,A6
	CF	A15,ABTIM	ABORT TIMER 
	LD	A1,DWQACH,A6	GET QUEUE ACHHOR 
* 
*  REMOVE FROM QUEUE
* 
IWR:10	LDR	A4,A1	SAVE 
	LDR*	A1,A1	NEXT IN QUEUE 
	CWR	A1,A6	THIS DWT?
	RB(NE)	IWR:10	NO!
	LDR*	A3,A1	REMOVE
	STR	A3,A4	FROM QUEUE 
	RF	IH:RTN
	EJECT
* 
*  A B T I M = SUBROUTINE FOR ABORTING TIMER IF ANY 
* 
*  ENTRY PARAMETER:  A2  DWT ADDRESS
* 
*  REG.  A1,A3 ARE CHANGED
* 
ABTIM	LDK	A1,DWTTP
	ADR	A1,A2	TIMER POINTER ADDRESS
	LDR*	A3,A1 
	RF(Z)	ABT:10	NO TIMER ACTIVE 
	CM*	0,A1 
	CMR	A1	INDICATE NO TIMER SET 
ABT:10	EQU	*
IH:RTN	ABL	IHRTN
	EJECT
* 
*   M O V B U F 
* 
*   SUBROUTINE TO MOVE BUFFER FROM SENDING TASK 
*   TO ADDRESSED TASK 
*   EFFECTIVE LENGTH IN BOTH INPUT AND OUTPUT ECB ARE SET 
*   A1 WILL CONTAIN RETURN CODE /8 IF SENDING REQ. LEN
*    WAS GREATER THAN RECEIVING REQ. LEN. 
* 
*   INPUT PARAMETERS: 
*   A2  RECEIVING DWT 
*   A5  STACK POINTER 
*   A6  SENDING DWT 
* 
*   REGISTER USAGE: 
*   A1  ECB ADDRESS RECEIVING TASK
*   A2  DWT RECEIVING TASK
*   A3  WORK. REG.
*   A4  BUFFER POINTER
*   A5  STACK POINTER 
*   A6  DWT SENDING TASK
*   A7  RECEIVING BUFFER POINTER
*   A8  ECB ADDRESS SENDING TASK
*   A9  RETURN CODE 
* 
MOVBUF	EQU	*
	LD	A8,DWTECB,A6	SENDING ECB
	ENB
	LDKL	A9,0
	LD	A1,DWTECB,A2	RECEIVING ECB
	LD	A3,ECBRL,A8	REQ. LEN SEND.
	RB(N)	DIS:OE 
	CW	A3,ECBRL,A1 
	RF(NG)	MOV:05
	LDKL	A9,/8	RETURN CODE 
	LD	A3,ECBRL,A1 
	RB(N)	DIS:OE 
MOV:05	EQU	*

	ST	A3,ECBEL,A8	EFF. LEN
	ST	A3,ECBEL,A1	EFF. LEN
MOV:10	EQU	*
	LD	A4,ECBBA,A8	SENDING BUFFER ADDRESS
	LD	A7,ECBBA,A1	REC.BUFFER ADDR.
	ADR	A3,A4	END OF BUFFER
MOV:15	EQU	*
	CWR	A4,A3
	RF(E)	MOV:20	ALL CHAR. MOVED 
	LCR	A1,A4
	SCR	A1,A7
	ADK	A4,1 
	ADK	A7,1 
	RB	MOV:15
MOV:20	LDR	A1,A9	RETURN CODE
	INH
	RTN	A5 
	END

Full view