|
|
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: 17282 (0x4382)
Notes: pts_type(SC)
Names: »TIODM.SC«
└─⟦dab19bdd7⟧ Bits:30009677 Philips computer tape "600218"
└─⟦this⟧ »M:261/TIODM.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 1 * 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