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