{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: TWINSETA866)}}
====== TWINSETA866 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:CHAIN|CHAIN]], [[george:macro:DERING|DERING]], [[george:macro:DERINGD|DERINGD]], [[george:macro:DOWN|DOWN]], [[george:macro:ENRING|ENRING]], [[george:macro:FINDPEREC|FINDPEREC]], [[george:macro:FINDSU|FINDSU]], [[george:macro:FPUT|FPUT]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETACT|GETACT]], [[george:macro:HUNT2J|HUNT2J]], [[george:macro:HUNTW|HUNTW]], [[george:macro:IPCREP|IPCREP]], [[george:macro:JDED|JDED]], [[george:macro:JSHARED|JSHARED]], [[george:macro:JTWIN|JTWIN]], [[george:macro:JUNDE|JUNDE]], [[george:macro:LADDP|LADDP]], [[george:macro:LINKSET|LINKSET]], [[george:macro:LOCK|LOCK]], [[george:macro:LONGCLEAR|LONGCLEAR]], [[george:macro:LONGON|LONGON]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:PAIR|PAIR]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SUSPEND|SUSPEND]], [[george:macro:T|T]], [[george:macro:TRACE|TRACE]], [[george:macro:TWTRACE|TWTRACE]], [[george:macro:V|V]]
22FL #SEG TWINSETA70 [BOB NICHOLSON
22^= #LIS K0TWINSET>K0TWINSETA
23DW 8HTWINSETA
23YG #
24D6 # THIS SEGMENT IS THE "BSTS" OF TWINNING.
24XQ # IT DEALS WITH SENDING AND RECEIVING MESSAGES ABOUT EXOFILES
25CB # ON DUAL ACCESS CONFIGURATIONS.
25X2 # WHEN AN EXOFILE ACTIVITY WANTS TO SEND A MESSAGE TO THE
26BL # OTHER PROCESSOR IT SETS UP A EWDAS ESEND BLOCK CONTAINING
26W= # THE MESSAGE AND THIS IS CHAINED IN THE
27*W # ACTIVITY CHAIN BEHIND THE BSA ENTWIN ACTIVITY. THE TWINNING
27TG # ACTIVITY IS WOKEN UP AND THIS SEGMENT IS ENTERED TO ISSUE
28*6 # AN IPC WRITE TRANSER FOR THE MESSAGE IN THE ESEND.
28SQ # THIS SEGMENT ALSO DEALS WITH RECEIVING MESSAGES FROM THE OTHER
29#B # PROCESSOR. BECAUSE IT DOESN'T KNOW WHEN A MESSAGE IS COMING
29S2 # AN IPC READ TRANSFER IS ALWAYS STORED.
2=?L #
2=R= # K1TWINSETA IS THE MAIN ENTRY POINT.
2?=W # K2 IS ENTERED VIA AN ACROSS FROM FAILTWIN
2?QG # AFTER BEING ENTERED BY THIS SEGMENT TO DEAL WITH
2#=6 # IPB INOPERABLE CONDITION (AND IPB FAIL) WHILE WRITING
2#PQ # K3 AS FOR K2 EXCEPT IPB READ FAIL
2*9B # K4
2*P2 # K5 RE-ENTRY POINT FROM RELIEF WHEN DEALING WITH
2B8L # STATUS CHANGE COMMAND.
2BN= #
2C7W SEGENTRY K1TWINSETA,QK1TW
2CMG SEGENTRY K2TWINSETA,QK2TW
2D76 SEGENTRY K3TWINSETA,QK3TW
2DLQ SEGENTRY K4TWINSETA,QK4TW
2F6B SEGENTRY K5TWINSETA,QK5TW
2FL2 SEGENTRY K7TWINSETA
2G5L +0 [=-1 IF TRACING
2GK= #
2H4W # IPCREAD SUBROUTINE
2HJG #
2J46 XIPCREAD
2JHQ SBX 7 FX1
2K3B DOWN TWINSETD,1
2KH2 BRN XIT
2L2L #
2LG= # IPCWRITE SUBROUTINE
2L^W #
2MFG XIPCWRITE
2M^6 SBX 7 FX1
2NDQ DOWN TWINSETD,2
2NYB XIT ADX 7 FX1
2PD2 EXIT 7 0
2PXL #
2QC= #
2QWW # ON ENTRY TO
2RBG # IPCSTATE ACOMMUNE1=0 IF READ; NON-ZERO IF WRITE
2RW6 # ON EXIT X3 CONTAINS RESULT
2S*Q #
2STB XIPCSTATE
2T*2 SBX 7 FX1
2TSL DOWN RELIEF,4
2W#= LDX 3 ACOMMUNE1(2)
2WRW ADX 7 FX1
2X?G TRACE 3,TIMEST
2XR6 EXIT 7 0
2Y=Q #
2YQB #
2^=2 # CONSTANTS
2^PL #
329= #
32NW XM1 #777777
338G XM2 #41773757
33N6 XM3 #76377777
347Q XM4 #76177777
34MB XM5 #77777773
3572 XM6 #76007777
35LL XBITS510 #01020000
366= Q24 +24 [FOR BUTTON UP
36KW #
375G #
37K6 #
384Q # LONGON ACTIVITY OUTPUTTING PLEASE ISSUE MESSAGE
38JB XISS
3942 LONGON EPWT
39HL EXIT 7 0
3=3= #
3=GW #
3?2G # ROUTINE TO FIND DEVICE LIST X5=GEOG NO
3?G6 #
3?^Q XFINDL
3#FB STO 0 EX4 [STORE LINK
3#^2 FINDPEREC 1,APGEOG,5,,,XCME
3*DL BRN (EX4)
3*Y= #
3BCW #
3BXG # SUBROUTINE TO SETUP EWDAS/ESEND WITH REPLY INFORMATION.
3CC6 # THE BLOCK IS CHAINNED AT THE END OF THE ACTIVITY CHAIN.
3CWQ #
3DBB # X7 LINK *
3DW2 # X5 REPLY * ON ENTRY
3F*L # X6 REQUEST TYPE *
3FT= #
3G#W #
3GSG # X0,X4,X5,X7 CORRUPT * ON EXIT
3H#6 # X1,X2 =FX1 AND FX2 *
3HRQ #
3J?B R6 SBX 7 FX1
3JR2 SETNCORE ESENDLEN,1,EWDAS,ESEND,,1
3K=L LDN 0 ENTRGA(1) [EMPTY RING
3KQ= STO 0 ENTRGA(1)
3L9W STO 0 ENTRGA+1(1)
3LPG STO 5 ESREP(1) [REPLY
3M96 STO 6 ENMARK(1) [REQUEST TYPE
3MNQ LDN 4 ETBUFS+1(2)
3N8B LDN 5 ENSTART(1)
3NN2 MOVE 4 3 [MOVE IN REST OF INFO
3P7L R23 LDX 2 ACTRING(2)
3PM= SBN 2 ACTRING
3Q6W LDX 2 BPTR(2)
3QLG CHAIN 1,2 [CHAIN ON END
3R66 ADX 7 FX1
3RKQ EXIT 7 0
3S5B #
3SK2 # SUBROUTINE TO DO THE FOLLOWING
3T4L #
3TJ= # X6=0 CHAIN ENLINK ON TO JOBRING
3W3W #
3WHG # X6 NON ZERO DECHAIN ENLINK FROM ESEND,LONGCLEAR ACTIVITY (IF ANY)
3X36 # AND PUT REPLY IN
3XGQ #
3Y2B R1A MHUNTW 3,EWDAS,ESEND
3YG2 R1 LDN 0 ENTRGA(3)
3Y^L TXU 0 ENTRGA+1(3)
3^F= BCC R2 [J IF NOTHING CHAINED
3^YW LDX 4 ENTRGA(3)
42DG DERING ENTRGA(3) [ELSE DECHAIN
42Y6 SBN 4 ENLA [PTR TO START OF ENLINK
43CQ LDX 1 4
43XB STO 6 ENRP(1) [STORE REPLY
44C2 BZE 6 R3 [J IF ACTIVITY NOT TO BE WOKEN
44WL R4 LDX 1 BPTR(1) [LOOK BACK FOR ACTIVITY
45B= LDX 0 ATYPE(1)
45TW TXL 0 CACT
46*G BCS R4 [J NOT ACTIVITY
46T6 SMO 4
47#Q LDX 3 ENWTS [GET WAITING STYLE
47SB LONGCLEAR 1,0(3),R3A [AND WAKE UP IF WAITING
48#2 R3A EXIT 7 0
48RL R3 LDN 1 ENLA(1)
49?= ENRING 1,ETBRING(2) [CHAIN ENLINK ON END OF JOBRING
49QW R2 EXIT 7 0
4==G #
4=Q6 # SUBROUTINE TO GO ROUND JOBRING WAKING UP WAITING ACTIVITIES
4?9Q # WHOSE NUMBER (X5) AND REQUEST TYPE (X6) AGREE : REPLY IN X4
4?PB #
4#92 R7 LDX 2 FX2
4#NL LDX 3 ETFRING(2)
4*8= R7A LDN 0 ETFRING(2)
4*MW TXU 0 3
4B7G BCC (7) [J IF NO MORE
4BM6 SBN 3 ENLA [PTR TO NEXT ENLINK
4C6Q #SKI K6TWINSET>99-99
4CLB (
4D62 LDX 0 ATYPE(3) [CHECK IF ENLINK
4DKL SRL 0 12
4F5= SBN 0 EWDAS+ENLINK
4FJW BZE 0 R8
4G4G GEOERR 1,NOT ENLK
4GJ6 R8
4H3Q )
4HHB BNG 5 R9 [J IF NOT TO CHECK DETAILS
4J32 TXU 6 ENRQ(3)
4JGL TXU 5 ENBR(3)
4K2= BCC R9 [J IF MATCH
4KFW R8F LDX 3 ENLA(3) [GET NEXT
4K^G LDX 2 FX2
4LF6 BRN R7A
4LYQ R9 LDX 0 ENRQ(3) [REQUEST TYPE
4MDB SBN 0 CLIP
4MY2 BZE 0 R8F [IGNORE IF CLOSE
4NCL LDX 0 ENRQ(3)
4NX= SBN 0 INIT
4PBW BZE 0 R8F [OR IF INITIALISE
4PWG STO 4 ENRP(3) [STORE REPLY
4QB6 LDX 2 3
4QTQ LDX 1 ENWTS(3) [WAITING STYLE
4R*B R10 LDX 2 BPTR(2) [SEARCH FOR WAITING ACTIVITY
4RT2 LDX 0 ATYPE(2)
4S#L TXL 0 CACT
4SS= BCS R10 [J IF NOT ACTIVITY
4T?W LONGCLEAR 2,0(1),R11 [WAKE UP IF POSSIBLE
4TRG R11 LDX 2 3
4W?6 LDX 3 ENLA(3) [NEXT ON RING
4WQQ DERINGD ENLA(2) [DECHAIN
4X=B BRN R7A
4XQ2 #
4Y9L # SUBROUTINE TO SEARCH EXOF CHAIN FOR EXOF WITH SAME ASUSN AND HOME
4YP= #
4^8W U1 LDX 2 FX2
4^NG LDX 5 ETBUFS+2(2) [HOME
5286 LDXC 4 ETBUFS+3(2) [SUSN
52MQ BCS £ [GET RID OF CARRY
537B LDN 1 BCCB
53M2 T8 LDX 1 BPTR(1)
546L TXU 1 CXCC
54L= BCC (7) [J IF NO MORE
555W LDX 0 BACK2(1)
55KG BZE 0 (7) [OR NO MORE EXOFS
5656 TXU 4 ASUSN(1)
56JQ TXU 5 HOME(1)
574B BCS T8 [J IF NOT EQUAL
57J2 EXIT 7 1
583L #
58H= #
592W NOTWINS
59GG GEOERR 1,NOTWINS
5=26 #
5=FQ # TO CLEAR WAITING FOR FILE IN OTHER PROCESSOR BIT
5=^B #
5?F2 WAITCLEAR
5?YL LDN 1 BCCB
5#D= WT1 LDX 1 BPTR(1)
5#XW TXU 1 CXCC
5*CG BCC (7) [J IF END
5*X6 LDX 0 BACK2(1)
5BBQ BZE 0 (7) [OR NO MORE EXOFS
5BWB LDCT 0 #2
5CB2 ANDX 0 EXMARK(1)
5CTL BZE 0 WT1 [J IF NO ONE WAITING
5D*= ERS 0 EXMARK(1)
5DSW BRN WT1
5F#G #
5FS6 #
5G?Q XLINK2
5GRB PAIR TWINSETB,8
5H?2 #
5HQL # ACTUAL ENTRY POINT. BSA ENTWIN IS CURRENT ACTIVITY
5J== #
5JPW QK1TW [*****
5K9G START
5KP6 LDX 0 ETWINMK
5L8Q ANDN 0 JIOUTS
5LNB BNZ 0 WF [J IF WRITE OUTSTANDING
5M82 N8170 LDX 3 FX2 [ELSE LOOK FOR WORK
5MML N2 HUNT2J 3,EWDAS,ESEND,,N7588
5N7= LDX 0 ENMARK(3)
5NLW SBN 0 INIT
5P6G BZE 0 N3 [J IF INITIALISE
5PL6 SBN 0 CLIP-INIT
5Q5Q BZE 0 N4 [J IF CLOSE
5QKB LDCT 0 #400
5R52 ANDX 0 ETWINMK
5RJL BZE 0 N5 [J IF INITIALISED
5S4= LDN 6 7 [NOT INITIALISED REPLY
5SHW CALL 7 R1 [PUT IN ANY ESENDS
5T3G MHUNTW 1,EWDAS,ESEND
5TH6 FREECORE 1
5W2Q BRN N8170
5WGB #
5X22 # NOTHING TO DO BUT CHECK IF LINKS NEED CLOSING
5XFL #
5X^= N7588 LDX 0 ETWINMK
5YDW ANDN 0 JICLSE
5YYG BNZ 0 W5 [J IF LINKS NEED CLOSING-WAIT FOR REA
5^D6 BRN N1 [ELSE CARRY ON
5^XQ #
62CB # INITIALISE
62X2 #
63BL N3 LDX 2 FX2
63W= CHAIN 3,2 [PUT INITIALISE REQUEST IN FRONT
64*W LDX 0 ENSTART(3)
64TG BNZ 0 Y8170 [J IF NOT INITIALISING FOR FIRST TIME
65*6 ACROSS INTWIN,1 [TO DO INITIALISE
65SQ Y8170 ACROSS INTWIN,2 [SUCCESSIVE INITIALISE
66#B #
66S2 # CLOSE
67?L #
67R= N4 ACROSS TWINSETB,9
68=W #
68QG # ALREADY INITIALISED
69=6 [
69PQ [ CHECK IF GEORGE IN OTHER PROCESSOR IS DOWN OR IPB DOWN
6=9B [ -IF SO PUT IN REPLY AND WAKE UP ACTIVITY.
6=P2 #
6?8L N5 LDX 0 ETWINMK
6?N= ANDN 0 GEODOWN
6#7W BNZ 0 N6A [J IF GEORGE DOWN
6#MG LDX 0 ETWINMK
6*76 ANDN 0 IPBDOWN
6*LQ LDN 6 2 [IPB DOWN REPLY
6B6B BNZ 0 N6B [J IF IPB DOWN
6BL2 BRN N6 [OK SO FAR
6C5L N6A LDN 6 #4 [REPLY FOR GEORGE DOWN
6CK= N6B CALL 7 R1
6D4W MHUNTW 1,EWDAS,ESEND
6DJG LDX 0 ENMARK(1)
6F46 SBN 0 GHIN
6FHQ BZE 0 N7 [DON'T FREE ESEND IF GHIN REQUEST
6G3B FREECORE 1
6GH2 BRN N8170 [GO FOR NEXT ESEND
6H2L #
6HG= N6 LDX 0 ETWINMK
6H^W ANDN 0 JNOCHAT
6JFG BNZ 0 N1 [J IF WRITE LINK NOT OPEN(NO DIALOGUE
6J^6 #
6KDQ # IF BIT11 IS SET IN FIXED CORE WD ETWINMK ONLY SYSTEM
6KYB # WRITE TRANSFERS CAN BE SENT. BIT11 IS SET AS SOON AS A CRIPPLE
6LD2 # MODE CONDITION ARISES
6LXL #
6MC= N7
6MWW LDX 0 BIT11
6NBG ANDX 0 ETWINMK
6NW6 BZE 0 Z8009 [J IF WE CAN SEND ANYTHING
6P*Q LDX 3 FX2
6PTB Y8009 HUNT2J 3,EWDAS,ESEND,,X8009
6Q*2 #
6QSL # IF THE LINKS ARE ESTABLISHED AND THE SYSTEM IS RECOVERING
6R#= # FROM CRIPPLE MODE CONDITION (E.G. IPB INOP) THE STATUS OF THE
6RRW # SPINDLES AND LOCK-OUTS HAVE TO BE CHECKED AND ADJUSTED IF
6S?G # NECESSARY. THIS INVOLVES SYSTEM TRANSFERS OF TYPE GHIN,GHINR AND
6SR6 # GHLR AND WHILE THESE ARE IN PROGRESS OTHER TRANSFERS MUST NOT
6T=Q # GET IN.
6TQB #
6W=2 LDX 0 ENMARK(3)
6WPL SBN 0 GHLR
6X9= BZE 0 T8009 [J IF HELLO REPLY QUED TO BE SENT
6XNW SBN 0 GHINR-GHLR
6Y8G BNZ 0 Y8009 [J IF NOT GHINR TO LOOK AT NEXT BLK
6YN6 T8009 LDX 2 FX2 [NOW CHAIN GHLR OR GNINR
6^7Q CHAIN 3,2 [..SINCE IF THEY ARE PRESENT THEY MUS
6^MB BRN Z8009 [..GO FIRST
7272 X8009 HUNTW 1,EWDAS,ESEND
72LL BNG 1 XF26 [GEOERR IF BIT 11 SET AND
736= LDX 0 ENMARK(1) [NO GHIN/GHINR/GHLR ON Q
73KW SBN 0 GHIN
745G BNZ 0 XF26
74K6 LDX 3 1
754Q Z8009
75JB #SKI K6TWINSETA>99-99
7642 (
76HL TRACE ENMARK(3),RTYPE
773= TRACE ENSTART(3),
77GW )
782G SMO ENMARK(3)
78G6 BRN TABLE [BRANCH TO RELAVENT ROUTINE
78^Q TABLE +0
79FB BRN XGLK [WANTS LOCK-OUT
79^2 BRN XGLKT [RELEASING LOCK-OUT
7=DL BRN XGCHA [CHECK SCRATCH AREA
7=Y= BRN XGCHAR [REPLY TO GCHA
7?CW BRN XGCHF [CHECK FILE AREA
7?XG BRN XGCHFR [REPLY TO GCHF
7#C6 BRN XGHOLD [CAN DISENGAGE
7#WQ BRN XGHL
7*BB BRN XGHIN [
7*W2 BRN XGHLR [SENDING HELLO REPLY
7B*L BRN XGHINR [REPLY IF SOMETHING GOES WRONG
7BT= BRN XGRDFIP [RE-READ FIP
7C#W BRN XGRDFIPR [REPLY TO ABOVE
7CSG BRN XGFCLOSE [CLOSING FILE REQUIRED BY OTHER SIDE
7D#6 BRN XGHL [ERROR INITIALISE
7DRQ BRN XGHL [OR CLOSE
7F?B BRN XGANYUSER
7FR2 BRN XGANYUSERR
7G=L BRN XGSHARE [SHARE COMMAND
7GQ= BRN XGSHARER [REPLY TO ABOVE
7H9W BRN XGBOLE [SET ENGAGE BUTTON IN OTHER SIDE
7HPG BRN XGDED [DEDICATE
7J96 BRN XGDEDR [REPLY TO DEDICATE
7JNQ BRN XGUNDED [UNDEDICATE
7K8B BRN XGUNDEDR [REPLY TO UNDEDICATE
7KN2 #
7L7L XGHL GEOERR 1,HONK!
7LM= #
7M6W # WE WANT THE LOCK-OUT
7MLG #
7N66 XGLK LDX 5 ENSTART(3)
7NKQ CALL 0 XFINDL [GET PTR TO DL
7P5B LADDP 1,1 [AND TO APIA
7PK2 LDCT 0 #10
7Q4L ANDX 0 BSUNIT(1)
7QJ= BNZ 0 N8 [J IF HAVE NOT GOT LOCK-OUT
7R3W LDCT 6 #400 [ELSE SET REPLY OK
7RHG N9 CALL 7 R1 [SET ACTIVITY GOING IF NEED BE
7S36 MHUNTW 3,EWDAS,ESEND
7SGQ FREECORE 3
7T2B BRN N1
7TG2 N8 LDCT 0 #4
7T^L ANDX 0 BSUNIT(1)
7WF= LDN 6 0
7WYW BNZ 0 N9 [J IF ALREADY BEING GOT
7XDG LDX 0 ETWINMK [IF B1 IS SET DON'T SET B6
7XY6 ANDX 0 BIT11 [OF BSUNIT AS THIS WILL STOP IPC
7YCQ BNZ 0 P1 [WRITES BEING EFFECTED FOR LOCK-OUT
7YXB LDCT 0 #4 [SET BEING GOT BIT
7^C2 ORS 0 BSUNIT(1)
7^WL BRN P1
82B= #
82TW XGCHAR
83*G LDCT 0 #200 [IF AREA REPLY WITH >1
83T6 ANDX 0 ENMARK(3) [...MESSAGES THE SUSN DOES NOT EXIST
84#Q BNZ 0 P1 [...IN THE ESEND SO LOCK-OUT CHECK
84SB XGCHFR
85#2 XGRDFIPR
85RL XGANYUSERR
86?= LDCT 4 #10 [CHECK WE HAVE NOT GOT LOCK-OUT
86QW BRN P2
87=G XGCHA
87Q6 XGCHF
889Q XGRDFIP
88PB XGANYUSER
8992 LDN 4 0 [CHECK WE HAVE LOCK-OUT
89NL P2 LDX 1 FX1
8=8= LDX 6 ENSUSN(3)
8=MW ANDX 6 XM1(1)
8?7G FINDSU 1,6,P1 [GET ASTUC IF THERE (OTHER PROCESSOR
8?M6 [MAY HAVE BEEN QUICKER GETTING EBI)
8#6Q LADDP HUNIT(1),1
8#LB LDCT 0 #10
8*62 ANDX 0 BSUNIT(1)
8*KL ERX 0 4
8B5= #SKI JSKI11
8BJW BRN P1
8C4G #SKI JSKI11<1$1
8CJ6 BZE 0 P1 [J IF OK
8D3Q GEOERR 1,NO LOCK
8DHB #
8F32 #
8FGL #
8G2= XGHOLD
8GFW LDX 5 ENSTART(3)
8G^G CALL 0 XFINDL [GET PTR TO DL
8HF6 LADDP 1,1
8HYQ LDX 0 BSUNIT3(1)
8JDB ANDN 0 4
8JY2 BZE 0 P1 [J IF NOT GOT RIGHT
8KCL LDN 6 4
8KX= BRN N9
8LBW #
8LWG #
8MB6 XGHIN
8MTQ #
8N*B # THIS REQUEST IS ALWAYS SENT IF SOMETHING HAS GONE WRONG WITH
8NT2 # THE LINK (I.E.CRIPPLE MODE)
8P#L #
8PS= LDX 0 BIT11 [THIS BIT BEING SET ENSURES THAT IF
8Q?W ORS 0 ETWINMK [THE LINK STARTS TO WORK NO REQUESTS
8QRG [ARE SENT UNTIL GHINR REPLY IS
8R?6 [RECEIVED FROM OTHER PROCESSOR
8RQQ LDX 1 3
8S=B T HUNT2J 3,EWDAS,ESEND,,P5 [SEARCH FOR CLOSE REQUEST
8SQ2 LDX 0 ENMARK(3)
8T9L SBN 0 CLIP
8TP= BNZ 0 T
8W8W FREECORE 1 [AND FREE GHIN ESEND IF THERE
8WNG BRN N1
8X86 [
8XMQ [ THE STATUS CHANGE COMMAND COULD HAVE BEEN ISSUED BEFORE THE IPB WA
8Y7B [ OFFLINE AND HAVE AN ESEND ON THE QUEUE. WHEN THE IPB IS ONLINED
8YM2 [ A UNIT THAT WAS PREVIOUSLY UNDEDICATED (SAY) COULD BECOME SHARED.
8^6L [ THE NEXT BIT CHECKS IF THE UNIT IS ALREADY IN THE REQUIRED STATE.A
8^L= [ THE WRITE TRANSFER IS NOT ISSUED BUT A REPLY SENT TO TWINSET.
925W [
92KG XGDED
9356 XGUNDED
93JQ XGSHARE
944B LDX 5 ENSTART(3) [UNIT NO
94J2 CALL 0 XFINDL [GET PTR TO DL
953L LADDP 1,1 [THEN AP1A
95H= LDX 0 ENMARK(3)
962W SBN 0 GDED
96GG BZE 0 XGD1 [^ IF DEDICATE
9726 BNG 0 XSH1 [^ IF SHARE
97FQ JUNDE 1,XREP [^ IF ALREADY UNDEDICATED
97^B BRN XSH2
98F2 XGD1 JDED 1,XREP [^ IF ALREADY DEDICATED
98YL BRN XSH2
99D= XSH1 JSHARED 1,XREP [^ IF ALREADY SHARED
99XW XSH2 BRN P1 [CARRY ON IF VALID STATUS CHANGE
9=CG XREP LDN 6 6 [ELSE PUT IN REPLY AND
9=X6 BRN N9 [WAKE UP ACTIVITY
9?BQ [
9?WB #
9#B2 #
9#TL # NOW ISSUE WRITE
9**= #
9*SW QK3TW [*****
9B#G #
9BS6 XGLKT
9C?Q XGFCLOSE
9CRB XGBOLE
9D?2 XGSHARER
9DQL XGDEDR
9F== XGUNDEDR
9FPW #
9G9G P1 LDX 0 ETWINMK
9GP6 ANDX 0 BIT11
9H8Q BNZ 0 N1 [DON'T ATTEMPT TO WRITE IF LINKS IN
9HNB [DODGY STATE
9J82 XGHLR
9JML XGHINR
9K7= LDX 0 ETWINMK
9KLW ANDN 0 JNOCHAT
9L6G BZE 0 P5 [J IF DIALOGUE
9LL6 GEOERR 1,NO-DIAL
9M5Q P5 CALL 7 XIPCWRITE [GREAT!
9MKB WF IPCREP W,3 [GET WRITE REPLY
9N52 BPZ 3 P7 [JUMP IF FINISHED
9NJL QK4TW [*****
9P4= N1 LDN 5 JROUTS
9PHW ANDX 5 ETWINMK
9Q3G BZE 5 T2 [J IF READ NOT OUTSTANDING
9QH6 XBB2 IPCREP R,3 [GET REPLY FROM READ
9R2Q LDCT 0 #20
9RGB BPZ 3 P6 [J IF FINISHED
9S22 ANDX 0 3
9SFL BZE 0 P7 [J IF PROGRESSING
9S^= W4 GEOERR 1,REJECTED
9TDW P6 ANDX 0 3
9TYG ERS 5 ETWINMK [SE
9WD6 BNZ 0 P8 [J IF NOT IMPLIMENTED
9WXQ CALL 7 XISS [STOP PLEASE ISSUE BEING OUTPUT IF
9XCB [IPB GETS BACK ONLINE
9XX2 LDX 0 XM2(1)
9YBL ANDS 0 ETWINMK
9YW= LDX 2 FX2
9^*W #SKI K6TWINSETA>99-99
9^TG TRACE ETBUFS(2),RECEIVED
=2*6 [
=2SQ LDX 0 K7TWINSETA(1)
=3#B BZE 0 NTRACE [J IF NOT TRACING
=3S2 LDN 0 #6246 [RF
=4?L STO 0 ACOMMUNE1(2)
=4R= LDN 0 ETBUFS(2)
=5=W LDN 1 ACOMMUNE2(2)
=5QG MOVE 0 4
=6=6 TWTRACE
=6PQ NTRACE
=79B #
=7P2 # ACTUALLY RECEIVED A MESSAGE FROM THE OTHER PROCESSOR
=88L #
=8N= # THESE FALL INTO 2 CATEGORIES
=97W #
=9MG # 1) REPLIES TO MESSAGES WE HAVE SENT E.G REQUEST FOR LOCK-OUT OR
==76 # CHECK INTEGRITY. IN THESE CASES AN EXOFILE ACTIVITY IS PROBABLY
==LQ # WAITING FOR A REPLY. THIS ACTIVITY IS LINKED TO THE BSA ENTWIN
=?6B # THROUGH ITS FILERING TO A EWDAS ENLINK BLOCK CHAINED BEHIND THE
=?L2 # EXOFILE ACTIVITY. THE FILERING OF THE ENTWIN IS A Q OF ENLINKS
=#5L # WAITING FOR A REPLY FROM THE OTHER PROCESSOR. THE INCOMING
=#K= # MESSAGE IS ASSOCIATED TO A PARTICULAR ENLINK USING A MESSAGE
=*4W # NUMBER STORED IN ENBR OF THE ENLINK.
=*JG #
=B46 #
=BHQ # 2) NEW MESSAGES THE OTHER PROCESSOR IS SENDING
=C3B #
=CH2 SMO ETBUFS(2)
=D2L BRN PABLE [J TO PARTICULAR BIT
=DG= PABLE +0
=D^W BRN YGLK
=FFG BRN YGLKT
=F^6 BRN YGCHA
=GDQ BRN YGCHAR
=GYB BRN YGCHF
=HD2 BRN YGCHFR
=HXL BRN YGHOLD
=JC= BRN YGHL
=JWW BRN YGHIN
=KBG BRN YGHLR
=KW6 BRN YGHINR
=L*Q BRN YGRDFIP
=LTB BRN YGRDFIPR
=M*2 BRN YGFCLOSE
=MSL BRN YGHL [J IF HELLO
=N#= BRN XGHL [OR INITIALISE
=NRW BRN YGANYUSER
=P?G BRN YGANYUSERR
=PR6 BRN YGSHARE
=Q=Q BRN YGSHARER
=QQB BRN YGBOLE
=R=2 BRN YGDED
=RPL BRN YGDEDR
=S9= BRN YGUNDED
=SNW BRN YGUNDEDR
=T8G #
=TN6 YGHLR BRN T2 [FORGET HELLO REPLY FROM OTHER SIDE
=W7Q #
=WMB # OTHER SIDE WANTS LOCK-OUT
=X72 #
=XLL YGLK LDX 5 ETBUFS+1(2)
=Y6= CALL 0 XFINDL [GET PTR TO DL
=YKW LADDP 1,1
=^5G LDCT 0 #10
=^K6 ANDX 0 BSUNIT(1)
?24Q BNZ 0 P9 [J IF WE HAVEN'T GOT IT
?2JB LDX 0 BSUNIT4(1)
?342 ANDX 0 BITS22LS
?3HL BZE 0 T1 [J IF NO USERS
?43= LDCT 0 #2
?4GW ORS 0 BSUNIT(1) [SET OTHERSIDE WANTS IT BIT
?52G BRN T2 [TO DO READ
?5G6 T1 LDCT 0 #10
?5^Q ORS 0 BSUNIT(1) [SET LOCK-OUT
?6FB P9 LDN 6 GLKT
?6^2 CALL 7 R6 [SEND REPLY BACK
?7DL BRN T2 [J TO DO READ
?7Y= #
?8CW # THE LOCK-OUT HAS BEEN TRANSFERRED
?8XG #
?9C6 YGLKT LDX 5 ETBUFS+1(2)
?9WQ CALL 0 XFINDL [GET PTR TO DL
?=BB LADDP 1,1
?=W2 SMO FX1
??*L LDX 0 XM3
??T= ANDS 0 BSUNIT(1) [CLEAR LOCK-OUT
?##W LDCT 4 #400
?#SG LDX 5 ETBUFS+1(2)
?*#6 LDN 6 GLK
?*RQ CALL 7 R7
?B?B BRN T2
?BR2 #
?C=L # OTHER PROCESSOR IS TRYING TO EXTEND A PERMENANT FILE OR OPEN
?CQ= # A SCRATCH FILE. SEND IT A LIST OF AREAS (FACS) IN USE IN THIS
?D9W # PROCESSOR FOR SCRATCH FILES
?DPG #
?F96 YGCHA DOWN RELIEF,7
?FNQ BRN T2 [RELIEF HAS ALREADY CHAINED ESEND
?G8B #
?GN2 #
?H7L # CHECK INTEGRITY
?HM= #
?J6W YGCHF CALL 7 U1 [SEARCH FOR EXOF
?JLG BRN T7 [NOT FOUND
?K66 LDCH 5 FIP+5(1)
?KKQ SRL 5 4
?L5B SBN 5 1
?LK2 BZE 5 T9 [FAIL IF IC=1
?M4L LDX 0 ETBUFS+3(2)
?MJ= LDX 4 EXMARK(1)
?N3W BPZ 4 T10 [J IF CURRENTLY OFR
?NHG BNG 0 T9 [FAIL IF TRYING TO OFW AS WELL
?P36 BRN T11
?PGQ T10 BPZ 0 T7 [J IF BOTH OFR
?Q2B T11 SBN 5 2
?QG2 BZE 5 T9 [FAIL IF IC=3
?Q^L T7 LDCT 5 #400 [OK REPLY
?RF= BRN T13
?RYW T9 LDCT 0 #2
?SDG ORS 0 EXMARK(1) [SET WAITING BIT
?SY6 LDN 5 1 [FAIL REPLY
?TCQ T13 LDN 6 GCHFR
?TXB CALL 7 R6
?WC2 BRN T2
?WWL #
?XB= # CHECK FILE IS OPEN
?XTW #
?Y*G YGANYUSER
?YT6 CALL 7 U1 [FIND EXOF
?^#Q BRN NA [J IF NOT THERE
?^SB LDN 5 1 [FAIL REPLY
#2#2 BRN NB
#2RL NA LDCT 5 #400 [OK REPLY
#3?= NB LDN 6 GANYUSERR [REPLY TYPE
#3QW CALL 7 R6 [MESSAGE BLOCK
#4=G BRN T2
#4Q6 #
#59Q # REPLY FROM AREA AND FILE CHECK
#5PB #
#692 YGCHAR
#6NL DOWN RELIEF,5 [ASSEMBLE EWDAS/ITCH FOR GETAREA MACR
#78= BRN T2 [NO ITCH
#7MW LDN 6 GCHA [REQUEST TYPE
#87G LDCT 4 #400 [OK REPLY
#8M6 BRN U1AA
#96Q YGCHFR
#9LB LDN 6 GCHF
#=62 U1A LDX 4 ETBUFS+4(2) [REPLY
#=KL U1AA LDX 5 ETBUFS+1(2) [NUMBER
#?5= CALL 7 R7 [SET ACTIVITY GOING
#?JW BRN T2
##4G #
##J6 # RE-READ FIP
#*3Q #
#*HB YGRDFIP
#B32 CALL 7 U1 [FIND EXOF
#BGL BRN U2 [J NOT THERE
#C2= GETACT ACTDOC [SET UP ACTIVITY TO DO RE-READ
#CFW LDX 6 ETBUFS+1(2) [NUMBER
#C^G LDX 2 BPTR(2)
#DF6 STO 4 AWORK1(2) [SUSN
#DYQ STO 5 AWORK2(2) [HOME
#FDB STO 6 AWORK3(2)
#FY2 LINKSET 2,XLINK2(1) [LINK TO K8TWINSETB
#GCL FPUT
#GX= BRN T2
#HBW U2 LDCT 5 #400
#HWG LDN 6 GRDFIPR
#JB6 CALL 7 R6
#JTQ BRN T2
#K*B #
#KT2 # RE-READ FILE REPLY
#L#L #
#LS= YGRDFIPR
#M?W LDN 6 GRDFIP
#MRG BRN U1A
#N?6 #
#NQQ # CHECK FILE OPEN REPLY
#P=B #
#PQ2 YGANYUSERR
#Q9L LDN 6 GANYUSER
#QP= BRN U1A [SET REPLY AND AWAKE ACTIVITY
#R8W #
#RNG # OTHERSIDE HAS COME TO LIFE AND HAS EXECUTED TWIN INITIALISE
#S86 #
#SMQ YGHL
#T7B ACROSS FAILTWIN,1
#TM2 #
#W6L #
#WL= # IPB COMES ONLINE - OTHER PROCESSOR SENDS HELLO (GHIN)
#X5W # AND FAILTWIN,2 REPLIES WITH STATE OF SPINDLES IN THIS PROCESSOR -
#XKG # GHINR MESSAGE
#Y56 #
#YJQ YGHIN
#^4B ACROSS FAILTWIN,2
#^J2 #
*23L # HOLD BUTTON EVENT RECEIVED
*2H= #
*32W YGHOLD
*3GG ACROSS RELIEF,1
*426 #
*4FQ #
*4^B # ENGAGE BUTTON
*5F2 #
*5YL YGBOLE
*6D= ACROSS RELIEF,2
*6XW #
*7CG # SHARE, DEDICATE, UNDEDICATE
*7X6 #
*8BQ YGDED
*8WB YGUNDED
*9B2 YGSHARE
*9TL ACROSS RELIEF,3
*=*= QK5TW [COMES BACK HERE FROM RELIEF,K3
*=SW CALL 7 R6
*?#G BRN T2
*?S6 YGSHARER
*#?Q YGDEDR
*#RB YGUNDEDR
**?2 DOWN RELIEF,9 [CHECK STATUS CHANGE REPLY
**QL LDX 6 ETBUFS(2)
*B== SBN 6 1
*BPW BRN U1A
*C9G #
*CP6 # A FILE HAS BEEN CLOSED THAT WE ARE INTERESTED IN
*D8Q #
*DNB YGFCLOSE
*F82 LONGON EDFDCLS [WAKE UP ANY WAITING FOR FILES
*FML BRN T2
*G7= #
*GLW # A REPLY FROM INOP
*H6G #
*HL6 YGHINR
*J5Q ACROSS FAILTWIN,3
*JKB #
*K52 # SUBROUTINE TO GO THOUGH ALL UDAS DEVICES LOOKING FOR TWINNED ONES
*KJL #
*L4= X6 LDX 1 FX1
*LHW X4 ADN 1 1
*M3G LDX 0 TB-1(1) [NEXT DEVICE
*MH6 BNG 0 (7)
*N2Q FINDPEREC 3,APFOTY,TB-1(1),X3,,XCME,XCME [GET PTR
*NGB BNG 3 X4 [J IF NO MORE OF THIS TYPE
*P22 JTWIN 3,X5 [J IF TWINNED
*PFL BRN X3 [LOOK FOR NEXT
*P^= X5 EXIT 7 1
*QDW #
*QYG #
*RD6 TB +6
*RXQ +13
*SCB +26
*SX2 -1
*TBL #
*TW= #
*W*W XBIT5910 #01060000
*WTG #
*X*6 #
*XSQ # NOW PUT UP ANOTHER READ
*Y#B #
*YS2 QK2TW [*****
*^?L T2 LDX 0 ETWINMK
*^R= ANDN 0 JICLSE
B2=W BZE 0 W1A [J IF NOT TRYING TO CLOSE
B2QG ACROSS TWINSETB,10
B3=6 W1A LDXC 0 ETWINMK
B3PQ BCS SUSPEND [J IF NOT INITIALISED
B49B W1 CALL 7 XIPCREAD
B4P2 P7 LDX 0 ETWINMK
B58L ANDN 0 JIOUTS
B5N= BZE 0 W2 [J IF NO WRITE OUTSTANDING
B67W IPCREP W,3 [ELSE SEE HOW ITS GETTING ON
B6MG LDCT 0 #20
B776 BPZ 3 W3 [J IF FINISHED
B7LQ ANDX 0 3
B86B BNZ 0 W4 [J IF REJECTED
B8L2 BRN W5 [J IF PROGRESSING
B95L W3 LDN 5 JIOUTS
B9K= ERS 5 ETWINMK [REMOVE WRITE OUTSTANDING BIT
B=4W MHUNTW 1,EWDAS,ESENDT
B=JG NAME 1,EWDAS,ESEND
B?46 LDCT 0 #20
B?HQ ANDX 0 3
B#3B BNZ 0 P8W [J IF NOT IMPLIMENTED
B#H2 CALL 7 XISS [STOP PLEASE ISSUE BEING OUTPUT IF
B*2L MHUNTW 1,EWDAS,ESEND [SEARCH FOR BUFFER
B*G= #
B*^W SMO FX1
BBFG LDX 0 K7TWINSETA
BB^6 BZE 0 NTRAC1
BCDQ LDN 0 #6746 [WF
BCYB LDX 2 FX2
BDD2 STO 0 ACOMMUNE1(2)
BDXL LDN 0 ENMARK(1)
BFC= LDN 1 ACOMMUNE2(2)
BFWW MOVE 0 4
BGBG TWTRACE
BGW6 MHUNTW 1,EWDAS,ESEND
BH*Q NTRAC1
BHTB LDX 0 ENMARK(1)
BJ*2 SBN 0 GHLR
BJSL BNZ 0 W6 [J IF NOT HELLO REPLY
BK#= NGN 0 #41 [LEAVES B18 CLEAR
BKRW ANDS 0 ETWINMK
BL?G LDX 0 BIT11 [CLEAR BIT11 IF SUCCESSFULLY SENT
BLR6 ANDX 0 ETWINMK [HELLO REPLY
BM=Q ERS 0 ETWINMK
BMQB W6 SMO FX1
BN=2 LDX 0 XM2
BNPL ANDS 0 ETWINMK
BP9= LDN 6 0 [CHAIN ON JOBRING MKR
BPNW LDX 0 ENMARK(1)
BQ8G SBN 0 GHOLD
BQN6 BNZ 0 W7 [J NOT GHOLD
BR7Q W7A LDCT 6 #400 [OK REPLY
BRMB #
BS72 #
BSLL # WRITE TRANSFER HAS WORKED. DEPENDING ON THE MESSAGE TYPE A
BT6= # EWDAS ENLINK IS CURRENTLY CHAINED TO THE ESEND. IN THE NEXT
BTKW # BIT THE ESEND IS FREED AND IF THE MESSAGE SENT NEEDS A REPLY THE
BW5G # ENLINK IS CHAINED ON THE FILERING OF THE ENTWIN AWAITING A REPLY
BWK6 #
BX4Q W7 LDX 3 1
BXJB CALL 7 R1 [DECHAIN OR WHATEVER
BY42 MHUNTW 3,EWDAS,ESEND
BYHL FREECORE 3
B^3= BRN START [SEE IF ANY MORE TO DO
B^GW #
C22G # NO WRITE OUTSTANDING
C2G6 #
C2^Q W2 HUNTW 1,EWDAS,ESEND
C3FB BPZ 1 V
C3^2 W5 IPCREP R,3 [GET READ REPLY
C4DL LDCT 0 #20
C4Y= BPZ 3 N1 [J IF FINISHED
C5CW ANDX 0 3
C5XG BZE 0 SUSPEND [J IF PROGRESSING
C6C6 BRN W4
C6WQ SUSPEND
C7BB SUSPEND [WAIT FOR SOMETHING TO HAPPEN
C7W2 BRN START
C8*L #
C8T= # SOMETHING ELSE TO WRITE BUT IF BIT11 SET DON'T DO NON-SYSTEM WRITE
C9#W #
C9SG V LDX 0 ETWINMK
C=#6 ANDX 0 BIT11
C=RQ BZE 0 START [J IF WE CAN WRITE I.E DO ORDINARY..
C??B LDX 0 ENMARK(1) [. TRANSFER
C?R2 SBN 0 GHIN
C#=L BZE 0 START [DO INITIALISE AT ANY TIME
C#Q= SBN 0 INIT-GHIN
C*9W BZE 0 START [OR RE-INITIALISE
C*PG SBN 0 CLIP-INIT
CB96 BZE 0 START [OR CLOSE
CBNQ LDX 0 ENMARK(1)
CC8B SBN 0 GHLR
CCN2 BZE 0 START [OR HELLO REPLY
CD7L SBN 0 GHINR-GHLR
CDM= BZE 0 START [OR GHINR
CF6W BRN W5
CFLG #
CG66 # SOMETHINGS GONE WRONG: X4 -VE IF WRITE X4 +VE IF READ
CGKQ #
CH5B P8W NGNC 4 1
CHK2 P8 NGN 4 0
CJ4L STO 4 AWORK1(2)
CJJ= BPZ 4 XF1 [J IF READ
CK3W IPCREP W,3 [GET REPLY FOR WRITE
CKHG MHUNTW 1,EWDAS,ESEND
CL36 LDX 0 ENMARK(1)
CLGQ SBN 0 GLK [IF GLK TRANSFER HAS FAILED CLEAR
CM2B BNZ 0 XF2 [BEING GOT BIT (B6 OF BSUNIT) SO THAT
CMG2 LDX 5 ENSTART(1) [WE CAN HAVE ANOTHER GO IF ONLY TIME
CM^L CALL 0 XFINDL
CNF= LADDP 1,1
CNYW LDCT 0 #4
CPDG ANDX 0 BSUNIT(1)
CPY6 ERS 0 BSUNIT(1) [CLEAR B6 OF BSUNIT
CQCQ BRN XF2
CQXB XF1 IPCREP R,3 [GET REPLY FOR READ
CRC2 XF2
CRWL SMO FX1
CSB= LDX 0 K7TWINSETA
CSTW BZE 0 NTRAC2 [J IF NO TRACING
CT*G LDN 0 #6446 [TF
CTT6 STO 0 ACOMMUNE1(2)
CW#Q STO 4 ACOMMUNE2(2) [MODE
CWSB STO 3 ACOMMUNE3(2) [REPLY
CX#2 BPZ 4 NOTREAD [J IF READ
CXRL MHUNTW 1,EWDAS,ESEND
CY?= LDN 0 ENMARK(1)
CYQW LDN 1 ACOMMUNE4(2)
C^=G MOVE 0 2
C^Q6 NOTREAD
D29Q TWTRACE
D2PB NTRAC2
D392 LDCT 0 #6
D3NL #SKI K6TWINSETA>99-99
D48= TRACE 3,FAILREP
D4MW ANDX 0 3
D57G BNZ 0 XF3 [J IF LINK NOT EST. OR FAILURE
D5M6 LDCT 0 #240
D66Q ANDX 0 3 [J IF TIME-OUT OR ERROR
D6LB BNZ 0 XF4A
D762 LDCT 0 #200
D7KL ANDX 0 3
D85= BZE 0 XF4
D8JW XF7 GEOERR 1,IPCREP [ERROR IF LONGBLOCK
D94G XF4A STO 4 ACOMMUNE1(2) [STORE MODE FOR 1PCSTATE
D9J6 CALL 7 XIPCSTATE
D=3Q LDCT 0 #10
D=HB ERS 0 ACOMMUNE1(2) [REVERSE OPERABLE BIT
D?32 LDCT 0 #110
D?GL ANDX 0 ACOMMUNE1(2)
D#2= BNZ 0 XF3 [J IF IPB INOP OR DIALOGUE SUSPENDED
D#FW XF4 BPZ 4 T2 [J IF READ
D#^G BRN START
D*F6 XF3
D*YQ XF6 ACROSS FAILTWIN,4 [LOOK FURTHER INTO FAIL
DBDB #
DBY2 XF26 GEOERR 1,NO ESEND
DCCL #
DCX= XCME GEOERR 1,NOTCME
DDBW MENDAREA 1023-0?<50,K99TWINSETA
DDWG #END
^^^^ ...714123530001