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

⟦b37ae7593⟧

    Length: 17282 (0x4382)
    Notes: pts_type(SC)
    Names: »TIODM.SC«

Derivation

└─⟦7e2393f80⟧ Bits:30009710 Philips computer tape "M_KONV"
    └─⟦this⟧ »M:KONV/TIODM.SC« 

PTS(SC)

	IDENT TIODM 	REL 9.2 79-11-16  870105040920

			=1, PR 5649
			REL 9.1 79-05-23 
* 
****************************************************
* 
*   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 = FDB ADDRESS
*           A7 = ORDER
*           A8 = ECB ADDRESS
* 
*   USED REGISTERS A1 - A10 
* 
*   BEFORE EXIT A DMTASK IS ACTIVATED WITH THE FDB ADDRESS IN A1
*   AS THE ONLY PARAMETER 
* 
*   THE FOLLOWING WORDS WILL BE SET IN THE FDB: 
*   FDBSNR   SECTOR NUMBER
*   FDBRRO   RELATIVE RECORD OFFSET 
*   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	FDBLNK 
	ENTRY	FDBECB 
	ENTRY	FDBSNR 
	ENTRY	FDBRRO 
	ENTRY	FDBRLE 
	ENTRY	FDBBLF 
	ENTRY	FDBTNR 
	ENTRY	FDBVTO 
	ENTRY	FDBCEX 
	ENTRY	FDBEXT 
	ENTRY	EXTDMI 
	ENTRY	EXTFC
	ENTRY	EXTLEN 
	ENTRY	EXTBAS 
	ENTRY	EXTELE 
	ENTRY	FDBLRN 
	ENTRY	FDBNIF,FDBEAL,FDBCRL,FDBKA,FDBMIA,FDBADF 
	ENTRY	FDBAI1,CRNTID,CRNCDF,CRNCIF
	ENTRY	FDBMRN,FDBDBR,FDBMRO 
	ENTRY	FDBMEC	MMU ECB DISPLACEMENT
	ENTRY	FDBKEY	SAVE AREA FOR KEY IN INDEXED ACCESS 
	EJECT
* 
***************** 
*   EXTERNALS   * 
***************** 
* 
* 
	EXTRN	SCTTCT 
	EXTRN	TDISP
	EXTRN	DSUMOD 
	EXTRN	FNDTID 
	EXTRN	ACTOT
	EXTRN	DISEND 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTOR	DWT INDEX AND ORDER
	EXTRN	DWTTDM	DM TASK TTAB ADDRESS
	EXTRN	TTB:ID	TASK ID 
	EXTRN	MOV:US	MOVE FROM USER TO SYSTEM AREA 
	EXTRN	DMTGCA	GET CRN ADDRESS 
	EXTRN	DMTGEA	GET EA WORD ADDR AND MASK 
	EXTRN	DMTASK 
	EXTRN	CALSNO 
	EXTRN	ECBFC
	EXTRN	ECBBA
	EXTRN	ECBRL
	EXTRN	ECBEL
	EXTRN	ECBRC
	EXTRN	ECBCW
	EXTRN	ECBCW2	SECOND CONTROL WORD 
	EXTRN	FDBLEN 
	EXTRN	SQR	SEQ READ ORDER CODE
	EXTRN	EARELB,DWTST,CRNGET,EATEST 
	EXTRN	TASHLT	HALT SYSTEM ROUTINE 
	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	00000
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	0
* 
	EJECT
* 
************************
*   DATA DEFINITIONS   *
************************
* 
* 
	DATA	0,0	4 WORDS 
	DATA	0,0 
TIOD14	EQU	*-2	TIODM A14 STACK
* 
* 
TIODMF	EQU	*	TIODM FUNCTION TABLE 
	DATA	CLOSE	CLOSE 
	DATA	REVTOC	READ VTOC RECORD 
	IFT	INDXAC=1 
	DATA	IXRDNX	INDEXED READ NEXT
	DATA	IXINS	INDEXED INSERT
	DATA	IXDEL	INDEXED DELETE
	DATA	IXREWR	INDEXED REWRITE
	DATA	IXRARE	INDEXED RANDOM READ
	XIF
	IFF	INDXAC=1 
	DATA	TIODME
	DATA	TIODME
	DATA	TIODME
	DATA	TIODME
	DATA	TIODME
	XIF
	DATA	RANDEL	RANDOM DELETE
	DATA	RANWRITE	RANDOM WRITE 
	DATA	RANREAD	RANDOM READ 
	DATA	RELXAC	RELEASE EXCLUSIVE ACCESS 
	DATA	SEQWRITE	SEQUENTIAL WRITE 
	DATA	SEQREAD	SEQUENTIAL READ 
	DATA	GETCUR	GET CURRENCY 
	IFT	INDXAC=1 
	DATA	INSIXR	INSERT INDEX RECORD
	DATA	DELIXR	DELETE INDEX RECORD
	XIF
	IFF	INDXAC=1 
	DATA	TIODME
	DATA	TIODME
	XIF
	DATA	GETCUX	GET CURRENT INDEX REC
	DATA	RANWRD	DELAYED RANDOM WRITE 
	DATA	RANDLD	DELAYED RANDOM DELETE
	DATA	RANREB	RAND READ REL BUFF 
	DATA	SETLRN	SET LRN
* 
* 
TIODMO	EQU	*	DM ORDERS
	DATA	/221E	CLOSE,IND READ NEXT 
	DATA	/1D1C	IND INSERT,IND DELETE 
	DATA	/1B1A	INDEXED REWRITE,IND RAND READ 
	DATA	/0C0B	RAND DEL, RAND WRITE
	DATA	/0A09	RAND READ, REL EXCL ACC 
	DATA	/0807	SPEC. WR. , SPEC. WR. 
	DATA	/0605	SEQ WR. , BASIC WRITE 
	DATA	/0302	READ VTOC, SEQ READ 
	DATA	/0123	BASIC READ,GET CURRENCY 
	DATA	/1F20	INS INDEXREC,DEL INDEXREC 
	DATA	/240D	GET CURR INDEX,DELAYED RAND WR
	DATA	/0E0F	DELAY RAN DEL,RAN READ REL BUFF 
	DATA	/2500	SET LRN 
* 
TIODMI	EQU	*	ORDER INDEX TABLE
	DATA	/0004 
	DATA	/0608 
	DATA	/0A0C 
	DATA	/0E10 
	DATA	/1214 
	DATA	/1616 
	DATA	/1616 
	DATA	/0218 
	DATA	/181A 
	DATA	/1C1E 
	DATA	/2022 
	DATA	/2426 
	DATA	/281A	SET LRN 
* 
NOOFOR	EQU	25	NO OF ORDER CODES 
* 
	EJECT
* 
* 
DWTDRD	EQU	/10	START OF NON-STANDARD DWT PART 
* 
	IFT	MMUPAG=0 
START	EQU	DWTDRD
	XIF
* 
	IFT	MMUPAG=1 
START	EQU	DWTDRD+4
	XIF
* 
* 
*   FDB OFFSET DEFINITIONS
* 
FDBLNK	EQU	0	LINK TO NEXT FDB 
FDBECB	EQU	START+2	ECB START
FDBSNR	EQU	START+16	SECTOR NUMBER 
FDBRRO	EQU	START+18	RELATIVE RECORD OFFSET
FDBRLE	EQU	START+20	RECORD LENGTH 
FDBBLF	EQU	START+22	BLOCKING FACTOR 
FDBTNR	EQU	START+23	TASK NUMBER CALLING TASK
FDBVTO	EQU	START+24	VTOC RECORD NO
FDBCEX	EQU	START+26	CURRENT EXTENT BLOCK POINTER
FDBEXT	EQU	START+28	FIRST EXTENT BLOCK START
EXTDMI	EQU	0	DMTAST IDENT 
EXTFC	EQU	1	VOLUME FILE CODE
EXTLEN	EQU	2	EXTENT LENGTH
EXTBAS	EQU	4	EXTENT BASE
EXTELE	EQU	6	EXT ENTRY LENGTH 
FDBLRN	EQU	START+53	LAST RECORD NUMBER
FDBNIF	EQU	START+52	NO OF INDEX FILES 
FDBEAL	EQU	START+56	EA LINK ROOT
FDBCRL	EQU	START+58	CRN LINK ROOT 
FDBKA	EQU	START+60	KEY ADDRESS IN DATA FILE 
FDBMIA	EQU	START+62	ADDRESS OF MASTER INDEX 
FDBADF	EQU	START+64	ADDRESS OF DATA FILE FDB
FDBAI1	EQU	START+66	ADDRESS OF INDEX FILE FDB 
FDBDBR	EQU	START+74	DELAY,BASIC AND REL BUFFER FLAGS
FDBMRN	EQU	START+75	LAST REC NR IN FILE 
FDBMRO	EQU	START+78	MAX FDBRRO
FDBMEC	EQU	START+80	MMU ECB DISPLACEMENT
FDBKEY	EQU	START+94	SAVE AREA FOR KEY IN INDEXED ACCESS 
* 
*   CRN BUFFER OFFSET DEFINITIONS 
* 
CRNTID	EQU	2	TASK ID
CRNCDF	EQU	4	CURRENT DATA FILE
CRNCIF	EQU	8	CURRENT INDEX FILE 
* 
	EJECT
* 
************* 
*   TIODM   * 
************* 
* 
* 
	DATA	0	DATA MANAGEMENT DEVICE INDEX
TIODM	DATA	*+2	TIODM START ADDRESS
* 
*   SET UP A14 STACK
* 
	LDKL	A14,TIOD14
* 
*   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,DWTTDM,A6
	RF(E)	TIOD10	THIS TASK 
	ADK	A2,2	NO
	RB	TIOD05	TRY NEXT 
TIOD10	EQU	*
	LC	A1,TTB:ID,A3	GET TASK ID
	CCK	A1,'##'
	RF(E)	TIO13	JUMP IF DMTASK CALLING 
* 
*   SET TASK ID FOR ALL FDBS
* 
	LDR	A1,A6	FDB ADDR 
	ADKL	A1,FDBADF 
	LDK	A3,10	MAX NO OF FDB * 2
	LDKL	A4,/4000	REQ BUSY BIT 
TIO11	EQU	* 
	SUK	A3,2 
	RF(N)	TIO13	ALL FDB READY
	LDR*	A5,A1	FDB ADDR
	RF(E)	TIO12	NO FDB 
	SC	A2,FDBTNR,A5	TASK ID
	ORS	A4,DWTST,A5	REQ BUSY BIT 
TIO12	EQU	* 
	ADK	A1,2	NEXT FDB ADDR 
	RB	TIO11 
TIO13	EQU	* 
	ENB			ENB
	ENB
	INH			INH
* 
*   CHECK ORDER IN A7 
*   PUT ORDER INDEX IN DWTOR RIGHT BYTE 
* 
	LDKL	A1,/8000	REQUEST ERROR
	LDK	A2,NOOFOR-1	NO OF ORDERS - 1 
TIOD15	CC	A7,TIODMO,A2	START AT END OF TIODMO 
	RF(E)	TIOD20	MATCH 
	SUK	A2,1 
	RB(NN)	TIOD15	>= 0 
	ABL	TIODME	ERROR RETURN
TIOD20	EQU	*
	LC	A2,TIODMI,A2
	SC	A2,DWTOR+1,A6	SAVE ORDER INDEX
	ABI	TIODMF,A2	BRANCH TO DM FUNCTION
	EJECT
* 
IXRARE	EQU	*	INDEXED RANDOM READ
	LD	A3,ECBCW2,A8		=1
	ANK	A3,/FF	REQ KEY LGTH	=1 
	LD	A4,FDBRLE,A6		=1
	SUK	A4,6	MAX LGTH	=1 
	CWR	A3,A4		=1
	RF(NG)	IXRAR1	OK	=1
	LDKL	A1,/8008	LGTH ERR	=1
	ABL	TIODME	ERR	=1
IXRAR1	EQU	*		=1
	IFT	MMUPAG=1 
	LD	A1,ECBCW,A8	GET USER KEY ADDRESS
	LDK	A2,FDBKEY	GET FDB KEY AREA DISPLACEMENT
	ADR	A2,A6	ADD FDB ADDRESS
*				=1 
	CF	A14,MOV:US	MOVE KEY FROM USER TO FDB AREA 
	XIF
* 
DELIXR	EQU	*	DELETE INDEX RECORD
* 
INSIXR	EQU	*	INSERT INDEX RECORD
	LDKL	A4,-1 
	RF	TIOC10
* 
REVTOC	EQU	*	READ VTOC RECORD 
* 
CLOSE	EQU	*	CLOSE A FILE
	LDK	A4,0 
TIOC10	EQU	*
	ST	A4,FDBRRO,A6	MARK ORDER TYPE
	LDK	A2,0 
	ST	A2,FDBSNR,A6	SECTOR #0 VOLUME LABLE 
* 
*   LET FDBCEX POINT TO FIRST EXTENT
* 
	LDR	A4,A6
	ADK	A4,FDBEXT
	ST	A4,FDBCEX,A6
	ABL	TIOD68	ACTIVATE DMTASK 
	EJECT
* 
RELXAC	EQU	*	RELEASE EXCLUSIVE ACCESS 
	LDR	A1,A6	FDB ADDR 
	LDKL	A2,/C000	REMOVE BUFFERS FOR THIS TASK 
	CF	A14,EARELB
REL090	EQU	*
	LDK	A1,0	CORRECT RETURN
	ABL	TIODME 
	EJECT
SETLRN	EQU	*	SET LAST RECORD NUMBER 
	LC	A1,ECBCW+3,A8 
	SC	A1,FDBLRN,A6
	LD	A1,ECBCW,A8 
	ST	A1,FDBLRN+1,A6
	RB	REL090
	EJECT
GETCUR	LDK	A7,CRNCDF+1	GET CURR DATA REC
	RF	GET010
GETCUX	LDK	A7,CRNCIF+1	GET CURR INDEX REC 
GET010	LDR	A1,A6	FDB ADDR 
	CF	A14,CRNGET	GET CRN BUFFER 
	ADR	A7,A2	ADDR CURR REC NO 
	LDK	A2,0 
	LC	A3,-1,A7	FILE CODE
	CC	A3,ECBFC,A8 
	RF(E)	GET020	SAME FILE CODE
	SC	A2,ECBCW+3,A8 
	RF	GET030
GET020	EQU	*
	LCR	A2,A7
	SC	A2,ECBCW+3,A8	REC NO
	LD	A2,1,A7 
GET030	EQU	*
	ST	A2,ECBCW,A8 
	RB	REL090
	EJECT
SEQREAD	EQU	*	SEQUENTIAL READ 
* 
*   FIND CRN+1 AND TEST IF > LRN
* 
	LDR	A1,A6	FDB ADDR 
	CF	A14,CRNGET	GET CRN-BUFFER 
	LDK	A1,0 
	LC	A1,CRNCDF+1,A2
	LD	A2,CRNCDF+2,A2	CURR LOG REC NO
	ADK	A2,1	CRN+1 
	RF(O)	SEQR10	OVERFLOW
	RF	SEQR20
SEQR10	EQU	*
	ANKL	A2,/7FFF	REMOVE OVERFLOW
	ADK	A1,1	ADD CARRY 
SEQR20	EQU	*
	SC	A1,ECBCW+3,A8	REC NO
	ST	A2,ECBCW,A8 
* 
*   CONTINUE AS FOR RANDOM READ 
* 
	EJECT
RANREAD	EQU	*	RANDOM READ 
* 
RANREB	EQU	*	RAND READ REL BUFF 
* 
*   TEST IF ECBRL <= 0
* 
	LDK	A2,0 
	LC	A2,ECBCW+3,A8	REC NO
	LD	A3,ECBCW,A8 
	LDK	A1,/8	INCORRECT LENGTH 
	LD	A4,ECBRL,A8 
	RF(NP)	TIODME	ERROR RETURN IF RL <= 0
* 
*   EA MUST NOT BE SET FOR OTHER TASK 
* 
	LDR	A1,A6	FDB ADDR 
	CF	A14,EATEST
	LDR	A4,A4	RTN INF
	RF(N)	TIODPE	EA OTHER TASK 
	RF	TIODMA
	EJECT
IXINS	EQU	*	INDEXED INSRERT 
	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,MOV:US	KEY TO FDB AREA
IXINS4	EQU	*
	SUK	A5,2 
	RB(NZ)	IXINS3	MORE INDEXS
	XIF
* 
SEQWRITE	EQU	*	SEQUENTIAL WRITE 
* 
*   GET LRN+1 INTO FDB AND STORE ADDR IN ECBCW
* 
* 
*   CALCULATE NUMBER DOF SPARE RECORDS
* 
	LDR	A5,A6	SAVE FDB ADDR
	LDK	A1,0 
	LC	A1,FDBMRN,A6	LAST REC NR
	LD	A2,FDBMRN+1,A6
	LDK	A6,0 
	LC	A6,FDBLRN,A5
	LD	A7,FDBLRN+1,A5	LRN
	CF	A14,DSUMOD	SUBTRACT 
	SUK	A2,1 
	LDR	A1,A1
	RF(Z)	SEQ005	NOT MANY
	LDKL	A2,/7FFF
SEQ005	ST	A2,ECBEL,A8	NR OF SPARE 
	LDR	A6,A5	FDB ADDRESS
	LDK	A1,0 
	LC	A1,FDBLRN,A6
	LD	A2,FDBLRN+1,A6	LRN
	IFT	INDXAC=1 
	RF	IXR020	STORE LOG REC NO 
	EJECT
IXRDNX	EQU	*	INDEXED EREAD NEXT 
* 
*   GET CRN 
* 
	LD	A1,FDBADF,A6	FDB ADDR 
	CF	A14,CRNGET	GET CRN BUFFER 
	LDR	A4,A2	BUFFADR
	LDK	A1,0 
	LDK	A2,0 
* 
*   CHECK THAT FILE CODE IS OK
* 
	LDR*	A5,A8	FILE CODE 
	CC	A5,CRNCIF,A4
	RF(NE)	IXR020	OTHER INDEX FILE IS CURRENT
	LC	A1,CRNCIF+1,A4
	LD	A2,CRNCIF+2,A4	LOG REC NO 
IXR020	EQU	*
	XIF
	ADK	A2,1 
	RF(O)	IXR030	OVERFLOW
	RF	IXR040
IXR030	ANKL	A2,/7FFF	REMOVE OVERFLOW BIT
	ADK	A1,1	ADK CARRY 
IXR040	EQU	*
	SC	A1,ECBCW+3,A8	REC NO
	ST	A2,ECBCW,A8 
	RF	TIOD25	DO NOT CHECK EOF CONDITION 
	EJECT
* 
IXREWR	EQU	*	INDEXED REWRITE
* 
IXDEL	EQU	*	INDEXED DELETE
* 
RANWRITE	EQU	*	RANDOM WRITE 
* 
RANWRD	EQU	*	DELAYED RANDOM WRITE 
* 
RANDLD	EQU	*	DELAYED RANDOM DELETE
* 
RANDEL	EQU	*	RANDOM DELETE
* 
*   NO SPECIAL PROCESSING 
* 
	EJECT
* 
************************* 
*   DMTASK ACTIVATION   * 
************************* 
* 
TIODMA	EQU	*
* 
*   SET EOF IF CRN > LRN
* 
	LDK	A1,0 
	LC	A1,ECBCW+3,A8	REC NO
	LD	A2,ECBCW,A8	DITTO 
	CC	A1,FDBLRN,A6	MOST SIGN PART 
	RF(L)	TIOD25	CRN<LRN 
	RF(G)	TIOD23	CRN>LRN 
	CW	A2,FDBLRN+1,A6	2 PART 
	RF(NG)	TIOD25	CRN <= LRN 
TIOD23	EQU	*
	LDKL	A3,/1000	END OF FILE
	ORS	A3,ECBRC,A8
	ANK	A7,/3F 
	SUKL	A7,SQR	SEQ READ 
	RF(NE)	TIOD25	NOT SR 
	LDR	A1,A3
	RF	TIODME
TIOD25	EQU	*
	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	*
	ENB
	ENB
	INH
	LDR	A1,A6	FDB ADDRESS
	LDK	A7,0 
	LC	A7,EXTDMI,A4	TID FOR DMTASK 
	ADKL	A7,'#D' 
	CF	A15,FNDTID	A2:=TTAB ADDR
	LDR	A5,A2
	ABL(Z)	TASHLT	TTAB MISSING IN SCTTCT?
TIOD70	LDKL	A2,DMTASK	DISPATCH ADDRESS
	LDK	A3,0 
	CF	A15,ACTOT	ACTIVATE DMTASK 
* 
*   EXIT TO TDISP 
* 
	ABL	TDISP
* 
	EJECT
* 
**************
*   TIODME   *
**************
* 
*   TIODM ERROR CALL TENDIO WITH RETURN CODE IN A1 AND GOTO DISPATCHER
* 
TIODPE	EQU	*
	LDKL	A1,/2000	PROTECT ERROR
TIODME	EQU	*
*			A1 = ERROR CODE 
*			A6 = FDB ADDRESS
	ABL	DISEND	CALL TENDIO  GOTO DISPATCHER
* 
	END

Full view