{{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