13 22FL ... SEG CAFSINFO,865,D. A. BELL 4 22_= ...# 4 23DW ...# 19 23YG ...# THIS SEGMENT IS THE MAIN INTERFACE BETWEEN STANDARD GEORGE 21 24D6 ...# ROUTINES AND THE CAFS SUBSYSTEM. IT IS ENTERED BY THE CAFSINFORM 21 24XQ ...# MACRO TO DEAL WITH EVENTS NOTICED BY GEORGE THAT ARE OF INTEREST 10 25CB ...# TO THE CAFS ROUTINES. 4 25X2 ...# 21 26BL ...# ON ENTRY TO THE SEGMENT THERE IS AN EVENT IDENTIFIER IN ACOMMUNE1 21 26W= ...# OF THE ACTIVITY THAT INDICATES WHY CAFSINFORM WAS CALLED. THE 20 27*W ...# CURRENT LIST OF THESE IDENTIFIERS AND THEIR MEANINGS FOLLOWS: 4 27TG ...# 4 28*6 ...# 21 28SQ ...# 1. DISC DRIVE HAS BEEN ENGAGED ) ACOMMUNE2 HOLDS THE RELEVANT 20 29#B ...# ) DEVICE LIST ADDRESS 14 29S2 ...# 2. DISC DRIVE HAS BEEN DISENGAGED ) 4 2=?L ...# 21 2=R= ...# 3. UDAS FILE HAS BEEN OPENED FOR WRITING ) ACOMMUNE2 HOLDS THE 21 2?=W ...# ) RELEVANT EXOFILE 19 2?QG ...# 4. UDAS FILE HAS BEEN CLOSED AFTER WRITING ) NUMBER 4 2#=6 ...# 21 2#PQ ...# 5. CAFS BIT MAPS NOW FREE - ACOMMUNE2 INDICATES WHICH BIT MAPS 4 2*9B ...# 4 2*P2 ...# 4 2B8L ...# 4 2BN= ...# 4 2C7W ...# 17 2CMG ... SEGENTRY K1CAFSINFO,XK1 [THE ONLY ENTRY POINT 4 2D76 ...# 4 2DLQ ...# 21 2F6B ...# THE FORMALITY OF A LOCAL ENTRY POINT LABEL IS REALLY UNNECESSARY 21 2FL2 ...# AS WE GO STRAIGHT INTO THE CODE. HOWEVER, THERE MAY BE A TIME... 4 2G5L ...# 4 2GK= ...XK1 4 2H4W ...# 21 2HJG ...# FIRST WE SPLIT UP THE FUNCTIONS FROM THE IDENTIFIER IS ACOMMUNE1 4 2J46 ...# 10 2JHQ ... SMO ACOMMUNE1(2) 7 2K3B ... BRN / 4 2KH2 ...# 18 2L2L ... BRN (GEOERR) [THERE IS NO EVENT TYPE 0 15 2LG= ... BRN XENGORDIS [ENGAGE EVENT 16 2L_W ... BRN XENGORDIS [DISENGAGE EVENT 16 2MFG ... BRN OPENORCLOSE [OPEN FILE EVENT 16 2M_6 ... BRN OPENORCLOSE [CLOSE FILE EVENT 17 2NDQ ... BRN TFREEBMAPS [FREE BIT MAPS EVENT 4 2NYB ...# 4 2PD2 ...# 6 2PXL ...XENGORDIS 4 2QC= ...# 4 2QWW ...# 19 2RBG ...# HERE WE DEAL WITH THE ENGAGEMENT/DISENGAGEMENT OF A DISC 4 2RW6 ...# 20 2S*Q ...# WE ARE ONLY INTERESTED IN DRIVES WHICH ARE CONNECTED THROUGH 16 2STB ...# CAFS AND THUS IGNORE THE EVENT ON OTHER DRIVES 4 2T*2 ...# 10 2TSL ... LDX 3 ACOMMUNE2(2) 17 2W#= ... JNCAFSDV 3,UP [JIF NOT A CAFS DRIVE 4 2WRW ...# 20 2X?G ...# THE CAFS SUBSYSTEM MAY NOT HAVE BEEN SET UP IF WE ARE STILL 6 2XR6 ...# IN EMS 4 2Y=Q ...# 21 2YQB ... LDX 1 CAFSPTR [CHECK IF CAFS SUSBSYSTEM IS THERE 18 2_=2 ... BZE 1 SDECRCOUNT [JIF NO CAFS ACTIVITY YET 4 2_PL ...# 20 329= ...# WHEN A CAFS DISC IS ENGAGED, WE RECORD THE CSN IN THE CENTRAL 21 32NW ...# TABLE OF CAFS CSN'S AND REMOVE THE RELEVANT READ VALIDATION BIT 19 338G ...# FROM ALL ACTIVE CAFS CHANNELS. WE ALSO MARK THEIR OLPA'S 20 33N6 ...# LOCAL CSN TABLE ENTRY FOR THE DRIVE TO FORCE REVALIDATION OF 19 347Q ...# RIGHTS OF ACCESS & NOTIFICATION OF THE DISC'S AVAILABILITY 4 34MB ...# 20 3572 ...# FOR DISENGAGEMENT OF A DISC THE ACTION IS SIMILIAR, BUT THE 21 35LL ...# CENTRAL TABLE ENTRY IS MUTILATED TO INHIBIT ANY FURTHER COMPARISON 21 366= ...# UNTIL THE DRIVE IS RE-ENGAGED & THE LOCAL TABLE ENTRY IS CLEARED 4 3K=L ...# 4 3KQ= ...# 16 3K_6 ...# NOW THE ACTION DEPENDS ON THE TYPE OF EVENT 4 3L82 ...# 20 3LBW ... LGEOG 3,5 [GET GEOG UNIT NUMBER OF DRIVE 19 3LKQ ... LDX 6 CFRDBITMASK(3) [& READ VALIDATION BIT MASK 11 3LSL ... LDX 7 CFRDBITMASK+1(3) 20 3M3G ... ANDX 6 BSB18 [REMOVE UNWANTED BITS FROM MASK 20 3M=B ... SBX 5 CFLOWGEOG(1) [CONVERT GEOG UNIT NUMBER TO USE 18 3MF= ...# [AS TABLE MODIFIER LATER 4 3MN6 ...# 20 3MX2 ... LDCT 0 #400 [FIRST MUTILATE THE TABLE ENTRY 20 3N5W ... SMO 5 [(N.B. USING '#40000000' INHIBITS 21 3N#Q ... STO 0 CFDRVTAB(1) [EQUALITY COMPARISON WITH LOCAL TABLE 19 3NHL ...# [ENTRIES WHICH ARE ZEROISED) 4 3NQG ...# 20 3N_B ... LDN 4 0 [SET INITIAL 'LOCAL' TABLE ENTRY 4 3P8= ...# 10 3PC6 ... LDX 0 ACOMMUNE1(2) 20 3PL2 ... SBN 0 CFDISENGAGE [JIF THIS IS A DISENGAGE EVENT 10 3PSW ... BZE 0 SDISENGAGE 4 3Q3Q ...# 21 3Q=L ...# FOR ENGAGE EVENTS WE CAN NOW ENTER THE NEW CSN INTO THE CENTRAL 8 3QFG ...# TABLE OF CSN'S 4 3QNB ...# 20 3QX= ... LADDP ACOMMUNE2(2),3 [GET ADDRESS OF APIA FOR DRIVE 19 3R66 ... LDCT 0 #20 [CHECK IF THE DRIVE IS STILL 21 3R*2 ... ANDX 0 BSUNIT(3) [ONLINE - IT MAY HAVE GONE DOWN AGAIN 21 3RHW ... BZE 0 SDISENGAGE [SAME AS DISENGAGE IF DRIVE IS DOWN 4 3RQQ ...# 21 3R_L ... LDX 4 BSUNIT5(3) [ELSE STORE NEW CSN INTO CAFS TABLE 7 3S8G ... SMO 5 10 3SCB ... STO 4 CFDRVTAB(1) 21 3SL= ... ORX 4 CTMXS2 [SET APPROPRIATE 'CAFS EVENT' BITS 21 3ST6 ... ORX 6 GSIGN [& ENSURE THAT EXEC REFERS NEXT T'FER 4 3T42 ...# 6 3T=W ...SDISENGAGE 4 3TFQ ...# 20 3TNL ...# WE NOW PREPARE TO SEARCH ROUND THE CAFS RING TO DEAL WITH ALL 11 3TXG ...# THE ACTIVE CAFS CHANNELS 4 3W6B ...# 19 3W*= ... LDN 2 CFRING(1) [GET END ADDRESS FOR SEARCH 4 3WJ6 ...# 6 3WR2 ...TOCLEARACTS 20 3W_W ... LDX 1 CFRING(1) [GET ADDRESS OF NEXT CAFS OLPA 18 3X8Q ... BXE 1 2,SDECRCOUNT [JIF DEALT WITH THEM ALL 4 3XCL ...# 17 3XLG ... SBN 1 CFRING [FIND START OF OLPA 21 3XTB ... ORS 6 CFRDBITS(1) [CLEAR APPROPRIATE READ VALIDATION 15 3Y4= ... ORS 7 CFRDBITS+1(1) [BITS IN OLPA 10 3Y?6 ... ERS 6 CFRDBITS(1) 10 3YG2 ... ERS 7 CFRDBITS+1(1) 4 3YNW ...# 20 3YXQ ...# THE LOCAL CSN ENTRY FOR THIS DRIVE IS IN THE /CFCSNTABLE BLOCK 10 3_6L ...# IN FRONT OF THE OLPA 4 3_*G ...# 14 3_JB ... HUNT2J 3,CAFS,CFCSNTABLE,1,(GEOERR) 7 3_R= ... SMO 5 20 4226 ... STO 4 CFTDRVTAB(3) [RESET TABLE ENTRY AS NECESSARY 20 4292 ... BRN TOCLEARACTS [& GO FOR NEXT ACTIVITY ON RING 4 42DG ...# 6 42Y6 ...SDECRCOUNT 4 43CQ ...# 21 43XB ...# EXEC KEEPS A COUNT OF THE NUMBER OF EVENTS THAT IT HAS SENT FOR 21 44C2 ...# CAFS DRIVES. WE HAVE TO DECREMENT THAT COUNT WHEN WE PROCESS THE 6 44WL ...# EVENT. 4 45B= ...# 8 45L4 ... LDX 2 FX2 20 45TW ... LDX 3 ACOMMUNE2(2) [GET ADDR OF ENTRY IN DEVICE LIST 19 46*G ... JNCFENBU 3,UP [JIF NO COUNT TO DECREMENT 21 46T6 ...# [(PROBABLY BECAUSE OF 'HO' COMMAND) 4 47#Q ...# 21 47SB ... LDCT 0 #100 [COUNT IN B1-2 OF CFRDBITMASK (K202) 18 48#2 ... SBS 0 CFRDBITMASK(3) [OF THE DEVICE LIST ENTRY 17 48RL ... BRN UP [ALL DONE, SO EXIT 4 49?= ...# 4 49QW ...# 6 4==G ...OPENORCLOSE 4 4=Q6 ...# 20 4?9Q ...# WHEN OPENING/CLOSING FILES FOR WRITING WE CHECK ALL THE FILE 20 4?PB ...# AREAS OF THE FILE AND IF THEY ARE ON CARTRIDGES THAT ARE KNOWN 21 4#92 ...# TO THE CAFS SYSTEM, WE REMOVE THE CORRESPONDING READ VALIDATION 13 4#NL ...# BITS FROM ALL THE ACTIVE OLPA'S 4 4*8= ...# 20 4*MW ... LDX 1 CAFSPTR [CHECK IF CAFS SUBSYSTEM IS THERE 18 4B7G ... BZE 1 UP [JIF NO CAFS ACTIVITY YET 4 4B8* ...# 21 4B98 ...# WHEN A FILE IS OPENED/CLOSED FOR WRITING, WE SET A 'CAFS EVENT' 21 4B=3 ...# BIT IN THE LOCAL CSN TABLE FOR EACH OLPA THAT IS AFFECTED BY THE 21 4B=W ...# ACTION. WHILE WE ARE COLLECTING DETAILS OF THE CHANGES THAT ARE 21 4B?P ...# REQUIRED, WE SET THE APPROPRIATE EVENT BITS IN A TEMPORARY BLOCK. 4 4B#J ...# 21 4B*C ... LDX 3 CFDRVTABLEN(1) [GET LENGTH REQUIRED FOR DATA BLOCK 19 4BB= ... SETUPCOR 3,1,ADATA,CSTORE [& GET BLOCK OF THAT LENGTH 4 4BC5 ...# 16 4BCY ...# THE BLOCK IS ZEROISED BY WAY OF INITIALISATION 4 4BDR ...# 8 4BFL ... STOZ A1(1) 8 4BGF ... LDN 4 A1(1) 20 4BH# ... LDN 5 A1+1(1) [X3 HOLDS LENGTH OF BLOCK STILL!! 8 4BJ7 ... MOVE 4 -1(3) 4 4BK2 ...# 20 4BKT ... LDX 1 CAFSPTR [ADDRESS OF CENTRAL CAFS ACTIVITY 4 4BM6 ...# 19 4C6Q ... STOZ AWORK1(2) [PREPARE AN AREA IN WHICH TO 20 4CLB ... STOZ AWORK2(2) [ACCUMULATE READ VALIDATION BITS 4 4D62 ...# 21 4DKL ... MFINDEXO 3,ACOMMUNE2(2) [LOCATE THE FILE'S EWDAS/EXOF BLOCK 4 4F5= ...# 20 4FJW ... LDX 7 FIP+5(3) [OBTAIN NUMBER OF FILE AREA CELLS 8 4G4G ... ANDX 7 BSP16 18 4GJ6 ... BZE 7 UPFREE [JIF FILE HAS NO AREAS 18 4H3Q ... ADN 3 FDCELLS [ADDRESS OF CELLS AREA 4 4HHB ...# 18 4J32 ... NGN 6 1 [INITIALISE MARKERS ETC 4 4JGL ...# 5 4K2= ...NEXTAREA 21 4KFW ... BXE 6 0(3),TRYNEXT [JIF AREA ON SAME CARTRIDGE AS LAST 19 4K_G ... LDX 6 0(3) [ELSE REMEMBER THE NEW CSN 4 4LF6 ...# 19 4LYQ ... LDN 5 0 [SET CAFS CSN TABLE POINTER 4 4MDB ...# 6 4MY2 ...NEXTDRVTAB 21 4NCL ... SMO 5 [SEE IF FILE AREA CSN IS IN CAFS LIST 17 4NX= ... BXE 6 CFDRVTAB(1),SMATCHCSN [JIF MATCHED CSN'S 19 4PBW ... ADN 5 1 [ELSE TRY NEXT TABLE ENTRY 13 4PWG ... BXU 5 CFDRVTABLEN(1),NEXTDRVTAB 4 4QB6 ...# 5 4QTQ ...TRYNEXT 21 4R*B ... ADN 3 6 [STEP POINTERS TO NEXT FILE AREA CELL 20 4RT2 ... BCT 7 NEXTAREA [JIF STILL MORE CELLS TO CHECK 4 4S#L ...# 4 4SS= ...# 20 4T?W ...# BY NOW WE HAVE CONSTRUCTED A MASK IN AWORK1/2 FOR ALL THE READ 20 4TRG ...# VALIDATION BITS THAT MUST BE REMOVED FROM ACTIVE CAFS CHANNELS 4 4W?6 ...# 21 4WQQ ... LDX 0 AWORK1(2) [LOOK AT ALL THE VALID BITS IN THE 21 4X=B ... ANDX 0 BSB18 [MASK WE HAVE CREATED AND JIF THERE 19 4XQ2 ... ORX 0 AWORK2(2) [WERE NONE THAT WERE RELEVANT 9 4Y9L ... BZE 0 UPFREE 4 4YP= ...# 20 4_8W ...# THERE ARE BITS SET, SO WE MUST GO ROUND THE CAFS RING A DEAL 10 4_NG ...# WITH ALL THE OLPA'S 4 5286 ...# 9 52MQ ... SMO CAFSPTR 18 537B ... LDN 1 CFRING [FIND START OF CAFS RING 21 53M2 ... LDX 6 AWORK1(2) [SET THE FULL MASK TO APPLY TO EACH 21 53_C ... ANDX 6 BSB18 [OLPA & BY CLEARING CAFS-INITIALISED 21 54?S ... ORX 6 GSIGN [BIT ENSURE EXEC WILL REFER NEXT PERI 9 54L= ... LDX 7 AWORK2(2) 20 555W ... LDX 4 1 [REMEMBER START ADDR OF CAFS RING 19 55*N ... MHUNTW 2,ADATA,CSTORE [LOCATE TEMPORARY DATA BLOCK 4 55KG ...# 5 5656 ...NEXTACT 19 56JQ ... LDX 1 0(1) [LOOK AT NEXT ELEMENT ON RING 18 574B ... BXE 1 4,UPFREE [JIF REACHED END OF RING 4 57J2 ...# 21 583L ... ORS 6 CFRDBITS-CFRING(1) [CLEAR READ VALIDATION BITS AS REQD 12 58H= ... ORS 7 CFRDBITS+1-CFRING(1) 12 592W ... ERS 6 CFRDBITS-CFRING(1) 12 59GG ... ERS 7 CFRDBITS+1-CFRING(1) 4 59H7 ...# 19 59HS ...# NOW WE UPDATE THE LOCAL CSN TABLE ENTRIES FOR THIS OLPA 4 59JF ...# 7 59K6 ... LDX 3 1 9 59KR ... SBN 3 CFRING 14 59LD ... HUNT2J 3,CAFS,CFCSNTABLE,,(GEOERR) 4 59M5 ...# 21 59MQ ... LDX 5 ALOGLEN(3) [GET NUMBER OF POSSIBLE CSN ENTRIES 4 59NC ...# 6 59P4 ...SETEVENTS 7 59PP ... SMO 5 21 59QB ... LDX 0 CFTDRVTAB-1(3) [GET CURRENT ENTRY VALUE & IGNORE THE 21 59R3 ... BZE 0 SNOTWANTED [EVENT IF DRIVE IS NOT IN USE BY OLPA 4 59RN ...# 7 59S* ... SMO 5 21 59T2 ... ORX 0 A1-1(2) [ADD ANY EVENT BITS AND THEN RESTORE 16 59TM ... SMO 5 [THE TABLE ENTRY 11 59W# ... STO 0 CFTDRVTAB-1(3) 4 59W_ ...# 6 59XL ...SNOTWANTED 18 59Y? ... BCT 5 SETEVENTS [DEAL WITH WHOLE TABLE 4 59YY ...# 19 5=26 ... BRN NEXTACT [AND GO FOR NEXT OLPA ON RING 4 5=FQ ...# 4 5=_B ...# 6 5?F2 ...SMATCHCSN 4 5?YL ...# 13 5#D= ...# HERE WHEN WE GET A MATCH ON CSN'S 4 5#XW ...# 21 5*CG ... ADX 5 CFLOWGEOG(1) [RESTORE GEOG UNIT NUMBER AND LOCATE 20 5*X6 ... FINDPERE 1,APGEOG,5 [THE DRIVE'S DEVICE LIST ENTRY 4 5BBQ ...# 11 5BWB ... LDX 0 CFRDBITMASK(1) 21 5CB2 ... ORS 0 AWORK1(2) [MERGE THE READ VALIDATION BIT INTO 17 5CTL ... LDX 0 CFRDBITMASK+1(1) [THE CUMULATIVE MASK 9 5D*= ... ORS 0 AWORK2(2) 4 5DSW ...# 21 5F#G ... LDX 0 ACOMMUNE1(2) [THE NEXT BIT ONLY APPLIES WHEN FILES 19 5FS6 ... SBN 0 CFCLOSEFILE [ARE BEING OPENED FOR WRITING 20 5G?Q ... BZE 0 SCLOSEFILE [JIF THIS IS A 'CLOSEFILE' EVENT 4 5GRB ...# 20 5H?2 ...# WE MUST NOW ENSURE THAT EXECUTIVE DOES NOT LET THIS CHANNEL DO 20 5HQL ...# ANY WRITES UNTIL ALL THE EXTANT CAFS ORDERS ON THE DRIVE HAVE 21 5J== ...# COMPLETED. THIS ENSURES THE DATA IS NOT SCANNED BY A TASK THAT IS 19 5JPW ...# NOT AWARE OF THE PRESENCE OF WRITERS (I.E. IT IS A FORM OF 10 5K9G ...# INTEGRITY CHECKING) 4 5KP6 ...# 21 5L8Q ...# EXECUTIVE IS TOLD OF OUR REQUIREMENTS BY A MODE #10 TRANSFER ON 9 5LNB ...# THE CAFS DEVICE 4 5M82 ...# 19 5MML ... LDX 0 1 [REMEMBER DEVICE LIST ADDRESS 9 5N7= ... SMO CAFSPTR 20 5NLW ... LDX 1 CPPTR [GET ADDRESS OF CAFS DEVICE LIST 4 5P6G ...# 20 5PL6 ... DCA 1,STO,0,CTSA [ADDR OF DRIVE TO 'DE-PIPELINE' 8 5Q5Q ... LDN 0 #10 17 5QKB ... DCA 1,DLA,0,MODE [SET MODE OF TRANSFER 17 5R52 ... GPERI 1,2,NC [ISSUE ORDER TO EXEC 4 5RJL ...# 6 5S4= ...SCLOSEFILE 20 5S5_ ... SMO CAFSPTR [RESTORE RELATIVE POINTER TO CSN 14 5S7N ... SBX 5 CFLOWGEOG [TABLE 4 5S9C ...# 20 5S?6 ... MHUNTW 1,ADATA,CSTORE [SET EVENT BIT IN THE APPROPRIATE 21 5S#T ... LDCT 0 #400 [ENTRY IN THE TEMPORARY DATA BLOCK 7 5SBJ ... SMO 5 8 5SD? ... ORS 0 A1(1) 4 5SG2 ...# 20 5SHW ... LDX 1 CAFSPTR [RESTORE POINTER TO BSA/CAFSACT 19 5TH6 ... BRN TRYNEXT [AND GO FOR NEXT FILE AREA 4 5W2Q ...# 4 5WGB ...# 4 5X22 ...# 6 5XFL ...TFREEBMAPS 4 5X_= ...# 4 5YDW ...# 21 5YYG ...# THE FREEING OF BIT MAPS IS DONE BY SENDING A MODE #1 - #7 ORDER 20 5_D6 ...# ON THE CAFS DEVICE. THE MODE IS INTERPRETTED BY EXECUTIVE AS 20 5_XQ ...# A 3-BIT PATTERN INDICATING WHICH BIT MAPS ARE TO BE RELEASED 4 62CB ...# 21 62X2 ...# THE REQUIRED BIT PATTERN IS SUPPLIED AS A PARAMETER TO CAFSINFORM 15 63BL ...# AND IS THEREFORE AVAILABLE IN ACOMMUNE2 4 63W= ...# 21 64*W ... SMO CAFSPTR [GET THE ADDRESS OF THE CAFS DEVICE 15 64TG ... LDX 1 CPPTR [LIST ENTRY 18 65*6 ... LDX 0 ACOMMUNE2(2) [SET UP THE TRANSFER MODE 10 65SQ ... DCA 1,DLA,0,MODE 19 66#B ... GPERI 1,2,NC [PASS THE ORDER TO EXECUTIVE 4 66S2 ...# 12 67?L ...# THAT'S ALL THERE IS TO IT!!! 4 67R= ...# 5 68=W ...UP UP 4 68B2 ...# 5 68F6 ...UPFREE 21 68J= ... MFREEW ADATA,CSTORE [TEMPORARY BLOCK IS NO LONGER NEEDED! 5 68MB ... UP 4 68QG ...# 4 69=6 ...# 4 69PQ ...#END 8 ____ ...12476614000100000000