TWINSET866
(George Source)
Macros used: ACROSS, BUTTONUP, CHAIN, COMERR, COMERRX, DESUSPEND, ENDCOM, FINDPEREC, FON, FREECORE, GEOERR, HUNT2J, HUNTW, INFORMX, JDED, JENVNOT, JSHARED, JTWIN, JUNDE, LADDP, LGEOG, LINT, LONGHALT, LONGOFF, LONGON, LONGSET, MENDAREA, MHUNT, MHUNTW, OUTPACK, PARANUMB, PARAPASS, PARSORTX, RG, RINGTWO, RV, SEGENTRY, SETNCORE, SETUPCORE, TAB, TRACE
- TWINSET866.txt
22FL #SEG TWINSET70 [BOB NICHOLSON 22^= #LIS K0TWINSET 23DW 8HTWINSET 23YG # 24D6 # THIS SEGMENT HANDLES THE TWIN COMMAND 24XQ # THE MAIN ENTRY POINT IS K3 25CB # 25X2 # ENTRY POINTS K1 AND K2 SHOULD EVENTUALLY BE DELETED AND 26BL # SETUP CHANGED TO GO DOWN CDUM,1 AND 2. 26W= # 27*W SEGENTRY K1TWINSET,QK1TW 27TG SEGENTRY K2TWINSET,QK2TW 28*6 SEGENTRY K3TWINSET,QK3TW 28SQ SEGENTRY K4TWINSET [=0 IF DECOM OFF;1 IF ON 29#B +0 29S2 # 2=?L # 2=R= # 2?=W XM1 #77777777 2?QG XBITS510 #01020000 2#=6 XBIT5910 #01060000 2#PQ # 2*9B # 2*P2 # 2B8L # SUBROUTINE TO GO THOUGH ALL UDAS DEVICES LOOKING FOR TWINNED ONES. 2BN= # 2C7W # EXITS 0 IF NO MORE; EXITS+1 WITH DEVICE LIST PTR IN X3 2CMG # 2D76 # CAN BE RE-ENTERED BY CALL 7 X3 TO GET NEXT DEVICE THAT IS TWINNED 2DLQ # 2F6B X6 LDX 1 FX1 2FL2 X4 ADN 1 1 2G5L LDX 0 TAB-1(1) [NEXT DEVICE TYPE 2GK= BNG 0 (7) [J IF NO MORE 2H4W FINDPEREC 3,APFOTY,TAB-1(1),X3,,XCME,XCME [GET PTR TO DEVICE LIST 2HJG BNG 3 X4 [J IF NO MORE OF THIS TYPE 2J46 JTWIN 3,X5 [J IF TWINNED 2JHQ BRN X3 [ELSE LOOK FOR NEXT 2K3B X5 EXIT 7 1 2KH2 # 2L2L # 2LG= TAB +6 2L^W +13 2MFG +26 2M^6 -1 2NDQ # 2NYB # 2PD2 XMUCK GEOERR 1,MUCK UP! 2PXL # 2QC= # 2QWW # 2RBG QK1TW ACROSS CDUM,1 [SETUP SHOULD REALLY GO DOWN CDUM,1 2RW6 QK2TW ACROSS CDUM,2 [..AND DOWN CDUM,2 BUT THE NEW DEVEOL 2S*Q [..SYSTEM REQUIRES THIS 2STB # 2T*2 # 2TSL # 2W#= # 2WRW # 2X?G # 2XR6 # TABLE OF MONITORING FILE MESSAGE IDENTIFIERS 2Y=Q # 2YQB RA +APFERR [PARAMETER FORMAT ERROR 2^=2 RB +ENTIN4 [ERROR %C %B UNIT %A IS NOT AN IPB DE 2^PL RC +ENTIN5 [ERROR %C %B UNIT %A IS NOT A TWINNED 329= # [UDAS DEVICE 32NW RD +ENTIN11 [ERROR %A THERE ARE NO TWINNED DEVICE 338G RE +ENTIN13 [ERROR %A TWIN COMMAND IN PROGRESS 33N6 RF +ENTIN6 [ERROR %C %B UNIT %A IS NOT ATTACHED 347Q [..TO A PROCESSOR RUNNING UNDER GEORG 34MB RG +ENTIN7 [ERROR %C %B THE PROCESSORS CONNECTED 3572 [BY UNIT %A HAVE THE SAME IDENTITY 35LL RH +ENTIN40 [TWINNING SYSTEM NOT INITIALISED - 366= # [PROCESSOR LINK FAILURE 36KW # THE FOLLOWING UP TO AND INCLUDING RN FORM PART OF A TABLE 375G # 37K6 RI +ENTIN21 [UNITS %A ARE UNDEDICATED 384Q RJ +ENTIN20 [UNIT %A IS UNDEDICATED 38JB RK +ENTIN19 [UNITS %A ARE DEDICATED 3942 RL +ENTIN18 [UNIT %A IS DEDICATED 39HL RM +ENTIN17 [UNITS %A ARE SHARED 3=3= RN +ENTIN16 [UNIT %A IS SHARED 3=GW RO +ENTIN15 [EXOFILE TWINNING SYSTEM USING IPB 3?2G [UNIT %A 3?G6 RP +ENTIN23 [ERROR %A GEORGE HAS NOT REQUESTED 3?^Q [..THIS DIRECTIVE TO BE ISSUED 3#FB RQ +ENTIN36 [ERROR %B UNIT %A IS IN USE 3#^2 RR +ENTIN37 [ERROR %A THIS COMMAND IS ONLY ALLOWE 3*DL [IF THE IPB OR THE OTHER PROCESSOR 3*Y= [IS DOWN 3BCW RS +ENTIN38 [ERROR %B UNIT %A CANNOT BE SHARED 3BXG [DUE TO PROCESSOR LINK FAILURE 3CC6 RT +ETTIN [TWINNING LINKS CLOSED AND REOPENED 3CWQ RU +ENTIN42 [NOW SHARED BUT NO CHECKS IN OTHER 3DBB RV +ENTIN43 [NOW DEDICATED BUT NO CHECKS IN OTH 3DW2 RW +ENTIN44 [NOW UNDEDICATED BUT NO CHECKS IN O 3F*L RX +ENTIN45 [NOT ALLOWED IN CME 3FT= # 3G#W Q24 +24 [FOR BUTTONUP 3GSG # 3H#6 # SUBROUTINE TO OUTPUT MESSAGES WITH UNIT NO. IN AWORK2 X5=MESS IDEN 3HRQ # 3J?B # 3JR2 OUTPUT 3K=L SBX 7 FX1 3KQ= LDX 4 AWORK2(2) 3L9W OUTPACK 4,1,VARDEC 3LPG LDN 1 1 3M96 INFORMX 1,5,1 3MNQ ADX 7 FX1 3N8B EXIT 7 0 3NN2 # 3P7L # SET UP ESEND AND ENLINK 3PM= XBLKS 3Q6W SBX 6 FX1 3QLG SETNCORE ENLINKLEN,1,EWDAS,ENLINK,,1 [LINK BLOCK 3R66 SETNCORE ESENDLEN,1,EWDAS,ESEND,,1 [DATA BLOCK 3RKQ MHUNTW 3,EWDAS,ENLINK 3S5B STO 7 ENRQ(3) [STORE REQUEST TYPE 3SK2 STO 7 ENMARK(1) 3T4L STOZ ENRP(3) [CLEAR REPLY 3TJ= ADX 6 FX1 3W3W EXIT 6 0 3WHG # 3X36 # TO WAIT 3XGQ # 3Y2B XHALT 3YG2 SBX 6 FX1 3Y^L TENT LONGSET HOLDWT,XHERR [HAVE TO DO LONGSET ELSE LONGCLEAR 3^F= LONGHALT XHERR,HOLDWT [DOESNT WAKE US UP...AND WAIT 3^YW LONGOFF 42DG MHUNTW 3,EWDAS,ENLINK 42Y6 LDX 0 ENRP(3) 43CQ BZE 0 TENT [BACK TO SLEEP IF NO REPLY 43XB ADX 6 FX1 44C2 EXIT 6 0 44WL # 45B= XHERR GEOERR 1,BROKENIN 45TW # 46*G # 46T6 TX2 LDX 1 FX1 [NO TWINNED DEVICES 47#Q LDX 0 RD(1) 47SB TX3 STO 0 AWORK1(2) 48#2 BRN TWRONG 48RL T14 LDX 4 AWORK2(2) 49?= OUTPACK 4,1,VARDEC [OUTPUT PARAMETER 49QW TWRONG 4==G COMERRX AWORK1(2) 4=Q6 # 4?9Q # TABLE OF DIRECTIVES ALLOWED FOR TWIN COMMAND 4?PB XDIR 4#92 XIN 4H00IN 4#NL XDE 4H00DE 4*8= XUN 4H00UN 4*MW XSH 4H00SH 4B7G XUP 4H00UP 4BM6 XDO 4H00DO 4C6Q -1 4CLB # 4D62 # ENTRY HERE FOR THE TWIN COMMAND 4DKL # 4F5= QK3TW [***** 4FJW JENVNOT T1A,CME 4G4G LDX 1 FX1 4GJ6 LDX 0 RX(1) [ERROR IF CME ENVT 4H3Q BRN TX3 4HHB T1A PARAPASS [GET FIRST PARAMETER 4J32 MHUNT 3,CPB,CUNI [SEARCH FOR PARAMETER BLOCK 4JGL LDX 0 ANUM(3) 4K2= BZE 0 T1 4KFW BPZ 0 T2 [J IF PARAMETER EXISTS 4K^G T1 LDX 0 RA(1) [ELSE FORMAT ERROR 4LF6 STO 0 AWORK1(2) 4LYQ BRN TWRONG [DO COMERRX 4MDB T2 LDX 4 APARA(3) 4MY2 SRL 4 12 [GET FIRST TWO PARAMETERS 4NCL LDN 1 XDIR(1) [AN CHECK IF VALID 4NX= T4 LDX 0 0(1) 4PBW BNG 0 T3 [J IF NOT FOUND 4PWG TXU 4 0 4QB6 BCC T5 [J IF MATCH 4QTQ ADN 1 1 [UPDATE MOD 4R*B BRN T4 4RT2 T3 LDX 1 FX1 4S#L BRN T1 [REPORT ERROR 4SS= T5 LDN 6 0 4T?W PARANUMB 7,6 [GET NUMBER OF PARAMETERS 4TRG SBN 7 1 4W?6 TXU 4 XUP(1) 4WQQ BCC TXSTATE [ONE PARAMETER OK FOR UP OR DOWN 4X=B TXU 4 XDO(1) 4XQ2 BCC TXSTATE [J IF DOWN 4Y9L T6 SBN 7 1 4YP= BNZ 7 T1 [ERROR IF MORE THAN TWO PARAMETERS 4^8W LDN 6 2 4^NG PARSORTX XHERR,6 [CONVERT UNIT NUMBER 5286 HUNTW 3,CPAR,JSCE [SEE IF WE HAVE A RESULT 52MQ BNG 3 XENDCOM [END IF NOT - PARSORT HAS ALREADY ERR 537B LDEX 0 JSCEA(3) 53M2 STO 0 AWORK2(2) [SAVE GEOG. NUMBER 546L #SKI K6TWINSET>99-99 54L= TRACE AWORK2(2),TWIN 555W LDCH 0 JSCEA(3) [DEVICE TYPE 55KG TXU 4 XIN(1) 5656 BCC T10 [J IF INITIALISE 56JQ SBN 0 6 [ELSE CHECK DEVICE TYPE 574B BZE 0 T11 [J IF EDS8 57J2 SBN 0 7 583L BZE 0 T11 [OR FDS 58H= SBN 0 13 592W BNZ 0 T13 [ERROR IF NOT EMDS 59GG T11 JTWIN JSCEP(3),T12 [JIF TWINNED 5=26 T13 LDX 0 RC(1) [NOT TWINNED DEVICE 5=FQ T7 STO 0 AWORK1(2) 5=^B BRN T14 5?F2 T12 LADDP JSCEP(3),3 5?YL TXU 4 XDE(1) 5#D= BCC TXDE [J IF DEDICATE 5#XW TXU 4 XUN(1) 5*CG BCC TXUN [J IF UNDEDICATE 5*X6 TXU 4 XSH(1) 5BBQ BCS XMUCK 5BWB BRN TXSH 5CB2 # 5CTL # 5D*= XM3 #76007777 [DEDICATE 5DSW XM4 #77067777 [UNDEDICATE 5F#G XM5 #76027777 5FS6 XMASK #77077777 5G?Q # 5GRB # 5H?2 # STATUS CHANGE 5HQL # 1. SYSTEM NOT INITIALISED 5J== # MAKE CHANGE IN THIS PROCESSOR ONLY 5JPW # 2. CRIPPLE MODE 5K9G # SHARE WITH IPBDOWN PRODUCES ERROR 5KP6 # OTHERWISE MAKE CHANGE IN THIS PROCESSOR ONLY 5L8Q # 3. SYSTEM INITIALISED 5LNB # IF ALL CHECKS OKAY IN BOTH PROCESSORS THEN APPROPRIATE 5M82 # CHANGES MADE IN EACH PROCESSOR I.E. SHARED IN BOTH 5MML # OR DEDICATED IN ONE AND UNDEDICATED IN OTHER. 5N7= # IF ANY CHECK FAILS NO CHANGES MADE AND MESSAGE OUTPUT. 5NLW # 5P6G TXSH LDX 5 RN(1) 5PL6 JSHARED 3,XNOT5 [^ IF ALREADY SHARED 5Q5Q LDN 0 1 [MKR = 1 FOR SHARED 5QKB BRN P3 5R52 TXDE LDX 0 K4TWINSET(1) 5RJL BNZ 0 T1 [^ IF DECOM IN FORCE 5S4= LDX 5 RL(1) 5SHW JDED 3,XNOT5 [^ IF ALREADY DEDICATED 5T3G LDCT 0 #400 [MKR = -VE FOR DEDICATE 5TH6 BRN P3 5W2Q TXUN LDX 5 RJ(1) 5WGB JUNDE 3,XNOT5 [^ IF ALREADY UNDEDICATED 5X22 LDN 0 0 [MKR = 0 FOR UNDEDICATED 5XFL # 5X^= # 5YDW # ALL STATUS CHANGES COME THROUGH THIS BIT. 5YYG # CHECKS IF SHARE OR INITIALISE IN PROGRESS AND IF UNIT IN USE. 5^D6 # ON ENTRY X0=0 IF UNDEDICATE 5^XQ # =1 IF SHARE 62CB # -VE IF DEDICATE 62X2 # 63BL P3 STO 0 AWORK3(2) [SAVE MKR =0 FOR UNDE;-VE FOR DEDICAT 63W= LDX 6 BSUNIT3(3) 64*W ANDN 6 #10 64TG P7 LDX 0 RE(1) 65*6 BNZ 6 TX3 [J IF STATUS CHANGE IN PROGRESS 65SQ #UNS ATBDG 66#B LDX 6 BSUNIT2(3) 66S2 #UNS ATBDG 67?L #SKI 67R= LDXC 6 BSUNIT2(3) 68=W BCS P6 [ERROR IF IN USE BY SYSTEM 68QG #UNS ATBDG 69=6 ADX 6 BSUNIT4(3) 69PQ ANDX 6 BITS22LS 6=9B STOZ AWORK4(2) 6=P2 BNZ 6 P6 [ERROR IF IN USE 6?8L LDXC 0 BSUNIT(3) 6?N= BCS P6 [OR IF CARTCONT RUNNING 6#7W LDX 0 BSUNIT3(3) 6#MG ANDN 0 BCGCOM 6*76 BNZ 0 P6 [^ IF CG IN PROGRESS 6*LQ LDX 0 AWORK2(2) [SEARCH FOR ASTUC 6B6B # IF SPINDLE NOT IN IMMEDIATE USE CHECK IF FILES OPEN 6BL2 LDN 1 BCCB 6C5L P5 LDX 1 FPTR(1) 6CK= TXU 1 CXCC 6D4W BCC P4 [J IF END OF CCB 6DJG TXU 0 GEOGU(1) 6F46 BCS P5 [J IF GEOG. NOS DON'T AGREE 6FHQ STO 1 AWORK4(2) [REMEMBER ASTUC ADDRESS 6G3B LDX 0 AWORK3(2) 6GH2 BNG 0 P4 [J IF DEDICATE 6H2L #UNS ATBDG 6HG= BRN P4 [DONT CHECK IF BODGE ON 6H^W [ 6JFG [ IF UNDEDICATING,SCRATCH FILES OR SU (MODE #1600) MUST NOT BE 6J^6 [ OPEN AS NO PERMENENT RECORD IS KEPT ON THE DISC 6KDQ [ 6KYB LDX 0 BACK1(1) [SUSN FROM ASTUC 6LD2 LDN 1 BCCB [SEARCH FOR EXOF 6LXL NEXF LDX 1 BPTR(1) 6MC= TXU 1 CXCC 6MWW BCC P4 [J IF END OF CCB 6NBG LDX 7 BACK2(1) 6NW6 BZE 7 P4 [J IF NOT AN EXOF 6P*Q LDEX 7 FIP+5(1) [COUNT OF AREAS 6PTB LDN 5 0 [PTR TO FIRST AREA 6Q*2 NEXS BZE 7 NEXF [J IF NO MORE AREAS 6QSL SBN 7 1 [REDUCE COUNT 6R#= ADN 5 6 [AND UPDATE PTR 6RRW SMO 5 6S?G TXU 0 FDCELLS-6(1) 6SR6 BCS NEXS [J IF AREA UNIT DIFFERS 6T=Q LDCT 6 #204 [S-TRUSTED AND SCRATCH MKRS 6TQB ANDX 6 EXMARK(1) 6W=2 BZE 6 NEXS [SEE IF MORE AREAS 6WPL P6 LDX 1 FX1 6X9= LDX 0 RQ(1) [UNIT IN USE 6XNW BRN T7 6Y8G # NO USERS OF UNIT 6YN6 # 6^7Q # 6^MB # SUBROUTINE TO SET ENGAGE BUTTON INTERRUPT 7272 # 72LL P10A MHUNTW 2,CPAR,JSCE [ 736= LINT JSCEP(2),0 [GET INTERNAL NUMBER 73KW DVS 7 Q24(1) 745G LDCT 5 #400 74K6 SMO 7 754Q SRL 5 0 75JB LDX 7 0 7642 BUTTONUP 5,7 76HL LDX 2 FX2 773= EXIT 4 0 77GW # 782G P4 LDX 6 ETWINMK 78G6 ANDN 6 INITCOM 78^Q LDX 1 FX1 79FB BNZ 6 P7 [^ IF TN INIT IN PROGRESS 79^2 LDX 0 AWORK3(2) 7=DL LDXC 6 ETWINMK 7=Y= BCC XINT [^ IF INITIALISED 7?CW # 7?XG # HERE IF NOT INITIALISED OR IN CRIPPLE MODE TO MAKE 7#C6 # CHANGES IN THIS PROCESSOR ONLY. 7#WQ # X0=0 IF UNDEDICATE 7*BB # =1 IF SHARE 7*W2 # -VE IF DEDICATE 7B*L # 7BT= XHEREONLY 7C#W BZE 0 XNOT3 [^ IF UNDEDICATE 7CSG LDX 6 XM3(1) 7D#6 ANDS 6 BSUNIT(3) [CLAIM LOCK-OUT 7DRQ BNG 0 XNOT1 [^ IF DEDICATE 7F?B LDX 0 XBITS510(1) 7FR2 ORS 0 BSUNIT(3) [MARK SHARED 7G=L NGN 0 5 7GQ= ANDS 0 BSUNIT3(3) [CLEAR DISENGAGE RIGHTS BIT 7H9W BRN XNOT2 7HPG XNOT1 LDN 0 4 7J96 ORS 0 BSUNIT3(3) [SET DISENGAGE RIGHTS BIT 7JNQ LONGON IPBDE [WAKE UP ACTS WAITING SU TO BE DED 7K8B XNOT2 7KN2 CALL 4 P10A [SET ENGAGE BUTTON EVENT 7L7L LDX 5 RU(1) [SET APPROPRIATE MESSAGE IDENTIFIE 7LM= LDX 0 AWORK3(2) 7M6W BPZ 0 XNOT5 [^ IF SHARE 7MLG LDX 5 RV(1) 7N66 BRN XNOT5 7NKQ XNOT3 LDX 0 AWORK4(2) 7P5B BZE 0 XNOT4 [^ IF NO ASTUC 7PK2 LDCH 0 BSUNIT1(3) [DECREMENT CT OF SUS 7Q4L SBN 0 1 7QJ= DCH 0 BSUNIT1(3) 7R3W FREECORE AWORK4(2) [AND FREE ASTUC 7RHG XNOT4 LDX 5 RW(1) 7S36 LDX 6 XM4(1) 7SGQ ANDS 6 BSUNIT(3) [MARK UNDEDICATED 7T2B LDX 0 XBIT5910(1) 7TG2 ORS 0 BSUNIT(3) 7T^L XNOT5 CALL 7 OUTPUT 7WF= BRN XENDCOM 7WYW # 7XDG # HERE IF INITIALISED. CHECK FIRST IF IN CRIPPLE MODE 7XY6 # 7YCQ XINT LDX 6 ETWINMK 7YXB ANDN 6 IPBDOWN+GEODOWN 7^C2 BZE 6 XOKAY 7^WL ANDN 6 GEODOWN 82B= BNZ 6 XHEREONLY [^ IF GEORGE DOWN 82TW LDN 6 1 83*G TXU 6 0 83T6 BCS XHEREONLY [^ IF NOT SHARE 84#Q LDX 0 RS(1) 84SB BRN T7 [ERROR IF SHARE AND IPBDOWN 85#2 # 85RL # SEND MESSAGE TO OTHER PROCESSOR 86?= # 86QW XOKAY STO 3 AWORK4(2) [STORE APIA PTR 87=G LDN 6 #10 87Q6 ORS 6 BSUNIT3(3) [SET STATUS CHANGE IN PROGRESS 889Q LDN 7 GDED 88PB BNG 0 XOK1 [^ IF DEDICATE 8992 LDN 7 GUNDED 89NL BZE 0 XOK1 [^ IF UNDEDICATE 8=8= LDN 7 GSHARE [MUST BE SHARE 8=MW XOK1 CALL 6 XBLKS [SET UP BLOCKS 8?7G LDN 5 HOLDWT 8?M6 STO 5 ENWTS(3) [WAITING STYLE 8#6Q LDX 0 AWORK2(2) 8#LB STO 0 ENSTART(1) [UNIT NO 8*62 STO 0 ENBR(3) 8*KL CALL 7 SETOFF [START TWINNING ACTIVITY 8B5= CALL 6 XHALT [WAIT FOR REPLY 8BJW LDX 4 ENRP(3) [REPLY 8C4G LDX 6 ENBR(3) [UNIT NO 8CJ6 FREECORE 3 [FREE ENLINK 8D3Q LDN 0 #10 8DHB LDX 3 AWORK4(2) 8F32 ERS 0 BSUNIT3(3) [UNSET STATUS CHANGE IN PROGRES 8FGL FON KTSCTF [WAKE UP ACTIVITIES 8G2= BNG 4 XENDCOM [^ IF OKAY 8GFW LDX 0 RE(1) 8G^G SBN 4 1 8HF6 BZE 4 TX3 [^ IF STATUS CHANGE IN PROG IN 8HYQ SBN 4 1 8JDB BNZ 4 XCONT [^ IF NOT IPB FAIL 8JY2 LDX 0 RS(1) 8KCL LDX 5 AWORK3(2) 8KX= SBN 5 1 8LBW BZE 5 T7 [ERROR IF SHARE AND IPB FAIL 8LWG BRN XCRIP [OTHERWISE CHANGE HERE ONLY 8MB6 XCONT SBN 4 2 8MTQ BZE 4 XCRIP [^ IF OTHER GEORGE DOWN 8N*B LDX 0 RQ(1) 8NT2 SBN 4 1 8P#L BZE 4 T7 [ERROR IF USERS IN OTHER SIDE 8PS= SBN 4 1 8Q?W BZE 4 XNOCH [^ IF NO CHANGE REQUIRED 8QRG SBN 4 1 8R?6 BZE 4 XCRIP [^ IF NOT INITIALISED 8RQQ BRN N4 [INVALID REPLY 8S=B XNOCH 8SQ2 LDX 0 AWORK3(2) 8T9L LDX 5 RL(1) 8TP= BNG 0 XNOT5 [^ IF ALREADY DEDICATED 8W8W LDX 5 RJ(1) 8WNG BZE 0 XNOT5 [^ IF ALREADY UNDEDICATED 8X86 LDX 5 RN(1) 8XMQ BRN XNOT5 [ALREADY SHARED 8Y7B XCRIP LDX 0 AWORK3(2) 8YM2 STOZ AWORK4(2) [RESET AWORK4 TO POINT TO ASTUC 8^6L LDN 1 BCCB 8^L= XC1 LDX 1 FPTR(1) 925W TXU 1 CXCC 92KG BCC XC2 9356 TXU 6 GEOGU(1) 93JQ BCS XC1 944B STO 1 AWORK4(2) 94J2 XC2 LDX 1 FX1 953L BRN XHEREONLY 95H= # 962W # 96GG # INITIALISE 9726 # IF NOT ALREADY INITIALISED THE LINKS ARE OPENED 97FQ # OTHERWISE THEY ARE CLOSED AND REOPENED 97^B # 98F2 T10 SBN 0 28 98YL BZE 0 TXIN [J IF IPB SPECIFIED AS 2ND PARAM 99D= LDX 0 RB(1) 99XW BRN T7 [ELSE ERROR 9=CG TXIN 9=X6 CALL 7 X6 [CHECK IF ANY TWINNED DEVICES 9?BQ BRN TX2 [J IF NOT-ERROR 9?WB LDX 1 FX1 9#B2 LDX 0 RE(1) 9#TL LDX 6 ETWINMK 9**= ANDN 6 INITCOM 9*SW BNZ 6 TX3 [J IF INITIALISE IN PROGRESS 9B#G LDN 5 HOLDWT [WAITING STYLE 9BS6 [ 9C?Q [ CHECK IF STATUS CHANGE IN PROGRESS 9CRB [ 9D?2 CALL 7 X6 [GET PTR TO DL FOR DUAL ACCESS UNIT 9DQL BRN XNS [J IF NONE LEFT 9F== LADDP 3,2 [APIA PTR IN X2 9FPW LDX 0 BSUNIT3(2) 9G9G ANDN 0 #10 [TEST IF STATUS CHANGE IN PROGRESS 9GP6 BZE 0 X3 [J IF THIS ONE OK,TO GET NEXT DL 9H8Q LDX 1 FX1 [ELSE TWIN COMMAND IN PROGRESS 9HNB LDX 2 FX2 9J82 LDX 0 RE(1) [IDENTIFIER FOR MESSAGE 9JML BRN TX3 [GO TO OUTPUT ERROR AND FINISH 9K7= XNS LDX 1 FX1 9KLW LDX 2 FX2 [CHECK PASSED OK 9L6G [ 9LL6 LDN 0 INITCOM 9M5Q ORS 0 ETWINMK [SET INITIALISE IN PROGRESS BIT 9MKB LDX 0 ETWINMK 9N52 ANDN 0 INITRQ 9NJL ERS 0 ETWINMK [STOPS "PLEASE INITIALISE" BEING OUTP 9P4= LONGON IPBDE 9PHW LONGON EPWT [WAKE UP ANYBODY WAITING FOR INIT 9Q3G LDXC 0 ETWINMK 9QH6 BCS TX4 [J IF NOT ALREADY INITIALISED 9R2Q # 9RGB # ALREADY INITIALISED SO GET BSA ENTWIN TO CLOSE THE LINKS 9S22 # 9SFL LDN 7 CLIP [CLOSE REQUEST MARKER 9S^= CALL 6 XBLKS [SET UP DATA BLOCKS 9TDW STO 5 ENWTS(3) [SET WAITING STYLE 9TYG CALL 7 SETOFF [START UP TWINNING ACTIVITY 9WD6 CALL 6 XHALT [AND WAIT FOR ANSWER 9WXQ LDX 0 ENRP(3) 9XCB BNG 0 TX5 [J IF OK 9XX2 BRN N4 [CAN ONLY BE OK 9YBL TX5 FREECORE 3 [FREE ENLINK 9YW= NGNC 0 1 9^*W # 9^TG # IF ITS THE 1ST INITIALISE AWORK3=0;ELSE=1 AND THIS MKR =2*6 # IS STORED IN THE ESEND AND PICKED UP BY THE BSA ENTWIN ACTIVITY =2SQ # AS DIFFERENT ACTION IS TAKEN. =3#B # =3S2 TX4 LDN 0 0 [X0=0 IF FIRST TIME;ELSE X0=1 =4?L STO 0 AWORK3(2) [REMEMBER MKR =4R= LDX 0 AWORK2(2) =5=W STO 0 IPBTWIN [STO IPB NO =5QG LDN 7 INIT [INITIALISE REQUEST TYPE =6=6 CALL 6 XBLKS [SET UP DATA BLOCKS =6PQ STO 5 ENWTS(3) [STORE WAITING STYLE =79B LDX 0 AWORK3(2) [PICK UP MARKER =7P2 STO 0 ENSTART(1) [AND STORE FOR TWINSETC =88L CALL 7 SETOFF [START UP TWINNING ACTIVITY =8N= CALL 6 XHALT [AND WAIT =97W LDX 4 ENRP(3) [REPLY =9MG #SKI K6TWINSET>99-99 ==76 TRACE ENRP(3),INITREP ==LQ FREECORE 3 [FREE ENLINK =?6B LDX 0 RO(1) =?L2 BNG 4 TX6 [J IF OK =#5L SBN 4 32 =#K= BZE 4 XSW [J IF STATE WRONG =*4W ADN 4 32 =*JG ANDN 4 #36 =B46 BZE 4 XMUCK =BHQ LDX 0 RH(1) =C3B SBN 4 2 [REPLY =2 =CH2 BZE 4 TX6 [J IPB FAIL =D2L SBN 4 6 =DG= LDN 0 INITCOM =D^W ERS 0 ETWINMK [CLEAR INITIALISATION BIT =FFG LDX 0 RG(1) =F^6 BZE 4 T7 [J IF SAME IDENTITY REPLY=8 =GDQ LDX 0 RF(1) =GYB SBN 4 8 =HD2 BZE 4 T7 [J IF NOT GEORGE REPLY=16 =HXL BRN N4 =JC= [ =JWW [ STATE WRONG =KBG [ =KW6 XSW MHUNTW 3,EWDAS,EGOT [WRONG NUMBERS =L*Q OUTPACK ENTRGA(3),V,VARDEC,XSW =LTB LDN 0 INITCOM =M*2 ERS 0 ETWINMK [NO LONGER IN PROGRESS =MSL MHUNTW 1,EWDAS,EGOT =N#= FREECORE 1 =NRW COMERR EWRSTC [REPORT COMMAND ERROR =P?G [ =PR6 TX6 STO 0 AWORK4(2) =Q=Q LDX 0 AWORK3(2) =QQB BZE 0 X8170 [J IF FIRST TIME =R=2 LDX 0 RT(1) [ELSE STORE CLOSED AND RE-OPEN MESSAG =RPL STO 0 AWORK4(2) =S9= # =SNW # NOW TO OUTPUT STATE OF DEVICES =T8G # =TN6 X8170 LDN 6 3 [THREE STATES =W7Q OUT LDN 4 0 [INITIALISE PARAMETER COUNT =WMB CALL 7 X6 [GET PTR TO DL =X72 BRN XMUCK [SHOULD BE SOME =XLL OUT2 LADDP 3,2 [POINTER TO APIA =Y6= LDX 5 BSUNIT(2) =YKW ANDX 5 BITS910 [ISOLATE B9 AND B10 OF APIA =^5G LDX 2 FX1 =^K6 SMO 6 ?24Q ERX 5 XMTAB(2) [APPLY ASSOCIATED MASK ?2JB BNZ 5 OUT1 [NOT OF THIS STATUS ?342 ADN 4 1 [UPDATE COUNT ?3HL OUT1 CALL 7 X3 [GET NEXT ?43= BRN NOMORE [J IF NO MORE ?4GW BRN OUT2 [GO TO ANYALISE ?52G NOMORE ?5G6 BZE 4 OUT3 [NONE OF THIS STATUS ?5^Q ADN 4 1 [ADD 1 FOR HEADER FOR OUTPACK ?6FB SETUPCORE 4,3,EWDAS,EGOT [SET UP PARAMETER BLOCK ?6^2 STO 4 ENTRGA(3) [STORE HEADER ?7DL LDN 4 1 [MOD TO EGOT ?7Y= CALL 7 X4 [GET FIRST DEVICE ?8CW BRN XMUCK ?8XG OUT6 LADDP 3,2 [PTR TO APIA ?9C6 LDX 5 BSUNIT(2) ?9WQ ANDX 5 BITS910 ?=BB LDX 2 FX1 ?=W2 SMO 6 [GET MASK ??*L ERX 5 XMTAB(2) ??T= BNZ 5 OUT4 [J IF NOT RIGHT STATUS ?##W MHUNTW 2,EWDAS,EGOT ?#SG LGEOG 3,0 [GET GEOG. NO. ?*#6 SMO 4 ?*RQ STO 0 ENTRGA(2) [STORE IN PARAMETER BLOCK ?B?B ADN 4 1 [UPDATE MOD ?BR2 LDX 0 6 ?C=L SBN 0 1 ?CQ= BZE 0 OUT4 [J IF UNDEDICATE ?D9W LINT 3,0 [ELSE SET ENGAGE BUTTON ?DPG SMO FX1 ?F96 DVS 7 Q24 ?FNQ LDCT 5 #400 ?G8B SMO 7 ?GN2 SRL 5 0 ?H7L LDX 7 0 ?HM= BUTTONUP 5,7 ?J6W OUT4 CALL 7 X3 [GET NEXT ?JLG BRN OUT5 [J IF NO MORE ?K66 BRN OUT6 [GO TO DEAL WITH ?KKQ OUT5 MHUNTW 3,EWDAS,EGOT ?L5B OUTPACK ENTRGA(3),V,VARDEC,OUT5 [ASSEMBLE PARAMETER ?LK2 LDX 0 6 [GET MOD ?M4L ADX 0 0 [MOD TO SINGULAR MESSAGE ?MJ= SBN 4 2 ?N3W BNG 4 XMUCK ?NHG BZE 4 OUT7 [J IF SINGLE NO. ?P36 SBN 0 1 ?PGQ OUT7 SMO 0 ?Q2B LDX 5 RH(1) [GET MESSAGE IDENTIFIER ?QG2 LDN 1 1 [CENTRAL CONSOLE ?Q^L INFORMX 1,5,1 [AND OUTPUT ?RF= MHUNTW 3,EWDAS,EGOT ?RYW FREECORE 3 [FREE EGOT ?SDG OUT3 BCT 6 OUT [BACK FOR NEXT ?SY6 LDX 2 FX2 ?TCQ LDX 5 AWORK4(2) ?TXB OUT8 CALL 7 OUTPUT ?WC2 LDXC 0 ETWINMK ?WWL ANDS 0 ETWINMK [CLEAR INITILISE BIT ?XB= LDN 0 INITCOM [CLEAR INITIALISE IN PROGRESS BIT ?XTW ERS 0 ETWINMK ?Y*G LDX 2 ENTWINPTR [SEARCH FOR ANY ESENDS WAITING AND ?YT6 N2 HUNT2J 2,EWDAS,ESEND,,N1 [CLEAR WAIT MKR ?^#Q LDXC 0 ENMARK(2) ?^SB ANDS 0 ENMARK(2) #2#2 BRN N2 #2RL N1 LDX 2 ENTWINPTR #3?= DESUSPEND [WAKE UP TWINNING ACTIVITY #3QW LONGON IPBDE #4=G XENDCOM #4Q6 ENDCOM #59Q # #5PB # TABLE OF MASKS #692 # #6NL XMTAB +0 #78= #00060000 [UNDEDICATED #7MW +0 [DEDICATED #87G #00020000 [SHARED #8M6 # #96Q # #9LB # UP AND DOWN #=62 # #=KL TXSTATE #?5= BNZ 7 T1 [J IF MORE THAN ONE PARAMETER #?JW LDCT 5 #020 ##4G ANDX 5 ETWINMK ##J6 LDX 0 RP(1) #*3Q BZE 5 TX3 [J IF NOT REQUIRED #*HB ERS 5 ETWINMK [CLEAR BIT #B32 LDCT 5 #40 [REPLY B3=1 FOR UP #BGL TXU 4 XUP(1) #C2= BCC TXT1 [J IF UP #CFW LDCT 5 #140 [REPLY B2=B3=1 FOR DOWN #C^G TXT1 ORS 5 ETWINMK #DF6 LONGON EPWT [WAKE UP ACTIVITY WAITING #DYQ BRN XENDCOM #FDB # #FY2 N4 GEOERR 1,WRONGREP #GCL # #GX= # SUBROUTINE TO CHAIN DATA BLOCK ON END OF TWINNING ACTIVITY #HBW # #HWG # LINK X7 NO-COORDINATION X3-X7 UNCHANGED #JB6 # ON ENTRY X1 SHOULD PT TO ESEND ; X3 SHOULD PT TO ENLINK #JTQ # #K*B SETOFF #KT2 RINGTWO ENTRGA(1),ENLA(3) [RING THEM TOGETHER #L#L LDX 2 ENTWINPTR [PTR TO TWINNING ACTIVITY #LS= LDX 2 ACTRING(2) #M?W SBN 2 ACTRING #MRG LDX 2 BPTR(2) #N?6 #SKI K6TWINSET>99-99 #NQQ TRACE 1,SETOFF #P=B CHAIN 1,2 [CHAIN ON END #PQ2 LDX 2 ENTWINPTR #Q9L DESUSPEND [WAKE IT UP #QP= EXIT 7 0 #R8W # #RNG # #S86 XCME GEOERR 1,NOTCME #SMQ # #T7B MENDAREA 1023-0?,K99TWINSET #TM2 # #W6L #END ^^^^ ...415552320001