(George Source)
Macros used: ACROSS, BXE, BXGE, BXL, BXU, CCBB, CHECKB, CHECKEXT, COOR1, DERINGD, FINMOVE, FOUTMOVE, FPUT, HUNTMISB, ILLEGALX, JALLOC, JCBB, JDISENG, JENG, LAMOP, LOCKCA, MHUNTW, MURDER, OLPFIN, PAIR, RELOFP, SCBB, SEG, SEGENTRY, TICKLE, TOPCA, TRACE, UNPLUG, UP, UPPLUS
22FL SEG VIPBPERI,,R.WEYAND COMM 22^= # THIS G3 ONLY SEGMENT CONTAINS THE VIRTUAL 7900 CODE WHICH INTERFACES 23DW # COMMUNICATIONS MANAGER COMMS (WMC TYPE) CHANNELS WITH THE MESSAGE 23YG # BUFFERING COMMUNICATIONS SUBSYSTEM (MBS) 24D6 # 24XQ # ENTRY POINTS : 25CB SEGENTRY K1VIPBPERI,Z1VIPBPERI 25X2 # K1VIPBPERI VALIDATES ALL VIRTUAL 7900 WMC ORDERS AND STORES TRANSFER 26BL # ORDERS AND PROCESSES OPEN,CANCEL,CLOSE MODES ON A VIRTUAL 7900 CHANNEL 26W= # IT RUNS IN A VIRTUAL 7900 COMMS CHANNEL AOLPT ACTIVITY . 27*W # 27TG SEGENTRY K2VIPBPERI,Z2VIPBPERI 28*6 # K2VIPBPERI IS ENTERED BY A DOWN FROM RELPER TO RELEASE A VIRTUAL 7900 28SQ # COMMS CHANNEL . 29#B # 29S2 SEGENTRY K3VIPBPERI,Z3VIPBPERI 2=?L # K3VIPBPERI IS ENTERED BY K1VIPBPERI TO REPORT ILLEGAL VIRTUAL 7900 2=R= # WMC ORDERS . 2?=W # IT RUNS IN THE PROCESS CONTROL ACTIVITY (APET) . 2?QG # 2#=6 SEGENTRY K4VIPBPERI,Z4VIPBPERI 2#PQ # K4VIPBPERI IS ENTERED BY AN ACROSS FROM CHARGESC EVERY 2*9B # FONINT (4) SECONDS TO TIME OUT VIRTUAL 7900 WMC 2*P2 # TRANSFER ORDERS WHICH HAVE BEEN STORED FOR 3 FONINTP (12) SECONDS . 2B8L # IT RUNS IN THE BLANKET ACTIVITY . 2BN= # 2C7W SEGENTRY K5VIPBPERI,Z5VIPBPERI 2CMG # K5VIPBPERI IMPLEMENTS VIRTUAL 7900 WMC TRANSFER ORDERS . 2D76 # IT RUNS IN 7900 INPUT AND OUTPUT ACTIVITIES (AMOP/IPBIN & AMOP/IPBOUT) 2DLQ # 2F6B # CODING CONVENTIONS USED : 2FL2 # PRESET LABELS ARE PREFIXED WITH 'P' 2G5L # EXCEPT THAT ENTRY POINTS ARE PREFIXED WITH 'Z' 2GK= # NOTE MONITORING FILE MESSAGE IDENTIFIER PRESETS FOR ILLEGAL WMC 2H4W # PERI'S ARE HELD IN THE EXCEPTION PATHS AREA 2HJG # SUBROUTINES LABELS ARE PREFIXED WITH 'S' 2J46 # PROGRAM LABELS ARE PREFIXED WITH 'V'(FOR VIRTUAL 7900) 2JHQ # ERROR LABELS ARE PREFIXED WITH 'X' 2K3B # 2KH2 [ 2L2L [ PRESET DATA 2LG= [ 2L^W # LIST OF REPLIES SET BY THE VIRTUAL 7900 TO WMC ORDERS 2MFG # EACH ENTRY (#XXX) CORRESPONDS TO B0 TO B8 OF THE REPLY WORD 2M^6 #DEF PTRANSFEROK = #000 [NORMAL TRANSFER 2NDQ #DEF PNI = #020 [NOT IMPLEMENTED 2NYB #DEF PNIXNE = #024 [NOT IMPLEMENTED,NOT ESTABLISHED 2PD2 #DEF PTOXNI = #220 [TIME OUT,NOT IMPLEMENTED 2PXL #DEF PTOXNIXNE = #224 [TIME OUT,NOT IMPLEMENTED,NOT ESTAB. 2QC= # LIST OF WMC MODES ACCEPTED BY THE VIRTUAL 7900 2QWW # IN ORDER OF DECREASING FREQUENCY OF USE 2RBG PMODESLIST 2RW6 0 [READ 2S*Q #21 [DOUBLE-LENGTH WRITE 2STB 1 [WRITE 2T*2 #2000 [CONDITIONAL READ 2TSL #2021 [CONDITIONAL DOUBLE-LENGTH WRITE 2W#= #2001 [CONDITIONAL WRITE 2WRW 4 [CANCEL 2X?G #1000 [CLOSE 2XR6 #200 [OPEN LINK FOR READING 2Y=Q #400 [OPEN LINK FOR WRITING 2YQB -1 [-1 INDICATES THE END OF THE LIST 2^=2 PLINKSTATE #00600000 [B6=1 LINK OPEN FOR WRITING 2^PL [B7=1 LINK OPEN FOR READING 329= PMINLENGTH 3 32NW PMINLENGTHS 1 [MINIMUM OF EITHER DOUBLE-LENGTH 338G [WRITE LENGTHS 33N6 PMAXLENGTH +AVBUFFSIZE+1 [MAX+1 347Q PMBSBUFFSIZ +AVBUFFSIZE 34MB PV7900TIMEO 3*FONINTP*1000/K9 [TIME OUT PERIOD FOR VIRTUAL 7900 WMC 3572 [TRANSFERS 35LL [IE 3 FONINTP INTERVALS (12 SECS) IN 366= [CLEANCT TIME FORM 36KW PK3VIPBPERI 375G PAIR VIPBPERI,3 37K6 [ 384Q [ SUBROUTINES 38JB [ 3942 # COMMUNAL SUBROUTINES : 39HL # IE SUBROUTINES USED BY MORE THAN ONE ENTRY POINT 3=3= # 3=GW # SUBROUTINE TO DECREMENT THE VIRTUAL 7900 DEVICE LIST'S COUNT OF 3?2G # STORED READ OR WRITE TRANSFERS AS APPROPRIATE 3?G6 # NOTE THESE COUNTS ARE USED BY MBS'S INPUT AND OUTPUT ACTIVITIES 3?^Q # TO QUICKLY DETERMINE WHETHER A SUITABLE TRANSFER IS STORED 3#FB # ON ENTRY X3 -> OLPA WHOSE STORED TRANSFER IS BEING CANCELLED 3#^2 # LINK IN X7 3*DL STRANCTDOWN 3*Y= LDX 0 BFSTATE(3) [LINK DIRECTION,B6 = 1 FOR WRITE LINK 3BCW SLC 0 6 3BXG BNG 0 SWRITCTDOWN [WRITE LINK 3CC6 # READ LINK 3CWQ SREADCTDOWN 3DBB LDN 0 1 3DW2 SMO CPPTR(3) 3F*L SBS 0 AVCREADS 3FT= EXIT 7 0 3G#W SWRITCTDOWN 3GSG LDN 0 1 3H#6 SMO CPPTR(3) 3HRQ SBS 0 AVCWRITES 3J?B EXIT 7 0 3JR2 # 3K=L # SUBROUTINE TO MOVE WORDS OUT OF THE PROGRAM 3KQ= # ON ENTRY 3L9W # X0 = NUMBER OF WORDS TO BE MOVED 3LPG # X3 -> OLPA ASSOCIATED WITH THE MOVE 3M96 # X4 -> PROGRAM AREA (RELATIVE TO PROGRAM'S DATUM) 3MNQ # X5 -> GEORGE AREA TO WHICH THE MOVE IS TO TAKE PLACE 3N8B # ON EXIT X4 = GEORGE ADDRESS OF PROGRAM AREA ; OTHER ACCS UNCHANGED 3NN2 # LINK IN X7 3P7L SFOUTMOVE 3PM= FOUTMOVE APETADDR(3),4,5,0 3Q6W EXIT 7 0 3QLG # 3R66 # SUBROUTINE TO MOVE WORDS INTO THE PROGRAM 3RKQ # ON ENTRY 3S5B # X0 = NUMBER OF WORDS TO BE MOVED 3SK2 # X3 -> OLPA ASSOCIATED WITH THE MOVE 3T4L # X4 -> GEORGE AREA FROM WHICH THE MOVE IS TO TAKE PLACE 3TJ= # X5 -> PROGRAM AREA (RELATIVE TO PROGRAM'S DATUM) 3W3W # ON EXIT X5 = GEORGE ADDRESS OF PROGRAM AREA ; OTHER ACCS UNCHANGED 3WHG # LINK IN X7 3X36 SFINMOVE 3XGQ FINMOVE APETADDR(3),5,4,0 3Y2B EXIT 7 0 3YG2 # 3Y^L # SUBROUTINE TO SET THE REPLY/RESPONSE WORD OF A PROGRAM'S WMC ORDER 3^F= # ON ENTRY 3^YW # X3 -> OLPA ASSOCIATED WITH THE WMC ORDER 42DG # X6 = REPLY/RESPONSE TO BE SET 42Y6 # ON EXIT X0,X4,X5 ARE UNDEFINED 43CQ # LINK IN X7 43XB SETREPLYWD 44C2 LDX 5 ACOMMUNE2(3) [RELATIVE ADDR OF PROG'S REPLY WORD 44WL SETREPLYWD1 [ENTRY FOR S/RS SETACCEPTED & SETREJECTED 45B= LDN 4 6 [ADDR OF REPLY/RESPONSE TO BE SET 45TW LDN 0 1 [1 WORD MOVE 46*G STO 7 GEN0 46T6 CALL 7 SFINMOVE 47#Q TRACE 6,V79REPWD [REPLY/RESPONSE TO WMC ORDER 47SB LDX 7 GEN0 48#2 EXIT 7 0 48RL # 49?= # SUBROUTINE SETACCEPTED GIVES AN ACCEPTED DIRECT RESPONSE TO A 49QW # PROGRAM'S WMC ORDER 4==G # SUBROUTINE SETREJECTED GIVES A REJECTED DIRECT RESPONSE TO A 4=Q6 # PROGRAM'S WMC ORDER 4?9Q # ON ENTRY X3 -> OLPA ASSOCIATED WITH THE WMC ORDER 4?PB # ON EXIT X0,X4,X5 ARE UNDEFINED 4#92 # LINK IN X7 4#NL SETACCEPTED 4*8= LDCT 6 #400 4*MW BRN SETRESPONSE 4B7G SETREJECTED 4BM6 LDCT 6 #420 4C6Q SETRESPONSE 4CLB LDX 5 EVENT2(3) 4D62 ADN 5 1 [RELATIVE ADDR OF PROG'S REPLY WORD 4DKL BRN SETREPLYWD1 4F5= # 4FJW # SUBROUTINE TO GIVE A POINTER TO THE NEXT OLPA ON THE AVOLPARING 4G4G # ON ENTRY X3 -> BLOCK ON AVOLPARING FROM WHICH TO START 4GJ6 # EXITS +0 WITH X3 -> V7900 DEV LIST IF END OF AVOLPARING REACHED 4H3Q # EXITS +1 WITH X3 -> NEXT OLPA IF NOT END OF THE AVOLPARING 4HHB # LINK IN X7 4J32 SNEXTOLPA 4JGL # TEST START BLOCK TYPE TO DETERMINE ROUTE TO NEXT BLOCK 4K2= LDX 0 ATYPE(3) 4KFW SRL 0 12 4K^G SBN 0 APERI+AV7900 4LF6 BZE 0 SNEXTOLPADL [START BLOCK = V7900 DEVICE LIST BLK 4LYQ # START BLOCK = AN OLPA 4MDB LDX 0 CPPTR(3) [-> OLPA'S V7900 DEVICE LIST 4MY2 LDX 3 BWORKRING(3) 4NCL BRN SNEXTOLPAOK 4NX= SNEXTOLPADL 4PBW # START BLOCK = V7900 DEVICE LIST BLK 4PWG LDX 0 3 [-> V7900 DEVICE LIST 4QB6 LDX 3 AVOLPARING(3) 4QTQ SNEXTOLPAOK 4R*B SBN 3 AVOLPARING [POSSIBLY -> V7900 DEVICE LIST 4RT2 BXE 0 3,(7) [END OF AVOLPARING OR IT IS EMPTY 4S#L [X3 -> V7900 DEVICE LIST 4SS= SBN 3 BWORKRING-AVOLPARING 4T?W EXIT 7 1 [NOT END OF AVOLPARING 4TRG [X3 -> NEXT OLPA 4W?6 # 4WQQ # SUBROUTINE TO REACTIVATE THE PROGRAM MEMBER OWNING THE WMC ORDER 4X=B # ON ENTRY X3 -> OLPA ASSOCIATED WITH THE WMC ORDER 4XQ2 # ON EXIT X0 IS UNDEFINED ; X1=FX1 ; X2=FX2 4Y9L # LINK IN X7 4YP= STICKLE 4^8W LDX 1 EVENT1(3) [MEL ADDRESS 4^NG LDX 1 ARM1-AFW1(1) 5286 SRL 1 18 52MQ STO 1 GEN1 [MEMBER NUMBER OWNING THE WMC ORDER 537B TICKLE JOBNO(3),GEN1 53M2 EXIT 7 0 546L # 54L= # K1VIPBPERI ONLY SUBROUTINES : 555W # 55KG # SUBROUTINE TO REACTIVATE THE PROGRAM AND WAIT FOR THE NEXT WMC 5656 # ORDER BEFORE RE-ENTERING Z1VIPBPERI 56JQ # ON ENTRY X2 -> OLPA CALLING THIS SUBROUTINE 574B # ON EXIT X0 IS UNDEFINED ; X1=FX1 ; X2=FX2 57J2 # LINK IN X7 583L SKICKNWAIT 58H= SBX 7 FX1 [RELATIVISE LINK : DIAGNOSTIC AID 592W OLPFIN APETADDR(2) 59GG BRN Z1VIPBPERI 5=26 # 5=FQ # SUBROUTINE TO DETERMINE THE MODE OF THE CURRENT WMC ORDER AND TO 5=^B # EXIT ACCORDINGLY 5?F2 # ON ENTRY X2 -> OLPA CALLING THIS SUBROUTINE 5?YL # ON EXIT X6 = THE MODE OF THE WMC ORDER ; 5#D= # THE EXIT POINT CORRESPONDS TO THE ORDER OF THE LIST OF MODES 5#XW # (PMODESLIST), NUMBERING FROM 1 5*CG # EXITS +0 IF THE MODE IS UNKNOWN 5*X6 # X4 IS OVERWRITTEN 5BBQ # LINK IN X7 5BWB SWHATMODE 5CB2 LDN 4 1 5CTL LDX 6 EVENT4(2) [EXTRACT MODE OF WMC ORDER 5D*= ANDX 6 BSP16 5DSW SMODETEST 5F#G SMO 4 5FS6 LDX 0 PMODESLIST-1(1) 5G?Q BXE 0 6,SWHATMODEX [MODE MATCH 5GRB BNG 0 (7) [END OF THE LIST OF MODES : EXIT +0 5H?2 BUX 4 SMODETEST [TEST AGAINST NEXT MODES LIST ENTRY 5HQL SWHATMODEX 5J== SMO 4 5JPW EXIT 7 0 5K9G # 5KP6 # SUBROUTINE TO CHECK THAT THE PROGRAM'S EXTENDED CONTROL 5L8Q # AREA LIES WITHIN THE PROGRAM'S RESERVATIONS 5LNB # ON ENTRY 5M82 # X2 -> OLPA CALLING THIS SUBROUTINE 5MML # X5 = NUMBER OF WORDS TO BE CHECKED 5N7= # ON EXIT X0 IS UNDEFINED ; OTHER ACCS UNCHANGED 5NLW # LINK IN X7 5P6G SCHECKCA 5PL6 ... CHECKEXT EVENT2(2),5,XILLADDR,APETADDR(2),,(GEOERR),HLOCK1 5Q5Q EXIT 7 0 5QKB # 5R52 # SUBROUTINE TO CHECK THAT A PROGRAM AREA LIES WITHIN THE PROGRAM'S 5RJL # RESERVATIONS 5S4= # ON ENTRY 5SHW # X2 -> OLPA CALLING THIS SUBROUTINE 5T3G # X4 -> PROGRAM AREA TO BE CHECKED (RELATIVE TO PROGRAM'S DATUM) 5TH6 # X5 = NUMBER OF WORDS TO BE CHECKED 5W2Q # ON EXIT X0 IS UNDEFINED ; OTHER ACCS UNCHANGED 5WGB # LINK IN X7 5X22 SCHECKDA 5XFL CHECKB 4,5,XILLBLKADD,APETADDR(2),,(GEOERR) 5X^= EXIT 7 0 5YDW #PAGE 5YYG [ 5^D6 [ MAIN PATHS 5^XQ [ 62CB # 62X2 # K1VIPBPERI VALIDATES ALL VIRTUAL 7900 WMC ORDERS AND STORES TRANSFER 63BL # ORDERS AND PROCESSES OPEN,CANCEL,CLOSE MODES ON A VIRTUAL 7900 CHANNEL 63W= # IT RUNS IN A VIRTUAL 7900 COMMS CHANNEL AOLPT ACTIVITY . 64*W # 64TG Z1VIPBPERI 65*6 TRACE 2,V79OLORD [ADDRESS OF OLPA HANDLING THIS ORDER 65SQ TRACE EVENT4(2),TYPEMODE [TYPE/MODE WORD OF THIS WMC ORDER 66#B LDX 3 2 [SET X3 -> THIS OLPA 66S2 [FOR COMMUNAL SUBROUTINES 67?L # 67R= LOCKCA APETADDR(2),EVENT2(2) [ISSUED AS A MATTER OF CONVENTION 68=W [EXEC HAS CHECKED THE 1ST 4 CA WORDS 68QG # SET X6 = THE MODE OF THE PERI AND SELECT THE APPROPRIATE ROUTINE 69=6 # NOTE ENQUIRY MODES ARE NOT SUPPORTED 69PQ CALL 7 SWHATMODE 6=9B BRN XILLMODE [UNKNOWN MODE 6=P2 BRN VMODE0 6?8L BRN VMODEO21 6?N= BRN VMODE1 6#7W BRN VMODEO2000 6#MG BRN VMODEO2021 6*76 BRN VMODEO2001 6*LQ BRN VMODE4 6B6B BRN VMODEO1000 6BL2 BRN VMODEO200 6C5L BRN VMODEO400 6CK= # 6D4W VMODEO200 [OPEN WMC LINK FOR READING 6DJG VMODEO400 [OPEN WMC LINK FOR WRITING 6F46 # MARK LINK OPEN FOR WRITING OR READING, IF NOT ALREADY OPENED 6FHQ LDX 0 PLINKSTATE(1) 6G3B ANDX 0 BFSTATE(2) 6GH2 BNZ 0 XILLMODE [LINK ALREADY OPENED 6H2L SLL 6 9 [ALIGN BITS SET IN THE MODE WORD 6HG= [(B15&16) WITH THE OPEN FLAGS (B6&7) 6H^W ORS 6 BFSTATE(2) [SET OPEN FOR WRITING/READING 6JFG [FLAG (B6/B7) 6J^6 # CHECK THE 5 WORD CONTROL AREA LIES WITHIN RESERVATIONS 6KDQ LDN 5 5 [COUNT OF CA WORDS TO BE CHECKED 6KYB CALL 7 SCHECKCA 6LD2 # MOVE THE LINK NAME FIELD TO ACOMMUNE7-9 IN THE OLPA 6LXL # FOR DIAGNOSTIC PURPOSES 6MC= # DON'T BOTHER VALIDATING THE LINK NAME FOR FILE NAME FORMAT AS IT 6MWW # IS NOT UTILISED - AND DON'T CHECK REQUESTED PROPERTIES AS COMMS 6NBG # CHANNELS ARE WMC TYPE LINKS 6NW6 LDN 0 3 [COUNT OF WORDS TO BE MOVED 6P*Q LDX 4 EVENT2(2) 6PTB ADN 4 2 [-> LINK NAME FIELD 6Q*2 LDN 5 ACOMMUNE7(2) [-> OLPA'S ACOMMUNE7 6QSL CALL 7 SFOUTMOVE 6R#= # GIVE PROGRAM AN ACCEPTED RESPONSE AND RESTART IT 6RRW # OPEN MODES ARE NEVER GIVEN A REJECTED RESPONSE 6S?G CALL 7 SETACCEPTED 6SR6 CALL 7 SKICKNWAIT [**** 6T=Q # 6TQB VMODE4 [CANCEL WMC TRANSFER 6W=2 VMODEO1000 [CLOSE DOWN WMC LINK 6WPL # CANCEL ANY STORED TRANSFER AND THEN GIVE THE ORDER AN ACCEPTED 6X9= # RESPONSE 6XNW # (CANCEL AND CLOSE ORDERS ARE ALWAYS ACCEPTED AS VIRTUAL 7900 WMC 6Y8G # TRANSFERS ARE NEVER MARKED ACTIVE (IN TRANSMISSION)) 6YN6 # ROUTINE SHOULD NOT COORDINATE BEFORE END 6^7Q JCBB ,VCANCELTRAN [TRANSFER STORED : CANCEL IT 6^MB BRN VCLORCCREP [NO TRANSFER STORED 7272 VCANCELTRAN 72LL CALL 7 STRANCTDOWN [DECREMENT COUNT OF STORED TRANSFERS 736= CCBB 2 [UNSET TRANSFER STORED FLAG 73KW LDCT 6 PNI [SET REPLY NOT IMPLEMENTED 745G JALLOC ,VZ1REPLYNI [V7900 IS MOPPED ON: LINK ESTABLISHED 74K6 LDCT 6 PNIXNE [SET REPLY NOT IMPLEMENTED,NOT ESTAB 754Q VZ1REPLYNI 75JB CALL 7 SETREPLYWD 7642 VCLORCCREP 76HL CALL 7 SETACCEPTED 773= # RELEASE COMMS CHANNEL (WMC LINK) IF CLOSE MODE 77GW # RESTART PROGRAM IF CANCEL MODE 782G SBN 6 #1000 [MODE VALUE IS STILL IN X6 78G6 BZE 6 VRELEASCHAN [CLOSE MODE 78^Q CALL 7 SKICKNWAIT [**** 79FB VRELEASCHAN 79^2 RELOFP HLSPTYPE(2) [**** 7=DL # 7=Y= # WMC TRANSFER MODES 7?CW VMODEO21 [DOUBLE-LENGTH WRITE 7?XG VMODEO2021 [CONDITIONAL DOUBLE-LENGTH WRITE 7#C6 # CHECK THE 6 WORD CONTROL AREA LIES WITHIN RESERVATIONS 7#WQ LDN 5 6 [COUNT OF CA WORDS TO BE CHECKED 7*BB CALL 7 SCHECKCA 7*W2 VMODE0 [READ 7B*L VMODE1 [WRITE 7BT= VMODEO2000 [CONDITIONAL READ 7C#W VMODEO2001 [CONDITIONAL WRITE 7CSG # CHECK A TRANSFER IS NOT ALREADY STORED 7D#6 JCBB ,VZ1STORED [TRANSFER STORED 7DRQ # CHECK THE LINK IS OPENED AND THE DIRECTION OF TRANSFER IS VALID 7F?B # MODE VALUE IS IN X6 WITH B23 = 1 FOR WRITE & 0 FOR READ TRANSFER 7FR2 LDX 0 BFSTATE(2) [LINK DIRECTION,B6 = 1 FOR WRITE LINK 7G=L SLC 0 7 [B6 -> B23 7GQ= ERX 0 6 [MATCH WITH TRANSFER DIRECTION 7H9W ANDN 0 1 [ONLY INTERESTED IN B23 7HPG BNZ 0 XILLMODE [LINK AND TRANSFER DIRECTION DISAGREE 7J96 # COPY THE TRANSFER MODE TO AWORK2 7JNQ # SET X6 -VE IF THE TRANSFER IS A DOUBLE-LENGTH WRITE 7K8B STO 6 AWORK2(2) 7KN2 SRC 6 5 [MODE.B19 -> B0 7L7L # MOVE THE CONTROL AREA TO ACOMMUNE1-6 IN THE OLPA 7LM= # FOR K5VIPBPERI TO IMPLEMENT THE TRANSFER . 7M6W # THE TYPE/MODE AND REPLY WORDS ARE INCLUDED AS A DIAGNOSTIC AID 7MLG # (EVENT4 (TYPE/MODE) IS OVERWRITTEN IF AN ORDER IS ATTEMPTED 7N66 # WHILE A TRANSFER IS STORED ) . 7NKQ STOZ ACOMMUNE5(2) [INITIALISE SIZE OF SECOND DATA AREA 7P5B STOZ ACOMMUNE6(2) [INITIALISE ADDR OF SECOND DATA AREA 7PK2 LDN 0 4 [COUNT OF WORDS TO BE MOVED 7Q4L BPZ 6 VSTORECA [NOT A DOUBLE-LENGTH WRITE (#21) 7QJ= ADN 0 2 [DOUBLE-LENGTH WRITE = 6 WORD CA 7R3W VSTORECA 7RHG LDX 4 EVENT2(2) [-> CONTROL AREA 7S36 LDN 5 ACOMMUNE1(2) [-> OLPA'S ACOMMUNE1 7SGQ CALL 7 SFOUTMOVE 7T2B # STORE THE ADDRESS OF THE REPLY WORD IN ACOMMUNE2 INSTEAD OF THE 7TG2 # REPLY WORD . THE ADDRESS IS RELATIVE TO PROGRAM'S DATUM 7T^L # K5VIPBPERI WILL RECORD ITS REPLY IN ACOMMUNE2 (REPLY WORD COPY) 7WF= LDX 0 EVENT2(2) 7WYW ADN 0 1 [-> REPLY/RESPONSE WORD 7XDG STO 0 ACOMMUNE2(2) 7XY6 # CHECK THAT THE LENGTH OF THE TRANSFER IS IN THE PERMITTED RANGE 7YCQ # IE WMC READ LENGTH = BUFFER SIZE ; WMC WRITE LENGTH = 3 TO BUFFER 7YXB # SIZE (FOR DOUBLE-LENGTH WRITES THE MINIMUM VALUE OF EITHER 7^C2 # LENGTH IS 1 AND FOR BOTH IS 3) 7^WL LDX 0 ACOMMUNE3(2) [LENGTH OF TRANSFER 82B= LDN 5 1 82TW ANDX 5 AWORK2(2) [MODE 83*G BNZ 5 VCHKWRITSIZ [WRITE TYPE TRANSFER (MODE.B23 = 1) 83*^ ... SMO CPPTR(2) 83BD ... LDX 4 JK52H 83BX ... BNZ 4 VCHREADEQ [J IF READ INITIALISE ALREADY 83CB ... SBN 0 4 83CT ... BNG 0 XILLCOUNT [J IF TOO SMALL FOR INITIALISE 83D# ... LDX 3 CPPTR(3) 83DR ...STOPWRITES 83F= ... 83FP ...[ NOW GET RID OF ANY WRITES, AS THEY MUST HAVE BEEN ISSUED BEFORE 83G8 ...[ THE PROG REALISED WE WERE MOPPED OFF 83GM ...[ 83H6 ... CALL 7 SNEXTOLPA 83HK ... BRN NOWRITES 83J4 ... JCBB 3,YSTORED 83JH ... BRN STOPWRITES [J IF NO TRANSFER 83K2 ...YSTORED 83KF ... LDX 0 BFSTATE(3) 83KY ... SLC 0 6 83LC ... BPZ 0 STOPWRITES [J IF NOT WRITE 83LW ... LDCT 6 PTOXNIXNE 83M* ... CALL 7 SETREPLYWD [POINT OUT WE HAVE MOPPED BY... 83MS ...[ SENDING NOT ESTAB. REPLY 83N? ... CALL 7 STRANCTDOWN 83NQ ... CCBB 3 83P9 ... CALL 7 STICKLE [AND WAKE PROGRAM MEMBER 83PN ... BRN STOPWRITES [SEE IF ANY MORE WRITES 83Q7 ...NOWRITES 83QL ... LDX 3 2 [RESET ACCS 83R5 ... LDX 6 AWORK2(2) 83RJ ... SRC 6 5 83S3 ... BRN VCHKTRANDA 83SG ...VCHREADEQ 83T6 BXU 0 PMBSBUFFSIZ(1),XILLCOUNT [LENGTH OF READ TRANSFER NOT 84#Q [EQUAL TO BUFFER SIZE 84SB BRN VCHKTRANDA 85#2 VCHKWRITSIZ 85RL BNG 6 V1STLENGTH [DOUBLE-LENGTH WRITE 86?= BXL 0 PMINLENGTH(1),XILLCOUNT [LESS THAN MINIMUM 86QW BRN VMAXLENGTH 87=G V1STLENGTH 87Q6 BXL 0 PMINLENGTHS(1),XILLCOUNT [LESS THAN MINIMUM 889Q LDX 5 ACOMMUNE5(2) [SECOND LENGTH 88PB BXL 5 PMINLENGTHS(1),XILLCOUNT [LESS THAN MINIMUM 8992 ADX 0 5 [COMBINE FIRST AND SECOND LENGTHS 89NL BXL 0 PMINLENGTH(1),XILLCOUNT [LESS THAN TOTAL MINIMUM 8=8= VMAXLENGTH 8=MW BXGE 0 PMAXLENGTH(1),XILLCOUNT [GREATER THAN MAXIMUM LENGTH 8?7G VCHKTRANDA 8?M6 # CHECK THE DATA AREA(S) LIES WITHIN RESERVATIONS 8#6Q LDX 4 ACOMMUNE4(2) [-> DATA AREA 8#LB LDX 5 ACOMMUNE3(2) [TRANSFER LENGTH 8*62 CALL 7 SCHECKDA 8*KL BPZ 6 VENDOFDACHK [NOT A DOUBLE-LENGTH WRITE (#21) 8B5= LDX 4 ACOMMUNE6(2) [-> SECOND DATA AREA 8BJW LDX 5 ACOMMUNE5(2) [TRANSFER LENGTH 8C4G CALL 7 SCHECKDA 8CJ6 VENDOFDACHK 8D3Q # IF TRANSFER IS CONDITIONAL AND THE LINK IS NOT ESTABLISHED(IE THE 8DHB # VIRTUAL 7900 IS NOT MOPPED ON), SET PROGRAM'S REPLY WORD TO 8F32 # TIME OUT,NOT IMPLEMENTED,NOT ESTABLISHED 8FGL # OTHERWISE EVENTUALLY GIVE THE PROGRAM AN ACCEPTED RESPONSE 8G2= # (A REJECTED RESPONSE TO A CONDITIONAL TRANSFER IS NEVER GIVEN 8GFW # AS IT IS A HIGH PROBABILITY THE TRANSFER CAN TAKE PLACE 8G^G # IMMEDIATELY) 8HF6 LDN 0 #2000 8HYQ ANDX 0 AWORK2(2) [MODE 8JDB BZE 0 VENDOFCOND [NOT A CONDITIONAL MODE TRANSFER 8JY2 JALLOC ,VENDOFCOND [V7900 IS MOPPED ON:LINK ESTABLISHED 8KCL LDCT 6 PTOXNIXNE [SET REPLY TIME OUT,NOT IMP,NOT ESTAB 8KX= [AND RESTART PROGRAM 8LBW CALL 7 SETREPLYWD 8LWG CALL 7 SKICKNWAIT [**** 8MB6 VENDOFCOND 8MTQ # 8N*B LAMOP ,2 [SET X2 -> THE MBS INPUT ACTIVITY 8NT2 LDN 5 1 [SET X5 = 1 FOR TRANSFER CT UPDATE 8P#L LDN 0 1 8PS= ANDX 0 AWORK2(3) [MODE (IN OLPA) 8Q?W BNZ 0 VWRITEONLY [WRITE TYPE TRANSFER (MODE.B23 = 1) 8QRG VREADONLY 8R?6 LDX 2 IPBRING(2) [SET X2 -> THE MBS OUTPUT ACTIVITY 8RQQ [OR IF NOT SET UP, THE MBS INPUT ACT 8S=B SBN 2 IPBRING 8SQ2 # INCREMENT COUNT OF STORED READ TRANSFERS FOR K5VIPBPERI 8T9L SMO CPPTR(3) 8TP= ADS 5 AVCREADS 8W8W # IF THIS IS THE PROGRAM'S FIRST READ,MARK THE VIRTUAL 7900 OPERABLE 8WNG # "WAKE" THE MBS OUTPUT ACTIVITY IF ASLEEP 8X86 JENG CPPTR(3),VAWAKE [ALREADY MARKED OPERABLE 8XMQ SMO CPPTR(3) [MARK THE VIRTUAL 7900 OPERABLE 8Y7B ORS 5 JK52E 8YM2 BRN VAWAKE 8^6L VWRITEONLY 8^L= # INCREMENT COUNT OF STORED WRITE TRANSFERS FOR K5VIPBPERI 925W SMO CPPTR(3) 92KG ADS 5 AVCWRITES 9356 # "WAKE" THE MBS INPUT ACTIVITY IF ASLEEP 93JQ VAWAKE 944B # SKIP WAKE UP OF THE MBS ACTIVITY IF THE V7900 IS MOPPED OFF OR 94J2 # INOPERABLE OR THE ACTIVITY IS NOT MARKED ASLEEP 953L JALLOC ,VCHKIFOPER [V7900 IS MOPPED ON 95H= BRN VSETSTORED [V7900 IS MOPPED OFF :SKIP WAKE UP 962W VCHKIFOPER 96GG JENG ,VCHKIFAWAKE [V7900 IS OPERABLE 9726 BRN VSETSTORED [V7900 IS INOPERABLE : SKIP WAKE UP 97FQ [IE PROG'S FIRST READ NOT ISSUED YET 97^B VCHKIFAWAKE 98F2 LDCT 0 #100 [IPBSW.B2 SET IF THE ACT IS ASLEEP 98YL ANDX 0 IPBSW(2) 99D= BZE 0 VSETSTORED [ACTIVITY NOT ASLEEP 99XW ERS 0 IPBSW(2) [UNSET ASLEEP FLAG AND 9=CG FPUT [PUT ON THE ACTIVITY LIST 9=X6 # 9?BQ VSETSTORED 9?WB LDX 2 FX2 9#B2 # DUMP CURRENT VALUE OF CLEANCT IN AWORK1 9#TL # FOR K4VIPBPERI (TIME-OUT AGENT) 9**= LDX 0 CLEANCT 9*SW STO 0 AWORK1(2) 9B#G # SET TRANSFER STORED FLAG 9BS6 SCBB 2 9C?Q # GIVE PROGRAM AN ACCEPTED RESPONSE AND RESTART IT 9CRB CALL 7 SETACCEPTED 9D?2 CALL 7 SKICKNWAIT [**** 9DQL # 9F== VZ1STORED 9FPW # GIVE PROGRAM A REJECTED RESPONSE AND RESTART IT 9G9G CALL 7 SETREJECTED 9GP6 CALL 7 SKICKNWAIT [**** 9H8Q #PAGE 9HNB # 9J82 # K2VIPBPERI IS ENTERED BY A DOWN FROM RELPER TO RELEASE A VIRTUAL 7900 9JML # COMMS CHANNEL . 9K7= # 9KLW Z2VIPBPERI 9L6G # 9LL6 # ON ENTRY X3 -> THE LOCKED AOLPT TO BE RELEASED 9M5Q # IF A TRANSFER IS STORED 9MKB # THEN IF LINK IS ESTABLISHED (IE THE V7900 IS MOPPED ON) 9N52 # THEN SET PROGRAM'S REPLY WORD TO NOT IMPLEMENTED 9NJL # ELSE SET PROGRAM'S REPLY WORD TO NOT IMPLEMENTED,NOT ESTAB. 9P4= TRACE 3,V79OLREL [ADDRESS OF OLPA BEING RELEASED 9PHW JCBB 3,VZ2STORED [TRANSFER STORED 9Q3G BRN VMURDEROLPA [TRANSFER NOT STORED 9QH6 VZ2STORED 9R2Q CALL 7 STRANCTDOWN [DECREMENT COUNT OF STORED TRANSFERS 9RGB LDCT 6 PNI [SET REPLY NOT IMPLEMENTED 9S22 JALLOC CPPTR(3),VZ2LINKESTB[V7900 IS MOPPED ON:LINK ESTABLISHED 9SFL LDCT 6 PNIXNE [SET REPLY NOT IMPLEMENTED,NOT ESTAB 9S^= VZ2LINKESTB 9TDW CALL 7 SETREPLYWD 9TYG VMURDEROLPA 9WD6 # REMOVE AOLPT FROM THE VIRTUAL 7900 OLPA RING AND MURDER IT 9WXQ DERINGD BWORKRING(3) 9XCB LDX 5 CPPTR(3) [SAVE PTR TO OLPA'S V7900 DEV LIST 9XX2 MURDER 3 9YBL LDX 3 5 [SET X3 -> OLPA'S V7900 DEV LIST 9YW= # IF NO WMC LINKS OPEN FOR READING, MARK THE VIRTUAL 7900 INOPERABLE 9^*W # IN THE DEVICE LIST AND IN THE MBS INPUT ACTIVITY 9^TG VZ2LINKSCHK =2*6 CALL 7 SNEXTOLPA [SETS X3 -> (NEXT) OLPA FOUND =2SQ BRN VZ2MARKINOP [NO READ LINKS OPEN : MARK V7900 INOP =3#B LDX 0 BFSTATE(3) =3S2 SLC 0 7 =4?L BPZ 0 VZ2LINKSCHK [THIS LINK NOT OPENED FOR READING(B7) =4R= BRN VRETURNUP [WMC READ LINKS STILL OPEN =5=W VZ2MARKINOP =5QG [X3 NOW -> V7900 DEV LIST OF OLPA'S =62# ... JDISENG 3,VRETURNUP =6=6 LDN 0 1 [NO READ LINKS OPEN : MARK V7900 INOP =6PQ ORS 0 JK52E(3) =79B ERS 0 JK52E(3) =7P2 JALLOC 3,VZ2TELLACT [V7900 IS MOPPED ON =88L BRN VRETURNUP [V7900 IS MOPPED OFF : NO NEED TO =8N= [TELL MBS INPUT ACT OF INOPERABILITY =97W VZ2TELLACT =9CN ...[ [J IF ALREADY INOP =9MG LAMOP 3,3 [SET X3 -> THE MBS INPUT ACTIVITY ==76 LDCT 0 #400 [MARK THE MBS INPUT ACTIVITY ==LQ ORS 0 IPBSW(3) [INOPERABLE AND AWAKE IF NECESSARY =?6B LDCT 0 #100 =?L2 ANDX 0 IPBSW(3) =#5L BZE 0 VRETURNUP [ACTIVITY NOT ASLEEP =#K= ERS 0 IPBSW(3) [UNSET ASLEEP FLAG AND =*4W LDX 2 3 [PUT ON THE ACTIVITY LIST =*JG FPUT =B46 BRN VRETURNUP =BHQ # =C3B #PAGE =CH2 # =D2L # K3VIPBPERI IS ENTERED BY K1VIPBPERI TO REPORT ILLEGAL VIRTUAL 7900 =DG= # WMC ORDERS . =D^W # IT RUNS IN THE PROCESS CONTROL ACTIVITY (APET) . =FFG # =F^6 Z3VIPBPERI =GDQ # UNPLUG THE PROGRAM AND REPORT THE ILLEGAL REFERRED TO BY THE =GYB # MONITORING FILE MESSAGE IDENTIFIER HELD IN X6 =HD2 UNPLUG [FROM EXEC AND PUT THE PROGRAM IN THE =HXL [STOP STATE =JC= ILLEGALX 6 [GENERATE A FAILED PROGRAM EVENT =JWW [**** =KBG #PAGE =KW6 # =L*Q # K4VIPBPERI IS ENTERED BY AN ACROSS FROM CHARGESC EVERY =LTB # FONINT (4) SECONDS TO TIME OUT VIRTUAL 7900 WMC =M*2 # TRANSFER ORDERS WHICH HAVE BEEN STORED FOR 3 FONINTP (12) SECONDS . =MSL # IT RUNS IN THE BLANKET ACTIVITY . =N#= # =NRW Z4VIPBPERI =P?G # RE-CHECK THAT A VIRTUAL 7900 IS PRESENT =PR6 HUNTMISB 3,APERI,AV7900 =Q=Q BNG 3 VTOCHARGESC [NO VIRTUAL 7900 DEVICE LIST PRESENT =QQB # SEARCH FOR VIRTUAL 7900 AOLPT WITH A STORED TRANSFER =R=2 VNEXTOLPA =RPL CALL 7 SNEXTOLPA =S9= ... BRN VTONEXTDV [END OF AVOLPARING =SNW JCBB 3,VTESTTIMEUP [CHANNEL BUSY : TRANSFER IS STORED =T8G BRN VNEXTOLPA [LOOK AT NEXT OLPA =TN6 VTESTTIMEUP =W7Q # CHECK IF TIME UP, IE CLEANCT-AWORK1 =/> PV7900TIMEO =WMB # AWORK1 OF THE OLPA HOLDS THE CLEANCT TIME WHEN THE TRANSFER WAS =X72 # STORED =XLL LDX 0 CLEANCT =Y6= SBX 0 AWORK1(3) =YKW BXL 0 PV7900TIMEO(1),VNEXTOLPA [TIME NOT UP =^5G # TIME UP : TIME OUT TRANSFER =^K6 TRACE 3,V79OLTO [ADDRESS OF OLPA BEING TIMED OUT ?24Q TRACE 0,V79TIMUP [THE TIME UP EXCESS MARGIN ?2JB CALL 7 STRANCTDOWN [DECREMENT COUNT OF STORED TRANSFER ?342 # IF LINK IS ESTABLISHED (IE THE V7900 IS MOPPED ON) ?3HL # THEN SET PROGRAM'S REPLY WORD TO TIME OUT,NOT IMPLEMENTED ?43= # ELSE SET PROGRAM'S REPLY WORD TO TIME OUT,NOT IMPLEMENTED,NOT ESTB ?4GW LDCT 6 PTOXNI [SET REPLY TIME OUT,NOT IMPLEMENTED ?52G JALLOC CPPTR(3),VZ4LINKESTB[V7900 IS MOPPED ON:LINK ESTABLISHED ?5G6 LDCT 6 PTOXNIXNE [SET REPLY TIME OUT,NOT IMP,NOT EST ?5^Q VZ4LINKESTB ?6FB CALL 7 SETREPLYWD ?6^2 # UNSET TRANSFER STORED FLAG (CHANNEL BUSY BIT) AND REACTIVATE THE ?7DL # PROGRAM MEMBER ?7Y= CCBB 3 ?8CW CALL 7 STICKLE ?8XG # ?9C6 BRN VNEXTOLPA [LOOK AT NEXT OLPA ?9WQ # ?9Y7 ...VTONEXTDV [LOOK FOR NEXT V7900 ?9^J ... LDN 0 AV7900+APERI ?=2^ ... SLL 0 12 ?=4B ...ZMHM2B3 ?=5R ... TXU 3 BMISC ?=78 ... BCC VTOCHARGESC [J IF END OF CHAIN ?=8K ... LDX 3 BPTR(3) ?==2 ... TXU 0 ATYPE(3) ?=?C ... BCC VNEXTOLPA [J IF FOUND A V7900 ?=#S ... BRN ZMHM2B3 [TRY AGAIN ?=BB VTOCHARGESC ?=W2 ACROSS CHARGESC,14 [EXIT BACK TO CHARGESC ??*L [>>>> ??T= #PAGE ?##W # ?#SG # K5VIPBPERI IMPLEMENTS VIRTUAL 7900 WMC TRANSFER ORDERS . ?*#6 # IT RUNS IN 7900 INPUT AND OUTPUT ACTIVITIES (AMOP/IPBIN & AMOP/IPBOUT) ?*RQ # ?B?B Z5VIPBPERI ?BR2 # ROUTINE SHOULD NOT COORDINATE BEFORE END ?C=L # THIS OBVIATES THE NEED FOR A "TRANSFER ACTIVE" FLAG ?CQ= # NOTE A LONG BLOCK CONDITION CAN NEVER OCCUR ?D9W LDX 3 CPPTR(2) [SET X3 -> VIRTUAL 7900 DEVICE LIST ?DPG # IF WRITING TO THE PROGRAM, SET X6 = 0 ?F96 # IF READING FROM THE PROGRAM, SET X6 NON-ZERO ?FNQ LDX 6 ATYPE(2) ?G8B SRL 6 12 ?GN2 SBN 6 AMOP+IPBOUT ?H7L # RE-CHECK FOR THE STORED TRANSFER (MAY HAVE BEEN TIMED OUT, ?HM= # CANCELLED, OR CHANNEL RELEASED) ?J6W BZE 6 VWRITTOPROG [WRITING TO PROGRAM ?JLG # READING FROM PROGRAM ?K66 TRACE 2,VMBINACT [AMOP/IPBIN IMPLEMENTING WMC XFER ?KKQ LDX 0 AVCWRITES(3) ?L5B BZE 0 VRETURNUP [NO WMC WRITE TRANSFER STORED ?LK2 # DON'T READ FROM THE PROGRAM UNTIL MBS HAS SENT THE INITIALISE ?M4L # SUPERVISORY SEGMENT (MBS'S FIRST WRITE) ?MJ= LDX 0 JK52H(3) [COUNT OF TOTAL GEORGE PERI'S ?N3W [COUNT IS CLEARED BY MOP OFF ?NHG BZE 0 VRETURNUP ['INITIALISE' NOT YET SENT TO PROG ?P36 BRN VFINDOLPA ?PGQ VWRITTOPROG ?Q2B TRACE 2,VMBOPACT [AMOP/IPBOUT IMPLEMENTING WMC XFER ?QG2 LDX 0 AVCREADS(3) ?Q^L BZE 0 VRETURNUP [NO WMC READ TRANSFER STORED ?RF= # FIND THE OLPA WITH THE STORED TRANSFER ?RYW VFINDOLPA ?SDG CALL 7 SNEXTOLPA [SETS X3 -> (NEXT) OLPA FOUND ?SY6 BRN (GEOERR) [OLPA NOT FOUND ?TCQ JCBB 3,VTESTOLPAOK [CHANNEL BUSY : TRANSFER STORED ?TXB BRN VFINDOLPA ?WC2 VTESTOLPAOK ?WWL # CHECK THE STORED TRANSFER IS SUITABLE FOR THIS ACTIVITY ?XB= LDX 0 BFSTATE(3) [LINK DIRECTION,B6 = 1 FOR WRITE LINK ?XTW SLC 0 6 ?Y*G BZE 6 VTRANTOPROG [WRITING TO PROGRAM ?YT6 BPZ 0 VFINDOLPA [OLPA IS NOT WRITING : TRY NEXT ONE ?^#Q # ?^SB # TRANSFER FROM PROGRAM TO MBS ; CURRENT ACTIVITY IS AMOP/IPBIN AND #2#2 # OLPA IS WRITING #2RL # MOVE THE PROGRAM'S "IPB BLOCK" TO MBS'S INPUT BUFFER #3?= MHUNTW 2,AMXOR,INBF #3QW LDX 0 ACOMMUNE3(3) [COUNT OF WORDS TO BE MOVED #4=G LDX 4 ACOMMUNE4(3) [-> PROGRAM'S IPB BLOCK #4Q6 LDN 5 A1(2) [-> MBS'S INPUT BUFFER #59Q CALL 7 SFOUTMOVE [PROGRAM -> MBS #5PB LDX 0 ACOMMUNE5(3) [SIZE OF SECOND PART OF THE DATA AREA #692 BZE 0 VENDWRITE [NO SECOND PART #6NL ADX 5 ACOMMUNE3(3) [UPDATE MBS'S INPUT BUFFER POINTER #78= LDX 4 ACOMMUNE6(3) [-> SECOND PART OF PROGRAM'S IPB BLK #7MW CALL 7 SFOUTMOVE #87G VENDWRITE #8M6 # SIMULATE A SUCCESSFUL 7900 READ TRANSFER REPLY FOR #96Q # K1IPBIN #9LB # CONVERT COUNT OF WORDS TRANSFERRED TO THE MBS'S INPUT #=62 # BUFFER INTO THE REMAINDER COUNT #=KL LDCT 0 #010 #?5= ORX 0 ALOGLEN(2) #?JW SBX 0 ACOMMUNE3(3) ##4G SBX 0 ACOMMUNE5(3) ##J6 LDX 2 FX2 #*3Q STO 0 CPRW1(2) #*HB # DECREMENT COUNT OF STORED WRITE TRANSFERS #B32 CALL 7 SWRITCTDOWN #BGL # SET PROGRAM'S REPLY WORD TO TRANSFER IMPLEMENTED #C2= # WITH NO REMAINDER COUNT #CFW LDCT 6 PTRANSFEROK #C^G CALL 7 SETREPLYWD #DF6 STO 6 ACOMMUNE2(3) [COPY REPLY WORD TO OLPA'S ACOMMUNE2 #DYQ [FOR DIAGNOSTIC PURPOSES #FDB BRN VENDOFTRAN #FY2 VTRANTOPROG #GCL BNG 0 VFINDOLPA [OLPA IS NOT READING : TRY NEXT ONE #GX= # #HBW # TRANSFER FROM MBS TO PROGRAM ; CURRENT ACTIVITY IS AMOP/IPBOUT AND #HWG # OLPA IS READING #JB6 # MOVE THE FIRST 9 WORDS OF THE CURRENT AMXOR/IOUT BLOCK #JTQ # TO AMOP/IPBOUT ACT'S ACOMMUNE WORDS FOR DIAGNOSTIC #K*B # PURPOSES #KT2 MHUNTW 2,AMXOR,IOUT [CONTAINS MBS'S "IPB BLOCK" #L#L LDN 4 IMOPTY(2) #LS= SMO FX2 #M?W LDN 5 ACOMMUNE1 #MRG MOVE 4 9 #N?6 # IF MBS'S "IPB BLOCK" IS A DATA SEGMENT, COPY THE END OF #NQQ # RESTART SECTION BIT IN THE HEADER (B6) TO THE END OF #P=B # NPU BIT(B1) AS CM TREATS B1 AS END OF RESTART SECTION BIT #PQ2 # (LEAVE B6 UNCHANGED FOR TESTING ; CM IGNORES B6) #Q9L # CM TREATS EACH DATA SEGMENT AS A COMPLETE MESSAGE #QP= # NOTE BATCHED DATA SEGMENTS ARE NOT CATERED FOR #R8W LDCH 0 IPBIDE(2) #RNG BNZ 0 VMOVETOPROG [NOT A DATA SEGMENT #S86 LDCT 0 #200 [CLEAR B1 #SMQ ORS 0 IPBIDE+1(2) #T7B ERS 0 IPBIDE+1(2) #TM2 LDCT 0 4 [ISOLATE B6 #W6L ANDX 0 IPBIDE+1(2) #WL= SLL 0 5 [B6 -> B1 #X5W ORS 0 IPBIDE+1(2) #XKG VMOVETOPROG #Y56 # MOVE MBS'S "IPB BLOCK" TO THE PROGRAM'S DATA AREA #YJQ LDX 0 ALOGLEN(2) #^4B SBN 0 IPBIDE-A1-1 [SIZE OF MBS'S "IPB BLOCK" #^J2 STO 0 GEN0 [REMEMBER TRANSFER SIZE FOR REPLY *23L LDN 4 IBSW(2) [-> MBS'S "IPB BLOCK" *2H= LDX 5 ACOMMUNE4(3) [-> PROGRAM'S DATA AREA *32W CALL 7 SFINMOVE [MBS -> PROGRAM *3GG LDX 2 FX2 *426 # DECREMENT COUNT OF STORED READ TRANSFERS *4FQ CALL 7 SREADCTDOWN *4^B # SET PROGRAM'S REPLY WORD TO TRANSFER IMPLEMENTED *5F2 # WITH REMAINDER COUNT *5YL LDCT 6 PTRANSFEROK *6D= LDX 0 ACOMMUNE3(3) [CALCULATE REMAINDER COUNT *6XW SBX 0 GEN0 [= REMAINDER COUNT *7CG ORS 0 6 *7X6 CALL 7 SETREPLYWD *8BQ STO 6 ACOMMUNE2(3) [COPY REPLY WORD TO OLPA'S ACOMMUNE2 *8WB [FOR DIAGNOSTIC PURPOSES *9B2 # *9TL VENDOFTRAN *=*= # INCREMENT DEVICE LIST'S COUNT OF GEORGE TRANSFERS *=SW LDN 0 1 *?#G SMO CPPTR(2) *?S6 ADS 0 JK52H *#?Q # UNSET TRANSFER STORED FLAG (CHANNEL BUSY BIT) AND REACTIVATE THE *#RB # PROGRAM MEMBER **?2 CCBB 3 **QL CALL 7 STICKLE *B== # RETURN UP +1 WHICH INDICATES THE TRANSFER WAS IMPLEMENTED *BPW UPPLUS 1 [^^^^ *C9G # *CP6 VRETURNUP [FOR K2/K5 VIPBPERI *D8Q UP [^^^^ *DNB # *F82 [ *FML [ EXCEPTION PATHS *G7= [ *GLW PILLMODE +JYMODE [ILLEGAL:MODE IN ERROR *H6G XILLMODE *HL6 LDX 6 PILLMODE(1) *J5Q BRN XILLWMCPERI *JKB PILLBLKADD +JYNOBUF [ILLEGAL:BUFFER OUT OF RESERVATIONS *K52 XILLBLKADD *KJL LDX 6 PILLBLKADD(1) *L4= BRN XILLWMCPERI *LHW PILLCOUNT +JYCOUNT [ILLEGAL:COUNT OUT OF RANGE *M3G XILLCOUNT *MH6 LDX 6 PILLCOUNT(1) *N2Q BRN XILLWMCPERI *NGB PILLADDR +JYNOCA [ILLEGAL:CONTROL AREA OUT OF *P22 [RESERVATIONS *PFL XILLADDR *P^= LDX 6 PILLADDR(1) *QDW XILLWMCPERI *QYG TOPCA PK3VIPBPERI(1) [FPUT APET TO REPORT THE ILLEGAL *RD6 COOR1 [WAIT FOR NEXT WMC PERI *RXQ BRN Z1VIPBPERI *SCB #END ^^^^ ...123522240004