|
|
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: 20480 (0x5000)
Notes: pts_type(SC)
Names: »DMSUBR.SC«
└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
└─⟦this⟧ »M:KMDV/DMSUBR.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/DMSUBR.SC«
└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
└─⟦this⟧ »M:167D/DMSUBR.SC«
IDENT DMSUBR REL 8.2 78-09-15 870105040820 BUF HANDL + RC L. 496,543,551 REL 8.1 78-04-21 * **************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DMSUBR = COMMON DM-ROUTINES * * * * * * **************************************************** ****THIS MODULE IS ACTIVATED FROM :***************** * * DMTASK,TIODM,DMTASS * *************** * ENTRIES * *************** * * ENTRY EATEST,EASETB,EARELB,CRNGET ENTRY CALSNO ENTRY GTBKBU,GTLGRN ENTRY DMTIOT ENTRY CHKIND,REQEND ENTRY DMTIOZ * ***************** * EXTERNALS * ***************** * * EXTRN FDBEAL,FDBTNR,FDBCRL,FDBRLE,FDBSNR,FDBRRO EXTRN FDBCEX,FDBBLF,FDBEXT EXTRN FDBECB,DWTECB,DWTOR,EXTDMI,BUFSTA,BUFDMI,BUFOR EXTRN ECBRC,ECBFC,ECBCW,ECBBA EXTRN DWTTDM,DWTTQ EXTRN QTJOB EXTRN ECBRL,SECTLE EXTRN DIVMOD,MPYMOD EXTRN EXTELE EXTRN CRNTID EXTRN DMTGBU EXTRN EXTLEN,EXTBAS EXTRN CRNQUE,GETBLK,FREQUE EXTRN HALT EXTRN CRBUFL EXTRN IHRET2,IHRTN,FDBADF,DWTST EXTRN FDBDBR EXTRN QIRN,QIRR EJECT * * CHKIND IS USED FROM FNDDWT TO SELECT DM-DWT * INDEX FILE (INDEX 0) SHALL BE SELECTED FOR * DX,IX,XR,XN, DATA FILE OTHERWISE * CHKIND EQU * STR A1,A15 STR A2,A15 LDK A2,1 INDEX FOR DATA FILE LDR A1,A7 ORDER ANK A1,/3F CWK A1,/20 RF(E) FND320 DELETE INDEX CWK A1,/1A RF(E) FND320 INDEXED READ ANK A1,/3E REMOVE BIT 15 SUK A1,/1E RF(E) FND320 INSERT INDEX OR INDEXED READ NEXT RF FND340 FND320 LDK A2,0 INDEX FOR INDEX FILE FND340 EQU * CCR A2,A6 INDEX RF(E) FND390 ENTRY FOUND LDK A1,2 ADS A1,8,A15 RETURN+2 WHEN NOT FOUND FND390 ABL IHRET2 EJECT * * REQEND IS USED IN TENDIO TO RESET REQUEST BUSY BIT * FOR ALL FILES * AND TO RESOLVE ALL QUEUES * REQEND EQU * LDKL A2,/8000 AN A2,2,A5 TASK STATUS BIT 0 RF(NZ) TEN115 DMTASK CALLING * * RESET REQUEST BUSY BIT FOR ALL FILES * LDKL A2,10 MAX NO OF FILES * 2 TEN112 EQU * SUK A2,2 RF(N) TEN115 NO MORE FILES LDR A3,A6 ADR A3,A2 LD A3,FDBADF,A3 FDB ADDR RB(Z) TEN112 CWR A3,A6 DWT ADDR RF(E) TEN114 MASTER DWT LD A5,DWTTQ,A3 RF(Z) TEN113 NO QUEUE LDR* A4,A5 ST A4,DWTTQ,A3 NEW ANCHOR CF A15,QTJOB REPEAT REQUEST TEN113 LD A5,DWTTDM,A6 RESTORE TEN114 EQU * LDKL A4,/BFFF REQUEST BUSY BIT ANS A4,DWTST,A3 RESET LDKL A4,/8000 ORS A4,DWTST,A3 DEVICE NOT BUSY RB TEN112 TEN115 EQU * ABL IHRTN EJECT ****DESCRIPTION************************************* * * EATEST WILL SEARCH THE EA-LINK FOR A LOG RECORD NO. * ****ENTRY PARAMETERS******************************** * * A1 = FDB ADRESS * A2,A3 = LOG RECORD NO * * CF A14,EATEST * ****EXIT PARAMETERS********************************* * * A1-A3 = UNCHANGED * A4 = 0 NO EA AT ALL * = +1 EA FOUND FOR ACTUAL TASK * = -1 EA FOUND FO R OTHER TASK * ****USED REGISTERS********************************** * * A1 - A4 EJECT EATEST EQU * LD A4,FDBEAL,A1 BUFFER QUEUE RF EAT030 EAT020 EQU * LDR* A4,A4 NEXT BUFFER ADR EAT030 EQU * RF(Z) EAT100 EMPTY QUEUE,NO EA * * SEARCH LOG REC NO * CC A2,3,A4 FIRST CHAR RB(NE) EAT020 CW A3,4,A4 2 AND 3 CHAR RB(NE) EAT020 * * RECORD NO FOUND * LC A4,2,A4 CC A4,FDBTNR,A1 TASK ID RF(E) EAT060 LDKL A4,-1 EA OTHER TASK RF EAT100 EAT060 EQU * LDK A4,1 EA SAME ATASK EAT100 EQU * RTN A14 EJECT ****DESCRIPTION************************************* * * EASETB WILL UNCONDITIONALLY PUT A NEW EA BUFFER IN EA-LINK * IF NO BUFFERS ARE AVAILABLE THE SYSTEM WILL HALT AND LITE SOP-LAMPS * ****ENTRY PARAMETERS******************************** * * A6 = FDB ADDR * A2,A3 = LOGICAL RECORD NO * * CF A14,EASETB * ****EXIT PARAMETERS********************************* * * A6 = FDB ADDR * ****USED REGISTERS********************************** * * A1-A4,A6 * ******************************************************* EJECT EASETB EQU * ECR A2,A2 LC A2,FDBTNR,A6 TASK ID ECR A2,A2 LDR A1,A3 LOG REC NO INH CF A15,GETBLK GET BUFF AND STORE A1,A2 * * LINK BUFFER TO FDB * LD A2,FDBEAL,A6 LINK ROOT STR A2,A4 THREAD ST A4,FDBEAL,A6 NEW ROOT RTN A14 EJECT ****DESCRIPTION************************************* * * EARELB WILL RELEASE EA BUFFERS AND CONNRECT THEM * TIO THE FREE LINK. * ****ENTRY PARAMETERS******************************** * * A1 = FDB-ADDRESS * A2,A3 = LOGICAL RECORD NO * A2: BIT 0=1,BIT 1=1 ALL BUFFERS WITH TASK ID SAME AS FDB * IS REMOVED. * BIT 0=1,BIT 1=0 ALL BUFFERS ON FDB IS REMOVED. * BIT 0=0 THE FIRST BUFFER WITH TASK ID AND LOG REC NO * AS SPEC IS REMOVED. * ****EXIT PARAMETERS********************************* * * A1 = UNCHANGED * ****USED REGISTERS********************************** * * A1 - A5 EJECT EARELB EQU * LDR A5,A1 ADKL A5,FDBEAL ROOT ADR LDR* A4,A5 EA ROOT RF EAR030 EAR020 EQU * LDR A5,A4 SAVE OLD ROOT LDR* A4,A4 NEXT BUFFER ADR EAR030 EQU * RF(Z) EAR100 EA LINK END LDR A2,A2 REC NO RF(N) EAR050 RELEASE MANY BUFFERS * * SEARCH LOG REC NO * CC A2,3,A4 RB(NE) EAR020 CW A3,4,A4 RB(NE) EAR020 RF EAR060 EAR050 EQU * CWK A2,/A000 CHECK BIT 1 RF(L) EAR080 BIT 1 ZERO,ALL BUFFERS REMOVED EAR060 EQU * * * SEARCH TASK IDENT * LC A3,FDBTNR,A1 TAK ID CC A3,2,A4 RB(NE) EAR020 * * EA BUFFER FOUND * EAR080 EQU * LDR* A3,A4 NEXT BUFADR STR A3,A5 REMOVE BUFFER FROM LINK * * RETURN BUFFER TO POOL * INH LD A3,FREQUE STR A3,A4 NEXT FREE ST A4,FREQUE NEW ROOT LDR A4,A5 BUFFER ROOT LDR A2,A2 RB(N) EAR020 RELEASE MORE EAR100 EQU * RTN A14 EJECT ****DESCRIPTION************************************* * * CRNGET WILL SEARCH THE CRN-LINK FOR TASK ID. IF NO BUFFER IS * FOUND A NEW IS FETCHED FROM THE FREE LINK AND B FILLED WITH * ZEROES AND PUT ON THE CRN LINK. IF NO FREE BUFFERS ARE AVAILABLE * THE SYSTEM WILL HALT AND LITE SOP-LAMPS. * TASK ID IS PLACED IN THE BUFFER * ****ENTRY PARAMETERS******************************** * * A1 = FDB ADDRESS DATA FILE * ****EXIT PARAMETERS********************************* * * A1 = UNCHANGED * A2 = ADDRESS OF FOUND CRN-BUFFER * ****USED REGISTERS********************************** * * A1 - A4 EJECT CRNGET EQU * LD A2,FDBCRL,A1 CRN ROOT RF CRN030 CRN020 EQU * LDR* A2,A2 NEXT BUFFER CRN030 EQU * RF(Z) CRN100 LINK END * * CHECK ATASK IDENT * LC A3,FDBTNR,A1 TASK ID CC A3,CRNTID,A2 RB(NE) CRN020 OTHER TASK RF CRN200 BUFFER FOUND * * GET NEW BUFFER * CRN100 EQU * INH LD A2,CRNQUE FREE LINK ROOT RF(NZ) CRN120 LDK A1,3 LAMP 10 AND 11 CF A15,HALT NO MORE BUFFERS CRN120 EQU * LDR* A3,A2 NEXT FREE ST A3,CRNQUE UPD ROOT * * FILL BUFFER WITH ZEROES * LDKL A3,CRBUFL BUFFER LENGTH IN BYTES CRN140 EQU * SUK A3,2 ZEROE WORDS 2 - N RF(NP) CRN160 BUFFER ZEROED LDR A4,A2 BUFFER ADR ADR A4,A3 OFFSET IN BUFFER CMR A4 RB CRN140 MORE WORDS * * CONNECT NEW BUFFER TO LINK * CRN160 EQU * LC A3,FDBTNR,A1 SC A3,CRNTID,A2 TASK ID LD A3,FDBCRL,A1 LINK ROOT STR A3,A2 THREAD ST A2,FDBCRL,A1 NEW ROOT CRN200 EQU * RTN A14 EJECT ****DESCRIPTION************************************* * * CALSNO WILL CONVERT A LOGICAL RECORD NO TO * SECTOR AND OFFSET * ****ENTRY PARAMETERS******************************** * * A1,A2 = LOGICAL RECORD NO * A6 = FDB ADDR * * CF A14,CALSNO * ****EXIT PARAMETERS********************************* * * A1 = 0 OK * NE 0 , ERROR =/20=END OF MEDIUM * A4 = EXTENT ADDRESS * A6 = UNCHANGED * IN FDB : FDBSNR = SECTOR NR * FDBRRO = OFFSET IN SECTOR * FDBCEX = CURRENT EXTENT * ****USED REGISTERS********************************** * * A1 - A9 EJECT CALSNO EQU * * * FIND SECTOR NO WITHIN FILE * LDR A5,A6 SAVE FDB ADDR LDK A6,0 LC A6,FDBBLF,A5 BLOCKING FACTOR CF A14,DIVMOD A2=A1,A2//A6,A1=REMAINDER RF(O) TIOD99 OVERFLOW LDR A3,A2 QUOTIENT LDR A6,A5 FDB ADDR LDR A2,A1 REMAINDER RF(Z) TIOD30 REST = 0 ADK A3,1 RECORD IN NEXT SECTOR RF TIOD40 TIOD30 LC A2,FDBBLF,A6 LAST REC IN SECTOR * * FIND FILE EXTENT * TIOD40 EQU * LDR A4,A6 ADKL A4,FDBEXT FIRST FILE EXTENT LD A9,EXTLEN,A4 LENGTH OF FIRST EXTENT LDK A5,4 NUMBER OF EXTENTS TIOD45 CWR A3,A9 RF(NG) TIOD55 SECTOR IN THIS EXTENT SUK A5,1 NO RF(NP) TIODMO EOF ERROR RETURN ADK A4,6 NEXT EXTENT BLOCK AD A9,EXTLEN,A4 ADD LENGTH OF NEXT EXTENT RB TIOD45 * * SAVE CURRENT EXTENT BLOCK POINTER * TIOD55 ST A4,FDBCEX,A6 * * FIND LOGICAL SECTOR NUMBER ON DISC * SU A9,EXTLEN,A4 NO OF SECTORS IN PREVIOUS EXTENTS SUR A3,A9 SECTOR NO WITHIN EXT SUK A3,1 START FROM ZERO RF(N) TIODMO BEFORE MEDIUM AD A3,EXTBAS,A4 SECTOR NO ON DISC ST A3,FDBSNR,A6 SAVE LOGICAL SECTOR NUMBER * FIND RELATIVE RECORD OFFSET WITHIN SECTOR * LDK A3,0 TIOD60 SUK A2,1 A2=RELATIVE REC NO RF(Z) TIOD65 REL REC OFFS IN A3 NOW AD A3,FDBRLE,A6 NO ADD RECORD LENGTH ADK A3,1 SKIP STATUS BYTE RB TIOD60 TIOD99 LDR A6,A5 FDB TIODMO LDK A1,/20 END OF MEDIUM RF TIODMF * * STORE RELATIVE REC OFFSET IN FBDRRO * TIOD65 EQU * LDK A1,0 OK ST A3,FDBRRO,A6 TIODMF EQU * RTN A14 EJECT * ************** * DMTIOT ************** * * ENTRY DMTIOT CHECK RETURN CODES FROM PHYS DISC I/O * * INPUT A1 = FDB ADDRESS * * OUTPUT A6 = FDB ADDRESS * A1 = 0 WHEN OK * = ERROR CODE ELSE * A9 = DM ECB ADDRESS * A8 = PHYS I/O ECB ADDRESS * A2 WILL BE DESTROYED * * USED REGISTERS : A1,A2,A6,A8,A9 * * DMTIOT EQU * LDR A6,A1 FDB ADDRESS LDKL A8,FDBECB ADR A8,A6 LD A9,DWTECB,A6 DM ECB ADDRESS DMTIT0 EQU * LD A1,ECBRC,A8 RF(Z) DMTIOX DISC I/O OK ANKL A1,/FEFF RF(NZ) DMTIT1 NOT ONLY RETRIES LDKL A2,/100 ORS A2,ECBRC,A9 USER RC RF DMTIOX DMTIT1 EQU * LD A2,FDBDBR,A6 ANKL A2,/C0FF ST A2,FDBDBR,A6 RELEASE BUFFER LD A2,ECBBA,A8 * GET BUFFER ADDR SUK A2,8 BUFSTA CM BUFDMI,A2 CLEAR VOL IDENT IN BUFFER LDK A1,/02 DISC IO ERROR LDKL A2,/FF7E NOT BIT 8 OR 15 AN A2,ECBRC,A8 ABL(NZ) DMTIOX LD A1,ECBRC,A8 BIT 8 OR 15 DMTIOX RTN A14 EJECT * * DMTIOZ HAS ALMOST THE SAME FUNCTION AS DMTIOT BUT * ECB ADDR IS INPUT PARAM * * IN: A1 = FDB ADDR * A8 = ECB ADDR * OUT: * A1 = RET CODE * A2 = DESTROYED * A6 = FDB ADDR * A8 = ECB ADDR * A9 == USER ECB * DMTIOZ LDR A6,A1 LD A2,DWTOR,A6 ORDER ANK A2,/3F CWK A2,QIRN RF(E) DMTIZ1 INDEXED READ NEXT CWK A2,QIRR RF(E) DMTIZ1 INDEXED RANDOM READ LD A1,FDBADF,A6 FDB DATA FILE DMTIZ1 EQU * LD A9,DWTECB,A1 USER ECB RB DMTIT0 EJECT ****DESCRIPTION************************************* * * GTBKBU WILL GET A BLOCK BUFFER FOR DISC I/O AND * PREPARE IT. ECB IS PREPARED FOR PHYS I/O. * ****ENTRY PARAMETERS******************************** * * A1 = FDB ADDRESS * FDB-CEX,ECB,SNR,RRO * ECB-FC,CW,BA,DWT-OR,ECB,EXTDMI * A8 = ECB ADDR * ****EXIT PARAMETERS********************************* * * A1 = A6 = FDB ADDR * A2 = FDBRRO WHEN SECTOR IS FOUND IN CORE * = -1 WHEN NO DATA IS FOUND IN * THE FOUND CORE BUFFER * A3 = BUFFER ADDRESS * A5 = ORDE R CODE * A8 = ECB ADDR * A9 = DM ECB ADDR * ****USED REGISTERS********************************** * * A1 - A9 * ****************************************************** GTBKBU EQU * LDR A6,A1 A6 = FDB ADDRESS LD A4,FDBCEX,A6 CURRENT EXTENT BLOCK POINTER LD A1,EXTDMI,A4 DMIDENT, FC LD A2,FDBSNR,A6 SECTOR NUMBER LD A9,DWTECB,A6 DM ECB SC A1,ECBFC,A8 FILE CODE OF DISC VOLUME LDR A4,A2 SAVE LDKL A5,SECTLE ST A5,ECBRL,A8 SECTOR LENGTH CF A14,DMTGBU A3 := BUFFER ADDRESS RF GTB100 RETURN IF SECTOR FOUND IN BUFFER * RETURN IF SECTOR MUST BE READ FROM DISC LDKL A2,-1 RET CODE GTB040 EQU * ST A4,ECBCW,A8 SECTOR NR LDR A5,A3 ADKL A5,BUFSTA A5 = DATA BUFFER START ADDRESS ST A5,ECBBA,A8 LD A5,DWTOR,A6 ANK A5,/3F LDR A1,A6 FDB ADDRESS AS PARAMETER RTN A14 GTB100 EQU * LD A2,FDBRRO,A6 REC OFFS IN BUFFER RB GTB040 STORE ORDER CODE EJECT ****DESCRIPTION************************************* * * GTLGRN WILL CONVERT FDBSNR AND FDBRRO TO A LOGICAL RECORD NO * ****ENTRY PARAMETERS******************************** * * A1 = FDB ADDRESS * FDBSNR,FDBRRO,FDBCEX * ****EXIT PARAMETERS********************************* * * A1=A5=A6= FDB ADDRESS * A2,A3 = LOG RECORD NO * ****USED REGISTERS********************************** * * A1 - A7 * ****************************************************** EJECT GTLGRN EQU * LDK A6,0 LDKL A3,FDBEXT ADKL A3,EXTLEN ADR A3,A1 ADDR FIRST EXT LENGTH LD A7,FDBCEX,A1 EXT ADDR ADKL A7,EXTLEN ADDR TO LAST LENGTH GTL050 EQU * CWR A3,A7 RF(E) GTL100 ALL PREVIOUS EXTENTS COUNTED * NOTE THAT ONLY (E) CAN BE TESTED ADR* A6,A3 NO OF SECT IN EXTENT ADKL A3,EXTELE EXT ENTRY LENGTH RB GTL050 NEXT EXTENT GTL100 EQU * LD A7,FDBCEX,A1 EXT ADDR SU A6,EXTBAS,A7 TOTAL NO OF SECTORS AD A6,FDBSNR,A1 TOTAL NR OF SECTORS * * CONVERT FDBRRO TO NO OF RECORDS * LDK A7,0 LC A7,FDBBLF,A1 BLOCK FACTOR LDR A5,A1 SAVE FDB ADDR CF A14,MPYMOD A1,A2=A6*A7 LD A4,FDBRLE,A5 ADK A4,1 RECORD LENGTH LDK A7,0 RECORD COUNTER LD A6,FDBRRO,A5 OFFSET IN SECTOR ADK A6,1 GTL150 EQU * ADK A7,1 RECORD COUNTER SUR A6,A4 RB(NN) GTL150 COUNT RECORDS IN SECTOR * * ADD SECT*BLOCFACT AND RECINCURRSECT * ADR A2,A7 RF(O) GTL160 OVERFLOW RF GTL170 GTL160 EQU * ANKL A2,/7FFF DELETE OVERFLOWBIT ADK A1,1 ADD CARRY GTL170 EQU * LDR A3,A2 LDR A2,A1 LDR A1,A5 FDB ADDR LDR A6,A5 RTN A14 END