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

⟦3487364be⟧

    Length: 23758 (0x5cce)
    Notes: pts_type(SC)
    Names: »TIODM.SC«

Derivation

└─⟦35fda6e03⟧ Bits:30009701 Philips computer tape "BARCLAY"
    └─⟦this⟧ »M:DEMO/TIODM.SC« 

PTS(SC)

	IDENT TIODM 	REL 10.0 80-03-14 870105041000

			=1, COMMIT CHECK 
			79-11-02 
****************************************************
* 
*   PHILIPS TERMINAL SYSTEM  PTS
* 
*   TIODM  = DATA MANAGEMENT ACTIVATION PART
* 
* 
* 
* 
* 
* 
****************************************************
* 
*   THIS MODULE IS ENTERED IN THE SAME WAY AS A DRIVER VIA TIO
*   AND THE DWTADR IN FDB FOR CURRENT FILE
* 
*   THE DM REQUEST IS PROCESSED HERE UP TO THE POINT WHERE A SECTOR 
*   FROM A DISC MUST BE ACCESSED
* 
*   ENTRY   TIODM      AND TIODM HOLDS THE START ADDRESS
* 
* 
*   INPUT   A6 = FWT ADDRESS
*           A7 = ORDER WORD WITH W BIT = 0
*           A8 = ECB ADDRESS
* 
* 
* 
*   IN ALL DM MODULES FDB WILL BE THE SAME AS FWT 
* 
*   THE FOLLOWING WORDS WILL BE SET IN THE FDB: 
*   FDBSNR   SECTOR NUMBER IN FILE
*   FDBRRO   RELATIVE RECORD OFFSET IN BLOCK
*   FDBTNR   TASK NUMBER FOR CALLING TASK 
*   FDBCEX   CURRENT EXTENT BLOCK POINTER 
* 
* 
*   IF AN ERROR CONDITION IS DETECTED THE ERROR RETURN WILL BE: 
*   LDKL   A1,/<RETURN CODE>
*   ABL    DISEND 
* 
* 
	EJECT
* 
**************
*   ENTRIES  *
**************
* 
	ENTRY	TIODM	REFERENCED IN DWTADR 
	ENTRY	FDBECB 
	ENTRY	FDBSNR 
	ENTRY	FDBRRO 
	ENTRY	FDBRLE 
	ENTRY	FDBBLF 
	ENTRY	FDBTNR 
	ENTRY	FDBLRN 
	ENTRY	FDBNIF,FDBEAL,FDBCRL,FDBKA,FDBMIA,FDBADF 
	ENTRY	FDBAI1,CRNTID,CRNCDF,CRNSTA
	ENTRY	FDBBLZ	 BLOCK SIZE 
	ENTRY	FDBDMI	DMTASK IDENT
	ENTRY	FDBDBR,FDBMRO
	ENTRY	FDBMEC	MMU ECB DISPLACEMENT
	ENTRY	FDBKEY	SAVE AREA FOR KEY IN INDEXED ACCESS 
	ENTRY	TASHLT,FDBSTA,DWDM01 
	ENTRY	REQER2 
	ENTRY	RETRIE,EOMERR,NOKEY,NXTKYS,EOFRC,NODERR
	ENTRY	PROT,KEYERR,PROERR,REQERR,LGTERR 
	ENTRY	EOFERR,EDMERR
	EJECT
	EXTRN	SCTTCT 
	EXTRN	RELPRO 
	EXTRN	TDISP
	EXTRN	HALT 
	EXTRN	FNDTID 
	EXTRN	ACTOT
	EXTRN	DISEND 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTOR	DWT INDEX AND ORDER
	EXTRN	DWTOPT	OPTION BYTE 
	EXTRN	DWTTAB	DM TASK TTAB ADDRESS
	EXTRN	TTB:ID	TASK ID 
	EXTRN	MOVZUS,MOVZSU
	EXTRN	DMTASK 
	EXTRN	CALSNO 
	EXTRN	ECBFC
	EXTRN	ECBBA
	EXTRN	ECBRL
	EXTRN	ECBEL
	EXTRN	ECBRC
	EXTRN	ECBCW
	EXTRN	EARELB,CRNGET,EATEST 
	EXTRN	EWTVOL,EWTSEX,EWTEXL,EWTEXB,EWTLNK 
	EXTRN	FWTEW1 
	EXTRN	FWTFNR	FILE NR 
	EXTRN	FNDFDB	DMTASK ROUTINE
	EXTRN	FPB:FR 
	EXTRN	TTB:SA,QTJOB 
	EXTRN	DMTBM
	EXTRN	DMTIDS 
	EXTRN	DFTAB,FWTVOL 
	EXTRN	CRNCIF	INDEX CURRENCY OFFSET 
	EJECT
* 
************************
* CONDITIONAL ASSEMBLY *
************************
* 
* 
*   A VERSION CONTAINING INDEXED REQUEST ORDERS IS OBTAINED 
*   BY SETTING INDXAC EQU 1 
*              INDXAC EQU 0 OTHRERWISE
X:A	EQU	0 
INDXAC	EQU	00001
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	1
* 
	EJECT
* 
*   ERROR CODES 
* 
EOMERR	EQU	/A000	OUTSIDE MEDIUM LIMITS
PROT	EQU	/0040	THIS DATA PROTECTED
NODERR	EQU	/8800	NO EXPECTED DATA 
KEYERR	EQU	/8400	EXPECTED KEY NOT FOUND 
PROERR	EQU	/0010	ROLLBACK FOR PROTECT REASONS 
REQERR	EQU	/8000	GENERAL REQUEST ERROR
REQER2	EQU	/FFFE	REQUEST ERROR
LGTERR	EQU	/0008	INCORRECT LENGTH 
EDMERR	EQU	/8080	DATA MANAGEMENT ERROR
EOFERR	EQU	/9000	END OF FILE
* 
*   MESSAGES
* 
RETRIE	EQU	/0100	DISC RETRIES 
NOKEY	EQU	/0400	NOT SEARCHED KEY
NXTKYS	EQU	/0200	NEXT KEY SAME
EOFRC	EQU	/1000	END OF FILE 
* 
FCUSED	EQU	7	INVALID FILE CODE
	EJECT
* 
************************
*   DATA DEFINITIONS   *
************************
* 
* 
* 
* 
TIODMF	EQU	*	TIODM FUNCTION TABLE 
	DATA	READ	DIRECT RANDOM
	DATA	READ	SEQUENTIAL 
	IFT	INDXAC=1 
	DATA	READ	INDEXED
	DATA	READ	INDEXED NEXT 
	XIF
	IFT	INDXAC=0 
	DATA	TIOD19,TIOD19 
	XIF
	DATA	WRITE	DIRECT RANDOM 
	DATA	WRITE	SEQUENTIAL
	IFT	INDXAC=1 
	DATA	WRITE	INDEXED INSERT
	XIF
	IFT	INDXAC=0 
	DATA	TIOD19
	XIF
	DATA	WRITE	(RESERVED)
	DATA	REWRIT	REWRITE DIRECT 
	IFT	INDXAC=1 
	DATA	REWRIT	REWRITE INDEXED
	XIF
	IFT	INDXAC=0 
	DATA	TIOD19
	XIF
	DATA	DELETE	DIRECT 
	IFT	INDXAC=1 
QDEL	EQU	*-TIODMF 
	DATA	DELETE	INDEXED
	XIF
	IFT	INDXAC=0 
	DATA	TIOD19
	XIF
QSTA	EQU	*-TIODMF 
	DATA	STARTO	START DIRECT 
	IFT	INDXAC=1 
	DATA	STARTO	START INDEXED
	XIF
	IFT	INDXAC=0 
	DATA	TIOD19
	XIF
* 
*   FOLLOWING FILE ADMINISTRATION FUNCTIONS MUST ALWAYS BE PLACED 
*   AT THE END OF TIODMF DEP ON TEST PERFORMED AFTER LABEL TIOD68 
* 
OPENOF	EQU	*-TIODMF 
	DATA	OPEN
CLOSOF	EQU	*-TIODMF 
	DATA	CLOSE 
RDSTOF	EQU	*-TIODMF 
	DATA	RDSTAT	READ STATUS
RDFPOF	EQU	*-TIODMF 
	DATA	RDFILP	READ FILE PARAMETERS 
	EJECT
* 
TIODMO	EQU	*	DM ORDERS
	DATA	/02FF	READ
	DATA	/FFFF 
	DATA	/06FF	WRITE 
	DATA	/FFFF 
	DATA	/07FF	REWRITE 
	DATA	/08FF	DELETE
	DATA	/0BFF	START 
	DATA	/2122	OPEN,CLOSE
	DATA	/0003	READ STATUS,READ FILE PARAMETERS
* 
NOOFOR	EQU	18	NO OF ORDER CODES 
* 
	EJECT
* 
DWTDRD	EQU	42	START OF NON-STANDARD DWT PART
* 
	IFT	MMUPAG=0 
START	EQU	DWTDRD-2	DWTTDM EXTINGUISHED
	XIF
* 
	IFT	MMUPAG=1 
START	EQU	DWTDRD+2	DWTTDM EXTINGUISHED
	XIF
	EJECT
* 
*   FDB OFFSET DEFINITIONS
* 
FDBSTA	EQU	*
DWDM01	EQU	*
	DATA	0,/8000,0,0,TIODM,0,0,0	DWT STANDARD
	IFT	MMUPAG=1 
	DATA	0,FDBMMU	SPECIAL DWT ITEMS
	XIF
	DATA	0,0,0,0 
	DATA	0,0,0,0,0,0,0,0,0	FWT PART
	DATA	0,0,0,0,0,0,0,0,0 
	DATA	0,0,0,0,0,0,0,0,0 
	DATA	FDBSTA	FDBADF 
	DATA	0,0,0,0,0,0,0	54,BYTE FDB AREA SYSTEM FDB 
	IFT	MMUPAG=1 
FDBMMU	RES	7	MMU ECB AREA 
	XIF
	EJECT
FDBECB	EQU	START+2	ECB START
FDBSNR	EQU	START+16	SECTOR NUMBER 
FDBRRO	EQU	START+20	RELATIVE RECORD OFFSET
FDBRLE	EQU	START+22	RECORD LENGTH 
FDBBLF	EQU	START+24	BLOCKING FACTOR 
FDBTNR	EQU	START+25	TASK NUMBER CALLING TASK
FDBLRN	EQU	START+27	LAST RECORD NUMBER
FDBNIF	EQU	START+26	NO OF INDEX FILES 
FDBEAL	EQU	START+30	EA LINK ROOT
FDBCRL	EQU	START+32	CRN LINK ROOT 
FDBKA	EQU	START+34	KEY ADDRESS IN DATA FILE 
FDBMIA	EQU	START+36	ADDRESS OF MASTER INDEX 
FDBADF	EQU	START+38	ADDRESS OF DATA FILE FDB
FDBAI1	EQU	START+40	ADDRESS OF INDEX FILE FDB 
FDBDBR	EQU	START+48	DELAY,BASIC AND REL BUFFER FLAGS
FDBDMI	EQU	START+49	RELATIVE DMTASK ID
FDBMRO	EQU	START+50	MAX FDBRRO
FDBBLZ	EQU	START+52	NR OF SECT IN BLOCK 
FDBMEC	EQU	START+54	MMU ECB DISPLACEMENT
	IFT	MMUPAG=1 
FDBKEY	EQU	START+68	SAVE AREA FOR KEY IN INDEXED ACCESS 
	XIF
	IFT	MMUPAG=0 
FDBKEY	EQU	START+54	KEY AREA FOR INDEXED ACC
	XIF
* 
*   CRN BUFFER OFFSET DEFINITIONS 
* 
CRNTID	EQU	2	TASK ID
CRNSTA	EQU	3	CURRENT STATUS 
CRNCDF	EQU	4	CURRENT DATA FILE
	EJECT
	DATA	0	DATA MANAGEMENT DEVICE INDEX
TIODM	DATA	*+2	TIODM START ADDRESS
* 
*   SET UP A14 STACK
* 
	LDKL	A14,FDBECB
	ADKL	A14,ECBCW 
	ADR	A14,A6	USE ECB AS STACK
	ENB
* 
*   GET CALLING TASK NUMBER AND STORE IT IN FDBTNR
* 
	LDK	A2,0 
TIOD05	LD	A1,SCTTCT 
	ADR	A1,A2
	LD	A3,2,A1 
	CW	A3,DWTTAB,A6
	RF(E)	TIOD10	THIS TASK 
	ADK	A2,2	NO
	RB	TIOD05	TRY NEXT 
TIOD10	EQU	*
	SC	A2,FDBTNR,A6	USER TASK NR 
*   CHECK ORDER IN A7 
*   PUT ORDER INDEX IN DWTOR RIGHT BYTE 
* 
	LD	A7,DWTOR,A6	ORDER WORD
	LDR	A5,A7
	ANKL	A5,/C0C0	SOME BITS FORBIDDEN
	RF(NZ)	TIOD19	ERR
	LD	A5,FDBBLZ,A6		=1
	ANK	A5,/FF		=1 
	RF(NZ)	TIOD19	COMMIT MISSING	=1
	LDK	A5,NOOFOR-1	NO OF ORDERS - 1 
TIOD15	CC	A7,TIODMO,A5	START AT END OF TIODMO 
	RF(E)	TIOD20	MATCH 
	SUK	A5,1 
	RB(NN)	TIOD15	>= 0 
TIOD19	EQU	*
	LDKL	A1,REQERR 
	ABL	TIODMX	ERR 
TIOD20	EQU	*
	SLL	A5,1	*2
	SC	A5,DWTOR+1,A6	SAVE ORDER INDEX
	CWK	A6,FDBSTA
	RF(NE)	TIOD25	NOT SYSTEM FWT 
	CWK	A5,RDSTOF
	RF(E)	TIOD25	READ STATUS 
	CWK	A5,OPENOF
	RB(NE)	TIOD19	NOT OPEN 
TIOD25	EQU	*
	LDR	A1,A6	FDB ADDR 
	CF	A14,CRNGET	CURRENCY 
	LDK	A3,0	NEW STATUS
	LC	A4,CRNSTA,A2	OLD STATUS 
	SC	A3,CRNSTA,A2
	ABI	TIODMF,A5	BRANCH TO DM FUNCTION
* 
*   A1 = FDB ADDRESS DATA FILE
*   A2 = CURRENCY BUFFER ADDRESS
*   A4 = OLD STATUS IN RIGHT BYTE 
*   A5 = ORDER CODE AT ENTRY TO TIODM 
*   A6 = FDB ADDRESS FILE DEVICE USER QUEUE 
*   A7 = USER ORDER WORD
*   A8 = USER ECB ADDRESS 
	EJECT
RDSTAT	EQU	*	READ STATUS
	SC	A4,CRNSTA,A2	STATUS CHAR
	ANK	A4,/FF 
	ST	A4,ECBCW,A8	RETURN STATUS 
	CM	ECBCW+2,A8
	LDK	A1,0	RET CODE OK 
	ABL	TIODMX 
	EJECT
READ	EQU	*	READ ORDERS
	LDKL	A3,/100 
	TM	A3,A7	TEST BIT
	RF(NZ)	READDI	OPTION DIRECT
	LDKL	A3,/700 
	TM	A3,A7 
	RB(NZ)	TIOD19	NOT OPTION SEQUENTIAL
	SRL	A7,10	INDEX * 2
	ABL(Z)	SEQREA	SEQ READ 
	ABL	IXRDNX	INDEXED SEQ READ NEXT 
READDI	EQU	*	DIRECT READ
	SRL	A7,10	INDEX * 2
	ABL(Z)	RANREA	DIRECT RANDOM READF
	RF	IXRARE	INDEXED DIRECT READ
	IFT	INDXAC=0 
	EJECT
IXRDNX	EQU	*
IXRARE	EQU	*
IXINS	EQU	* 
	RB	TIOD19
	XIF
	EJECT
WRITE	EQU	*	WRITE ORDERS
	LC	A3,FDBDBR,A6
	ANK	A3,/3	SHARABILITY
	RB(Z)	TIOD19	ONLY INPUT ACCEPTED 
	LDKL	A4,/100 
	LC	A3,FDBNIF,A6	NR OF INDEXES
	ANK	A3,/FF 
	RF(NZ)	WRITE2	INDEXED
	TM	A4,A7	
	ABL(NZ)	TIODMB	DIRECT
	ANKL	A7,/700 
	ABL(Z)	SEQWRI	SEQUENTIAL WRITE 
	RB	TIOD19	ERR
WRITE2	EQU	*	INDEXED
	TM	A4,A7 
	ABL(NZ)	IXINS	INDEXED INSERT 
	RB	TIOD19	NOT ALLOWED
	EJECT
REWRIT	EQU	*	REWRITE ORDERS 
* 
DELETE	EQU	*	DELETE ORDERS
* 
	LC	A3,FDBDBR,A6
	ANK	A3,/3	SHARABILITY
	RB(Z)	TIOD19	ONLY INPUT ALLOWED
	LC	A3,FDBNIF,A6	NR OF INDEX
	ANK	A3,/FF 
	RF(Z)	REW010	NO INDEX
	LDK	A3,2 
	ADS	A3,DWTOR,A6	ORDER INDEX
REW010	EQU	*
	LDKL	A4,/400 
	TM	A4,A7 
	RF(NZ)	REW020	CURRENT
	SRL	A7,8 
	SUK	A7,1 
	RB(NZ)	TIOD19	ERROR
	ABL	TIODMB	DIRECT
REW020	EQU	*
	ANKL	A7,/300 
	RB(NZ)	TIOD19	ERR
	LD	A3,CRNCDF+2,A2
	LD	A2,CRNCDF,A2	REC NR (NO FILE ID FOR DATA FILE)
	ABL	TIODMA 
	IFT	INDXAC=1 
	EJECT
STAIND	EQU	*	START INDEXED
	SRL	A7,10	INDEX * 2
	LD	A9,ECBRL,A8	KEY LENGTH
	LDK	A1,2 
	RF	STA090
	EJECT
IXRARE	EQU	*	INDEXED RANDOM READ
	LDK	A1,4 
	LDKL	A9,/40	MAX KEY LENGTH 
STA090	EQU	*	START ORDER
	ADS	A1,DWTOR,A6	ORDER INDEX
	SUK	A7,2 
	LDR	A2,A7
	ANKL	A2,/FFF9	1-4 INDEXES
	RB(NZ)	TIOD19	ERROR
	ADR	A7,A6	BASE IN DATA FDB 
	LD	A2,FDBAI1,A7	INDEX FDB ADDR 
	ABL(Z)	TIOD19	ERR
	LDR	A7,A2
* 
*   COPY DWT ITEMS
* 
	LD	A1,DWTECB,A6	 
	ST	A1,DWTECB,A2
	LD	A1,DWTOR,A6 
	ST	A1,DWTOR,A2 
*   PUT ZEROES TO KEY AREA
* 
	LD	A1,FDBRLE,A2
	SUK	A1,6	KEY LENGTH
IXR050	EQU	*
	CM	FDBKEY,A2 
	ADK	A2,2 
	SUK	A1,2 
	RB(P)	IXR050	MORE TO CLEAR 
	EJECT
* 
*   FETCH KEY TO INDEX FDB
* 
	LD	A1,ECBBA,A8	RECORD ADDR 
	AD	A1,FDBKA,A7	KEY ADDR
	LDK	A3,FDBKEY
	ADR	A3,A7	TO ADDR
* 
*   KEY LGTH IS MIN OF A9 AND RECLGTH - 6 
* 
	LD	A2,FDBRLE,A7
	SUK	A2,6	MAX KEY LGTH
	CWR	A2,A9
	RF(NG)	IXR070	 
	LDR	A2,A9	TAKE SMALLEST LGTH 
IXR070	EQU	*
	LDR	A9,A2	SAVE 
	IFT	MMUPAG=0 
	CF	A14,DMTBM	FETCH KEY 
	XIF
	IFT	MMUPAG=1 
	IFT	INDXAC=1 
	LDR	A4,A2
	LDR	A2,A3	TO ADDR
	LDR	A3,A4	LGTH 
	CF	A14,MOVZUS
	XIF
	IFT	INDXAC=1 
* 
*   INCREASE KEY IF 'START GREATER ' IS REQ 
* 
	CWK	A5,QSTA
	RF(NE)	STA020	NOT START
	LC	A2,DWTOPT,A7
	ANK	A2,/7	OPTION 
	SUK	A2,1 
	RF(NZ)	STA020	NOT GREATER
	LDR	A2,A7
	ADKL	A2,FDBKEY	ADDR FIRST BYTE 
	LDR	A3,A9	LGTH 
	ADR	A3,A2
STA010	EQU	*
	SUK	A3,1	ADDR LAST  BYTE 
	LCR	A1,A3
	ADK	A1,1	NEXT HIGHER KEY 
	SCR	A1,A3
	ANK	A1,/FF	OVERFLOW ?
	RF(NZ)	STA020	NO 
	CWR	A2,A3
	RB(NE)	STA010	MORE BYTES 
STA020	EQU	*
* 
*   SWITCH TO INDEX FDB 
* 
	LDR	A6,A7	INDEX FDB
	RF	TIORRO
	XIF
	EJECT
OPEN	EQU	*
	CWK	A6,FDBSTA
	RF(E)	OPE050	FILE CODE FREE
	LDKL	A1,EDMERR 
	LDK	A4,FCUSED	FC USED
	SC	A4,CRNSTA,A2	STATUSA
	ABL	TIODMX 
OPE050	EQU	*
	LDK	A1,LGTERR
	LDKL	A4,FPB:FR+8	MIN LGTH
	CW	A4,ECBRL,A8	REQ 
	ABL(G)	TIODMX	ERR
TIORRO	EQU	*
	LDKL	A4,-1 
	ST	A4,FDBRRO,A6	MARK ORDER TYPE
	ABL	TIOD68	ACTIVATE DMTASK 
* 
RDFILP	EQU	*	READ FILE PARAMETERS 
	LD	A3,CRNCDF+2,A2
	LD	A2,CRNCDF,A2	CURRENT RECORD 
	ST	A2,ECBCW,A8 
	ST	A3,ECBCW+2,A8 
	RB	TIORRO
	EJECT
CLOSE	EQU	*	CLOSE FILE
* 
*   CONNECT FILE CODE TO SYSTEM FWT 
* 
	LD	A1,DWTTAB,A6	USER TTAB ADDR 
	LDR*	A2,A8 
	ANK	A2,/FF	FILE CODE 
	LDK	A5,0	SEARCH TTAB AND CDTAB 
	CF	A14,FNDFDB	SEARCH 
	LDKL	A2,FDBSTA	SYSTEM FWT ADDR 
	ST	A2,2,A4	FC ENTRY
	LDK	A2,0 
	LC	A2,FDBLRN,A6
	LD	A3,FDBLRN+1,A6	LAST RECORD NR 
	RF(NZ)	CLO100
	LDR	A2,A2
	RF(NZ)	CLO100
	LDK	A3,1	LRN 
CLO100	EQU	*
	RF	TIODMD
	EJECT
SEQREAD	EQU	*	SEQUENTIAL READ 
	LDK	A1,2 
	ADS	A1,DWTOR,A6	ORDER INDEX
	LD	A3,CRNCDF+2,A2	CURR LOG REC NO
	LD	A2,CRNCDF,A2	NO FILE ID FOR DATA FILE 
	ADK	A3,1	CRN+1 
	RF(O)	SEQR10	OVERFLOW
	RF	SEQR20
SEQR10	EQU	*
	ANKL	A3,/7FFF	REMOVE OVERFLOW
	ADK	A2,1	ADD CARRY 
SEQR20	EQU	*
	RF	RAN050
	EJECT
RANREAD	EQU	*	RANDOM READ 
* 
* 
*   TEST IF ECBRL <= 0
* 
	LD	A2,ECBCW,A8	REC NR
	LD	A3,ECBCW+2,A8 
RAN050	EQU	*
	LDK	A1,LGTERR	INCORRECT LENGTH 
	LD	A4,ECBRL,A8 
	ABL(NP)	TIODME	ERROR RETURN IF RL <= 0 
	RF	TIODMA
	EJECT
	IFT	INDXAC=1 
IXINS	EQU	*	INDEXED INSRERT 
	LDK	A2,2 
	ADS	A2,DWTOR,A6	ORDER INDEX
	IFT	MMUPAG=1 
* 
*   MOVE KEYS TO FDB KEY AREAS
* 
	LDK	A5,8 
IXINS3	EQU	*
	LDR	A2,A6	FDB DATA 
	ADR	A2,A5
	LD	A3,FDBADF,A2	FDB INDEX
	RF(Z)	IXINS4	NO INDEX
	LD	A1,FDBKA,A3	KEY ADDR
	AD	A1,ECBBA,A8	ADD USER BUF ADDR 
	LDK	A2,FDBKEY	KEY AREA DISPL 
	ADR	A2,A3	ADD FDB ADDR 
	LD	A3,FDBRLE,A3	REC LGTH 
	SUK	A3,6	KEY LGTH
	CF	A14,MOVZUS	KEY TO FDB AREA
IXINS4	EQU	*
	SUK	A5,2 
	RB(NZ)	IXINS3	MORE INDEXS
	XIF
* 
SEQWRITE	EQU	*	SEQUENTIAL WRITE 
* 
	LDK	A2,2 
	ADS	A2,DWTOR,A6	ORDER INDEX
	LC	A2,FDBLRN,A6
	LD	A3,FDBLRN+1,A6	LRN
	IFT	INDXAC=1 
	RF	IXR020	STORE LOG REC NO 
	EJECT
IXRDNX	EQU	*	INDEXED EREAD NEXT 
	LDR	A4,A2	CRN BUFFER ADDR
	LDK	A1,6 
	ADS	A1,DWTOR,A6	ORDER INDEX
	SUK	A7,2 
	LDR	A2,A7
	ANKL	A2,/FFF9	1-4 INDEXES
	ABL(NZ)	TIOD19	ERR 
	LD	A2,DWTOR,A6 
	LD	A3,DWTECB,A6	ITEMS TO INDEX FDB 
* 
*   SWITCH FDB
* 
	ADR	A7,A6
	LD	A7,FDBAI1,A7	INDEX FDB ADDR 
	ABL(Z)	TIOD19	ERR
	LDR	A6,A7
	ST	A2,DWTOR,A6 
	ST	A3,DWTECB,A6	ITEMS FROM DATA FILE 
* 
*   GET CRN 
* 
	LDK	A2,0 
	LDK	A3,0 
* 
*   CHECK THAT FILE ID IS OK
* 
	LC	A7,FWTFNR,A6	FILE NR
	CC	A7,CRNCIF,A4
	RF(NE)	IXR020	OTHER INDEX FILE IS CURRENT
	LC	A2,CRNCIF+1,A4
	LD	A3,CRNCIF+2,A4	LOG REC NO 
	XIF
	EJECT
IXR020	EQU	*
	ADK	A3,1 
	RF(O)	IXR030	OVERFLOW
	RF	IXR040
IXR030	ANKL	A3,/7FFF	REMOVE OVERFLOW BIT
	ADK	A2,1	ADK CARRY 
IXR040	EQU	*
	RF	TIODMA	DO NOT CHECK EOF CONDITION 
	EJECT
STARTO	EQU	*	START ORDER
	IFT	INDXAC=1 
	LDR	A4,A7
	SRL	A4,10	INDEX * 2
	ABL(NZ)	STAIND	START INDEXED 
	XIF
	LD	A2,ECBCW,A8	REC NR
	LD	A3,ECBCW+2,A8 
	ECR	A4,A7
	ANK	A4,/7	OPTION 
	SUK	A4,1 
	RF(NZ)	TIODMA	NOT GREATER
	RB	IXR020	GET NEXT REC NR
	EJECT
* 
************************* 
*   DMTASK ACTIVATION   * 
************************* 
* 
TIODMA	EQU	*
	ST	A2,ECBCW,A8	REC NR
	ST	A3,ECBCW+2,A8 
	RF	TIODMC
TIODMB	LD	A2,ECBCW,A8	REC NR
	LD	A3,ECBCW+2,A8 
TIODMC	EQU	*
* 
*   NO EA FOR OTHER TASK
* 
	LD	A1,FDBADF,A6	FDB ADDR 
	CF	A14,EATEST
	LDR	A4,A4	RTN INF
	RF(N)	TIODPE	EA OTHER TASK 
TIODMD	EQU	*
	LDR	A1,A2
	LDR	A2,A3	REC NR 
	CF	A14,CALSNO	GET SECTOR NO AND OFFSET IN SECTOR 
	LDR	A1,A1	RETURN INF 
	RF(NZ)	TIODME
	EJECT
* 
*   ACTIVATE DMTASK WITH FDB ADDRESS IN A1
* 
TIOD68	EQU	*
* 
*   PREPARE DM INTERFACE
* 
	LDKL	A8,'#D' 
	INH
	LDK	A7,0 
	LD	A1,DWTOR,A6	ORDER 
	ANK	A1,/FF 
	SUK	A1,OPENOF
	RF(NN)	TIOD72	OPEN CLOSE,RDFP
	LC	A7,FDBDMI,A6	TID FOR DMTASK 
	ADR	A7,A8
	CF	A15,FNDTID	A2 = TTAB ADDR 
	LDR	A5,A2
	RF(Z)	TASHLT 
	LD	A1,TTB:SA,A2
	RF(Z)	TIOD70	NOT ACTIVE
	LDK	A7,0 
	EJECT
* 
*   GET SECONDARY DMTASK
* 
	LC	A1,FWTVOL,A6	VOLUME FILE CODE 
TIOD69	EQU	*
	CC	A1,DFTAB,A7 
	RF(E)	TIOD71	SAME CODE 
	ADK	A7,1 
	RB	TIOD69	SEARCH NEXT
TIOD71	EQU	*
	LC	A7,DMTIDS,A7	SECONDARY DMTASK REL ID
TIOD72	EQU	*
	ADR	A7,A8	TASK ID
	CF	A15,FNDTID	A2:=TTAB ADDR
	LDR	A5,A2
	RF(NZ)	TIOD70
TASHLT	EQU	*	ABNORMAL SYSTEM ERRORS 
	LDK	A1,/11	DM ERR
	CF	A15,HALT
TIOD70	LDKL	A2,DMTASK	DISPATCH ADDRESS
	LDR	A1,A6	FDB ADDRESS
*   USED REGS A1-A3,A5
	CF	A15,ACTOT	ACTIVATE DMTASK 
	ABL	TDISP
* 
	EJECT
* 
**************
*   TIODME   *
**************
* 
*   TIODM ERROR CALL TENDIO WITH RETURN CODE IN A1 AND GOTO DISPATCHER
* 
TIODPE	EQU	*	PROTECT ERR EXIT 
	SUR	A9,A9
	LC	A9,FDBTNR,A6	USER TASK ID 
	CF	A14,RELPRO	RELEASE PROTECT
	LDKL	A1,PROERR 
TIODME	EQU	*
	LD	A6,FDBADF,A6	DATA FILE FDB ADDR 
TIODMX	EQU	*
*			A1 = ERROR CODE 
*			A6 = FDB ADDRESS
	INH
	ABL	DISEND	CALL TENDIO  GOTO DISPATCHER
* 
	END

Full view