|
|
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: 23928 (0x5d78)
Notes: pts_type(SC)
Names: »DMTASS.SC«
└─⟦245262b9f⟧ Bits:30009679 Philips computer tape "600220"
└─⟦this⟧ »M:92NA/DMTASS.SC«
└─⟦this⟧ »M:92SP/DMTASS.SC«
└─⟦38a30a456⟧ Bits:30009662 Philips computer tape "600104"
└─⟦this⟧ »M:92OD/DMTASS.SC«
└─⟦3a2bec7de⟧ Bits:30009687 Philips computer tape "600313"
└─⟦this⟧ »M:821/DMTASS.SC«
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
└─⟦this⟧ »M:92LP/DMTASS.SC«
└─⟦6349b94c6⟧ Bits:30009684 Philips computer tape "600308"
└─⟦this⟧ »M:92D1/DMTASS.SC«
└─⟦726a6c4ca⟧ Bits:30009685 Philips computer tape "600309"
└─⟦this⟧ »M:92D2/DMTASS.SC«
└─⟦9ad21746d⟧ Bits:30009682 Philips computer tape "600304"
└─⟦this⟧ »M:92NA/DMTASS.SC«
└─⟦9af60a727⟧ Bits:30009707 Philips computer tape "M_173"
└─⟦this⟧ »M:173/DMTASS.SC«
└─⟦this⟧ »M:173/DMTASS.SC«
└─⟦a25d6defe⟧ Bits:30009676 Philips computer tape "600210"
└─⟦this⟧ »M:92NA/DMTASS.SC«
└─⟦this⟧ »M:92SP/DMTASS.SC«
└─⟦dab19bdd7⟧ Bits:30009677 Philips computer tape "600218"
└─⟦this⟧ »M:261/DMTASS.SC«
IDENT DMTASS REL 9.2 79-11-16 870105040920 * =3 PR 5141 * = 79-04-06 * =2 WAIT AT VTOC READ * REL 9.1 79-04-06 * =1, PR 3413 * REL 9.1 78-10-25 * * **************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DMTASS = ASSIGN FILE CODE DISC I/O HANDLING * * * * * * **************************************************** * * THIS MODULE IS ACTIVATED FROM TASS * * INPUT A2 = TID TASK IDENT OF DMTASK AT PRESENT NOT USED * TASBLK PARAMETER BLOCK * * IN TASVOL IN TASBLK ALL VOLUMES WHERE THE FILE TO BE ASSIGNED CAN * RECIDE ARE DEFINED. ON THESE VOLUMES THE VTOC:S ARE SEARCHED TO FIND * ALL EXTENTS FOR THE FILE TO BE ASSIGNED. FOR EACH EXTENT ITS * FILE-SECTION-NO, FILE-EXTENT-NO,FILE-EXTENT-LENGTH AND * FILE-EXTENT-BASE ARE SAVED IN TASBLK. * FOR THE FIRST EXTENT (I.E. FILE-SECTION-NO =0 AND FILE-EXTENT-NO =0) * THE LAST-RECORD-NO, RECORD-LENGTH, BLOCKING-FACTOR AND VTOC-REC-NO * ARE SAVED TOO. * WHEN THE FIRST EXTENT HAS BEEN FOUND EXISTING FDB:S CAN BE SEARCHED * TO CHECK IF THE FILE TO BE ASSIGNED HAS PREVIOUSLY BEEN ASSIGNED TO * ANOTHER FILE CODE. IF SO THE FDB ADDRESS IS PUT INTO THE CD:TAB AND * THE ASSIGNMENT IS COMPLETED. IF NO FDB DESCRIBING THE FILE IS FOUND * THEN A NEW FDB MUST BE INITIALIZED AND THE REST OF THE * VOLUMES ARE CHECKED TO FIND ALL FILE EXTENTS * * FOR INDEX ASIGN THE PRODGRAM IS RUN TWICE. * DURING THE FIRST LOOP A MASTERINDEX IS READ. * FC 13 IN TTAB FOR DMTASK IS THEN USED EJECT * *************** * ENTRIES * *************** * ENTRY DMTASS ENTRY VTLRN ENTRY VLVBA ENTRY VLVRL ENTRY SECTLE EJECT * ***************** * EXTERNALS * ***************** * EXTRN QTJOB EXTRN FNDTID,TTB:TD * EXTRN DWTST EXTRN DWTADR EXTRN DWTMEC MMU ECB ADDRESS IN FDB * EXTRN ECBFC EXTRN ECBBA EXTRN ECBRL EXTRN ECBRC EXTRN ECBCW * EXTRN TIODM EXTRN DMTGBU EXTRN DMTRBU EXTRN CLRBUF EXTRN BUFSTA EXTRN BUFSNR EXTRN BUFDMI * EXTRN QFDBFL EXTRN FDBSTA EXTRN FDBEND EXTRN FDBECB EXTRN FDBEXT EXTRN EXTDMI EXTRN EXTLEN EXTRN EXTBAS EXTRN FDBRLE EXTRN FDBBLF EXTRN FDBVTO EXTRN FDBLRN EXTRN FDBNIF,FDBKA EXTRN FDBMIA,FDBAI1,FDBADF,FDBCRL EXTRN FDBSNR,FDBMRN,GTLGRN,EXTELE,FDBCEX EXTRN FDBDBR,FDBMRO EXTRN FDBMEC MMU ECB DISPLACEMENT IN FDB EXTRN MXIND,CRNQUE,DMTWM,MPYMOD EXTRN TASASB EXTRN TASCVO EXTRN TASVOL EXTRN TASCXO EXTRN TASSEX EXTRN TASXLB EXTRN TASFDB EXTRN TASVRL EXTRN TASVLE EXTRN TASVRN EXTRN TASECB EXTRN TASFIL,TASTID,TASMXA EXTRN TASSPW,TASFDD,TASTBE EXTRN TASCAQ EXTRN TASLFD =1 EXTRN VOLCHE EJECT X:A EQU 0 RECBFZ EQU 00004 INDEX RECORD BUFFER SIZE X:B EQU 0 INDXAC EQU 00000 INDEX ACCESS FUNCTIONS WHEN = 1 * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 1 * EJECT * ************ * DATA * ************ * * CYLID 1 WORD INCL FOR VOL LABEL VLVLE EQU 8 VLVBA EQU 12 VLVRL EQU 14 VLVER EQU 34 * VTFSNO EQU 8 VTFXNO EQU 10 VTFXLE EQU 14 VTFXBA EQU 18 VTLRN EQU 21 VTRLE EQU 24 VTBLF EQU 26 VTFIOR EQU 27 VTNIF EQU 37 VTKA EQU 38 * * QVTBLE= (VTOC BF)*(RL+1)+2 QVTBLE EQU 380 VTOC BLOCK LENGTH SECTLE EQU 410 SECTOR LENGTH DATA 0,0 4 WORDS DATA 0,0 STACK DMTA14 EQU *-2 EJECT * ************** * DMTIOC * ************** * * ENTRY DMTIOC CHECK RETURN CODES AFTER DISC I/O * RETURN TO DMTASX WITH A7=1 IF ERROR. * DMTIOC EQU * LDKL A8,TASECB LD A3,ECBBA,A8 LD A1,ECBRC,A8 ANKL A1,/FEFF BIT 7 ONLY RETRIES RF(Z) DMTIOX ADKL A14,4 ANK A1,/80 RF(NZ) DMT060 NEW VOLUME LOADED SUKL A3,BUFSTA CM BUFDMI,A3 CLEAR VOL IDENT IN BUFFER LDK A7,1 ABL DMTASX DISC I/O ERROR DMTIOX EQU * RTN A14 EJECT * ************** * DMTASS * ************** * DMTASS EQU * LDKL A14,DMTA14 INITIALIZE DMTASK A14 STACK POINTER ST A2,TASTID TASK IDENT CM TASMXA MASTER INDEX ADDR ANK A2,/2 RF(Z) DMT010 NOT FLEXTASC * * PERFORM VOLUME CHECK WITH LOCK * LD A8,TASASB ASBLK ADDR LCR A2,A8 ANK A2,/07 NO OF VOL LDKL A11,1 LOCK WANTED CF A14,VOLCHE SEE TASS LDR A1,A1 RF(Z) DMT010 OK LDK A7,4 VOL UNKNOWN SUR A8,A8 NO BUFFER =3 ABL DMTASX DMT010 EQU * * LDKL A8,TASECB * LD A1,TASCVO OFFSET INTO TASVOL FOR FIRST VOLUME DMT050 EQU * CF A14,CLRBUF RELEASE ALL FREE BUFFERS ENB ENB LD A1,TASVOL,A1 DMI, FC FIRST VOLUME SC A1,ECBFC,A8 LDKL A2,SECTLE ST A2,ECBRL,A8 SECTOR LENGTH LDK A2,0 ST A2,ECBCW,A8 SECTOR #0 VL (VOLUME LABEL) * * CF A14,DMTGBU GET A DM BUFFER ADDRESS IN A3 DATA /5700 NOP. READ ALWAYS ADKL A3,BUFSTA ST A3,ECBBA,A8 DATA BUFFER START * * PHYS READ 1 SECT FROM DISC * DMT060 EQU * LDK A7,/91 WAIT =2 LKM DATA 1 =2 LDKL A14,DMTA14 SET UP A14 STACK POINTER CF A14,DMTIOC I/O CHECK LD A2,VLVER,A3 VERSION CWK A2,'TO' DTOSS FORMATED DISC? RF(E) DMT100 YES LDK A7,8 NO ABL DMTASX ERROR RETURN * DMT100 EQU * CM TASVRN LD A6,VLVLE,A3 VTOC LENGTH ST A6,TASVLE LD A2,VLVBA,A3 VTOC BASE ST A2,ECBCW,A8 1:ST VTOC SECTOR NO = FSAT LD A9,VLVRL,A3 VTOC RECORD LENGTH ST A9,TASVRL EJECT * * SEARCH ALL VTOC:S * DMT110 EQU * LD A6,TASVLE SUK A6,1 ST A6,TASVLE UPDATE TASVLE RF(P) DMT115 MORE VTOC SECTORS EJECT * * ALL VTOC SECTORS ARE READ * LD A1,TASCVO SUK A1,2 ABL(N) DMT300 ALL VOLUMES CHECKED ST A1,TASCVO UPDATE TASCVO LDK A7,7 TOO MANY FILE SECTIONS LD A3,TASFIL ABL(NZ) DMTASX NOT DATA FILE LD A3,ECBBA,A8 SUKL A3,BUFSTA CF A14,DMTRBU RELEASE BUFFER LC A7,TASVOL,A1 CC A7,TASVOL+2,A1 RB(E) DMT050 SAME DM TASK * * ACTIVATE NEXT DM TASK * ADKL A7,'#D' LKM DATA -4 DATA DMTASS LKM DATA 3 EXIT EJECT * * READ NEXT VTOC SECTOR AND EXIT * DMT115 EQU * LD A3,ECBBA,A8 SUKL A3,BUFSTA CF A14,DMTRBU LD A2,ECBCW,A8 ADK A2,1 NEXT VTOC SECTOR LD A1,TASCVO LD A1,TASVOL,A1 CF A14,DMTGBU GET BUFFER DATA /5700 NOP. READ ALWAYS ADKL A3,BUFSTA ST A3,ECBBA,A8 ST A2,ECBCW,A8 LDK A7,/91 WAIT =2 LKM DATA 1 =2 LDKL A14,DMTA14 CF A14,DMTIOC LD A9,TASVRL LD A11,TASASB ADKL A11,2 POINTER TO FILENAME IN ASBLK LDK A4,2 CW A4,TASFIL RF(NE) DMT135 NOT MASTER INDEX ADKL A11,14 MX FILE NAME ADDR DMT135 EQU * ADK A3,2 SKIP CYLID DMT120 EQU * IM TASVRN INCREMENT VTOC RECORD NO LDR A4,A3 ADR A4,A9 ADDRESS STATUS BYTE LCR A2,A4 ANK A2,/FF ABL(Z) DMT250 NOT USED SUR A4,A9 BACK TO START OF VTOC REC LDR A7,A11 LDK A2,4 FILE NAME MAX 4 WORDS DMT150 EQU * LDR* A10,A4 CWR* A10,A7 ABL(NE) DMT250 NO MATCH SUK A2,1 RF(NP) DMT160 ALL 4 FILE NAME WORDS MATCH ADK A4,2 ADK A7,2 RB DMT150 CHECK NEXT WORD * * ONLY STANDARD FILES ARE HANDLED * DMT160 EQU * LC A2,VTFIOR,A3 CCK A2,'SS' STANDARD FILE ? RF(E) DMT165 YES CCK A2,'LL' LIBRARY FILE ? ABL(NZ) DMT250 NO LDK A2,0 FILE EXTENT NUMBER RF DMT167 DMT165 LD A2,VTFSNO,A3 FILE SECTION NUMBER EJECT DMT167 EQU * * * GET INFO FROM VTOC AND SAVE IN TASBLK * LDR A4,A3 START OF VTOC RECORD LD A1,TASCXO CURRENT OFFSET INTO TASSEX AND TASXLB SUK A1,4 ST A1,TASCXO RF(NN) DMT170 <= 4 EXTENTS LDK A7,9 ABL DMTASX MORE THAN 4 EXTENTS EXIST DMT170 EQU * ECR A2,A2 TO LEFT HALF OF A2 LC A2,VTFXNO+1,A4 EXT NO INTO RIGHT HALF OF A2 ST A2,TASSEX,A1 LD A6,TASCVO ST A6,TASSEX+2,A1 REMEMBER WHICH VOLUME LD A2,VTFXLE,A4 EXTENT-LENGTH ST A2,TASXLB,A1 LD A2,VTFXBA,A4 EXTENT BASE ST A2,TASXLB+2,A1 LD A2,TASSEX,A1 RF(NZ) DMT250 NOT FIRST EXTENT EJECT * FIRST FILE EXTENT * CHECK IF AN FDB DESCRIBING THE FILE ALREADY EXISTS. * LD A12,TASFDB RF(Z) DMT190 FIRST TIME EXT #0 FOUND LDK A7,7 ABL DMTASX EXT #0 ALREADY FOUND DMT190 EQU * LDKL A12,FDBSTA DMT200 EQU * LDR* A5,A12 ANK A5,/01 RF(Z) DMT210 FREE LD A2,FDBEXT,A12 CW A2,TASVOL,A6 RF(NE) DMT210 NOT SAME VOLUME LD A2,FDBVTO,A12 CW A2,TASVRN RF(NE) DMT210 NOT SAME VTOC REC LD A2,FDBMIA,A12 RF(NZ) DMT205 INDEX ASS BEFOR LD A2,TASFIL ABL(E) DMT400 SAME VTOC RECORD FDB FOUND DMT205 EQU * LDK A7,5 FILE CODE USED ABL DMTASX * DMT210 LDR* A12,A12 GET NEXT FDB ANKL A12,/FFFE RB(NE) DMT200 MORE FDB:S TO SEARCH * * NO MATCHING FDB EXIST FIND A FREE FDB * LDKL A12,FDBSTA DMT220 LDR* A5,A12 ANK A5,/01 RF(Z) DMT230 FREE LDR* A12,A12 GET NEXT FDB ANKL A12,/FFFE RB(NE) DMT220 MORE FDB:S TO CHECK LDK A7,3 ABL DMTASX NO FDB AVAILABLE * INITIALIZE FDB ZERO FROM FDB+2 * DMT230 EQU * ST A12,TASFDB LDR A10,A12 ADKL A10,QFDBFL LDK A2,0 LDR A1,A12 DMT233 ADK A1,2 CWR A1,A10 RF(E) DMT237 END OF FDB STR A2,A1 RB DMT233 DMT237 EQU * LDKL A2,/8000 * DEV NOT BUSY ST A2,DWTST,A12 LDKL A2,TIODM ST A2,DWTADR,A12 LDKL A2,SECTLE LDR A1,A12 ADKL A1,FDBECB ST A2,ECBRL,A1 LDK A2,/01 ORRS A2,A12 SET USE BIT LC A2,VTLRN,A4 SC A2,FDBLRN,A12 LD A2,VTLRN+1,A4 ST A2,FDBLRN+1,A12 LD A2,VTRLE,A4 ST A2,FDBRLE,A12 LC A2,VTBLF,A4 SC A2,FDBBLF,A12 LC A2,VTNIF,A4 SC A2,FDBNIF,A12 LD A2,VTKA,A4 ST A2,FDBKA,A12 LD A2,TASVRN ST A2,FDBVTO,A12 * IFT MMUPAG=1 LDR A2,A12 GET FDB ADDRESS ADKL A2,FDBMEC ADD MMU ECB DISPLACEMENT ST A2,DWTMEC,A12 SET ADDRESS TO MMU ECB IN FDB XIF * EJECT * * CHECK NEXT VTOC RECORD * DMT250 EQU * * A3 = ADR 1ST REC * A9 = VTOC REC LGTH ADR A3,A9 ADK A3,1 SKIP STATUS BYTE LDR A2,A3 SU A2,ECBBA,A8 CWK A2,QVTBLE ABL(L) DMT120 MORE RECORDS IN BUFFER ABL DMT110 GET NEXT VTOC SECTOR * * ALL VTOCS IN ALL VOLUMES ARE SEARCHED AT THIS POINT * DMT300 EQU * LDK A3,16 SU A3,TASCXO RF(NZ) DMT310 LDK A7,6 RF DMTASX FILE NAME UNKNOWN DMT310 EQU * LD A12,TASFDB RF(NZ) DMT320 LDK A7,7 RF DMTASX FIRST EXTENT IS MISSING EJECT * * PUT EXTENT INFORMATION INTO FDB IN ASCENDING ORDER * ACCORDING TO INCREASING SECTOR NO AND EXTENT NO * DMT320 EQU * * * CHECK IF RECORD BUFFERS ARE LARGE ENOUGH FOR INDEX FILE * LD A6,TASFIL RF(Z) DMT330 DATA FILE ASS LD A6,FDBRLE,A12 RECORD LENGTH ADK A6,2 SRL A6,1 NR OF WORDS CWK A6,RECBFZ RECORD BUFFER SIZE RF(NG) DMT330 OK LDK A7,12 RF DMTASX RECORD BUFFER IS TOO SMALL DMT330 EQU * LDR A6,A12 * FDB ADDR ADKL A6,FDBEXT LDK A2,0 LDR A5,A3 SRL A5,2 NUMBER OF EXTENTS DMT340 EQU * LDK A4,16 DMT350 EQU * SUK A4,4 CW A2,TASSEX,A4 RF(E) DMT360 MATCH CW A4,TASCXO RB(NE) DMT350 MORE EXTENTS TO CHECK * * THE EXTENT SEARCHED FOR IS NOT FOUND * CHECK IF RIGHT HALF OF A2 = 0 (EXT-NO = 0) * LDR A1,A2 ANK A1,/FF RF(NZ) DMT370 TRY NEXT SECTION * DMT355 EQU * LDK A7,7 RF DMTASX FILE SECTION MISSING DMT360 EQU * * * MOVE INFO ABOUT THIS EXTENT TO FDB * LD A1,TASSEX+2,A4 LD A1,TASVOL,A1 ST A1,EXTDMI,A6 LD A1,TASXLB,A4 ST A1,EXTLEN,A6 LD A1,TASXLB+2,A4 ST A1,EXTBAS,A6 ADK A6,6 SUK A5,1 RF(NP) DMT500 ALL EXTENTS HANDLED * * FIND NEXT FILE-SECTION-NO, FILE-EXT-NO COMBINATION * TO SEARCH FOR * LDR A1,A2 ANK A1,/FF SUK A1,3 RF(NE) DMT380 NOT EXT-NO = 3 DMT370 EQU * ECR A1,A2 ANK A1,/FF SUK A1,3 RB(E) DMT355 SECTION-NO = 3 ADK A1,4 INCREMENT SECTION-NO ECR A2,A1 EXT-NO = 0 RB DMT340 DMT380 ADK A2,1 INCREMENT EXT-NO RB DMT340 EJECT DMTASX EQU * =1 START * * AT ERROR EXIT UNLOCK FLEXDISCS WHICH WERE UNLOCKED BEFORE * LDR A5,A7 LDR A6,A8 SAVE LDK A1,3 LOOP DMTASY EQU * LC A2,TASLFD,A1 FILE CODES ANK A2,/FF RF(Z) DMTASZ NO CODE LDKL A8,TASECB SC A2,TASECB+1 LDK A7,/B8 UNLOAD ,WAIT LKM DATA 1 DMTASZ EQU * SUK A1,1 RB(NN) DMTASY NEXT LDR A7,A5 LDR A8,A6 RF DMT401 =1 END * * PUT FDB ADDRESS INTO TTAB/CD:TAB * DMT400 EQU * LDK A7,0 DMT401 EQU * =1 LD A2,TASTBE TTAB/CDTAB FILE CODE ADDR LDR A7,A7 RF(Z) DMT420 CORRECT RETURN CM -1,A2 ZERO FILE CODE * * REMOVE FDB WITH MASTER INDEX * LD A4,TASMXA MASTER INDEX ADDR RF(Z) DMT410 NO MASTER INDEX INH INH LD A2,MXIND SIEZE MASTERINDEXINDEX SUK A2,2 DMT405 EQU * SUK A2,4 NEXT OFFSET RF(NN) DMT407 OK RF DMT408 MASTER INDEX MUST BE FOUND DMT407 CW A4,MXIND+2,A2 RB(NE) DMT405 NEXT ENTRY LDKL A4,/7FFF ANS A4,MXIND+4,A2 SET ENTRY FREE DMT408 ENB ENB DMT410 EQU * LD A3,TASFDB RF(Z) DMT430 NO FDB USED LDKL A2,/FFFE ANRS A2,A3 CLEAR FDB USE BIT RF DMT430 DMT420 EQU * ST A12,1,A2 FDB ADDR DMT430 EQU * LDR A8,A8 RF(Z) DMT440 NO BUFFER LD A3,ECBBA,A8 SUKL A3,BUFSTA CF A14,DMTRBU RELEASE BUFFER DMT440 EQU * CF A14,CLRBUF RELEASE ALL FREE BUFFERS CF A14,TASCAQ CHECK ASSIGN QUEUE CF A15,QTJOB QUEUE CALLING TASK ENB LKM DATA 3 EJECT DMT500 EQU * LD A6,TASFIL ABL(Z) DMT700 DATA FILE IFF INDXAC=1 LDKL A7,-1 REQ ERR RB DMTASX XIF IFT INDXAC=1 SUK A6,1 ABL(Z) DMT600 INDEX FILE EJECT * * THIS IS MASTER INDEX LOOP. * CONNECT FDB TO FILE CODE IN DMTASK TTAB AND READ * MASTER INDEX WITH SEQUENTIAL READ ON THIS FILE CODE * LD A7,TASTID DMTASK ID INH CF A15,FNDTID TTAB ADDR TO A2 ENB ST A2,TASSPW LDKL A3,/0100 INDEX DATA FILE LD A1,TASASB LC A3,1,A1 FILE CODE SC A3,TASECB+1 ST A3,TTB:TD+2,A2 TTAB ENTRY ST A12,TTB:TD+4,A2 FDB ADR LD A3,ECBBA,A8 SUKL A3,BUFSTA CF A14,DMTRBU RELEASE BUFFER * * CALC NO OF WORDS NEEDED IN MASTRE INDEX * LD A6,FDBRLE,A12 REC LGTH LD A7,FDBLRN+1,A12 NO OF RECS CF A14,MPYMOD A1,A2=NO OF BYTES NEEDED SRC A1,1 ORR A2,A1 GET MOST SIGN BIT ADK A2,5 SRL A2,1 NO OF WORDS NEEDED RF(Z) DMT570 WRONG SIZE INH LD A4,MXIND LENGTH MXIND SUK A4,4 MAX A5 VALUE LDKL A5,-2 OFFSET DMT540 EQU * ADK A5,4 GET ENTRY CWR A5,A4 RF(G) DMT570 NO ENTRY FOUND LD A3,MXIND,A5 RB(Z) DMT540 ZERO ENTRY LD A6,MXIND+2,A5 RB(N) DMT540 ENTRY USED SUR A6,A2 NO OF SPARE WORDS RB(N) DMT540 LARGER ENTRY NEEDED * * SUFFICIENT SPACE FOUND * LDKL A1,/8000 USED BIT ORS A1,MXIND+2,A5 MARK ENTRY USED ST A3,TASMXA MASTER INDEX ADDR ST A3,FDBMIA,A12 LD A7,FDBLRN+1,A12 STR A7,A3 NO OF ENTRIES LD A1,FDBRLE,A12 ST A1,2,A3 ENTRY LENGTH ADK A3,4 SKIP MX HEADRER ST A3,ECBBA,A8 BUFFER ADDR ST A1,ECBRL,A8 REQ LGTH LDR A1,A5 MXIND ENTRY PAR TO REACTIVATION CWR A1,A4 MXIND ENTRY RF(NL) DMT590 LAST ENTRY LD A3,MXIND+6,A1 RF(N) DMT590 NEXT ENTRY USED * * MOVE SPARE WORDS TO NEXT ENTRY * LD A2,MXIND+2,A1 ANKL A2,/7FFF REMOVE USE BIT SUR A2,A6 ORKL A2,/8000 USE BIT ST A2,MXIND+2,A1 ADS A6,MXIND+6,A1 MAKE NEXT ENTRY LARGER LD A7,MXIND,A1 PREVIOUS POINTER SLL A2,1 NO OF BYTES ADR A7,A2 ST A7,MXIND+4,A1 EJECT DMT590 EQU * ENB * * NOW READ MASTER INDEX WITH SEQUENTIAL READ * A8 = TASECB * OTHER REQ TO THE SAME FILE CODE ARE NOT POSSIBLE * BECAUSE AN INDEX FILE MUST ALWAYS BE ASSIGNED COMMON * DMT550 EQU * LDK A7,/42 SEQ READ,NOWAIT,NO EA LKM DATA -1 DATA DMTAR5 LKM DATA 3 EXIT DMTAR5 EQU * LDKL A14,DMTA14 RESTORE STACK LDKL A8,TASECB ECB ADDR LD A2,ECBRC,A8 ANKL A2,/FEFF BIT 7 ONLY RETRIES RF(Z) DMT560 NO ERROR * * REMOVE THE ONLY CRN BUFFER * LD A4,TASFDB FDB ADDR LD A5,FDBCRL,A4 CRN BUF ADR RF(Z) DMT553 NO CRN CM FDBCRL,A4 INH LD A6,CRNQUE STR A6,A5 ST A5,CRNQUE ENB DMT553 EQU * ANKL A2,/1000 BIT 3 = EOF RF(NZ) DMT595 READY ,WHOLIE MXINDEX IS READ LDK A7,7 DMT555 SUR A8,A8 NO BUFFER ABL DMTASX DISC IO ERR DMT560 EQU * * * RECORD READ,READ NEXRT * LD A2,ECBRL,A8 ADS A2,ECBBA,A8 REC LENGTH RB DMT550 READ NEXT RECORD DMT570 EQU * ENB LDK A7,3 NOT SUFF SPACE RB DMT555 EJECT DMT595 EQU * * * MASTER INDE X READUY. RERUN FOR INDEX FILE * LDK A1,1 ST A1,TASFIL INDEX FILE LD A3,TASSPW TTAB ADR DMTASK CM TTB:TD+2,A3 DELETE ENTRY CM TTB:TD+4,A3 LD A3,TASFDB FDB ADDR LDKL A2,/FFFE ANRS A2,A3 CLEAR FDB USE BIT CM TASFDB EXT 0 NOT FOUND FOR INDEX LDK A1,16 ST A1,TASCXO LAST ENTRY POSSIBLE LDK A1,0 * TASCVO REMAINS ZERO FROM MASTER INDEX LOOP ABL DMT050 ASSIGN INDEX EJECT DMT600 EQU * * * INDEX FILE ASSIGN * LDK A7,10 RET CODE LD A10,TASFDD FDB ADDR DATA FILEP RF(Z) DMT650 NO DATA FILE * * STORE INDEX ADDR IN FDB DATA FILE * INH INH LC A3,DWTST,A10 ANK A3,/40 RF(NZ) DMT639 OTHER REQUEST BUSY LDK A3,8 MAX NO OF INDE*2 DMT620 EQU * SUK A3,2 RF(N) DMT640 MORE THAN 4 INDEX LDR A6,A10 ADR A6,A3 LD A2,FDBAI1,A6 RB(NZ) DMT620 USED ST A12,FDBAI1,A6 STORE FDB ADDR INDEX * * MOVE FDB ADDRESSES FROM DATA FILE TO ALL INDEX FILES * LDK A5,8 NR OF INDEX *2 DMT625 EQU * SUK A5,2 RF(N) DMT635 ALL FDB UPPDATED LDR A1,A10 FDB DATA ADR A1,A5 LD A3,FDBAI1,A1 FDB ADDR INDEX RB(Z) DMT625 NO INDEX FILE LDKL A1,FDBADF ADR A3,A1 TO ADDR ADR A1,A10 FROM ADDR LDK A2,10 NO OF BYTES CF A14,DMTWM MOVE 5 WORDS RB DMT625 DMT635 EQU * LC A1,DWTST,A10 SC A1,DWTST,A12 SAME BUSY BITS AS DATA FILE ENB ENB LD A1,TASMXA ST A1,FDBMIA,A12 MASTER INDEX ADDR RF DMT720 DMT639 ADK A7,2 A7=13=OTHER REQ BUSY DMT640 ADK A7,1 A7=11=4 INDEX ALREADY DMT650 EQU * A7=10=NO DATA FILE ABL DMTASX XIF EJECT DMT700 EQU * ASSIGN DATA FILE ST A12,FDBADF,A12 FDB ADDR TO FDB LD* A1,TASASB ASBLK ADDR ANKL A1,/6000 SLL A1,1 ORS A1,FDBDBR,A12 DELAY + BASIC DMT720 EQU * * * SET FDBMRN TO MAX REC NO IN FILE * LDR A1,A12 ADKL A1,FDBNIF ADKL A1,EXTELE-2 DMT750 SUKL A1,EXTELE LDR* A2,A1 EXT BASE RB(Z) DMT750 AD A2,-2,A1 SUKL A1,EXTELE-2 ST A1,FDBCEX,A12 SUK A2,1 ST A2,FDBSNR,A12 LDR A1,A12 CF A14,GTLGRN GET LOG REC NO LDK A1,0 LC A1,FDBBLF,A12 BLOCK FACTOR SUK A1,1 ADR A3,A1 RF(O) DMT760 RF DMT770 DMT760 ANKL A3,/7FFF ADK A2,1 CARRY DMT770 SC A2,FDBMRN,A12 ST A3,FDBMRN+1,A12 * * CALCULATE FDBMRO WHICH IS MAX FDBRRO IN FILE * LD A6,FDBRLE,A12 REC LENGTH ADK A6,1 LDK A7,0 LC A7,FDBBLF,A12 BLOCK FACT SUK A7,1 CF A14,MPYMOD A1,A2=A6*A7 ST A2,FDBMRO,A12 MAX FDBRRO ABL DMT400 END