8 22FL ...#OPT K0GETBACK=0 9 22_= ...#LIS K0GETBACK>K0ALLGEO 7 23DW ...#SEG GETBACK865 9 23YG ... 8HGETBACK 4 24D6 ...# 19 24XQ ...# THIS SEGMENT DEALS WITH THE GETTING AND FREEING 16 25CB ...# OF ONLY ONE BLOCK OF BACKING STORE 4 25X2 ...# 18 26BL ...# K1GETBACK IS ENTERED FROM THE GETBACK MACRO 18 26W= ...# K2GETBACK IS ENTERED FROM THE FREEBACK MACRO 4 27*W ...# 10 27TG ... SEGENTRY K1GETBACK,P1 10 28*6 ... SEGENTRY K2GETBACK,P3 4 2=R= # 16 2=S3 ...# SUBROUTINE TO CHECK IF ACTIVITY IS PRIVILEGED 4 2=SS ...# 6 2=TK ...SWAITPRIV 16 2=WB ... STO 0 GEN1 [ SAVE THE LINK 17 2=X7 ... WAITPRIV NOTPRACT [ SEE IF PRIVILEGED 16 2=XY ... LDX 0 GEN1 [ RECOVER LINK 16 2=YP ... EXIT 0 1 [ IF PRIVILEGED 5 2=_G ...NOTPRACT 16 2?2? ... LDX 0 GEN1 [ RECOVER LINK 14 2?34 ... EXIT 0 0 [ IF NOT 4 2?3T ...# 4 2?4L ...# 17 2?5C ...# SUBROUTINE TO REMOVE ENTRY FROM FAILED BLOCKS LIST 16 2?68 ...# EXPECTS BLOCK NO. IN GEN0 AND RES. NO. IN GEN1 4 2?6_ ...# 6 2?7Q ...SLOSBSBIT 17 2?8H ... LOSBSBIT GEN0,GEN1 [ REMOVE BIT REQUIRED 7 2?9# ... EXIT 7 0 4 2?=5 ...# 4 2?=W # 4 96GG # 17 9726 # THIS ROUTINE ALLOCATES ONE BLOCK OF FREE BACKING STORE 15 97FQ # ENTRY WITH X7=HARDLUMP EXIT WITH X7=BLK.NO 7 97_B S9 COOR3 3 8 98F2 BRN P1 8 98YL T50 BNZ 5 X14B 9 99D= LDXC 0 A1+4(2) 8 99XW BCS T50A 17 9=CG COOR3 2 [WAITING FOR BLOCKS 8 9=X6 BRN P1B 8 9?BQ T50A COOR3 #14 8 9?WB BRN P1B 14 9#B2 P1 LDX 7 ACOMMUNE7(2) [L.F.N 14 9#TL LDX 5 ACOMMUNE9(2) [MARKER 7 9**= P1B GETBSLIS 14 9*SW LDX 1 A1(2) [POINTER 9 9B#G #SKI K6DRUMALL>449-449 9 9BS6 TRACE 1,GLISTPTR 19 9BT3 ... FSHCODE B,NOTGET1INB [ OMIT IF NOT IN MACHINE 'B' 4 9BTY ...( 9 9BWT ... LDXC 0 A1+4(2) 17 9BXQ ... BCS NOTGET1INB [ OR IF FOR SWAPFILE 20 9BYM ... BNG 1 WAITCHK [ IF NEED TO WAIT OR IF NO BLOCKS 19 9B_J ... BZE 1 WAITCHK [ LEFT J. TO SEE IF PRIV'D 19 9C2F ... BRN X11 [ ELSE J. TO ALLOCATE A BLOCK 5 9C3B ...WAITCHK 17 9C4? ... CALL 0 SWAITPRIV [ CHECK IF PRIVILEGED 17 9C58 ... BRN NUFFLEFT [ J. IF NOT PRIV'D 19 9C65 ... TRANSBEG FSHBSID,FSHBSAL,5,NOBLOCKS,,ACOMMUNE3 [ ELSE 19 9C72 ... UP [ GET A BLOCK FROM M/C ^A^ 18 9C7X ...NUFFLEFT [ NOT PRIV'D SO CARRY ON 21 9C8S ... LDX 1 A1(2) [ RESET /BSLIST POINTER + JOIN NORMAL 14 9C9P ...NOTGET1INB [ PATH 4 9C=L ...) 21 9C?Q BNG 1 S9 [MAKE WAIT IF TRANSFER IN PROGRESS 9 9CRB LDX 0 A1+1(2) 18 9D?2 BPZ 0 ZOK [OK IF SOME BLOCKS LEFT 9 9DQL LDX 0 A1+4(2) 18 9F== BPZ 0 P1A [JUMP IF NOT A SWAP FILE 8 9FPW LDCT 0 #200 8 9G9G SMO FX2 9 9GP6 ANDX 0 CLONG1 20 9H8Q BZE 0 T50 [JUMP TO WAIT IF NOT PRIVELEGED 8 9HNB BRN ZOK 21 9J2R ...P1A CALL 0 SWAITPRIV [ CHECK IF PRIVILEGED FOR F/S FILES 15 9J*8 ... BRN T50 [ J. IF NOT 14 9JML LDX 1 A1(2) [RESET X1 19 9K7= ZOK BNZ 1 X11 [J IF SOME FREE BLOCKS CEFT 19 9K8S ... FSHCODE B,NOTINB2 [ OMIT IF NOT IN MACHINE 'B' 4 9K=B ...( 12 9K?Y ... LDXC 0 A1+4(2) [ 16 9K*G ... BCS NOTINB2 [ OR IF SWAPFILE 21 9KC4 ... CALL 1 XGET64BLKS [ ELSE GET 'FSHBSBLOCKS' BLOCKS FROM 18 9KDL ... LDN 1 FSHBSBLOCKS [ RESET BSLIST POINTER 20 9KG8 ... BRN X11 [ AND J. TO ALLOCATE NEXT BLOCK 5 9KHQ ...NOTINB2 4 9KK# ...) 9 9KLW LDX 1 BACK2(2) 8 9L6G BZE 1 X16 17 9LL6 BPZ 1 X12 [J IF NEXT BLOCKLET 9 9M5Q X16 LDX 1 BSRLEN(2) 17 9MKB BPZ 1 X13 [J IF STILL MORE BS 8 9N52 LDCT 0 #200 8 9NJL SMO FX2 20 9P4= ANDX 0 CLONG1 [TEST FOR A PRIVILEGED ACTIVITY 16 9PHW BZE 0 T50 [WAIT IF IT ISNT 10 9Q3G BSON EMSBIT,T53 18 9QH6 GEOERR 1,NO STORE [HOPELESS JAM IF IT IS 7 9R2Q X12 SBN 1 1 16 9RGB X13 STO 1 BACK2(2) [NEW BLOCKLET NO 7 9S22 NGN 1 1 21 9SFL STO 1 A1(2) [SET PTR -VE TO LOCK OUT EVERYTHING 13 9S_= LDN 1 BSRLEN(2) [CTA 16 9TDW LDX 7 BACK1(2) [RESTORE HARDLUMP 16 9TYG BACKREAD BSET,BSBS4,ST60,BACK1(2),BACK2(2),1 21 9WD6 FON 3 [WAKE UP ANYBODY WAITING FOR THIS LIS 16 9WXQ GETBSLIS [FIND LIST BLOCK 14 9XCB LDX 1 BSBS4 [SET PTR 7 9XX2 X11 SMO 1 17 9YBL LDX 7 BSRLEN-1(2) [GET FREE BLK NUMBER 9 9YW= #SKI K6DRUMALL>449-449 9 9_*W TRACE 7,GBLK.NO. 15 9_TG SBN 1 1 [DECREASE PTR 15 =2*6 STO 1 A1(2) [AND STORE 7 =2G# ... FSHSKIP 4 =2MG ...( 10 =2SQ BSOFF BSBITS,X11A 8 =3#B STO 1 BSP4 15 =3S2 LDX 1 7 [BLOCK NO. 8 =4?L CALL 0 Q1 4 =4BQ ...) 4 =4FW ...X11A 18 =4K2 ... FSHCODE B,NOCHECKA [ OMIT IF IN MACHINE 'A' 4 =4N6 ...( 17 =4R= ... LDXC 0 A1+4(2) [ CHECK IF SWAPFILE 19 =4WB ... BCC NOREDUCTINB [ IF NOT DONT ALTER BSFREE 5 =4_G ...NOCHECKA 4 =54L ...) 7 =57Q ... LDN 0 1 19 =5=W SBS 0 A1+1(2) [UPDATE NUMBER OF FREE BLOCKS 6 =5GN ...NOREDUCTINB 9 =5QG TXU 7 BACK2(2) 19 =6=6 BCS X14 [JIF NOT FREEING THIS BLOCK 8 =6PQ STOZ A1(2) 9 =79B NGS 0 BACK2(2) 9 =7P2 X14 LDXC 0 A1+4(2) 18 =88L BCC X14A [JUMP IF NOT SWAP FILE 8 =8N= LDCT 0 #200 8 =97W LDX 2 FX2 9 =9MG ANDX 0 CLONG1(2) 8 ==76 BZE 0 X14D 9 ==LQ ERS 0 CLONG1(2) 8 =?6B BRN X14D 8 =?L2 X14A SMO FX2 15 =#5L STO 5 AWORK1 [SAVE MARKER 15 =#K= JAMQUERY [IN A JAM ? 8 =*4W LDX 2 FX2 16 =*JG LDX 5 AWORK1(2) [RESTORE MARKER 15 =B46 X14D STO 7 ACOMMUNE7(2) [BLOCK NUMBER 8 =BHQ BZE 5 X14E 7 =C3B UPPLUS 1 5 =CH2 X14E UP 4 =D2L X14B 7 =DG= LDN 5 0 8 =D_W BRN X14 4 =F5R ...# 10 =F9N ...T53 GEOERR 1,FSRESFUL 4 =F*K ...# 20 =FFG # THIS ROUTINE FREES THE BLK (NO IN X2) OF BACKING STORE (TYPE IN 15 =F_6 # X1) AND WAKES UP ACTIVITIES WAITING FOR B.S. 8 =GDQ P4 +0 8 =GYB P5 +0 8 =HD2 P6 +0 7 =HXL X9 COOR3 3 8 =JC= BRN P3A 14 =JWW P3 LDX 7 ACOMMUNE7(2) [L F N 15 =KBG LDX 6 ACOMMUNE8(2) [BLOCK NO. 7 =KW6 P3A GETBSLIS 19 =KXT ... FSHCODE B,NOTFBKINB [ OMIT IF NOT IN MACHINE 'B' 4 =K_J ...( 17 =L3? ... LDXC 0 A1+4(2) [ CHECK IF SWAPFILE 16 =L52 ... BCS NOTFBKINB [ OMIT IF IT IS 19 =L6P ... TRANSBEG FSHBSID,FSHBSAL,8,NOBLOCKS,,ACOMMUNE3 [ ELSE 18 =L8D ... UP [ DO FREEBACK IN M/C ^A^ 6 =L=7 ...NOTFBKINB 4 =L?W ...) 14 =L*Q LDX 1 A1(2) [POINTER 9 =LTB #SKI K6DRUMALL>449-449 9 =M*2 TRACE 1,FLISTPTR 19 =MSL BNG 1 X9 [J TO SUSPEND IF AWAITING EOT 15 =N#= BZE 1 T23 [LIST EMPTY 15 =NRW ADN 1 1 [INCREASE PTR 9 =P?G TXU 1 BSBS41 15 =PR6 BCS T21 [JIF NOT FULL 7 =Q=Q NGN 1 1 16 =QQB STO 1 A1(2) [AND SET PTR -VE 9 =R=2 LDN 1 BSRLEN(2) 16 =RPL LDX 7 BACK1(2) [RESTORE HARDLUMP 8 =S9= SMO FX2 9 =SNW LDX 5 ACOMMUNE9 14 =T8G BACKWRITE BSET,BSBS4,ST50,BACK1(2),,1 21 =TN6 FON 3,0 [WAKE UP ANYONE WAITING FOR THIS LIST 10 =W7Q STO 5 ACOMMUNE9(2) 16 =WMB GETBSLIS [FIND LIST BLOCK 9 =X72 LDX 0 BACK2(2) 9 =XLL STO 0 BSRLEN(2) 7 =Y6= ADN 0 1 19 =YKW STO 0 BACK2(2) [INCREASE TO NEXT BLOCKLET 7 =_5G LDN 1 1 7 =_K6 LDX 5 0 15 ?24Q LDX 4 BSSS [WORDS/SHEET 9 ?2JB LDXC 0 A1+4(2) 17 ?342 BCS S2 [JUMP IF SWAP FILE 15 ?3HL LDX 4 BSBS [WORDS/BLOCK 18 ?43= S2 SRL 4 7 [RLOCKLETS/SHEET OR BLOCK 7 ?4GW DVS 4 4 21 ?52G BNZ 4 T22 [JUMP IF NOT RUNNING INTO NEXT BLOCK/ 4 ?5G6 T24 9 ?5_Q STO 6 BACK2(2) 14 ?6FB ADN 1 1 [MOVE PTR 8 ?6_2 BRN T22 4 ?7DL T23 7 ?7Y= LDN 1 1 9 ?8CW LDX 0 BACK2(2) 14 ?8XG BNG 0 T24 [NEW HOME 15 ?9C6 BRN T22 [SAME LIST 4 ?9WQ T21 9 ?=BB T22 TXL 6 A1+3(2) 8 ?=W2 BCS T20 19 ??*L #SKI [WAIT FOR PROPER FILE SYSTEM 10 ??T= GEOERR 1,BIGBLKNO 7 ?##W T20 SMO 1 10 ?#SG STO 6 BSRLEN-1(2) 17 ?#XL ... LDX 0 6 [X0 => BLOCK NUMBER 20 ?*2Q ... BNG 0 (GEOERR) [GEOERR IF BLOCK NUMBER NEGATIVE 12 ?*5W ... ANDN 0 3 [ 21 ?*92 ... BNZ 0 (GEOERR) [BLOCKNUMBER MUST BE A MULTIPLE OF 4 9 ?*#6 #SKI K6DRUMALL>449-449 9 ?*RQ TRACE 6,FBLK.NO. 15 ?B?B STO 1 A1(2) [STORE PTR 10 ?BR2 BSOFF BSBITS,T20A 8 ?C=L STO 1 BSP4 18 ?CQ= LDX 1 6 [X6 CONTAINS BLOCK NUMBER 15 ?D9W SLC 1 1 [TEST BIT 1 20 ?DPG BPZ 1 T40AB [B1= MARKS BLOCK AS FAILED .... 19 ?F96 SMO FX2 [... SO DONT JUMP ROUND MACRO 20 ?FNQ LDX 1 ACOMMUNE7 [X1 CONTAINS LOGICAL FILE NUMBER 14 ?G8B STO 2 BSP5 [SAVE X2 20 ?GD8 ... STO 6 GEN0 [ SAVE BLOCK NO. FOR S/ROUTINE 19 ?GN2 ... STO 1 GEN1 [ SAVE RES. NO. FOR S/ROUTINE 20 ?GXS ... CALL 7 SLOSBSBIT [ TO REMOVE ENTRY FROM BSTB/BFAIL 15 ?H7L LDX 2 BSP5 [RESTORE X2 5 ?HM= T40AB 7 ?J6W LDX 1 6 17 ?JLG ORX 1 GSIGN [SET B0 TO MARK FREE 7 ?JW# ... FSHSKIP 8 ?K66 CALL 0 Q1 7 ?KKQ T20A LDN 0 1 19 ?L5B ADS 0 A1+1(2) [UPDATE NUMBER OF FREE BLOCKS 9 ?LK2 LDXC 0 A1+4(2) 8 ?M4L BCS T30 7 ?MJ= FON 2 8 ?N3W BRN TEND 8 ?NHG T30 FON #14 5 ?P36 TEND UP 7 ?P8# ... FSHSKIP 4 ?P*G ...( 21 ?PGQ # THIS ROUTINE IS A TESTING AID FOR THE BS ALLOCATION SYSTEM WHICH 20 ?Q2B # WILL SET A BIT IF A BLOCK IS FREED, CHECKING THAT IT IS NOT 21 ?QG2 # ALREADY SET, AND UNSETTING IT IF A BLOCK IS GIVEN AWAY, SIMILARLY 20 ?Q_L # CHECKING THAT IT IS NOT ALREADY UNSET. THE BITS CONCERNED WILL 20 ?RF= # BE SITUATED IN THE WORDS FOLLOWING THE LIST OF FREE BLOCK NOS. 21 ?RYW # THERE WILL BE ONE BIT FOR EACH GEORGE BLOCK WITHIN EACH LOGICAL 20 ?SDG # FILE, THE BITS REFERRING TO THE BLOCK NO. CORRESPONDING TO THE 20 ?SY6 # POSITION OF THE BIT RELATIVE TO THE BEGINNING OF THIS AREA. 21 ?TCQ # E.G. BLOCK NO. 50 WILL BE REPRESENTED BY B2 OF WORD 2 OF THE AREA 14 ?TXB Q1 STO 2 BSP5 [BSLIST PTR 8 ?WC2 STO 3 BSP6 14 ?WWL LDX 3 1 [X1=BLOCK NO. 8 ?XB= BPZ 3 Q2 16 ?XTW ERX 3 GSIGN [DROP SIGN BIT 9 ?Y*G Q2 LDX 2 A1+4(2) 18 ?YT6 BPZ 2 Q2A [JUMP IF NOT A SWAP FILE 8 ?_#Q LDX 2 BSSS 8 ?_SB BRN Q2B 8 #2#2 Q2A LDX 2 BSBS 7 #2RL Q2B SRL 2 7 21 #3?= DVS 2 2 [X3 CONTAINS ACTUAL BLOCK/SHIFT NO. 8 #3QW SMO BSP5 19 #4=G TXL 3 A1+3 [TEST IF VALID BLOCK NUMBER 8 #4Q6 BCS Q4 10 #59Q GEOERR 1,BLKTOB1G 8 #5PB Q4 LDN 2 24 19 #692 DVS 2 2 [CONVERT TO WORD/BIT MODIFIER 8 #6NL STO 1 BSL1 14 #78= LDX 1 GSIGN [B0 ONLY 19 #7MW SRL 1 0(2) [SET BIT IN CORRECT POSITION 8 #87G STO 2 BSL2 8 #8M6 LDX 2 BSL1 18 #96Q BNG 2 Q3 [ J IF BIT IS TO BE SET 7 #9LB NGN 2 1 20 #=62 ERX 1 2 [INVERT BIT PATTERN TO UNSET BIT 17 #=KL # NOW X1=111...11011...11 IE ONLY ONE BIT IS UNSET 8 #?5= SMO BSP5 10 #?JW LDX 2 BSCHLEN(3) 8 ##4G SMO BSL2 7 ##J6 SLL 2 0 21 #*3Q BNG 2 Q5 [J IF BLOCK IS FREE IE ALLOCATABLE 19 #*HB GEOERR 1,GIVEGIVE [ATTEMPT TO GIVE BLOCK TWICE 8 #B32 Q5 SMO BSP5 19 #BGL ANDS 1 BSCHLEN(3) [UNSET BIT TO MARK BLOCK ISED 8 #C2= BRN Q7 8 #CFW Q3 SMO BSP5 10 #C_G LDX 2 BSCHLEN(3) 8 #DF6 SMO BSL2 7 #DYQ SLL 2 0 19 #FDB BPZ 2 Q6 [J IF BLOCK NOT FREE ALREADY 21 #FY2 GEOERR 1,FREEFREE [ATTEMPT TO FREE AN ALREADY FREED BLK 8 #GCL Q6 SMO BSP5 19 #GX= ORS 1 BSCHLEN(3) [SET BIT TO MARK BLOCK FREE 8 #HBW Q7 LDX 1 BSP4 8 #HWG LDX 2 BSP5 8 #JB6 LDX 3 BSP6 7 #JTQ EXIT 0 0 4 #JW6 ...) 8 #JWG ... FSHCODE AORB 4 #JWW ...( 4 #JX= ...[ 18 #JXL ...[ SUBROUTINE TO GET 'FSHBSBLOCKS' BLOCKS FROM MACHINE 'A' 4 #JY2 ...[ 6 #JYB ...XGET64BLKS 16 #JYQ ... SBX 1 FX1 [ RELATIVISE LINK 8 #J_6 ... SMO FX2 16 #J_G ... STO 1 AWORK2 [ PRESERVE LINK 8 #J_W ... SMO FX2 20 #K2= ... STO 6 AWORK3 [ PRESERVE X6 (PTR. DOWN EMPTYB) 17 #K2L ... LDX 4 BACK1(2) [ GET RESIDENCE NO. 21 #K32 ... NGS 2 A1(2) [ SET 'BSPOI' -VE TO LOCK OUT OTH 20 #K3B ... LDX 2 FX2 [ STORE RES. NO. FOR USE IN ^A^ 21 #K3Q ... STO 4 ACOMMUNE8(2) [ AND GET 'FSHBSBLOCKS' BLOCKS FROM A 16 #K46 ... TRANSBEG FSHBSID,FSHBSAL,4,NOBLOCKS,,ACOMMUNE3 19 #K4G ... GETBSLIS [ BLOCKS FROM MACHIONE 'A' 20 #K4W ... MHUNT 3,BSTB,FULLB [ FIND LIST OF BLOCKS OBTAINED 19 #K5= ... LDN 7 FSHBSBLOCKS [ NO OF NUMBERS TO BE 'MOVED' 5 #K5L ...PUTNXTIN 19 #K62 ... LDX 0 A1+2(3) [ NXT BLOCK NO FROM /FULLB 7 #K6B ... SMO 7 19 #K6Q ... STO 0 BSRLEN-1(2) [ STORE BLOCK NO IN /BSLIST 19 #K76 ... ADN 3 1 [ INCREMENT /FULLB POINTER 18 #K7G ... BCT 7 PUTNXTIN [ DECR. /BSLIST POINTER 17 #K7W ... MHUNTW 3,BSTB,FULLB [ RE-LOCATE /FULLB 19 #K8= ... LDX 7 A1+1(3) [ GET RES. NO. FOR 'GETBSLIS' 20 #K8L ... FREECORE 3 [ FREE /FULLB OBTAINED FROM 'A' 16 #K92 ... FON 3 [ WAKE UP WAITERS 20 #K9B ... LDX 6 AWORK3(2) [ RECOVER POINTER DOWN /EMPTYB 21 #K9Q ... GETBSLIS [ RECOVER POINTER TO /BSLIST BLOCK 8 #K=6 ... SMO FX2 16 #K=G ... LDX 1 AWORK2 [ RECOVER LINK 8 #K=W ... ADX 1 FX1 7 #K?= ... EXIT 1 0 4 #K?L ...) 4 #K#2 ...[ 3 #K#B ... 10 #K*B ST60 STO 7 ACOMMUNE1(2) 10 #KT2 STO 5 ACOMMUNE2(2) 10 #L#L STOZ ACOMMUNE3(2) 10 #LS= ACROSS BSALFAIL,1 4 #M?W ST50 10 #MRG STO 7 ACOMMUNE1(2) 10 #N?6 STO 6 ACOMMUNE2(2) 10 #NQQ STOZ ACOMMUNE3(2) 10 #P=B ACROSS BSALFAIL,2 4 #Q9L # 4 #QP= #END 6 ____ ...723142360002