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

⟦7879b609c⟧

    Length: 17392 (0x43f0)
    Notes: pts_type(SC)
    Names: »TIOFM.SC«

Derivation

└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
    └─⟦this⟧ »TOSSWORK/TIOFM.SC« 
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
    └─⟦this⟧ »TOSSWORK/TIOFM.SC« 

PTS(SC)

	IDENT TIOFM 	REL 11.0 81-05-13 870105041100

* 
* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS                  *
* 
*   TIOFM = 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			TIOFM
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	TIOFM	TOSS FILE MANAGEMENT LKM PROCESSOR 
	ENTRY	DET:FM	FILE MANAGEMENT DETACH
	ENTRY	FCHECK	CHECK ACCESS PAR. AND RETURN FWT ADDRESS
	ENTRY	FCHEC2	FCHECK 2ND ENTRY
	EJECT			TIOFM
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	FMTASK	FMTASK ACTIVATION ADDRESS 
	EXTRN	TTABFM	FMTASK TTAB 
	EXTRN	QUEDEV	QUEUE REQUEST IN DEVICE QUEUE 
	EXTRN	QUEFIL	QUEUE FILE REQUEST IN DEVICE QUEUE
	EXTRN	TIO:FM	FM ENTRY IN TIO 
	EXTRN	ACTDIS	ACTIVATE TASK AND DISPATCH
	EXTRN	FNDDWD	FIND DWT ADDRESS
	EXTRN	QTJOB	QUEUE TASK FOR DISPATCHING 
	EXTRN	GETBLK	GET MONITOR BLOCK 
	EXTRN	TIOERR	ERROR: QUEUE TASK AND DISPATCH
	EXTRN	SCTFWT	FWT CHAIN START ADDRESS 
	EXTRN	SCTNOF	NUMBER OF FILES 
	EXTRN	FWTVTC	VTOC SECTOR NO (FIRST EXTENT) 
	EXTRN	FWTPAR	FILE ACCESS PARAMETERS
	EXTRN	FWTTAB	TTAB FOR TASK WITH ATTACH 
	EXTRN	FWTEW1	POINTER TO 2ND EWT BLOCK IN FWT 
	EXTRN	FWTQUE	QUEUE ANCHOR FOR FILE I/O REQUESTS
	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			TIOFM
* 
* 
****************************************
* 
*	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
* 
* 
*	THE ATTACH/DETACH FILE FUNCTION 
*	IS OBTAINED BY SETTING ATTDET EQU 1.
* 
ATTDET	EQU	1
X:A	EQU	ATTDET
* 
* 
*	THE MULTIPLE EXTENT I/O FUNCTION
*	IS OBTAINED BY SETTING MULEXT EQU 1.
* 
MULEXT	EQU	1
X:B	EQU	MULEXT
* 
	EJECT			TIOFM
* 
* 
********* 
* TIOFM * 
********* 
* 
* 
*   THIS IS THE TOSS FILE MANAGEMENT LKM PROCESSOR. 
* 
*   IT IS ENTERED FROM THE LKM HANDLER
*   WITH THE FOLLOWING PARAMETERS:
* 
*   A4 = 0
*   A5 = TTAB ADDRESS 
*   A7 = ORDER CODE 
*   A8 = ECB ADDRESS
* 
*   WHEN FILE ADMINISTRATION IS REQUESTED,
*   TIOFM WILL ACTIVATE THE FMTASK. 
* 
*   WHEN I/O FUNCTION IS REQUESTED, TIOFM 
*   WILL PREPARE FOR DISC I/O. THE I/O WILL 
*   THEN RUN THE NORMAL WAY VIA TIO-DRIVER-TENDIO.
* 
* 
	EJECT			TIOFM
* 
* 
TIOFM	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:IO	BASIC READ 
	SUK	A2,/03-/01 
	RF(Z)	FMACT3	READ FILE PARAMETERS
	SUK	A2,/05-/03 
	RF(Z)	FM:IO	BASIC WRITE
	SUK	A2,/11-/05 
	RF(Z)	FM:IO	PHYSICAL READ
	SUK	A2,/15-/11 
	RF(Z)	FM:IO	PHYSICAL WRITE 
	SUK	A2,/21-/15 
	RF(Z)	FMACT2	OPEN/CREATE/EXTEND
	SUK	A2,/22-/21 
	RF(Z)	FMACT1	CLOSE/DELETE
* 
	IFT	ATTDET=1 
	SUK	A2,/3B-/22 
	RF(Z)	ATTACH	ATTACH
	SUK	A2,/3C-/3B 
	XIF
* 
	RF(NZ)	FM:RQE	REQUEST ERROR IF NOT DETACH
* 
	EJECT			TIOFM
* 
	IFT	ATTDET=1 
* 
**********
* DETACH *
**********
* 
*	DETACH FILE 
* 
DETACH	EQU	*
	CF	A15,FCHECK	FIND FWT AND CHECK ACCESS PARAMETERS 
	RF(NZ)	T:DISP	ERROR, RETURN
	CF	A15,DET:FM	DETACH FILE
	LDR	A10,A10	CHECK IF FILE WAS ATTACHED 
	RF(NZ)	T:DISP	YES, GO TO DISPATCHER
	XIF
* 
*	ERROR EXIT
* 
FM:RQE	EQU	*	FILE MANAGEMENT REQUEST ERROR EXIT 
	LDK	A3,/80	RETURN CODE 
* 
FM:ER1	EQU	*
	ECR	A3,A3
	RF	T:DIS2
* 
	EJECT			TIOFM
* 
	IFT	ATTDET=1 
* 
**********
* ATTACH *
**********
* 
*	ATTACH FILE 
* 
ATTACH	EQU	*
	CF	A15,FCHECK	FIND FWT AND CHECK ACCESS PARAMETERS 
	RF(NZ)	FM:030	NOT OK 
	ST	A5,FWTTAB,A6	SET ATTACH WORD
	XIF
* 
T:DISP	EQU	*
	LDR	A3,A4	RETURN CODE
* 
T:DIS2	EQU	*
	ABL	TIOERR	SET RETURN CODE, QUEUE TASK AND DISP. 
* 
	EJECT			TIOFM
* 
* 
**********
* FMACTX *
**********
* 
* 
*   FILE ADMINISTRATION REQUESTED.
* 
*   ACTIVATE FMTASK WITH THE FOLLOWING PARAMETERS:
* 
*   A1 = ORDER CODE AND OPTION (RFP/OPEN/CLOSE) 
*      = PARAMETER BLOCK ADDRESS (SPLIT I/O)
*   A3 = TTAB ADDRESS OF CALLING TASK 
*   A4 = FUNCTION INDEX (0 = RFP, 2 = OPEN, 4 = CLOSE, 6 = SPLIT I/O) 
* 
FMACT1	EQU	*	ACTIVATE CLOSE FUNCTION
	ADK	A4,2	FUNCTION INDEX
* 
FMACT2	EQU	*	ACTIVATE OPEN FUNCTION 
	ADK	A4,2	FUNCTION INDEX
* 
FMACT3	EQU	*	ACTIVATE READ FILE PARAMETERS FUNCTION 
	ECR	A1,A7	ORDER CODE AND OPTION
* 
FMACT4	EQU	*	ACTIVATE SPLIT I/O FUNCTION
	LDKL	A2,FMTASK	DISPATCH ADDRESS
	LDR	A3,A5	TTAB ADDRESS OF CALLING TASK 
	LDKL	A5,TTABFM	FMTASK TTAB ADDRESS 
	ABL	ACTDIS	ACTIVATE FMTASK AND DISPATCH
* 
	EJECT			TIOFM
* 
* 
**********
* FM I/O *
**********
* 
*	FILE MANAGEMENT I/O FUNCTIONS 
* 
FM:IO	EQU	*	BASIC AND PHYSICAL READ/WRITE 
	CF	A15,FCHECK	FIND FWT AND CHECK ACCESS PARAMETERS 
* 
	IFT	ATTDET=1 
	RF(Z)	FM:050	OK
* 
FM:030	EQU	*
	CWK	A4,/40 
	RB(NE)	T:DISP	ERROR, RETURN
* 
*	FILE ATTACHED, QUEUE REQUEST
* 
	ADKL	A6,FWTQUE	QUEUE ANCHOR ADDRESS
	LDK	A4,0	NO ACT LABEL AT LKM 
	ABL	QUEFIL	QUEUE REQUEST AND GO TO TDISP 
	XIF
* 
	IFT	ATTDET=0 
	RB(NZ)	FM:RQE	ERROR
	XIF
* 
	EJECT			TIOFM
* 
*	CHECK RELATIVE SECTOR NUMBER
* 
FM:050	EQU	*
	IFT	MMUPAG=0 
	IFT	CPU852=1 
	LD	A2,ECBCW2,A8	RELATIVE SECTOR NUMBER 
	LD	A1,ECBCW1,A8
	XIF
* 
	IFT	MMUPAG=0 
	IFT	CPU852=0 
	ML	2,ECBCW1,A8	RELATIVE SECTOR NUMBER
	XIF
* 
	IFT	MMUPAG=1 
	EL	A2,ECBCW2,A8	RELATIVE SECTOR NUMBER 
	EL	A1,ECBCW1,A8
	XIF
* 
	RF(NZ)	FM:060
	ADK	A2,0 
	RF(Z)	FM:ER2	RELATIVE SECTOR NUMBER = 0
* 
FM:060	EQU	*
	LDR	A3,A6	FWT ADDRESS
	ECR	A6,A1
	ANK	A6,/FF 
	RF(NZ)	FM:ER2	ILLEGAL RELATIVE SECTOR NUMBER 
	LDR	A9,A7	SAVE ORDER CODE
	ADKL	A3,FWTEW1  	ADDRESS TO 1ST EWT STRUCTURE
	LDKL	A14,/7FFF 
* 
	EJECT			TIOFM
* 
*	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:ER2	EQU	*	FILE MANAGEMENT EXTENT ERROR EXIT
	LDK	A3,/A0	RETURN CODE 
	RB	FM:ER1	RETURN 
* 
	EJECT			TIOFM
* 
*	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
	DSK	0,1
	XIF
* 
	IFT	CPU852=1 
	ADR	A1,A10	COMPUTE SECTOR NUMBER 
	ADR	A2,A11 
	RF(O)	FM:140	OVERFLOW
* 
FM:110	EQU	*
	SUK	A2,1 
	RF(NN)	FM:115	NOT UNDERFLOW
	SUK	A1,1	UNDERFLOW CORRECTION
	ANR	A2,A14	SKIP SIGN BIT 
	XIF
* 
	EJECT			TIOFM
* 
* 
FM:115	EQU	*
	LDR	A12,A1	SAVE SECTOR NUMBER
	LDR	A13,A2 
* 
	IFT	MMUPAG=0 
	LC	A3,ECBRL,A8	REQUESTED LENGTH (SECTORS)
	ANK	A3,/FF 
	XIF
* 
	IFT	MMUPAG=1 
	EL	A3,ECBRL,A8	REQUESTED LENGTH (BYTES)
	SRL	A3,8	SECTORS 
	XIF
* 
	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
	RF(L)	FM:170	ALL SECTORS NOT WITHIN THIS EXTENT
	CWR	A7,A2
	RF(L)	FM:170	ALL SECTORS NOT WITHIN THIS EXTENT
* 
	EJECT			TIOFM
* 
*	PREPARE PARAMETERS FOR DISC I/O 
* 
*	EXIT PARAMETERS:
* 
*	A2 = DISC INDEX (FROM FNDDWD) 
*	A4 = 0 (INDICATES NO 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 NO I/O-AND-ACTIVATE
	LD	A1,DWTST,A6	DWT STATUS
	ABL(NN)	QUEDEV	DISC BUSY, QUEUE REQUEST
	LDR	A7,A9	RESTORE ORDER CODE 
* 
	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			TIOFM
* 
*	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			TIOFM
* 
*	REQUESTED SECTORS CONTINUE IN NEXT EXTENT.
* 
*	ACTIVATE FMTASK WITH THE FOLLOWING PARAMETERS:
* 
*	A1 = PARAMETER BLOCK ADDRESS
*	A3 = TTAB ADDRESS OF CALLING TASK 
*	A4 = FUNCTION INDEX (=6)
* 
FM:170	EQU	*
	IFT	MULEXT=1 
	IFT	MMUPAG=0 
	ST	A12,ECBCW1,A8	SET SECTOR NUMBER IN ECB
	ST	A13,ECBCW2,A8 
	XIF
* 
	IFT	MULEXT=1 
	IFT	MMUPAG=1 
	ES	A12,ECBCW1,A8	SET SECTOR NUMBER IN ECB
	ES	A13,ECBCW2,A8 
	XIF
* 
	IFT	MULEXT=1 
	SUR	A7,A13	NO OF SECTORS IN FIRST I/O
	ANR	A7,A14	SKIP SIGN BIT JUST IN CASE
* 
*	PREPARE PARAMETER BLOCKS FOR FMTASK 
* 
	LDR	A1,A9	ORDER CODE 
	LDR	A2,A4	2ND EWT BLOCK
	ECR	A3,A7	NO OF BYTES IN FIRST I/O 
	CF	A15,GETBLK	PARAMETER BLOCK
	LDR	A1,A4	PARAMETER BLOCK ADDRESS
	LDK	A4,6	FUNCTION INDEX FOR SPLIT I/O
	RB	FMACT4	ACTIVATE FMTASK
	XIF
* 
	IFT	MULEXT=0 
	RB	FM:ER2	REQUEST ERROR
	XIF
* 
	EJECT			TIOFM
* 
* 
**********
* FCHECK *
* FCHEC2 *
**********
* 
* 
*   FCHECK/FCHEC2 CONVERTS THE FILE NUMBER TO FWT 
*   ADDRESS AND CHECKS THE ACCESS PARAMETERS. 
* 
*   INPUT:  A5 = TTAB ADDRESS 
*           A7 = ORDER CODE 
*	   A8 = ECB ADDRESS (FCHECK ONLY) 
*	   A9 = ECB ADDRESS (FCHEC2 ONLY) 
* 
*   OUTPUT: CR = 0 IF OK, ELSE
*             <> 0 IF ERROR 
*           A4 = RETURN CODE
*           A6 = FWT ADDRESS (=0 IF REQUEST ERROR)
*	   A7 = ORDER CODE (MODIFIED TO BASIC IF REQUESTED) 
*	   A9 = ECB ADDRESS 
*	   A2 IS DESTROYED
* 
FCHECK	EQU	*	FCHECK MAIN ENTRY
	LDR	A9,A8	ECB ADDRESS
* 
FCHEC2	EQU	*	FCHECK 2ND ENTRY 
	IFT	MMUPAG=0 
	LDR*	A4,A9	FILE NUMBER 
	XIF
* 
	IFT	MMUPAG=1 
	ELR	A4,A9	FILE NUMBER
	XIF
* 
	EJECT			FMTASK 
* 
*	CHECK FILE NUMBER AND FIND FWT
* 
	ADKL	A15,4	ADJUST STACKPOINTER 
	ANK	A4,/FF 
	RF(Z)	FC:050	FILE NUMBER = 0 
	CW	A4,SCTNOF 
	RF(G)	FC:050	FILE NUMBER TOO BIG 
	LDKL	A6,SCTFWT	ADDRESS TO FWT CHAIN POINTER
* 
FC:010	EQU	*	COMPUTE FWT ADDRESS
	LDR*	A6,A6	NEXT FWT ADDRESS
	SUK	A4,1 
	RB(P)	FC:010 
* 
*	CHECK ACCESS PARAMETERS 
* 
	ANKL	A6,/FFFE	CORRECT FWT ADDRESS JUST IN CASE 
	LD	A2,FWTVTC,A6	VTOC SECTOR NO (FIRST EXTENT)
	RF(Z)	FC:050	FILE NOT OPENED 
	LD	A2,FWTPAR,A6	ACCESS PARAMETERS
	RF(N)	FC:070	NEW VOLUME LOADED 
	SLL	A2,1 
	RF(NN)	FC:020	PHYSICAL ORDERS
	ANK	A7,/85	BASIC ORDER 
* 
FC:020	EQU	*
	IFT	ATTDET=1 
	LD	A2,FWTTAB,A6	ATTACH WORD (TTAB ADDRESS) 
	ABR(Z)*	A15	NOT ATTACHED, RETURN 
	CWR	A2,A5	ATTACHED, CHECK IF THIS TASK 
	RF(NE)	FC:060	ATTACHED TO ANOTHER TASK 
	XIF
* 
	IFT	ATTDET=0 
	SUR	A2,A2	SET CR = 0 
	XIF
* 
	ABR*	A15	RETURN WITHOUT CHANGING CR
* 
	EJECT			TIOFM
* 
*	ERROR RETURNS 
* 
FC:050	EQU	*	REQUEST ERROR EXIT 
	LDKL	A4,/7FC0	RETURN CODE = /8000
	LDK	A6,0	INDICATE NO FWT FOUND 
* 
FC:060	EQU	*	FILE ATTACHED EXIT 
	ADK	A4,/20	RETURN CODE = /40 
* 
FC:070	EQU	*	NEW VOLUME LOADED EXIT 
	ADK	A4,/20	RETURN CODE = /20 
	ABR*	A15	RETURN WITHOUT CHANGING CR
* 
	EJECT			TIOFM
* 
* 
**********
* DET:FM *
**********
* 
*   INPUT:  A6 = FWT ADDRESS
* 
*   OUTPUT:A10 = TTAB ADDRESS OF ATTACHED TASK
*           A1 IS DESTROYED 
* 
DET:FM	EQU	*	DETACH FILE
	IFT	ATTDET=1 
	LD	A10,FWTTAB,A6	TTAB ADDRESS OF ATTACHED TASK 
	RF(Z)	DET:30	NOT ATTACHED
	LD	A5,FWTQUE,A6	QUEUE ANCHOR FOR FILE I/O REQUESTS 
	RF(Z)	DET:20	NO MORE TASKS IN QUEUE
* 
*	REPEAT ALL QUEUED REQUESTS FOR THIS FILE
* 
DET:10	EQU	*
	LDR*	A1,A5	SAVE NEXT TTAB ADDRESS
	CF	A15,QTJOB	QUEUE TASK FOR DISPATCHING
	LDR	A5,A1	RESTORE NEXT TTAB ADDRESS
	RB(NZ)	DET:10
	CM	FWTQUE,A6	RESET QUEUE ANCHOR
* 
DET:20	EQU	*
	LDR	A5,A10	RESTORE TTAB ADDRESS
	CM	FWTTAB,A6	RESET ATTACH WORD 
* 
DET:30	EQU	*
	RTN	A15
	XIF
* 
	END

Full view