{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: UNJAMMER866)}}
====== UNJAMMER866 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BC|BC]], [[george:macro:BI|BI]], [[george:macro:BSON|BSON]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:COBJUNUSE|COBJUNUSE]], [[george:macro:COBJUSE|COBJUSE]], [[george:macro:COREWAKE|COREWAKE]], [[george:macro:FINDJOBQ|FINDJOBQ]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FREEFILE|FREEFILE]], [[george:macro:FREEFURB|FREEFURB]], [[george:macro:FREEFUWB|FREEFUWB]], [[george:macro:FREEHALF|FREEHALF]], [[george:macro:FREEHALL|FREEHALL]], [[george:macro:FREEIN|FREEIN]], [[george:macro:FREEOUT|FREEOUT]], [[george:macro:FREHFURB|FREHFURB]], [[george:macro:FRSOFURB|FRSOFURB]], [[george:macro:FRSOFUWB|FRSOFUWB]], [[george:macro:GSCAN|GSCAN]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MOBJQUOTA|MOBJQUOTA]], [[george:macro:ON|ON]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:TEST|TEST]], [[george:macro:TRACE|TRACE]], [[george:macro:TRACEDP|TRACEDP]]
22FL ...#SEG UNJAMMER [DEK BEASLEY
22^= #OPT K0UNJAMMER=0
23DW #LIS K0UNJAMMER>K0ALLGEO>K0LLS
23YG 8HUNJAMMER
24D6 #
24XQ # THIS IS THE MAIN SEGMENT OF THE CORE UNJAMMER,ENTERED IF NECESSARY
25CB # IN BLANKET
25X2 #
26BL # THERE IS ONE MAIN ENTRY POINT:K1 AND ONE RETURN FROM JAMSWAP IF NO
26W= # CANDIDATE FOR SWAPOUT CAN BE FOUND:K2
27*W SEGENTRY K1UNJAMMER,XX1U
27TG SEGENTRY K2UNJAMMER,XX2U
28SQ #
28XW ...#UNS ISTDP
2932 ...TARGET +CUNJAMTARG
2966 ...#UNS ISTDP
299= ...#SKI
29#B TARGET #12000
29S2 T15 +CJTHRESH15
2=?L T2 +CJTHRESH2
2=R= T3 +CJTHRESH3
2?=W T4 +CJTHRESH4
2?QG
2CMG TEST
2D76 TXL 6 CJTARGET
2D?3 ...#UNS ISTDP
2DBY ...#SKI
2DGT ...(
2DLQ BCC R11A [END IF TARGET REACHED
2F6B EXIT 7 0
2F85 ...)
2F9S ...#UNS ISTDP
2F?H ...(
2F*= ... BCS (7)
2FB^ ...#UNS ISTDPSTATS
2FDN ... TRACEDP AJAMSUC
2FGC ... BRN R11A
2FJ6 ...)
2FL2 #
2G5L # S/R TO FIND JOBLOCK IN X3,LINK X7,EXITS 0 IF MISSING
2GK= #
2H4W TJOB FINDJOBQ 3,CJJOBNO,(7)
2HJG EXIT 7 1
2J46 #
2JHQ # SUBROUTINE TO SCAN UP THROUGH THE CORE, SPLITTING OFF FROM THE END
2K3B # BLOCKS ANY EXCESS, AND CHAIN ANY CORE THUS RECLAIMED INTO THE FREE
2KH2 # AT END OF ROUTINE ANY ACTIVITIES WAITING ON THE QUEUE FOR CORE ARE
2L2L # UP. LINK X7. NO COORDINATION. ON EXIT, X1=FX1,X2=FX2, ALL OTHERS E
2LG= # ARE DESTROYED.
2L^W # IN A SENSE THIS ROUTINE IS AN EXTENSION OF THE CORE ALLOCATION SYS
2MFG #
2MKC ...#UNS ISFC
2MP# ...#SKI
2MT9 ...(
2M^6 QCJ1
2N3P ...#UNS CA1D
2N6# ...(
2N8X ... ANDX 7 BITS22LS [ENSURE B0 & 1 CLEAR
2N?G ... ORX 7 0 [SET B0 OF X7 ACCORDING TO SOURCE
2NB5 ...)
2NDQ LDX 3 GLOW [START OF VARIABLE CORE='THIS'
2NYB LDN 4 BFREE [THE 'FREE BLOCK' BELOW THIS
2PD2 NEXT TXU 4 BPTR(3) [IF THE BLOCK CHAINED BEFORE THIS IS
2PXL BCC XFREE [BLOCK BELOW IT, THEN THIS BLOCK IS F
2QC= LDX 0 AFLAG(3)
2QWW ANDN 0 2
2RBG BNZ 0 NONE [IGNORE ANY FROZEN BLOCK
2RW6 LDX 0 ALOGLEN(3) [LOGICAL LENGTH
2S*Q ANDX 0 BITS22LS
2STB TXU 0 ALOGLEN(3)
2T*2 BCS (GEOERR) [JUMP IF CORRUPTION HAS OCCURRED
2TD6 ...#UNS CA1D
2TH= ... ADX 0 CIRNDB
2TLB ...#UNS CA1D
2TPG ...#SKI
2TSL ADN 0 A1+IROUND-1
2W#= ANDX 0 IROUNDNG
2WRW LDX 5 ASIZE(3) [ACTUAL SIZE
2X?G ANDX 5 BITS22LS
2XR6 SBX 5 0 [EXCESS
2Y=Q BZE 5 NONE [J IF NONE
2YQB BNG 5 (GEOERR)
2YR* ...#UNS CA1D
2YS# ...(
2YT? ... BPZ 7 NEXT1
2YW= ... [J ACCORDING TO CONSTANT REQD
2YX9 ... TXL 5 CIROUND
2YY8 ... BCS NONE
2Y^7 ... BRN NEXT2
2^26 ...NEXT1
2^35 ... TXL 5 CSPLIT
2^44 ... BCS NONE
2^53 ...NEXT2
2^62 ...)
2^6^ ...#UNS CA1D
2^7Y ...#SKI
2^8X ...(
2^=2 SMO 7
2^PL TXL 5 0
329= BCS NONE [JUMP IF NOT ENOUGH
32F4 ...)
32NW LDX 1 ATYPE(3)
338G TXU 1 GCHTY [TEST IF A CHAPTER BLOCK
33N6 BCS XCHAP [NO
347Q SBS 5 ACHAP [ADJUST TOTAL OF CORE USED FOR CHAPTE
34MB XCHAP
3572 ADS 5 CFREE [NEW FREE TOTAL
35LL SBS 5 ASIZE(3) [NEW BLOCK SIZE
366= ADX 6 5 [UPDATE COUNT OF WORDS FREED
36KW ADX 3 0 [ADDRESS F/C BLOCK
375G LDX 2 4 [PRECEDING F/C BLOCK
37K6 LDX 1 FPTR(2) [ADDRESS SUCCEEDING F/C BLOCK
384Q LDX 0 3 [PRESERVE ADDRESS
38JB ADX 0 5 [ADDRESS OF NEXT BLOCK IN CORE
3942 TXU 0 1
39HL BCS NOAML [JUMP IF THIS IS NOT FREE
3=3= ADX 5 ASIZE(1) [NEW SIZE FREE BL AFTER AMALGAMATION
3=5T ...#UNS ISFC
3=8D ...(
3=?3 ... FREEOUT 1 [REMOVE BLK FROM SIZE RING
3=*L ... LDX 2 4 [RESTORE X2
3=D9 ...)
3=GW LDX 1 FPTR(1) [NEW SUCCEEDING F/C BLOCK
3?2G SMO BPTR(1)
3?G6 TXU 1 FPTR
3?^Q BCS (GEOERR) [J IF CORRUPTED
3#FB NOAML STO 2 BPTR(3) [THESE INSTRUCTIONS
3#^2 STO 1 FPTR(3) [CHAIN IN
3*DL STO 3 FPTR(2) [THE NEW
3*Y= STO 3 BPTR(1) [FREECORE BLOCK
3B2# ...#UNS ISFC
3B4B ...(
3B6D ... STO 5 ASIZE(3)
3B8G ... [SET SIZE FOR FREEIN
3B=L ... FREEIN 3 [CHAIN BLK INTO SIZE RING
3B*= ...)
3BCW #SKI CAMK7>4-4
3BXG (
3CC6 STO 5 ASIZE(3)
3CWQ LDN 5 1
3DBB STO 5 AFLAG(3)
3DW2 )
3F*L #SKI CAMK7<5-5
3FT= (
3G#W ORX 5 GSIGN [MARK AS FREE
3GSG STO 5 ASIZE(3) [SET SIZE
3H#6 STOZ AFLAG(3)
3HRQ )
3J?B XFREE LDX 4 3 [COPY ADDR OF NEW FREE BLOCK BELOW
3JR2 NONE SMO ASIZE(3)
3K=L ADN 3 0 [GET ADDR OF NEXT BLOCK
3KQ= SMO BPTR(3)
3L9W TXU 3 FPTR
3LPG BCS (GEOERR) [ J IF CORRUPTED
3M96 TXU 3 GFIXCHAP [TEST IF REACHED THE END OF VARIABLE
3MNQ BCS NEXT [NO
3N8B COREWAKE [WAKE UP ANY ACTIVITIES AWAITING CORE
3NN2 EXIT 7 1
3NN9 ...)
3NND ...#UNS ISFC
3NNM ...(
3NNW ...QCJ1
3NP5 ... LDX 3 GLOW [START OF VARIABLE CORE='THIS'
3NP# ...NEXT JBS NONE,3,AFFREE
3NPH ... LDX 0 AFLAG(3)
3NPQ ... ANDN 0 2
3NP^ ... BNZ 0 NONE [IGNORE ANY FROZEN BLOCK
3NQ8 ... LDX 0 ALOGLEN(3) [LOGICAL LENGTH
3NQC ... ANDX 0 BITS22LS
3NQL ... TXU 0 ALOGLEN(3)
3NQT ... BCS (GEOERR) [JUMP IF CORRUPTION HAS OCCURRED
3NR4 ...#UNS CA1D
3NR? ... ADX 0 CIRNDB
3NRG ...#UNS CA1D
3NRP ...#SKI
3NRY ... ADN 0 A1+IROUND-1
3NS7 ... ANDX 0 IROUNDNG
3NSB ... LDX 5 ASIZE(3) [ACTUAL SIZE
3NSK ... ANDX 5 BITS22LS
3NSS ... SBX 5 0 [EXCESS
3NT3 ... BZE 5 NONE [J IF NONE
3NT= ... BNG 5 (GEOERR)
3NTF ...#UNS CA1D
3NTN ...(
3NTX ... BXL 5 4,NONE
3NW6 ...)
3NW* ...#UNS CA1D
3NWJ ...#SKI
3NWR ...(
3NX2 ... SMO 7
3NX9 ... TXL 5 0
3NXD ... BCS NONE [JUMP IF NOT ENOUGH
3NXM ...)
3NXW ... LDX 1 ATYPE(3)
3NY5 ... TXU 1 GCHTY [TEST IF A CHAPTER BLOCK
3NY# ... BCS XCHAP [NO
3NYH ... SBS 5 ACHAP [ADJUST TOTAL OF CORE USED FOR CHAPTE
3NYQ ...XCHAP
3NY^ ... ADX 6 5 [UPDATE RUNNING TOTAL
3N^8 ... SBS 5 ASIZE(3) [NEW SIZE
3N^C ... ADX 3 ASIZE(3) [X3->FRAG
3N^L ... STO 3 FPTR(3)
3N^T ... STO 3 BPTR(3) [CHAIN FRAG
3P24 ... STOZ AFLAG(3)
3P26 ... LDX 0 FPSEUTYP [SET TO PSEUD BLOCK
3P28 ... STO 0 ATYPE(3) [FOR FREECORE INTERFACE
3P2? ... STO 5 ASIZE(3)
3P2G ... LDN 0 ARINGNO+1
3P2P ... BXL 5 0,SHORT
3P2Y ... LDCT 0 2
3P37 ... STO 0 ARINGNO(3)
3P3B ...SHORT LDX 2 3
3P3S ... FREECORE 2
3P4= ...NONE SMO ASIZE(3)
3P4F ... ADN 3 0 [GET ADDR OF NEXT BLOCK
3P4N ...NONE1
3P4X ... SMO BPTR(3)
3P56 ... TXU 3 FPTR
3P5* ... BCS (GEOERR) [ J IF CORRUPTED
3P5J ... TXU 3 GFIXCHAP [TEST IF REACHED THE END OF VARIABLE
3P5R ... BCS NEXT [NO
3P62 ... EXIT 7 1
3P69 ...)
3P7L #
3PM= # SUBROUTINE TO FREE UNUSED LINK BLOCKS. X7=LINK
3Q6W # NO COOR. ON EXIT X2& X3 DESTROYED & X4
3QLG #
3R66 #
3RKQ QCJ2
3S5B LDN 2 BACT+ACTRING [SEARCH ACTIVITY RING
3SK2 QCJ21 LDX 2 FPTR(2)
3T4L BXE 2 BACTR,(7) [EXIT AT END
3TJ=
3W3W LDX 3 ALINKRING-ACTRING(2)
3WHG BXE 3 0(3),QCJ21 [J IF NO LINK BLOCK
3X36 SBN 3 BLINKRING [X3 -> START OF LINK BLOCK
3XGQ LDX 0 ALOGLEN(3)
3Y2B SBN 0 3
3YG2 BPZ 0 QCJ21 [ J IF NO SPARE
3Y^L LDX 4 2
3^F= ADX 6 ASIZE(3)
3^YW FREECORE 3 [FREE EMPTY LINK BLOCK.
42DG LDX 2 4 [RESTORE POINTER ROUND ACTRING
42Y6 BRN QCJ21
43CQ #
43XB # SUBROUTINES USED BY FREE---- MACROS ABOVE
44C2 #
44WL FREEFILE
45B= #
45TW # SUBROUTINE TO FREE BSTB/BFREEW BLOCKS.X7=LINK.NO COORDINATION.
46*G #
46T6 QCJ7
47#Q LDN 5 BSTB+BFREEW
47SB LDX 2 BACT
48#2 SQ2 TXU 2 CXAC
48RL BCC SQ99
49?= LDX 4 FPTR(2) [GET NEXT BLOCK
49QW LDX 0 ATYPE(2)
4==G SRL 0 12
4=Q6 SBX 0 5
4?9Q BNZ 0 SQ1
4?PB ADX 6 ASIZE(2) [UPDATE COUNT OF WORDS FREED
4#92 FREECORE 2 [FREE THIS BLOCK IF RIGHT TYPE
4#NL SQ1 LDX 2 4 [RESTORE ADDRESS OF NEXT BLOCK
4*8= BRN SQ2
4*MW SQ99
4B7G EXIT 7 0
4BM6 #
4C6Q # ENTERED HERE FROM CHARGESC WHEN CORE USAGE SUM IS > OR = FIRST
4CLB # THRESHOLD, OR A FAILED SWAPIN HAS LEFT BIT SET IN INOUTPC REQUESTI
4D62 # ENTRY TO RECLAIMING ROUTINES ONE AND TWO.
4DKL # THE AMOUNT OF CORE UNJAMMING ACTION TAKEN DEPENDS UPON THE SERIOUS
4F5= # THE JAM, AS INDICATED BY THE VALUE OF THE CORE JAM SUM(CJSUM) WHIC
4FJW # BUILT UP, RELATIVE TO THE THRESHOLD VALUES.
4G4G #
4GJ6 XX1U [K1UNJAMMER: MAIN ENTRY
4H3Q GSCAN CFREE,COREJAM
4HHB TRACE ACHAP,ACHAP
4J32 TRACE CJSUM,CJSUM
4J88 ...#SKI K6UNJAMMER>499-499
4J*B ... GSCAN FX2,JAMACT
4JGL #SKI CAMK7<6-6
4K2= EXTENDLL
4KFW LDN 6 0
4LF6 LDX 0 CLEANCT
4LYQ STO 0 CJTIME [FOR BUFFERED *DA
4MDB ...#UNS ISTDPSTATS
4MN8 ... TRACEDP AJAMCORE
4MRD ... BXE 2 BSWINT,YD3 [J IF LLS INITIATED
4MS5 ... JBC XSWAP,,ASWOUTING [J IF NO SWAPOUT IN PROGRESS
4MY2 ... LDN 0 CJDANGER [AS SWAPOUT IN PROGRESS
4N3X ... BXL 0 CFREE,R11A [DO NOTHING IF CFREE>128
4N7S ... BRN YD1 [OTHERWISE,CONTINUE WITH UNJAM
4N?P ...XSWAP
4NCL COBJUSE
4NX= #SKI G4
4P4D ...(
4P9L ... LDX 6 AOBJFAIL
4PBS ... SLL 6 10
4PJ2 ... ADX 0 6
4PP8 ...)
4Q8S ... MOBJQUOTA MAX,6
4QND ... BXGE 6 0,YD1
4R*B BRN TH4 [SWAPOUT IMMEDIATELY,IF EXCEEDING
4RT2 [ OBJECTQUOTA
4S#L ...YD3
4SS= ...#UNS ISTDPSTATS
4T?W ... TRACEDP AJAMLLS
4TRG ... LDX 0 CJTARGTN [IF UNJAMMING ACTION INITIATED BY PC
4^8W ADN 0 #3000 [ SET TARGET TO SHORTFALL + 3/2 K
4^NG STO 0 CJTARGET
4^P? ...#UNS ADPLLSKIP
4^Q4 ...(
4^QT ... LDN 0 1 [- DATAPASS COUNT OF
4^RL ... SMO ADPSWPPTR [- LLS INITIATES
4^SC ... ADS 0 9 [- COREJAMS
4^T8 ...)
5286 BRN YD
52MQ YD1 LDX 1 FX1
537B LDX 0 TARGET(1)
53M2 STO 0 CJTARGET
53MF ...[ AS ENTERED FOR FAILED GETCORE
53MY ...[ IF X=0,CONTINUE TO UNJAM
53NC ...[ IF XOR= CJTARGET,JOIN SUCCESS EXIT
53P* ...[ WHERE X=TOTAL UN-FROZEN FREE PROGRAM CORE/PAGES
53PS ...[
53Q? ...#SKI G3
53QQ ...(
53R9 ... LDX 0 FREZTOT
53RN ... BZE 0 NONFROZ [J IF NO CORE FREEZE ACTIVE
53S7 ... LDN 3 BOBJUNUSE [NOW TOTAL UN-FROZEN FPB'S
53SL ... LDN 6 0
53T5 ...NEXTFPB
53TJ ... LDX 3 FPTR(3)
53W3 ... BXE 3 CXOBJUN,SOMFROZ [J IF END OF CHAIN REACHED
53WG ... JBS NEXTFPB,3,AFFROZ [J IF FROZEN
53W^ ... ADX 6 ALOGL(3) [INCREMENT COUNT OF UNFROZEN FPB'S
53XD ... BRN NEXTFPB
53XX ...NONFROZ
53YB ...)
53YT ...#SKI G4
53^# ...(
53^R ... LDX 0 CFPCFREZ
542= ... BNZ 0 YD
542P ...)
5438 ... COBJUNUSE 6
543M ...SOMFROZ
5446 ... BZE 6 YD
544K ... BXGE 6 CJTARGET,R11AA
5454 ... SBS 6 CJTARGET
545H ...#UNS ISTDPSTATS
5462 ... TRACEDP AJAMADJ,6
546L YD LDN 6 0
548T ...#UNS ADPLLSKIP
54?4 ...(
54*? ... LDN 0 1 [- DATAPASS COUNT OF
54CG ... SMO ADPSWPPTR [- LEVEL 1 COREJAMS
54FP ... ADS 0 5
54HY ...)
54L= CALL 7 QCJ2 [FREE 2-WORD LINK BLOCKS
555W LDX 7 CJDELAYCNT3
55KG BPZ 7 TN1 [SKIP IF DONE RECENTLY
5656 LDN 7 CJDELAY3
56JQ STO 7 CJDELAYCNT3
56PY ...#UNS CA1D
56X7 ... LDX 4 CSPLIT
574B CALL 7 QCJ1 [FREE EXCESS CORE FROM ENDS OF BLOCKS
57J2 +CSPLITLN [BUT ONLY IN AMOUNTS > OR = CSPLITLN
583L TN1 CALL 7 TEST
58H= LDX 7 CJDELAYCNT1
592W BPZ 7 TH2 [SKIP RECLAIMING ROUTINE ONE IF DONE
59GG LDN 7 CJDELAY1
5=26 STO 7 CJDELAYCNT1 [INDICATE DONE RECENTLY
5=FQ CALL 7 QCJ7 [FREE BFREEW BLOCKS
5=^B CALL 7 TEST
5?F2 FRSOFURB [FURBS/FURRBS ASSOCIATED WITH SWAPPED
5?YL [OUT PROGRAMS ONLY TO BE FREED
5#D= CALL 7 TEST
5#XW FRSOFUWB [FUWBS/FURWBS ASSOCIATED WITH SWAPPED
5*CG [OUT PROGRAMS ONLY TO BE FREED
5*X6 CALL 7 TEST
5BBQ FREEHALF [FREE HALF THE HALFOPEN CHAIN
5BWB CALL 7 TEST
5CB2 FREHFURB [HALF OF FURBS/FURRBS TO BE FREED
5CTL CALL 7 TEST
5D*= TH2
5DSW LDX 2 FX2
5F#G BSON EMSBIT,QEMS
5FS6 ... BXE 2 BSWINT,TH3 [J IF LLS INITIATED
5GRB QEMS
5H?2 LDX 0 CJSUM
5HQL SMO FX1
5J== TXL 0 T15
5JPW BCS R11A [END IF CJSUM