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

⟦c0d42505d⟧

    Length: 7980 (0x1f2c)
    Notes: pts_type(SC)
    Names: »ATTACH.SC«

Derivation

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

PTS(SC)

	IDENT ATTACH 	REL 8.2 78-09-15  870105040820 

* 
******************************************* 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   ATTACH = ATTACH/DETACH HANDLER
* 
* 
* 
* 
* 
* 
******************************************* 
* 
*   THIS MODULE IS CALLED FROM TIO WITH 
*   PARAMETERS: 
* 
*   A5   TTAB ADDRESS 
*   A6   DWT ADDRESS
*   A7   ORDER
*   A8   ECB ADDRESS
* 
****************************************
* 
	EJECT
* 
*   E N T R I E S 
* 
	ENTRY	ATTACH	ATTACH DEVICE 
	ENTRY	DETACH	DETACH DEVICE 
	ENTRY	ATT:CH	CHAIN ANCHOR
* 
* 
*   E X T E R N A L S 
* 
	EXTRN	GETBLK	GET BLOCK 
	EXTRN	FREBLK	FREE BLOCK
	EXTRN	SETIMP	SET TIMER 

	EXTRN	TTB:ST	TTAB STATUS 
	EXTRN	TTB:SA	DISPATCH ADDRESS

	EXTRN	DWTST	DWT STATUS 
	EXTRN	DWTTQ
	EXTRN	DWTTAB	TTAB
	EXTRN	DWTADR	ACTIVATION ADDR 

	EXTRN	TIOQ20	INSERT TTAB IN DEVICE QUEUE 
	EXTRN	TIOERR	END REQUEST 
	EXTRN	TDISP	DISPATCHER 

	EXTRN	TPQUE	QUEUE TTAB 
	EXTRN	QTJOB
	EXTRN	IHRTN

	EXTRN	FDBADF	ADDRESS OF DATA FILE FDB
	EXTRN	TIODM	DM ENTRY 
	EJECT
* 
*   A T T A C H 
* 
ATTACH	EQU	*	ENTRY
	LDR	A4,A4	I/O AND ACTIVATE?
	RF(NZ)	ATT:30	YES, REQUEST ERROR 
	CM	8,A8	RESET RETURN CODE
* 
*   ABORT REQUEST IF BIT 1 IN TTB:ST SET
* 
	LDKL	A2,/4000	BIT 1
	AN	A2,TTB:ST,A5
	RF(Z)	ATT:10	DON'T ABORT 
	XRS	A2,TTB:ST,A5	RESET BIT 1 
	RF	ATT:55	END REQUEST

ATT:10	LDKL	A2,/800	ATTACH BIT
	LDR	A1,A2	SAVE 
	AN	A2,DWTST,A6 
	RF(NZ)	ATT:40	DEVICE ALREADY ATTACHED
	LD	A3,DWTST,A6 
	RF(NN)	ATT:50	DEVICE BUSY
* 
*   ATTACH REQUESTING TASK
* 
	ORS	A1,DWTST,A6	ATTACH 
	ST	A5,DWTTAB,A6	PUT TTAB ADDRESS IN DWT
	LDKL	A4,TIODM
	CW	A4,DWTADR,A6
	RF(NE)	ATT:15	NO DM REQUEST
	CF	A15,FDBATT	ATTACH FILE STRUCTURE
ATT:15	EQU	*
	CF	A15,FNDBLK	ANY TIMERS ACTIVE? 
	LDR	A4,A4
	RF(Z)	ATT:20	NO! 
* 
*  FREE BLOCK AND TIMER IN ATT:CH 
* 
	CM*	2,A4	FREE TIMER
	LDR*	A3,A4	REMOVE FROM ATT:CH
	STR	A3,A2
	CF	A15,FREBLK	RELEASE BLOCK
ATT:20	LDK	A3,0	RETURN CODE 
ATT:30	ABL	TIOERR	END REQUEST 
ATT:35	LDKL	A3,/8000	RETURN CODE
	RB	ATT:30

ATT:40	CW	A5,DWTTAB,A6	ATTACHED TO REQUESTING TASK
	RB(E)	ATT:35	YES, REQUEST ERROR
ATT:50	CF	A15,FNDBLK	IS TIMER ACTIVE? 
	LDR	A4,A4
	RF(NZ)	ATT:80	YES! 
* 
*    SET TIMER
* 
	LD	A1,10,A8	TIME 
	RB(N)	ATT:35	TIME NEGATIVE 
	RF(NZ)	ATT:60	SET TIMER
ATT:55	LDK	A3,/40	RETURN CODE 
	RB	ATT:30	END REQUEST
ATT:60	ST	A1,ATTIM
	LDR	A1,A5	TTAB ADDRESS 
	CF	A15,GETBLK	GET BLOCK
	LD	A1,ATT:CH	ANCHOR
	STR	A1,A4
	ST	A4,ATT:CH	UPDATE ANCHOR 
	ADK	A4,2	TIMER POINTER ADDRESS 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIMP	SET TIMER
	DATA	TIMOUT
ATTIM	DATA	0
ATT:80	LDK	A4,0	NOT ACTIVATION PARAMETER
	ABL	TIOQ20 
	EJECT
* 
*   D E T A C H 
* 
DETACH	EQU	*
	LDR	A4,A4
	RB(NZ)	ATT:30	I/O AND ACTIVATE-ERROR 
	LDKL	A1,/800 
	AN	A1,DWTST,A6 
	RB(Z)	ATT:35	NOT ATTACHED
	CW	A5,DWTTAB,A6
	RB(NE)	ATT:35	ATTACHED TO OTHER TASK 
	XRS	A1,DWTST,A6	DETACH 
	LDKL	A4,TIODM
	CW	A4,DWTADR,A6
	RF(NE)	DET:05	NO DM REQUEST
	CF	A15,FDBDET	DETACH FILE STRUCTURE
	RB	ATT:20	END REQUEST
DET:05	EQU	*
	LDR	A2,A6	QREQ INPUT 
	CF	A15,QREQ	UPDATE DWTTQ 
	RB	ATT:20	END REQUEST
	EJECT
* 
*  T I M E O U T
* 
*  ENTRY PARAMETERS 
*  A1  DWT ADDRESS
*  A2  ADDRESS TO 2:ND TIMER BLOCK
* 
TIMOUT	EQU	*
	LDR	A6,A1
	LDR*	A2,A2	TIMER POINTER ADDRES
	ADK	A2,2 
	LDR*	A5,A2	TTAB ADDRESS
	CF	A15,FNDBLK
	LDR*	A1,A4 
	STR	A1,A2	REMOVE FROM ATT:CH 
	CF	A15,FREBLK
* 
*   REMOVE TTAB FROM DEVICE QUEUE 
* 
	LDR	A1,A6
	ADKL	A1,DWTTQ	QUEUE ANCHOR ADDRESS 
TIM:10	LDR	A2,A1	SAVE 
	LDR*	A1,A1	NEXT IN QUEUE 
	RF(NZ)	TIM:30	CONTINUE SEARCH
	LDKL	A1,/4000	BIT 1
	ORS	A1,TTB:ST,A5	SET BIT 1 IN TTAB STATUS
	ABL	TDISP
TIM:30	EQU	*
	CWR	A1,A5
	RB(NE)	TIM:10	NOT FOUND
* 
*  TTAB FOUND - REMOVE FROM QUEUE 
* 
	LDR*	A1,A1 
	STR	A1,A2
	LDK	A3,4 
	ADS	A3,TTB:SA,A5	UPDATE DISPACH ADDRESS
	CF	A15,SETRCE	SET RETURN CODE IN ECB 
	ABL	TPQUE

ATT:CH	DATA	0	ATTACH CHAIN ANCHOR 
	EJECT
* 
*  F N D B L K
* 
*  SUBROUTINE TO FIND BLK IN ATT:CH 
* 
*  ENTRY PARAMETERS:
* 
*  A5  TTAB ADDRESS 
* 
*  EXIT PARAMETERS: 
* 
*  A2  ADDRESS TO PRECEDING BLK IN CHAIN
*  A4  BLOCK ADDRESS IF FOUND ELSE 0
* 
FNDBLK	LDKL	A4,ATT:CH	ANCHOR ADDRESS
FND:10	LDR	A2,A4	SAVE 
	LDR*	A4,A4 
	RF(Z)	FND:30	END OF ATT:CH 
	CW	A5,4,A4 
	RB(NE)	FND:10	NOT FOUND
FND:30	ABL	IHRTN
	EJECT
* 
*  S E T R C E
* 
*  THIS SUBROUTINE SETS RETURN CODE /0040 IN ECB. 
*  ECB ADDRESS IS FOUND FROM TTAB SAVE AREA 
* 
*  ENTRY PARAMETERS:  A5  TTAB ADDRESS
* 
*  EXIT  PARAMETERS:  A1  ECB ADDRESS 
*                     A5  TTAB ADDRESS
* 
SETRCE	LDR	A1,A5
	ADK	A1,/1C	A8 IN SAVE AREA 
	LDR*	A1,A1	ECB ADDRESS 
	LDK	A2,/40	RETURN CODE 
	ORS	A2,8,A1	INTO ECB 
	ABL	IHRTN
	EJECT
* 
*    F D B A T T / F D B D E T
* 
*    SUBROUTINE TO ATTACH/DETACH FDB7S IN A DM FILE 
*    STRUCTURE
* 
*    ENTRY:    A1  /0800
*              A6  FDB ADDRESS
* 
*    WORKING REG.  A2,A3,A4 
* 
FDBDET	EQU	*
	C1R	A1,A1	A1=FF7F
FDBATT	EQU	*
	LDR	A4,A6	FDB ADDRESS
	ADKL	A4,FDBADF 
	LDK	A3,10	LOOP INDEX 
FDB:10	SUK	A3,2 
	RF(N)	FDB:30	ALL FDB'S READY 
	LDR*	A2,A4	NEXT FDB
	RF(Z)	FDB:20	NO FDB
	LDR	A1,A1
	RF(N)	FDB:15	DETACH REQUEST
	ORS	A1,DWTST,A2	ATTACH / DETACH FILE 
	ST	A5,DWTTAB,A2
	RF	FDB:20
FDB:15	ANS	A1,DWTST,A2
	CF	A15,QREQ	UPDATE DWTTQ 
FDB:20	ADK	A4,2	NEXT FDB ADDRESS
	RB	FDB:10
FDB:30	ABL	IHRTN
	EJECT
* 
*  Q R E Q = SUBROUTINE TO QUEUE TASK IN DEVICE QUEUE 
*           (IF ANY)
* 
*  ON ENTRY:  A2  DWT ADDRESS 
*   WORK. REG.  A7,A9 
* 
QREQ	EQU	*
	LDR	A9,A5	SAVE A5 (TTAB ADDRESS) 
	LD	A5,DWTTQ,A2	ANY TASK IN QUEUE?
	RF(Z)	QRE:10	NO! 
	LDR*	A7,A5	YES,UPDATE QUEUE ANCHOR 
	ST	A7,DWTTQ,A2 
	CF	A15,QTJOB	QUEUE TASK
QRE:10	EQU	*
	LDR	A5,A9	RESTORE TTAB ADDRESS 
	ABL	IHRTN
	END

Full view