BSQ867
(George Source)
Macros used: ADJUSTLK, BBS, BXE, BXGE, BXL, BXU, CHAIN, CLINK, COOR1, DATUMADD, DATUMBLK, DCA, DERING, DISENGPER, ENRING, FIXTRA, FON, FPUT, FPUTX, FREECORE, GEOERR, GETEMSCR, GETQUE, GPERI, HUNT2, HUNTW, JBUSY, JENVNOT, LABFIX, NAME, NAMEX, ONQUE, PULLINK, PUSHLINK, REQUE, SQOSS2, SWAP, TRACE, TRANSFIX
- BSQ867.txt
22FL #LIS K0BSQ 22^= #SEG BSQ60 [BOB NICHOLSON 23DW # 23YG # 24D6 # THIS SEGMENT IS CONCERNED WITH QUEUING TRANSFER REQUESTS TO 24XQ # THE APPROPRIATE BACKING STORE ACTIVITY (BSA).THE INITALLY ENTRY 25CB # IS AT P4 WHICH MERELY DUMPS THE ACCUMULATORS AND PRESERVES 25X2 # POSSIBLE PARAMETERS IN EX4,EX5,EX6 AND EX7.THE MAIN ENTRY IS AT P1 26BL # THE CHAPTER CHANGE ENTRY IS AT BCHR 26W= # 27*W # 27TG FIXTRA K1BSQ 28*6 LABFIX AP4 28SQ P4 STO 2 BSP13 [PRESERVE X2 29#B LDX 2 FX2 29S2 STO 3 ACC3(2) [DUMP ACCS 2=?L STO 4 ACC4(2) 2=R= STO 5 ACC5(2) 2?=W STO 6 ACC6(2) 2?QG STO 7 ACC7(2) 2#=6 STO 4 EX4 [NAD PRESERVE POSSIBLE PARAMETER 2#PQ STO 5 EX5 2*9B STO 6 EX6 2*P2 STO 7 EX7 2B8L LDX 2 BSP13 [RESTORE X2 2BN= EXIT 0 0 2C7W # 2CMG LABFIX AP1 2D76 P1 LDX 2 FX2 2DLQ STOZ ACOMMUNE7(2) [NO ADDITIVE MODE SPECIFIED 2F6B LABFIX AP2 2FL2 P2 SQOSS2 [DUMP LINK 2G5L STO 4 BA1(2) [AND BA AREA 2GK= STO 5 BA2(2) 2H4W STO 6 BA3(2) 2HJG STO 7 BA4(2) 2J46 LDX 7 BA1(2) 2JHQ SLC 7 7 2K3B ANDN 7 #17 2KH2 ORS 7 ACOMMUNE7(2) [MODE OF TRANSFER 2L2L LDN 4 0 2LG= SLL 45 16 [X4=LENGTH OF TRANSFER 2L^W SRL 5 16 [X5=LOGICAL FILE NUMBER OR BSUN 2MFG LDX 0 BA1(2) 2M^6 ANDN 0 BOBJ+BSET 2NDQ BNZ 0 TB3 [J IF OBJECT PROGRAM OR SET CORE 2NYB BZE 7 T13A [J IF READ TRANSFER 2PD2 LDX 1 FPTR(2) 2PXL NAME 1,BSTB,BWRITE 2QC= BNZ 5 TB3 [J IF BS HOME SPECIFIED IN PARAMETERS 2QWW LDX 5 BACK1(1) [LFN FROM WRITE BLOCK 2RBG ORS 5 BA2(2) [AND TO X5 2RW6 LDX 6 BACK2(1) [BLOCK NO. 2S*Q STO 6 BA3(2) 2STB BRN TB3 2T*2 # 2TSL # RE-ENTER HERE IF THE GETCORE FOR THE READ BLOCK FAILED 2W#= # AND TRY AGAIN TO GET SOME CORE 2WRW # 2X?G LABFIX BP2D 2XR6 LDX 4 BA2(2) 2Y=Q SRL 4 8 [RESET LENGTH OF BLOCK 2YQB BRN T13Z [AND TRY TO GET CORE AGAIN 2^=2 # 2^PL T13A LDX 0 BA1(2) 329= ANDN 0 BUSE 32NW BNZ 0 T10 [J IF BUSE SET 338G T13 PUSHLINK BSEN1 [CHANGE LINK IN CASE GETCORE FAILS 33N6 T13Z GETEMSCR 4 [GET READ BLOCK 347Q PULLINK [PUT CORRECT LINK BACK IN ALINK2 34MB LDX 4 BA2(2) 3572 SRL 45 8 [X4=LENGTH OF TRANSFER 35LL SRL 5 16 [X5=LFN OR BSUN 366= LDX 6 BA3(2) [X6=BLOCK NO. 36KW BRN T11 375G T10 HUNTW 1,BSTB,BFREEW [SEE IF FREE WRITE BLOCK 37K6 BNG 1 T13 [J IF NOT 384Q LDX 0 ALOGLEN(1) 38JB SBX 0 4 3942 BPZ 0 T14 [J IF THIS BLOCK IS BIG ENOUGH 39HL FREECORE 1 [OTHERWISE FREE IT 3=3= BRN T13 [AND GET A NEW BLOCK 3=GW T14 CHAIN 1,2 [PUT READ BLOCK BEHIND ACTIVITY 3?2G T11 LDX 1 FPTR(2) 3?G6 NAME 1,BSTB,FLOUR 3?^Q STO 5 BACK1(1) [PUT IN RED TAPE 3#FB STO 6 BACK2(1) 3#^2 TB3 LDX 0 BA1(2) 3*DL BPZ 0 T1 [J NOT AUTO 3*Y= BRN T4 [J IF AUTONOMUS TO GET QBLK 3BCW # 3BXG # 3CC6 # RE-ENTER HERE IF THE GETQUE FAILED 3CWQ # 3DBB LABFIX AT4J 3DW2 LDCT 0 2 3F*L ANDX 0 BA1(2) [TEST IF SWAPTRAN 3FT= BZE 0 T4A [J IF NOT TRY GETQUE AGAIN 3G#W PULLINK [PUT PROPER LINK BACK IN ALINK2 3GSG FPUT [AND FPUT-GETQUE FAILED 3H#6 TRANSFIX BRN,FQOB 3HRQ # 3J?B # GETQUE FAILED FOR FILESTORE AUTONOMUS WRITE. 3JR2 # SINCE WAITING FOR CORE MAY RESULT IN READS TO THE SAME BLOCK 3K=L # GETTING ISSUED BEFORE THE WRITE,THE TRANSFER IS MADE NON-AUTONOMUS 3KQ= # (I.E. BOTH MAY BE HELD UP WAITING FOR CORE-READ MAY GET IN ON FON 3L9W # NOTE- THE CODE TO WHICH THIS COMMENT REFERS IS BEING RE-THUNK# 3LPG # 3M96 # TRY TO GET A NEW QBLK IF NO FQBLKS AVAILABLE 3MNQ # 3N8B T4 PUSHLINK BSEN2 [CHANGE LINK IN CASE GETQUE FAILS 3NN2 LDCT 0 2 3P7L ANDX 0 BA1(2) [TEST IF SWAPTRAN 3PM= BZE 0 T4A [AND J IF NOT TO DO NORMAL GETQUE 3Q6W GETQUE SWAP [ELSE DO SPECIAL GETQUE (NO WAITING) 3QLG BRN T2 [BACK TO MAIN PATH 3R66 T4A GETQUE [GET A QBLK 3RKQ T2 PULLINK [PUT CORRECT LINK BACK IN ALINK2 3S5B LDX 3 FPTR(2) [GET POINTER TO QBLK 3SK2 T5 LDCT 0 2 3T4L ANDX 0 BA1(2) [TEST IF SWAPTRAN 3TJ= BZE 0 T4B [AND JUMP IF NOT-NO NEED TO UPDATE LI 3W3W LDN 0 1 3WHG ADJUSTLK 2 [ADD ONE TO LINK 3X36 T4B LDX 0 BSP10 [NAME QBLK 3XGQ NAMEX 3 [ABSTB/BQBLK 3Y2B STOZ BACKCHAN(3) 3YG2 LDN 0 BA1(2) [MOVE DETAILS 3Y^L LDN 1 ATRAN(3) [OF TRANSFER 3^F= MOVE 0 5 [TO QBLK 3^YW LDX 0 ACOMMUNE7(2) [MODE OF TRANSFER 42DG STO 0 BSMODE(3) [..STORE IN BSTB/BQBLK 42Y6 N1 LDX 4 BA2(2) [RESET ACCUMULATORS 43CQ SRL 45 8 [X4=LENGTH 43XB SRL 5 16 [X5=LFN 44C2 LDX 6 BA3(2) [BLOCK NO 44WL T1 LDX 0 BA1(2) 45B= ANDN 0 BONL 45TW BNZ 0 T25 [J IF ONLINE 46*G #SKI K6BSQ>99-99 46T6 ( 47#Q LDX 7 BA1(2) 47SB ANDX 6 BITS22LS [REMOVE CORRUPT BLOCK MARK-IF ANY 48#2 LDX 2 6 [BLOCK NO 48RL LDN 0 BLN [MAKE SURE TRANSFER DOSNT GO BEYOND B 49?= DVS 1 0 49QW ANDN 7 ASWAP 4==G BNZ 7 T15A [J IF SWAP 4=Q6 SBX 0 1 4?9Q SLL 0 GSBSLOG-BLS [MAX LENGTH FOR THIS TRANSFER 4?PB SBX 0 4 4#92 BPZ 0 T15 4#NL GEOERR 0,BSLENGTH [TRANSFER GOES BEYOND BLOCK 4*8= T15A SBN 4 1 4*MW TXL 4 BSSS 4B7G BCS T15B 4BM6 GEOERR 0,BIGSHEET [TRANSFER LONGER THAN A SHEET 4C6Q T15B ADN 4 1 4CLB T15 TXL 5 BLMP [TEST LFN 4D62 BCS T16 4DKL GEOERR 0,FNUM2BIG [FILE NUMBER TOO BIG 4F5= ) 4FJW T16 LDX 1 ALFTP [POINTER TO LF TABLE 4G4G SLL 5 1 4GJ6 SMO 5 4H3Q LDX 7 A1(1) [GET ENTRY FROM LF TABLE 4HHB #SKI K6BSQ>99-99 4J32 ( 4JGL BPZ 7 T17 4K2= GEOERR 0,NOSUCHLF [ILLEGAL LOGICAL FILE NO 4KFW T17 SMO 5 4K^G TXL 6 A1+1(1) 4LF6 BCS T18 4LYQ GEOERR 0,TOO BIG [BLOCK NO TOO BIG 4MDB ) 4MY2 T18 LDX 1 7 4NCL ANDN 1 #7777 [MODIFIER TO FILE DESCRIPTION TABLE 4NX= ADX 1 AFDTP [ADD ON ADDRESS OF FD TABLE 4PBW DATUMBLK 6,1,4 [DATUMISE BLOCK NUMBER 4PWG #SKI K6BSQ>99-99 4QB6 ( 4QTQ BNZ 1 T19 4R*B GEOERR 0,LARGEBLK 4RT2 ) 4S#L T19 LDX 2 FX2 4SS= T19A STO 1 EX5 4T?W LDX 0 GMIN4 4TRG ANDS 0 EX5 [REMEMBER BLOCK NO FOR OPTIMISATION 4W?6 LDX 0 BA1(2) 4WQQ BNG 0 T20 [J IF AUTO 4X=B STO 1 ACOMMUNE9(2) [DATUMISED BLOCK NO TO ACTIVITY 4XQ2 LDX 3 2 [POINTER TO QBLK 4Y9L BRN T21 4YP= T20 STO 1 ADBLKNO(3) [DATUMISED BLOCK NO TO QBLK 4^8W ANDN 0 BONL+ASWAP 4^NG BNZ 0 T21 [DON'T REMOVE FAILURE BIT FOR BONL OR 5286 LDN 0 #1000 52MQ ERS 0 BA1(2) [FAILURE SHOULD NOT UPDATE BA WORDS N 537B T21 SRL 7 12 [BSUN 53M2 ANDN 7 #1777 [BSUN 546L T27 MPY 7 ASBSAB [DETERMINE WHICH BSA 54L= LDX 6 0 [SAVE X0 FOR SEA BREAKS 555W #SKI K6BSQ>199-199 55KG TRACE FX2,CALL ACT 5656 #SKI BSOPT<1$1 56JQ ( 574B NGX 2 0 57J2 ADX 2 BBAC 583L ADX 2 ASBSAB 58H= TRANSFIX CALL 7 ,BP8 592W LDX 2 BSBKCHAN(2) 59GG LDN 3 CHAINADD(3) 5=26 ONQUE 3,2 5=FQ TRANSFIX BRN,FQOB 5=^B ) 5?F2 #SKI BSOPT 5?YL ( 5#D= LDN 3 CHAINADD(3) 5#XW STO 3 EX6 [REM5MBER CHAINING ADDRESS OF QBLK 5*CG #SKI K6BSQ>299-299 5*X6 TRACE EX5,EX5 5BBQ NGX 3 0 5BWB ADX 3 BBAC 5CB2 ADX 3 ASBSAB 5CTL CALL 0 P13 [OPTIMISE THIS TRANSFER 5D*= LDX 2 FX2 5DSW LDX 0 BA1(2) 5F#G TRANSFIX BPZ 0,FQOB 5FS6 FPUT [FPUT CALLING ACTIVITY IF AUTO 5G?Q TRANSFIX BRN,FQOB 5GRB LABFIX AP13 5H?2 P13 STO 0 EX7 [STORE LINK 5HQL LDN 0 1 [ADD ONE TO COUNT OF OUTSTANDING 5J== ADS 0 ACOMMUNE7(3) [TRANSFERS FOR THIS BSA 5JPW #UNS ICTON 5K9G ( 5KP6 FIXTRA ASFP13 [USED BY BSPRI RESTORE TIME MACRO 5L8Q NULL [MENDED TO BRN ASFBS1 5LNB ) 5M82 LDN 0 BSCHANAD(3) [BASE OF PRIMARY QUEUE 5MML LDN 1 BSSCHAD(3) [BASE OF SECONDARY QUEUE 5N7= TXU 0 BSCHANAD(3) [SEE IF EQUAL 5NLW TXU 1 BSSCHAD(3) [TO BASE 5P6G BCC TDRUM [AND JUMP IF BOTH QUEUES ARE EMPTY 5PL6 LDX 0 AWORK1(3) [DEVICE TYPE 5Q5Q ANDN 0 #7777 5QKB SBN 0 9 5R52 BZE 0 TDROM [NO OPTIMISATION FOR DRUM TRANSFERS 5RJL SBN 0 16 5S4= BZE 0 TDROM 5SHW DCA CPPTR(3),LDX,2,DTSA [CURRENT HEAD POSITION 5T3G LDCT 0 #200 5TH6 ANDX 0 ACOMMUNE1(3) 5W2Q BNZ 0 PT4C [DON'T ROUND DOWN IF CHAPTER CHANGE 5WGB ANDX 2 GMIN4 [ROUND DOWN TO NEXT GEORGE BLOCK 5X22 PT4C SBX 2 EX5 [COMPARE CURRENT POSITION OF HEADS 5XFL LDX 0 2 [WITH POSITION REQUIRED FOR THIS 5X^= ERX 0 AWAY(3) [QBLK 5YDW BNG 0 OPT4 [J IF THIS TRANSFER WILL 5YYG BZE 2 OPT4 [FIT IN PRIMARY QUEUE OTHERWISE... 5^D6 NGN 1 1 [PUT ON SECONDARY QUEUE 5^XQ ERX 1 AWAY(3) [INVERT DIRECTION INDICATOR 62CB LDN 3 BSSCHAD(3) [BASE OF SECONDARY QUEUE 62X2 BRN OPT5 63BL OPT4 LDX 1 AWAY(3) [DIRECTION FOR PRIMARY QUEUE 63W= LDN 3 BSCHANAD(3) [BASE OF PRIMARY QUEUE 64*W OPT5 STO 3 BSP11 [REMEMBER BASE 64TG BRN PT1 65*6 PT2 ADN 3 CHAINADD 65SQ PT1 LDX 3 FPTR(3) [GET FIRST/NEXT QBLK 66#B TXU 3 BSP11 66S2 BCC PT4 [J IF END OF QUEUE 67?L SBN 3 CHAINADD [START OF QUEEU BLOCK 67R= LDX 0 ATYPE(3) 68=W TXL 0 CACT 68QG BCC OPT7 [J IF ACTIVITY BLOCK 69=6 LDX 2 ADBLKNO(3) [DATUMISED BS ADDRESS FROM QBLK 69PQ BRN OPT8 6=9B TDRUM LDX 2 3 6=P2 LDX 0 EX5 [REMEMBER IN CA5 OF ASSOCIATED BSA 6?8L DCA CPPTR(3),STO,0,DTSA 6?N= [BEFORE THE BSA IS WOKEN UP 6#7W LDX 0 AWORK2(3) 6#MG BNG 0 TDROM [DON'T FPUT BSA IF ON COOR2 6*76 FPUTX [LIST THE BSA (QUICKLY) 6*LQ TDROM LDN 3 BSCHANAD(3) 6B6B BRN PT4 6BL2 OPT7 LDX 0 BA1(3) 6C5L SLL 0 1 6CK= BNG 0 PT3 [J IF A CHAPTER CHANGE 6D4W LDX 2 ACOMMUNE9(3) [DATUMISED BS ADDRESS FROM ACTIVITY 6DJG BRN OPT8 6F46 PT3 LDX 2 BA4(3) [BS ADDRESS OF CHAPTER 6FHQ BRN PT4B 6G3B OPT8 ANDX 2 GMIN4 6GH2 PT4B 6H2L #SKI K6BSQ>299-299 6HG= TRACE 2,BSQBLK 6H^W SBX 2 EX5 [COMPARE BS ADDRESSES 6JFG LDX 0 2 6J^6 ERX 0 1 6KDQ BNG 0 PT2 [J IF THIS QBLK DOES NOT FIT IN HERE 6KYB BNZ 2 PT4A [J IF IT DOES 6LD2 LDN 0 1 [CASE WHERE BLOCK NOS ARR EQUAL 6LXL ADS 0 EX5 [ 6MC= BRN PT2 [LOCK FOR NEXT BLOCK 6MWW PT4A ADN 3 CHAINADD [CHAINING ADDRESS 6NBG PT4 LDX 2 BPTR(3) 6NW6 ONQUE EX6,2 [PUT ON QUEUE 6P*Q BRN (EX7) [EXIT 6PTB #UNS ICTON 6Q*2 ( 6QSL # 6R#= # ALTERNATIVE OPTIMISING ROUTINE FOR ICT 6RRW # PRIORITY TRANSFERS ON PRIMARY QUEUE IN ASCENDING ORDER 6S?G # OTHERS ON SECONDARY QUEUE IN ASCENDING ORDER 6SR6 # 6T=Q FIXTRA ASFBS1 6TQB STOZ ASFBSMUD 6W=2 LDN 0 BSCHANAD(3) [BASE OF PRIMARY QUEUE 6WPL LDN 1 BSSCHAD(3) [BASE OF SECONDARY QUEUE 6X9= TXU 0 BSCHANAD(3) [SEE IF EQUAL 6XNW TXU 1 BSSCHAD(3) [TO BASE 6Y8G BCC QDRUM [AND JUMP IF BOTH QUEUES EMPTY 6YN6 LDX 0 AWORK1(3) [DEVICE TYPE 6^7Q ANDN 0 #7777 6^MB SBN 0 9 7272 BZE 0 QDROM [NO OPTIMISATION FOR DRUM TRANSFERS 72LL SBN 0 16 736= BZE 0 QDROM 73KW LDN 3 BSSCHAD(3) [BASE OF SECONDARY QUEUE 745G STO 3 BSP11 74K6 LDX 3 FPTR(3) [GET FIRST QBLK ON SECONDARY QUEUE 754Q CALL 1 XGETBS [GET DATUMISED ADDRESS IN X2 75JB STO 2 ASFBSCUR [REMEMBER AS CURRENT POSITION 7642 LDX 3 BSP11 [RELOAD BASE 76HL SBN 3 CHAINADD [ADJUST TO START OF BLK 773= LDX 1 FX2 [IS THIS A 77GW LDCH 0 ACRIT(1) [PRIORITY TRANSFER 782G BZE 0 QPRI [YES 78G6 # 78^Q # IF OUR TRANSFER <= CURRENT START= WHERE DIRECTION CHANGES 79FB # IF OUR TRANSFER > CURRENT GET POSITION 79^2 # 7=DL NONPRI 7=Y= STO 2 ASFBSDUMP 7?CW XS LDX 3 CHAINADD(3) 7?XG BXE 3 BSP11,XSEND [J IF END OF QUEUE 7#C6 CALL 1 XGETBS [GET DATUMISED ADDR IN X2 7#WQ BXL 2 ASFBSDUMP,XSEND1 [J IF GDIRECTION CHANGES 7*BB STO 2 ASFBSDUMP 7*W2 # 7B*L # IF OUR TRANSFER > ASFBSCUR CHECK IF RIGHT PLACE 7BT= # 7C#W LDX 0 ASFBSCUR 7CSG BXGE 0 EX5,XS [IF OURS < CUR GO BACK 7D#6 SBX 2 EX5 7DRQ BNG 2 XS [IF OURS > ON QUEUE GO BACK 7F?B BZE 2 MATCH [IF SAME SORT IT OUT 7FR2 BRN QPT4A [CORRECT POSITION FOUND 7G=L # 7GQ= XSEND1 7H9W ADN 3 CHAINADD [GET TO RING 7HPG XSEND LDX 0 ASFBSCUR 7J96 BXL 0 EX5,QPT4 [IF ASCENDING WE HAVE RIGHT PLACE 7JNQ XGETSTART 7K8B LDX 3 BPTR(3) 7KN2 BRN QPT1 7L7L # 7LM= # SEARCH FOR BLOCK MATCH IF PRIORITY TRANSFER 7M6W # 7MLG QPRI LDX 3 CHAINADD(3) 7N66 BXE 3 BSP11,XPEND [J IF END OF QUEUE 7NKQ CALL 1 XGETBS [GET DATUMISED ADDR IN X2 7P5B BXU 2 EX5,QPRI [GO BACK IF NO MATCH 7PK2 ADN 3 CHAINADD 7Q4L DERING 3 [REMOVE LOW PRIORITY TRANSFER 7QJ= STO 3 ASFBSMUD [REMEMBER FOR RE-QUEUING LATER 7R3W XPEND LDX 3 BSP11 [BASE OF PRIMARY QUEUE 7RHG SBN 3 BSSCHAD-BSCHANAD 7S36 STO 3 BSP11 7SGQ LDX 3 FPTR(3) [GET PAST FIRST AS IN PROGRESS 7T2B CALL 1 XGETBS [GET DATUMISED ADDR IN X2 7TG2 STO 2 ASFBSCUR 7T^L BRN NONPRI 7WF= # 7WYW QPT2 ADN 3 CHAINADD 7XDG QPT1 LDX 3 FPTR(3) [GET FIRST$NEXT QBLK 7XY6 TXU 3 BSP11 7YCQ BCC QPT4 [J IF END OF QUEUE 7YXB SBN 3 CHAINADD [START OF QBLK 7^C2 LDX 0 ATYPE(3) 7^WL TXL 0 CACT 82B= BCC QOPT7 [J IF ACTIVITY BLK 82TW LDX 2 ADBLKNO(3) [DATUMISED BS ADDRESS FROM QBLK 83*G BRN QOPT8 83T6 QDRUM LDX 2 3 84#Q LDX 0 EX5 84SB DCA CPPTR(3),STO,0,DTSA 85#2 LDX 0 AWORK2(3) 85RL BNG 0 QDROM [DON'T FPUT BSA IF ON COOR2 86?= LDX 1 FX2 [IF PRIORITY TRANSFER 86QW LDCH 0 ACRIT(1) [WAKE UP BSA QUICKLY 87=G BZE 0 QUICK 87Q6 FPUT 889Q BRN QDROM 88PB QUICK LDN 1 CHAINADD(2) 8992 ENRING 1,ACTLIS 89NL STOZ GMEL+ASU 8=8= QDROM LDN 3 BSCHANAD(3) 8=MW BRN QPT4 8?7G QOPT7 LDX 0 BA1(3) 8?M6 SLL 0 1 8#6Q BNG 0 QPT3 [J IF CHAPTER CHANGE 8#LB LDX 2 ACOMMUNE9(3) [DATUMISED ADDRESS FROM ACTIVITY 8*62 BRN QOPT8 8*KL QPT3 LDX 2 BA4(3) [BS ADDRESS OF CHAPTER 8B5= BRN QPT4B 8BJW QOPT8 ANDX 2 GMIN4 8C4G QPT4B SBX 2 EX5 [COMPARE BS ADDRESSES 8CJ6 BZE 2 MATCH 8D3Q BNG 2 QPT2 8DHB BRN QPT4A 8F32 MATCH LDN 0 1 8FGL ADS 0 EX5 8G2= BRN QPT2 8GFW QPT4A ADN 3 CHAINADD 8G^G QPT4 LDX 2 BPTR(3) 8HF6 ONQUE EX6,2 8HYQ LDX 0 ASFBSMUD [DO WE HAVE SAME BLK FROM NON-PRIORIT 8JDB BZE 0 (EX7) [QUEUE EXIT IF NOT 8JY2 LDX 2 EX6 [PUT ON QUEUE BEFORE PRIORITY TRANSFE 8KCL LDX 2 BPTR(2) 8KX= ONQUE ASFBSMUD,2 8LBW BRN (EX7) 8LWG # 8MB6 # SUBROUTINE TO GET DATUMISED BS ADDRESS FROM QBLK 8MTQ # ON EXIT X2 CONTAINS DATUMISED ADDRESS 8N*B # X3 POINTS TO START OF QBLK 8NT2 # 8P#L XGETBS 8PS= SBN 3 CHAINADD [START OF QUEUE BLOCK 8Q?W LDX 2 ADBLKNO(3) 8QRG LDX 0 ATYPE(3) 8R?6 BXL 0 CACT,XG1 [J IF NOT ACTIVITY 8RQQ LDX 2 BA4(3) [BS ADDRESS OF CHAPTER 8S=B BBS 1,BA1(3),(1) [EXIT IF CHAPTER CHANGE 8SQ2 LDX 2 ACOMMUNE9(3) [DATUMISED BS ADDRESS FROM ACTIVITY 8T9L XG1 ANDX 2 GMIN4 8TP= EXIT 1 0 8W8W # 8WNG ) 8X86 ) 8XMQ # 8Y7B # THIS IS THE CHAPTER CHANGER ENTRY POINT. 8YM2 # THE BACKING STORE ADDRESS OF THE CHAPTER IS DATUMISED AND THEN 8^6L # A JUMP IS MADE TO THE OPTIMISING ROUTINE. 8^L= # ON ENTRY X2=FX2 925W # 92KG LABFIX BCHR 9356 #SKI K6BSQ>99-99 93JQ ( 944B LDCT 5 #200 94J2 ANDX 5 BA1(2) 953L BNZ 5 T33 [J IF ALREADY DOING CHAPTER CHANGE 95H= ) 962W LDCT 5 #200 [CHAPTER CHANGE BIT 96GG STO 5 BA1(2) [TO ACTIVITY 9726 #SKI CLINK 97FQ ( 97^B LDX 5 ALINK1(2) 98F2 SRL 5 12 [X5 HAS CHAP NUMBER 98YL SMO 5 99D= LDX 5 KTAB [X5 HAS LSEG/4 IN B0-8,DSEG/128 IN 99XW [REST 9=CG #SKI JPSCF 9=X6 ( 9?BQ SRC 5 13 9?WB SRL 56 1 [B0 X6=1 IF ON SCF ELSE CLEAR 9#B2 SRC 5 10 [CLEAR SCF BIT IN KTAB COPY 9#TL ) 9**= LDX 4 5 9*SW SLC 4 11 9B#G ANDN 4 #3774 [LENGTH IN X4 9BS6 BNZ 4 V1 9C?Q LDN 4 1024 9CRB V1 SLL 5 11 9D?2 SRL 5 4 [X5 HAS UNDATUMISED BS ADDRESS 9DQL ) 9F== STO 4 BA2(2) [STORE LENGTH OF CHAPTER 9FPW CALL 7 TB56 [PATUMISE BS ADDRESS 9G9G LDX 3 FX2 9GP6 STO 1 BA4(3) [DATUM[SE BS ADDRESS OF FIRST TRAN 9H8Q STO 1 EX5 9HNB STO 2 BA3(3) [X2=0 IF ONE TRANSFER OR LENGTH OR 1S 9J82 BZE 2 T25J [J IF ONLY ONE TRANSFER 9JML ADX 5 2 [UPDATE BLOCK NO 9K7= SBX 4 2 [AND LENGTH 9KLW CALL 7 TB56 [DATUMISE BS ADDRESS GF SECOND TRAN 9L6G #SKI K6BSQ>99-99 9LL6 ( 9M5Q BZE 2 TJH9A 9MKB T33 GEOERR 0,TWOTRANS [NOT MORE THAN TWO TRANSFERS ALLOWED 9N52 ) 9NJL TJH9A LDX 3 FX2 9P4= STO 1 BA5(3) 9PHW T25J LDN 7 1 [BSUN 9Q3G #SKI JPSCF 9QH6 ( 9R2Q BPZ 6 T27 9RGB LDX 7 BRADSPLTBSU [CHAPTER ON SCF 9S22 ) 9SFL BRN T27 9S^= #SKI JPSCF-1 9TDW TB56 DATUMADD 5,BINDEX,4 [GET DATUMISED BS ADDRESS 9TYG #SKI JPSCF 9WD6 ( 9WXQ TB56 LDX 3 BINDEX 9XCB BPZ 6 TBNR [USE FIRST PART OF CCTABLE 9XX2 ADN 3 6 [MOVE TO SECOND PART OF CCTABLE 9YBL TBNR DATUMADD 5,3,4 9YW= ) 9^*W #SKI K6BSQ>99-99 9^TG ( =2*6 BNZ 1 TBS5 =2SQ GEOERR 0,LARGEADD =3#B ) =3S2 TBS5 EXIT 7 0 =4?L LABFIX AP5 =4R= P5 STO 0 EX4 [ONQUE MACRO =5=W LDX 0 FPTR(2) =5QG STO 3 FPTR(2) =6=6 STO 0 FPTR(3) =6PQ STO 2 BPTR(3) =79B SMO 0 =7P2 STO 3 BPTR =88L BRN (EX4) =8N= LABFIX AP6 =97W P6 STO 0 EX5 [OFFQUE MACRO =9MG LDX 0 0(3) ==76 SMO BPTR(3) ==LQ STO 0 0 =?6B LDX 0 BPTR(3) =?L2 SMO FPTR(3) =#5L STO 0 BPTR =#K= STOZ BPTR(3) =*4W BRN (EX5) =*JG LABFIX AP7 =B46 P7 STO 0 EX6 [REQME MACRO =BHQ CALL 0 (BSTS6) =C3B CALL 0 (BSTS5) =CH2 BRN (EX6) =D2L LABFIX BP8 [ROUTINE TO FPUT BSA OR TFA IF =DG= LDN 1 BSCHANAD(2) [NECESSARY =D^W TXU 1 BSBKCHAN(2) =FFG BCS T23 [J IF SOMETHING ALREADY ON QUEUE =F^6 LDX 0 BACK1(2) [OR IF BSTB/BWRITE ON TFA =GDQ BNZ 0 T23 =GYB STO 2 6 =HD2 FPUT [FPUT ACTIVITY =HXL LDX 2 6 =JC= T23 EXIT 7 0 =JWW # =KBG # =KW6 T25 =L*Q #SKI K6BSQ>99-99 =LTB ( =M*2 T29 TXL 5 BSUN =MSL BCS T31 =N#= T32 GEOERR 0,NO HOME [INVALID BSUN =NRW T31 BZE 5 T32 =P?G ) =PR6 T22 LDX 7 5 =Q=Q SLL 7 12 [BSUN =QQB LDX 1 BA3(2) [BS ADDRESS =R=2 BRN T19A =RPL # =S9= # BACKWAIT MACRO =SNW # =T8G LABFIX AP11 =TN6 P11 ADN 0 1 =W7Q STO 0 EX4 [UPDATE & REMEMBER LINK =WMB #SKI K6BSTS>199-199 =X72 TRACE BSP11,BACKWAIT =XLL STO 3 EX5 =Y6= LDX 3 FX2 =YKW W2 LDX 3 FPTR(3) [LOOK FOR QBLK =^5G LDX 0 ATYPE(3) =^K6 TXL 0 CACT ?24Q BCC W7B [J IF ACTIVITY ?2JB SBX 0 BSP10 ?342 BNZ 0 W2 [NOT QDLK ?3HL LDX 0 BSP11 [LFN ?43= BNG 0 W3 [J IF ALL TRANSFERS TO BE WAITED FOR ?4GW LDX 1 ATRAN(3) ?52G ANDX 1 BIT11 [IF B11 IS SET IN ATRAN THIS ?5G6 BNZ 1 W3 [PARTICULAR TRANSFER HAS BEEN AWAITED ?5^Q SLL 0 1 ?6FB BNG 0 W2 [J ONLY BIZ NEED BE CHECKED ?6^2 LDEX 0 BSP11 [LOGICAL FILE NUMBER OR BSUN ?7DL LDX 1 ALENLFN(3) [GET LFN OR BSUN ?7Y= ANDN 1 #377 [FROM QBLK ?8CW LDX 2 BSP12 [BLOCK NO OR DATUMISED BLOCK NO. ?8XG TXU 0 1 [COMPARE LFN OR BSUNS ?9C6 TXU 2 BLKNO(3) [COMPARE BLOCK NO. ?9WQ BCS W2 [J NOT SAME-LOOK FOR NEXT BLOCK ?=BB LDN 0 BONL ?=W2 ANDX 0 ATRAN(3) [ISOLATE ONLINE BIT-IF ANY ??*L ERX 0 EX7 [SEE IF SAME AS REQUIRED TRANSFER ??T= BNZ 0 W2 [J IF NOT ?##W LDX 0 BSP11 ?#SG W3 LDCT 1 #100 [TEST IF THIS TRANSFER FAILED ?*#6 ANDX 1 ATRAN(3) ?*RQ BZE 1 W5 [J NOTHING WRONG ?B?B LDX 0 FPTR(3) ?BR2 STO 0 EX6 [RETAIN PTR TO WRITE BLOCK ?C=L LDN 0 ATRAN(3) ?CQ= LDN 1 BA1(2) ?D9W MOVE 0 5 [PUT INFO IN ACT ?DPG LDN 0 1 ?F96 SBS 0 EX4 ?FNQ LDX 0 ADBLKNO(3) [REPLY FROM ACTUAL PERI ?G8B STO 0 ACOMMUNE9(2) [TO ACTIVITY BLOCK ?GN2 LDX 0 ATRAN(3) ?H7L ANDN 0 BSET+BOBJ ?HM= BNZ 0 W7 ?J6W LDX 0 BSMODE(3) [MODE OF TRANSFER ?JLG BZE 0 W7 [J IF READ ?K66 CHAIN EX6,2 [PUT WRITE BLOCK BEHIND ACTIVITY ?KKQ W7 CALL 0 PCA [FPUT PCA IF NECESSARY ?L5B FREECORE 3 [FREE QBLK ?LK2 W7B LDX 1 FX1 ?M4L LDX 2 FX2 ?MJ= LDX 3 EX5 ?N3W BRN (EX4) [REPORT FAIL OR EXIT OK ?NHG W5 LDX 2 BIT10 [BACKWAIT IS WAITING BIT ?P36 BNG 0 W7C [J IF ALL TRANSFERS TO BE WAITED ?PGQ ADX 2 BIT11 [INDICATE BACKWAIT FOR THIS TRAN ONLY ?Q2B W7C ORS 2 ATRAN(3) [BITS TO QUEUE BLK ?QG2 LDX 0 EX4 [ADJUST LINK TO START OF MACRO ?Q^L SBN 0 4 ?RF= W8 LDX 3 EX5 [RESET X3 ?RYW BRN (COOR1) [WAIT TO BE FPUTTED BY BSTS ?SDG # ?SY6 # FINDFAIL MACRO ?TCQ # ?TXB LABFIX AP12 ?WC2 P12 STO 0 BSP11 [REMEMB=R LINK ?WWL HUNT2 2,BSTB,BFAIL [FIND CURRENT/PERMANENT FAIL LIST ?XB= P12A ADN 2 2 ?XTW LDX 1 A1-1(2) ?Y*G TXU 1 GMINUS1 ?YT6 BCC P12C [JUMP IF END OF LIST ?^#Q TXU 1 EX5 [ ?^SB BCS P12A [JUMP IF NOT REQUIREDBLOCK #2#2 LDX 1 EX7 [CHECK IF CORRECT TYPE OF ENTRY #2RL ANDX 1 A1(2) [PERMANENT OR CURRENT #3?= BZE 1 P12A [JUMP IF NOT #3QW LDX 1 A1(2) #4=G ANDN 1 #77 #4Q6 TXU 1 EX6 #59Q BCS P12A [JUMP IF WRONG LFN #5PB ADN 2 A1-1 #692 SMO EX4 #6NL STO 2 0 [POINTER #78= LDN 0 1 #7MW ADS 0 BSP11 [INCREMENT LINK IF RECORD FOUND #87G P12C LDX 1 FX1 #8M6 LDX 2 FX2 #96Q BRN (BSP11) [EXIT #9LB # #=62 # ROUTINE TO FPUT THE PCA IF B8 IS SET IN ATRAN. B8 IS INITIALLY SET #=KL # BY SWAPWAIT IN SWAP TO WAIT FOR COMPLETION OF ANY AUTONOMOUS #?5= # BACKING STORE TRANSFERS BELONGING TO THE OBJECT PROGRAM. #?JW # ##4G LABFIX PCA ##J6 PCA STO 0 EX6 [STORE LINK #*3Q LDCT 0 1 #*HB ANDX 0 ATRAN(3) #B32 BZE 0 PCA1 [B8 NOT SET-SO EXIT #BGL #SKI G3 #C2= ( #CFW LDX 2 APCA(3) [ADDRESS OF PCA #C^G #SKI K6BSTS>199-199 #DF6 TRACE 2,PCA FPUT #DYQ FPUT #FDB ) #FY2 #SKI G4 #GCL FON #123 [WAKE UP INTERESTED ACTIVITIES #GX= PCA1 BRN (EX6) [EXIT #HBW # #HWG # #JB6 # #JTQ # THE FOLLOWING GROUP OF SUBROUTINES ARE CALLED #K*B # FROM BSTS #KT2 # #L#L # SUBROUTINE TO CONVERT NO. IN X5 #LS= # TO CHARACTERS FOR PRINTING #M?W # ON EXIT CONVERTED NO. IN X7,X0 #MRG # #N?6 LABFIX TOCT #NQQ TOCT LDN 1 8 #P=B TOCT1 LDN 4 0 #PQ2 SLL 45 3 #Q9L SLL 70 6 #QP= DCH 4 0 #R8W BCT 1 TOCT1 #RNG EXIT 2 0 #S86 # #SMQ # SUBROUTINE TO MOVE MESSAGE (X3) TO CONSOLE OUTPUT BUFFER #T7B # #TM2 LABFIX ZMVCH #W6L ZMVCH LDX 5 FCOUTBUF [NEXT FREE PLACE IN BUFFER #WL= LABFIX YMVCH #X5W YMVCH LDN 4 1(3) [START OF MESSAGE #XKG SMO 0(3) [NO OF CHARACTERS #Y56 MVCH 4 0 [SHIFT MESS #YJQ STO 5 FCOUTBUF [UPDATE NEXT PLACE #^4B EXIT 6 0 #^J2 # *23L # *2H= # *32W # SUBROUTINE TO GET HOLD OF OPS. CONSOLE *3GG # - ON EXIT EX4 IS NON-ZERO IF INPUT WAS CANCELLED *426 # *4FQ LABFIX XGETCON *4^B XGETCON *5F2 STOZ EX4 [MARKER:IN CASE WE HAVE TO CANCEL I/P *5YL DCA JCTWPTR,LDEX,0,MODE [INPUT OR OUTPUT MODE ON CONSOLE *6D= BNZ 0 WAITX [J IF OUTPUT TO WAIT FOR COMPLETION *6XW DISENGPER JCTWPTR [ELSE CANCEL INPUT *7CG STO 2 EX4 [AND REMEMBER *7X6 BRN OK *8BQ WAITX JBUSY JCTWPTR,WAITX [WAIT IF CONSOLE OUTPUTTING *8WB OK EXIT 7 0 *9B2 # *9TL # *=*= # SUBROUTINE TO DO CONSOLE PERI *=SW # - ON ENTRY X3=END OF MESSAGE IN FCOUTBUF *?#G # USES X0,X1,X3,X6 *?S6 # "CANCEL" IS OUTPUT IF EX4 IS NON-ZERO *#?Q # *#RB LABFIX XPERI **?2 XPERI **QL SBN 3 FCOUTBUF+1 [CALCULATE LENGTH OF *B== SLC 3 2 [OF MESSAGE *BPW LDX 1 JCTWPTR [PTR TO DL FOR CONSOLE *C9G LDX 6 EX4 [GET CANCEL MARKER *CP6 LDN 0 FCOUTBUF+1 [START ADDRESS *D8Q BZE 6 NCAN [J NOT CANCEL *DNB SBN 0 4 [INCLUDE CANCEL MESSAGE BY SUBTRACTIN *F82 ADN 3 16 [4 FROM ADDRESS AND ADDING 16 TO COUN *FML NCAN DCA 1,STO,3,COUNT [COUNT TO DEVICE LIST *G7= DCA 1,STO,0,CTSA [START ADDRESS *GLW LDN 0 1 *H6G DCA 1,DLA,0,MODE [OUTPUT MODE *HL6 LDX 0 ACES [SPACE FILL COUNT WORD IN CASE *J5Q STO 0 FCOUTBUF [CANCEL IS OUTPUT *JKB [ *K52 #UNS ENHOPER *KJL ( *L4= JENVNOT NOTDME,DME [IF DME,PUT DATE AND *LHW LDX 3 CONSCNTRL [TIME THAT PERI IS ISSUED *M3G LDX 0 EDATE [INTO THE CONBUFF/CNTRL *MH6 STO 0 COBS(3) *N2Q LDX 0 CLEANCT [THIS ENSURES THAT THE OPER SCREEN *NGB STO 0 COBS+1(3) [WILL NOT BE OVERWRITTEN BEFORE *P22 NOTDME [THE OPS HAVE A CHANCE TO SEE THIS *PFL ) *P^= [ *QDW LDX 3 ACC3(2) *QYG GPERI 1,2 [OUTPUT MESSAGE *RD6 COOR1 ,6 [WAIT FOR EOT *RXQ EXIT 7 0 *SCB # *SX2 # *TBL # SUBROUTINE TO OUTPUT UNIT N FIX TO THE CONSOLE *TW= # LINK X7 SAVED IN AWORK3 *W*W # ALL ACCUMULATORS EXCEPT X2 DESTROYED *WTG # *X*6 LABFIX XOUTFIX *XSQ XOUTFIX *Y#B STO 7 AWORK3(2) [SAVE LINK *YS2 LDX 0 CPRW1(2) [SAVE REPLY WORD *^?L STO 0 BA4(2) *^R= XOUT1 CALL 7 XGETCON [GET CONSOLE B2=W LDN 3 JPMESS [PTR TO UNIT N FIX MSG B2QG LDX 1 CPPTR(2) B3=6 TRANSFIX CALL 0,JPG [GEOG NO TO MSG B3PQ LDN 5 FCOUTBUF+1 B49B CALL 6 YMVCH [PUT MSG IN BUFFER B4P2 LDX 3 5 B58L CALL 7 XPERI [DO CONSOLE PERI B5N= LDCH 0 CPRW1(2) B67W BNZ 0 XOUT1 [REPEAT PERI IF NOT OK B6CN ... FON #50 [WAKE UP ANYBODY WAITING CONSOLE B6MG LDX 1 BA4(2) [RE-INSTATE REPLY WORD B776 STO 1 CPRW1(2) B7LQ LDX 7 AWORK3(2) B86B EXIT 7 0 B8L2 # B95L # B9K= # THIS SUBROUTINE SEARCHES THE PRIMARY AND SECONDARYQUEUES OF A B=4W # GIVEN BSA FOR THE FIRST ACTIVITY WITH THE BLFAIL OR BONL BIT OF BA1 B=JG # SET. IF FOUND X5 IS SET NEGATIVE AND THE ACTIVITY IS REQUEUED AT TH B?46 # HEAD OF THE PRIMARY QUEUE. OTHERWISE X5 =0 . ALSO BIT 5 IS SET B?HQ # IN CPRW1 B#3B LABFIX XFIND B#H2 XFIND LDX 2 FX2 B*2L LDCT 5 #10 B*G= ORS 5 CPRW1(2) [SET FAILED REPLY B*^W LDN 5 0 [INITIALISE MARKER BBFG LDX 0 BSBKCHAN(2) [CON0ENTS OF JOBRING+1 BB^6 LDN 1 BSCHANAD(2) [ADDRESS OF JOBRING BCDQ XLP2 TXU 1 0(1) [COMPARE ADDRESS WITH CONTENTS BCYB BCC XOUT [IF EQUAL, QUEUE IS EMPTY BDD2 XLOOP LDX 1 0(1) [FI[ST/NEXT BLOCK BDXL SBN 1 CHAINADD BFC= LDX 4 ATYPE(1) BFWW TXL 4 CACT BGBG BCS XNACT [J IF NOT ACTIVITY BGW6 LDX 4 BA1(1) BH*Q ANDN 4 BLFAIL+BONL BHTB BZE 4 XNACT [J IF BLFAIL BIT NOT SET BJ*2 LDN 4 BA1(1) [ BA WORDS OF ACTIVITY BJSL LDN 5 ACOMMUNE1(2) [ ACOMMUNE WORDS OF BSA BK#= MOVE 4 5 BKRW NGN 5 1 [MARKER CHECKED BY CALLING ROUTINE BL?G LDN 0 BSCHANAD(2) [START OF QUEUE BLR6 ADN 1 CHAINADD BM=Q REQUE 1,0 [RECHAIN AT FRONT OF PRIMARY QUEUE BMQB LDX 2 FX2 BN=2 SBN 1 CHAINADD BNPL LDX 0 ACOMMUNE7(1) BP9= DCA ,DLA,0,MODE [ RESET DEVICE LIST IF NECC. BPNW XOUT EXIT 7 0 BQ8G XNACT ADN 1 CHAINADD BQN6 TXU 1 0 [END OF QUEUE? BR7Q BCS XLOOP [J IF NOT BRMB TXU 0 BSSBKCHN(2) [END OF SEARCH? BS72 BCC XOUT [EXIT IF SO BSLL LDX 0 BSSBKCHN(2) [POINTERS TO SECONDARY... BT6= LDN 1 BSSCHAD(2) [...QUEUE BTKW BRN XLP2 BW5G # BWK6 # BX4Q # THIS SUBROUTINE SEARCHES THE PRIMARY AND SECONDARY QUEUES BXJB # FOR THE FIRST CHAPTER TRANSFER. IF FOUND X5 IS SET BY42 # NEGATIVE AND THE TRANSFER REQUEUED AT THE HEAD OF THE BYHL # PRIMARY QUEUE. OTHERWISE X5=0 B^3= # B^GW LABFIX XFINDCH C22G XFINDCH C2G6 LDN 5 0 [CLEAR MARKER C2^Q LDX 0 BSBKCHAN(2) [CONTENTS OF JOBRING+1 C3FB LDN 1 BSCHANAD(2) [ADDRESS OF JOBRING C3^2 XCH1 TXU 1 0(1) [COMPARE ADDRESS WITH CONTENTS C4DL BCC XOUTCH [IF EQUAL QUEUE IS EMPTY C4Y= XCH2 LDX 1 0(1) [FIRST/NEXT BLK C5CW SBN 1 CHAINADD C5XG LDX 4 ATYPE(1) C6C6 TXL 4 CACT C6WQ BCS XCH3 [J IF NOT ACTIVITY C7BB LDCT 4 #200 C7W2 ANDX 4 BA1(1) C8*L BZE 4 XCH3 [J IF NOT CHAPTER TRANSFER C8T= NGN 5 1 [SET MARKER TO SAY FOUND C9#W LDN 0 BSCHANAD(2) [START OF PRIMARY QUEUE C9SG ADN 1 CHAINADD C=#6 REQUE 1,0 [REQUE AT HEAD OF PRIMARY QUEUE C=RQ LDX 2 FX2 C??B XOUTCH C?R2 EXIT 7 0 C#=L XCH3 ADN 1 CHAINADD C#Q= TXU 1 0 [END OF QUEUE C*9W BCS XCH2 [J IF NOT C*PG XCH4 TXU 0 BSSBKCHN(2) [END OF SEARCH CB96 BCC XOUTCH [EXIT IF SO CBNQ LDX 0 BSSBKCHN(2) [POINTERS TO SECONDARY CC8B LDN 1 BSSCHAD(2) [QUEUE CCN2 BRN XCH1 CD7L # CDM= #END ^^^^ ...470512060003