22FL ...#SEG COREALL [DEK BEASLEY : CENT 22^= #OPT K0COREALL=0 23DW #LIS K0COREALL>K0KERNEL>K0ALLGEO 23YG #OPT K6COREALL=K6KERNEL>K6ALLGEO 24D6 #DEF SPLITLEN=CSPLIT 24XQ #DEF NAFRA=CNAFRA 25CB #DEF NCHLI=CNCHLI 25X2 #DEF SPCHL=CSPCHL 26BL #DEF WAIT=CWAIT 26W= #DEF XJCHAPLOW=CJTHRESH3<#7777 27*W #DEF TRACE=K6COREALL 27TG [ 28*6 [CORE STORE ALLOCATION ROUTINES 28SQ [ 28TP ...#SKI K6COREALL 28WN ...( 28XM ...[THIS SUBROUTINE CHECKS THAT THE BLOCK SPECIFIED IN X1 IS CHAINED 28YL ...[CORRECTLY.IF NOT IT BRANCHES TO LABEL SILL TO GEOERR FREECORE. 28^5 ... LABFIX CHECKCHN 28^K ...XCHECKCHN 292J ... SMO FPTR(1) [ILLEGAL IF IMPROPERLY CHAINED 293H ... TXU 1 BPTR 294G ... BCS XBADCHAIN 295F ... SMO BPTR(1) 296D ... TXU 1 FPTR 297C ... BCS XBADCHAIN 298B ... EXIT 0 0 299* ...XBADCHAIN 29=# ... GEOERR 1,BADCHAIN 29?? ...) 29#B [ 29S2 [ 2=?L [THIS ROUTINE FREES THE BLOCK OF CORE SPECIFIED IN X1 RECHAINING IT IN 2=R= [ITS APPROPRIATE POSITION IN THE FREECORE CHAIN IF ANY ACTIVITIES ARE 2?=W [WAITING FOR CORE THEY ARE WOKEN UP THE TOTAL AMOUNT OF FREE CORE 2?QG [CURRENTLY AVAILABLE IS UPDATED 2#=6 [ 2#FY ... FIXTRA K1COREALL 2#PQ LABFIX HNFREE 2*9B NFREE STO 0 GL2 [REMEMBER LINK 2*P2 #SKI K6COREALL>699-699 2B8L TRACE 1,FREECORE 2BN= #SKI K6COREALL 2C7W ( 2CMG ... CALL 0 XCHECKCHN [CHECK BLOCK IN X1 CHAINED OK. 2GK= LDX 0 ATYPE(1) [FREED BLOCK TYPE 2H4W TXL 0 ACTY [TEST NOT ACTIVITY OR QBLOCK 2HJG BCS NJH1 2J46 LDX 0 BACKCHAN(1) [THAT IS STILL ON A LIST 2JHQ BZE 0 NJH1 2K3B ...SILL GEOERR 1,FREECORE 2KH2 NJH1 2L2L ) 2LG= STO 1 NAFRA [REMEMBER ADDRESS OF BLOCK TO FREE 2L^W LDX 0 WAIT [LOAD SWITCH SHOWING IF ANY ACTS ARE 2MFG ... BZE 0 NOWA1 [WAITING FOR CORE J IF NONE 2M^6 FON 1 [WAKE UP ALL ACTIVITIES WAITING CORE 2NDQ STOZ WAIT [SET SWITCH NONE NOW WAITING 2NG8 ...#SKI G4 2NHM ...NOWA1 2NLJ ...#UNS G4VOPA 2NPF ...( 2NSB ...#SKI G4 2NX? ...( 2P28 ... LDX 0 COBJFAIL 2P55 ... BZE 0 NOWA 2P82 ... LDX 0 COBJWAIT 2P=X ... BZE 0 NOWA [IF APPROPRIVATE 2P*S ... FON #105 [WAKE ACTS. WAITING FOR PROGRAM CORE 2PDP ... STOZ COBJWAIT [SET SWITCH NON NOW WAITING 2PHL ...) 2PLH ...) 2PPD ...NOWA LDX 1 NAFRA [RELOAD BLOCK S A 2Q2R ...#SKI G3 2Q#6 ...NOWA1 2QKF ... LDX 2 ARINGNO(1) 2QWW ANDX 2 BSP16 2RBG BZE 2 NRN [JUMP IF NONE 2RL# ... LDX 0 ATYPE(1) [J IF ADATA/FPSEUD BLOCK - MAY BE 8 2RW6 ... BXE 0 FPSEUTYP,NRN [ WDS ONLY 2S5Y ... LDX 0 ARINGNO(1) 2S*Q SRL 0 15 [ISOLATE NUMBER OF RINGS 2STB STO 0 ARINGLEN [REMEMBER NUMBER 2T*2 ADN 1 ARINGNO+1 2TSL NXT LDX 0 BPTR(1) 2W#= BZE 0 SNOOR 2WRW CALL 0 NDECH 2X?G SNOOR ADX 1 ARINGLEN [INCREMENT FOR NEXT RING 2XR6 BCT 2 NXT 2Y=Q LDX 1 NAFRA [RESTORE START ADDRESS 2YQB NRN CALL 0 NDECH [DECHAIN BLOCK 2^=2 N21X [ ENTRY FROM BCOPY AND LOCKC 2^PL STO 1 NAFRA 329= LDX 2 ASIZE(1) [ BLOCK SIZE 32NW LDN 0 2 [ MASK FOR BIT 22, THE 'FROZEN' BIT 338G ANDX 0 AFLAG(1) 347Q BNZ 0 XFROZ [ JUMP IF BLOCK IS FROZEN 34MB NFA [ ENTRY FOR FREED FAG-ENDS ( ALTLEN 3572 STOZ GENDP [ NO KNOWLEDGE OF POS'N IN F/C CHAIN 35LL NFE [ ENTRY FOR FREED FAG-ENDS ( RELFAG 366= LDN 0 1 [ OTHERWISE BLOCK WILL BE MADE 'FREE' 36KW STO 0 AFLAG(1) [ CLEAR FLAGS AND SET THE 'FREE' FLAG 375G ADS 2 CFREE [ UPDATE FREE CORE TOTAL 376X ...#UNS ISFCON 378# ...( 379P ... FIXTRA ISFCM1 37=M ... BRN XSFCM11 [IF ON TXL 1 CTOP 37?K ... BCC SLFC [J IF LL BLOCK 37#H ... BXU 2 CIROUND,SLFC [ONLY SMALLEST ON POOL 37*Y ... LDN 2 BF64 37C* ... STOZ ASFCFPTR+BPTR(1) [TO TELL FREEOUT 37DQ ... BRN NCH4 37G7 ... FIXTRA ISFCM11 37GT ...XSFCM11 37HJ ...) 37K6 ADX 2 1 [ GET NEXT CONTIGUOUS BLOCK 384Q ANDX 0 AFLAG(2) [ TEST BIT 23 38JB BZE 0 NAFT [ JUMP IF BLOCK NOT FREE 3942 #SKI K6COREALL>799-799 39HL TRACE ASIZE(2),AMALHIGH [TRACE SIZE & ADDR OF NEXT BLOCK UP 3=3= LDX 0 ASIZE(2) [ AMALGAMATE 3=GW ADS 0 ASIZE(1) [ SIZES 3=JY ...#UNS ISFCON 3=M2 ...( 3=P4 ... STO 1 NAFRA 3=R6 ... LDX 1 2 3=T8 ... CALL 0 NFROUT [REMOVE FROM SIZE RING 3=X= ... LDX 1 NAFRA 3=^# ...) 3?3B ...#UNS ISFCON 3?5D ...#SKI 3?7N ...[ FREEOUT 2 3?G6 LDX 0 FPTR(2) [THE FOLLOWING ROUTINE DECHAINS 3?^Q SMO BPTR(2) [THE BLOCK 3#FB STO 0 FPTR [IN ORDER TO COMPLETE 3#^2 LDX 0 BPTR(2) [THE AMALGAMATION 3*DL SMO FPTR(2) 3*Y= STO 0 BPTR 3BCW LDX 2 0 [X2 AND X0 BOTH NOW POINT TO THE 3BXG BRN NLOC [PRECEDING FREE BLOCK 3CC6 [ OTHERWISE IT IS NECESSARY TO LOCATE THE POSITION OF THE BLOCK 3CWQ [ IN THE FREECORE CHAIN 3DBB [ IF GENDP IS NON-ZERO IT HOLDS THE ADDRESS OF THE PRECEDING FREE BLOCK 3DW2 [ (AT PRESENT THIS ONLY APPLIES TO ENTRY FROM RELFAG FOR ORDINARY G/C 3F38 ... FIXTRA ISFCM10 3F8B ...SLFC 3F*L NAFT 3FT= LDX 2 GENDP 3G#W ... BNZ 2 NLNC [IF FAG END CANT BE PREVIOUS FREE ADJACENT 3GSG LDX 2 BFREE+1 [ TEST AND JUMP IF IT SHOULD 3H#6 TXL 1 2 [BE CHAINED AT END OF FREECORE CHAIN 3HRQ ... BCC NLOC1 3J?B LDN 2 BFREE [LOAD BASE 3J*5 ...#UNS ISFCON 3JBS ...( 3JDH ... BXL 1 FPTR(2),NLOC1 [J IF CAN GO AT FRONT 3JG= ... FIXTRA ISFCM100 3JH^ ... BRN XONFREE [LDN 2 BFTEMP IF ON 3JKN ... BRN NLNC 3JMC ...XONFREE 3JP6 ...) 3JR2 TXL 1 CMIDFREE 3K=L BCC NEND [JUMP IF AFTER MIDDLE OF CORE 3KQ= NTFR TXL 1 FPTR(2) [LOCATE CORRECT POSITION 3L9W BCS NLOC1 [STARTING AT FRONT 3LPG LDX 2 FPTR(2) 3M96 BRN NTFR 3MNQ NEND LDX 2 BPTR(2) [LOCATE CORRECT POSITION 3N8B TXL 1 2 [STARTING AT END 3NN2 BCS NEND 3P7L # 3PM= [ THE FINAL SECTION OF CODE DETERMINES WHETHER THE PRECEDING 3Q6W [ BLOCK IS FREE AND CAN THUS BE AMALGAMATED 3QLG # 3QW# ... FIXTRA ISFCM1100 3R66 NLOC1 LDX 0 2 3RKQ NLOC ADX 0 ASIZE(2) [ADDRESS BLOCK PHYSICALLY AFTER 3S5B [ PRECEDING FREE BLOCK 3SK2 TXU 0 1 [IF NOT OUR BLOCK - JUMP 3T4L BCS NLNC 3TJ= #SKI K6COREALL>799-799 3W3W TRACE ASIZE(2),AMALLOW [TRACE SIZE & ADDR OF NEXT BLOCK DOWN 3WHG LDX 0 ASIZE(1) [ OTHERWISE AMALGAMATE AND EXIT 3X36 ADS 0 ASIZE(2) 3X5F ...#UNS ISFCON 3X7S ...( 3X9B ... FIXTRA ISFCM1000 3X=Y ... BRN NZY [LDX 1 2 IF ON 3X#G ... CALL 0 NFROUT [REMOVE FROM SIZE RING (FREEOUT) 3XBT ...) 3XF8 ...#UNS ISFCON 3XHH ...#SKI 3XKW ...[ FREEOUT 2 3XPL ...#UNS ISFCON 3XTB ... TRANSFIX CALL 0 ,HZFRIN 3X^6 ...#UNS ISFCON 3Y4W ...#SKI 3Y8L ...[ FREEIN 2 3YG2 BRN NZY 3YPS ...NLNC 3YRH ...#UNS ISFCON 3YT= ...( 3YWB ... FIXTRA ISFCM110 3YXG ... BRN XSFCM110 [STO 2 BSOURCE WHEN ON 3YYN ... TRANSFIX CALL 0 ,HZFRIN 3^2C ... LDX 2 BSOURCE 3^3= ...XSFCM110 3^46 ...) 3^5T ...#UNS ISFCON 3^7J ...#SKI 3^9D ...[ FREEIN 1 [ LINK THE FREED BLOCK INTO SIZE RING 3^F= BRN NCH3 3^YW # 42DG XFROZ [ACTION WHEN A FROZEN BLOCK IS FREED 42N# ... STO 0 AFLAG(1) [FROZ BIT SET 42Y6 ADS 2 FREZFREE [UPDATE FROZEN FREE TOTAL 43CQ FREZKICK [AWAKEN ANY FREEZE ACTIVITIES 43XB LDX 1 NAFRA 44C2 XFR1 LDX 0 FPSEUTYP 44WL STO 0 ATYPE(1) [MARK BLOCK PSEUDO FREE 45B= LDN 2 BCAFREZ 45TW BRN NCH3 [J TO CHAIN IN FREEZE CHAIN 46*G # 46T6 [ RELFAG IS AN ENTRY BRANCH OF THE FREECORE ROUTINE. ALL CHECKS ARE 47#Q [ SKIPPED SINCE THEY DO NOT APPLY TO FAG-ENDS. THE LOWER SECURITY 47SB [ MEANS THAT THIS FACILITY SHOULD NOT BE AVAILABLE OUTSIDE COREALL. 48#2 RELFAG [ ASSUMES X1 POINTS TO FAG-END AND 48RL STO 0 GL2 [ ITS SIZE IS IN ITS ASIZE WORD 493D ... FIXTRA CHAPMOVE7 49?= LDX 2 ASIZE(1) 49QW #SKI TRACE>499-499 4==G TRACE 2,FAGEND 4=Q6 BRN NFE 4?9Q # 4?PB [ 4#92 [THIS ROUTINE RINGS THE ELEMENT POINTED TO BY X1 AFTER THE BLOCK 4#NL [POINTED TO BY X2 4*8= [ 4*MW LABFIX ERING 4B7G XRING STO 0 GL2 [SET LINK 4BM6 BRN NCH3 [JUMP TO ENRING 4C6Q [ 4CLB [THIS ROUTINE DERINGS THE ELEMENT POINTED TO BY X1, SETTING IT NULL 4D62 [ 4DKL LABFIX ARING 4F5= XDRIN STO 0 GL2 [STORE LINK 4FJW CALL 0 NDECH [DERING 4G4G STOZ BPTR(1) [SET NULL 4GJ6 BRN NZY [JUMP TO TERMINATE 4H3Q [ 4HHB [ THIS ROUTINE UNCHAINS THE BLOCK POINTED TO BY X1 AND RECHAINS IT AFTER 4J32 [ THE BLOCK POINTED TO BY X2, AFTER FIRST CHECKING X1 AND X2 FOR 4JGL [ REASONABLE VALUES 4K2= [ 4KFW LABFIX CHAN 4K^G XCHAN STO 0 GL2 [REMEMBER LINK 4LF6 #SKI K6COREALL>799-799 4LYQ ( 4MDB TRACE 1,CHAIN1 4MY2 TRACE 2,CHAIN2 4NCL ) 4S#L LABFIX ACH1 4SS= TXU 1 2 [TEST AND EXIT IF TRYING TO CHAIN 4T?W BCC NZY 4TRG NCH2 CALL 0 NDECH [DECHAIN THE BLOCK 4W?6 LABFIX ACH3 4WB= ...NCH3 4WFB ...#SKI K6COREALL 4WJG ...( 4WML ... STO 1 GL1 [SAVE X1 4WQQ ... LDX 1 2 [BLOCK TO BE CHAINED AFTER 4WTW ... CALL 0 XCHECKCHN [CHECK THAT IT IS CHAINED CORRECTLY 4W^2 ... LDX 1 GL1 [RESTORE X1 4X46 ...) 4X7= ...NCH4 CALL 0 NCHAIN [ CHAIN THE BLOCK 4X=B NZY LDX 1 FX1 [ RESET X1 4XQ2 LDX 2 FX2 [ AND X2 4Y9L BRN (GL2) [ EXIT 4YP= [ 4^8W [ THIS ROUTINE CHAINS THE BLOCK POINTED TO BY X1 AFTER THE BLOCK POINTED 4^NG [ TO BY X2 4^Y# ... LABFIX ACHAIN 5286 NCHAIN 52MQ STO 0 GL1 [ SAVE LINK 537B LDX 0 FPTR(2) [ LOAD FORWARD POINTER PRECEDING BLOK 53M2 STO 1 FPTR(2) [STORE NEW FORWARD PTR PRECEDING BLK 546L STO 0 FPTR(1) [STORE FORWARD PTR NEW BLOCK 54L= STO 2 BPTR(1) [STORE BACKWARD PTR NEW BLOCK 555W SMO 0 [STORE NEW BACKWARD POINTER IN 55KG STO 1 BPTR [FOLLOWING BLOCK 5656 BRN (GL1) [ EXIT 56JQ [ 574B [THIS ROUTINE DECHAINS THE BLOCK SPECIFIED IN X1 57J2 LABFIX ADECH 583L NDECH STO 0 GL1 [REMEMBER LINK 58H= #SKI K6COREALL>899-899 592W TRACE 1,NDECH 595F ...#SKI K6COREALL 5984 ...( 59=M ... CALL 0 XCHECKCHN [CHECK THAT BLOCK IS CHAINED OK. 59*= ... [GEOERR BADCHAIN IF NOT 59CT ...) 59GG LDX 0 FPTR(1) [LOAD S A OF NEXT BLOCK 5=26 SMO BPTR(1) [STORE AS NEW FORWARD POINTER IN 5=FQ STO 0 FPTR [PRECEDING BLOCK 5=^B LDX 0 BPTR(1) [LOAD S A PRECEDING BLOCK 5?F2 SMO FPTR(1) [STORE AS NEW BACKWARD POINTER IN 5?YL STO 0 BPTR [FOLLOWING BLOCK 5#D= BRN (GL1) [EXIT 5#XW [ 5*CG [ 5*X6 [THIS ROUTINE UNLOCKS A LOCKED BLOCK REMOVING ANY PLEASE MOVE MARKER 5BBQ [ 5BWB LABFIX GUNLOK 5CB2 NUNL 5CTL #SKI K6COREALL 5D*= ( 5DSW BXL 2 FCORES,SILL3 [GEORGE ERROR IF OUTSIDE VARIABLE 5F#G ... BXL 2 GFIXCHAP,NOTILL3 [ CORE 5FS6 SILL3 GEOERR 1,UNL HIGH 5G?Q NOTILL3 5GRB ) 5H?2 STO 0 GL2 [DUMP LINK 5HQL NGN 1 #11 [ MASK TO HIDE 'LOCKED' BIT 5J== ANDX 1 AFLAG(2) [ CLEAR LOCKED BIT 5JPW STO 1 AFLAG(2) 5K9G ANDN 1 2 [ CHECK 'FROZEN' BIT 5KP6 BNZ 1 NUNL1 [ JUMP IF BLOCK IS FROZEN 5L8Q LDX 1 WAIT 5LNB BZE 1 NZY [ IF NONE WAITING JUMP TO EXIT 5M82 FON 1 [WAKE UP ALL ACTIVITIES WAITING FORCO 5MML STOZ WAIT [SET SWITCH NONE NOW WAITING 5N7= BRN (GL2) 5NLW NUNL1 FREZKICK [AWAKEN ANY SLEEPING FREEZE ACTIVITIE 5P6G BRN NZY [ AND EXIT 5PL6 [ 5Q5Q [ 5QKB [THIS ROUTINE LOCKS THE BLOCK SPECIFIED IN X2 5R52 [ 5RJL LABFIX ALOCK 5S4= NLOCK 5SHW #SKI K6COREALL 5T3G ( 5TH6 BXL 2 FCORES,SILL4 [GEORGE ERROR IF OUTSIDE VARIABLE 5W2Q ... BXL 2 GFIXCHAP,NOTILL4 [ CORE 5WGB SILL4 GEOERR 1,LOCKHIGH 5X22 NOTILL4 5XFL ) 5X^= LDN 1 #10 5YDW ORS 1 AFLAG(2) [ SET 'LOCKED' BIT IN AFLAG 5YYG NLOC2 LDX 1 FX1 [RESET X1,X2 & EXIT 5^D6 LDX 2 FX2 5^XQ EXIT 0 0 62CB [ 62X2 [ THIS ROUTINE IS A COORDINATING VERSION OF LOCK 63BL [ 63W= LABFIX COLOCK 64*W NLOCKC 64TG STO 0 GL2 [DUMP LINK 65*6 STO 2 GEN0 [DUMP BLOCK ADDRESS 65SQ CALL 0 NLOCK [CHECK BLOCK ADDRESS & LOCK IT 66#B LDX 0 GL2 66S2 LDX 2 GEN0 67?L LDX 1 AFLAG(2) 67R= ANDN 1 #402 [ JUMP IF BLOCK IS MARKED AS 68=W BNZ 1 NLOK1 [ 'FROZEN' OR 'PLEASE MOVE UP' 68QG ADN 0 2 69=6 BRN NLOC2 69PQ NLOK1 LDX 1 ALOGLEN(2) [IF FROZEN,SET UP FOR GETCORE 6=9B STO 1 GLOGLEN [ LOGICAL LENGTH 6=P2 LDX 2 AFLAG(2) 6?8L ANDN 2 4 6?N= SRL 2 2 6#7W LDCT 2 HLOK(2) [ REQU TYPE-OPTIONAL,LONGLOCK IF 6#MG [ REQD,LOCK TYPE 6*76 LDN 1 0 [ RING CONFIGN-BLOCKCOPY WILL SET RNG 6*LQ [LINK ALREADY IN X0 6B6B BRN XTND [J TO DO GETCORE 6BL2 [ 6BL7 ...#UNS ISFCON 6BL# ...( 6BLF ...# 6BLL ...#UNS ICASSTATS 6BLR ...( 6BLS ...#UNS ICTON 6BLT ...( 6BLW ...SGETGMILL 6BLX ...# FOR ICT ADD OTHER G MEMBERS MILL 6BLY ... STO 1 BSOURCE 6BL^ ... LDCT 1 #001 6BM2 ... ANDX 1 ASWITCH1 6BM3 ... [J IF ICTSW OFF 6BM4 ... BZE 1 SGMEND 6BM5 ... LDX 1 ASFNO1 6BM6 ...SGM2 6BM7 ... SMO GMELRTAB+1(1) 6BM8 ... ADX 4 ATM 6BM9 ... BCT 1 SGM2 6BM= ...SGMEND 6BM? ... LDX 1 BSOURCE 6BM# ... EXIT 0 0 6BM* ...) 6BMB ...# FIND MILL SPENT IN ACAS 6BMC ...SCASMILL 6BMJ ... '167 0 0 6BML ... LDX 4 K7 6BMP ...#UNS ICTON 6BMW ... CALL 0 SGETGMILL 6BNS ... SBX 4 CASK7 6BN^ ... ADS 4 CASMILL [ADD TO TOTAL 6BP8 ...SCASEX 6BPD ... EXIT 7 0 6BPK ...) 6BPQ ...# 6BPX ...# IN THE STRUCTURED FREE CORE SYSTEM FREE BLOCKS ARE RINGED ON TO 6BQ4 ...# SIZE RINGS THROUGH THEIR SIZE RING POINTERS. THEY REMAIN ON THE 6BQ9 ...# FREE CORE CHAIN. EACH SIZE RING HOLDS A RANGE OF SIZES IN 6BQB ...# ASCENDING ORDER OF SIZE. THE SIZE RANGE FOR EACH RING IS 6BQH ...# DETERMINED BY A FIXED CORE TANBLE. 6BQN ...# 6BQT ...# THIS SUBROUTINE SEARCHES THE SIZE RINGS TO FIND A BLOCK BIG 6BR2 ...# ENOUGH TO SATISFY THE REQUEST. IT RETURNS TO THE CALLING ROUTINE 6BR7 ...# IF UNSUCCESSFUL. IF SUCCESSFUL IT BRANCHES TO PROCESS THE BLOCK. 6BR# ...# IT IS USED BY THE FREEIN MACRO, IN WHICH CASE ONLY THE APPROPRIAT 6BRF ...# SIZE RING IS SEARCHED, RETURNING THE ADDRESS OF THE BLOCK BEHIND 6BRL ...# WHICH THE FREED BLOCK SHOULD BE CHAINED. 6BRR ...# 6BSC ...# 6BSJ ...# THE CODE FOR THE SIZERINGS SUBROUTINE IS HELD IN 6BSP ...# SEGMENT CASCODE. 6BSW ...# 6BTG ...# 6BTM ...# ENTRY POINT FOR FREEIN MACRO. CHAINS BLOCK POINTED TO BY X1 6BTS ...# INTO ITS SIZE RING IN STRUCTURED FREE CORE SYSTEM. 6BT^ ...# X0, X2 OVERWRITTEN, X1 REMAINS POINTING TO THE BLOCK ON EXIT. 6BW6 ...# CODE FOR FREEIN ROUTINE HELD IN SEGMENT CASCODE. 6BW? ...# 6BWD ...) 6BWK ...#UNS ISFC 6BWQ ...( 6BWX ...# IF ONLY ISFC IS SET,AND NOT ISFCON, FREEIN AND FREEOUT 6BX4 ...# JUST EXIT. 6BX9 ... LABFIX HNFRIN 6BXB ...NFRIN 6BXH ...) 6BXN ...#UNS ISFCON 6BXT ...( 6BY3 ... FIXTRA ISFCM2 6BY9 ... EXIT 0 0 [STO 0 CASLNK IF ON 6BYC ... TRANSFIX BRN ,HZFRIN 6BYL ...# 6BYR ...# ENTRY POINT FOR FREEOUT MACRO. DECHAINS BLOCK POINTED TO BY X1 6BYY ...# FROM ITS SIZE RING IN STRUCTURED FREE CORE SYSTEM. 6B^5 ...# X0 OVERWRITTEN, X1 STILL POINTS TO BLOCK ON EXIT. 6B^= ...# 6B^C ...) 6B^J ...#UNS ISFC 6B^P ...( 6B^W ... LABFIX HNFROUT 6C23 ...NFROUT 6C2* ...) 6C2G ...#UNS ISFCON 6C2M ...( 6C2Q ... FIXTRA ISFCM3 6C2T ... EXIT 0 0 [STO 0 CASLNK IF ON 6C2Y ... LDX 0 ASFCFPTR+BPTR(1) 6C33 ... BZE 0 (CASLNK) [J IF NOT RINGED 6C36 ... SMO ASFCFPTR(1) 6C39 ... STO 0 BPTR 6C3# ... LDX 0 ASFCFPTR(1) 6C3C ... SMO ASFCFPTR+BPTR(1) 6C3G ... STO 0 FPTR 6C3K ...NFRINEND 6C3Q ...NFROUTEND 6C3S ... BRN (CASLNK) [EXIT 6C3X ...) 6C44 ...#UNS ISFC 6C49 ...( 6C4? ...#UNS ISFCON 6C4* ...#SKI 6C4C ... BRN (0) [EXIT 6C4H ...# 6C4N ...) 6C5L [ 6CK= [ 6D4W [THIS ROUTINE GETS A BLOCK OF CORE OF THE SIZE SPECIFIED IN X2 FOR AN 6DJG [OBJECT PROGRAM OR GEORGE'S OWN USE AS SPECIFIED IN X1 6F46 [ 6FHQ [ 6G3B [ENTRY POINT FOR GETTING BACKING STORE TRANSFER QUEUE BLOCKS 6GH2 [ 6H2L LABFIX BSTQSWAP 6HG= LDCT 1 HLINKB [GETQUEU - OPTIONAL IF FOR SWAP 6H^W BRN NQU1 6JFG LABFIX BSTQBLOK 6J^6 LDCT 1 HMANDAT+HLINKB [ ELSE MANDATORY 6KDQ NQU1 LDN 4 AQUE [QUEUE BLOCK LENGTH 6KYB LDX 2 AQTYPE 6LD2 BRN NEMS1 6LXL LABFIX EMSENT 6MC= NEMS LDCT 2 #2 [NO RINGS - DEFAULT LENGTH=2 6MWW LDCT 1 HMANDAT+HLINKB [MANDATORY 6NBG NEMS1 LDN 5 3 6NW6 STO 5 GLINKSTEP [NO STEPPING BACK FOR GETEMSCR/GETQUE 6P*Q BRN QCOM 6PTB LABFIX HGLINK 6Q*2 LDN 1 1 6QSL STO 1 GLINKSTEP [BACK 2 FOR GETLINK 6R#= LDX 2 ALINKTYPE 6RRW LDCT 1 HMANDAT+HLINKB [MANDATORY 6S?G QCOM STO 2 GRING [RINGS 6SR6 STO 0 NCHLI [LINK 6T=Q STO 1 GRTYPE 6TQB STO 4 GLOGLEN [REQUEST 6W=2 BRN NCHP [JOIN NORMAL G/C PATH 6WPL [ 6X9= [ NORMAL ENTRY POINTS 6XNW [ 6Y8G [ GETCORE WITHOUT RINGS, GETACT, GETCHAP 6YN6 LABFIX HNCORE 6^7Q NCORE STO 2 GLOGLEN [LENGTH REQUESTED 6^MB LDX 2 0 7272 LDN 0 0 [LINK STEP INCREMENT 72LL LDCT 1 2 [RING CONFIG.(IGNORED IF GETACT) 736= BRN NCO1 73KW [ GETCORE WITH RINGS 745G LABFIX HNCORE1 74K6 NCORE1 754Q STO 2 GLOGLEN [LENGTH REQUESTED 75JB LDX 2 0 7642 NGN 0 2 [LINK STEP INCREMENT 76HL NCO1 STO 0 GLINKSTEP 773= LDN 0 1(2) [RETURN ADDRESS 77GW LDX 2 0(2) [REQUEST TYPE 782G XTND STO 1 GRING 78G6 STO 2 GRTYPE 78^Q SQOSS [PROCESS THE LINK 79FB ... SQUMP2 [DUMP THE ACCUMULATORS 79^2 NB123 LDX 4 GLOGLEN [LOAD LENGTH REQUESTED 7=DL NCHP 7=ND ... STOZ GENDP 7=Q2 ...#UNS CA1D 7=RJ ... ADX 4 CIRNDB 7=T6 ...#UNS CA1D 7=WN ...#SKI 7=Y= ADN 4 A1+IROUND-1 7?CW ANDX 4 IROUNDNG 7?XG STO 4 GEN4 [STORE PHYSICAL AMOUNT REQUIRED 7?Y5 ...#UNS ADP21 7?^W ...( 7#2F ...# CODE FOR PERF. MEASUREMENT OF CORE ALLOCATION SYSTEM-MODULE 21 7#2K ... SMO ADPBUF 7#2P ... LDX 3 ADPTAB+3 7#2T ... BNG 3 XADP1 [J IF NOT SWITCHED ON 7#34 ... LDX 3 ADPPTR 7#3M ... BNG 3 XADP1 [J IF BUFFER NOT FREE 7#4= ... LDN 3 550 7#4T ... TXL 3 ADPPTR 7#5D ... BCS XADP1 [J IF NO ROOM IN BUFFER 7#63 ... LDN 3 450 7#6L ... TXU 3 ADPPTR 7#79 ... BCS XADP2 [IF BUFFER GETTING FULL 7#7S ... LDN 3 21 7#8C ... LONGON1 ADPSTYLE,3 [WAKE UP YOU LAZY PERF MOB 7#92 ...XADP2 LDX 3 ADPPTR 7#9K ... SRL 4 3 [DIVIDE LENGTH BY 8 7#=8 ... SRC 4 7 [LOAD INTO BITS 0-6 7#=R ... SMO ADPBUF 7#?B ... ORS 4 0(3) [STORE IN BUFFER 7#?^ ... LDN 3 1 7##J ... ADS 3 ADPPTR [UPDATE PTR. 7#*7 ... LDX 4 GEN4 [RELOAD X4 7#*Q ...XADP1 7#B* ...) 7#C6 #SKI K6COREALL>699-699 7#WQ ( 7*BB TRACE 4,GETCORE 7*W2 TRACE GRTYPE,GRTYPE 7B*L ) 7BT= #SKI K6COREALL 7C#W ( 7CSG TXL 4 AFREE [CHECK NOT ASKING FOR MORE THAN IS 7D#6 BCS NOTILL5 [AVAILABLE 7DRQ SILL5 GEOERR 1,COREREQU 7F?B NOTILL5 7FR2 ) 7G=L NBCK3 7GQ= LDCT 3 HLONGLOCK [ LOAD LONGLOCK-TYPE MASK 7H9W ANDX 3 GRTYPE [ CHECK IF REQUEST IS LONGLOCK TYPE 7H*2 ...#UNS ISFCON 7HD6 ... BZE 3 TESTSFC [J IF IT IS NOT 7HH= ...#UNS ISFCON 7HLB ...#SKI 7HPG BZE 3 NOR [ JUMP IF IT IS NOT 7J96 #SKI TRACE>499-499 7JNQ TRACE GRTYPE,LLTYPE 7JTY ...#UNS ISFCON 7K36 ... TRANSFIX CALL 0,LLQK [DO QUICK LLGC 7K8B LDX 1 GLLSEMA [ IS THERE A LONGLOCK GETCORE ALREADY 7KN2 BZE 1 RGC [ IN PROGRESS? JUMP IF NOT. 7L7L LDX 0 GRTYPE 7LM= SLC 0 1 [ IS REQUEST OPTIONAL? 7M6W BPZ 0 NOWAIT [ IF YES, EXIT VIA NOWAIT 7MLG #SKI TRACE>499-499 7N66 TRACE GLLSEMA,WAITING 7NKQ CALL 0 SETWAITING [ STEPS BACK LINK TO RE-ENTER GETCORE 7P5B COOR3X GLLWAIT [ AND WAIT FOR TURN 7PK2 RGC 7Q4L LDX 1 GFIXCHAP [ ALL LONGLOCK GETCORES SHOULD BE 7Q7Q ...#UNS ISFCON 7Q=W ... BNG 1 TESTSFC [ DELAYED UNTIL END OF EMS 7QB2 ...#UNS ISFCON 7QF6 ...#SKI 7QJ= BNG 1 NOR [ DELAYED UNTIL END OF EMS 7R3W STO 3 GLLSEMA 7RHG SMO FX2 [ SAVE THE 7S36 LDN 1 ACC3 [ LINK OF THE ACTIVITY 7SGQ LDN 2 GLLACCS [ REQUESTING THE GETCORE 7T2B MOVE 1 ALINK [ OVER THE COORDINATION 7TG2 LDN 1 GLINKSTEP [ SAVE THE OTHER REQUEST PARAMETERS, 7T^L LDN 2 GLLLINKS [ GLINKSTEP, GLOGLEN, GRING, GRTYPE 7WF= MOVE 1 5 [ OVER THE COORDINATION 7WP4 ... FIXTRA ISFCM30 7WYW ACROSS COREALLF,1 [ ENTER COREALLF FOR LONGLOCK REQUEST 7WYY ...#UNS ISFCON 7W^2 ...( 7W^4 ...TESTSFC 7W^5 ...#UNS ISFCON 7W^6 ...( 7W^7 ... FIXTRA ISFCM4 7W^8 ... BRN NOR [TXU 4 CIROUND IF ON 7W^9 ... BCS SLGC 7W^= ... LDX 1 BF64 7W^? ... BXE 1 CX64,SLGC [J IF POOL EMPTY 7W^# ... SBS 4 CFREE [KEEP FREEE TOTAL RIGHT 7W^* ... LDX 2 FX2 7W^B ...#SKI K6COREALL 7W^C ... CALL 0 XCHECKCHN 7W^D ... LDX 2 FPTR(1) 7W^F ... LDX 3 BPTR(1) 7W^G ... STO 2 FPTR(3) 7W^H ... STO 3 BPTR(2) 7W^J ... LDX 2 FX2 [NOW CHAIN IT 7W^K ... LDX 3 FPTR(2) 7W^L ... STO 1 FPTR(2) 7W^M ... STO 3 FPTR(1) 7W^N ... STO 2 BPTR(1) 7W^P ... STO 1 BPTR(3) 7W^Q ... STOZ AFLAG(1) [ORDINARY BLOCK 7W^R ... BRN Q64 7W^S ...SLGC 7W^T ...) 7W^W ...# 7W^X ...# CODE FOR ALTERNATIVE CORE ALLOCATION SYSTEM (STRUCTURED FREE CORE) 7W^Y ...# SOURCES OF CORE ARE LOOKED AT IN THE FOLLOWING 7W^^ ...# ORDER:- 7X22 ...# (1) SIZE RINGS 7X23 ...# (2) INVALID FREE PROGRAM BLOCKS,IF BIG ENOUGH 7X24 ...# (3) CHAPTERS IF BIG ENOUGH 7X25 ...# (4) AMALGAMATION PATH (OF STANDARD CAS) 7X26 ...# 7X27 ...#UNS ICASSTATS 7X28 ...( 7X29 ... '167 0 0 7X2= ... LDX 4 K7 7X2? ...#UNS ICTON 7X2# ... CALL 0 SGETGMILL 7X2F ... STO 4 CASK7 [STORE MILL TIME AT ENTRY TO ACAS 7X2G ... LDX 4 GEN4 7X2J ...) 7X2L ...# 7X2M ... TRANSFIX CALL 7,HZRNG 7X2N ... FIXTRA ARJP 7X2P ... TRANSFIX CALL 7,QAMALG 7X2Q ...# RETURN MADE ONLY IF UNSUCCESSFUL 7X2S ...# 7X2W ...# (2) TRY IFPBS 7X2Y ...# 7X34 ... BSON EMSBIT,SUSECHAP [J IF EMS 7X36 ...# FIRST SEE IF THERE IS FPB RIGHT SIZE 7X38 ... LDN 1 BOBJUNUSE [BASE OF FPB CHAIN 7X3# ...SUNV1 7X3B ... CALL 7 NEXTFPB [GET NEXT FPB (BACKWARDS) 7X3D ... BRN SUSECHAP [J IF END OF CHAIN 7X3G ... LDX 0 JOBNOWAS(1) 7X3J ... BNZ 0 SUNV1 [J IF VALID FPB 7X3L ... LDX 0 ASIZE(1) 7X3N ... SBX 0 GEN4 [ S - R 7X3Q ... BNG 0 SUNV1 [J IF NOT BIG ENOUGH 7X5# ...# GOT IFPB BIG ENOUGH 7X5B ...SGOTIFPB 7X5C ...#SKI TRACE>499-499 7X5D ... TRACE 1,IFPBFND 7X5G ...#UNS ICASSTATS 7X5J ...( 7X5L ... LDN 0 1 7X5N ... ADS 0 CASIFPB [ADD TO CAS IFPB COUNT 7X5Q ...) 7X5S ... LDX 0 ALOGL(1) 7X5W ... SBS 0 CINVFPB [REDUCE FPB COUNTS 7X5Y ...SSUB 7X62 ... SBS 0 COBJUNUSE 7X64 ... CALL 0 NDECH [DECHAIN FPB 7X65 ... ADN 1 APBRG 7X66 ... CALL 0 NDECH 7X67 ... SBN 1 APBRG [DECHAIN FROM FPBRG 7X68 ... BRN SPLITTEST 7X69 ...# 7X6= ...# (3) TRY CHAPTERS, USING ONLY THOSE 7X6# ...# OVER CHAPTERQUOTA UNLESS CHAPTER 7X6B ...# REQUEST OR COREJAM 7X6D ...# 7X6G ...# FIRST SEE IF THERE IS A CHAPTER BIG 7X6J ...# ENOUGH (BUT OMIT IF COREJAM) 7X6L ...# 7X6N ...SUSECHAP 7X6Q ... LDX 0 CJSUM 7X6W ... SBN 0 XJCHAPLOW 7X6^ ... BPZ 0 SCHR [J IF COREJAM 7X74 ...SUCH1 7X76 ... CALL 7 SCHAPCHK [DO CHECKS, RETURNING AS FOLLOWS 7X78 ... BRN SFINDCH1 [J SINCE ACHAP > CHAPTERQUOTA 7X7= ... BRN SRAMALG [J SINCE CHAPTER REQUEST 7X7# ... BRN SRAMALG [J TO AMALGAMATION PATH SINCE WE 7X7B ... [CAN'T JUSTIFY USING CHAPTERS 7X7D ...SCHR 7X7G ... LDCT 5 #677 [SET X5 ARTIFICIALLY HIGH 7X7J ... BRN SFINDCH2 7X7L ...SFINDCH1 7X7N ... LDX 5 ACHAP [X5 = ACHAP INITIALLY. DECREMENTED BY 7X7Q ...SFINDCH2 [SIZES OF UNAVAILABLE CHAPTERS 7X7S ... LDN 1 BCHAP [BASE OF CHAPTER CHAIN 7X7W ...SFINDCH 7X7Y ... TXL 5 CHAPQUOTA 7X7^ ... BCS SRAMALG [J SINCE CHAPTERQUOTA REACHED 7X83 ... CALL 7 SFCH1 7X84 ... [FIND USABLE CHAPTER 7X86 ... BRN SRAMALG [J SINCE END OF CHAIN 7X88 ... LDX 0 ASIZE(1) 7X8= ... TXL 0 GEN4 7X8# ... BCC SGOTCHP [J SINCE BLOCK BIG ENOUGH 7X8B ... SBX 5 0 [REDUCE X5 BY SIZE 7X8D ... BRN SFINDCH 7X8G ...# 7X8J ...# NOW TRY FREEING CHAPTERS 7X8L ...# 7X8P ...SCHAPFREE 7X8S ... CALL 7 SCHAPCHK [DO CHECKS, RETURNING AS FOLLOWS 7X8W ... BRN SCHFREE [J SINCE ACHAP > CHAPTERQUOTA 7X8Y ... BRN SCHFREE [J SINCE CHAPTER REQUEST 7X92 ... LDX 0 CJSUM 7X94 ... SBN 0 XJCHAPLOW 7X96 ... BNG 0 SRAMALG [J IF NOT COREJAM 7X98 ... FIXTRA CHAPLOW3 7X99 ...# CHECK WITH RTM CHAPLOW BEFORE ALTERING NEXT 3 INSTRS. 7X9= ... BRN SCHFREE 7X9# ... BRN SRAMALG 7X9B ...SCHFREE 7X9D ... LDN 1 BCHAP [BASE OF CHAPTER CHAIN 7X9G ... CALL 7 SFINDCHAP [FIND AVAILABLE CHAPTER 7X9K ... BRN SRAMALG [J SINCE END OF CHAIN 7X9N ... CALL 7 SCHAPTIDY [ADJUST COUNTS ETC. 7X9Q ... CALL 0 NFREE [FREE THE CHAPTER & AMAL 7X9S ...#UNS ICASSTATS 7X9W ...( 7X9Y ... LDN 0 1 7X=2 ... ADS 0 CASCHAPS [ADD TO COUNT OF CHAPTERS FREED 7X=4 ...) 7X=8 ... TRANSFIX CALL 7,QAMALG1 7X=# ... CALL 0 SAMALG [J TO TRY AMALGAMATIONSINCE WE KNOW N 7X=D ... BRN SCHAPFREE [J SINCE UNSUCCESSFUL 7X=G ...SGOTCHP 7X=H ...#SKI TRACE>499-499 7X=J ... TRACE 1,SGOTCHP 7X=L ... CALL 7 SCHAPTIDY [ADJUST COUNTS ETC. 7X=N ... CALL 0 NDECH [DECHAIN CHAPTER 7X=Q ...#UNS ICASSTATS 7X=S ...( 7X=W ... LDN 0 1 7X=Y ... ADS 0 CASCHAPS [ADD TO COUNT OF CHAPTERS FREED 7X?2 ...) 7X?4 ... BRN SPLITTEST 7X?6 ...# 7X?8 ...# (4) TRY NORMAL AMALGAMATION PATH 7X?9 ...SRAMALG 7X?# ...SAMALG 7X?* ...# ENTER AMALGAMATION PATH 7X?C ... LDX 4 GEN4 7X?D ...#UNS ICASSTATS 7X?F ...( 7X?G ... LDN 0 1 7X?H ... ADS 0 CASAMAL [ADD TO NO.TIMES AMALGAMATION ENTERED 7X?J ...) 7X?L ... BRN NOR 7X?N ...# 7X*Y ...# NOW TEST THE CHOSEN BLOCK TO SEE IF 7XB2 ...# IT IS WORTH SPLITTING. IF SO, THE 7XCH ... LABFIX HNTST 7XCJ ...SDECH 7XCL ... CALL 0 NDECH [REMOVE FROM FREE CHAIN 7XCN ... LDX 6 ASIZE(1) 7XCQ ... BRN SALL11 7XCS ...SPLITTEST [CHOSEN BLK NOT A FREE BLK 7XCW ... LDX 6 ASIZE(1) 7XCY ... BRN SALL2 7XD2 ...) 7XD= ... FIXTRA ISFCM41 7XDG NOR 7XY6 BXGE 4 CFREE,NONE [ JUMP IF NOT ENOUGH FREE CORE 7XY* ...#UNS ISFCON 7XYJ ...( 7XYR ...[ IN SFC WE MUST NEED TO AMALGAMATE BY MOVING 7X^2 ...[GET X2->1ST/FREE 7X^9 ... LDX 2 FCORES 7X^D ... BRN PHIRST 7X^M ...NOTFREE 7X^W ... NGX 4 GEN4 [FOR COREMOVE CHECK 7Y25 ... LDX 5 GEN4 [DITTO:-RUNNING TOTAL 7Y2# ... ADX 2 ASIZE(2) 7Y2H ... BXE 2 GFIXCHAP,NONE [J IF END REACHED 7Y2Q ...PHIRST 7Y2^ ... LDX 0 AFLAG(2) 7Y38 ... BCT 0 NOTFREE [J IF NOT FREE 7Y3C ...NOK LDX 1 2 [LOAD SIZE FIRST FREE BLOCK READY 7Y3L ... LDN 7 0 [ FOR NEW FREE COUNT 7Y3T ... BRN PHIRSTA 7Y44 ...SFREE ADX 1 ASIZE(1) [ GET ADDRESS OF NEXT BLOCK 7Y4? ... BXGE 1 GFIXCHAP,NONE [J IF END OF VAR CORE 7Y4G ...PHIRSTA 7Y4P ... LDX 6 ASIZE(1) [ LOAD ITS SIZE 7Y4Y ... FIXTRA CHAPMOVE1 7Y57 ... LDN 0 #217 [ PRESERVE BITS 16,20,21,22,23 TO SEE 7Y5B ... ANDX 0 AFLAG(1) [IF CHAPTER, LOCKED, LOCKED, FROZEN 7Y5K ... [OR FREE RESP. 7Y5S ... BZE 0 SALR [ JUMP IF NONE OF THOSE 7Y63 ... ANDN 0 #16 [ TEST IF LOCKED,FROZEN OR LONGLOCK 7Y6= ... BZE 0 WHAT [ & JUMP IF NOT (EG NOT LOKD CHAPBLOK 7Y6F ...#SKI K6COREALL>299-299 7Y6N ... TRACE ATYPE(1),BLOCKING 7Y6X ... ANDN 0 #12 7Y76 ... BNZ 0 SLOKD [J IF LOCKED OR FROZEN 7Y7* ... TXL 2 CTOP 7Y7J ... BCC SALR [J IF OUT OF LONGLOCK AREA 7Y7R ...SLOKD LDX 2 1 7Y82 ... BRN NOTFREE [RESET TO START AGAIN 7Y89 ...SALR ADX 5 6 [KEEP RUNNING TOTAL OF AMOUNT TO MOVE 7Y8D ... SBX 6 ALOGLEN(1) [CALC ANY EXCESS IN A USED BLOCK 7Y8M ... SBN 6 A1 7Y8W ... ANDX 6 IROUNDNG 7Y95 ... SBX 5 6 [KEEP ACCURATE TAKE EXCESS OFF 7Y9# ... LDX 0 CJSUM 7Y9H ... SBN 0 XJCHAPLOW 7Y9Q ... BPZ 0 WHAT [J IF MOVE ANYWAY COS OF COREJAM 7Y9^ ... LDX 0 5 [KEEP A COPY 7Y=8 ... SBX 5 4 [SUB EXCESS COVERED 7Y=C ... NULL 7Y=L ... FIXTRA CORESET 7Y=T ... SRL 5 1 7Y?4 ... BXGE 5 GEN4,SLOKD [J IF TOO MUCH TO MOVE 7Y?? ... LDX 5 0 [RESTORE RUNNING TOTAL 7Y?G ...WHAT ADX 7 6 [ADD INTO NEW FREE COUNT 7Y?P ... ADX 4 6 7Y?Y ... TXL 7 GEN4 [TEST AND J IF ENOUGH NOT YET FOUND 7Y#7 ... BCS SFREE 7Y#8 ... LABFIX ISFCONE 7Y#9 ...# PRECAUTION - SEE GETCORE IN QENTRY2 IN COREALLG 7Y#= ... LDN 0 1 7Y#? ... ADS 0 BCOUNT 7Y#B ... FIXTRA ISFCUNIT 7Y#K ... LABFIX UNIT 7Y#S ...UNIT LDX 1 BPTR(2) [LDN 1 0 IF OFF 7Y*3 ...) 7Y*= ...#UNS ISFCON 7Y*F ...#SKI 7Y*N ...( 7YCQ NGX 4 4 [ SET NEGATIVE AMOUNT REQUIRED IN X4 7YXB LDX 2 BFREE 7^C2 LDN 3 BFREE 7^WL [ 82B= [A SEARCH IS MADE FORWARDS ALONG THE FREE CHAIN UNTIL ENOUGH FREE BLKS 82TW [HAVE BEEN COVERED TO SATISFY THE REQUEST X2 IS KEPT AS A POINTER TO 83*G [THE FIRST FREE BLOCK INCLUDED AND X3 TO THE LAST FREE BLOCK INCLUDED 83T6 [ 84#Q NBCK1 TXU 3 BFREE+1 [TEST AND J NOT ENOUGH FOUND 84SB BCC NONE 85#2 LDX 3 FPTR(3) [LOAD ADDRESS NEXT FREE BLOCK 85RL ADX 4 ASIZE(3) [ ADD ITS SIZE 86?= BNG 4 NBCK1 [J NOT ENOUGH YET 86QW TXU 2 3 [TEST AND J IF ALL IN ONE BLOCK 87=G BCC UNIT 87Q6 BZE 4 NMOVE [J IF NO EXCESS COVERED 889Q [ 88PB [BLOCKS ARE NOW REMOVED FROM THE FRONT OF THE CHAIN IF POSSIBLE 8992 [ 89NL NTAKE SBX 4 ASIZE(2) [ SUBTRACT SIZE OF 1ST BLOCK INCLUDED 8=8= LDX 2 FPTR(2) [GET ADDRESS OF NEW FIRST BLOCK 8=MW BPZ 4 NTAKE [J IF STILL EXCESS COVERED 8?7G LDX 2 BPTR(2) [REINCLUDE LAST BLOCK REMOVED 8?M6 ADX 4 ASIZE(2) 8#6Q TXU 2 3 [J IF NOW ALL IN ONE BLOCK 8#LB BCC UNIT 8*62 [ 8*KL [A TEST IS MADE TO ENSURE THAT THE AMOUNT REQUIRED IS NOT LESS THAN THE 8B5= [AMOUNT WHICH MUST BE MOVED TO GET A CONSECUTIVE BLOCK OF FREE CORE 8BJW [ 8C4G NMOVE LDX 5 CJSUM [TEST AND J IF CORE JAM EXISTS SO 8CJ6 SBN 5 XJCHAPLOW [THAT BLOCKS ARE MOOVED REGARDLESS 8D3Q BPZ 5 NOK [OF THIER SIZE WHEN IN A JAM STATE 8DHB LDX 5 3 [LOAD ADDRESS OF END BLOCK 8F32 ADX 5 ASIZE(3) [ ADD ITS SIZE 8FGL SBX 5 2 [SUB ADDRESS OF FIRST BLOCK 8G2= SBX 5 4 [SUB EXCESS COVERED 8GFW FIXTRA CORESET 8G^G SRL 5 1 8HF6 TXL 5 GEN4 [TEST AND J IF AMOUNT TO BE MOVED 8HYQ BCS NOK [IS SMALL ENOUGH 8JDB SBX 4 ASIZE(2) [ OTHERWISE SET NEW START BLOCK 8JY2 LDX 2 FPTR(2) 8KCL BRN NBCK1 [J TO SEARCH AGAIN 8KX= [ 8LBW [A CHECK IS MADE FOR LOCKED BLOCKS, IF ANY ARE FOUND BLOCKING AMALGAM- 8LWG [ATION THEY ARE MARKED PLEASE MOVE AND THE SEARCH IS RESTARTED BEYOND 8MB6 [THE LOCKED BLOCK A NEW COUNT OF FREE CORE AVAILABLE IS SET UP WHICH 8MTQ [INCLUDES CHAPTER SPACE AND EXTRA WORDS IN USED BLOCKS 8N*B [ 8NT2 NOK LDX 1 2 [LOAD SIZE FIRST FREE BLOCK READY 8P#L LDX 7 ASIZE(1) [ FOR NEW FREE COUNT 8PS= SFREE ADX 1 ASIZE(1) [ GET ADDRESS OF NEXT BLOCK 8Q?W LDX 6 ASIZE(1) [ LOAD ITS SIZE 8QHN ... FIXTRA CHAPMOVE1 8QTD ... LDN 0 #217 [ PRESERVE BITS 16,20,21,22,23 TO SEE 8R78 ... ANDX 0 AFLAG(1) [IF CHAPTER, LOCKED, LOCKED, FROZEN 8RDY ... [OR FREE RESP. 8RQQ BZE 0 SALR [ JUMP IF NONE OF THOSE 8S=B ... ANDN 0 #16 [ TEST IF LOCKED,FROZEN OR LONGLOCK 8SQ2 BZE 0 WHAT [ & JUMP IF NOT (EG NOT LOKD CHAPBLOK 8T9L #SKI K6COREALL>299-299 8TP= TRACE ATYPE(1),BLOCKING 8TSB ... ANDN 0 #12 8TXG ... BNZ 0 SLOKD [J IF NOT LONGLOCK 8W2L ... TXL 2 CTOP 8W5Q ... BCC SALR [J IF OUT OF LONGLOCK AREA 8W8W SLOKD SBX 4 ASIZE(2) [STEP ALONG FREE BLOCKS TO FIRST FREE 8WNG LDX 2 FPTR(2) [BLOCK BEYOND LOCKED BLOCK 8X86 TXL 1 2 8XMQ BCC SLOKD 8Y7B BRN NBCK1 [J TO RESTART SEARCH 8YM2 SALR 8^6L SBX 6 ALOGLEN(1) [CALC ANY EXCESS IN A USED BLOCK 8^L= SBN 6 A1 925W ANDX 6 IROUNDNG 92KG WHAT ADX 7 6 [ADD INTO NEW FREE COUNT 9356 TXL 7 GEN4 [TEST AND J IF ENOUGH NOT YET FOUND 93JQ BCS SFREE 93SJ ...) 944B [ 94J2 [IF NO LOCKED BLOCKS ARE FOUND THE USED PARTS OF MOVABLE BLOCKS ARE 953L [MOVED DOWN THE STORE, CHAPTER BLOCKS ARE FREED AND FREE BLOCKS ARE 95H= [AMALGAMATED UNTIL A LARGE ENOUGH BLOCK IS OBTAINED 962W [ 9662 ...#UNS ISFCON 9696 ...#SKI 96#= ...( 96CB ... LABFIX UNIT 96GG UNIT 9726 LDX 1 BPTR(2) 979Y ...) 97FQ UNE STO 1 GENDP [REMEMBER ADDR FOR RECHAINING FRAGMEN 97^B STO 2 GFORP [REMEMBER ADDR OF FIRST BLOCK 98F2 LDX 1 2 98YL CALL 0 NDECH [ UNCHAIN THE BLOCK TO ALLOW MOVING 99?3 ...#UNS ISFCON 99KD ... CALL 0 NFROUT [REMOVE FREE BLOCK FROM SIZE RING 99XW SNEXT LDX 6 ASIZE(1) [ LOAD ITS SIZE 9=CG SNEX1 TXL 6 GEN4 [ TEST AND JUMP IF ENOUGH 9=X6 BCC SALL1 9?BQ ADX 1 ASIZE(1) [GET ADDRESS OF NEXT BLOCK 9?WB STAR LDX 6 ASIZE(1) [LOAD ITS SIZE 9#B2 LDX 0 AFLAG(1) 9#KS ... FIXTRA CHAPMOVE2 9#TL ANDN 0 #201 [ TEST IF FREE OR CHAPTER 9**= BZE 0 NOTFR [ AND JUMP IF NEITHER 9*SW SRC 0 1 [ IF NOT FREE, THEN A CHAPTER 9B#G BPZ 0 SCHP [ JUMP IF A CHAPTER 9BLX ...#UNS ISFCON 9B^# ... CALL 0 NFROUT [REMOVE FREE BLOCK FROM SIZE RING 9C?Q BRN SOFR 9CRB SCHP ADS 6 CFREE [ADD SIZE OF CHAPTER TO CURRENT FREE 9D?2 SBS 6 ACHAP [MAINTAIN SUM OF CHAPTER SIZES 9DQL LDX 3 BACK1(1) [SEGMENT NUMBER 9F== LDX 0 BACK2(1) [BS ADDRESS 9FPW STO 0 KTAB(3) [UPDATE TABLE 9FXP ... LDN 0 1 9G5J ... SEGENTRY ADPCA1 [ MEND POINT FOR DATAPASS 9G?C ...#UNS FCCHAPFREE 9GF= ... ADS 0 FCCHAPMID [ INCREMENT F-C COUNT 9GM5 ...#UNS FCCHAPFREE 9GSY ...#SKI 9H2R ... NULL 9H8Q SOFR CALL 0 NDECH [DECHAIN CHAPTER AND FREE BLOCKS 9HNB ADS 6 ASIZE(2) [ADD SIZE TO PRECEDING FREE 9J82 LDX 1 2 [RESET X1 9JML BRN SNEXT [J TO TEST NEXT BLOCK 9K7= NOTFR LDX 3 ALOGLEN(1) [LOAD LOGICAL LENGTH OF USED BLOCK 9K=B ...#UNS CA1D 9K*G ... ADX 3 CIRNDB 9KDL ...#UNS CA1D 9KHQ ...#SKI 9KLW ADN 3 A1+IROUND-1 9L6G ANDX 3 IROUNDNG 9LL6 SBX 6 3 [SUB FROM ACTUAL SIZE OF BLOCK 9M5Q ADS 6 CFREE [ADD EXCESS TO CURRENT FREE TOTAL 9MKB ADX 6 ASIZE(2) [NEW SIZE FREE BLOCK 9N52 STO 3 ASIZE(1) [RESET BLOCK SIZE 9NJL CALL 0 MOVE [MOVE USED BLOCK 9P4= LDX 1 BDESTN [NEW START ADDR FOR F/C BLOCK 9P9D ... FIXTRA CHAPMOVE3 9PBL ... NULL 9PHW ADX 1 GUSSIZE [IS CALCULATED 9Q3G LDX 2 1 9QH6 STO 6 ASIZE(1) [STORE NEW SIZE FREE BLOCK 9R2Q BRN SNEX1 [ JUMP TO LOOK AT NEXT BLOCK 9RGB [ 9S22 [ WHEN ENOUGH CORE IS OBTAINED IN ONE BLOCK, EXCESS CORE IS SPLIT OFF 9SFL [ IF NECESSARY 9S^= [ 9TDW LABFIX GOTENUF [ 'SUCCESS' ENTY FROM LONGLOCK G/C 9TL4 ...#UNS ICASSTATS 9TR= ... STOZ CASK7 9TYG SALL 9WD6 LDX 4 GLOGLEN 9WH= ...#UNS CA1D 9WLB ... ADX 4 CIRNDB 9WPG ...#UNS CA1D 9WSL ...#SKI 9WXQ ADN 4 A1+IROUND-1 9XCB ANDX 4 IROUNDNG 9XX2 STO 4 GEN4 9YBL STOZ GENDP 9YW= LDX 2 FX2 9^*W FINDCORE 1 9^TG LDX 6 ASIZE(1) =2*6 BRN SALT =2SQ SALL1 [ FROM ORDINARY GETCORE =2YM ...#UNS ISFCON =329 ...( =33R ...#SKI TRACE>499-499 =35* ... TRACE 1,AMALOK =36X ...) =38F ...SALL11 =3#B SBS 6 CFREE [ ADJUST FREE TOTAL =3J8 ...SALL2 =3S2 LDX 2 FX2 =4?L CALL 0 NCHAIN [ CHAIN AFTER ACTIVITY BLOCK =4R= SALT =5=W SBX 6 GEN4 [ FIND EXCESS COVERED =5QG BZE 6 TIDY [ NO SPLITTING AS NO EXCESS =6=6 TXL 6 SPLITLEN [TEST AND J IF WORTH BACK SPLITTING =6PQ BCC NDOSP =79B LDCT 0 HCHAP =7P2 ANDX 0 GRTYPE [SPLIT ANYWAY IF CHAP - ELSE ERROR IN =88L BZE 0 TIDY [ RUNNING SUM ACHAP =8N= NDOSP =97W LDX 0 GEN4 =9MG STO 0 ASIZE(1) ==76 ADX 1 GEN4 [ GET ADDRESS OF PORTION TO SPLIT ==LQ STO 6 ASIZE(1) [ PUT IN ITS SIZE =?6B CALL 0 RELFAG [ FREE THE FAG-END =?B8 ...TIDY1 =?L2 FINDCORE 1 [ GET BACK TO ORIGINAL BLOCK =#5L TIDY =#K= LDCT 0 HLONGLOCK =*4W ANDX 0 GRTYPE =*JG BZE 0 XNLL =B46 LDN 0 4 =BHQ XNLL STO 0 AFLAG(1) =BRJ ...Q64 [QUICK LSM LABEL =C3B STOZ ATYPE(1) [ ZERIOSE TYPE WORD =CH2 STOZ BACK1(1) [ ZERIOSE BACKING STORE ADDRESS WORDS =D2L STOZ BACK2(1) =DG= LDX 4 GLOGLEN =D^W STO 4 ALOGLEN(1) [ SET LOGICAL LENGTH =FFG LDX 3 GRING =F^6 STO 3 ARINGNO(1) [ SET UP RING WORD =GDQ [ THIS MAY BE AN OPTIONAL GETCORE CALLED BY A MANDATORY ONE. IF THE =GYB [ LATTER HAD FAILED, CLONG1 WOULD BE SET, SO THE 'REQUEST FAILED?' =JWW LDX 0 CLONG1(2) [TEST IF REQUEST EVER FAILED =KBG BPZ 0 WX2 [NO =KGC ... LDCT 0 HMANDAT [ TEST IS SKIPPED FOR ALL OPTIONAL =KL# ... ANDX 0 GRTYPE [ GETCORES =KQ9 ... BZE 0 WX2 [ JUMP IF OPTIONAL =KW6 LDCT 0 #400 [CLEARFAILED MARKER =L*Q ERS 0 CLONG1(2) =LTB LDN 0 1 [REDUCE COUNT OF OUTSTANDING REQUESTS =M*2 SBS 0 CFAIL =MSL WX2 =N4D ... LDCT 5 #116 =N#= ... ANDX 5 GRTYPE [GET LINK,ACT,ALTLEN&CHAP BITS =NJ4 ... BZE 5 XORDINARY [J IF NONE OF THESE =NRW SLC 5 2 =P?G BNG 5 NACTY [J IF ACTIVITY BLOCK REQUEST =PR6 SLC 5 4 =PY# ...#UNS ICASSTATS =Q5G ... CALL 7 SCASMILL =Q=Q BNG 5 SMOVE [J IF ALTLEN REQUEST =QQB SLC 5 1 =R=2 BNG 5 (NCHLI) [J IF LINK BLOCK TYPE OF REQUEST =R*X ... SRC 5 2 [CHAP BIT TO B0 =RFS ... BNG 5 XCHAP =RKP ...XORDINARY =RPL ANDX 3 BSP16 [NO RINGS - ZERO =RWS ...#UNS ISFCON =S42 ...#SKI =S98 ... TRANSFIX BZE 3,FLIST =SBB ...#UNS ISFCON =SHJ ... TRANSFIX BZE 3,TENT [EXIT IF NO RINGS =SNW LDX 0 ARINGNO(1) [ISOLATE LENGTH OF RING =T8G SRL 0 15 =TN6 SBC STOZ ARINGNO+2(1) [MAKE NULL =W7Q ADX 1 0 [UPDATE FOR NEXT RING =WMB BCT 3 SBC [IF THERE IS ONE =X72 SNRING =X*N ...#UNS ISFCON =XJB ...#SKI =XR4 ... TRANSFIX BRN ,FLIST =X^Q ...#UNS ISFCON =Y8D ... TRANSFIX BRN ,TENT =YC6 ...XCHAP =YKW LDN 0 #200 [ SET 'CHAPTER' BIT =^5G FINDCORE 1 [ IN GOT BLOCK'S =^K6 ORS 0 AFLAG(1) [ FLAG WORD ?24Q LDX 4 ASIZE(1) ?2JB ADS 4 ACHAP [MAINTAIN SUM OF CHAPTER SIZES ?342 TRANSFIX BRN,FZCO [ JUMP TO BSTS VIA CHAPTER CHANGER ?3HL NACTY LDN 7 ACTRINGNUM [NO OF RING ELEMENTS ?43= LDX 0 ACTYPE ?4GW STO 0 ARINGNO(1) [SET UP RING WORD ?52G NACT1 LDN 6 ARINGNO+1(1) ?5G6 STO 6 ARINGNO+1(1) [EMPTY ?5^Q STO 6 ARINGNO+2(1) ?6FB BDX 1 £ ?6^2 BCT 7 NACT1 ?7DL LDN 6 FILERING ?7Y= NGS 6 ARINGNO+1(1) ?8CW LDX 1 FPTR(2) ?8XG STOZ BACKCHAN(1) ?9C6 LDN 0 ACC3(1) [ZEROISE REST OF BLOCK ?9WQ STOZ ACC3(1) ?=BB LDN 1 ACC4(1) ?=W2 LDX 3 GLOGLEN ??*L MOVE 0 A1-1-ACC3(3) [ZEROISE BLOCK ??T= LDX 0 ACTCOUNT [SET UP ACT NUMBER ?##W STO 0 ACTNUM-ACC4(1) ?#SG ADN 0 1 [AND INCREMENT FOR NEXT ONE ?*#6 STO 0 ACTCOUNT ?**T ...#UNS ICASSTATS ?*CJ ... CALL 7 SCASMILL ?*F# ... FIXTRA FSHGETACT [FOR SHARED FILESTARE MEND - TO SET ?*LG ... [ 'MACHINE "B"' BIT IN B M/C GETACTS ?*RQ LDX 2 FX2 ?*WW ...#UNS ISFCON ?B22 ...#SKI ?B56 ... TRANSFIX BRN ,FLIST ?B8= ...#UNS ISFCON ?B?B ... TRANSFIX BRN,TENT [ JUMP TO COORDINATE ?BBL ...[ ?BFW ...[ AS CORE NOT IMMEDIATELY AVAILABLE,WE USE PROGRAM CORE IF POSSIBLE ?BK6 ...[ UNLESS CHAPTERQUOTA AOBJFREE IN WHICH ?BNB ...[ CASE WE ATTEMPT TO FREE CHAPTERS ?BRL ...[ ?BWW ...NONE ?C26 ... BSON EMSBIT,USECHAP [J IF EMS ?C5B ...#SKI G4 ?C8L ...( ?C?W ... LDX 0 CFPCFREZ [J IF FREE PAGE CHAIN FROZEN AS WE ?CC6 ... BNZ 0 USECHAP [THEN CAN'T TAKE A PAGE FROM IT ?CGB ...) ?CKL ...USEPROG ?CNW ...#SKI G3 ?CS6 ...( ?CXB ...[ ?D2L ...[ WE ATTEMPT TO FREE ALL/PART OF AN INVALID FREE PROGRAM BLOCK(FPB). ?D5W ...[ IF NON-AVAILABLE,WE ATTEMPT TO USE A VALID FPB. ?D96 ...[ ?D#B ... LDN 1 BOBJUNUSE [BASE OF FPB CHAIN ?DCL ...UNVALFPB ?DGW ... CALL 7 NEXTFPB [GET NEXT FPB ON CHAIN(BACKWARDS) ?DL6 ... BRN VALFPB [J IF END OF CHAIN ?DPB ... LDX 0 JOBNOWAS(1) ?DSL ... BNZ 0 UNVALFPB [J IF A VALID FPB ?DXW ... BRN XGOTFPB [LETS USE THIS FPB THEN ?F36 ...[ ?F6B ...[ SUBROUTINE TO STEP TO NEXT UNFROZEN FPB (BACKWARDS) ON THE CHAIN ?F9L ...[ LINK - X7, EXIT 0 IF END OF CHAIN, EXIT 1 IF FPB FOUND ?F#W ...[ ?FD6 ...NEXTFPB ?FHB ... LDX 1 BPTR(1) [GET NEXT BLOCK ?FLL ... BXE 1 CXOBJUN,(7) [EXIT 0 IF END OF CHAIN ?FPW ... JBS NEXTFPB,1,AFFROZ [J IF BLOCK FROZEN ?FT6 ... EXIT 7 1 ?FYB ...[ ?FYK ...[ SUBROUTINE TO TIDY UP WHEN VALID FPB BEING FREED OR USED ?FYS ...[ LINK - X7, X1 POINTS TO FPB, X2 USED, X0 CONTAINS ALOGLEN ON EXIT ?F^3 ...[ ?F^= ...SCLEARFPB ?F^F ... LDX 0 JOBNOWAS(1) [NOW SET UP AS INVALID FPB ?F^N ... STOZ JOBNOWAS(1) [CLEAR JOB NO. ?F^X ... LDN 2 BJOBQ ?G26 ...XJOB LDX 2 FPTR(2) ?G2* ... BXU 0 JOBNUM(2),XJOB ?G2J ... BC 2,JBWASIN [CLEAR WAS FPB MARKER IN JOB BLOCK ?G2R ... LDX 0 ALOGL(1) ?G32 ... EXIT 7 0 ?G39 ...[ ?G3L ...VALFPB [HAVE TO GET VALID FPB THEN ?G6W ... LDN 1 BOBJUNUSE ?G=6 ... CALL 7 NEXTFPB [GET NEXT FPB ON CHAIN ?G*B ... BRN USECHAP [J TO USE CHAP. IF NO FPB ?GQB ... CALL 7 SCLEARFPB [CHANGE VFPB TO IFPB ?H7B ... ADS 0 CINVFPB [ ADD INTO TOTAL OF INVALID FPB'S ?H=L ...XGOTFPB ?H=R ...# ?H=Y ...# ACAS (DC8219) - USE FPB DIRECTLY IF BIG ENOUGH ?H?5 ...# ?H?= ... LDX 0 ASIZE(1) ?H?C ... SBX 0 GEN4 ?H?J ... BNG 0 XGOTFPB1 [J IF FPB NOT BIG ENOUGH ?H?M ...#SKI TRACE>499-499 ?H?Q ... TRACE 1,ACASFPB ?H?W ... LDX 0 ALOGL(1) ?H#3 ... SBS 0 CINVFPB ?H#8 ... SBS 0 COBJUNUSE ?H#* ... CALL 0 NDECH [DECHAIN THE FPB ?H#G ... ADN 1 APBRG ?H#M ... CALL 0 NDECH [DERING FROM FPBG ?H#S ... SBN 1 APBRG ?H#^ ... LDX 6 ASIZE(1) ?H*6 ... BRN SALL2 ?H*? ...# ?H*D ...XGOTFPB1 ?H*W ...[ IF AFTER REDUCING FPB BY CFREETARG FPB IS OF SIZE < 64,FREE ALL FP ?HF6 ...[ ?HJB ... LDN 0 CFREETARG+63 ?HML ... BXGE 0 ASIZE(1),XALLFPB [J IF ALL FPB REQ'D ?HQW ... LDN 0 CFREETARG ?HW6 ... SBS 0 ASIZE(1) [RESET SIZE OF REMAINING INVALID FPB ?H^B ... SBS 0 ALOGL(1) ?J4L ... ADX 1 ASIZE(1) [GET ADDR. OF PART TO FREE ?J7W ... STO 1 FPTR(1) [ AND SET UP ITS REDTAPE ?J?6 ... STO 1 BPTR(1) ?JBB ... STO 0 ASIZE(1) ?JFL ... SBN 0 A1 ?JJW ... STO 0 ALOGL(1) ?JN6 ... STOZ AFLAG(1) ?JRB ... STOZ ATYPE(1) ?JWL ... STOZ ARINGNO(1) ?J^W ... LDX 0 ASIZE(1) ?K56 ... BRN XFPB ?K8B ...XALLFPB ?K?L ... LDX 0 ALOGL(1) [REDUCE FPB COUNTS ?KBW ...XFPB ?KG6 ... SBS 0 CINVFPB ?KKB ... SBS 0 COBJUNUSE ?KNL ...#UNS ISTDPSTATS ?KRW ... TRACEDP ACORFPB,COBJUNUSE,0 ?KX6 ... BRN NONFREE [ & J TO FREE IT ?L2B ...) ?L5L ...#SKI G4 ?L8W ...( ?L#6 ...#SKI CFREETARG-1 ?LCB ... LDN 6 CFREETARG [NO. OF PAGES TO BE FREED ?LGL ...NEXTPAGE ?LKW ... LDX 0 APTURNPAGS ?LP6 ... SBX 0 CPAGETURNS ?LSB ... BPZ 0 TESTCOBJ [IF CPAGETURNS>APTURNPAGS ?LXL ... LDN 0 0 [ALL FREE PAGES AVAILABLE ?M2W ...TESTCOBJ ?M66 ... TXL 0 COBJFREE [J IF ONLY ENOUGH FREE PAGES FOR ?M9B ... BCC NOPAGS [ PAGETURNING ?M#L ... TRANSFIX CALL 0,ONEPAGE [OBTAIN LAST PAGE ON FREE PAGE CHAIN ?MCW ... LDN 0 1 [REDUCE NO. OF PAGES USED FOR ?MH6 ... SBS 0 AOBJFREE [ OBJECT PROGRAMS ?MLB ...[ ?MPL ...[ WE NOW SEARCH OBJECT PROGRAM CHAIN TO FIND THIS FREE PAGE AND ?MSW ...[ THEN REMOVE IT ?MY6 ...[ X2 = A - SCANNING POINTER ?N3B ...[ X1 = B - FOLLOWS X,ONE BLOCK BEHIND ?N6L ...[ X3 = ADDR. OF PAGE TO BE FREED ?N9W ... LDX 3 1 ?N*6 ... LDX 2 BOBJPROG [SET A=FIRST OBJECT PROGRAM BLOCK ?NDB ...#SKI K6COREALL>499-499 ?NHL ... TRACE 3,PAGEFOUN ?NLW ...NEXTOBJ ?NQ6 ... LDX 1 2 [SET B=A ?NTB ... LDX 2 FPTR(2) [SET A=NEXT BLOCK ON CHAIN ?NYL ... TXU 2 CXOBPR ?P3W ... BCC POBJ1 [J IF END OF CHAIN REACHED ?P76 ... TXL 2 3 [J IF WE STILL HAVE NOT LOCATED ?P=B ... BCS NEXTOBJ [BLOCK WITH THIS FREE PAGE IN ?P*L ...[ FREE PAGE IS IN BLOCK B ?PDW ...POBJ1 LDN 0 1024+A1D ?PJ6 ... TXU 0 ASIZE(1) ?PMB ... BCS POBJ2 [J IF NOT ONLY PAGE IN BLOCK ?PQL ... CALL 0 NDECH [DECHAIN BLOCK B ?PTW ... LDN 0 1024+A1D ?P^6 ... BRN POBJ3 ?Q4B ...POBJ2 [MORE THAN ONE PAGE IN BLOCK ?Q7L ... LDX 0 1 ?Q=W ... ADN 0 A1D ?QB6 ... TXU 0 3 [J IF FREE PAGE NOT THE FIRST PAGE ?QFB ... BCS NOTFIR [IN THE BLOCK ?QJL ... LDX 2 1 [STORE REDTAPE OF B INTO ?QMW ... ADN 2 1024 [REDTAPE OF B+1024 ?QR6 ... MOVE 1 9 ?QWB ... LDN 0 1024 [REDUCE LENGTHS OF NEW BLOCK B+1024 ?Q^L ... SBS 0 ASIZE(2) [BY 1024 ?R4W ... SBS 0 ALOGL(2) ?R86 ... SMO BPTR(2) ?R?B ... STO 2 FPTR [SET FPTR OF PREVIOUS AOBJPROG ?RBL ... SMO FPTR(2) ?RFW ... STO 2 BPTR [SET BPTR OF NEXT AOBJPROG ?RK6 ...POBJ3 ?RNB ... STO 1 FPTR(1) [SET UP REDTAPE OF FREED CORE ?RRL ... STO 1 BPTR(1) ?RWW ... STO 0 ASIZE(1) ?S26 ... STOZ AFLAG(1) ?S5B ... STOZ ATYPE(1) ?S8L ... STOZ ARINGNO(1) ?S?W ...#SKI CFREETARG-1 ?SC6 ...( ?SGB ... CALL 0 NFREE [FREE PAGE ?SKL ... BCT 6 NEXTPAGE [J IF MORE PAGES REQUIRED ?SNW ... BRN NRETRY ?SS6 ...) ?SXB ...#SKI CFREETARG-1 ?T2L ...#SKI ?T5W ... BRN NONFREE [J TO FREECORE THE CORE ?T96 ...NOTFIR ?T#B ... LDX 0 1 [IS PAGE TO FREE THE LAST ?TCL ... ADX 0 ASIZE(1) [PAGE IN THE BLOCK ?TGW ... SBN 0 1024 ?TL6 ... TXU 0 3 ?TPB ... BCS NOTFIR1 [J IF NOT ?TSL ... LDN 0 1024 [REDUCE SIZE OF B BY 1024 ?TXW ... SBS 0 ASIZE(1) ?W36 ... SBS 0 ALOGL(1) ?W6B ... LDX 1 3 [SET X1=ADDR. OF FREE PAGE ?W9L ... BRN POBJ3 [AND JUMP TO FREECORE PAGE ?W#W ...NOTFIR1 ?WD6 ... ADN 0 1024 [RESET X0 TO END ADDR. OF B-CALL D ?WHB ... LDX 7 3 [SET LENGTH OF B=ADDR.OF FREE PAGE ?WLL ... SBX 7 1 [ -ADDR.OF B ?WPW ... STO 7 ASIZE(1) ?WT6 ... SBN 7 A1 ?WYB ... STO 7 ALOGL(1) ?X3L ...[ CALL C THE NEW OBJECT PROGRAM BLOCK SPLIT OFF FROM B ?X6W ... LDX 2 3 [SET C=ADDR.OF FREE PAGE+1024-A1D ?X=6 ... ADN 2 1024-A1D [AND SET UP REDTAPE AS OBJ.PROG.BLOCK ?X*B ... SBX 0 2 [D-C ?XDL ... STO 0 ASIZE(2) ?XHW ... SBN 0 A1 [D-C-A1 ?XM6 ... STO 0 ALOGL(2) ?XQB ... LDN 0 #10 ?XTL ... STO 0 AFLAG(2) [SET LOCKED BIT ?XYW ... NAME 2,AOBJPROG ?Y46 ... STOZ BACK1(2) ?Y7B ... STOZ BACK2(2) ?Y=L ... LDX 0 1 [CHANGE SO THAT ?Y*W ... LDX 1 2 [X1=C ?YF6 ... LDX 2 0 [X2=B ?YJB ... CALL 0 NCHAIN [AND CHAIN C AFTER B ?YML ... LDX 1 3 [SET X1=ADDR OF FREE PAGE ?YQW ... LDN 0 1024-A1D [BUT WE CAN ONLY FREE 1024-REDTAPE ?YW6 ... [FOR NEXT OBJECT PROGRAM BLOCK ?Y^B ... BRN POBJ3 ?^4L ...NOPAGS ?^7W ...#SKI CFREETARG-1 ?^?6 ...( ?^BB ... SBN 6 CFREETARG ?^FL ... BNG 6 NRETRY ?^JW ...) ?^LG ... BRN USECHAP ?^N6 ...) ?^N8 ...# ?^N= ...# SUBROUTINE FOR A COUPLE OF CHECKS ABOUT CHAPTERS ?^N# ...# LINK X7, USES X0 ?^NB ...# ?^ND ...SCHAPCHK ?^NG ... LDX 0 CHAPQUOTA ?^NJ ... TXL 0 ACHAP ?^NL ... BCS (7) [EXIT IF ACHAP > CHAPTERQUOTA ?^NN ... ADN 7 1 ?^NQ ... LDCT 0 HCHAP ?^NS ... ANDX 0 GRTYPE ?^NW ... BNZ 0 (7) [EXIT 1 IF CHAPTER REQUEST ?^NY ... EXIT 7 1 [OTHERWISE EXIT 2 (ACTUALLY) ?^P2 ...# ?^P4 ...# ?^P6 ...# SUBROUTINE TO FIND NEXT USABLE CHAPTER, STARTING WITH LAST ?^P8 ...# LINK X7, X0 USED, EXIT 0 IF NONE, ELSE EXIT 1 WITH X1 = CHAP.ADDR. ?^P= ...# ?^P# ...SFINDCHAP ?^PB ... LDN 1 BCHAP ?^PD ...SFCH1 ?^PG ... TXU 1 BCHAP [J IF CHAPTER CHAIN EMPTY OR END ?^PJ ... BCC (7) ?^PL ... LDX 1 BPTR(1) [LOAD ADDRESS NEXT CHAPTER ?^PN ... TXL 1 GFIXCHAP ?^PQ ... BCC YES [J IF IN FIXED CHAPTER SPACE ?^PS ... LDX 0 AFLAG(1) ?^PW ... ANDN 0 #1002 ?^PY ... BNZ 0 SFCH1 [J IF CHAPTER FROZEN OR KEPT ?^Q2 ... EXIT 7 1 [EXIT IF CHAPTER FOUND ?^Q4 ...# ?^Q6 ...# SUBROUTINE TO ADJUST ACHAP AND CHAPTER TABLE WHEN CHAPTER FREED ?^Q8 ...# OR USED. X7 - LINK, X1 PTS TO CHAPTER, X0 AND X2 USED. ?^Q= ...# ?^Q# ...SCHAPTIDY ?^QB ... LDX 0 ASIZE(1) [MAINTAIN SUM OF CHAPTER SIZES ?^QD ... SBS 0 ACHAP [IN CORE ?^QG ...#UNS ISTDPSTATS ?^QJ ... TRACEDP ACORCHAP,ACHAP,CHAPQUOTA ?^QL ... LDX 2 BACK1(1) [SEGMENT NUMBER ?^QN ... LDX 0 BACK2(1) [BS ADDRESS ?^QQ ... STO 0 KTAB(2) [UPDATE TABLE ?^QS ... LDN 0 1 ?^QW ... SEGENTRY ADPCA2 ?^QY ...#UNS FCCHAPFREE ?^R2 ... ADS 0 FCCHAPEND [INCREMENT F-C COUNT ?^R4 ...#UNS FCCHAPFREE ?^R6 ...#SKI ?^R8 ... NULL ?^R= ... EXIT 7 0 ?^R# ...# ?^RB ...USECHAP ?^WL ...[ ?^^W ...[IF CORE NOT IMMEDIATELY AVAILABLE CHAPTER BLOCKS ARE FREED #256 ...[ #2=S ... CALL 7 SCHAPCHK [DO CHECKS, RETURNING AS FOLLOWS #2DG ... BRN NONE1 [J SINCE ACHAP > CHAPTERQUOTA #2L8 ... BRN NONE1 [J SINCE CHAPTER REQUEST #2RW ... LDX 0 CJSUM [OR IF CORE JAM EXISTS #2X6 ... SBN 0 XJCHAPLOW #32B ... BNG 0 TOOMU #35L ... FIXTRA CHAPLOW1 #36N ...# CHECK WITH RTM CHAPLOW BEFORE ALTERING NEXT 3 INSTRS. #37R ... BRN NONE1 #39Y ... BRN TOOMU #3#6 ...NONE1 #3K2 ... CALL 7 SFINDCHAP [FIND USABLE CHAPTER #3TW ... BRN TOOMU [J IF END OF CHAIN #46Q ... CALL 7 SCHAPTIDY [ADJUST CHAPTER TOTAL AND TABLE #4CL ...# #4NG ...# ACAS (DS8219) - USE CHAPTER DIRECTLY IF BIG ENOUGH #4^B ...# #5== ... LDX 0 ASIZE(1) #5H6 ... SBX 0 GEN4 #5S2 ... BNG 0 NONFREE [J IF NOT BIG ENOUGH #5^X ...#SKI TRACE>499-499 #67S ... TRACE 1,ACASCHAP #6*Q ... CALL 0 NDECH [DECHAIN CHAPTER #6LL ... LDX 6 ASIZE(1) #6XG ... BRN SALL2 #78B ...# #7FB ...NONFREE #7JL ... CALL 0 NFREE [FREE CHAPTER #7MW ...NRETRY #7R6 ... LDX 4 GEN4 [ RESTORE REQUEST SIZE #7WB ... BRN NOR [ AND JUMP TO TRY AGAIN #87G [ #8M6 [IF NO CORE CAN BE GIVEN THE LINK OF THE CALLING ACTIVITY IS SET BACK #96Q [AND GETCORE COORDINATES SETTING THE ACTIVITY WAITING FOR CORE UNLESS #9LB [IT WAS AN OPTIONAL REQUEST OR A REQUEST FOR CHAPTER SPACE #=62 [ #=KL LABFIX EXESIV [ 'FAIL' RE-ENTRY POINT FOR LONGLOCK #?5= [ GETCORES #?=D ...#UNS ICASSTATS #?CM ... BRN TOOMU1 #?JW TOOMU #?R? ...#UNS ICASSTATS #?SJ ...( #?TT ... LDN 0 1 #?X6 ... ADS 0 CASFAIL [ADD TO TOTAL NUMBER OF FAILS #?XQ ... CALL 7 SCASMILL [ADD TO CAS MILL #?YC ...) ##2^ ...TOOMU1 ##4G LDX 0 GRTYPE ##J6 SLC 0 1 #*3Q BPZ 0 NOWAIT [ JUMP IF REQUEST WAS OPTIONAL #*HB SLC 0 4 #B32 BNG 0 SCHREQ [J IF CHAPTER BLOCK REQUEST #BGL CALL 0 SETWAITING #C2= LDN 0 1 [ STEP ON COUNT OF QUEUED CORE #CFW ADS 0 CWAIT [ REQUESTS #C^G LDX 1 CLONG1(2) [ TEST IF REQUEST FAILED PREVIOUSLY #DF6 BNG 1 WX1 [ JUMP IF YES #DYQ ADS 0 CFAIL [STEP TOT OF OUTSTANDING CORE REQ'STS #FDB LDCT 0 #400 [ INDICATE FAILED REQUEST #FY2 ORS 0 CLONG1(2) #G4D ...WX1 #GQL ... COOR3X #1 [WAIT FOR CORE #GX= [ #HBW [ THIS ROUTINE STEPS BACK LINK SO THAT THE ACTIVITY WILL RE-ENTER THE #HWG [ CORE ROUTINE ON BEING RESTARTED #JB6 SETWAITING #JTQ STO 0 GL2 #K*B NGN 0 3 [DIFFERENT ENTRIES TO G/C CAUSE LINK #KT2 ADX 0 GLINKSTEP [ TO BE STEPPED BACK DIFFERENTLY #L#L LDX 2 FX2 #LS= ADJUSTLK 2 #M?W BRN (GL2) #MRG [ #N?6 [FOR OPTIONAL REQUEST THE LINK IS STEPPED FORWARD ONE THEN EXITS VIA #NQQ [THE COORDINATOR #P=B [ #PQ2 NOWAIT #Q9L LDX 2 FX2 [ X2 MUST EQUAL FX2 FOR EXIT TO FLIST #QP= SLC 0 6 [ HLINKB. EXIT WITHOUT STEPPING LINK #R8W TRANSFIX BNG 0,FLIST [ FOR OPTIONAL BSTS Q-BLOCK REQUEST #RNG SRC 0 2 [ HLOCK #S86 ANDN 0 1 #SMQ ADN 0 1 [STEP LINK 2 FOR LOCKC REQU ELSE 1 #T7B ADJUSTLK 2 [ BRANCH TO FLIST #TM2 TRANSFIX BRN,FLIST [ JUMP TO COOR2 #W6L YES LDCT 0 HCHAP [J IF NOT CHAPTER REQREST #WL= ANDX 0 GRTYPE #X5W ... BZE 0 SFCH1 #XKG [ #Y56 [IF CHAPTER SPACE REQUIRED THE FIXED CHAPTER SPACE IS GIVEN WHEN #YJQ [POSSIBLE #^4B [ #^J2 SCHREQ #^K8 ...#UNS JPSCF #^LB ...( #^MJ ...[ CHECK IF FIX CHAP FREE #^NQ ... BSOFF FXCHAPIN,XBWA #^PY ... LDX 2 FX2 #^RS ... COOR3 FCXWAIT,3 #^TN ... TRANSFIX BRN,BSTS10 #^XJ ...[ BSTS HAS ANOTHER TRY AT GETCHAP #^^4 ...XBWA ON FXCHAPIN *22= ...) *23L LDX 1 GFIXCHAP *2H= LDX 0 BACK2(1) *32W BZE 0 SCHN [ZERO IF FIXCHAP UNUSED *3GG LDX 2 BACK1(1) [SEGMENT NUMBER *426 STO 0 KTAB(2) [UPDATE TABLE *4FQ SCHN *4^B LDX 0 GLOGLEN *5F2 STO 0 ALOGLEN(1) [FOR BENEFIT OF P/M CHECKSUM *5YL LDX 2 FX2 *6D= CHAIN 1,2 [ CHAIN FIXCHAP AFTER ACTIVITY BLOCK *6XW TRANSFIX BRN,FZCO [ EXIT TO BSTS VIA CHAPTER CHANGER *7CG [ *7X6 [ *8BQ [ THIS ROUTINE COPIES THE BLOCK POINTED TO BY X2 TO THE FIRST BLOCK *8WB [ AFTER THE CURRENT ACTIVITY AND FREES THE OLD SITE *9B2 [ *9TL LABFIX HCOPY *=*= ZCOPY STO 0 GL2 *=SW ZCOPYA [ENTRY FROM ALTLENG-IMPLICIT BLOCKCPY *?#G STO 3 GEN2 *?S6 SMO FX2 *#?Q LDX 1 FPTR *#RB CALL 0 NDECH [DECHAIN THE NEW BLOCK **?2 LDX 0 1 **QL LDX 1 2 [SOURCE - OLD BLOCK *B== LDX 2 0 [DESTINATION - NEW BLOCK *BPW LDX 0 ASIZE(2) [REMEMBER SIZE/LOGLEN OF NEW BLOCK *C9G STO 0 GEN3 *CP6 LDX 0 AFLAG(2) *D8Q ANDX 0 FLAGPHYS *DNB STO 0 GEN5 [REMEMBER 'PHYSICAL' BITS OF AFLAG *F82 LDX 3 ALOGLEN(2) *FML STO 3 GEN4 *G7= ADN 3 A1 [LENGTH TO MOVE *GLW CALL 0 MOVE [MOVE BLOCK *H6G LDX 1 BDESTN *HL6 LDX 0 GEN3 *J5Q STO 0 ASIZE(1) [RESTORE SIZE (WITH LOCK BIT IF *JKB LDX 0 GEN4 [ NECESSARY, & LOGLEN OF NEW BLOCK *K52 STO 0 ALOGLEN(1) *KJL LDX 0 GEN5 [RESTORE 'PHYSICAL' AFLAG BITS TO *L4= ORS 0 AFLAG(1) [ NEW BLOCK *LHW LDX 3 GEN2 *M3G LDX 1 BSOURCE *MH6 BRN N21X [J TO FREE OLD SITE *N2Q [ *NGB [THIS SUBROUTINE MOVES THE NUMBER OF WORDS IN X3 FROM THE ADDRESS *P22 [POINTED TO BY X1 TO THE ADDRESS POINTED TO BY X2 *PFL [IT CATERS FOR *P^= [ 1. NULL ELEMENTS *QDW [ 2. EMPTY ELEMENTS *QYG [ 3. OVERLAP OF NEW AND OLD SITES -ONLY UPWARD MOVE *RD6 [ 4. TWO OR MORE ELEMENTS FOLLOWING EACH OTHER ,IMMEDIATELY OR *RXQ [ OTHERWISE IN SAME RING IN SAME BLOCK. *SCB [IT IS CALLED FROM WITHIN THE SEGMENT OR BY THE BLOCKMOVE MACRO *SX2 [ *TBL LABFIX BLKMOVE *TW= MOVE *W*W STO 0 GEN0 *WTG STO 3 GUSSIZE [LENGTH TO MOVE *X*6 STO 1 BSOURCE [ADDR TO MOVE FROM *XSQ STO 2 BDESTN [ADDR TO MOVE TO *Y#B #SKI K6COREALL *YS2 ( *^?L BXL 2 FCORES,MOV1 [ERROR IF DESTINATION NOT IN *^R= ... BXGE 2 GFIXCHAP,MOV1 [ VARIABLE CORE B2=W ) B2QG SMO FPTR(1) [THESE UPDATE STANDARD RING B3=6 STO 2 BPTR B3PQ SMO BPTR(1) B49B STO 2 FPTR B4P2 TXU 1 FX2 B58L BCS XXXX [J IF BLOCK NOT CURRENT ACT B5N= STO 2 FX2 [OTHERWISE RESET FX2 FOR NEW SITE B67W XXXX B6MG LDX 0 ARINGNO(1) B776 ANDX 0 BSP16 B7LQ BZE 0 SNORING [J IF NO RINGS B86B LDX 3 ARINGNO(1) B8L2 SRL 3 15 B95L STO 3 GEN1 [ISOLATE RING DIMENSION B9K= MOVE 1 A1 B=4W ADN 2 ARINGNO+1 B=JG ADN 1 ARINGNO+1 [POINT TO FIRST RING B?46 SMORE LDX 3 BPTR(1) [PRECEDING BLOCK B?HQ BZE 3 SNULL [UNLESS NULL ELEMENT B?JT ...#SKI K6COREALL B?KY ...( B?M3 ...[ CHECK CHAINING OF RING ELEMENT B?N6 ...[ B?P9 ... SMO FPTR(1) B?Q# ... TXU 1 BPTR B?RC ... BCS SRERR B?SG ... TXU 1 FPTR(3) B?TK ... BCC SMOK B?WN ...SRERR B?XR ... GEOERR 1,BADRING! B?YW ...SMOK B?^^ ...) B#3B SMO FPTR(1) [THESE INSTRUCTIONS UPDATE REFS. B#H2 STO 2 BPTR [TO RING CATERING B*2L STO 2 FPTR(3) [FOR EMPTY RING B*G= SNULL LDX 3 GEN1 B*^W MOVE 1 0(3) [MOVE ELEMENT BBFG ADX 1 GEN1 [UPDATE OLD AND NEW ELEMENT SITE BB^6 ADX 2 GEN1 [ POINTERS BCDQ BCT 0 SMORE BCYB LDX 3 GUSSIZE [CALCULATE BDD2 ADX 3 BSOURCE [REMAINDER BDXL SBX 3 1 [TO BE MOVED BFC= BZE 3 NMV1 BFWW SNORING BGBG TXL 3 B513 [JUMP IF SIZE<512 BGW6 BCS NMV BH*Q #SKI K6COREALL BHTB ( BJ*2 BPZ 3 MOV2 [ERROR IF NEGATIVE BJSL MOV1 GEOERR 1,COREMOVE BK#= MOV2 BKRW ) BL?G MOVE 1 512 [OTHERWISE MOVE 512 WORDS BLR6 ADN 1 512 [AND UPDATE BM=Q ADN 2 512 [POINTERS BMQB SBN 3 512 [AND AMOUNT TO BE MOVED BN=2 BRN SNORING BNPL NMV MOVE 1 0(3) [MOVE RESIDUE BP9= NMV1 BPNW LDN 3 1 BQ8G ADS 3 BCOUNT [INDICATE BLOCK MOVED BQN6 LDX 0 FLAGLOG BR7Q SMO BDESTN BRMB ANDS 0 AFLAG [ERASE ALL BUT LOGICAL BITS OF AFLAG BS72 BRN (GEN0) BSLL [ BT6= [THIS ROUTINE ALTERS THE LOGICAL LENGTH OF THE BLOCK SPECIFIED IN X1 BTKW [TO THE LENGTH SPECIFIED IN X2 BW5G [ THE ALTLENG ENTRY IS BY THE REPLACER CHANGEG. IF X1'NE'FX1 & X2'NE'FX2 BWK6 [ THEN ITS THE FIRST ENTRY. IF X1=FX1 BUT X2'NE'FX2, THIS IMPLIES THE BX4Q [ LINK HAS BEEN STEPPED BACK 2 - A RE-ENTRY AFTER WAITING FOR CORE. IF BXJB [ X1=FX1 & X2=FX2, THIS IMPLIES LINK STEPPED BACK 1 - SUCCESS RE-ENTRY BY42 [ AFTER GETTING CORE BYHL [ B^3= LABFIX ALTLEN B^GW NALT STO 0 GL2 [REMEMBER LINK C22G STOZ GLINKSTEP [ZERO FOR ALTLEN ENTRY C2G6 BRN PATH C2^Q LABFIX ALTG C3FB NALTG STO 0 GL2 [DUMP LINK C3^2 LDN 0 2 C4DL STO 0 GLINKSTEP [LINK STEPPER INCREMENT / FLAG C4Y= BXU 1 FX1,PATH [J IF FIRST ENTRY C5CW STO 2 GEN1 [ ELSE RE-FIND SOURCE BLOCK C5XG LDX 2 FX2 C6C6 SMO GL2 C6WQ LDX 0 0 C7BB BZE 0 YCURA [J IF %C WAS £ - CURRENT ACTIVITY C7W2 ADX 0 FX1 C8*L CALL 1 (0) C8T= YCURA LDX 0 GEN1 C9#W BXU 0 FX2,TRYAG [J IF RE-ENTRY AFTER CORE WAIT C9SG LDN 0 1 [ ELSE SET LINK TO INSTR AFTER MACRO C=#6 ADS 0 GL2 [ & J TO DO IMPLICIT BLOCKCOPY C=RQ BRN ZCOPYA C??B TRYAG LDX 1 2 C?R2 LDX 2 0 C#=L PATH C#Q= #SKI K6COREALL C*9W ( C*PG BXL 1 FCORES,SILL2 [ERROR IF BLOCK NOT IN VARIABLE CORE CB96 ... BXGE 1 GFIXCHAP,SILL2 CBNQ TXL 2 AFREE [AND NOT ASKING FOR MORE THAN IS CC8B BCS NOTILL6 [AVAILABLE CCN2 SILL2 GEOERR 1,ALTLEN CD7L NOTILL6 CDM= ) CF6W LDX 0 GLINKSTEP CFLG SRL 0 1 CG66 ADS 0 GL2 CGKQ #SKI K6COREALL>799-799 CH5B ( CHK2 TRACE 1,EXTBLOCK CJ4L TRACE 2,EXTSIZE CJJ= ) CK3W LDX 0 AFLAG(1) CKHG ANDN 0 6 CL36 ERN 0 6 CLGQ BNZ 0 NLLCK [J IF NOT LL AND FROZEN CM2B LDX 0 ALOGLEN(1) CMG2 SBX 0 2 CM^L BNG 0 NEXTEND [DON'T LET FROZEN LLB EAT FAG-END CNF= NLLCK CNYW LDX 0 ASIZE(1) [ LOAD SIZE OF BLOCK CPDG SBN 0 A1 [SUB RED TAPE WORDS CPFY ...# CPHB ...# ACAS (DS8219) - IF BLOCK FOLLOWING THE BLOCK TO BE LENGTHENED CPJS ...# IS FREE AND LARGE ENOUGH, USE DIRECTLY CPL= ...# CPMN ... BXGE 0 2,YZ12 [J IF ENOUGH CPP6 ... LDX 0 AFLAG(1) CPQJ ... ANDN 0 2 CPS2 ... BNZ 0 NEXTEND [J IF FROZEN CPSF ... LDX 0 GFIXCHAP [J IF EMS CPSY ... BNG 0 NEXTEND CPTD ... STO 2 GEN4 [REQD SIZE -> GEN4 CPWW ... LDX 2 1 [X2 NOW PTS TO OROGINAL BLK CPY# ... ADX 1 ASIZE(2) [ADDRESS NEXT BLK IN CORE CP^Q ... LDX 0 AFLAG(1) CQ38 ... ANDN 0 1 CQ4L ... BZE 0 NALTRST [J IF NOT FREE CQ64 ... LDX 0 ASIZE(2) [ADD SIZES CQ7G ... SBN 0 A1 [SUB RED TAPE WORDS CQ8Y ... ADX 0 ASIZE(1) CQ=B ... SBX 0 GEN4 CQ?S ... BNG 0 NALTRST [J IF TOTAL NOT ENOUGH CQ#Q ...#SKI TRACE>499-499 CQ*N ... TRACE 1,ACASALTL CQBN ... CALL 0 NDECH [DECHAIN FREE BLK FROM FREE CHAIN CQD6 ...#UNS ISFCON CQFJ ... CALL 0 NFROUT [DECHAIN FROM SIZE RING CQH2 ... LDX 0 ASIZE(1) CQJD ... SBS 0 CFREE CQKW ... ADS 0 ASIZE(2) [ADD SIZE TO THAT OF ORIGINAL BLK CQL7 ... LDX 0 GL2 CQLD ... STO 0 GEN5 CQLP ... STO 2 GBL CQM2 ... CALL 0 NUNL CQM? ...# THIS MAY BE RE-ENTRY SO NEED UNLOCK CQMJ ... LDX 1 GBL [X1 PTS TO ORIGINAL BLK AGAIN CQMT ... LDX 0 GEN5 CQN6 ... STO 0 GL2 CQNC ... [RESTORE LINK CQNQ ... LDX 2 GEN4 [X2 PTS TO REQD SIZE AGAIN CQQ8 ... LDX 0 ASIZE(1) CQRL ... SBN 0 A1 CQT4 ...# CQXB YZ12 SBX 0 2 [GET EXCESS CRC2 STO 2 ALOGLEN(1) [RESET LOGICAL LENGTH CRWL TXL 0 SPLITLEN [J IF SOME SHOULD NOW BE SPLIT CSB= BCS NZY [JUMP IF NOT WORTH SPLITTING CSTW LDX 2 AFLAG(1) CT*G ANDN 2 2 CTT6 BNZ 2 NZY [DONT SPLIT A FROZEN BLOCK CW#Q ANDX 0 IROUNDNG CWSB SBS 0 ASIZE(1) [SUB FROM SIZE OF BLOCK CX#2 ADX 1 ASIZE(1) [ GET ADDRESS OF SPLIT PORTION CXRL STO 0 ASIZE(1) [SET ITS SIZE WORD CY?= STO 0 2 CYQW #SKI TRACE>499-499 C^=G TRACE 0,ALTLNFAG C^Q6 BRN NFA [ JUMP TO FREE FAG-END C^W3 ...NALTRST C^^Y ... LDX 1 2 D25T ... LDX 2 GEN4 D29Q NEXTEND D2PB STO 1 GBL [STORE ADDRESS OF BLOCK TO BE ALTD D392 STO 2 GLOGLEN [STORE NEW LENGTH REQUIRED D3NL [ D48= [IF ENOUGH FREE CORE CANNOT BE ADDED DIRECTLY, A NEW BLOCK OF CORE IS D4MW [OBTAINED AND THE BLOCK IS COPIED TO IT D57G [ D5M6 LDX 2 AFLAG(1) D66Q ANDN 2 4 [ PUT LONGLOCK BIT D6LB SRL 2 2 [ INTO BIT 23 OF X2 D762 LDCT 2 HMANDAT(2) [REQUEST TYPE-MANDATORY,LL IF NEC. D7KL LDX 0 GLINKSTEP [FOR ALTLENG ENTRY ONLY, STEP LINK D85= SBS 0 GL2 [ BACK 1 & J TO AVOID LOCK D8JW BNZ 0 TYPEG D94G LDN 0 #10 D9J6 ORS 0 AFLAG(1) [ SET 'LOCKED' BIT D=3Q LDCT 0 HALTLEN D=HB ORX 2 0 [MODIFY REQUEST TYPE FROM ORDINARY D?32 [ TO ALTLEN TYPE D?GL TYPEG [BOTH ALTLEN & ALTLENG D#2= LDN 1 0 [RING CONFIG - SET WHEN BLOCK COPIED D#FW LDX 0 GL2 [LINK D#^G BRN XTND [J TO PERFORM GETCORE D*F6 SMOVE LDX 2 GBL [ALTLEN RE-ENTRY AFTER GETTING CORE D*YQ CALL 0 NUNL [UNLOCK OLD BLOCK DBDB LDX 2 GBL DBY2 CALL 0 ZCOPY [COPY CONTENTS TO NEW SITE, FREE OLD DCCL TRANSFIX BRN,FLIST [ SITE & EXIT VIA THE COORDINATOR DCX= # DDBW #END ^^^^ ...13135550006800000000