{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: LOADX60)}}
====== LOADX60 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:ALTLEND|ALTLEND]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHECKB|CHECKB]], [[george:macro:CHECKBX|CHECKBX]], [[george:macro:CLEAR|CLEAR]], [[george:macro:FINMOVE|FINMOVE]], [[george:macro:FPCACA|FPCACA]], [[george:macro:FREECORE|FREECORE]], [[george:macro:HUNT2|HUNT2]], [[george:macro:LMASK|LMASK]], [[george:macro:MASK|MASK]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREE|MFREE]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:READED|READED]], [[george:macro:SCANPT|SCANPT]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:T|T]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TRACE|TRACE]], [[george:macro:VFREE|VFREE]], [[george:macro:VFREEW|VFREEW]]
22FL ... SEG LOADX,60,OWEN N JOHN(CENT)
22^= #
23DW SEGENTRY K1LOADX,XENT1
23YG SEGENTRY K2LOADX,XENT2
24D6 #
24XQ #
25CB #DEF T=0
25X2 # LANGUAGE CODES USED IN S/FS CONTAINING BINARY PROGRAM
26BL SFA100 4HA100 [PERMANENT UNIT OF PROGRAM
26W= SFA101 4HA101 [PROGRAM FILE WHICH MAY CONTAIN OVERL
27*W SFA4 4H00A4 [OVERLAY UNIT
27TG #
28*6 ZBUCK #777777 [NO. OF BUCKETS IN LS 3 CHARS.
28SQ ZLENG #17777777
29#B ...N7 7 + G4 [LIMIT OF PERMISSABLE BLK TYPES
29J8 ...#DEF X512=512 [MAX NO OF CHARS FOR MOVEDATA SUBR
29S2 #SKIP G4
2=?L (
2=R= XB9 #100000
2?=W X64 64
2?QG XBN1T7 #40177777
2#=6 SPAREC #73000007
2#PQ MASK #57777700
2*9B XB16LS #177777
2*P2 PERM +GWRITE [PERM USED IN CHECKB
2B8L )
2BN= #
2C7W # LABELS OF ERROR MESSAGES
2CMG NOENT +JNOENT
2D76 RINF +JINFF
2DLQ RCHER +JCHER
2F6B WERRES +GRESLL
2FL2 WRBLK +JWRBLK
2G5L #
2GK= #
2H4W # DEFINITIONS OF WORDS USED IN ADATA/AWKSB
2HJG #
2J46 #DEF WBLOCK=A1 [BLOCK OF FILE IN CORE
2JHQ #DEF WFRAGSIZE=WBLOCK+1 [NO. OF BUCKETS STILL TO BE READ IN
2K3B [ [CURRENT FRAGMENT OF DIRECTORY SUBFIL
2KH2 #DEF NEXTFRAG=WFRAGSIZE+1 [1ST BUCKET OF NEXT FRAGMENT OF DIREC
2L2L [ [SUBFILE
2LG= #DEF NEXTORG=NEXTFRAG+1 [NEXT ORGANIZATIONAL BUCK OF PERM UNI
2L^W #DEF ORGREC=NEXTORG+1 [NEXT ORGANIZATIONAL RECORD IN CURREN
2MFG [ [BUCKET
2M^6 #DEF PROGDEST=ORGREC+1 [PROG ADDRESS IN TYPE 5
2N8Y ...#DEF TABDEST=PROGDEST
2NDQ #DEF REMDATA=PROGDEST+1 [AMT OF DATA STILL TO BE TRANSFERRED
2NYB [ [PRESENT TRANSFER - PRINC FOF TYPE 5
2PD2 #DEF TYPE5BUCK=REMDATA+1 [NO OF CURRENT TYPE5 DATA BUCK
2PMS ...#DEF TABSRCE=TYPE5BUCK
2PXL #DEF WCHECKSUM=TYPE5BUCK+1 [CHECKSUM FOR TYPE5 DATA
2QC= #SKIP G4
2QWW (
2RBG #DEF XQUOTA=WFRAGSIZE [B0-13-PAGES TO BE KEPT IN CORE - 1
2RW6 [B14=1 SOME PAGES LOCKED IN
2S*Q #DEF SPA1=WCHECKSUM+1 [NO OF SPA BUCKETS/WORD ADDR OF SPAS
2STB #DEF SPA2=SPA1+1 [NO OF BUCKET HOLDING SPAS
2T*2 #DEF SPA3=WFRAGSIZE
2TSL #DEF SPA4=NEXTFRAG
2W#= #DEF SPA5=ORGREC
2WDN ...#DEF UNITTYPE=SPA2+1
2WK6 ...[
2WPJ ...[ THIS EXTRA WORD IS A RESULT OF HR 194(B 0979)
2WW2 ...[
2X2D ...REC7 +7 [DEFINES TYPE 7 REC SPECIFIER
2X6W ...[
2X?G )
2XR6 #SKIP G3
2Y=Q #DEF UNITTYPE=WCHECKSUM+1 [TYPE OF FILE CONTAINING OVERLAYS
2YQB [ THE REMAINDER OF THE BLOCK IS USED FOR THE OVERLAY TABLE. INITIALLY
2^=2 [ IT HAS TWO WDS FOR THE PERM UNIT.
2^PL #DEF WKLENGTH=UNITTYPE+3-A1 [INITIAL LENGTH OF ADATA/AWKSB
329= #
32NW # DEFINITIONS OF WORDS USED IN ACTIVITY BLOCK
338G #
33N6 #DEF XLDEX=EXTPS+3 [MAY HOLD 1STBUCK OF DIR S/F
347Q #DEF XLDEXA=EXTPS+4 [CONTAINS SWITCHES
34MB [ B14=1 ON 1ST BUCK OF A DIR S/F FRAGMENT
3572 [ B15=1 SUPP R/S HAS BEEN FOUND
35LL [ B16=1 R/S HAS BEEN FOUND
366= [ B17,B18 ONLY USEFUL FOR G4
36KW [ B17=1 TRANSFERRING TYPE 0 BLOCK
375G [ B18=1 TRANSFERRING OVERLAY DIRECTORY
37K6 [ B19 PERM UNIT HAS BEEN FOUND IN DIR S/F
384Q #DEF NOVERS=ACOMMUNE1 [NO OF OVERLAY UNITS FOUND IN CURRENT
38JB [ [BUCKET OF DIRECTORY S/F
3942 #DEF WBUCKLENG=ACOMMUNE2 [NO OF USEFUL WDS IN CURR BUCK
39HL #
3=3= #
3=GW #
3?2G NSFD
3?G6 # SETS POINTERS TO NEXT SFD IN CURR&NT BUCKET OF DIR S/F.
3?^Q # NORMAL EXIT 1. EXITS 0 IF NO MORE SFD'S IN BUCKET
3#FB [ ENTRY LINK X5
3#^2 [ ABSOLUTE PTR TO LAST REC X3
3*DL [ PTR TO LAST REC REL TO START OF BUCK X4
3*Y= [EXIT LINK X5
3BCW [ X3,4 UPDATED TO NEXT RECORD IF FOUND
3BXG LDX 0 0(3) [1ST WORD OF SFD
3CC6 ANDN 0 #77 [LENGTH OF SFD
3CWQ ADX 3 0 [
3DBB ADX 4 0
3DW2 SMO FX2
3F*L TXL 4 WBUCKLENG
3FT= BCC NSFDX [SFD NOT IN THI2 BUCK
3G#W EXIT 5 1
3GSG NSFDX
3H#6 SMO FX2
3HRQ TXU 4 WBUCKLENG
3J?B BCS XRECLENG [REC HEADER WRONG
3JR2 EXIT 5 0
3K=L #
3KQ= #
3L9W #
3LPG READED
3M96 #
3MNQ # GIVES PTRS TO DESIRED BUCKET WITHIN A 512 WD BLOCK, READING DOWN THE
3N8B # APPROPRIATE BLOCK IF NECESSARY
3NN2 [ ENTRY LINK X5
3P7L [ PTR TO ADATA/AWKSB X2
3PM= [ BUCKET NO. X7
3Q6W [ EXIT LINK X5
3QLG [ PTR TO ADATA/AWKSB X2
3R66 [ PTR TO START OF BUCKET (ABSOLUTE) X3
3RKQ [ PTR TO START OF BUCKET (RELATIVE TO ST OF FILE/FRRB) X6
3S5B [ FIND BUCKET CONTAINING REQUIRED BUCKET IF FILE TREATED AS 4-BLOCK BUCK
3SK2 LDX 6 7
3T4L ADN 6 3
3TJ= SRL 6 2
3W3W LDX 0 WBLOCK(2) [NO OF 4-BLOCK BUCKET IN CORE
3WHG BZE 0 READBLOCK [NONE IN CORE
3X36 BXE 6 0,REDBLOCK [REQUIRED BLOCK IS IN CORE
3XGQ MFREEW FILE,FRRB
3Y2B READBLOCK
3YG2 SBX 5 FX1
3Y^L READED 6,4
3^F= TESTRPN2 OK,XFILEMISS
3^YW MHUNTW 2,ADATA,AWKSB
42DG STO 6 WBLOCK(2)
42Y6 ADX 5 FX1
43CQ REDBLOCK
43XB MHUNTW 3,FILE,FRRB
44C2 LDX 6 7
44WL SBN 6 1 [1ST BUCK NUMBERED 1
45B= SLL 6 7 [*128
45TW ANDN 6 #777 [MODULO 512
46*G ADX 3 6
46T6 EXIT 5 0
47#Q #
47SB #
48#2 #
48RL PERMUNIT
49?= # STORE INFO REGARDING PERM UNIT IN AWKSB
49QW [ ENTRY LINK X5
4==G [ PTR TO SFD X3
4=Q6 [ PTR TO AWKSB X2
4?9Q [ X1=FX1
4?PB [ EXIT SAME
4#92 # THE DATA S/F SHOULD NEVER BE FRAGMENTED
4#NL LDX 0 6(3) [NEXT FRAG OF S/F
4*8= BZE 0 NOTFRAGD
4*MW TRACE 0,DATAFRAG
4B7G NOTFRAGD
4BM6 LDX 0 4(3) [1ST ORGANIZATIONAL BUCK
4C6Q ANDX 0 ZBUCK(1)
4CLB BZE 0 XFILEMISS [SILLY BUCK NO
4D62 STO 0 NEXTORG(2)
4DKL EXIT 5 0
4F5= #
4FJW #
4G4G #
4GJ6 NORGBUCK
4H3Q # GETS THE NEXT ORG BUCK INTO A FILE/FRB
4HHB [ ENTRY LINK X4
4J32 [ PTR TO AWKSB UX2
4JGL [ PTR TO FRB X3
4K2= [ BUCK NO X7
4KFW [ EXIT LINK X5
4K^G [ PTR TO AWKSB X2
4LF6 [ PTR TO FRB X3
4LYQ SBX 4 FX1
4MDB # IF BUCK ISBUCK 2,3,4 OFCURR FRRB OR 1STBUCK OF NEXT FRRB WE USE READED
4MY2 # OTHERWISE WE READ 128 WDS AND LEAVE FRRB ALONE
4NCL LDX 0 7
4NX= ADN 0 2
4PBW SRL 0 2
4PWG BXE 0 WBLOCK(2),SEQUENCE
4QB6 FREECORE 3 [OLD FRB
4QTQ READED 7,1
4R*B TESTRPN2 OK,XFILEMISS
4RT2 MHUNTW 2,ADATA,AWKSB
4S#L MHUNTW 3,FILE,FRRB
4SS= NAME 3,FILE,FRB
4T?W LDX 0 A1(3) [NO OF WORDS IN BUCK
4TRG SBN 0 4
4W?6 BNG 0 XORGHEAD [NO ORG RECS IN BUCK
4WQQ SBN 0 125
4X=B BPZ 0 XORGHEAD [TW MANY RECS IN BUCKET
4XQ2 LDX 5 4 [MOVE LINK
4Y9L BRN ORGCHEK
4YP= SEQUENCE
4^8W CALL 5 READED
4^NG LDX 5 4 [KEEP LINK
5286 # MOVES ORG BUCK INTO FRB
52MQ LDX 0 A1(3) [NO OF WORDS IN BUCK
537B SBN 0 4
53M2 BNG 0 XORGHEAD [NO ORG RECS IN BUCK
546L SBN 0 125
54L= BPZ 0 XORGHEAD [TO MANY RECS IN BUCK
555W MHUNTW 1,FILE,FRB
55KG LDN 4 A1(1)
5656 ADN 3 A1
56JQ SMO 0(3)
574B MOVE 3 0
57J2 LDX 3 1 [X3 -> FILE/FRB
583L ORGCHEK
58H= # VALIDATE CONTENTS OF ORG BUCK
592W LDN 1 A1+2(3)
59GG LDX 0 A1(3)
5=26 SBN 0 2
5=FQ SMO 0
5=^B SUM 0 0
5?F2 BNZ 0 XCHS [CHECKSUM ERROR IN ORG BUCKET
5?YL ADX 5 FX1
5#D= EXIT 5 0
5#XW #
5*CG #
5*X6 #
5BBQ MOVEDATA
5BWB #
5CB2 # MOVES DATA INTO AN OBJECT PROGR1M
5CTL [ LINK X7
5D*= [ START OF DATA X3
5DSW [ START ADDR IN OP X4
5F#G [ LENGTH OF DATA X5
5FS6 [ EXIT LINK X7
5G?Q [ PTR TO AWKSB X2
5GRB [ X5 UNTHANGED
5H?2 [ X6 DESTROYED IN G4
5HQL SBX 7 FX1
5J== FPCACA 2,FX2
5JPW #SKI T
5K9G (
5KP6 TRACE 3,FROM
5L8Q TRACE 4,TO
5LNB TRACE 5,HOW MANY
5M82 )
5MML LDN 1 8
5N7= TXL 4 1
5NLW BCC NOACCS [JUMP IF NOT ACCESSING ACCS.
5P6G SMO FX2
5PL6 ORS 1 XLDEXA [SET MARKER TO SHOW THAT PROGRAM SETS
5Q5Q [UP ITS OWN ACCS.
5QKB NOACCS
5R52 LDX 1 FX1
5RJL CHECKB 4,5,XRESV,2,PERM(1),WCOOR,,2
5S4= MOVE
5SHW FINMOVE 2,4,3,5,HLOCK1,2
5T3G #SKI G4
5TH6 (
5W2Q MHUNTW 3,ADATA,AWKSB [RELOCATE WORK BLOCK
5WGB LDX 6 XQUOTA(3)
5X22 BNG 6 ZLK9 [J IF SUFFICIENT PAGES LOCKED IN CORE
5XFL BNZ 6 ZLK4 [J IF SOME PAGES ALREADY LOCKED
5X^= LDX 0 HLOCK1+1(2) [WE DON'T LOCK PAGE 0
5YDW BZE 0 ZLK9
5YYG HUNT2 1,BSTB,BSCB,2
5^D6 LDX 0 AMAXSIZE(1)
5^XQ BPZ 0 ZLK2
62CB LDX 0 HLOCK1+1(2)
62X2 TXL 0 BIT11 [OR IN THE CASE OF A SPARSE
63BL BCS ZLK8 [KEEP PAGES BELOW 4K.
63W= ZLK2 LDX 6 HLOCK1+1(2)
64*W STO 6 HLOCK2+1(2)
64TG LDX 6 AQUOTA(1)
65*6 SLL 6 10 [SET X6 TO INDICATE NO OF PAGES TO BE
65SQ SBN 6 3584 [KEPT IN CORE - QUOTA-3.& SET B14
66#B LDN 0 CHREAD+CHWRITE [STORE PERMISSION IN 2ND HLOCK AREA
66S2 STO 0 HLOCK2(2)
67?L BNG 6 ZLK8
67R= ZLK4 LDX 3 HLOCK2+1(2) [START OF AREA ALREADY LOCKED
68=W LDX 4 HLOCK2(2)
68QG ANDX 4 B2T13 [LENGTH OF AREA
69=6 ADX 3 4
69PQ TXL 3 HLOCK1+1(2) [JUMP UNLESS THE CURRENT AREA
6=9B BCS ZLK8 [CONTAINS A PAGE WHICH FOLLOWS ON
6=P2 LDX 0 HLOCK1(2) [IMMEDIATELY AFTER AREA ALREADY
6?8L ANDX 0 B2T13 [LOCKED
6?N= ADX 0 HLOCK1+1(2)
6#7W TXL 3 0
6#MG BCC ZLK8
6*76 SBX 3 4 [ADD ONE PAGE TO THE AREA ALREADY
6*LQ ADN 4 1024 [LOCKED
6B6B CLEAR 2,0,HLOCK2,2
6BL2 LDX 1 FX1
6C5L CHECKB 3,4,(GEOERR),2,PERM(1),(GEOERR),HLOCK2,2
6CK= SBN 6 1024
6D4W ZLK7 BPZ 6 ZLK4
6DJG ZLK8
6F46 ZLK9 CLEAR 2,0,HLOCK1,2
6FHQ )
6G3B MHUNTW 2,ADATA,AWKSB
6GH2 #SKIP G4
6H2L STO 6 XQUOTA(2)
6HG= ADX 7 FX1
6H^W EXIT 7 0
6JFG #SKI G4
6J^6 (
6KDQ WCOOR
6KYB # FIND PTRS AGAIN IF CHECKA COORDINATES
6LD2 FPCACA 2
6LXL LDN 0 #140 [TYPE 0 AND OVERLAY DIR BITS
6MC= SMO FX2
6MWW ANDX 0 XLDEXA
6NBG BNZ 0 WCOOR1 [NOT DEALING WITH TYPE 5
6NW6 MHUNTW 3,FILE,FRRB
6P*Q ADN 3 A1
6PTB ADX 3 6
6Q*2 BRN MOVE
6QSL WCOOR1
6R#= SRC 0 7
6RRW BPZ 0 WCOOR2 [NOT DEALING WITH TYPE 0
6S?G MHUNTW 3,FILE,FRB
6SR6 MHUNTW 1,ADATA,AWKSB
6T=Q ADN 3 A1+2
6TQB ADX 3 ORGREC(1)
6W=2 BRN MOVE
6WPL WCOOR2 [SETTING UP OLAY TABLE
6X9= MHUNTW 3,ADATA,AWKSB
6XNW ADN 3 UNITTYPE
6Y8G BRN MOVE
6YN6 )
6^7Q #
6^MB #
7272 #
72LL XENT1
736= # SET UP WORKING SPACE BLOCK
73KW MHUNTW 1,FILE,ENT
745G LDCT 7 #77
74K6 ANDX 7 ETM(1) [REMEMBER FILE TYPE
754Q SETNCORE WKLENGTH,2,ADATA,AWKSB
75JB STOZ WBLOCK(2) [MARK NO FRRB'S IN CORE
7642 STO 7 UNITTYPE(2) [NEEDED IF PROG OVERLAID
76HL # A BINARY PROGRAM IS HELD IN A COMPOSITE SUBFILE. THE 1ST DIRECTORY S/F
773= # STARTS IN BUCKET 1 AND THE 1ST SFD IS FOR THE PROGRAM S/F. IT IS EITHE
77GW # LANGUAGE A100 FOR A DATA S/F CONTAINI THE PROGRAM (NON-OVERLAID) OR IS
782G # LANGUAGE A101 FOR A DIRECTORY S/F WITH SFD'S FOR DATA S/F'S HOLDING
78G6 # OVERLAY UNITS (POSSIBLY NONE) AND A PERMANENT UNIT
78^Q LDN 7 1 [BUCKET NO.
79FB CALL 5 READED [GET 1ST BUCKET
79^2 LDX 0 A1+2+6(3) [NEXT FRAGMENT OF TOP LEVEL DIRECTORY
7=DL BZE 0 NOTFRAGC
7=Y= TRACE 0,COMPFRAG
7?CW NOTFRAGC
7?XG # LOOK AT THE FIRST SFD IN THE COMPOSITE FILE
7#C6 # REMEMBER 1ST BUCK IN CASE S/F IS A DIRECTORY S/F
7#WQ LDX 7 A1+2+8+4(3) [1ST BUCK OF THIS S/F
7*BB ANDX 7 ZBUCK(1)
7*W2 # IF WD 5 OF R/S = 0 THE BUCK MUST BE STORED IN OP WD 40- REMEMBER IT
7B*L SMO FX2
7BT= STO 7 XLDEX
7C#W LDX 0 A1+2+8+8(3) [LANGUAGE
7CSG TRACE 0,FILELANG
7D#6 BXE 0 SFA101(1),NFRAGD [TOP LEVEL DIR IS NOT PERM UNIT
7DRQ BXU 0 SFA100(1),XSFCODE [ILLEGAL LANGUAGE CODE
7F?B ADN 3 A1+2+8 [X3 -> SFD
7FR2 CALL 5 PERMUNIT [REMEMBER START BUCK ETC
7G=L # DONT ALTER _WD 40 IF NOT OVERLAID
7GQ= SMO FX2
7H9W STOZ XLDEX
7HPG BRN RRS
7J96 NFRAGD
7JNQ #
7K8B # START IN NEXT FRAGMENT OF TOP-LEVEL DIRECTORY S/F
7KN2 LDN 0 #1000
7L7L SMO FX2
7LM= ORS 0 XLDEXA [SET MARK FOR 1ST BUCK IN FRAGMENT
7M6W BRN NDIRBUCK1
7MLG NDIRBUCK
7N66 NGN 5 #1001
7NKQ SMO FX2
7P5B ANDS 5 XLDEXA [REMOVE MARK FOR 1ST BUCK IN FRAGMENT
7PK2 #
7Q4L # READ NEXT BUCKET IN THIS FRAGMENT
7QJ= ADN 7 1 [BUCKETS IN FRAGMENT ARE SEQUENTIAL
7R3W STO 0 WFRAGSIZE(2) [CORRECT NO OF BUCKETS LEFT
7RHG NDIRBUCK1
7S36 CALL 5 READED [NEXT BUCKET OF DIRECTORY S/F
7SGQ LDX 0 A1+1(3)
7T2B ANDN 0 #7777 [LENGTH OF BUCKET
7TG2 SMO FX2
7T^L STO 0 WBUCKLENG
7WF= SBN 0 129
7WYW BPZ 0 XBUCKLENG [ERROR IF > 128
7XDG SMO FX2
7XY6 STOZ NOVERS [INITIALIZE COUNT OF OLAY UNITS IN BU
7YCQ LDN 4 2 [X4 -> NEXT RECORD IN BUCKET (REL TO
7YXB ADN 3 A1+2 [X3 -> NEXT REC ABSOLUTELY
7^C2 LDN 0 #1000 [1ST BUCK IN FRAGMENT
7^WL SMO FX2
82B= ANDX 0 XLDEXA
82TW BZE 0 NODD [1ST REC NOT A D.D.
83*G # PICK UP THE NO. OF BUCKS IN THIS FRAGMENT AND THE 1ST BUCK OF NEXT
83T6 # FRAGMENT FROM DIRECTORY DESCRIPTION
84#Q SMO FX2
84SB LDX 0 WBUCKLENG
85#2 SBN 0 10
85RL BNG 0 XBUCKLENG [ERROR IF NO DIR DESC.
86?= LDX 0 0(3)
86QW ANDN 0 #77
87=G SBN 0 8
87Q6 BNZ 0 XRECLENG [D.D. MUST BE 8 WDS
889Q LDX 0 5(3) [NO OF BUCKS IN FRAGMENT
88PB ANDX 0 ZBUCK(1)
8992 BZE 0 XFRAGSIZE [ERROR IF NONE
89NL STO 0 WFRAGSIZE(2)
8=8= LDX 0 6(3) [1ST BUCK OF NEXT FRAGMENT
8=MW STO 0 NEXTFRAG(2)
8?7G NEXTSFD
8?M6 CALL 5 NSFD [MOVE PTRS TO NEXT SFD
8#6Q BRN ZENDBUCK [NO MORE IN BUCKET
8#LB NODD
8*62 # EMPTY SPACE SFD HAS ZERO IN 1ST WD OF S/F NAME. IGNORE EMPTY SPACH
8*KL LDX 0 1(3)
8B5= BZE 0 NEXTSFD
8BJW LDX 0 8(3) [LANGUAGE OF S/F
8C4G TRACE 0,S/FLANG
8CJ6 BXU 0 SFA100(1),OVERCOUNT [NOT PERM UNIT
8D3Q # SET MARK THAT PERM UNIT HAS BEEN FOUND, REMEMBER SIZE AND STARTING BUC
8DHB # AND THEN CONTINUE DEALING WITH OVERLAYS
8F32 LDN 0 #20
8FGL SMO FX2
8G2= ANDX 0 XLDEXA
8GFW BNZ 0 X2PERMS [THIS IS 2ND PERM UNIT
8G^G LDN 0 #20
8HF6 SMO FX2
8HYQ ORS 0 XLDEXA
8JDB CALL 5 PERMUNIT [REMEMBER DETAILS OF PERM UNIT
8JY2 BRN NEXTSFD
8KCL OVERCOUNT
8KX= SRL 0 12
8LBW BXU 0 SFA4(1),XSFCODE [NOT AN OVERLAY UNIT EITHER
8LWG LDN 0 1
8MB6 SMO FX2
8MTQ ADS 0 NOVERS
8N*B BRN NEXTSFD
8NT2 ZENDBUCK
8P#L #
8PS= # AT THE END OF EACH DIRECTORY S/F BUCK WE COLLECT THE INFORMATION RE EA
8Q?W # OVERLAY UNIT WHICH MAY LATER BE STORED IN OVERLAY DIRECTORY TABLE OF O
8QRG SMO FX2
8R?6 LDX 5 NOVERS
8RQQ BZE 5 NOOVERS [NO OVERLAY UNITS IN THIS BUCK
8S=B TRACE 5,NO.OVERS
8SQ2 # LENGTHEN AWKSB FOR EXTRA INFO. - 2 WDS PER OVERLAY
8T9L SLL 5 1
8TP= LDX 3 ALOGLEN(2)
8W8W ADX 3 5
8WNG LDX 4 2
8X86 ALTLEN 4,3,ADATA,AWKSB
8XMQ MHUNTW 3,FILE,FRRB
8Y7B ADX 3 6 [X3 -> START OF BUCK
8YM2 ADN 3 A1+2+8
8^6L LDN 4 2+8
8^L= # IF NOT 1ST BUCK IN FRAGMENT THERE IS NO DIR DESC
925W LDN 0 #1000
92KG ANDX 0 XLDEXA(2)
9356 BNZ 0 YBUCK1
93JQ SBN 3 8 [RESET PTRS TO 1ST REC
944B SBN 4 8 [ = 1ST SFD
94J2 YBUCK1
953L MHUNTW 2,ADATA,AWKSB
95H= ADX 2 ALOGLEN(2)
962W SBN 2 2 [ALLOW FOR PERM UNIT SPACE
96GG SBX 2 5 [X2 -> START OF NEW AREA
9726 NEXTOLAY
97FQ LDX 0 1(3)
97^B BZE 0 NOTOVER [MISS OUT EMPTY SPACE SFD
98F2 LDX 0 8(3)
98YL BXE 0 SFA100(1),NOTOVER [MISS OUT PERM UNIT
99D= LDX 0 15(3) [AREA AND UNIT NOS.
99XW STO 0 A1(2)
9=CG LDX 0 4(3) [1ST BUCK
9=X6 ANDX 0 ZBUCK(1)
9?BQ STO 0 A1+1(2)
9?WB ADN 2 2 [SET X2 TO NEXT ENTRY IN OLAY TABLE
9#B2 NOTOVER
9#TL LDX 6 2 [REMEMBER POS IN BLK
9**= MHUNTW 2,ADATA,AWKSB
9*SW CALL 5 NSFD [SET PTRS TO NEXT SFD
9B#G BRN NOOVERS [NO MORE OVERLAYS
9BS6 LDX 2 6 [GET BACK BLK PTR
9C?Q BRN NEXTOLAY
9CRB NOOVERS
9D?2 LDX 0 WFRAGSIZE(2)
9DQL BCT 0 NDIRBUCK [MORE BUCKS IN THIS FRAGMENT
9F== LDX 7 NEXTFRAG(2) [1ST BUCK OF NEXT FRAGMENT
9FPW BNZ 7 NFRAGD [NO MORE FRAGMENTS IF ZERO
9G9G # WE HAVE FINISHED THE DIRECTORY S/F
9GP6 LDN 0 #20
9H8Q SMO FX2
9HNB ANDX 0 XLDEXA
9J82 BZE 0 XPERM [THERE WAS NO PERMANENT UNIT
9JML # SET ENTRY FOR PERM UNIT IN O'LAY TABLE
9K7= RRS
9KLW LDX 7 NEXTORG(2) [1ST BUCK
9L6G ADX 2 ALOGLEN(2)
9LL6 SBN 2 2
9M5Q STOZ A1(2) [AREA/UNIT=0 FOR PERM UNIT
9MKB STO 7 A1+1(2)
9N52 # READ 1ST ORGANIZATIONAL BUCK (CONTAINING R/S AND PERHAPS /UPP R/S)
9NJL # AND CHECK ITS CONTENTS. PASS BACK TO LDSTART
9P4= SETNCORE 128,3,FILE,FRB
9PHW MHUNTW 2,ADATA,AWKSB
9Q3G LDX 7 NEXTORG(2) [BUCK NO
9QH6 CALL 4 NORGBUCK
9R2Q # WE DONT WANT TO LEAVE ALARGE LBLOCK IN COPE WHILE GETTING COPE FOR O.P
9RGB STOZ WBLOCK(2)
9S22 MFREEW FILE,FRRB
9SFL ACROSS LDSTART,5
9S^= #
9TDW #
9TYG #
9WD6 XENT2
9WXQ SETNCORE 128,3,FILE,FRB [TO HOLD ORG BUCKETS
9XCB MHUNTW 2,ADATA,AWKSB
9XX2 #SKI G4
9YBL (
9YW= STOZ SPA1(2) [SET NO SPAS MARK
9^*W STOZ XQUOTA(2) [INIT 'PAGES TO BE KEPT IN CORE' IND
9^TG )
=2*6 LDX 7 NEXTORG(2) [NEXT ORGANIZATIONAL BUCKET
=2SQ BRN READORG
=3#B NORGREC
=3S2 MHUNTW 3,FILE,FRB
=4?L LDX 4 ORGREC(2) [PTR TO LAST REC
=4R= SMO 4
=4T8 ... LDX 6 A1(3)
=4X6 ...[
=4^4 ...[ THIS IS A RESULT OF HR 194(B 0979)
=532 ...[ CAUSED BY FACT TYPE 7 DOES NOT HAVE A WORD COUNT IN HEADER
=54Y ...[
=56W ...#SKI G4
=58S ...(
=5=Q ... LDCH 5 6 [FIND TYPE
=5#3 ... SMO FX1
=5*# ... BXU 5 REC7,NTYP7
=5BL ... SMO 4 [ITS A TYPE 7 SO WE EXTRACT COUNT
=5DJ ... LDX 6 A1+1(3)
=5GG ... BRN REC7B
=5JD ...NTYP7
=5LB ...)
=5N# ...[
=5QG SRL 6 12
=6=6 ANDN 6 #77
=6FY ...REC7B
=6PQ ADX 4 6
=79B BXL 4 A1(3),NORG [MORE RECS IN THIS BUCK
=7P2 LDX 7 NEXTORG(2) [THIS BUCK
=88L ADX 7 A1+1(3)
=8N= STO 7 NEXTORG(2)
=97W READORG
=9MG BZE 7 XENDORG
==76 CALL 4 NORGBUCK
==LQ LDN 4 3
=?6B NORG
=?L2 LDX 1 FX1
=#5L # GET REC LENGTH FOR ALL TYPE ROUTINES
=#K= SMO 4
=*4W LDX 6 A1(3) [BLOCK SPECIFIER
=*6N ... LDCH 5 6 [BLOCK TYPE
=*8G ...#SKI G4
=*=# ...(
=*#6 ...[
=**Y ...[ THIS TOO IS CAUSED BY HR 194(B 0979)
=*CQ ...[ AND THE FACT TYPE 7 IS NON STANDARD RECORD TYPE
=*FJ ...[ DONE 27.SP.74 :CENT
=*HB ...[
=*K8 ... BXU 5 REC7(1),NTYP7A [J. IF NOT TYPE 7
=*M2 ... SMO 4
=*NS ... LDX 6 A1+1(3)
=*QL ... BRN REC7A [THAT PUTS NUMBER OF WDS IN X6
=*SD ...NTYP7A
=*W= ...)
=*Y4 ...[
=*^W ...
=B46 SRL 6 12
=BHQ ANDN 6 #77 [LENGTH OF ORG REC
=BRJ ...REC7A
=C3B NGN 0 #101
=CH2 SMO FX2
=D2L ANDS 0 XLDEXA [REMOVER MARKER FOR PARTICULAR TYPES
=DG= LDX 0 A1(3)
=D^W SBX 0 4
=FFG SBX 0 6
=F^6 BNG 0 XORGHEAD [PART OF ORG REC NOT WITHIN HEADER
=GDQ ADX 3 4 [X3 -> START OF NEXT ORG REC
=GYB STO 4 ORGREC(2) [REMEMBER PTR TO REC WITHIN BUCK
=HD2 BXGE 5 N7(1),XBLOCKTYPE [CHECK BLOCK TYPE
=HXL #SKI T
=JC= TRACE 5,TYPE
=JWW # USE BLOCK TYPE IN X5 TO JUMP TO APPROPRIATE ROUTINE WITH REC LENGTH IN
=KBG SMO 5
=KW6 BRN TABTYP [BRN TO ROUTINE APPROPRIATE FOR TYPE
=L*Q TABTYP
=LTB BRN TYPE0
=M*2 BRN TYPE1
=MSL BRN TYPE2
=N#= BRN TYPE3
=NRW BRN XTYPE4 [TYPE 4 ILLEGAL ON PERM UNIT
=P?G BRN TYPE5
=PB5 ... BRN TYPE6
=PDN ...[
=PH? ...[ THE FOLLOWING HAS BEEN ALTERED DUE TO HR 194 ET AL(B 0979)
=PKW ...[ THAT IS THE ADDITIONAL 'BRN ' BELOW AND THE SETTING
=PNF ...[ OF 'N7 ' .AS BEFORE IN GEORGE 4 IF AND SPA BLOCK
=PR4 ...[ WAS FOUND BEFORE THE REAT OF BINARY PROG AN ERROR
=PTM ...[ WAS WRONGLY REPORTED
=PY= ...[ DONE 18.SEPT.74 :CENT
=Q2T ...[
=Q5D ... BRN NORGREC
=Q83 ...[
=Q=Q #
=QQB #
=R=2 TYPE0
=RPL # TYPE 0 MUST BE 3 TO 29 WDS LONG
=S9= SBN 6 3
=SNW BNG 6 XRECSIZE
=T8G SBN 6 27
=TN6 BPZ 6 XRECSIZE
=W7Q ADN 6 28 [NO OF WORDS OF DATA
=WMB SMO A1+1(3)
=X72 LDN 4 0 [X4 -> PROG ADDRESS
=XLL LDX 5 6
=Y6= ADN 3 A1+2 [X3 -> START OF DATA
=YKW LDN 0 #100
=^5G SMO FX2
=^K6 ORS 0 XLDEXA [SET TYPE 0 SWITCH
?24Q CALL 7 MOVEDATA
?2JB BRN NORGREC
?342 #
?3HL #
?43= TYPE1
?4GW # WE COME THROUGH HERE FOR THE R/S IN MAIN PART OF LOAD IN ORDER TO GET
?52G # THE POINTERS RIGHT
?5G6 LDN 0 #200
?5^Q SMO FX2
?6FB ANDX 0 XLDEXA
?6^2 BNZ 0 X2RS [2ND R/S - ERROR
?7DL LDN 0 #200
?7Y= SMO FX2
?8CW ORS 0 XLDEXA
?8XG BRN NORGREC
?9C6 #
?9WQ #
?=BB TYPE2
?=W2 TYPE3
??*L # TYPE 2 AND 3 ENTRY BLOCKS MUST BE 2 WDS LONG
??T= SBN 6 2
?##W BNZ 6 XRECSIZE
?#SG # MOVE ENTRY BLOCK TO START OF __ FRB FOR LOADFIN
?*#6 LDX 4 A1(3)
?*RQ LDX 5 A1+1(3)
?B?B #SKIP G4
?BR2 (
?C=L LDX 0 SPA1(2) [J IF SPECIAL PERM AREAS
?CQ= BNZ 0 SPA [-IF THERE ARE PROG IS NOT OVERLAYED
?D9W )
?DPG MHUNTW 1,FILE,FRB
?F96 XENDSPAS
?FNQ STO 4 A1(1)
?G8B STO 5 A1+1(1)
?GN2 # OVERLAY PROGS MUST HAVE AN OVERLAY DIRECTORY TABLE SET UP
?H7L # IF WD 5 OF R/S IS NON-ZERO IT CONTAINS THE START ADDRESS FOR THE INF C
?HM= # EARLIER TO BE MOVE TO (SEE 1900 PRM)
?J6W # OTHERWISE THE 1ST BUCK NO FOR THE DIRECTORY S/F IS PUT IN WD 40
?JLG # AND THE PROGRAM MUST BE RESUMED TO SET UP THE TABLE
?K66 FPCACA 3,FX2
?KKQ HUNT2 3,AOBRES,0
?L5B LDX 1 A1+5(3)
?LK2 LDX 3 2 [X3 -> TO ADATA/AWKSB
?M4L LDN 4 0(1) [ADDR IN B2-23
?MJ= LDX 5 ALOGLEN(3)
?N3W SBN 5 UNITTYPE-A1
?NHG BNZ 1 OLAYDIR
?P36 SMO FX2
?PGQ LDX 6 XLDEX
?Q2B BZE 6 NOLAID
?QG2 LDN 4 40 [ADDR IN OP
?Q^L LDN 5 1 [NO OF WDS
?RF= STO 6 UNITTYPE(3) [ADDR OF WD TO BE MOVED
?RYW OLAYDIR
?SDG #SKI T
?SY6 TRACE 5,TOTOVERS
?TCQ LDN 0 #40
?TXB SMO FX2
?WC2 ORS 0 XLDEXA
?WWL ADN 3 UNITTYPE [X3 PTS TO START OF DATA
?WY5 ...MVSTART
?W^J ... SBN 5 X512
?X33 ... BNG 5 MVREST
?X4G ... STO 5 REMDATA(2)
?X5^ ... LDX 7 3 [X3 = GEORGE ADDRESS
?X7D ... SBX 7 2 [X7 = REL ADD IN ADATA/AWKSB
?X8X ... STO 7 TABSRCE(2) [SAVE THIS IN CASE COORDINATE
?X=B ... STO 4 TABDEST(2) [SAVE PROG ADD - G4 MAY OVERWRITE
?X?T ... LDN 5 X512 [MOVE IN 512 WORD BLOCKS
?X*# ... CALL 7 MOVEDATA
?XBR ... LDX 5 REMDATA(2)
?XD= ... LDX 4 TABDEST(2) [RESTORE AND INCREMENT
?XFP ... ADN 4 X512 [DESTINATION ADDRESS
?XH8 ... LDX 3 TABSRCE(2) [RELATIVE SOURCE ADDRESS
?XJM ... ADX 3 2 [ABSOLUTE
?XL6 ... ADN 3 X512 [INCREMENT
?XMK ... BRN MVSTART
?XP4 ...MVREST
?XQH ... ADN 5 X512
?XS2 ... CALL 7 MOVEDATA
?XTW NOLAID
?Y*G FREECORE 2 [ADATA/AWKSB
?YT6 XEND
?^#Q VFREE FILE,FRRB
?^SB ACROSS LOADFIN,1
#2#2 #
#2RL #
#3?= TYPE5
#3QW # TYPE 5 RECORD MUST BE 5 WORDS
#4=G SBN 6 5
#4Q6 BNZ 6 XRECSIZE
#59Q # THE DATA FOR A TYPE 5 BLOCK IS IN CONSECUTIVE BUCKETS STARTING BUT NO
#5PB # NECESSARILY ENDING, ON A BUCKET BOUNDARY.
#692 # WE USE A LOOP TRANSFERRING THE CONTENTS OF A 512-WD BS BLOCK IN EACH P
#6NL # (THE METHOD DEPENDS ON S/R READED READING A WHOLE BS BLOCK)
#78= # WE CHECKA AND CLEAR WITH EACH TRANSFER TO REDUCE THE NO OF PAGES LOCKE
#7MW # IN GEORGE 4
#87G SMO A1+1(3) [DESTINATION IN PROGRAM
#8M6 LDN 0 0
#96Q STO 0 PROGDEST(2)
#9LB LDX 0 A1+2(3) [AMOUNT OF DATA
#=62 ANDX 0 ZLENG(1)
#=KL BZE 0 XNODATA
#?5= STO 0 REMDATA(2)
#?JW LDX 0 A1+3(3) [NEG CHECKSUM
##4G STO 0 WCHECKSUM(2)
##J6 LDX 7 NEXTORG(2) [NO OF CURRENT BUCKET
#*3Q ADX 7 A1+4(3) [1ST BUCK OF DATA
#*HB MOREDATA
#B32 STO 7 TYPE5BUCK(2)
#BGL CALL 5 READED
#C2= ADN 3 A1 [START OF DATA IN FRRB
#CFW LDX 4 PROGDEST(2) [
#C^G # X6 -> START OF BUCKET WITHIN FRRB. THE AMOUNT OF DATA TO BE TRANSFERRE
#DF6 # FROM THIS FRRB IS MIN(REMDATA,512-[X6])
#DYQ LDN 5 512
#FDB SBX 5 6
#FY2 BXL 5 REMDATA(2),STILLMORE
#GCL LDX 5 REMDATA(2)
#GX= STILLMORE
#HBW LDX 1 3
#HWG SMO 5
#JB6 SUM 0 0
#JTQ ADS 0 WCHECKSUM(2) [ADD THIS LOT TO TOTAL CHECKSUM
#K*B BVCR £ [IGNORE OVERFLOW
#KT2 CALL 7 MOVEDATA
#L#L LDX 0 REMDATA(2)
#LS= SBX 0 5
#M?W BZE 0 T5END [NO MORE DATA FOR THIS TYPE5
#MRG STO 0 REMDATA(2) [UPDATE AMT LEFT TO TRANSFER
#N?6 ADS 5 PROGDEST(2) [RES&T DEST ADD IN PROGRAM
#NQQ # TURN COUNT INTO NO OF BUCKETS AND ADD TO 7 FOR NEXT BUCKET. (LAST MOVE
#P=B # MUST HAVE BEEN MULT OF 128)
#PQ2 SRL 5 7
#Q9L LDX 7 TYPE5BUCK(2) [ADDR OF LAST BUCKET
#QP= ADX 7 5
#R8W BRN MOREDATA
#RNG T5END
#S86 LDX 0 WCHECKSUM(2)
#SMQ BZE 0 NORGREC
#T7B BRN XCHS [CHECKSUM ERROR
#TM2 #
#W6L #
#WL= TYPE6
#X5W # TYPE 6 MUST BE 8 WDS LONC
#XKG SBN 6 8
#Y56 BNZ 6 XRECSIZE
#YJQ LDN 0 #400
#^4B SMO FX2
#^J2 ANDX 0 XLDEXA
*23L BNZ 0 X2SRS [2ND SUPP R/S
*2H= LDN 0 #400
*32W SMO FX2
*3GG ORS 0 XLDEXA [SET MARKER
*426 #
*4FQ # IN GEORGE 4 SPA1 & SPA2 ARE SET UP TO HOLD THE LOCATION OF
*4^B # THE BUCKETS DEFINING THE PROGRAMS SPECIAL PERM.AREAS.
*5F2 #
*5YL #SKIP G4
*6D= (
*6XW LDX 6 A1+4(3) [ADDR -F SPAS
*7CG ANDX 6 XBN1T7(1)
*7X6 BZE 6 TYP6C [J IF NO SPAS
*8BQ LDXC 6 6
*8WB BZE 6 XNOSPAS [ERROR IF PP BIT BUT NO SPAS
*9B2 LDX 0 6
*9TL SRL 0 15
*=*= BNZ 0 TYP6A [J UNLESS SPAS IN THIS BUCKET
*=SW ADX 6 XB9(1) [NO OF BUCKETS = 1
*?#G BRN TYP6B
*?S6 TYP6A LDX 0 6
*#?Q ANDX 0 BSP16 [REL BUCKET NO OF SPAS
*#RB ERS 0 6 [SET'WITHIN BUCKET ADDR TO ZERO'.
**?2 TYP6B ADX 0 NEXTORG(2) [ABS BUCKET NO.WITH SPAS
**QL STO 0 SPA2(2) [SET SPA1 & 2
*B== STO 6 SPA1(2)
*BPW TYP6C
*C9G )
*CP6 FPCACA 3,FX2
*D8Q HUNT2 3,AOBRES,0
*DNB LDX 0 ALOGLEN(3)
*F82 SBN 0 24
*FML BZE 0 NORGREC [SUPP R/S ALREADY DEALT WITH BY LDSTA
*G7= ALTLEND 3,24
*GLW FPCACA 1,2
*H6G HUNT2 3,AOBRES,0,1
*HL6 MHUNTW 2,FILE,FRB
*J5Q ADN 2 A1
*JKB ADX 2 4 [X2 ->TYPE 6 REC
*K52 ADN 3 A1+16
*KJL MOVE 2 8
*L4= BRN NORGREC
*LHW #
*M3G #
*MH6 #
*N2Q # THIS SECTION READS THE BUCKETS DEFINING A PROGRAMS SPECIAL
*NGB # PERMISSION AREAS AND INSERTS THE APPROP PERM BITS IN THE PAGE
*P22 # TABLES.
*PFL # WORKING SPACE USED IS AS FOLLOWS
*P^= # SPA1 -REL PTR TO RECORD BEING PROCESSED
*QDW # SPA2 -NO OF BUCKET BEING PROCESSED
*QYG # SPA3 -NOT USED ANYMORE
*RD6 # SPA4 -REL PTR TO END OF BUCKET
*RXQ # SPA5 -END OF PROG-FROM RQS
*SCB #
*SX2 #
*TBL # IT SHOULD CHECK (BUT DOESN'T) THAT BUCKET HEADER CORRECT.
*TW= #
*W*W #
*WTG #SKIP G4
*X*6 (
*XSQ SPA
*Y#B LDX 3 FX2
*YS2 STO 4 AWORK1(3) [WE PRESERVE ENTRY BLOCK IN AWORK
*^?L STO 5 AWORK2(3) [WRDS & WHEN SPAS HAVE BEEN DEALT
*^R= [WITH MOVE IT BACK INTO AN FRB
B2=W ANDX 0 BSP16
B2QG STO 0 SPA1(2)
B3=6 FPCACA 1,FX2
B3PQ HUNT2 1,AOBRES,0 [EXTRACT CORE REQ WORD FROM RQS
B49B LDX 0 A1+3(1) [& STORE IN WORKING BLOCK
B4P2 LDX 1 FX1
B58L SRC 0 9
B5N= ANDX 0 MASK(1)
B67W STO 0 SPA5(2)
B6MG #SKIP
B776 (
B7LQ # THIS CODE WAS INCLUDED IN AN ATTEMPT TO TAKE ADVANTAGE OF ANY
B86B # INFO LEFT IN CORE BY THE EARLIER PARTS OF LOADX.
B8L2 # IT WAS REMOVED WHEN A CASE WAS ENCOUNTER&D WHERE THERE WAS NO
B95L # FILE,FRRB BLOCK AROUND
B9K= LDX 0 SPA2(2)
B=4W TXU 0 NEXTORG(2) [J IF SPAS CONTAINED IN CURRENT BCKET
B=JG BCC Z404
B?46 ADN 0 3
B?HQ SRL 0 2
B#3B TXU 0 WBLOCK(2) [J UNLESS FIRST SPA RECORD CONTAINED
B#H2 BCS Z408 [ IN FRRB
B*2L MHUNTW 1,FILE,FRB [LOCATE BLOCKS
B*G= MHUNTW 3,FILE,FRRB
B*^W LDX 0 SPA2(2) [CALC POSN OF SPA BUCKET IN FRRB
BBFG SBN 0 1
BB^6 ANDN 0 3
BCDQ SLL 0 7
BCYB ADN 0 A1(3)
BDD2 ADN 1 A1
BDXL MOVE 0 128 [MOVE SPA BUCKET INTO FRB
BFC= Z404 MFREE FILE,FRRB [FREE FRRB
BFWW MHUNTW 3,FILE,FRB
BGBG NAME 3,FILE,FRRB [& RENAME FRB
BGW6 BRN Z414
BH*Q )
BHTB Z408 LDX 6 SPA2(2) [SPA BUCKET NOT IN CORE-GET ITS ADDR
BJ*2 VFREE FILE,FRB [IN CASE NO FILE,FRB AT START OF SPAS
BJSL BRN Z412 [J TO READ BUCKET DOWN
BK#= #
BKRW # READ DOWN NEXT BUCKET , CHECK THAT IT CONTAINS SPAS & INITIALISE
BL?G # PTRS TO RECORDS WITHIN THE BLOCK
BLR6 #
BM=Q Z410 LDX 6 SPA2(2) [ADDR OF NEXT BUCKET
BMQB BNZ 6 Z411 [J UNLESS NONE LEFT
BN=2 NAME 3,FILE,FRB [RENAME FRRB
BNPL LDX 1 FX2 [RESTORE X4 & X5
BP9= LDX 4 AWORK1(1)
BPNW LDX 5 AWORK2(1)
BQ8G LDX 1 3
BQN6 BRN XENDSPAS [J TO DEAL WITH OVERLAY TABLE
BR7Q Z411 STOZ SPA1(2) [INIT REL RECORD PTR
BRMB Z412 LDN 7 128 [NO OF WORDS TO READ
BS72 VFREE FILE,FRRB [MAY BE NO &ILE,FRRB AT START OF SPAS
BSLL READED 6,1,7 [NEXT BUCKET
BT6= TESTRPN2 OK,SPAREAD [REPORT ERRORS
BTKW MHUNTW 3,FILE,FRRB [LOCATE SPA BUCKET
BW5G Z414 MHUNTW 2,ADATA,AWKSB
BWK6 ADX 3 SPA1(2) [PTR TO SPA RECORD
BX4Q LDX 0 A1+3(3) [REL ADDR OF NEXT SPA BUCKET
BXJB ADS 0 SPA2(2) [ADDR OF NEXT BUCKET
BY42 BNZ 0 Z415 [J UNLESS LAST BUCKET
BYHL STOZ SPA2(2) [INDICATE NO MORE
B^3= Z415
B^GW LDX 0 A1(3)
C22G TXU 0 SPAREC(1) [ERROR UNLESS TYPE 7
C2G6 BCS SPAFORMAT
C2^Q LDX 0 A1+1(3)
C3FB SBN 0 6 [ERROR UNLESS AT LEAST 6 WORDS LONG
C3^2 BNG 0 SPALENG
C4DL ADN 0 6
C4Y= ADX 0 SPA1(2)
C5CW STO 0 SPA4(2) [PTR TO END OF BUCKET
C5XG SBN 0 129
C6C6 BPZ 0 SPALENG [ERROR IF LENGTH EXCEEDS 128
C6WQ LDN 0 A1(3)
C7BB SMO A1+1(3) [CHECKSUM SPA RECORD
C7W2 SUM 7 0
C8*L BNZ 7 SPACKSUM
C8T= LDN 0 4
C9#W ADS 0 SPA1(2) [RELATIVE ADDR OF FIRST SPA PAIR
C9SG ADN 3 4
C=#6 BRN Z421 [J TO PROCESS FIRST SPA RECORD
C=RQ #
C??B # LOCATE NEXT SPA PAIR TO PROCESS
C?R2 #
C#=L Z420 MHUNTW 2,ADATA,AWKSB
C#Q= MHUNTW 3,FILE,FRRB
C*9W LDX 0 SPA1(2)
C*PG ADN 0 2
CB96 TXL 0 SPA4(2)
CBNQ BCC Z410 [J IF END OF BUCKET
CC8B STO 0 SPA1(2)
CCN2 ADX 3 SPA1(2) [PTR TO NEXT SPA PAIR ( - A1)
CD7L Z421
CDM= #
CF6W # EXTRACT INFO FROM WORD PAIR DEFINING SPA
CFLG #
CG66 LDX 4 A1(3) [VIRTUAL ADDRESS
CGKQ ANDX 4 BITS22LS
CH5B BZE 4 SPAPAGE [SPA FOR PAGE 0
CHK2 LDX 5 A1+1(3) [LENGTH
CJ4L LDCH 6 A1+1(3) [PERMISSION
CJJ= SMO FX1
CK3W ANDX 5 XB16LS [A ZERO LENGTH INDICATES 64K
CKHG BNZ 5 Z422
CL36 LDCT 5 2
CLGQ Z422 ANDN 6 #74 [ISOLATE PERM BITS
CM2B LDX 0 6
CMG2 SRC 0 3
CM^L BPZ 0 Z422A [J UNLESS AREA SHAREABLE
CNF= SRC 0 1
CNYW BPZ 0 XSHWRITE [ERROR UNLESS NO WRITE PERM
CPDG Z422A
CPY6 ERN 6 #70 [SWITCH BITS TO INDICATE PERM TO GIVE
CQCQ SLL 6 4 [MOVE TO REQD POSN
CQXB FPCACA 3,FX2 [CHECK THAT AREA LIES WITHIN RESERVS
CRC2 CHECKBX 4,5,SPARV,3
CRWL #
CSB= # CONVERT AREA TO A NO.OF WHOLE PAGES-NOTING THAT IF AN SPA
CSTW # EXTENDS TO THE END OF A PROG THE LAST PAGE IS INC IN THE AREA
CT*G ADX 5 4
CTT6 TXU 5 SPA5(2)
CW#Q BCS Z423 [J UNLESS SPA GOES TO END OF PROG
CWSB ADN 5 1023
CX#2 Z423 SRL 5 10
CXRL ADN 4 1023
CY?= SRL 4 10 [PAGE NO OF START OF AREA
CYQW SBX 5 4 [NO.OF PAGES IN AREA
C^=G #
C^Q6 # IF THE WHOLE OF A SEGMENT IS TO BE MARKED THEN THE HPERM AREA
D29Q # IN THE SCB HAS TO BE ADJUSTED
D2PB #
D392 Z430 LDCH 1 4
D3NL BNZ 1 Z432 [J IF NOT START OF SEG
D48= SMO FX1
D4MW TXL 5 X64
D57G BCS Z432 [J UNLESS WHOLE OF SEG IN AREA
D5M6 HUNT2 2,BSTB,BSCB,3 [LOCATE SCB & SET HPERM BITS
D66Q LDX 1 4
D6LB SRL 1 9
D762 ADN 2 HPERM(1) [ADDR OF HPERM WORD TO BE ALTERED
D7KL LDX 1 4
D85= SRL 1 6
D8JW ANDN 1 7 [SEG NO.WITHIN WORD
D94G SMO 1
D9J6 ADN 1 0(1) [MULT BY 3
D=3Q NGN 0 8
D=HB SRC 0 3(1)
D?32 ANDS 0 0(2) [CLEAR PERM BITS REFERRING TO SEG
D?GL LDX 0 6
D#2= SRL 0 7
D#FW SRC 0 3(1)
D#^G ORS 0 0(2) [SET THEM TO NEW VALUE
D*F6 ORX 6 GSIGN [SET FLAG TO INDICATE WHOLE SEG
D*YQ #
DBDB # USE SCANPT MACRO TO OBTAIN ADDRESS OF PAGE TABLES AND INSERT PERMS
DBY2 # UNLESS THE WHOLE SEG WAS SPEC ONLY'ACCESSED'PAGES WILL BE MARKED
DCCL #
DCX= Z432 LDX 2 ASEGTAB(3)
DDBW SCANPT 7,Z420,Z432,Z439,2,4,5,2,7
DDWG ADX 4 7 [ADJUST VIRTUAL ADDRESS
DFB6 LDXC 6 6 [TRANSFER FLAG TO X7
DFTQ BCC Z434
DG*B ORX 7 GSIGN
DGT2 Z434 LMASK 1,2
DH#L ADN 1 1 [LENGTH OF PAGE TABLE
DHS= Z435
DJ?W BNG 7 Z436 [J IF WHOLE SEG INCLUDED
DJRG LDCT 0 #100
DK?6 SMO 1
DKQQ ANDX 0 0(2)
DL=B BNZ 0 Z438 [J IF NOT ACCESSED
DLQ2 Z436 NGN 0 #1701
DM9L ANDS 0 0(2)
DMP= ORS 6 0(2) [SET PERMISSION
DN8W Z438 ADN 2 1
DNNG BCT 7 Z435
DP86 BRN Z430
DPMQ Z439 ADX 4 7 [IGNORE GAP
DQ7B BRN Z430
DQM2 )
DR6L #
DRL= #
DS5W #
DSKG # ERROR SECTION
DT56 XENDORG
DTJQ LDN 1 NOENT
DW4B BRN XERROR
DWJ2 #SKIP G4
DX3L (
DXH= XSPAOVER [SPAS AND OVERLAYS
DY2W XNOSPAS [PROG MARKED AS PURE PROCEEDURE BUT HAS NO SPAS.
DYGG SPAFORMAT [SPA DOES NOT START WITH CORRECT HEADER
D^26 SPAPAGE [SPA FOR PAGE 0 NOT ALLOWED
D^FQ SPALENG [SPA LENGTH INCORRECT
D^^B SPACKSUM [SPA CHECKSUM NO CORRECT
F2F2 SPAREAD [ERROR IN ATTEMPTING TO READ AN SPA BUCKET
F2YL XSHWRITE [SHAREABLE AREA CANNOT HAVE WRITE PERM
F3D= )
F3XW XNODATA
F4CG XRECLENG
F4X6 XFILEMISS
F5BQ XORGHEAD
F5WB XSFCODE
F6B2 XBUCKLENG
F6TL XFRAGSIZE
F7*= X2PERMS
F7SW XPERM
F8#G XRECSIZE
F8S6 LDN 1 RINF
F9?Q BRN XERROR
F9RB XCHS
F=?2 LDN 1 RCHER
F=QL BRN XERROR
F?== #SKIP G4
F?PW SPARV [SPA OUTSIDE ADDR&SSING RANGE
F#9G XRESV
F#P6 LDN 1 WERRES
F*8Q BRN XERROR
F*NB XBLOCKTYPE
FB82 XTYPE4
FBML XTYPE7
FC7= X2RS
FCLW X2SRS
FD6G LDN 1 WRBLK
FDL6 XERROR
FF5Q SMO FX1
FFKB LDX 5 0(1)
FFT8 ... VFREEW FILE,FRRB
FG52 ACROSS LOADERR,2
FGJL MENDAREA 60,K99LOADX
FH4= #END
^^^^ ...54107136000500000000