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