|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 17242 (0x435a)
Notes: pts_type(SC)
Names: »DMSUBX.SC«
└─⟦245262b9f⟧ Bits:30009679 Philips computer tape "600220"
└─⟦this⟧ »M:92LP/DMSUBX.SC«
└─⟦this⟧ »M:92NA/DMSUBX.SC«
└─⟦this⟧ »M:92SP/DMSUBX.SC«
└─⟦38a30a456⟧ Bits:30009662 Philips computer tape "600104"
└─⟦this⟧ »M:92OD/DMSUBX.SC«
└─⟦3a2bec7de⟧ Bits:30009687 Philips computer tape "600313"
└─⟦this⟧ »M:821/DMSUBX.SC«
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
└─⟦this⟧ »M:92LP/DMSUBX.SC«
└─⟦6349b94c6⟧ Bits:30009684 Philips computer tape "600308"
└─⟦this⟧ »M:92D1/DMSUBX.SC«
└─⟦726a6c4ca⟧ Bits:30009685 Philips computer tape "600309"
└─⟦this⟧ »M:92D2/DMSUBX.SC«
└─⟦7e2393f80⟧ Bits:30009710 Philips computer tape "M_KONV"
└─⟦this⟧ »M:KONV/DMSUBX.SC«
└─⟦7f25f14aa⟧ Bits:30009683 Philips computer tape "600307"
└─⟦this⟧ »M:92F4/DMSUBX.SC«
└─⟦9ad21746d⟧ Bits:30009682 Philips computer tape "600304"
└─⟦this⟧ »M:92NA/DMSUBX.SC«
└─⟦9af60a727⟧ Bits:30009707 Philips computer tape "M_173"
└─⟦this⟧ »M:173/DMSUBX.SC«
└─⟦this⟧ »M:173/DMSUBX.SC«
└─⟦a25d6defe⟧ Bits:30009676 Philips computer tape "600210"
└─⟦this⟧ »M:92NA/DMSUBX.SC«
└─⟦this⟧ »M:92SP/DMSUBX.SC«
└─⟦dab19bdd7⟧ Bits:30009677 Philips computer tape "600218"
└─⟦this⟧ »M:261/DMSUBX.SC«
└─⟦f740ae34d⟧ Bits:30009708 Philips computer tape "M_92F3"
└─⟦this⟧ »M:92F3/DMSUBX.SC«
IDENT DMSUBX REL 9.2 79-11-16 870105040920 * **************************************************** * * 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