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

⟦92497314c⟧

    Length: 12138 (0x2f6a)
    Notes: pts_type(SC)
    Names: »TOSSFM.SC«

Derivation

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

PTS(SC)

	IDENT TOSSFM 	REL 10.0 80-03-14 870105041000 

* 
* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS                  *
* 
*   TOSSFM = TOSS FILE MANAGEMENT LKM PROCESSOR  *
* 
* 
* 
* 
**************************************************
* 
* 
*   TOSS FILE MANAGEMENT LKM PROCESSOR HANDLES
*   PREPARATIONS FOR DISC I/O, AND ACTIVATION OF
*   THE FILE MANAGEMENT TASK (FMTASK) FOR FILE
*   ADMINISTRATION FUNCTIONS. 
* 
* 
	EJECT			TOSSFM 
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	TOSSFM	TOSS FILE MANAGEMENT LKM PROCESSOR
	ENTRY	FCHECK	CHECK ACCESS PAR. AND RETURN FWT ADDRESS
	ENTRY	FCHEC2	FCHECK 2ND ENTRY
	EJECT			TOSSFM 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	FMRDWR	FM READ/WRITE 
	EXTRN	FM:ADM	FM ADMINISTRATION FUNCTIONS 
	EXTRN	TTABFM	FMTASK TTAB 
	EXTRN	QUEDEV	QUEUE REQUEST IN DEVICE QUEUE 
	EXTRN	TIO:FM	FM ENTRY IN TIO 
	EXTRN	ACTDIS	ACTIVATE TASK AND DISPATCH
	EXTRN	FNDDWD	FIND DWT ADDRESS
	EXTRN	TIOERR	ERROR: QUEUE TASK AND DISPATCH
	EXTRN	SCTFWT	FWT CHAIN START ADDRESS 
	EXTRN	SCTNOF	NUMBER OF FILES 
	EXTRN	FWTPAR	FILE ACCESS PARAMETERS
	EXTRN	FWTTAB	TTAB FOR TASK WITH EXCLUSIVE ACCESS 
	EXTRN	FWTEW1	POINTER TO 2ND EWT BLOCK IN FWT 
	EXTRN	EWTEXL	EXTENT LENGTH 
	EXTRN	EWTEXB	EXTENT BASE 
	EXTRN	EWTVOL	VOLUME FILE CODE
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBCW1	ECB CONTROL WORD 1
	EXTRN	ECBCW2	ECB CONTROL WORD 2
	EXTRN	DWTST	DWT STATUS WORD
	EJECT			TOSSFM 
* 
* 
****************************************
* 
*	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 SUPPORTING SPLIT EXTENT I/O 
*	IS OBTAINED BY SETTING XTSPLI EQU 1.
* 
XTSPLI	EQU	0
* 
	EJECT			TOSSFM 
* 
* 
**********
* TOSSFM *
**********
* 
* 
*   THIS IS THE TOSS FILE MANAGEMENT LKM PROCESSOR. 
* 
*   IT IS ENTERED FROM THE LKM HANDLER
*   WITH THE FOLLOWING PARAMETERS:
* 
*   A5 = TTAB ADDRESS 
*   A7 = ORDER CODE 
*   A8 = ECB ADDRESS
* 
*   WHEN FILE ADMINISTRATION IS REQUESTED,
*   TOSSFM WILL ACTIVATE THE FMTASK.
* 
*   WHEN I/O FUNCTION IS REQUESTED, TOSSFM
*   WILL PREPARE FOR DISC I/O. THE I/O WILL 
*   THEN RUN THE NORMAL WAY VIA TIO-DRIVER-TENDIO.
* 
* 
	EJECT			TOSSFM 
* 
* 
TOSSFM	EQU	*	FILE MANAGEMENT LKM PROCESSOR ENTRY
* 
*	CHECK ORDER CODE
* 
	LDR	A2,A7	ORDER CODE 
	ANK	A2,/FF	SKIP OPTION 
	XRK	A2,/80	WAIT BIT
	SUK	A2,/01 
	RF(Z)	FM:030	BASIC READ
	SUK	A2,/03-/01 
	RF(Z)	FM:010	READ FILE PARAMETERS
	SUK	A2,/05-/03 
	RF(Z)	FM:030	BASIC WRITE 
	SUK	A2,/11-/05 
	RF(Z)	FM:030	PHYSICAL READ 
	SUK	A2,/15-/11 
	RF(Z)	FM:030	PHYSICAL WRITE
	SUK	A2,/21-/15 
	RF(Z)	FM:010	OPEN/CREATE/EXTEND
	SUK	A2,/22-/21 
	RF(NZ)	FM:RQE	REQUEST ERROR IF NOT CLOSE/DELETE
* 
	EJECT			TOSSFM 
* 
*   FILE ADMINISTRATION REQUESTED.
*   ACTIVATE FMTASK WITH THE FOLLOWING PARAMETERS:
* 
*   A1 = ORDER CODE AND OPTION
*   A2 = DISPATCH ADDRESS 
*   A3 = TTAB ADDRESS OF CALLING TASK 
*   A4 = ECB ADDRESS
*   A5 = FMTASK TTAB ADDRESS
* 
FM:010	EQU	*
	LDR	A1,A7	ORDER CODE AND OPTION
	LDKL	A2,FM:ADM	DISPATCH ADDRESS
* 
FM:020	EQU	*
	LDR	A3,A5	TTAB ADDRESS OF CALLING TASK 
	LDR	A4,A8	ECB ADDRESS
	LDKL	A5,TTABFM	FMTASK TTAB ADDRESS 
	ABL	ACTDIS	ACTIVATE FMTASK AND DISPATCH
* 
	EJECT			TOSSFM 
* 
* 
**********
* FM I/O *
**********
* 
*	FILE MANAGEMENT I/O FUNCTIONS 
* 
FM:030	EQU	*	BASIC AND PHYSICAL READ/WRITE
	CF	A15,FCHECK	FIND FWT AND CHECK ACCESS PARAMETERS 
	ADK	A1,0	CHECK RETURN CODE 
	RF(Z)	FM:050	OK
* 
FM:040	EQU	*
	LDR	A3,A1	RETURN CODE
	ABL	TIOERR	ERROR: QUEUE TASK AND DISPATCH
* 
	EJECT			TOSSFM 
* 
*	CHECK RELATIVE SECTOR NUMBER
* 
FM:050	EQU	*
	IFT	MMUPAG=0 
	LD	A1,ECBCW1,A8	RELATIVE SECTOR NUMBER 
	LD	A2,ECBCW2,A8
	XIF
* 
	IFT	MMUPAG=1 
	EL	A1,ECBCW1,A8	RELATIVE SECTOR NUMBER 
	EL	A2,ECBCW2,A8
	XIF
* 
	RF(NZ)	FM:060
	ADK	A1,0 
	RF(Z)	FM:RQE	RELATIVE SECTOR NUMBER = 0
* 
FM:060	EQU	*
	ECR	A6,A1
	ANK	A6,/FF 
	RF(NZ)	FM:RQE	ILLEGAL RELATIVE SECTOR NUMBER 
	LDR	A9,A7	SAVE ORDER CODE
	ADKL	A3,FWTEW1  	ADDRESS TO 1ST EWT STRUCTURE
	LDKL	A14,/7FFF 
* 
	EJECT			TOSSFM 
* 
*	SEARCH THE FILE EXTENT THAT HOLDS 
*	THE REQUESTED SECTORS 
* 
FM:070	EQU	*
	LC	A6,EWTEXL-1,A3	FILE EXTENT LENGTH 
	LD	A7,EWTEXL,A3
	CWR	A1,A6	CHECK EXTENT LENGTH
	RF(L)	FM:100	EXTENT FOUND
	RF(G)	FM:080	EXTENT NOT FOUND
	CWR	A2,A7
	RF(NG)	FM:100	EXTENT FOUND 
* 
FM:080	EQU	*
	IFT	CPU852=0 
	DSR	A6	SUBTRACT LENGTH FROM SECTOR NUMBER
	XIF
* 
	IFT	CPU852=1 
	SUR	A1,A6	SUBTRACT LENGTH FROM SECTOR NUMBER 
	SUR	A2,A7
	RF(NN)	FM:090	NOT UNDERFLOW
	SUK	A1,1	UNDERFLOW CORRECTION
	ANR	A2,A14	SKIP SIGN BIT 
	XIF
* 
FM:090	EQU	*
	LDR*	A3,A3	ADDRESS TO 2ND EWT BLOCK
	LDR*	A3,A3	ADDRESS TO NEXT EWT STRUCTURE 
	RB(NZ)	FM:070	CHECK NEXT EXTENT
* 
FM:RQE	EQU	*	FILE MANAGEMENT REQUEST ERROR EXIT 
	LDKL	A1,/A000	REQUEST ERROR
	RB	FM:040
* 
	EJECT			TOSSFM 
* 
*	EXTENT FOUND
* 
FM:100	EQU	*
	LDR*	A4,A3	ADDRESS TO 2ND EWT BLOCK
	SUR	A10,A10
	LC	A10,EWTEXB-1,A4	FILE EXTENT BASE
	LD	A11,EWTEXB,A4 
* 
	IFT	CPU852=0 
	DAR	A10	COMPUTE SECTOR NUMBER
	XIF
* 
	IFT	CPU852=1 
	ADR	A1,A10	COMPUTE SECTOR NUMBER 
	ADR	A2,A11 
	RF(O)	FM:140	OVERFLOW
	XIF
* 
FM:110	EQU	*
	SUK	A2,1 
	RF(NN)	FM:115	NOT UNDERFLOW
	SRL	A2,1	UNDERFLOW CORRECTION
	SUK	A1,1 
* 
	EJECT			TOSSFM 
* 
* 
FM:115	EQU	*
	LDR	A12,A1	SAVE SECTOR NUMBER
	LDR	A13,A2 
* 
	IFT	MMUPAG=0 
	LC	A3,ECBRL,A8	REQUESTED LENGTH (SECTORS)
	XIF
* 
	IFT	MMUPAG=1 
	EL	A3,ECBRL,A8	REQUESTED LENGTH (BYTES)
	ECR	A3,A3	SECTORS
	XIF
* 
	ANK	A3,/FF 
	ADR	A2,A3	COMPUTE LAST REQUESTED SECTOR+1
	RF(O)	FM:150	OVERFLOW
* 
FM:120	EQU	*
	ADR	A6,A10	COMPUTE LAST SECTOR+1 IN EXTENT 
	ADR	A7,A11 
	RF(O)	FM:160	OVERFLOW
* 
FM:125	EQU	*
	CWR	A6,A1
	RF(G)	FM:130	ALL SECTORS WITHIN THIS EXTENT
* 
	IFT	XTSPLI=0 
	RB(L)	FM:RQE	ALL SECTORS NOT WITHIN THIS EXTENT
	CWR	A7,A2
	RB(L)	FM:RQE	ALL SECTORS NOT WITHIN THIS EXTENT
	XIF
* 
	IFT	XTSPLI=1 
	RF(L)	FM:170	ALL SECTORS NOT WITHIN THIS EXTENT
	CWR	A7,A2
	RF(L)	FM:170	ALL SECTORS NOT WITHIN THIS EXTENT
	XIF
* 
	EJECT			TOSSFM 
* 
*	PREPARE PARAMETERS FOR DISC I/O 
* 
*	EXIT PARAMETERS:
* 
*	A2 = DISC INDEX (FROM FNDDWD) 
*	A4 = 0 (INDICATES NOT I/O-AND-ACTIVATION) 
*	A5 = TTAB ADDRESS 
*	A6 = DISC DWT ADDRESS (FROM FNDDWD) 
*	A7 = ORDER CODE 
*	A8 = ECB ADDRESS
* 
FM:130	EQU	*
	LC	A2,EWTVOL,A4	FILE CODE DISC 
	CF	A15,FNDDWD	FIND DISC DWT ADDRESS
	LDK	A4,0	INDICATE NOT I/O-AND-ACTIVATE 
	LDR	A7,A9	RESTORE ORDER CODE 
	LD	A1,DWTST,A6	DWT STATUS
	ABL(NN)	QUEDEV	DISC BUSY, QUEUE REQUEST
* 
	IFT	MMUPAG=0 
	ST	A12,ECBCW1,A8	SET SECTOR NUMBER IN ECB
	ST	A13,ECBCW2,A8 
	XIF
* 
	IFT	MMUPAG=1 
	ES	A12,ECBCW1,A8	SET SECTOR NUMBER IN ECB
	ES	A13,ECBCW2,A8 
	XIF
* 
	ABL	TIO:FM	BRANCH TO FM ENTRY IN TIO 
* 
	EJECT			TOSSFM 
* 
*	OVERFLOW CORRECTIONS FOR DOUBLE WORD ARITHMETICS
* 
FM:140	EQU	*
	IFT	CPU852=1 
	ADK	A1,1 
	ANR	A2,A14	SKIP SIGN BIT 
	RB	FM:110
	XIF
* 
FM:150	EQU	*
	ADK	A1,1 
	ANR	A2,A14	SKIP SIGN BIT 
	RB	FM:120
* 
FM:160	EQU	*
	ADK	A6,1 
	ANR	A7,A14	SKIP SIGN BIT 
	RB	FM:125
* 
	EJECT			TOSSFM 
* 
*	REQUESTED SECTORS CONTINUE IN NEXT EXTENT 
* 
FM:170	EQU	*
	IFT	XTSPLI=1 
	LDR	A1,A4	EWT ADDRESS (2ND BLOCK)
	LDKL	A2,FMRDWR	DISPATCH ADDRESS
*****A7????????????*****
	RB	FM:020	ACTIVATE FMTASK
	XIF
* 
	EJECT			TOSSFM 
* 
* 
**********
* FCHECK *
* FCHEC2 *
**********
* 
* 
*   FCHECK/FCHEC2 CONVERTS THE FILE NUMBER TO FWT 
*   ADDRESS AND CHECKS ACCESS PARAMETERS. 
* 
*   INPUT:  A5 = TTAB ADDRESS 
*           A7 = ORDER CODE 
*	   A8 = ECB ADDRESS 
* 
*   OUTPUT: A1 = RETURN CODE (=0 IF OK) 
*           A3 = FWT ADDRESS
*	   A2 IS DESTROYED
* 
FCHECK	EQU	*	FCHECK MAIN ENTRY
	IFT	MMUPAG=0 
	LDR*	A2,A8	FILE NUMBER 
	XIF
* 
	IFT	MMUPAG=1 
	ELR	A2,A8	FILE NUMBER
	XIF
* 
FCHEC2	EQU	*	FCHECK 2ND ENTRY (A2 = FILE NUMBER)
	LDK	A1,0 
	ANK	A2,/FF 
	RF(Z)	FC:050	FILE NUMBER = 0 
	CW	A2,SCTNOF 
	RF(G)	FC:050	FILE NUMBER TOO BIG 
	LDKL	A3,SCTFWT	ADDRESS TO FWT CHAIN POINTER
* 
	EJECT			TOSSFM 
* 
* 
FC:010	EQU	*	COMPUTE FWT ADDRESS
	LDR*	A3,A3	NEXT FWT ADDRESS
	SUK	A2,1 
	RB(P)	FC:010 
* 
*	CHECK ACCESS PARAMETERS 
* 
	ANKL	A3,/FFFE	CORRECT FWT ADDRESS JUST IN CASE 
	LDR*	A2,A3	FIRST WORD OF FWT 
	ANK	A2,1	CHECK IF FWT USED 
	RF(Z)	FC:050	FILE NOT OPENED 
	LD	A2,FWTTAB,A3	TTAB ADDRESS (EA TASK) 
	RF(Z)	FC:020	OPENED NON-EXCLUSIVELY
	CWR	A2,A5	EA, CHECK IF THIS TASK 
	RF(NE)	FC:060	EXCLUSIVE FOR ANOTHER TASK 
* 
FC:020	EQU	*
	LD	A2,FWTPAR,A3	ACCESS PARAMETERS
	RF(N)	FC:070	NEW VOLUME LOADED 
	SLL	A2,1 
	RF(NN)	FC:040	PHYSICAL ORDERS
	ANK	A7,/85	BASIC ORDER 
* 
FC:040	EQU	*	COMMON FCHECK RETURN LABEL 
	RTN	A15
* 
	EJECT			TOSSFM 
* 
*	ERROR RETURNS 
* 
FC:050	EQU	*	REQUEST ERROR EXIT 
	LDKL	A1,/7FC0	RETURN CODE = /8000
* 
FC:060	EQU	*	FILE PROTECTED EXIT
	ADK	A1,/20	RETURN CODE = /40 
* 
FC:070	EQU	*	NEW VOLUME LOADED EXIT 
	ADK	A1,/20	RETURN CODE = /20 
	RB	FC:040	RETURN 
* 
* 
* 
	END

Full view