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

⟦8a0f2d36e⟧

    Length: 16764 (0x417c)
    Notes: pts_type(SC)
    Names: »DMSUBX.SC«

Derivation

└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
    └─⟦this⟧ »M:KMDV/DMSUBX.SC« 
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/DMSUBX.SC« 
└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
    └─⟦this⟧ »M:167D/DMSUBX.SC« 

PTS(SC)

	IDENT DMSUBX 	REL 8.2 78-09-15  870105040820 

			BUF HANDL + SEQ L. 230-250,317-325 
			REL 8.1 78-04-21 
* 
****************************************************
* 
*   PHILIPS TERMINAL SYSTEM  PTS
* 
*   DMSUBX = DM-ROUTINES FOR INDEXED REQUESTS 
* 
* 
* 
* 
* 
* 
****************************************************
****THIS MODULE IS ACTIVATED FROM :*****************
* 
*   DMTASK
* 
*************** 
*   ENTRIES   * 
*************** 
* 
	ENTRY	FNDKMX,CHKKEY
	ENTRY	RDNXTR 
	ENTRY	FNDKEY 
	ENTRY	CRNUPD 
* 
***************** 
*   EXTERNALS   * 
***************** 
* 
	EXTRN	MPYMOD 
	EXTRN	EXTLEN,FDBECB,FDBMIA,BUFSTA,FDBRLE,FDBSNR,ECBCW
	EXTRN	FDBRRO,FDBCEX,FDBBLF,EXTBAS,BUFSNR 
	EXTRN	FDBLRN,FDBMRO,FDBCRL,FDBADF,CRNCIF 
	EXTRN	DMTIOT,GTLGRN,GTBKBU,ADDMOD,CALSNO,DMTRBU
	EXTRN	DMTIOZ 
	EJECT
****DESCRIPTION*************************************
* 
*   FNDKMX SEARCH GFOR A WYMBOLIC KEY IN A MASTER INDEX.
*   A BINARY SEARCH IS USED. REF : KNUTH PAGE 411 ALG. U. 
*   THE SEARCH KEY MAY BE TERMINATED WITH A /EE.
*   THE FIRST TWO WORDS IN MASTER INDEX IS :
*   - NO OF ENTRIES N 
*   - NO OF CHARACTERS PER ENTRY
* 
****ENTRY PARAMETERS********************************
* 
*   A5 = MASTER INDEX ADRESS
*   A8 = ADRESS OF SEARCH KEy 
*   A11 = NR OF CHAR IN KEY 
* 
*   CF   A14,FNDKMX 
* 
****EXIT PARAMETERS*********************************
* 
*   A1,A2 = LODGICAL RECORD NO IN INDEX FILE
*   A8,A11= UNCHANGED 
* 
****USED REGISTERS**********************************
* 
*   A1 - A11
	EJECT
FNDKMX	EQU	*
	LDR*	A2,A5	NO OF ENTRIES N 
	RF(NP)	FND045	NO MASTER INDEX
	LDR	A9,A2
	ANKL	A9,/1	GET BIT 15
	SRA	A2,1	
	LDR	A10,A2	M=N/2 FLOOR 
	ADR	A9,A2	I=N/2 CEILING
	ADK	A5,2	TABLE BASE - 2
FND020	EQU	*
	LDK	A2,0 
	LDR*	A7,A5	ENTRY LENGTH
	LDR	A6,A9	I
	SUK	A6,1 
	RF(NP)	FND025	HANDLES ALSO I=0 
	CF	A14,MPYMOD	A1,A2=(I-1)*EL 
	SRC	A1,1 
	ORR	A2,A1	GET MOST SIGN BIT
FND025	EQU	*
	ADR	A2,A5	ADD MI BASE ADR - 2
	ADK	A2,2	ENTRY KEY ADR 
	LDR	A1,A2	SAVE ENTRY ADR 
	LDR	A3,A8	SEARCH KEY ADR 
	LDR	A6,A11	MAX KEY LENGTH
	LDK	A7,0	CHAR ADR
	CF	A14,CHKKEY	COMPARE KEYS 
	LDR	A7,A10	M 
	LDR	A6,A7
	ANK	A6,/1	BIT 15 
	SRA	A7,1	M/2 FLOOR 
	ADR	A6,A7	M/2 CEILING
	LDR	A3,A3	CHKKEY RTN INF 
	RF(NG)	FND040	SEARCHED KEY LESS OR EQUAL 
* 
*   SEARCHED KEY GREATER
* 
	LDR	A10,A10	M
	RF(Z)	FND050	SEARCH READY
	ADR	A9,A6	I=I+(M/2 CEIL) 
FND030	EQU	*
	LDR	A10,A7	M=M/2 FLOOR 
	RB	FND020
FND040	EQU	*
	LDR	A10,A10	M
	RF(Z)	FND060	SEARCH READY
	SUR	A9,A6	I=I-(M/2 CEIL) 
	RB	FND030
FND045	EQU	*	NO MASTER INDEX
	LDK	A1,0 
	LDK	A2,1	REC NR 1
	RF	FND070
FND050	EQU	*
	ADR*	A1,A5	ARDR NEXT ENTRY 
FND060	EQU	*
	LDR	A3,A1	ENTRY ADR
	SUK	A3,3 
	ADR*	A3,A5	ADR REC NO
* 
*   MOVE LOG REC NO TO A1,A2
* 
	LDK	A1,0 
	LCR	A1,A3
	ADK	A3,1 
	LCR	A2,A3
	ADK	A3,1 
	ECR	A2,A2
	LCR	A2,A3
FND070	EQU	*
	RTN	A14
	EJECT
****DESCRIPTION*************************************
* 
*   CHKKEY COMPARE TWO CHARACTER STRINGS. THE SEARCH KEY MAY BE 
*   TERMINATED WITH A /EE.
* 
****ENTRY PARAMETERS********************************
* 
*   A2 = ADR OF ENTRY KEY 
*   A3 = ADR OF SEARCH KEY
*   A6 = MAX NO OF CAHARACTERS IN KEY 
*   A7 = REL NO OF FIRST CHAR TO CHECK IN KEY 
* 
*   CF   A14,CHKKEY 
* 
****EXIT PARAMETERS*********************************
* 
*   A3 = 0 WHEN SEARCED KEY IS CONTAINED IN ENTRY KEY 
*      = + 1 WHEN SEARCH KYEY IS GREATER
*      = -1 WHEN SEARCH KEY IS LESS 
*   A7 = REL NO OF NEXT CHAR TO CHECK = NO OF SAME CHARACTERS IN WHOLE KEY
*   A6 = MAX NO OF CHAR IN KEY
* 
****USED REGISTERS**********************************
* 
*   A2-A4,A6-A7 
********************************************************
	EJECT
CHKKEY	EQU	*
	ADR	A3,A7	FIRST SC CHAR TO TEST
	ADR	A2,A7	FIRST EC CHAR TO TEST
CHK020	EQU	*
	LCR	A4,A3	SEARCED KEY CHAR 
	CCK	A4,/EE00 
	RF(E)	CHK060	END OF KEY CHAR 
	CCR	A4,A2	SC=EC? 
	RF(G)	CHK100	SC GT TH EC 
	RF(L)	CHK120	SC LESS THAN EC 
	ADK	A7,1	NO OF SAME CHAR 
	CWR	A7,A6	NO OF CHAR 
	RF(NL)	CHK060	ALL CHAR CHECKED 
	ADK	A3,1	NXT SC TO TEST
	ADK	A2,1	NXT EC TO TEST
	RB	CHK020	 
CHK060	EQU	*
	LDK	A3,0	FOUND 
	RF	CHK140
CHK120	EQU	*
	LDKL	A3,-1	SEARCHED KEY SMALLER
	RF	CHK140
CHK100	EQU	*
	LDK	A3,1	SEARCHED KEY SGREATER 
CHK140	EQU	*
	RTN	A14
	EJECT
****DESCRIPTION*************************************
* 
*   RDNXTR WILL MAKWE NEXT RECORD IN AN INDEX FILE AVAILABLE
*   IN A CORE BUFFER
*   WHEN NO RECORD IS READ BEFORE, THE FIRST RECORD IN SPECIFIED
*   SECTOR WILL BE MADE AVAILABLE 
* 
****ENTRY PARAMETERS********************************
* 
*   A1 = FDB ADDRESS FOR CURRENT RECORD (BEFORE NEXT) 
*        FDBCEX,FDBSNR
*        FDBRRO = RECORD OFFSET IN BUFFER, WHEN = -1 THE FIRST
*                 RECORD IN CURRENT SECTOR IS WANTED
*   A3 = ADDRESS OF BLOCK BUFFER FROM PREVIOUS CALL IN
*        SAME DM-REQUEST. =0 WHEN NO BYUFFER IS ALLOCATED 
*   A8 = ECB ADDRESS
* 
****EXIT PARAMETERS*********************************
* 
*   RETURN AT ADDR 0 WHEN OK AND A5 UNDEFINED 
*                 + 2 WHEN ERROR
*   A1 = FDB ADDRESS
*   A5 = ERROR CODE (RETURN CODE FOM PHYS I/O) WHEN NO BUFFER IS ALLOCATED
*   A2 = FDBRRO = RECORD OFFSET 
*   A3 = BUFFER ADDRESS 
*      = 0 WHEN NO BUFFER IS ALLOCATED
*   A8 = ECB ADDRESS
* 
****USED REGISTERS**********************************
* 
*   A1-A5,A8-A10,A13 + THREE WORDS ON A14 STACK 
* 
******************************************************
	EJECT
RDNXTR	EQU	*
	LDR	A10,A3	SAVE BUFFER ADDR
	RF(NZ)	RDN200	BUFFER EXIST 
	STR	A7,A14 
	SUKL	A14,4 
	ST	A6,2,A14
* 
*   GET A BUFFER
* 
RDN040	EQU	*
	CF	A14,GTBKBU	GET BLOCKBUFFERADDR
	LDR	A2,A2	 
	RF(NN)	RDN080	DATA ALREADY IN CORE 
* 
*   READ SECTOR FROM DISC 
* 
	LDR	A10,A3	BUFFER ADDR 
	LDK	A7,/91	PHYS READ WITH WAIT 
	LKM
	DATA	1 
	CF	A14,DMTIOZ	CHECK RETURN CODES 
	LDR	A1,A1
	RF(NZ)	RDN900	ERROR
	LDR	A1,A6	FDB ADDR 
RDN080	EQU	*
	LDR	A6,A1	FDB ADDR 
	LDK	A2,0 
	ST	A2,FDBRRO,A1	OFFSET FIRST RECORD
	RF	RDN940	RETURN 
* 
*   BUFFER WAS BEFORE 
* 
RDN200	EQU	*
	LD	A2,FDBRRO,A1	REC ORD  OFFSET
	RF(NN)	RDN220	NOT FIRST REC
	STR	A7,A14 
	SUKL	A14,4 
	ST	A6,2,A14
	RB	RDN080	FIRST REC WANTED 
* 
*   CHECK IF THIS OFFSET POINTS TO LAST REC IN BUFFER 
* 
RDN220	EQU	*
	CW	A2,FDBMRO,A1	MAX OFFSET 
	RF(NL)	RDN300	THIS REC LAST IN BUFFER
* 
*   GET NEXT REC IN CURRENT BLOCKBUFFER 
* 
	AD	A2,FDBRLE,A1	RECOR D  LENGTH
	ADK	A2,1	STATUS CHAR 
	ST	A2,FDBRRO,A1	NEW OFFSET 
	RF	RDN950	RETURN 
* 
*   CHECK IF THIS RECORD ALSO IS LAST IN EXTENT 
* 
RDN300	EQU	*
	STR	A7,A14 
	SUKL	A14,4 
	ST	A6,2,A14
	LD	A3,FDBCEX,A1	EXT ADDR 
	LD	A5,EXTBAS,A3	EXT BASE 
	AD	A5,EXTLEN,A3	EXTENT LENGTH
	SUK	A5,1 
	CW	A5,FDBSNR,A1	SECT NO CURRENT
	RF(NG)	RDN400	IT WAS LAST REC IN EXTENT
* 
*   NEW SECTOR
* 
	IM	FDBSNR,A1	SECT NO 
	LDR	A6,A1	FDB ADDR 
	RF	RDN500
* 
*   TAKE CARE OF LAST REC IN EXTENT 
* 
RDN400	EQU	*
	LDR	A13,A8	ECB ADDR
	CF	A14,GTLGRN	GET LOG REC NO 
	LDR	A1,A2
	LDR	A2,A3
	LDK	A6,0 
	LDK	A7,1 
	CF	A14,ADDMOD	NEXT REC NO
	LDR	A6,A5	RESTORE FDB ADDR 
	CF	A14,CALSNO	GET NEXT REC ADDR PHYS 
	LDR	A8,A13 
	LDR	A1,A1	CHECK EN D OF MEDIUM 
	RF(Z)	RDN500	OK
	RF	RDN900	EXIT 
* 
*   GET NEXT SECTOR 
* 
RDN500	EQU	*
	LDR	A3,A10	BUFFER ADDR 
	CF	A14,DMTRBU	RELEASE BUFFER 
	LDR	A1,A6	FDB ADDR 
	RB	RDN040	NEXT SECTOR
* 
*   EXIT
* 
RDN900	EQU	*
	LDR	A5,A1	RET CODE 
	LDR	A1,A6	FDB ADDR 
	LDR	A3,A10	BUFFER ADDR 
	RF(Z)	RDN960	NO BUFFER 
	CF	A14,DMTRBU	RELEASE BUFFER 
RDN960	EQU	*
	LDK	A3,2 
	ADS	A3,8,A14	RET ADDR
	LDK	A3,0	BUFFER ADDR 
RDN940	EQU	*
	LD	A6,2,A14
	ADKL	A14,4 
	LDR*	A7,A14
RDN950	EQU	*
	RTN	A14
	EJECT
****DESCRIPTION*************************************
* 
*   FNDKEY WILL READ THE FIRST USED INDEX RECORD WITH THE 
*    SPECIFIED KEY OR NEXT HIGHER KEY 
*   IF END OF FILE, THE FIRST FREE RECORD IS FOUND
* 
****ENTRY PARAMETERS********************************
* 
*   A1 = FDB ADDRESS
*   A8 = SEARCH KEY ADDR
*   A11 = NO OF CHARACTERS IN KEY 
*   A13= PHYSICAL ECB ADDRESS 
* 
****EXIT PARAMETERS*********************************
* 
*   A1 = FDB ADDRESS
*        FDBSNR,FDBRRO = FOUND INDEX RECORD 
*   A2 = 0 WHEN KEY ISS FOUND 
*       = /4000 WHEN NEXT HIGHER KEY IS FOUND 
*      = RETURN CODE WHEN KEY IS NOT FOUND
*        BIT 1 CAN NEVBER BE SET BY DISC DRIVER 
*   A3 = BUFFER ADDRESS 
*      = 0 WHEN NO RECORD IS FOUND
*   A7 = NO OF SAME CHARACTERS
*   A8 = PHYSICAL ECB ADDRESS 
*   A11 = UNCHANGED 
* 
****USED REGISTERS**********************************
* 
*   A1 - A11,A13 + 4 WORDS ON A14 STACK 
* 
******************************************************
	EJECT
FNDKEY	EQU	*
* 
*   FIRST SEARCH THE NMASTER INDEX
* 
	LD	A5,FDBMIA,A1	ADDR OF MASTER INDEX 
	STR	A1,A14	FDB ADDRESS IS SAVED
	SUKL	A14,8 
	ST	A8,6,A14	SAVE SEARCH KEY ADDR 
	CF	A14,FNDKMX	GET KEY ENTRY IN MASTER INDEX
	LD	A6,8,A14	FDB ADDR 
	CF	A14,CALSNO	GET PHYS ADDR
	LDR	A1,A1
	RF(NZ)	FKY900	ERROR
	LDR	A1,A6	FDBADDR
	LDR	A6,A11	NO OF CHAR IN KEY 
	LDK	A7,0	START CHAR KEY SEARCH 
	SUR	A9,A9	NO BUFFER TO START WITH
	LDR	A8,A13	ECB ADDR
FKY100	EQU	*
	LDR	A3,A9	BUFFER ADDR
	CF	A14,RDNXTR	GET INDEX RECORD 
	RF	FKY150
	LDR	A1,A5	RET CODE 
	RF	FKY900	ERROR EXIT 
* 
*   BUFFER AND ADATA IS FOUND 
* 
FKY150	EQU	*
	LDR	A9,A3	BUFFER ADDR
	ADR	A2,A3	BUFFER ADR 
	ADK	A2,10	REC ADDR 
	LDR	A10,A2	SAVE REC ADDR 
	AD	A10,FDBRLE,A1	ADDR OF STATUS CHAR 
	LDK	A5,/FF	USED CHAR MARK
	CCR	A5,A10	STATUS CHAR 
	RF(E)	FKY200	USED RECORD 
* 
*   NO MORE RECORDS IN THIS SECTOR
* 
	LD	A13,FDBRRO,A1	SAVE CURRENT OFFSET 
	LD	A4,FDBMRO,A1	 
	ST	A4,FDBRRO,A1	LAST REC IN SECT 
* 
*   *CHECK IF EOF 
* 
	LDR	A10,A7	CHAR ADDR 
	CF	A14,GTLGRN	GET LOG REC NR 
	LDR	A6,A11	NR OF CHAR
	LDR	A7,A10	CHAR ADDR 
	CC	A2,FDBLRN,A1
	RB(L)	FKY100	NOT EOF 
	RF(G)	FKY180	EOF 
	CW	A3,FDBLRN+1,A1
	RB(L)	FKY100	NOT EOF 
FKY180	EQU	*
* 
*   EOF IS IN THIS SECTOR 
* 
	ST	A13,FDBRRO,A1	OFFSET TO FIRST FREE RECORD 
	LDK	A7,0	NR OF SAME CHAR 
	LDKL	A2,/1000	EOF
	RF	FKY950
* 
*   CHECK KEY IN THIS RECODRD 
* 
FKY200	EQU	*
	LD	A3,6,A14	SEARCH KEY ADDR
	CF	A14,CHKKEY	COMPARE KEYS 
	LDR	A3,A3
	RF(P)	FKY840	SEARCHED KEY GREATER
	RF(N)	FKY850	SEARCH KEY LESS 
	RF	FKY870	KEY FOUNFD 
FKY840	EQU	*
	CC	A7,-4,A10	NEXT KEY FLAG 
	RB(NG)	FKY100	THE NEXT KEY IS IDENTICAL FOR
*                   AT LEAST THE SAME NO OF LEADING CHARACTERS
*                   THAT HAS BEEN CHECKED FOR THIS KEY
	LC	A7,-4,A10	REDUCE NO OF SAME CHARACTERS
	RB	FKY100	NEXT KEY 
FKY850	EQU	*
	LDKL	A2,/4000	KEY NOT FOUND
	RF	FKY950
FKY870	EQU	*
	LDK	A2,0	KEY FOUND 
	RF	FKY950
FKY900	EQU	*
	SUR	A9,A9	NO BUFFERS 
	LDR	A2,A1	ERR CODE 
	LDK	A7,0	NO OF SAME LEAD CHARS 
FKY950	EQU	*
	ADKL	A14,8	RESTORE STACK 
	LDR*	A1,A14	FDB ADDR 
	LDR	A3,A9	BUFFER ADDR
	RTN	A14
	EJECT
* 
*   CRNUPD UPDATES CRN-BUFFERS SO THAT RECORD NUMBERS FOR MOVED INDEX 
*   RECORDS ARE UPDATED 
* 
*   IN: 
*   A8,A9  = LAST RECORD NR MOVED 
*   A10,A11= FIRST RECORD NR MOVED
*   A5     = FDB ADDR INDEX 
*   A12    = ADD PARAMETER +1, -1 
* 
*   USED REGISTERS: 
*   A1 -A12 
* 
*   OUT:
*   A5 = FDB ADDR INDEX 
*   A10,A11 = UNCHANGED 
* 
CRNUPD	EQU	*
	STR	A12,A14
	SUKL	A14,2 
	LD	A12,FDBADF,A5	FDB DATA FILE 
	INH
	LD	A12,FDBCRL,A12	CRN LINK ROOT
	RF	CRU120
CRU100	LDR*	A12,A12 
CRU120	RF(Z)	CRU900	END OF LINK 
	LC	A7,FDBECB+1,A5	FILE CODE
	CC	A7,CRNCIF,A12 
	RB(NE)	CRU100	WRONG FC 
	CC	A10,CRNCIF+1,A12
	RB(G)	CRU100 
	RF(L)	CRU200 
	CW	A11,CRNCIF+2,A12
	RB(G)	CRU100 
CRU200	EQU	*
	CC	A8,CRNCIF+1,A12 
	RF(G)	CRU300 
	RB(L)	CRU100 
	CW	A9,CRNCIF+2,A12 
	RB(L)	CRU100 
CRU300	EQU	*
* 
*   UPDATE CRN
* 
	LD	A7,2,A14	ADD PARAM
	LDR	A6,A7
	RF(N)	CRU230	-1
	LDK	A6,0 
CRU230	EQU	*
	ANKL	A7,/7FFF
	LDK	A1,0 
	LC	A1,CRNCIF+1,A12 
	LD	A2,CRNCIF+2,A12 
	CF	A14,ADDMOD
	SC	A1,CRNCIF+1,A12 
	ST	A2,CRNCIF+2,A12 
	RB	CRU100
CRU900	EQU	*
	ADKL	A14,2 
	ENB
	RTN	A14
	END

Full view