|
|
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: 17030 (0x4286)
Notes: pts_type(SC)
Names: »TIODM.SC«
└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
└─⟦this⟧ »M:167D/TIODM.SC«
IDENT TIODM REL 8.2 78-09-15 870105040820 ORDER SET LRN IMPLEMENTED + EA SR REL 8.1 78-04-21 * **************************************************** * * 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 ECBFC ENTRY TCFILE,COFILE EJECT * ***************** * EXTERNALS * ***************** * * EXTRN TCTAB EXTRN TDISP EXTRN DSUMOD EXTRN FNDTID EXTRN ACTOT EXTRN DISEND EXTRN DWTECB EXTRN DWTOR EXTRN DWTTDM EXTRN DMTGCA GET CRN ADDRESS EXTRN DMTGEA GET EA WORD ADDR AND MASK EXTRN DMTASK EXTRN CALSNO EXTRN ECBBA EXTRN ECBRL EXTRN ECBEL EXTRN ECBRC EXTRN ECBCW EXTRN FDBLEN EXTRN SQR SEQ READ ORDER CODE EXTRN EARELB,DWTST,CRNGET,EATEST 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 0 X:B EQU 0 TCFILE EQU X:B MONCON X:C EQU 0 COFILE EQU 005 MONCON 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 * EJECT NOOFOR EQU 25 NO OF ORDER CODES * ECBFC EQU 1 * * FDB OFFSET DEFINITIONS * FDBLNK EQU 0 LINK TO NEXT FDB FDBECB EQU 18 ECB START FDBSNR EQU 32 SECTOR NUMBER FDBRRO EQU 34 RELATIVE RECORD OFFSET FDBRLE EQU 36 RECORD LENGTH FDBBLF EQU 38 BLOCKING FACTOR FDBTNR EQU 39 TASK NUMBER CALLING TASK FDBVTO EQU 40 VTOC RECORD NO FDBCEX EQU 42 CURRENT EXTENT BLOCK POINTER FDBEXT EQU 44 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 69 LAST RECORD NUMBER FDBNIF EQU 68 NO OF INDEX FILES FDBEAL EQU 72 EA LINK ROOT FDBCRL EQU 74 CRN LINK ROOT FDBKA EQU 76 KEY ADDRESS IN DATA FILE FDBMIA EQU 78 ADDRESS OF MASTER INDEX FDBADF EQU 80 ADDRESS OF DATA FILE FDB FDBAI1 EQU 82 ADDRESS OF INDEX FILE FDB FDBDBR EQU 90 DELAY,BASIC AND REL BUFFER FLAGS FDBMRN EQU 91 LAST REC NR IN FILE FDBMRO EQU 94 MAX FDBRRO * * CRN BUFFER OFFSET DEFINITIONS * CRNTID EQU 2 TASK ID CRNCDF EQU 4 CURRENT DATA FILE CRNCIF EQU 8 CURRENT INDEX FILE EJECT * ************* * TIODM * ************* * * 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,TCTAB 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 * LD A1,2,A3 TASK STATUS RF(N) TIO13 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 * DELIXR EQU * DELETE INDEX RECORD * INSIXR EQU * INSERT INDEX RECORD * IXRARE EQU * INDEXED RANDOM READ 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 ADKL 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 * 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,'D0' CF A15,FNDTID A2:=TTAB ADDR LDR A5,A2 RF(NZ) TIOD70 TTAB FOUND HLT DMTASK MISSING IN TCTAB 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