{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: FAILTWIN866)}}
====== FAILTWIN866 ======
(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:FPUT|FPUT]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETACT|GETACT]], [[george:macro:HUNT2J|HUNT2J]], [[george:macro:HUNTW|HUNTW]], [[george:macro:IDENTITY|IDENTITY]], [[george:macro:INFORMX|INFORMX]], [[george:macro:IPCOPEN|IPCOPEN]], [[george:macro:IPCREP|IPCREP]], [[george:macro:JSHARED|JSHARED]], [[george:macro:JTWIN|JTWIN]], [[george:macro:LADDP|LADDP]], [[george:macro:LINKSET|LINKSET]], [[george:macro:LONGCLEAR|LONGCLEAR]], [[george:macro:LONGON|LONGON]], [[george:macro:LRIDENT|LRIDENT]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:OUTPACK|OUTPACK]], [[george:macro:PAIR|PAIR]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:T|T]], [[george:macro:TRACE|TRACE]]
22FL ...#SEG FAILTWIN80
22^= ...#LIS K0TWINSET>K0FAILTWIN
23DW ... 8HFAILTWIN
23YG ...[
24D6 ... SEGENTRY K1FAILTWIN,QK1FA [OTHER PROCESSOR INITIALISES
24XQ ... SEGENTRY K2FAILTWIN,QK2FA [OTHER PROCESSOR SAYS HELLO
25CB ... SEGENTRY K3FAILTWIN,QK3FA [REPLY TO HELLO MESSAGE
25X2 ... SEGENTRY K4FAILTWIN,QK4FA [IPB FAILURE
26BL ...[
2CMG #
2D76 # IPCWRITE SUBROUTINE
2DLQ #
2F6B XIPCWRITE
2FL2 SBX 7 FX1
2G5L DOWN TWINSETD,2
2GK= XIT ADX 7 FX1
2H4W EXIT 7 0
2HJG #
2J46 #
2JHQ #
2K3B #
2KH2 XIPCSTATE [GET STATE IN ACOMMUNE1
2L2L SBX 7 FX1
2LG= DOWN RELIEF,4 [TO DO IPCSTATE
2L^W LDX 3 ACOMMUNE1(2) [LOAD RESULT
2MFG ADX 7 FX1
2M^6 TRACE 3,CSTATE
2NDQ EXIT 7 0
2NYB #
2PD2 XIDENT
2PXL ADN 0 2
2QC= STO 0 EX4
2QWW ... FINDPEREC 3,APGEOG,IPBTWIN,,,XCME
2RBG LRIDENT 3,5,ZND,ZNG
2RW6 STO 5 AWORK3(2) [STORE FIRST WD OF IDENTITY
2S*Q STO 6 AWORK4(2) [STORE SECOND WD OF IDENTITY
2STB # GET UNIQUE NUMBER FROM IDENTIES
2T*2 LDN 1 IDENTITY [PTR TO 1ST WORD OF OUR IDENTITY
2TSL LDN 2 AWORK3(2) [PTR TO 1ST WORD OF THEIRS
2W#= LDN 5 8 [8 CHARACTERS TO CHECK
2WRW NAE LDCH 0 0(1) [FIRST/NEXT WD OF IDENTITY...
2X?G LDCH 3 0(2) [AND OF OTHER PROCESSORS
2XR6 TXU 3 0
2Y=Q BCS NADD [J IF DIFFER
2YQB BCHX 1 £ [UPDATE MODS
2^=2 ... BCHX 2 £ [
2^PL BCT 5 NAE
329= NADD SBX 0 3
32NW STO 0 AFTERU [STORE UNIQUE NUMBER
32YN ... LDX 2 FX2
338G LDX 5 AWORK3(2) [RELOAD 1ST WORD OF THEIR IDENTITY
33N6 BRN (EX4) [J IF OK
347Q ZND NGNC 0 1
34MB ZNG LDN 0 1 [NOT GEORGE ON OTHER END
3572 SBS 0 EX4
35LL BRN (EX4) [AND EXIT AS APPROPRIATE
366= #
36KW OPENWRITE
375G LDX 2 FX2
37K6 SBX 0 FX1
384Q STO 0 ACOMMUNE9(2)
38JB LDN 3 3
3942 IPCOPEN W,3,5,IPBTWIN [OPEN WRITE LINK
39HL LDX 0 ACOMMUNE9(2)
3=3= ADX 0 FX1
3=GW EXIT 0 0
3=K^ ...# SUBROUTINE TO WAKE ACTIVITIES WAITING FOR IPB (TWAIT MACRO)
3=M2 ...# AND FREE ANY EWDAS/ITCH BLOCKS. X6 LINK
3=N3 ...#
3=P4 ...XIPBD HUNTW 1,EWDAS,ITCH
3=Q5 ... BNG 1 NOIT
3=R6 ... FREECORE 1
3=S7 ... BRN XIPBD
3=T8 ...NOIT LONGON IPBDE
3=W9 ... EXIT 6 0
3=X= ...#
3=Y? ...#
3?2G #
3?G6 # CONSTANTS
3?^Q #
3#^2 XM2 #41773757
3*Y= XM4 #76167777 [CLEARS BITS 5,6,7,11
3CC6 XM10 #77773517
3CWQ #
3DBB #
3DW2 #
3F*L X ANDS 0 ETWINMK [WAKE UP ACTIVITY DEMANDING STATE
3FT= LONGON EPWT [OF OTHER PROCESSOR
3G#W EXIT 6 0
3GSG #
3H#6 #
3HRQ # CLEAR BIT11 OF ETWINMK
3J?B #
3JR2 XB11CL
3K=L LDX 0 ETWINMK
3KQ= ANDX 0 BIT11
3L9W ERS 0 ETWINMK
3LPG EXIT 7 0
3M96 #
3MNQ R23 LDX 2 ACTRING(2)
3N8B SBN 2 ACTRING
3NN2 LDX 2 BPTR(2)
3P7L CHAIN 1,2 [CHAIN ON END
3PM= EXIT 7 0
3Q6W #
3QLG # SUBROUTINE TO DO THE FOLLOWING
3R66 #
3RKQ # X6=0 CHAIN ENLINK ON TO JOBRING
3S5B #
3SK2 # X6 NON ZERO DECHAIN ENLINK FROM ESEND,LONGCLEAR ACTIVITY (IF ANY)
3T4L # AND PUT REPLY IN
3TJ= #
3W3W R1A MHUNTW 3,EWDAS,ESEND
3WHG R1 LDN 0 ENTRGA(3)
3X36 TXU 0 ENTRGA+1(3)
3XGQ BCC R2 [J IF NOTHING CHAINED
3Y2B LDX 4 ENTRGA(3)
3YG2 DERING ENTRGA(3) [ELSE DECHAIN
3Y^L SBN 4 ENLA [PTR TO START OF ENLINK
3^F= LDX 1 4
3^YW STO 6 ENRP(1) [STORE REPLY
42DG BZE 6 R3 [J IF ACTIVITY NOT TO BE WOKEN
42Y6 R4 LDX 1 BPTR(1) [LOOK BACK FOR ACTIVITY
43CQ LDX 0 ATYPE(1)
43XB TXL 0 CACT
44C2 BCS R4 [J NOT ACTIVITY
44WL SMO 4
45B= LDX 3 ENWTS [GET WAITING STYLE
45TW LONGCLEAR 1,0(3),R3A [AND WAKE UP IF WAITING
46*G R3A EXIT 7 0
46T6 R3 ENRING 1,ETBRING(2) [PUT ON END OF JOBRING
47#Q R2 EXIT 7 0
47SB #
48#2 # SUBROUTINE TO GO ROUND JOBRING WAKING UP WAITING ACTIVITIES
48RL # WHOSE NUMBER (X5) AND REQUEST TYPE (X6) AGREE : REPLY IN X4
49?= #
49QW R7 LDX 2 FX2
4==G LDX 3 ETFRING(2)
4=Q6 R7A LDN 0 ETFRING(2)
4?9Q TXU 0 3
4?PB BCC (7) [J IF NO MORE
4#92 SBN 3 ENLA [PTR TO NEXT ENLINK
4#NL #SKI K6TWINSET>99-99
4*8= (
4*MW LDX 0 ATYPE(3) [CHECK IF ENLINK
4B7G SRL 0 12
4BM6 SBN 0 EWDAS+ENLINK
4C6Q BZE 0 R8
4CLB GEOERR 1,NOT ENLK
4D62 R8
4DKL )
4F5= BNG 5 R9 [J IF NOT TO CHECK DETAILS
4FJW TXU 6 ENRQ(3)
4G4G TXU 5 ENBR(3) [COMPARE NUMBERS
4GJ6 BCC R9 [J IF MATCH
4H3Q R8F LDX 3 ENLA(3) [GET NEXT
4HHB LDX 2 FX2
4J32 BRN R7A
4JGL R9 LDX 0 ENRQ(3) [REQUEST TYPE
4K2= SBN 0 CLIP
4KFW BZE 0 R8F [IGNORE IF CLOSE
4K^G LDX 0 ENRQ(3)
4LF6 SBN 0 INIT
4LYQ BZE 0 R8F [OR IF INITIALISE
4MDB STO 4 ENRP(3) [STORE REPLY
4MY2 LDX 2 3
4NCL LDX 1 ENWTS(3) [WAITING STYLE
4NX= R10 LDX 2 BPTR(2) [SEARCH FOR WAITING ACTIVITY
4PBW LDX 0 ATYPE(2)
4PWG TXL 0 CACT
4QB6 BCS R10 [J IF NOT ACTIVITY
4QTQ LONGCLEAR 2,0(1),R11 [WAKE UP IF POSSIBLE
4R*B R11 LDX 2 3
4RT2 LDX 3 ENLA(3) [NEXT ON RING
4S#L DERINGD ENLA(2) [DECHAIN
4SS= BRN R7A
4T?W #
4TRG #
4W?6 # SUBROUTINE TO CLEAR LOCK OUT AND SET DISENGAGABLE BY US BIT
4WQQ # FOR ALL SHARED UNITS
4X=B #
4XQ2 R3D CALL 7 X6 [GET DL PTR
4Y9L BRN NOTWINS
4YP= U4 LADDP 3,2 [GET PTR TO APIA
4^8W JSHARED 2,U3 [TO U3 IF SHARED
4^NG UX CALL 7 X3 [GET NEXT
5286 BRN NOMORE
52MQ BRN U4 [GO TO CHECK
537B U3 SMO FX1
53M2 LDX 0 XM4
546L ANDS 0 BSUNIT(2) [CLEAR LOCK-OUT
54L= LDN 0 4
555W ORS 0 BSUNIT3(2) [SET DISENGAGEABLE BY US BIT
55KG BRN UX
5656 NOMORE
56JQ EXIT 6 0
574B #
57J2 NOTWINS
583L GEOERR 1,NOTWINS
58H= #
592W # TO CLEAR WAITING FOR FILE IN OTHER PROCESSOR BIT
59GG #
5=26 WAITCLEAR
5=FQ LDN 1 BCCB
5=^B WT1 LDX 1 BPTR(1)
5?F2 TXU 1 CXCC
5?YL BCC (7) [J IF END
5#D= LDX 0 BACK2(1)
5#XW BZE 0 (7) [OR NO MORE EXOFS
5*CG LDCT 0 #2
5*X6 ANDX 0 EXMARK(1)
5BBQ BZE 0 WT1 [J IF NO ONE WAITING
5BWB ERS 0 EXMARK(1)
5CB2 BRN WT1
5CTL #
5D*= # TO OUTPUT MESSAGES X4= NUMBER X5= IDENTIFIER
5DSW #
5F#G OUTPUT
5FS6 SBX 7 FX1
5G?Q OUTPACK 4,1,VARDEC
5GL6 ...OUTPUT1
5GRB LDN 1 1
5H?2 INFORMX 1,5,1
5HQL ADX 7 FX1
5J== EXIT 7 0
5JPW #
5K9G #
5KP6 TWDA 4HTWDA
5KYX ...XMESS2 +EWRST [TWINNED UNITS %A ARE IN WRONG STATE
5L3G ... [:TWINNING IPC LINKS CLOSED
5L8Q XMESS1 +ENTIN22 [PROCESSORS CONNECTED BY UNIT %A HAVE
5LNB [THE SAME IDENTITY
5M82 #
5MCS ...P1 LDX 0 BIT11 [SET BIT 11 TO INDICATE CRIPPLE
5MML ... ORS 0 ETWINMK [MODE AND GO BACK TO TWINSETA
5MXD ... ACROSS TWINSETA,1 [TO DO WRITE
5N7= T2 ACROSS TWINSETA,2
5NLW #
5P6G #
9N52 #
9NJL #
9P4= # OTHERSIDE HAS COME TO LIFE AND HAS EXECUTED TWIN INITIALISE
9PHW #
9Q3G ...QK1FA [***** HERE IF RECEIVED GHL
9QH6 CALL 6 R3D
9R2Q CALL 7 WAITCLEAR [AND WAITING BITS IF ANY IN EXOF
9RGB LONGON EDFDCLS [WAKE UP PEOPLE WAITING FOR FILES
9S22 LONGON ENDWT [AND LOCK-OUT
9S36 ... CALL 6 XIPBD
9S3P [
9S5D [ WHILE OTHER PROCESSOR WAS DOWN TN DOWN MAY NOT HAVE BEEN
9S77 [ ISSUED THUS LEAVING (PERHAPS) ON THE QUEUE,WAITING ACTIVITIES.
9S8W [ THIS BIT GIVES THESE STRAGGLERS A KICK.
9S=K [
9S## NGN 5 1 [WAKE UP ANY ONE
9SB3 LDN 4 4 [GEORGE DOWN REPLY
9SCQ CALL 7 R7
9SNG ...QK2FA [***** HERE IF RECEIVED GHIN
9S^= NGNC 4 1
9TDW V1 LDN 4 0
9TYG CALL 0 XIDENT
9WD6 BRN £ [ERROR IF NOT GEORGE
9WXQ BRN U5 [OR NO DIALOGUE
9X7J ... LDX 1 FX1
9XCB LDX 7 TWDA(1)
9XGG #SKI JSKI11
9XKL BRN U5A [DON'T CHECK IDENTITIES
9XNQ #SKI JSKI11<1$1
9XRW (
9XX2 TXU 5 IDENTITY
9YBL TXU 6 IDENTITY+1
9YW= BCS U5A [J IF IDENTITIES DIFFER
9^64 )
9^77 ... BNZ 4 U5 [ERROR IF ENTY FROM K3 OR K4
9^8= ... LDX 0 BIT10 [AS LINKS CAN'T BE ESTABLISHEDIF IDEN
9^9* ... ANDX 0 ETWINMK [ARE EQUAL
9^=D ... BNZ 0 SIA [J ID MESS ALREADY OUTPUT
9^?H ... LDX 0 BIT10
9^#L ... ORS 0 ETWINMK
9^*W LDX 4 IPBTWIN [ELSE OUTPUT ERROR MESSAGE
9^TG LDX 5 XMESS1(1)
=2*6 CALL 7 OUTPUT
=2G# ...SIA LDX 2 FX2
=2MG ... LDX 4 AWORK1(2)
=2SN ... BRN SI
=2^W ...U5A LDX 0 BIT10
=374 ... ANDX 0 ETWINMK
=3#= ... ERS 0 ETWINMK [CLEAR BIT10
=3FD ...# SHOULD REALLY CHECK IF OTHER PROCESSORS IDENTITY HAS CHANGED
=3LL ... LDX 0 ETWINMK
=3S2 ANDN 0 JNOCHAT
=4?L BZE 0 U6 [J IF WE HAVE DIALOGUE
=4R= CALL 0 OPENWRITE
=5=W U6 BZE 4 V7770
=5B2 ...[
=5F6 ...[ IF THE WRITE LINK HAS JUST BEEN OPENED PUT UP GHIN
=5FL ...[
=5G6 ...[ AND IF BIT11 CLEAR.IPB MAY HAVE GONE ON AND OFFLINE QUICKLY
=5GL ...[ IN WHICH CASE THIS PROCESSOR MAY NOT HAVE DETECTED INOPERABLE
=5H6 ...[ (I.E. THE TIME OUT PERIOD MAY NOT HAVE EXPIRED BEFORE IPB GETS
=5HL ...[ ONLINE.
=5J= ...[
=5JT ... LDX 0 ETWINMK
=5KD ... ANDN 0 JNOCHAT
=5L3 ... BZE 0 WRX [^ IF WRITE LINK ALREADY OPEN
=5LL ... ERS 0 ETWINMK [OTHERWISE UNSET JNOCHAT AND ^ TO SEND
=5M9 ... BRN WRXK
=5MS ...WRX LDX 0 BIT11
=5NC ... ANDX 0 ETWINMK [IF BIT 11 SET GHIN MESSAGE
=5P2 ... BNZ 0 WRNK [ALREADY SENT
=5PK ... LDX 0 ETWINMK
=5Q8 ... ANDN 0 JIOUTS [IF NO WRITE O/S
=5QR ... BZE 0 WRXK [GO TO SEND GHIN
=5RB ... MHUNTW 1,EWDAS,ESENDT
=5R^ ... LDX 0 ENMARK(1)
=5SJ ... LDX 1 FX1
=5T7 ... SBN 0 GHIN [CHECK THAT MESSAGE IN TRANSIT
=5TQ ... BZE 0 WRNK [IS GHIN
=5WF ... GEOERR 1,NOTGHIN
=5X8 ...WRXK LDX 0 BIT11
=5X^ ... ORS 0 ETWINMK
=5YQ ... CALL 7 XF25 [SET UP GHIN
=63W ... CALL 7 XIPCWRITE [SEND WRITE
=672 ...WRNK LDX 0 XM10(1)
=6=6 ANDS 0 ETWINMK
=6?T ... HUNTW 1,EWDAS,ESENDT [DONT SET UP ANOTHER
=6*J ... BNG 1 WREP [GHLR/GHINR IF ONE ALREADY
=6C? ... LDX 5 ENMARK(1) [IN TRANSIT
=6F2 ... SBN 5 GHLR
=6GP ... BZE 5 T2
=6JD ... SBN 5 GHINR-GHLR
=6L7 ... BZE 5 T2
=6MW ...WREP LDX 1 FX1
=6PQ CALL 7 R20 [COMPILE REPLY
=79B LDX 0 ETBUFS(2) [GET REQUEST TYPE
=7P2 LDN 5 GHLR
=88L SBN 0 GHL
=8N= BZE 0 U7 [J IF HELLO
=97W LDN 5 GHINR
=9MG U7 STO 5 ENMARK(1)
=9SN ... TRACE ASIZE(1),ESENDS
=9^W ... TRACE ALOGLEN(1),ESENDA
==76 CALL 7 R23
==LQ BRN T2
=?6B #
=?L2 #
=#5L # IPB OPERABLE AND DIALOGUE OK.CHECK IF LINK ESTABLISHED AND IF SO
=#K= # CLEAR ETMFAIL,GEODOWN,IPBDOWN AND INOCHAT MARKERS.
=*4W # ENTRY HERE ONLY IF X4=0 I.E. NO MESSAGE FROM OTHER PROCESSOR
=*JG # BUT WE (THIS PROCESSOR) HAVE DETECTED CHANGE OF STATE OF IPB
=B46 #
=BHQ V7770 LDX 2 FX2
=C3B LDX 4 AWORK1(2)
=CH2 BPZ 4 R7770 [J IF READ TRANSFER LAST FINISHED
=D2L IPCREP W,3 [ELSE GET LAST WRITE REPLY
=DG= BRN RW
=D^W R7770 IPCREP R,3 [GET READ REPLY
=FFG RW LDCT 0 4 [LINK ESTABLISHED BIT
=F^6 ANDX 0 3
=GDQ BNZ 0 X7770 [J IF LINK NOT ESTABLISHED
=GYB LDX 0 XM10(1)
=HD2 ANDS 0 ETWINMK [CLEAR MARKERS
=HXL Y7770 LDX 0 ETWINMK
=JC= ANDN 0 IPBDOWN+GEODOWN
=JWW BNZ 0 XF10 [IF OTHER LINKS NOT OPEN SET UP GHIN
=KBG BRN XF11
=KW6 X7770
=L*Q #
=LTB # LINKS NOT ESTABLISHED
=M*2 #
=MSL LDN 0 JNOCHAT
=N#= ANDX 0 ETWINMK
=NRW ERS 0 ETWINMK [JUST CLEAR JNOCHAT
=P?G BRN Y7770
=PR6 #
=Q=Q U5 GEOERR 1,IDENTERR
=QQB #
=R=2 # A REPLY FROM INOP
=RPL #
=RT5 ...QK3FA [*****
=S7G ... DOWN TWINSETD,4 [CHECK REPLY
=S=^ ... BRN XCLOSED [STATE WRONG
=T8G CALL 7 XB11CL [CLEAR BIT11 OF ETWINMK
=T#C ... LONGON EDFDCLS [WAKE UP ACTS WAITING FOR FILESS
=TD# ...# AS TWIN UP MAY HAVE BEEN TYPED IN THE OTHER PROCESSOR BUT
=TJ9 ...# NOT IN THIS PROCESSOR
=TN6 BRN T2
=TQT ...[
=TRQ ...[ STATES WRONG-OUTPUT MESSAGE
=TSM ...[
=TTJ ...XCLOSED
=TWF ... CALL 7 XB11CL [CLEAR BIT11
=TXB ...XSW MHUNTW 3,EWDAS,EGOT [DETAILS OF WRONG UNITS
=TY? ... OUTPACK ENTRGA(3),V,VARDEC,XSW
=T^8 ... LDX 5 XMESS2(1)
=W25 ... MHUNTW 1,EWDAS,EGOT
=W32 ... FREECORE 1
=W3X ... LDN 7 XLK [FIDDLE LINK
=W4S ... BRN OUTPUT1 [DO INFORM
=W5P ...XLK ACROSS TWINSETA,1
=W7Q #
=WMB # SUBROUTINE TO ASSEMBLE HELLO MESSAGE
=X72 #
=XLL # FORMAT OF WORD IS
=Y6= #
=YKW # B0-B2 NOT USED
=^5G # B3 =1 IF WE HAVE RIGHT TO DISENGAGE
=^K6 # B5 IS THE LOCK-OUT BIT (=0 IF WE HAVE IT)
?24Q # B9-B10 IS THE STATUS AS FOR BSUNIT
?2JB # B15-23 GEOG. NO.
?342 #
?3HL R20 SBX 7 FX1
?52G DOWN TWINSETD,3
?5^Q ADX 7 FX1
?639 ...R20A HUNT2J 2,EWDAS,ESEND,,R20B [IF THERE IS ALREADY A GHINR
?64N ... LDX 1 ENMARK(2) [IT MUST BE FREED SINCE IT
?667 ... SBN 1 GHINR [HAS BEEN SUPERCEDED BY THIS NEW
?67L ... BZE 1 R20C
?695 ... SBN 1 GSHARER-GHINR [ALSO ANY STATUS CHANGE
?6=J ... BZE 1 R20C [REPLIES SINCE THEY ARE
?6#3 ... SBN 1 GDEDR-GSHARER [NOW OBSOLETE
?6*G ... BZE 1 R20C
?6B^ ... SBN 1 GUNDEDR-GDEDR
?6DD ... BNZ 1 R20A
?6FX ...R20C FREECORE 2
?6HB ... BRN R20A
?6JT ...R20B MHUNTW 1,EWDAS,ENLINK
?6LJ ... NAME 1,EWDAS,ESEND
?6RR ... LDX 2 FX2
?6^2 EXIT 7 0
?7DL #
?7Y= # SUBROUTINE TO GO THOUGH ALL UDAS DEVICES LOOKING FOR TWINNED ONES
?8CW #
?8XG X6 LDX 1 FX1
?9C6 X4 ADN 1 1
?9WQ LDX 0 TB-1(1) [NEXT DEVICE
?=BB BNG 0 (7)
?=W2 ... FINDPEREC 3,APFOTY,TB-1(1),X3,,XCME,XCME [GET PTR
??*L BNG 3 X4 [J IF NO MORE OF THIS TYPE
??T= JTWIN 3,X5 [J IF TWINNED
?##W BRN X3 [LOOK FOR NEXT
?#SG X5 EXIT 7 1
?*#6 #
?*RQ #
?B?B TB +6
?BR2 +13
?C=L +26
?CQ= -1
?D9W #
?DPG #
?F96 XBIT5910 #01060000
?FNQ #
?L5B #
?LK2 #
?M4L #
?MJ= #
?N3W # INVESTIGATE FURTHER INTO FAIL VIA ACROSS FROM TWINSETA
?NHG # X4 CONTAINS MODE
?P36 #
?PGQ #
?Q2B ...QK4FA [**** HERE IF LINK NOT EST OR FAILURE REPLY
?QG2 STO 4 ACOMMUNE1(2) [STORE MODE FOR
?Q^L CALL 7 XIPCSTATE [...IPCSTATE
?RF= LDCT 0 #10 [X3 CONTAINS RESULT
?RYW ERS 0 3 [REVERSE OPERABLE BIT
?SDG LDCT 0 #110
?SY6 ANDX 0 3
?TCQ BZE 0 V1 [J IF OPERABLE AND HAVE DIALOGUE
?TXB ...SI LDX 0 ETWINMK
?WC2 ANDN 0 IPBDOWN+GEODOWN
?WWL BNZ 0 XF10 [J IF IPB DOWN OR GEORGE DOWN
?XB= LDCT 0 #100
?XTW ANDX 0 3
?Y*G BZE 0 XF11 [J IF DIALOGUE NOT SUSPENDED
?YT6 LDCT 0 #40
?^#Q ANDX 0 3
?^SB BZE 0 XF11 [J IF GEORGE OK-AS FAR AS WE KNOW
#2#2 BRN XF12 [J IF GEORGE DOWN
#2RL XF11 CALL 7 XF13 [GET STATE
#3?= BRN XF18 [NO REPLY
#3QW BRN XF19 [GEORGE DOWN
#4=G NGN 5 1 [IPB GONE WRONG
#4Q6 LDN 4 2
#59Q CALL 7 R7 [PUT FAIL REPLY IN ANY ENLINKS
#5PB CALL 7 X6 [PUT LOCK-OUTS BACK IN RESONABLE STAT
#692 BRN NOTWINS [ERROR IF NONE
#6NL XF22 LADDP 3,2
#78= JSHARED 2,XF20 [J IF SHARED
#7MW XF23 CALL 7 X3
#87G BRN X8011 [J IF NO MORE
#8M6 BRN XF22
#96Q XF20 SMO FX1
#9LB LDX 0 XM7
#=62 ANDS 0 BSUNIT(2) [CLEAR WAITING FOR LOCK OUT BITS
#=KL BRN XF23
#?5= X8011 LONGON EDFDCLS [WAKE UP ACTIVITIES WAITING
#?JW XF21 LDX 2 FX2
##4G LDX 4 AWORK1(2)
##J6 ... BRN XF10
#*HB #
#B32 # GEORGE IN OTHER SIDE DOWN
#BGL #
#C2= XF12 LDX 1 FX1
#CFW LDX 0 XM2(1)
#C^G CALL 6 X
#DF6 LDN 0 GEODOWN
#DYQ ORS 0 ETWINMK
#FDB XF19 CALL 6 R3D [CLEAR LOCK-OUTS
#FY2 LONGON ENDWT [WAKE UP ANYBODY WAITING FOR LOCK-OUT
#GCL CALL 7 WAITCLEAR [CLEAR ANY WAITING BITS IN EXOF
#GX= LONGON EDFDCLS [WAKE UP ANYBODY WAITING FOR FILES
#HBW NGN 5 1
#HWG LDN 4 4
#JB6 CALL 7 R7 [WAKE UP ANY BODY ON JOBRING
#JJB ... CALL 6 XIPBD [FREE ITCH AND WAKE TWAIT
#K*B LDX 4 AWORK1(2)
#KT2 BPZ 4 T2 [J IF READ
#L#L CALL 7 XF25
#LS= BRN P1
#M?W #
#MRG # SUBROUTINE TO GET STATE OF OTHER PROCESSOR
#N?6 XF13 SBX 7 FX1
#NQQ LDCT 0 #200
#P=B ANDX 0 ETWINMK
#PQ2 BNZ 0 XF14 [J IF STATE ALREADY REQUESTED
#Q9L LDCT 0 #220
#QP= ORS 0 ETWINMK [SET REQUESTED AND ACKNOWLEDGED BITS
#R8W GETACT ACTDOC [SET UP ACTIVITY
#RNG LDX 2 BPTR(2) [GET PTR
#S86 LINKSET 2,XLINK3(1) [LINK TO K2TWINSETB
#SMQ FPUT
#SXJ ...XF15 LDX 0 BIT11
#T7B ... ORS 0 ETWINMK [ONLY SYSTEM WRITES ALLOWED NOW
#TC8 ... ADX 7 FX1
#TM2 EXIT 7 0
#W6L XF14 LDCT 0 #140
#WL= ANDX 0 ETWINMK
#X5W BZE 0 XF15
#XKG LDCT 0 #100
#Y56 ANDX 0 ETWINMK
#YJQ BZE 0 XF16 [J IF GEORGE OK
#^4B SMO FX1
#^J2 LDX 0 XM2
*23L ANDS 0 ETWINMK
*2H= LDN 0 GEODOWN
*32W ORS 0 ETWINMK
*3*= ... CALL 6 NOIT [WAKE TWAIT
*3GG BRN XF17
*426 XF16 SMO FX1
*4FQ LDX 0 XM9
*4^B ANDS 0 ETWINMK
*5F2 LDN 0 IPBDOWN
*5YL ORS 0 ETWINMK
*6D= ... ADN 7 1
*7CG XF17 ADN 7 1
*8WB BRN XF15
*9B2 #
*9TL # NO REPLY FROM STATE
*=*= #
*=SW #
*?#G #
*?S6 #
*#?Q XF18 LDN 0 ETMFAIL
*#RB ORS 0 ETWINMK
**?2 V2 LDX 2 FX2
**QL LDX 4 AWORK1(2)
**TD ...[
**Y= ...[ CHECK FOR CLOSE
*B34 ...[
*B5W ... LDX 3 FX2
*B8N ...Y7771 HUNT2J 3,EWDAS,ESEND,,XNC
*B?G ... LDX 0 ENMARK(3)
*BB# ... SBN 0 CLIP
*BF6 ... BNZ 0 Y7771 [J IF NOT CLOSE
*BHY ...TBOB ACROSS TWINSETB,9 [ELSE CLOSE LINKS
*BLQ ...XNC CALL 6 N [SET UP ESEND
*C9G ... BRN P1 [PUT UP ANOTHER WRITE
*G7= #
*GLW # SUBROUTINE TO SETUP ESEND WITH GHIN REQUEST
*H6G XF25 SBX 7 FX1
*HL6 ... LDX 1 FX2
*J5Q ...XF29 HUNT2J 1,EWDAS,ESEND,,XF26
*JKB LDX 0 ENMARK(1)
*JRW ... SBN 0 GHINR [IF SENDING GHIN THEN
*K2B ... BNZ 0 XF30 [ANY GHINR ON QUEUE WILL
*K8W ... FREECORE 1 [BE REDUNDANT
*KCB ...XF30 ADN 0 GHINR-GHIN
*KKW ... BZE 0 XF24 [J IF GHIN ALREADY EXISTS
*KSD ... BRN XF29
*L4= XF26 SETNCORE ESENDLEN,1,EWDAS,ESEND,,1
*LHW LDN 0 GHIN
*M3G STO 0 ENMARK(1) [STORE REQUEST TYPE
*MH6 LDN 0 ENTRGA(1) [MAKE RINGS EMPTY
*N2Q STO 0 ENTRGA(1)
*NGB STO 0 ENTRGA+1(1)
*P22 XF24 ADX 7 FX1
*PFL EXIT 7 0
*P^= #
*QDW # IPB DOWN
*QYG #
*RD6 XF10 CALL 6 N [SET UP ESEND
*RXQ XF28 LDX 3 FX2
*SCB LDN 6 2 [IPBDOWN REPLY
*SX2 LDX 0 ETWINMK
*TBL ANDN 0 IPBDOWN+ETMFAIL
*TW= BNZ 0 XF27 [J IF IPBDOWN
*W*W ... LDN 6 #4 [ELSE OK (GEORGE DOWN) REPLY
*WTG XF27 HUNT2J 3,EWDAS,ESEND,,NY1
*X*6 LDX 0 ENMARK(3)
*XSQ SBN 0 GHIN
*Y#B BZE 0 XF27 [DON'T LOOK FOR GHIN
*YS2 ... SBN 0 CLIP-GHIN
*^?L BZE 0 TBOB [TO TWINSETB IF CLOSE
*^R= LDX 5 3
B2=W CALL 7 R1 [DEAL WITH THIS ONE
B2QG FREECORE 5 [FREE ESEND
B3=6 LDX 3 FX2
B3PQ BRN XF27 [GO FOR NEXT
B49B NY1 CALL 7 XF25
B4P2 BRN P1
B58L #
B5N= # SUBROUTINE TO SET UP ESEND WITH GHIN REQUEST IF WRITE FAIL
B67W #
B6MG N SBX 6 FX1
B776 ... LDN 0 JNOCHAT
B7LQ ANDX 0 ETWINMK
B86B BNZ 0 T [DON'T SET UP ESEND IF NO DIALOGUE..
B8?J ... LDN 0 JIOUTS
B8DQ ... ANDX 0 ETWINMK
B8KY ... BZE 0 T1 [^ IF NO WRITE O/S
B8R6 ... MHUNTW 1,EWDAS,ESENDT
B8Y# ... LDX 0 ENMARK(1) [DON'T SET UP ANOTHER
B95G ... SBN 0 GHIN [GHIN IF ONE
B9=N ... BZE 0 T [ALREADY IN PROGRESS
B9CW ...T1 CALL 7 XF25 [SET UP ESEND
B9K= T BPZ 4 T2 [J IF READ
B=4W ADX 6 FX1
B=JG EXIT 6 0
B?46 #
B?HQ XLINK3
B#3B PAIR TWINSETB,2
B#?8 ...XM7 #77177777
B#H2 XM9 #41773737
B*G= #
B*MD ...XCME GEOERR 1,NOTCME
B*SL ...#
B*^W ... MENDAREA 50,K99FAILTWIN
BBFG #
BB^6 #END
^^^^ ...01113767000100000000