COREALLG82

(George Source)

Macros used: ACROSS, BLOCKCOPY, BXE, BXGE, BXL, BXU, CHAIN, COREQUST, DERING, FON, FREECORE, FREEIN, FREEOUT, GETCORE, GSCAN, JBC, JBS, JMBS, MENDAREA, PHOTO, SEGENTRY

COREALLG82.txt
22FL    #SEG  COREALLG                   [ BILL IZATT : CENT
22^=    #OPT  K0COREALLG=0  
23DW    #LIS  K0COREALLG>K0KERNEL>K0ALLGEO  
23YG    #OPT  K6COREALLG=K6KERNEL>K6ALLGEO  
24D6    #OPT  TRACE=K6COREALLG  
24XQ          8HCOREALLG
25CB    [ THIS ENTRY POINT MUST REMAIN FIXED WITHIN THE CHAPTER 
25X2          SEGENTRY K1COREALLG,QENTRY1   
266S ...      SEGENTRY  K2COREALLG,QENTRY2  
26BL    [   
26W=    [   
27*W    [ THIS CHAPTER CHECKS THE DENSITY OF LONGLOCK BLOCKS IN THE LONGLOCK
27TG    [     AREA, AND TAKES STEPS TO INCREASE IT IF IT FALLS TOO LOW. 
28*6    QENTRY1                            [ ENTRY FROM REDUCELL MACRO  
28BT ...      LDX   0  CIROUND  
28DJ ...      SBN   0  32   
28G? ...      BNG   0  SMALLR       [IF NOT LSM,DO FULL REDUCTION   
28J2 ...      LDX   0  GFIXCHAP 
28KP ...      SBX   0  CTOP       [SIZE OF LL AREA  
28MD ...      SBN   0  4095 
28P7 ...      BNG   0  QEXIT1     [DONT BOTHER TO REDUCE IF SMALL   
28QW ...SMALLR  
28SQ          LDX   1  CTOP 
29#B    #SKI  TRACE>499-499 
29S2          GSCAN    CTOP,REDUCTOP
2=?L    [ THIS PART FINDS A BLOCK TO START STEPPING FORWARD FROM.  THE UPPERMOST
2=R=    [     FREE BLOCK NOT ABOVE CTOP IS USED, IF SUCH A BLOCK EXISTS.
2?=W    [     OTHERWISE THE FIRST BLOCK OF VARIABLE CORE IS USED.   
2?QG          LDX   2  BFREE
2#=6    PP1   LDX   2  BPTR(2)  
2#PQ          TXL   1  2                   [ IS THE BLOCK ABOVE CTOP?   
2*9B          BCS      PP1                 [ JUMP IF YES
2*P2          TXU   2  CXFR                [ IF EQUAL, THERE IS NO FREE BLOCK   
2B8L          BCS      PP2                 [   BELOW CTOP,  
2BN=          LDX   2  FCORES              [   SO START FROM LOWEST BLOCK   
2C7W    [ THE HIGHEST BLOCK, OF ANY KIND, NOT ABOVE CTOP IS FOUND.  THE AMOUNT  
2CMG    [     OF IT WHICH LIES BELOW CTOP IS STORED NEGATIVELY IN X1 TO BE  
2D76    [     DEDUCTED FROM THE TOTAL RUNG UP IN X1 OF CORE NOT CONSISTING OF   
2DLQ    [     LONGLOCK BLOCKS.  X3 WILL POINT TO THE LOWEST LONGLOCK BLOCK FOUND
2F6B    PP2   LDX   0  2
2FL2          ADX   2  ASIZE(2)            [ SET UP 
2G5L          TXL   1  2                   [ IS THE BLOCK ABOVE CTOP?   
2GK=          BCC      PP2                 [ JUMP IF NO 
2H4W          SBX   1  0                   [ X0 POINTS TO HIGHEST BLOCK 
2HJG          NGX   1  1                   [ X1 HOLDS -OVERHANG OUTSIDE LL AREA 
2J46          LDX   2  0
2JHQ          NGN   3  1                   [ X3=-1 => NO LONGLOCK BLOCK FOUND   
2K3B    [ THE LONGLOCK AREA IS SCANNED FOR NON-LONGLOCK BLOCKS.  WHEN ONE IS
2KH2    [     FOUND, ITS SIZE IS ADDED TO THE RUNNING COUNT IN X1.  IN PASSING, 
2L2L    [     THE ADDRESS OF THE LOWEST LONGLOCK BLOCK IS STORED IN X3. 
2LG=    PP3   LDX   0  AFLAG(2) 
2L^W          ANDN  0  #4   
2MFG          BNZ   0  PP4                 [ JUMP IF LL 
2M^6          ADX   1  ASIZE(2) 
2NDQ          BRN      PP5  
2NYB    PP4   BPZ   3  PP5                 [ JUMP IF LOWEST LL BLOCK ALREADY MET
2PD2          LDX   3  2
2PXL    PP5   ADX   2  ASIZE(2) 
2QC=          TXL   2  GFIXCHAP            [ TOP OF LL AREA REACHED?
2QWW          BCS      PP3                 [ JUMP IF NO 
2RBG    [ THE LONGLOCK AREA HAVING BEEN SCANNED, TEST IF MORE THAN HALF OF IT   
2RW6    [     CONSISTS ON NON-LONGLOCK BLOCKS.  IF SO, CTOP IS MOVED UP UNTIL   
2S*Q    [     HALF OF THE RESULTING REGION IS OF LONGLOCK BLOCKS, UNLESS THE
2STB    [     PRESENCE OF A LONGLOCK BLOCK PREVENTS THIS.   
2T*2          LDX   0  GFIXCHAP 
2TSL          SBX   0  CTOP                [ GET SIZE OF LL AREA IN X0  
2W#= ...      SLL   1  1                   [ MAX FOR NON-LL BLOCKS IN X0
2WRW          SBX   1  0                   [ X1 HOLDS EXCESS
2X?G          BNG   1  QEXIT1              [ JUMP IF NO EXCESS. (IF EXCESS = 0  
2XR6          ADS   1  CTOP                [   WE GO THE LONG WAY ROUND)
2Y=Q          TXL   3  CTOP                [ IF NO LL BLOCK FOUND, X3 >CTOP 
2YQB          BCC      QEXIT1   
2^=2    [ IF A LONGLOCK BLOCK GOT IN THE WAY, MOVE CTOP TO THE START OF IT, AND 
2^PL    [     MARK IT, AND ALL OTHER LONGLOCK BLOCKS UP TO THE DESIRED VALUE OF 
329=    [     CTOP, 'PLEASE MOVE UP'.   
32NW          LDX   2  CTOP                [ X2 HOLDS DESIRE VALUE  
338G          STO   3  CTOP 
33N6          LDN   0  #400                [ LOAD 'PLEASE MOVE UP' BIT  
347Q    PP6   ORS   0  AFLAG(3)            [ MARK 'PLEASE MOVE UP'  
34MB    PP7   ADX   3  ASIZE(3)            [ STEP ON
3572          TXL   3  2
35LL          BCC      QEXIT1   
366=          LDX   1  AFLAG(3)            [ TEST IF LONGLOCK   
36KW          ANDN  1  #4   
375G          BNZ   1  PP6  
37K6          BRN      PP7  
384Q    [   
38JB    [ SET UP ACCUMULATORS AND EXIT  
3942    QEXIT1  
39HL          SMO      FX2  
3=3=          LDX   3  ACC3                [ RESTORE X3 TO PRESERVE ACC3
3=GW          ACROSS   CHARGESC,13         [ RETURNS TO REDUCELL MACRO  
3=G^ ...[   
3=H4 ...QENTRY2   [QUICK  LL GETCORES FOR LSM   
3=H5 ...      LDN   7  0
3=H6 ...QENTRY2A
3=H7 ...      LDX   3  GLLLOG   
3=H= ...      ADX   3  CIRNDB   
3=H* ...      ANDX  3  IROUNDNG 
3=HD ...      STO   3  GEN4                [ RESTORE SIZE PARAMETER 
3=HH ...      BXGE  3  CFREE,SFAIL  
3=HL ...      LDN   5  0
3=HP ...      LDX   4  CTOP 
3=HS ...      SBN   4  2048 
3=HX ...      LDN   3  BCHAP   [GET CHAP NEAREST CTOP AS A START
3=J2 ...QLL1  LDX   3  FPTR(3)  
3=J5 ...      BXE   3  CXCH,QEND
3=J8 ...      BXGE  3  CTOP,QLL1  [J IF IN LLAREA   
3=J? ...      BXL   3  5,QLL1     [J IF NOT AS GOOD AS BEST SO FAR  
3=JB ...      BXGE  3  4,QFOUND 
3=JF ...      LDX   5  3          [MAKE BEST SO FAR 
3=JJ ...      BRN      QLL1 
3=JM ...QEND  LDX   3  5
3=JQ ...QFOUND   [X3->NEAREST   
3=JT ...      LDX   4  3    [KEEP 1ST   
3=JY ...      ADX   3  ASIZE(3)   [GO TO NEXT   
3=K3 ...      BXL   3  CTOP,QFOUND   [J IF NOT IN LL YET
3=K6 ...      LDX   3  4     [LAST NOT IN LL
3=K9 ...      BRN      ROUND1  [GO TO SURVEY LL AREA
3=K# ...ROUND ADX   3  ASIZE(3) 
3=KC ...ROUND1 BXE   3  GFIXCHAP,PHAIL  [GIVE UP
3=KG ...      JMBS  ROUND,3,AFFROZ,AFLOCK,AFLONG  [DROP THRU IF ORD OR FREE 
3=KK ...      LDX   6  ASIZE(3) 
3=KN ...      JBS   PHREE,3,AFFREE   [DROP THRU IF USED 
3=KR ...      LDX   0  ATYPE(3) 
3=KW ...      BXE   0  FPSEUTYP,ROUND   
3=K^ ...      BXL   6  GEN4,ROUND    [J IF NOT BIG ENUF 
3=L2 ...      BPZ   7  QFIRST   
3=L3 ...      NGX   0  7
3=L4 ...      BXGE  0  3,ROUND  
3=L5 ...QFIRST  
3=L6 ...      LDX   5   ALOGLEN(3)  
3=L7 ...[ NOW GET CORE TO MOVE OUT USED BLOCK:WE KEEP COUNT OF BLOX 
3=L= ...[MOVED SO KNOW WHETHER POINTERS SAFE AFTER THE GETCORE  
3=L* ...      PHOTO  7  
3=LD ...      LDX   4  GEN4   [KEEP AS GETCORE &BLOCKCOPY OVERWRITES
3=LH ...      GETCORE  5,0  [OPTIONAL   
3=LL ...      BRN      QGOT    [SUCCESS 
3=LQ ...      NGX   7  3
3=LW ...      BRN      QENTRY2A 
3=M2 ...QGOT  STO   4  GEN4 
3=M5 ...      BXU   7  BCOUNT,QABORT  [GIVE UP IF BLOX MOVED,NEXT TIME  
3=M8 ...[     ...SHOULD GET BLOCK WITHOUT MOVING
3=M? ...      JMBS   QABORT,3,AFFROZ,AFFREE,AFLOCK,AFLONG  [J IF CHANGED TOO MUC
3=MB ...      BXU   5  ALOGLEN(3),QABORT   [OR ALTLENED 
3=MF ...      LDX   0  ATYPE(3) 
3=MJ ...      BXE   0  FPSEUTYP,QABORT  [OR NOW PSEUDO  
3=MK ...      LDX   1  FPTR(2)  
3=ML ...      JBS      QABORT,1,AFFROZ    [J IF GOT BLK HAS BEEN FROZEN 
3=MM ...      BXE   3  FPTR(2),QGOTIT  [IF CHAP USED FOR GETCORE &  
3=MN ...[ ... ITS CHAP WERE MOVING ,USE DIRECT  
3=MP ...      BXL   3  1,QGOT1  
3=MQ ...      LDX   0  ASIZE(1) 
3=MR ...      ADX   0  1
3=MS ...      BXL   3  0,QABORT 
3=MT ...QGOT1   
3=MW ...      JBC   QNOCHAP,3,AFCHAP
3=MX ...
3=MY ...
3=M^ ...      SMO     BACK1(3)  
3=N2 ...      LDX  0  KTAB  
3=N3 ...      ANDX 0  BITS22LS  
3=N4 ...      BXU  0  3,QABORT  
3=N5 ...      LDX   0  FPTR(2)  
3=N6 ...      ORX   0  GSIGN
3=N7 ...      SMO      BACK1(3) 
3=N8 ...      STO   0  KTAB 
3=N9 ...      LDN   0  A1(3)
3=N= ...      BXU   0  FX1,QNOCHAP  
3=N# ...      LDX   0  FPTR(2)  
3=NC ...      ADN   0  A1   
3=NG ...      STO   0  FX1  
3=NK ...QNOCHAP 
3=NN ...      LDX   2  3
3=NR ...      BLOCKCOPY   [COPIES TO BLOCK AFTER FX2,FREEING OLD SITE   
3=NW ...[ ...BUT AS NO AMALG WITH LSM X3 STILL VALID AS PTR TO NOW FREE BLOCK   
3=N^ ...[ ...BIG ENUF FOR REQUEST   
3=P4 ...      STO   4  GEN4  [CORRECT AFTER BLOCKCOPY   
3=P7 ...      BRN      PHREE1    [BLOCK AS FREE 
3=P= ...QABORT FREECORE  FPTR(2)  [GET RID OF NEW   
3=P* ...      BRN      QENTRY2A 
3=PD ...PHREE  [X3->FREE BLOCK  
3=PH ...      BXL   6  GEN4,QAMALG   [J IF TOO SMALL
3=PL ...PHREE1  
3=PP ...      FREEOUT  3 [GET OUT OF STRUCTURE  
3=PS ...      BXE   6  GEN4,QEASY   [J IF NO EXCESS 
3=PX ...      LDX   6  GEN4    [AMOUNT REQD 
3=Q2 ...      SBS   6  ASIZE(3)     [SPLIT FROM END 
3=Q5 ...      FREEIN  3     [BACK IN NEW PLACE IN STRUCTURE 
3=Q8 ...      ADX   3  ASIZE(3)    [END TO BE USED  
3=Q? ...      STO   6  ASIZE(3) 
3=QB ...      LDN   0  1
3=QF ...      STO   0  AFLAG(3)  [MARK FREE 
3=QJ ...      STO   3  FPTR(3)  
3=QM ...      STO   3  BPTR(3)  
3=QQ ...      STOZ     ATYPE(3) 
3=QT ...QEASY   
3=QY ...      CHAIN   3,FX2   [NEXT TO CUUR ACT 
3=R3 ...      BRN   QSUCCESS
3=R6 ...QAMALG LDX   4  3  [KEEP START  
3=R9 ...QAMALG1 
3=R# ...      ADX   3  ASIZE(3) 
3=RC ...      JBC   ROUND1,3,AFFREE 
3=RG ...      ADX   6  ASIZE(3) 
3=RK ...      BXL   6  GEN4,QAMALG1      [J IF NOT ENUF YET 
3=RN ...      LDX   5  3   [X5->LAST BLOCK  
3=RR ...      CHAIN   4,FX2 
3=RW ...      LDX   3  4
3=R^ ...      FREEOUT  3
3=S4 ...QAMRD ADX   3   ASIZE(3)
3=S7 ...      BXL   5   3,QAMEND
3=S= ...      DERING    3   
3=S* ...      FREEOUT  3
3=SD ...      LDX   0  ASIZE(3) 
3=SH ...      SMO      4
3=SL ...      ADS   0  ASIZE     [KEEP SIZE RIGHT   
3=SP ...      BRN   QAMRD   
3=SS ...QAMEND  
3=SX ...QSUCCESS   [BLOCK NEXT IS OK
3=T2 ...      LDX   1  FPTR(2)  
3=T5 ...      LDX   0  ASIZE(1) 
3=T8 ...      SBS   0  CFREE
3=T9 ...QGOTIT  
3=T? ...      BXGE   1  CTOP,QTOP    [J IF CTOP LESS THAN GOT BLOCK 
3=TB ...      STO   1  CTOP 
3=TF ...QTOP   [NOW CTOP LESS THAN GOT BLOCK
3=TJ ...      LDN   1  GLLACCS             [ RESTORE THE ALEVEN WORD
3=TM ...      SMO      FX2                 [   LINK OF THE ACTIVITY 
3=TQ ...      LDN   2  ACC3                [   REQUESTING THE NEW BLOCK 
3=TT ...      MOVE  1  ALINK
3=TY ...      LDN   1  GLLLINKS 
3=W3 ...      LDN   2  GLINKSTEP
3=W6 ...      MOVE  1  5
3=W9 ...      STOZ     GLLSEMA  
3=W# ...      FON      GLLWAIT  
3=WC ...      COREQUST  Y   
3=WG ...PHAIL   
3=WK ...SFAIL   
3=WN ...SMALL ACROSS  COREALLF,1 [TRY FULL RIGMAROLE
3?2G          MENDAREA 30,K99COREALLG   
3?G6    #END
^^^^ ...12666751002000000000