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

⟦c7f55987a⟧

    Length: 12760 (0x31d8)
    Notes: pts_type(SC)
    Names: »DSKSUB.SC«

Derivation

└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
    └─⟦this⟧ »M:DE10/DSKSUB.SC« 
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
    └─⟦this⟧ »M:DE10/DSKSUB.SC« 

PTS(SC)

	IDENT DSKSUB 	REL 10.0 80-03-14 870105041000 

* 
****************************************
* 
*   PHILIPS TERMINAL SYSTEM  PTS       *
* 
*   DSKSUB = DISC SUBROUTINES          *
* 
* 
* 
* 
****************************************
* 
* 
*   DSKSUB HOLDS THE FOLLOWING DISC 
*   AND FILE MANAGEMENT SUBROUTINES:
* 
*   - VOLCLR = CLEAR VOLUME NAME(S) IN DISC DWT 
*   - VOLNAM = MOVE VOLUME NAME FROM DWT TO USER BUFFER 
*   - VOLADR = COMPUTE VOLUME NAME ADDRESS IN DWT 
*   - NVLCHK = CHECK IF NEW VOLUME LOADED FOR CALLING TASK
*   - VOLGET = MOVE VOLUME NAME FROM DISC BUFFER TO DWT 
*   - NEWVOL = SET NEW VOLUME LOADED BITS 
*   - INXDWT = COMPUTE DWT ADDRESS + DOUBLE INDEX 
*   - NVLTAB = TTAB ADDRESSES FOR TASKS TO HAVE NVL 
* 
* 
	EJECT		DSKSUB
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	VOLCLR	CLEAR VOLUME NAMES IN DWT 
	ENTRY	VOLNAM	MOVE VOLUME NAME FROM DWT TO USER BUFFER
	ENTRY	VOLADR	COMPUTE VOLUME NAME ADDRESS IN DWT
	ENTRY	NVLCHK	CHECK FOR NEW VOLUME LOADED 
	ENTRY	VOLGET	MOVE VOLUME NAME FROM DISC BUFFER TO DWT
	ENTRY	NEWVOL	SET NEW VOLUME LOADED BITS
	ENTRY	INXDWT	COMPUTE DWT ADDRESS + DOUBLE INDEX
	ENTRY	NVLTAB	TTAB ADDRESSES FOR TASKS TO HAVE NVL
	ENTRY	NVLDMT	DM TASK NVL TABLE 
	ENTRY	NVLEND	END OF NVLTAB 
	ENTRY	NVLBIT	NVL BIT MASK
	EJECT		DSKSUB
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	IHRTN	RETURN WITHOUT ENABLING INTERRUPTS 
	EXTRN	TTABLD	LDTASK TTAB 
	EXTRN	TTABFM	FMTASK TTAB 
	EXTRN	SCTFWT	FWT CHAIN START ADDRESS 
	EXTRN	DWTORD	SAVE AREA INDEX AND ORDER 
	EXTRN	DWTOR	INDEX AND ORDER
	EXTRN	DWTTAB	TTAB ADDRESS
	EXTRN	DWTUEC	USER ECB ADDRESS
	EXTRN	DWTVOL	VOLUME NAME 
	EXTRN	DWTNVL	NEW VOLUME LOADED FLAG
	EXTRN	EWTVOL	VOLUME FILE CODE
	EXTRN	FWTEW1	POINTER TO 2ND EWT BLOCK IN FWT 
	EXTRN	FWTPAR	ACCESS PARAMETERS 
	EXTRN	TTB:MT	MMU TABLE 
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFFECTIVE LENGTH 
	EJECT		DSKSUB
* 
* 
*************************************** 
* 
*	CONDITIONAL ASSEMBLY
* 
*************************************** 
* 
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	0
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	1
* 
* 
*	A PROGRAM VERSION USING TOSS DISC PAGING
*	IS OBTAINED BY SETTING DSKPAG EQU 1.
* 
DSKPAG	EQU	1
* 
* 
*	A PROGRAM VERSION INCLUDING TOSS SWAPPABLE WORK 
*	BLOCKS IS OBTAINED BY SETTING SWPBLK EQU 1. 
* 
SWPBLK	EQU	0
* 
	EJECT			DSKSUB 
* 
* 
*	A PROGRAM VERSION SUPPORTING FILE MANAGEMENT
*	IS OBTAINED BY SETTING FILMAN EQU 1.
* 
X:A	EQU	0 
FILMAN	EQU	1
* 
* 
*	A PROGRAM VERSION SUPPORTING DATA MANAGEMENT
*	IS OBTAINED BY SETTING DATMAN EQU 1.
* 
X:B	EQU	0 
DATMAN	EQU	X:B
* 
	EJECT			DSKSUB 
* 
* 
**********
* VOLCLR *
**********
* 
* 
*   VOLCLR WILL CLEAR THE REQUESTED VOLUME NAME(S)
*   IN THE REQUESTED DISC DWT.
* 
*   INPUT:  A1 = NUMBER OF BYTES TO CLEAR 
*           A6 = DWT ADDRESS
* 
*   OUTPUT: A1, A2 ARE DESTROYED
* 
VOLCLR	EQU	*
	LDR	A2,A1
	CF	A15,VOLADR	VOLUME NAME ADDRESS
* 
VCLR10	EQU	*
	CMR	A1	CLEAR ONE WORD
	ADK	A1,2	INCREMENT POINTER 
	SUK	A2,2	DECREMENT LOOP COUNTER
	RB(P)	VCLR10 
	RF	RETURN
* 
	EJECT		DSKSUB
* 
* 
**********
* VOLNAM *
**********
* 
* 
*   VOLNAM WILL MOVE THE VOLUME NAME OF SELECTED DISC 
*   TO THE USER BUFFER IF REQUESTED LENGTH = 6. 
* 
*   INPUT:  A6 = DWT ADDRESS
*           A8 = ECB ADDRESS
* 
*   OUTPUT: A1-A4 ARE DESTROYED 
* 
VOLNAM	EQU	*
	LD	A1,ECBRL,A8	REQUESTED LENGTH
	SUK	A1,6 
	RF(NE)	RETURN	NO VOLUME NAME WANTED
	CF	A15,VOLADR	GET DWT VOLUME ADDRESS 
	ST	A4,ECBEL,A8	SET EFFECTIVE LENGTH
* 
	IFT	MMUPAG=0 
	LD	A2,ECBBA,A8	USER BUFFER ADDRESS 
* 
	EJECT			DSKSUB 
* 
* 
VNAM10	EQU	*
	LDR*	A3,A1	MOVE ONE WORD 
	STR	A3,A2
	ADK	A1,2	INCREMENT BUFFER POINTERS 
	ADK	A2,2 
	SUK	A4,2	DECREMENT LOOP COUNTER
	RB(P)	VNAM10 
	RF	RETURN
	XIF
* 
	IFT	MMUPAG=1 
	LD	A2,DWTTAB,A6	TTAB ADDRESS OF CALLING TASK 
	TS	-30,A15	SAVE RUNNING MMU
	TL	TTB:MT,A2	LOAD USER MMU 
	LD	A2,DWTUEC,A6	USER ECB ADDRESS 
	EL	A2,ECBBA,A2	USER BUFFER ADDRESS 
	MVSU	A4	MOVE VOLUME NAME 
	TL	-30,A15	RESTORE RUNNING MMU 
	RTN	A15
	XIF
* 
	EJECT		DSKSUB
* 
* 
**********
* VOLADR *
**********
* 
* 
*   INPUT:  A6 = DWT ADDRESS
* 
*   OUTPUT: A1 = VOLUME NAME ADDRESS
*	   A4 = 6 
* 
VOLADR	EQU	*
	LC	A4,DWTOR,A6	INDEX 
* 
VOLA05	EQU	*
	LDKL	A1,DWTVOL-6 
	ADR	A1,A6
	ANK	A4,/3
* 
VOLA10	EQU	*
	ADK	A1,6	UPDATE ADDRESS
	SUK	A4,1 
	RB(NN)	VOLA10
	LDK	A4,6 
	RF	RETURN
* 
	EJECT			DSKSUB 
* 
* 
**********
* NVLCHK *
**********
* 
* 
*   NVLCHK IS CALLED AT ACTIVATION FROM DISC DRIVER 
*   TO CHECK IF THE RETURN CODE "NEW VOLUME LOADED" 
*   IS TO BE RETURNED TO THE CALLING TASK (RC=/20). 
* 
*   INPUT:  A6 = DWT ADDRESS
* 
*   OUTPUT: A1 = RETURN CODE (/20 IF NVL, ELSE 0) 
*           A2 = DWT ADDRESS + DOUBLE INDEX 
*           A3, A4 ARE DESTROYED
* 
NVLCHK	EQU	*
	LD	A2,DWTOR,A6	INDEX AND ORDER 
	ST	A2,DWTORD,A6	SAVE FOR RECOVERY PURPOSES 
	SRL	A2,7	DOUBLE INDEX
	ADR	A2,A6
	LD	A1,DWTNVL,A2	NVL FLAG 
	ANKL	A1,/7FFF	RESET BIT 0 (FIRST REQUEST BIT)
	ST	A1,DWTNVL,A2
	ANK	A1,/FF	CHECK IF NVL
	RF(Z)	RETURN	RETURN IF NO NVL
	LD	A4,DWTTAB,A6	TTAB ADDRESS 
	LDK	A1,1 
	LDKL	A3,NVLTAB	NVLTAB ADDRESS
* 
	EJECT			DSKSUB 
* 
* 
NVL:10	EQU	*
	CWK	A3,NVLEND	CHECK IF END OF TABLE REACHED
	RF(E)	NVL:20	END OF NVLTAB 
	CWR*	A4,A3	CHECK TTAB ADDRESS
	RF(E)	NVL:20	NVL FOR THIS TASK 
	SLL	A1,1	SHIFT NVL BIT MASK
	ADK	A3,2	POINT TO NEXT TTAB IN NVLTAB
	RB	NVL:10
* 
NVL:20	EQU	*
	AN	A1,DWTNVL,A2	CHECK IF NVL FOR THIS TASK 
	RF(Z)	RETURN	NO NVL FOR THIS TASK
	XRS	A1,DWTNVL,A2	RESET NVL BIT 
	LDK	A1,/20	RETURN CODE 
* 
	EJECT			DSKSUB 
* 
* 
RETURN	EQU	*	COMMON RETURN LABEL
	IFT	CPU852=1 
	ABL	IHRTN	RETURN WITHOUT ENABLING INTERRUPTS 
	XIF
* 
	IFT	CPU852=0 
	RTN	A15
	XIF
* 
	EJECT			DSKSUB 
* 
* 
**********
* VOLGET *
**********
* 
* 
*   VOLGET WILL READ VOLUME NAME FROM DISC BUFFER 
*   TO DISC DWT AND CHECK IF THERE IS A NEW VOLUME MOUNTED. 
* 
*   INPUT:  A2 = DISC BUFFER ADDRESS
*	   A3 = FILE CODE (FOR DRIVE WITH INDEX = 0)
*	        BIT 0 SET MEANS TEST STATUS ORDER 
*           A6 = DWT ADDRESS
* 
*   OUTPUT: A4 = DWT ADDRESS + DOUBLE INDEX 
*           A1-A3, A7-A8 ARE DESTROYED
* 
* 
VOLGET	EQU	*
	CF	A15,VOLADR	DWT VOLUME NAME ADDRESS
	LDK	A7,0	RESET NVL FLAG
* 
VGET10	EQU	*
	LDR*	A8,A2	ONE WORD OF NEW VOLUME NAME 
	CWR*	A8,A1	COMPARE WITH OLD VOLUME NAME
	RF(E)	VGET20 
	LDK	A7,1	SET NVL FLAG
	STR	A8,A1	STORE NEW VOLUME NAME
* 
	EJECT			DSKSUB 
* 
* 
VGET20	EQU	*
	ADK	A1,2	INCREMENT BUFFER POINTERS 
	ADK	A2,2 
	SUK	A4,2	DECREMENT LOOP COUNTER
	RB(P)	VGET10 
	CF	A15,INXDWT
	ADK	A7,0	CHECK NVL FLAG
	RB(Z)	RETURN	RETURN IF NO NVL
	SLA	A3,1	CHECK IF TEST STATUS OR RECOVERY
	RB(O)	RETURN	TEST STATUS, NO NVL 
	SRA	A3,1	FILE CODE WITHOUT SIGN BIT
	LD	A7,DWTNVL,A4	NVL FLAGS
	RB(N)	RETURN	NO REQUESTS SO FAR ON THIS DISC 
	SLL	A7,1 
	RB(N)	RETURN	FIXED DISC, NO NVL
* 
	EJECT			DSKSUB 
* 
* 
**********
* NEWVOL *
**********
* 
* 
*   NEWVOL IS ENTERED FROM THE ROUTINE VOLGET WHEN IT HAS 
*   DETECTED THAT A NEW VOLUME HAS BEEN MOUNTED.
*   THE NEW VOLUME LOADED FLAG IS THEN SET BY THIS
*   ROUTINE FOR THE CONCERNED FILE CODE AND FILES 
*   OPENED ON THAT VOLUME. TASKS REPRESENTED IN THE 
*   TABLE NVLTAB WILL GET RETURN CODE /20 AT THE
*   NEXT REQUEST ON THAT FILE CODE. 
* 
*   INPUT:  A3 = FILE CODE (DISC ONE FOR DRIVER)
*	   A4 = DWT ADDRESS + DOUBLE INDEX
*           A6 = DWT ADDRESS
* 
*   OUTPUT: A3 = ACTUAL FILE CODE 
*	   A1-A2 ARE DESTROYED
* 
NEWVOL	EQU	*
	LD	A2,NVLBIT	NVL BIT MASK
	ST	A2,DWTNVL,A4	INDICATE NEW VOLUME LOADED 
	LC	A2,DWTOR,A6	INDEX 
	ANK	A2,/3
	ADR	A3,A2	ACTUAL FILE CODE 
* 
	EJECT			DSKSUB 
* 
* 
	IFT	FILMAN=0 
	RB	RETURN
	XIF
* 
	IFT	FILMAN=1 
	LDKL	A1,SCTFWT	ADDRESS TO FWT POINTER
* 
*	SET NEW VOLUME LOADED FOR ALL FILES ON CONCERNED VOLUME 
* 
NEW:10	EQU	*
	LDR*	A2,A1	NEXT FWT ADDRESS
	RB(Z)	RETURN	NO MORE FWT:S 
	LDR	A1,A2	SAVE FWT ADDRESS 
	ADKL	A2,FWTEW1	ADDRESS TO FIRST EWT STRUCTURE
* 
NEW:20	EQU	*
	LDR*	A2,A2	ADDRESS TO 2ND EWT BLOCK
	CC	A3,EWTVOL,A2	CHECK FILE CODE
	RF(NE)	NEW:30
	LDKL	A2,/8000	NVL BIT
	ORS	A2,FWTPAR,A1	INDICATE NEW VOLUME LOADED
	RB	NEW:10
* 
NEW:30	EQU	*
	LDR*	A2,A2	ADDRESS TO NEXT EWT STRUCTURE 
	RB(Z)	NEW:10	END OF THIS EWT STRUCTURE 
	RB	NEW:20	CONTINUE WITH NEXT EXTENT
	XIF
* 
	EJECT			DSKSUB 
* 
* 
**********
* INXDWT *
**********
* 
* 
*   INXDWT WILL COMPUTE THE DWT ADDRESS ADDED TO THE DOUBLED INDEX. 
* 
*   INPUT:  A6 = DWT ADDRESS
* 
*   OUTPUT: A4 = DWT ADDRESS + DOUBLE INDEX 
*           NO REGISTERS ARE DESTROYED
* 
INXDWT	EQU	*
	LC	A4,DWTOR,A6	INDEX 
	ANK	A4,/3
	ADR	A4,A4	DOUBLE INDEX 
	ADR	A4,A6
	RB	RETURN
* 
	EJECT			DSKSUB 
* 
* 
**********
* NVLTAB *
**********
* 
* 
*   NVLTAB HOLDS THE TTAB ADDRESSES OF THE TASKS
*   THAT WILL RECEIVE NEW VOLUME LOADED WHEN A NEW
*   VOLUME HAS BEEN MOUNTED.
* 
NVLTAB	EQU	*
	IFT	FILMAN=1 
	DATA	TTABFM	FMTASK TTAB
* 
	IFF	DSKPAG+SWPBLK=0
	DATA	TTABLD	LDTASK TTAB
	XIF
* 
NVLDMT	EQU	*
	IFT	FILMAN=1 
	IFT	DATMAN=1 
	DATA	0	TTAB #D 
	DATA	0	TTAB #E 
	DATA	0	TTAB #F 
	DATA	0	TTAB #G 
	XIF
* 
	IFT	FILMAN=1 
NVLEND	EQU	*
* 
NVLBIT	DATA	0	NVL BIT MASK
	XIF
* 
	EJECT			DSKSUB 
* 
* 
	IFT	FILMAN=0 
	IFF	DSKPAG+SWPBLK=0
	DATA	TTABLD	LDTASK TTAB
* 
NVLEND	EQU	*
* 
NVLBIT	DATA	3	NVL BIT MASK
	XIF
* 
	IFT	FILMAN=0 
	IFT	DSKPAG+SWPBLK=0
* 
NVLEND	EQU	*
* 
NVLBIT	DATA	1	NVL BIT MASK
	XIF
* 
* 
* 
	END

Full view