{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: COREMACROS)}} ====== COREMACROS ====== (George Source) 229S ...[??? COREMOVE SECT CENT FGN 32 DOC 22FL ...[ DEK BEASLEY : CENT 23YG [ 24D6 [ RESTORE TIME MACRO TO ADJUST THE AMOUNT OF CORE THAT THE CORE 24XQ [ ALLOCATION SYSTEM IS PREPARED TO MOVE TO AMALGAMATE FREE CORE 25CB #MAC COREMOVE 25X2 #STR %A 26BL #SKI 4*%A-48*%A+23�<1$1 26W= ( 27*W #CON COREMOVE'S PARAMETER NOT IN RANGE 1-11. 27TG ! %A NOT IN RANGE 12>PARAMETER>0 28*6 #EXIT 28SQ ) 29#B #MEN COREALL 29S2 #TRA CORESET 2=?L SRL 5 %A 2=R= #END 2?=W #NOR 2?=Y ...[??? CHAPLOW SECT CENT FGN 32 DOC 2??2 ...# 2??6 ...# 2?BG ...#MAC CHAPLOW 2?BH ...#ALT CHAPLOW=%A+INSTPARAM 2?BJ ... FCMEND 2?BK ... FIXTRA CHAPLOW2 2?BL ... STO 0 GL2 2?BM ... LDX 0 CHAPLOW 2?BN ... BXGE 0 CHAPQUOTA,XIT1 2?BP ... BXL 0 ACHAP,XIT1 2?BQ ... BRN XIT 2?BR ...XIT1 2?BS ... LDN 0 1 2?BT ... ADS 0 GL2 2?BW ...XIT 2?BX ... BRN (GL2) 2?BY ... FCEND 2?B^ ...#MEN COREALL 2?C2 ...#UNS ISFCON 2?C3 ...( 2?C4 ...#TRA CHAPLOW3 2?C5 ... CALL 0 CHAPLOW2 2?C6 ...) 2?C7 ...#TRA CHAPLOW1 2?C8 ... CALL 0 CHAPLOW2 2?C9 ...#END 2?C= ...#NOR 2?C? ...[??? CHAPMOVE SECT CENT FGN 32 DOC 2?C# ...# 2?C* ...# 2?CB ...#MAC CHAPMOVE 2?CC ...#DEF 20?=0 2?CD ...#STR OFF,%A 2?CF ...#DEF 20?=1 2?CG ...#SKI 20? 2?CJ ...( 2?CQ ... FCMEND 2?CW ...XCMF 2?D2 ... LDX 1 BDESTN 2?D6 ... NGNC 2 1 2?D= ... FIXTRA CHAPMOVE 2?DB ... LDN 2 0 2?DG ... STO 0 GL2 2?DL ... LDX 0 AFLAG(1) 2?DQ ... ANDN 0 #200 2?DW ... BZE 0 NOCH 2?F2 ... LDX 0 1 2?F6 ... ORX 0 GSIGN 2?F= ... SMO BACK1(1) 2?FB ... STO 0 KTAB 2?FG ... BZE 2 (GL2) 2?FL ... LDX 2 BSOURCE 2?FM ... LDX 0 AFLAG(1) 2?FN ... ANDN 0 2 [DON'T ALTER ACHAP & FREZCHAP IF 2?FP ... BNZ 0 MFX1 [ DESTINATION FROZEN 2?FQ ... LDX 0 ASIZE(2) 2?FW ... SBS 0 FREZCHAP 2?G2 ... ADS 0 ACHAP 2?G6 ...MFX1 LDN 0 A1(2) 2?G= ... BXU 0 FX1,NF 2?GB ... LDN 2 A1(1) 2?GG ... STO 2 FX1 2?GL ... SBS 0 GL2 2?GQ ... ADS 2 GL2 2?GW ...NF LDX 0 ALOGLEN(1) 2?GX ...#UNS CA1D 2?GY ... ADX 0 CIRNDB 2?G^ ...#UNS CA1D 2?H2 ...#SKI 2?H3 ... ADN 0 A1+IROUND-1 2?H6 ... ANDX 0 IROUNDNG 2?H= ... SBX 0 ASIZE(1) 2?HB ... BZE 0 NOCH 2?HG ... ADS 0 ASIZE(1) 2?HJ ... LDX 2 AFLAG(1) 2?HL ... ADX 1 ASIZE(1) 2?HQ ... NGS 0 ASIZE(1) 2?HR ... ANDN 2 2 [IF DESTINATION FROZEN,THEN FAG 2?HS ... BNZ 2 MFAGFROZ [ END SHOULD BE FROZEN AS WELL 2?HW ... STOZ GENDP 2?J2 ... BRN CHAPMOVE7 2?J3 ...MFAGFROZ 2?J4 ... STO 1 FPTR(1) [SET UP RED TAPE FOR FROZEN FAG END 2?J5 ... STO 1 BPTR(1) 2?J6 ... STO 2 AFLAG(1) 2?J7 ... LDX 0 FPSEUTYP 2?J8 ... STO 0 ATYPE(1) 2?J9 ... LDX 0 GL2 [JUMP TO CHAIN FAG END 2?J= ... BRN (GFREE) [ IN FROZEN FREE CHAIN 2?J? ...NOCH BZE 2 (GL2) 2?J# ... LDX 1 FX1 2?JB ... LDX 2 FX2 2?JG ... BRN (GL2) 2?JJ ... FIXTRA CHAPMOVEF 2?JL ... +XCMF 2?JQ ... FCEND 2?JW ...) 2?K2 ...#MEN COREALL 2?K6 ...#TRA CHAPMOVE1 2?K= ... LDN 0 #217-(#200*20?) 2?KB ...#TRA CHAPMOVE2 2?KG ... ANDN 0 #201-(#200*20?) 2?KL ...#TRA CHAPMOVE3 2?KQ ... CALL 0 CHAPMOVE3+1+(CHAPMOVE-CHAPMOVE3-1*20?) 2?KW ...#END 2?L2 ...#MEN COREALLF 2?L6 ...#TRA CHAPMOVE5 2?L= ...#SKI 20? 2?LB ... BRN CHAPMOVE4 2?LG ...#SKI 20?<1$1 2?LH ...( 2?LK ... LDN 0 4 2?LP ...) 2?LQ ...#TRA CHAPMOVE6 2?LR ...#SKI 20? 2?LS ... CALL 0 (CHAPMOVEF) 2?LT ...#SKI 20?<1$1 2?LW ... NULL 2?LX ...#UNS ISTDP 2?LY ...#SKI 2?L^ ...( 2?M2 ...#TRA CHAPMOVE8 2?M3 ...#SKI 20? 2?M4 ... NULL 2?M5 ...#SKI 20?<1$1 2?M6 ... ANDX 0 AWORK1(2) 2?M7 ...) 2?M8 ...#SKI G4 2?M9 ...( 2?M= ...#TRA CHAPMOVE9 2?M? ...#SKI 20? 2?M# ... BRN CHAPMOVE10 2?M* ...#SKI 20?<1$1 2?MB ... LDX 3 6 2?MC ...) 2?MD ...#END 2?MG ...#NOR 2?MJ ...[??? LOCK SECT CENT FGN 32 DOC 2?ML ...# 2?QG [ 2#=6 [ENTRY SEQUENCE FOR LOCKING A BLOCK ROUTINE 2#PQ [ 2*9B #MAC LOCK 2*P2 #STR %A,2 2B8L LDX 2 %A [ADDRESS OF BLOCK TO BE LOCKED 2BN= CALL 0 (GLOCK) 2C7W #NOR 2CCN ...[??? LOCKC SECT CENT FGN 32 DOC 2CMG # 2D76 # 2DLQ #MAC LOCKC 2F6B #STR 2,%A 2FL2 LDX 2 %A 2G5L CALL 0 (GLOCKC) 2GK= CALL 1 %B 2H4W BLOCKCOPY 2HJG #NOR 2HS# ...[??? UNLOCK SECT CENT FGN 32 DOC 2J46 # 2JHQ [ 2K3B [ENTRY SEQUENCE FOR UNLOCKING A BLOCK ROUTINE 2KH2 [ 2L2L #MAC UNLOCK 2LG= #STR %A,2 2L^W LDX 2 %A [ADDRESS OF BLOCK TO BE UNLOCKED 2MFG CALL 0 (GUNL) 2M^6 #NOR 2M^G ...[??? RELOCKLONG SECT FILE FGN 1 DOC 2M^W ...[ 2N2= ...[ MACRO TO MOVE & RELOCK A LONGLOCK BLOCK 2N2L ...[ 2N32 ...#MAC RELOCKLONG 2N3B ...#SKI %A-3 2N3Q ... LDX 3 %A 2N46 ... LDX 0 AFLAG(3) 2N4G ... ANDN 0 #402 2N4W ... BZE 0 MRELOCKLONG 2N5= ... GETCORE ALOGLEN(3),1,1 2N5L ... FINDCORE 0 2N62 ... LDX 2 %A 2N6B ... LDX 3 0 2N6Q ...#SKI %A-3 2N76 ... STO 3 %A 2N7G ... BLOCKCOPY 2N7W ...MRELOCKLONG 2N8= ...#NOR 2N8Y ...[??? CHAIN SECT CENT FGN 32 DOC 2NDQ [ 2NYB [ 2PD2 [ENTRY SEQUENCE FOR CHAIN BLOCK ROUTINE 2PXL [ 2QC= #MAC CHAIN 2QWW #STR %A,1 2RBG LDX 1 %A [ADDRESS OF BLOCK TO BE CHAINED 2RW6 #STR %B,1 2S*Q #SKI 2STB ( 2T*2 ! %B=1 ILLEGAL FOR CHAIN 2TSL GEOERR 1,CHAINBWR 2W#= ) 2WRW #STR %B,2 2X?G LDX 2 %B [ADDRESS OF PRECEDING BLOCK 2XR6 CALL 0 (GCHAN) 2Y=Q #NOR 2YGJ ...[??? CHAIND SECT CENT FGN 32 DOC 2YQB [ 2^=2 [ENTRY SEQUENCE FOR CHAIN ROUTINE WHEN %B=THE BASE OF A CHAIN 2^PL [ 329= #MAC CHAIND 32NW #STR %A,1 338G LDX 1 %A [LOAD ADDRESS OF BLOCK TO BE CHAINED 33N6 LDN 2 %B [LOAD ADDRESS OF BASE 347Q CALL 0 (GCHAN) 34MB #NOR 3?=# ...[??? FREECORE SECT CENT FGN 32 DOC 3?G6 [ 3?^Q [ENTRY SEQUENCE FOR FREEING CORE ROUTINE 3#FB [ 3#^2 #MAC FREECORE 3*DL #STR %A,1 3*Y= LDX 1 %A [ADDRESS OF BLOCK TO BE FREED 3BCW CALL 0 (GFREE) 3BXG #NOR 3C7# ...[??? FREECORD SECT CENT FGN 32 DOC 3CC6 [ 3CWQ [ENTRY SEQUENCE FOR FOEEING CORE WITHOUT WAKING UP OTHER ACTIVITIES 3DBB [ 3DW2 #MAC FREECORD 3F*L FREECORE %A 3FT= #NOR 3FTK ...#UNS ISFC 3FTY ...( 3FW? ...[??? FREEIN SECT CENT FGN 3FWL ...[ 3FW^ ...[ENTRY SEQUENCE FOR CHAINING BLK INTO SIZE RING (IN STRUCTURED FREECORE) 3FX# ...[ 3FXM ...#MAC FREEIN 3FY2 ...#STR %A,1 3FY* ... LDX 1 %A [ADDRESS OF BLOCK 3FYN ... CALL 0 (GFRIN) 3F^3 ...#NOR 3F^B ...[??? FREEOUT SECT CENT FGN 3F^P ...[ 3G24 ...[ENTRY SEQUENCE FOR DECHAINING BLK FROM SIZE RING (STRUCTURED FREE CORE) 3G2C ...[ 3G2Q ...#MAC FREEOUT 3G35 ...#STR %A,1 3G3D ... LDX 1 %A [ADDRESS OF BLOCK 3G3R ... CALL 0 (GFROUT) 3G46 ...#NOR 3G4F ...) 3G54 ...[??? ALTBOTH SECT CENT FGN 32 DOC 3G#W [ 3GSG [ENTRY SEQUENCE FOR CHANGING A BLOCK LENGTH ROUTINE 3H#6 [ 3HRQ #MAC ALTBOTH [DEFINING MACRO FOR ALTLEN,ALTLEND 3J?B #STR %C%D 3JR2 ( 3K=L BRN MALT2 3KQ= MALT1 MHUNT 2,%C,%D 3L9W EXIT 1 0 3LPG MALT2 ALTLENG%F %A,%B,MALT1 3M96 #EXI 3MNQ ) 3N8B #STR FX2,%A 3NN2 #SKI 3P7L ( 3PM= ALTLENG%F %A,%B,£ 3Q6W #EXI 3QLG ) 3R66 LDX 1 %A 3RKQ LD%E 2 %B 3S5B CALL 0 (CHANGE) 3SK2 #NOR 3SSS ...[??? ALTLEN SECT CENT FGN 32 DOC 3T4L # 3TJ= #MAC ALTLEN [TO ALTER BLOCKS LOGICAL LENGTH 3W3W ALTBOTH %A,%B,%C,%D,X 3WHG #NOR 3WR# ...[??? ALTLEND SECT CENT FGN 32 DOC 3X36 # 3XGQ #MAC ALTLEND [TO ALTER BLOCKS LOGICAL LENGTH 3Y2B ALTBOTH %A,%B,%C,%D,N,D 3YG2 #NOR 3YPS ...[??? ALTLENG SECT CENT FGN 32 DOC 3Y^L # 3^F= # ALTLENG & VARIANTS ARE LIKE ALTLEN ETC BUT DONT INVOLVE LOCKING THE 3^YW # BLOCK 42DG # 42Y6 #MAC ALTLENG 43CQ LDX 1 %A 43XB LDX 2 %B 44C2 CALL 0 (CHANGEG) 44WL #STR %C,£ 45B= +%C [SUBROUTINE ADDRESS 45TW #STR %C 46*G #SKI 46T6 #10000000 [%C ABSENT 47#Q #STR £,%C 47SB #SKI 48#2 +0 [%C=£ 48RL #NOR 493D ...[??? ALTLENGD SECT CENT FGN 32 DOC 49?= # 49QW #MAC ALTLENGD 4==G LDX 1 %A 4=Q6 LDN 2 %B 4?9Q CALL 0 (CHANGEG) 4?PB #STR %C,£ 4#92 +%C [SUBROUTINE ADDRESS 4#NL #STR %C 4*8= #SKI 4*MW #10000000 [%C ABSENT 4B7G #STR £,%C 4BM6 #SKI 4C6Q +0 [%C=£ 4CLB #NOR 4CW8 ...[??? ALTLENGR SECT CENT FGN 32 DOC 4D62 # 4DKL #MAC ALTLENGR [ALTLENR VERSION AVOIDING LOCK 4F5= MOD LDX %B ARINGNO,%A 4FJW SRL %B 15 4G4G MOD ADX %B ALOGLEN,%A 4GJ6 ALTLENG %A,%B,%C 4H3Q #NOR 4H?J ...[??? GETCORAL SECT CENT FGN 32 DOC 4HHB # 4J32 # THE GETCORE SET OF MACROS FOR GETTING A BLOCK OF CORE 4JGL # 4K2= #MAC GETCORAL [USED FOR DEFINING THE REST 4KFW LD%B 2 %A 4K^G #STR %D%E 4LF6 ( 4LYQ #STR %E 4MDB LDCT 1 %E 4MY2 #STR %E 4NCL #SKI 4NX= LDCT 1 2 4PBW #STR %D 4PWG OR%F 1 %D 4QB6 #STR %D 4QTQ #SKI 4R*B NULL [INCLUDED SO LINK STEPPING WORKS 4RT2 CALL 0 (GCORE1) 4S#L +%C 4SS= #EXI 4T?W ) 4TRG CALL 0 (GCORE) 4W?6 +%C 4WQQ #NOR 4X2J ...[??? GETCORE SECT CENT FGN 32 DOC 4X=B # 4XQ2 #MAC GETCORE 4Y9L GETCORAL %A,X,HMANDAT*%B+0%C:0,%D,%E,N 4YP= #NOR 4Y^4 ...[??? GETCOREN SECT CENT FGN 32 DOC 4^8W # 4^NG #MAC GETCOREN 5286 GETCORAL %A,N,HMANDAT*%B+0%C:0,%D,%E,N 52MQ #NOR 52XJ ...[??? GETCOREX SECT CENT FGN 32 DOC 537B # 53M2 #MAC GETCOREX 546L GETCORAL %A,X,HMANDAT*%B+0%C:0,%D,%E,X 54L= #NOR 54W4 ...[??? LONGLOCK SECT CENT FGN 32 DOC 555W # 556^ ...#MAC LONGLOCK 5584 ... MOD LDX 2 ALOGLEN,%A 5597 ... CALL 0 (GCORE) 55== ... +HMANDAT+HLONGLOCK:0 55?* ...#STR %B 55#D ... CALL 1 %B 55*H ... BLOCKCOPY 55*R ... LDN 0 #4 [SET THE LONGLOCK BIT 55B3 ... SMO BDESTN 55B? ... ORS 0 AFLAG 55BL ...#NOR 55C7 ...[??? LOSELONG SECT CENT FGN 32 DOC 55CP ...#MAC LOSELONG 55DS ... LDN 0 4 55FX ... MOD ORS 0 AFLAG,%A 55H2 ... MOD ERS 0 AFLAG,%A 55J5 ...#NOR 55JR ...[??? BLOCKCOP SECT CENT FGN 32 DOC 55KG #MAC BLOCKCOPY [COPIES BLOCK FROM OLD TO NEW SITES 5656 [ & FREES OLD SITE 56JQ CALL 0 (BCOPY) 574B #NOR 57#8 ...[??? BLOCKMOV SECT CENT FGN 32 DOC 57J2 # 583L #MAC BLOCKMOVE [MOVES [X3] WORDS FROM BLOCK AT 58H= [ X1 TO X2 ,UPDATING RINGS ETC 592W CALL 0 (BMOVE) 59GG #NOR 59Q# ...[??? EMSCORE SECT CENT FGN 32 DOC 5=26 # 5=FQ [ 5=^B [ENTRY SEQUENCE TO SPECIAL EARLY MORNING START ROUTINE WHICH GETS CORE 5?F2 [FROM THE TOP END OF THE STORE 5?YL [ 5#D= #MAC EMSCORE 5#XW [ 5*CG [THIS IS A SPECIAL EARLY MORNING START ROUTINE WHICH GETS A BLOCK OF 5*X6 [CORE FROM THE TOP OF STORE 5BBQ [ 5BWB SEMS LDX 2 %A [LOAD AMOUNT REQUIRED 5CB2 STO 2 GLOGLEN [PRESERVE LOGICAL LENGTH 5CTL ADN 2 A1 5D*= #STR %B 5DSW ( 5F#G BZE %B SEMS1 [J IF BLOCK NEEDNT START AT IROUND 5FS6 LDX 1 BFREE+1 [ MULTIPLE 5G?Q LDX 1 ASIZE(1) [ELSE SET SIZE SO THAT BLOCK WILL 5GBW ...#UNS CA1D 5GG2 ... ANDX 1 CIRNDA 5GK6 ...#UNS CA1D 5GN= ...#SKI 5GRB ANDN 1 IROUND-1 [ START ON A MULTIPLE OF IROUND 5H?2 SBX 2 1 5HB6 ...#UNS CA1D 5HF= ... ADX 2 CIRNDA 5HJB ...#UNS CA1D 5HMG ...#SKI 5HQL ADN 2 IROUND-1 5J== ANDX 2 IROUNDNG 5JPW ADX 2 1 5K9G SEMS1 5KP6 ) 5L8Q LDX 1 BFREE+1 [FIND LAST BLOCK OF FREECORE 5LNB LDX 0 ASIZE(1) [ GET ITS SIZE 5M82 SBS 2 CFREE [SUB AMOUNT GIVEN FROM CURRENT FREE 5MML SBS 2 AFREE 5N7= SBX 0 2 [SUB REQUIRED SIZE 5NLW BNG 0 SERR [J IF NOT ENOUGH 5P6G BZE 0 SALL [J IF ALL NEEDED 5PL6 SBS 2 ASIZE(1) [SET NEW SIZE OF FREE BLOCK 5R52 ADX 1 0 [CALC ADDRESS OF GOT BLOCK 5RJL STO 2 ASIZE(1) [STORE ITS SIZE 5RLJ ...#UNS ISFC 5RNG ...( 5RQD ... SBX 1 0 [RETURN TO THE FREE BLOCK 5RSB ... FREEOUT 1 [DECHAIN FROM SIZE RING,AS SHORTER 5RW# ... FREEIN 1 [CHAIN INTO NEW SIZE RING 5RY= ... ADX 1 ASIZE(1) [NOW BACK TO THE GOT BLOCK 5S28 ...) 5S4= LDN 0 #10 [ LOCK IT 5SHW STO 0 AFLAG(1) 5T3G STOZ ATYPE(1) 5TH6 STOZ BACK1(1) 5W2Q STOZ BACK2(1) 5WGB LDX 2 GLOGLEN [SET LOGICAL LENGTH 5X22 STO 2 ALOGLEN(1) 5XFL LDCT 2 #2 5X^= STO 2 ARINGNO(1) 5YDW LDX 2 FX2 [CHAIN GOT BLOCK AFTER ACTIVITY 5YYG LDX 0 FPTR(2) 5^D6 STO 1 FPTR(2) 5^XQ STO 0 FPTR(1) 62CB STO 2 BPTR(1) 62X2 SMO 0 63BL STO 1 BPTR 63W= LDX 1 FX1 64*W BRN SEMSEND 64TG SALL 657X ...#UNS ISFC 65G# ... FREEOUT 1 [REMOVE BLK FROM SIZE RING 65SQ LDN 0 #10 [ LOCK IT 66#B STO 0 AFLAG(1) 66S2 STOZ ATYPE(1) 67?L STOZ BACK1(1) 67R= STOZ BACK2(1) 68=W CHAIN 1,FX2 [CHAIN IT 68QG BRN SEMSEND 69=6 SERR GEOERR 1,EMSCORE 69PQ SEMSEND 6=9B #NOR 6=F8 ...[??? GETEMSCR SECT CENT FGN 32 DOC 6=P2 [ 6?8L [ENTRY SEQUENCE FOR EMS TO GET CORE SAME WAY AS LINK BLOCK 6?N= [ 6#7W #MAC GETEMSCR 6#MG #STR %A,4 6*76 LDX 4 %A 6*LQ CALL 0 (GEMS) 6B6B #NOR 6BB8 ...[??? GETLINK SECT CENT FGN 32 DOC 6BL2 [ 6C5L [ENTRY SEQUENCE FOR GETTING A LINK BLOCK 6CK= [ 6D4W #MAC GETLINK 6DJG CALL 0 GLINK 6F46 #NOR 6F?Y ...[??? GETQUE SECT CENT FGN 32 DOC 6FHQ [ 6G3B [ENTRY SEQUENCE FOR GETTING A QUEUE BLOCK 6GH2 [ 6H2L #MAC GETQUE 6HG= CALL 0 GQUEU%A 6H^W ZERORING 0 6JFG #NOR 6JP# ...[??? ZERORING SECT CENT FGN 32 DOC 6J^6 [ 6KDQ [THIS IS A RECURSIVE MACRO WHICH INITIALISES ALL RING ELEMENTS IN A 6KYB [QUEUE BLOCK UP TO BUT NOT INCLUDING CHAINADD/BACKCHAN 6LD2 [ 6LXL #MAC ZERORING 6MC= #OPT MZERORING1=%A 6MWW #OPT MZERORING=1 6NBG #SKI CHAINADD-ARINGNO-1-MZERORING1 6NW6 ( 6P*Q #SKI MZERORING 6PTB ( 6Q*2 LDX 3 FPTR(2) 6QSL #FRE MZERORING 6R#= #OPT MZERORING=0 6RRW ) 6S?G STOZ ARINGNO+MZERORING1+2(3) 6SR6 #FRE MZERORING1 6T=Q ZERORING %A+2 6TQB ) 6W=2 #FRE MZERORING1,MZERORING 6WPL #NOR 6W^D ...[??? GETCHAP SECT CENT FGN 32 DOC 6X9= [ 6XNW [ENTRY SEQUENCE FOR GETTING CHAPTER SPACE 6Y8G [ 6YN6 #MAC GETCHAP 6^7Q GETCORAL %A,X,HMANDAT+HCHAP:0 6^MB #NOR 6^X8 ...[??? FINDCORE SECT CENT FGN 32 DOC 7272 [ 72LL [MACRO FOR FINDING A BLOCK OF CORE JUST GOT 736= [ 73KW #MAC FINDCORE 745G LDX %A FPTR(2) [LOAD FORWARD POINTER 74K6 #NOR 74SY ...[??? NAME SECT CENT FGN 32 DOC 754Q [ 75JB [THE MACRO FOR GIVING A BLOCK A PARTICULAR TYPE AND SUB TYPE 7642 [ 76HL #MAC NAME 773= LDN 0 %C+%B [LOAD BLOCK TYPE 77GW SLL 0 12 [SHIFT UP 782G MOD STO 0 ATYPE,%A 78G6 #NOR 78PY ...[??? NAMETOP SECT CENT FGN 32 DOC 78^Q [ 79FB [ ALTERS TYPE WORD OF BLOCK (MS 12BITS ONLY). PARAMETERS SAME AS FOR 79^2 [ 7=DL #MAC NAMETOP 7=Y= LDN 0 #7777 7?CW MOD ANDS 0 ATYPE,%A 7?XG LDN 0 %C+%B [LOAD BLOCK TYPE 7#C6 SLL 0 12 7#WQ MOD ORS 0 ATYPE,%A 7*BB #NOR 7*L8 ...[??? NAMEX SECT CENT FGN 32 DOC 7*W2 # 7B*L # MACRO FOR GIVING A BLOCK THE TYPE AND SUB-TYPE HELD IN X0 7BT= #MAC NAMEX 7C#W MOD STO 0 ATYPE,%A 7CSG #NOR 7D4# ...[??? PHOTO SECT CENT FGN 32 DOC 7D#6 # 7DRQ [ 7F?B [THIS MACRO PHOTOGRAPHS THE CURRENT BLOCKS MOVED COUNT 7FR2 [ 7G=L #MAC PHOTO 7GQ= LDX %A BCOUNT [LOAD BLOCKS MOVED COUNT 7H9W #NOR 7HFN ...[??? TESTMOVE SECT CENT FGN 32 DOC 7HPG [ 7J96 [THIS MACRO TESTS WHETHER ANY BLOCKS HAVE BEEN MOVED SINCE THE BLOCK 7JNQ [COUNT WAS LAST PHOTOGRAPHED 7K8B [ 7KN2 #MAC TESTMOVE 7L7L TXU %A BCOUNT [COMPARE THE TWO COUNTS 7LM= BCC %B [J IF UNCHANGED 7M6W #NOR 7MBN ...[??? CXMEND SECT CENT FGN 32 DOC 7MLG # 7N66 # THE FOLLOWING CX MACROS PROVIDE A RESTORE TIME CHECKING FACILITY 7NKQ #MAC CXMEND 7P5B #OPT FC50A=0 7PK2 #SKI FC50A<1-1 [IF FIRST CXMEND,FOLLOWING CODE COMPILES 7Q4L ( 7QJ= #STR DELAY,%A 7R3W #SKI 7RHG ( 7S36 RESOFF CHECK 7SGQ ) 7T2B #MEN CHCH 7TG2 #TRA FZCO 7T^L BRN JFCT [FCMEND STARTING LABEL 7WF= #END 7WYW FCMEND 7XDG BSOFF CHECK,FC50B 7XY6 ) 7YCQ [ SUBSEQUENT CXMENDS MUST NOT HAVE 'DELAY' PARAM, AND CANNOT HAVE MORE 7YXB [ THAN ONE CXMEND IF FIRST HAD 'DELAY' PARAM. 7^C2 #SKI FC50A 7^WL ( 82B= #STR DELAY,%A 82TW #SKI 83*G ( 83T6 ! DELAY PARAMETER NOT ALLOWED 84#Q #CON ERROR IN CXMEND DELAY 84SB #MEN CEND 85#2 #TRA FC50A 85RL BRN FC50B 86?= #END 86QW FCMEND 87=G #EXIT 87Q6 ) 889Q #SKI 88PB ( 8992 ! DELAY PARAMETER USED PREVIOUSLY 89NL #CON ERROR IN CXMEND 8=8= #MEN CEND 8=MW #TRA FC50A 8?7G BRN FC50B 8?M6 #END 8#6Q FCMEND 8#LB #EXIT 8*62 ) 8*KL #MEN CEND [IF NOT FIRST CXMEND, THIS CODE COMPILES 8B5= #TRA FC50A 8BJW BRN JFCT [FCMEND STARTING LABEL 8C4G #END 8CJ6 FCMEND 8D3Q ) 8DHB #SKI FNOISE 8F32 ( 8FGL #STR SELECT,%B 8G2= #SKI 8GFW ( 8G^G SMO FX2 8HF6 LDX 1 ALINK1 8HYQ BPZ 1 FC50B 8JDB ANDX 1 BITS22LS 8JY2 JBC FC50B,BACK2(1),CXSELECT 8KCL ) 8KX= ) 8LBW #NOR 8LLN ...[??? CXEND SECT CENT FGN 32 DOC 8LWG # 8MB6 #MAC CXEND 8MTQ #DEF 20?=37?+0? [CURRENT TRANSFER ADDRESS 8N*B #SKI FC50A<1-1 [IF FIRST CXEND, FOLLOWING CODE COMPILES 8NT2 ( 8P#L NULL 8PS= FC50B LDX 2 FX2 8Q?W LDX 0 ACTNUM(2) 8QRG STO 0 AGEDACTY 8R?6 BRN FZCO+1 8RQQ ) 8S=B #SKI FC50A [IF NOT FIRST CXEND, THIS NEXT LINE COMPILES 8SQ2 BRN FC50B 8T9L FCEND %A 8TP= #ALT FC50A=20? 8W8W #NOR 8WDN ...[??? CXCHANS SECT CENT FGN 32 DOC 8WNG # 8X86 #MAC CXCHANS [CHECKS CHAINS 8XMQ #STR %A 8Y7B #SKI 8YM2 ( 8^6L LDN 1 0 8^L= LDN 6 CHCX 925W MCX1 LDX 3 CXSTART(1) 92KG ) 9356 #STR %A 93JQ ( 944B CALL 1 MCX2 94J2 MCX3 CXCQ %A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S 953L MCX2 LDN 6 MCX2-MCX3 95H= MCX1 OBEY 0(1) 962W ) 96GG LDX 4 3 9726 MCX4 LDX 5 3 97FQ LDX 3 FPTR(3) 97^B BXU 5 BPTR(3),MCX5 98F2 BXU 3 4,MCX4 98YL ADN 1 1 99D= BCT 6 MCX1 99XW BRN MCX6 9=CG MCX5 GEOERR 1,CHCORE 9=X6 MCX6 9?BQ #NOR 9?F* ...[ MACROS CXSELECT AND NOISY ARE DORMANT UNTILL 9?HY ...[ (IF EVER) NOISY CORE IS RESURECTED. 9?LJ ...[??? CXSELECT SECT CENT FGN 32 DOC 9#4L ...[# 9#GN ...[[ 9#YQ ...[#MAC CXSELECT 9*BS ...[#SKI FNOISE 9*SW ...[( 9B=Y ...[#STR %A 9BP2 ...[ RBS CHTABLE,KTAB+K%A,CXSELECT 9C74 ...[) 9CK6 ...[#NOR 9D38 ...[??? CXSIZE SECT CENT FGN 32 DOC 9D?2 [ 9DQL #MAC CXSIZE [CHECKS SIZE WORDS 9F== NGX 0 GFIXCHAP 9FPW BPZ 0 MCX1 9G9G LDX 3 FCORES 9GP6 MCX2 ADX 3 ASIZE(3) 9H8Q BXU 3 GFIXCHAP,MCX2 9HNB MCX1 9J82 #NOR 9JCS ...[??? CXCQ SECT CENT FGN 32 DOC 9JML # 9K7= #MAC CXCQ [RECURSIVE TABLE BUILDING MACRO USED IN CXCHAN 9KLW #STR %A 9L6G ( 9LL6 LDX 3 CX%A^0 [^0 SO GIN ERROR IF CX%A UNDEFINED 9M5Q CXCQ %B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q, 9MKB ) 9N52 #NOR 9N#S ...[??? NOISY SECT CENT FGN 32 DOC 9NS= ...[[ 9P?N ...[[ THE NOISY MACRO IMPLEMENTS THE NOISY CORE SYSTEM. 9PR6 ...[[ IT SHUFFLES CORE, USING COREALLF, BEFORE ENTERING SELECTED CHAPTER 9Q=J ...[[ 9QQ2 ...[#MAC NOISY 9R9D ...[#SKI FNOISE 9RNW ...[( 9S8# ...[#OPT NOISENOW=1 [ =1 IF NO NOISY HAS BEEN ISSUED YET 9SMQ ...[#SKI NOISENOW [ INCLUDE CODE ONLY IF NO NOISY MACRO 9T78 ...[( [ HAS BEEN ISSUED YET 9TLL ...[#DEF 26?=1? 9W64 ...[#LIS %B+0 9WKG ...[ FCMENDV 9X4Y ...[ REPLACER GNCCODE,FCNCXEQ [ POINTER TO SUBROUTINE ENTRY POINT 9XJB ...[ FCENDV [ AND DUMP AREA 9Y3S ...[ CXMEND %A,SELECT [ J TO CXEND IF NEXT CHAP NOT SELECT 9YH= ...[ JBS Z1A,2,BYPASS [ NOISY MOVE ALREADY DONE IF BIT SET 9^2N ...[ SMO GNCCODE 9^G6 ...[ LDX 0 1+ALINK1-ACC3 [ LOAD DUMP OF ALINK1 9^^J ...[ BNZ 0 Z1B [ J IF NON-ZERO. A NOISY IN PROGRESS =2F2 ...[ SMO GNCCODE =2YD ...[ LDX 0 1 [ DUMP WORDS ACC3 TO ACOMMUNE9 OF =3CW ...[ LDX 7 ACC3(2) [ CURRENT ACTIVITY IN WORKSPACE =3X# ...[ MOVE 7 ACOMMUNE9+1-ACC3 [ AT ZCACCDP, AND =4BQ ...[ BS 2,BYPASS [ SET BIT INDICATING NOISY ENTERED =4W8 ...[ LDN 0 ACC3-1 [ NOW USE ACOMMUNE1 AS POINTER TO =5*L ...[ STO 0 ACOMMUNE1(2) [ NEXT DATA WORD TO CHECK =5T4 ...[ LDN 5 0 [ X5 IS SUCCESS OR FAIL MARKER IN =6#G ...[ ACROSS COREALLF,4 [ COREALLF. X5=0 => FAIL =6RY ...[ LABFIX FCNCXEQ [ (GNCCODE) IDENTIFIES BOTH S/R ENTRY PT AND DUMP =7?B ...[ BRN XEQ [ JUMP TO EXECUTE S/R CODE =7QS ...[[ WORK SPACE - FIXED AT (GNCCODE)+1 TO ALLOW REPLACED ADDRESSING OF =8== ...[[ CORE ABOVE 4095 =8PN ...[#REP ACOMMUNE9+1-ACC3 [ DUMP OF WORDS ACC3 TO ACOMMUNE9 =996 ...[ +0 =9NJ ...[[ THE SUBROUTINE CALLED FROM COREALLF (WITH X4 AS LINK) ==82 ...[[ WHEN ALL MOVES COMPLETED, NOISY EXITS FROM THE MIDDLE OF THIS ==MD ...[[ SUBROUTINE. HENCE THE CODE AT COREALLF,4 IS A LOOP =?6W ...[XEQ BZE 5 Z5 [ IF CORE WAS SUCCESSFULLY OBTAINED, =?L# ...[ FREECORE FPTR(2) [ FREE IT =#5Q ...[Z5 LDN 7 1 [ POINT TO NEXT DATA WORD OF ACTIVITY =#K8 ...[ ADS 7 ACOMMUNE1(2) [ BLOCK =*4L ...[ LDN 6 ACOMMUNE9 =*J4 ...[ BXL 6 ACOMMUNE1(2),Z3 [ IS THIS ONE OF THE DUMPED WORDS? =B3G ...[ LDX 3 ACOMMUNE1(2) [ IF SO, GET IT FROM THE DUMP AREA =BGY ...[ SBN 3 ACC3-1 [ X3 IS A POINTER RELATIVE TO FCNCXEQ =C2B ...[ SMO GNCCODE =CFS ...[ LDX 6 0(3) =C^= ...[ BRN Z2 =DDN ...[Z3 SMO ALOGLEN(2) [ IF NOT, TEST THAT THE POINTER DOES =DY6 ...[ LDN 6 A1-1 [ NOT POINT PAST THE END OF THE =FCJ ...[ BXL 6 ACOMMUNE1(2),Z4 [ DATA IN THE ACTIVITY BLOCK =FX2 ...[ SMO ACOMMUNE1(2) [ IF OK, GET THE WORD FROM THE =GBD ...[ LDX 6 0(2) [ ACTIVITY BLOCK =GTW ...[Z2 ANDX 6 BITS22LS [ GET THE BLOCK BOUNDARY ADDRESS =H*# ...[ ANDX 6 IROUNDNG [ JUST BELOW THE ADDRESS IN THIS =HSQ ...[ BXL 6 FCORES,Z5 [ WORD, AND TEST IF IT LIES IN =J#8 ...[ BXGE 6 GFIXCHAP,Z5 [ VARIABLE CORE. IF NOT, GO TO NEXT =JRL ...[ LDN 7 A1+IROUND-1 [ PUT SMALLEST POSSIBLE BLOCK SIZE =K?4 ...[ ANDX 7 IROUNDNG [ IN X7 =KQG ...[ ADX 6 7 [ CHECK THAT THE BLOCK WOULD NOT =L9Y ...[P2 BXL 6 GFIXCHAP,P1 [ EXTEND PAST GFIXCHAP =LPB ...[ SBN 6 IROUND [ IF IT WOULD, MOVE X6 DOWN =M8S ...[ BRN P2 [ SUFFICIENTLY =MN= ...[P1 SBX 6 7 [ X6,X7 SET UP. EXIT TO COREALLF TO =N7N ...[ EXIT 4 0 [ DO THE COREFREEZE, SO MOVING THE =NM6 ...[[ BLOCK WHICH THIS DATA WORD IN THE ACTIVITY BLOCK MAY HAVE BEEN =P6J ...[[ POINTING TO =PL2 ...[Z4 NGN 7 1 [ HAVING TESTED ALL DATA WORDS, WE =Q5D ...[ STO 7 GEN0 [ OVERWRITE THE COMMON 'SCRATCHPAD' =QJW ...[ LDN 6 GEN0 [ WORDS GEN0-GEN6 WITH -1, IN CASE =R4# ...[ LDN 7 GEN1 [ THEY TOO HELD LINKS OVER A =RHQ ...[ MOVE 6 GEN6-GEN0 [ COORDINATION =S38 ...[ SMO GNCCODE =SGL ...[ LDN 6 1 [ RESTORE THE DUMPED WORDS TO THE =T24 ...[ LDN 7 ACC3(2) [ ACTIVITY BLOCK =TFG ...[ MOVE 6 ACOMMUNE9+1-ACC3 =TYY ...[ SMO GNCCODE =WDB ...[ STOZ 1+ALINK1-ACC3 [ CLEAR THE 'NOISY IN ACTION' MARKER =WXS ...[ FON FORACCDP [ WAKE UP ACTIVITIES WAITING FOR TURN =XC= ...[ FPUT [ PUT THIS ACTY ON END OF ACTY LIST =XWN ...[ COOR1X [ AND PUT IT TO SLEEP. ON RE-ENTRY =YB6 ...[[ TO THE COORDINATOR, THE BY-PASS BIT IS SET AND THIS CORE MOVING =YTJ ...[[ CODE WILL BE SKIPPED =^*2 ...[Z1B COOR3X FORACCDP [ WAIT FOR TURN IN NOISY =^SD ...[Z1A BC 2,BYPASS [ CLEAR BY-PASS BIT AND COMPLETE THE ?2?W ...[ CXEND [ COORDINATION ?2R# ...[#ALT NOISENOW=0 ?3=Q ...[#LIS 26? ?3Q8 ...[) ?49L ...[) ?4P4 ...[#NOR ?5=# ...[??? GETACT SECT CENT FGN 32 DOC ?5G6 # THESE MACROS GET ACTIVITY BLOCKS ?5^Q # ?6FB #MAC GETACT ?6^2 #STR %B ?7DL GETCORAL %BLEN+%ALEN,N,HMANDAT+HACTY+0%C:0 ?7Y= #STR %B ?8CW #SKI ?8XG GETCORAL %ALEN,N,HMANDAT+HACTY+0%C:0 ?9C6 FINDCORE 1 ?9WQ NAME 1,%A,%B ?=BB ADN 1 ACTRING ?=W2 ENRING 1,ACTRING+BPTR(2) ??*L CHAIN FPTR(2),BPTR(2) ??GS ...#UNS ICT ??N2 ... APGA %A,%B ??T= #NOR ?#54 ...[??? GETACTOP SECT CENT FGN 32 DOC ?##W # ?#SG #MAC GETACTOP ?*#6 #STR %C ?*RQ GETCORAL %CLEN+%BLEN,N,HACTY+0%D:0 ?B?B #STR %C ?BR2 #SKI ?C=L GETCORAL %BLEN,N,HACTY+0%D:0 ?CQ= BRN MGET ?D9W BRN %A ?DPG MGET FINDCORE 1 ?F96 NAME 1,%B,%C ?FNQ ADN 1 ACTRING ?G8B ENRING 1,ACTRING+BPTR(2) ?GN2 CHAIN FPTR(2),BPTR(2) ?GT8 ...#UNS ICT ?H2B ... APGA %B,%C ?H7L #NOR ?HCD ...[??? GETACTX SECT CENT FGN 32 DOC ?HM= # ?J6W #MAC GETACTX ?JLG GETCORAL %B,X,HMANDAT+HACTY+0%C:0 ?K66 FINDCORE 1 ?KKQ STO %A ATYPE(1) ?L5B ADN 1 ACTRING ?LK2 ENRING 1,ACTRING+BPTR(2) ?M4L CHAIN FPTR(2),BPTR(2) ?M9S ...#UNS ICT ?MC2 ... APGAX %A ?MJ= #NOR ?MS4 ...[??? GETACTXO SECT CENT FGN 32 DOC ?N3W # ?NHG #MAC GETACTXOP ?P36 GETCORAL %C,X,HACTY+0%D:0 ?PGQ BRN MGET ?Q2B BRN %A ?QG2 MGET FINDCORE 1 ?Q^L STO %B ATYPE(1) ?RF= ADN 1 ACTRING ?RYW ENRING 1,ACTRING+BPTR(2) ?SDG CHAIN FPTR(2),BPTR(2) ?SKN ...#UNS ICT ?SQW ... APGAX %B ?SY6 #NOR ?T7Y ...[??? EMSACT SECT CENT FGN 32 DOC ?TCQ # ?TXB # EMSACT GETS ABLOCK OF CORE FOR AN ACTIVITY BLOCK AT EARLY MORNING STAR ?WC2 # TIME. IT IS LOCKED PERMANENTLY AT THE TOP OF CORE ?WWL # ?XB= #MAC EMSACT ?XTW #STR %B ?Y*G LDN 2 %ALEN+%BLEN ?YT6 #STR %B ?^#Q #SKI ?^SB LDN 2 %ALEN #2#2 STO 2 GLOGLEN [STORE LENGTH REQUIRED #2RL ADN 2 A1 #3?= LDX 1 BFREE+1 [TOP BLOCK IN F/C CHAIN #3QW LDX 0 ASIZE(1) [LENGTH #4=G SBS 2 AFREE #4Q6 SBS 2 CFREE #59Q SBX 0 2 #5PB BPZ 0 MEMSACT1 #692 MEMSACT2 #6NL GEOERR 1,EMSCORE #78= MEMSACT1 #7MW BZE 0 MEMSACT2 #87G SBS 2 ASIZE(1) [NEW SIZE #9LB ADX 1 0 [ADDR BLOCK #=62 STO 2 ASIZE(1) [SET SIZE #=7Y ...#UNS ISFC #=9W ...( #=?S ... SBX 1 0 [RETURN TO THE FREE BLOCK #=*Q ... FREEOUT 1 [DECHAIN FROM SIZE RING,AS SHORTER #=CN ... FREEIN 1 [CHAIN INTO NEW SIZE RING #=FL ... ADX 1 ASIZE(1) [NOW BACK TO GOT BLOCK #=HJ ...) #=KL LDN 0 #10 [AND #?5= STO 0 AFLAG(1) [LOCK BIT #?JW LDX 2 GLOGLEN [AND ##4G STO 2 ALOGLEN(1) [LOGICAL LENGTH ##J6 #STR %B #*3Q LDN 0 %A+%B #*HB #STR %B #B32 #SKI #BGL LDN 0 %A #C2= SLL 0 12 #CFW STO 0 ATYPE(1) #C^G STOZ BACK1(1) #DF6 STOZ BACK2(1) #DYQ LDX 2 FX2 #FDB STO 2 FPTR(1) [CHAIN IN FRONT OF ACT #FY2 LDX 2 BPTR(2) #GCL SMO FX2 #GX= STO 1 BPTR #HBW STO 1 FPTR(2) #HWG STO 2 BPTR(1) #JB6 LDN 0 ACTRINGNUM #JTQ MEMSACT3 #K*B LDN 2 ARINGNO+1(1) #KT2 STO 2 ARINGNO+1(1) #L#L STO 2 ARINGNO+2(1) #LS= BDX 1 £ #M?W BCT 0 MEMSACT3 #MRG LDN 2 FILERING #N?6 NGS 2 ARINGNO+1(1) #NQQ SBN 1 ACTRINGNUM*2 #P=B STOZ BACKCHAN(1) #PQ2 LDX 2 ACTYPE #Q9L STO 2 ARINGNO(1) [RING WORD #QP= LDN 2 ACTRING(1) [RING ONTO ACT RING #R8W SMO FX2 #RNG LDN 1 ACTRING #S86 STO 1 0(2) #SMQ LDX 1 1(1) #T7B SMO FX2 #TM2 STO 2 ACTRING+1 #W6L STO 2 0(1) #WL= STO 1 1(2) #X5W LDN 0 ACC3-ACTRING(2) [ZEROISE BLOCK #XKG LDN 1 ACC4-ACTRING(2) #Y56 STOZ ACC3-ACTRING(2) #YJQ #STR %B #^4B MOVE 0 %ALEN+%BLEN-ACC3+A1-1 #^J2 #STR %B *23L #SKI *2H= MOVE 0 %ALEN-ACC3+A1-1 *32W LDX 0 ACTCOUNT *3GG STO 0 ACTNUM-ACC4(1) [SET ACT NUMBER *426 ADN 0 1 *4FQ STO 0 ACTCOUNT *4KM ...#UNS ICT *4PJ ...#SKI *4TF ...( *4^B LDX 1 FX1 *5F2 LDX 2 FX2 *5JX ...) *5NS ...#UNS ICT *5SP ... APGA %A,%B *5YL #NOR *68D ...[??? EMSACTX SECT CENT FGN 32 DOC *6D= # *6XW # X VERSION OF EMSACT(SEE ABOVE *7CG # *7X6 #MAC EMSACTX *8BQ #STR %B,2 *8WB LDX 2 %B *9B2 STO 2 GLOGLEN [STORE LENGTH REQUIRED *9TL ADN 2 A1 *=*= LDX 1 BFREE+1 [TOP BLOCK IN F/C CHAIN *=SW LDX 0 ASIZE(1) [LENGTH *?#G SBS 2 AFREE *?S6 SBS 2 CFREE *#?Q SBX 0 2 *#RB BPZ 0 MEMSACTX1 **?2 MEMSACTX2 **QL GEOERR 1,EMSCORE *B== MEMSACTX1 *BPW BZE 0 MEMSACTX2 *C9G SBS 2 ASIZE(1) [NEW SIZE *DNB ADX 1 0 [ADDR BLOCK *F82 STO 2 ASIZE(1) [SET SIZE *F9Y ...#UNS ISFC *F?W ...( *F*S ... SBX 1 0 [RETURN TO FREE BLOCK *FCQ ... FREEOUT 1 [DECHAIN FROM SIZE RING, AS SHORTER *FFN ... FREEIN 1 [CHAIN INTO NEW SIZE RING *FHL ... ADX 1 ASIZE(1) *FKJ ...) *FML LDN 0 #10 [AND *G7= STO 0 AFLAG(1) [LOCK BIT *GLW LDX 2 GLOGLEN [AND *H6G STO 2 ALOGLEN(1) [LOGICAL LENGTH *HL6 STO %A ATYPE(1) *J5Q STOZ BACK1(1) *JKB STOZ BACK2(1) *K52 LDX 2 FX2 *KJL STO 2 FPTR(1) [CHAIN IN FRONT OF ACT *L4= LDX 2 BPTR(2) *LHW SMO FX2 *M3G STO 1 BPTR *MH6 STO 1 FPTR(2) *N2Q STO 2 BPTR(1) *NGB LDN 0 ACTRINGNUM *P22 MEMSACTX3 *PFL LDN 2 ARINGNO+1(1) *P^= STO 2 ARINGNO+1(1) *QDW STO 2 ARINGNO+2(1) *QYG BDX 1 £ *RD6 BCT 0 MEMSACTX3 *RXQ LDN 2 FILERING *SCB NGS 2 ARINGNO+1(1) *SX2 SBN 1 ACTRINGNUM*2 *TBL STOZ BACKCHAN(1) *TW= LDX 2 ACTYPE *W*W STO 2 ARINGNO(1) [RING WORD *WTG LDN 2 ACTRING(1) [RING ONTO ACT RING *X*6 SMO FX2 *XSQ LDN 1 ACTRING *Y#B STO 1 0(2) *YS2 LDX 1 1(1) *^?L SMO FX2 *^R= STO 2 ACTRING+1 B2=W STO 2 0(1) B2QG STO 1 1(2) B3=6 LDN 0 ACC3-ACTRING(2) [ZEROISE BLOCK B3PQ LDN 1 ACC4-ACTRING(2) B49B STOZ ACC3-ACTRING(2) B4P2 LDX 2 GLOGLEN B58L SBN 2 ACC3-A1+1 B5N= MOVE 0 0(2) B67W LDX 0 ACTCOUNT B6MG STO 0 ACTNUM-ACC4(1) [SET ACT NUMBER B776 ADN 0 1 B7LQ STO 0 ACTCOUNT B7QM ...#UNS ICT B7WJ ...#SKI B82F ...( B86B LDX 1 FX1 B8L2 LDX 2 FX2 B8PX ...) B8TS ...#UNS ICT B8^P ... APGAX %A B95L #NOR B9*D ...[??? RINGPURG SECT CENT FGN 32 DOC B9K= # CLEAR OUT REDUNDANT RINGS BY CLEARING LOWER FIELD OF ARINGNO B=4W #MAC RINGPURG B=JG LDN 0 0 B?46 MOD DLA 0 ARINGNO,%A B?HQ #NOR B?RJ ...[??? SUBRELT SECT CENT FGN 32 DOC B#3B # B#H2 # DELETE A RING FROM THE BLOCK,FIRST DERINGING IT,IT THEN MOVES UP ANY B*2L # SUBSEQUENT RING ELEMENTS UPDATING THEIR POINTERS. THE BLOCK IS SHORTEN B*G= # B*^W #MAC SUBRELT BBFG #STR %A,2 BB^6 LDX 2 %A [ADDRESS OF RING ELEMENT BCDQ STO 2 GEN0 BCYB LDX 0 BPTR(2) BDD2 SMO FPTR(2) BDXL STO 0 BPTR BFC= LDX 0 FPTR(2) BFWW SMO BPTR(2) BGBG STO 0 FPTR BGW6 SMO BSTART(2) BH*Q LDN 2 FPTR(2) [ADDRESS OF BLOCK BHTB LDX 0 ARINGNO(2) BJ*2 SRL 01 15 [X0=LENGTH OF RING ELEMENTS BJSL #STR 1,%B BK#= ( BKRW STO 2 GEN1 BL?G STO 3 GEN2 BLR6 STO 7 GEN3 BM=Q SRL 1 9 [X1=TOTAL NO OF RINGS BMQB LDX 3 GEN0 BN=2 SBN 3 A1(2) BNPL DVS 2 0 [X3=NO OF RING ELS UP TO CONDEMNED ON BP9= SBN 1 1(3) [X1=NO OF RINGS TO BE MOVED BPNW LDX 3 0 [X3=LENGTH OF RING ELEMENTS BQ8G LDX 0 1 [X0=NO OF RINGS TO BE MOVED BQN6 BZE 0 MS1 [J IF NO RING ELEMENTS TO MOVE BR7Q LDX 2 GEN0 [MOVE DESTINATION ADDR BRMB LDX 1 2 BS72 ADX 1 3 [MOVE SOURCE ADDR BSLL MS3 LDX 7 BPTR(1) BT6= BZE 7 MS2 [J IF ELEMENT IS NULL BTKW SMO FPTR(1) [ ELSE UPDATE RING BW5G SBS 3 BPTR BWK6 SMO 7 BX4Q SBS 3 FPTR BXJB MS2 ADS 3 BSTART(1) BY42 MOVE 1 0(3) [MOVE DOWN ELEMENT BYHL ADX 1 3 B^3= ADX 2 3 B^GW BCT 0 MS3 C22G MS1 LDX 0 3 [X0=LENGTH OF RING ELEMENT C2G6 LDX 2 GEN1 C2^Q LDX 3 GEN2 C3FB LDX 7 GEN3 C3^2 ) C4DL LDN 1 1 C4Y= SBS 1 ARINGNO(2) [UPDATE ARINGNO C5CW LDX 1 ALOGLEN(2) C5XG SBX 1 0 [NEW LOGICAL LENGTH C6C6 SHORTEN 2,0(1) C6WQ LDX 1 FX1 C7BB LDX 2 FX2 C7W2 #NOR C85S ...[??? ALTLENR SECT CENT FGN 32 DOC C8*L # C8T= # MAKES ROOM FOR AN ADDITIONAL RING ELEMENT C9#W #MAC ALTLENR C9SG MOD LDX %B ARINGNO,%A [CALCULATE AMT TO NEEDED C=#6 SRL %B 15 C=RQ MOD ADX %B ALOGLEN,%A C??B ALTLEN %A,%B,%C,%D [ALTLEN C?R2 #NOR C#2S ...[??? ADDRELT SECT CENT FGN 32 DOC C#=L # C#Q= # THIS INITIALISES THE NEW ELEMENT, SPACE HAVING BEEN PROVIDED BY ALTLEN C*9W # ARINGNO IS UPDATED AND THE ELEMENT ENRINGED AS SPECIFIED C*PG # CB96 #MAC ADDRELT CBNQ #STR %A,1 CC8B LDX 1 %A [BLOCK ADDR CCN2 STO 1 GEN0 CD7L #STR 2,%B CDM= ( CF6W #STR NULL,%B CFLG LDX 2 %B CG66 ) CGKQ LDN 0 1 CH5B ADS 0 ARINGNO(1) [INDICATE EXTRA ELEMENT CHK2 LDX 0 ARINGNO(1) CJ4L SRL 0 15 CJJ= SMO ALOGLEN(1) CK3W ADN 1 A1 CKHG SBX 1 0 [X1 NOW = NEW ELEMENT CL36 #STR NULL,%B CLGQ ( CM2B LDX 0 FPTR(2) [ENRING CMG2 STO 0 FPTR(1) CM^L STO 2 BPTR(1) CNF= STO 1 FPTR(2) CNYW SMO 0 CPDG STO 1 BPTR CPY6 ) CQCQ #STR NULL,%B CQXB #SKI CRC2 STOZ BPTR(1) [SET ELEMENT NULL CRWL LDX 2 1 CSB= SBX 1 GEN0 CSTW NGS 1 BSTART(2) CT*G LDX 1 FX1 CTT6 LDX 2 FX2 CW#Q #NOR CWJJ ...[??? RERING SECT CENT FGN 32 DOC CWSB # CX#2 # RERINGS AN ELEMENT CXRL # CY?= #MAC RERING CYQW CHAIN %A,%B [DEFINED AS CHAIN C^=G #NOR C^G# ...[??? ENRING SECT CENT FGN 32 DOC C^Q6 # D29Q # ENRINGS AN ELEMENT ON TO AN EXISTING RING(WHICH MAY BE EMPTY) AT D2PB # A SPECIFID POINT D392 #MAC ENRING D3NL #STR %A,1 D48= LDX 1 %A D4MW #STR %B,2 D57G LDX 2 %B D5M6 CALL 0 (ENRING) D66Q #NOR D6BJ ...[??? DERING SECT CENT FGN 32 DOC D6LB # D762 # DERINGS A SPECIFIED ELEMENT RENDERING IT NULL D7KL # D85= #MAC DERING D8JW #STR %A,1 D94G LDX 1 %A D9J6 CALL 0 (GDERING) D=3Q #NOR D=?J ...[??? SETNCORE SECT CENT FGN 32 DOC D=HB # D?32 # A UTILITY MACRO WHICH GETS A BLOCK OF CORE LOCATES IT AND NAMES IT D?GL # D#2= #MAC SETNCORE D#FW GETCOREN %A,1,%E,%F,%G D#^G FINDCORE %B D*F6 NAME %B,%C,%D D*YQ #NOR DB8J ...[??? SETUPCOR SECT CENT FGN 32 DOC DBDB # DBY2 # X VERSION OF SETNCORE(%A X PARAMETER BUT %F N IN BOTH CASES DCCL # DCX= #MAC SETUPCORE DDBW GETCORE %A,1,%E,%F,%G DDWG FINDCORE %B DFB6 NAME %B,%C,%D DFTQ #NOR DG5J ...[??? SETXCORE SECT CENT FGN 32 DOC DG*B # DGT2 # VERSION OF SETNCORE WITH BOTH %A AND %F X PARAMETERS DH#L # DHS= #MAC SETXCORE DJ?W GETCOREX %A,1,%E,%F,%G DJRG FINDCORE %B DK?6 NAME %B,%C,%D DKQQ #NOR DL2J ...[??? ENRINGD SECT CENT FGN 32 DOC DL=B # DLQ2 #MAC ENRINGD DM9L LDN 1 %A DMP= LDN 2 %B DN8W CALL 0 (ENRING) DNNG #NOR DNY# ...[??? DERINGD SECT CENT FGN 32 DOC DP86 # DPMQ #MAC DERINGD DQ7B LDN 1 %A DQM2 CALL 0 (GDERING) DR6L #NOR DRBD ...[??? EMPTY SECT CENT FGN 32 DOC DRL= # DS5W # THIS MACRO MAKES AN ELEMENT EMPTY DSKG # DT56 #MAC EMPTY DTJQ LDN 0 %A DW4B STO 0 FPTR+%A DWJ2 STO 0 BPTR+%A DX3L #NOR DX?D ...[??? RINGTWO SECT CENT FGN 32 DOC DXH= # DY2W # THIS MACRO RINGS TOGETHER TWO NULL ELEMENTS DYGG # D^26 #MAC RINGTWO D^FQ LDN 0 %A D^^B STO 0 FPTR+%B F2F2 STO 0 BPTR+%B F2YL LDN 0 %B F3D= STO 0 FPTR+%A F3XW STO 0 BPTR+%A F4CG #NOR F4CT ...[??? RING2CHK TO REPLACE RINGTWO F4D8 ...#MAC RING2CHK F4DH ... LDN 0 %A F4DW ... BXE 0 BPTR+%A,M1RING2CHK F4F9 ... LDX 0 BPTR+%A F4FJ ... BNZ 0 M3RING2CHK F4FX ...M1RING2CHK F4G= ... LDN 0 %B F4GK ... BXE 0 BPTR+%B,M2RING2CHK F4GY ... LDX 0 BPTR+%B F4H? ... BZE 0 M2RING2CHK F4HL ...M3RING2CHK F4H^ ... GEOERR 1,RINGED!! F4J# ...M2RING2CHK F4JM ... LDN 0 %A F4K2 ... STO 0 FPTR+%B F4K* ... STO 0 BPTR+%B F4KN ... LDN 0 %B F4L3 ... STO 0 FPTR+%A F4LB ... STO 0 BPTR+%A F4LP ...#NOR F4M# ...[??? RINGACT SECT CENT FGN 32 DOC F4X6 # F5BQ # THIS MACRO CHAINS THE ACTIVITY BLOCK SPECIFIED IN %A IN FRONT F5WB # OF THE ACTIVITY BLOCK SPECIFIED IN %B. THE ACTIVITY RING IS UPDATED F6B2 # F6TL #MAC RINGACT F7*= STO %A GEN5 F7SW STO %B GEN6 F8#G MOD LDN 1 ACTRING,%A F8S6 MOD LDX 2 ACTRING+1,%B F9?Q RERING 1,2 F9RB SMO GEN6 F=?2 LDX 2 BPTR F=QL CHAIN GEN5,2 F?== #NOR F?G4 ...[??? REDUCELL SECT CENT FGN 32 DOC F?PW # F#9G # THIS MACRO PERIODICALLY MONITORS THE DENSITY OF LONGLOCK BLOCKS IN THE F#P6 # LONGLOCK AREA, AND TAKES STEPS TO INCREASE IT IF IT FALLS TOO LOW. F*8Q # PRIVATE TO CHARGESC CHAPTER F*NB # FB82 #MAC REDUCELL [ REDUCELL FBML SBS %A BLLCLOCK FC7= LDX 0 BLLCLOCK FCLW BPZ 0 MRED1 FD6G LDX 0 GLLSEMA [ DO NOT SHIFT CTOP DURING FDL6 BNZ 0 MRED1 [ A LONGLOCK GETCORE FF5Q LDN 0 BLLINT FFKB STO 0 BLLCLOCK [ RESTORE COUNT FG52 LDX 0 GFIXCHAP [ 'THRESHOLD' TEST FGJL SBN 0 17 [ INCLUDES EMS CASE WHERE FH4= TXL 0 CTOP [ GFIXCHAP=-2 FHHW BCS MRED1 [ CTOP =-1 FJ3G ACROSS COREALLG,1 [ TO RETURN, MUST HAVE A SEGENTRY CALL FJH6 MRED1 [ SEGENTRY K13CHARGESC,MRED1 FK2Q #NOR FK=J ...[??? COREQUST SECT CENT FGN 32 DOC FKGB # FL22 # RE-ENTRY TO FIXED-CORE CORE ALLOCATION ROUTINES. FLFL # PRIVATE TO CORE ALLOCATION CHAPTERS. FL^= # FMDW #MAC COREQUST FMYG BRN (COREQUST%A) FND6 #NOR FNMY ...[??? STRATEGY SECT CENT FGN 32 DOC FPX2 [ THIS MACRO GETS A PROGRAM PLACEMENT STRATEGY FQBL #MAC STRATEGY FQHS ...#SKI G3 FQP2 ...( FQW= LDX 2 FX2 FQYT ...#UNS ISTDP FR3D ...( FR63 ... LDX 0 COBJUNUSE [STORE TOTAL FREE PROGRAM CORE FOR FR8L ... STO 0 ACOMMUNE9(2) [ CORESHED TO STORE FOR UNJAMMER FR?9 ...) FR*W LDX 0 %A FRN= ... STO 0 ACOMMUNE4(2) FS*6 LDX 0 %B FT76 ... STO 0 ACOMMUNE3(2) FT=Q ...#UNS CA1D FTBB ... ADX 0 CA1D FTG2 ...#UNS CA1D FTKL ...#SKI FTP* ... ADN 0 A1D FTS2 ANDX 0 BITS22LS FW?L SBX 0 CFREE FWR= SBX 0 ACHAP FX=W ADX 0 CHAPQUOTA FXQG SBX 0 FREZFREE [ ADD AMOUNT THAT MAY BE NEEDED TO FY=6 SBX 0 FREZCHAP [ RECEIVE SWAPPED-OUT BLOCKS FROM FYPQ ADX 0 FREZTOT [ THE AREAS ALREADY FROZEN FYWY ...#UNS ISTDP F^46 ... SBX 0 COBJUNUSE [CAN USE FREE PROGRAM BLOCKS AS WELL F^9B SMO FX2 F^P2 STO 0 ACOMMUNE1 G28L BPZ 0 MSTR2 [J IF NOT ENOUGH SPARE CORE G2N= ...MSTR1 DOWN STRATEGY,1 G37W BRN MSTR4 [SUCCESS G3MG BRN %E [CORE FRAGMENTED BY REALTIME PROG(S) G476 BRN %C [ NOT ENOUGH CORE BUT TRY SWAP OUT G4LQ MSTR2 LDX 1 FX1 G56B LDX 2 FX2 G5L2 SBX 0 COBJUSE G65L ADX 0 COBJUSRT [IF NOT ENOUGH CORE EVEN IF ALL NON- G6=# ... BPZ 0 MSTR3 [ REALTIME PROGX SWAPPED,TAKE %D EXIT G6C2 ...[ IF REALTIME PROG.,THEN AS THERE ARE PROGRAMS TO SWAP OUT WE STILL G6HN ...[ GO DOWN TO STRATEGY FOR IT TO DECIDE WHICH PROG. TO SWAP OUT G6NB ... LDXC 0 ACOMMUNE3(2) G6T4 ... BCS MSTR1 G6^Q ... BRN %C G76D ...MSTR3 LDN 0 0 G7?6 ... ADSC 0 ACOMMUNE3(2) G7CS ... BRN %D G7JG MSTR4 G8HQ ...) GBC= #SKIP G4 GBWW ( GYKT ...#ACC %A GYL8 ... ACCSTO %A,ACOMMUNE2,FX2 [JOBNO. GYLH ...#ACC %B GYLW ... ACCSTO %B,ACOMMUNE3,FX2 [CORE REQUIRED B2-23: B0= REALTIME GYM9 ...#ACC %A GYMJ ...#SKI GYMX ...( GYN= ... LDX 0 %A GYNK ... ACCSTO 0,ACOMMUNE2,FX2 [JOBNO. GYNY ...) GYP? ...#ACC %B GYPL ...#SKI GYP^ ...( GYQ# ... LDX 0 %B GYQM ... ACCSTO 0,ACOMMUNE3,FX2 [SIZE!! GYR2 ...) GYR* ... DOWN SWAPIN,1 [GO TO IT! GYRN ...[ GYS3 ... BRN MSTRTED [SUCCESS GYSB ... BRN %C [NO STRATEGY WITHOUT SWAPOUT GYT4 ... BRN %D [NO STRATEGY EVEN IF ALL NON R/T S/O GYTC ...MSTRTED GYTJ ...) GYTQ ...#NOR GYTT ...[??? STARTSTR SECT CENT FGN 32 DOC GYTW ...#SKI G3 GYTX ...( GYTY ...# GYT^ ...[ THIS MACRO IMPLEMENTS A STRATEGY GIVEN BY'STRATEGY' MACRO GYW2 ...#MAC STARTSTRAT GYW3 ...# GYW4 ... DOWN COREALLF,2 GYW5 ... BRN MSTA1 GYW6 ... BRN %A [NO CORE GYW7 ... BRN %B [OBDURATE LOCKED BLOCK GYW8 ... BRN %C [ABORT GYW9 ...MSTA1 GYW= ...#NOR GYW? ...) GYW# ...#SKIP G4 GYW* ...( GYWS ...#MAC STARTSTRAT GYWT ... LDX 1 FX1 GYWW ... LDX 2 FX2 [RESET X1/X2 GYWX ...[ GYWY ... BBS 21,ACOMMUNE2(2),%B [STRATEGY FUSTRASTED - LOCKED BLK GYW^ ... BBS 22,ACOMMUNE2(2),%C [STRATEGY ABORTED GYX2 ... BBS 23,ACOMMUNE2(2),%A [STRATEGY IMPSSIBLE - INSUFFIENT GYX3 ...#NOR [ CORE GYX4 ...) GYX6 ...[??? COREFREE SECT CENT FGN 32 DOC HG5B ...[ THE NEXT TWO MACROS ARE PRIVATE TO THE CORE ALLOCATION SYSTEM & HG5Q ...[ MAY ONLY BE CALLED IN COREALLF SEGMENT HG66 ...[ HG6G ...#MAC COREFREEZE HG6W ...#STR 6,%A HG7= ... LDX 6 %A [START OF FREEZE HG7L ...#STR 7,%B HG82 ... LDX 7 %B [LENGTH OF FREEZE HG8B ... CALL 0 RCORFREZ HG8Q ... BRN %C [FAILURE EXIT HG96 ...#STR %D HG9G ... LDN 0 %D [ABORT S/R NO. HG9W ...#STR %D HG== ...#SKI HG=L ... LDN 0 0 HG?2 ... +%E [ACTION ON LL BLOCKS HG?B ... +%F [TIME OUT INTERVAL HG?Q ...#NOR HG#C ...[??? COREFREX SECT CENT FGN 32 DOC HG#G ...[ HG#H ...#MAC COREFREX HG#W ...#STR 6,%A HG*= ... LDX 6 %A [START OF FREEZE HG*L ...#STR 7,%B HGB2 ... LDX 7 %B [LENGTH OF FREEZE HGBB ... CALL 0 RCORFREZ HGBQ ... BRN %C [FAILURE EXIT HGC6 ...#STR %D HGCG ... LDX 0 %D [LOAD ABORT S/R NO FROM %D HGCW ...#STR %D HGD= ...#SKI HGDL ... LDN 0 0 HGF2 ... +%E [ACTION ON LL BLOCKS HGFB ... +%F [TIME OUT INTERVAL HGFQ ...#NOR HGGW ...[??? EXTRACOR SECT CENT FGN 32 DOC HGHG #SKI G3 HH36 ( HHGQ # HJ2B #MAC EXTRACOR [EXTENDS AN O/P WITHOUT SWAPOUT HJG2 [%A=ADDR OF WORD CONTG NEW REQU;J TO %B IF SUCCESSFUL HJ^L LDX 2 FX2 HKF= BRN MEXT2 HKYW MEXT1 SMO JOBRING+FPTR(2) [S/R TO J TO MEXT3 IF O/P NOT SWPD IN HLDG LDX 0 JMISC-AJBRING HLY6 SLL 0 9 [B9 OR B10 OF JMISC SET IF O/P IN COR HMCQ SLA 0 1 [V CLEAR => EITHER BOTH 1(IMPOSSIBLE) HMXB BVC MEXT3 [OR BOTH 0 => O/P NOT SWAPPED IN HNC2 EXIT 1 0 HNWL MEXT2 CALL 1 MEXT1 HPB= LDX 0 %A HPTW STO 0 ACOMMUNE1(2) HQ*G DOWN COREALLF,3 [TRY TO EXTEND PROGRAM BLOCK HQT6 CALL 1 MEXT1 HR#Q BRN %B [SUCCESS EXIT HRSB MEXT3 SLL 0 1 HS#2 BNG 0 MEXT4 [J IF PROGRAM ALREADY SWAPPED OUT HSRL SWAPOUT [COME UP TO HERE FROM COREALLF FAIL HT?= MEXT4 LDX 1 FX1 HTQW #NOR HTY4 ...) HW5= ...[??? GETPROGC SECT CENT FGN 32 DOC HW=G # HW=N ...#SKI G4 HW=Q ...( HW=S ...#MAC GETPROGCORE HW=W ...[ HW=Y ...[ MACRO TO OBTAIN ONE OR MORE PAGES OF CORE TO HOLD AN OBJECT HW?2 ...[ PROGRAM OR ITS PAGE TABLES. HW?4 ...[ HW?6 ... ACCSTO %A,ACOMMUNE1,FX2 [STORE SIZE OF REQUEST IN ACOMMUNE1 HW?8 ... LDX 2 FX2 HW?= ...[ ENOUGH PAGES AVAILABLE HW?# ...[ I.E. REQUEST 299-299 HWB8 ...( HWB= ... TRACE ACOMMUNE1(2),FREZAC1 HWB# ... TRACE ACOMMUNE2(2),FREZAC2 HWBB ...) HWBD ... LDX 0 ACOMMUNE2(2) HWBG ... SLL 0 12 HWBJ ... BZE 0 %E [J TO %E IF FREEZE SUCCESSFUL HWBL ... SLL 0 11 HWBN ... BPZ 0 %F [J TO %F IF SHORTFALL NOT REPORTED HWBQ ...#STR %D HWBS ... BRN %F [J IF OPTIONAL REQUEST HWBW ...#STR %D HWBY ...#SKI HWC2 ...( HWC4 ... LDCT 0 #400 HWC6 ... ORS 0 ACOMMUNE1(2) [SET B0 TO INDICATE WE'VE COME FROM HWC8 ... BRN MFREZ1 [COREFREEZE CODE HWC= ...) HWC# ...MOPT NGS 0 ACOMMUNE1(2) [STORE SHORTFALL HWCB ...#SKI K6COREALLF>499-499 HWCD ... TRACE ACOMMUNE1(2),MOPTAC1 HWCG ...#STR %D HWCJ ...( HWCL ... LDX 1 FX1 HWCN ... BRN %D [J TO %D IF OPTIONAL REQUEST HWCQ ...) HWCS ...MFREZ1 HWCW ... LDCT 0 #020 HWCY ... ORS 0 CLONG1(2) [SET B4 TO INDICATE FAILED REQUEST HWD2 ... LDN 0 1 HWD4 ... ADS 0 COBJFAIL HWD6 ... LDX 0 %A [LOAD NO. OF PAGES REQUESTED AND ADD HWD8 ... ADS 0 AOBJFAIL [TO SUM OF FAILED PROGRAM REQUESTS HWD= ... SLL 0 12 HWD# ... ORS 0 ACOMMUNE2(2) [NOW STORE REQUEST IN B0-11 HWDB ...MFREZ HWDD ... LDN 0 1 [INCREASE NO. OF HWDG ... ADS 0 COBJWAIT [OUTSTANDING PROGRAM CORE REQUESTS HWDJ ... ADS 0 CFPCFREZ [AND FREE PAGE CHAIN FROZEN IND. HWDL ... COOR3 #105 [WAIT FOR PAGES HWDN ... LDN 0 1 HWDQ ... SBS 0 CFPCFREZ [REDUCE IND. HWDS ... CALL 0 (COREKICK) [WAKE ACTS WAITING FOR CORE IF POSS. HWDW ...#SKI K6COREALLF>499-499 HWDY ... TRACE CLONG1(2),MFREZCL1 HWF2 ... LDX 0 CLONG1(2) HWF4 ... SLL 0 4 HWF6 ... BPZ 0 %C [J TO %C IF NOT FAILED REQUEST HWF8 ... LDCT 0 #020 HWF= ... ERS 0 CLONG1(2) [UNSET B4 HWF# ... LDX 0 ACOMMUNE2(2) [LOAD REQUEST HWFB ... SRL 0 12 HWFD ... SBS 0 AOBJFAIL HWFG ... LDN 0 #7777 HWFJ ... ANDS 0 ACOMMUNE2(2) [ZEROISE B0-11 HWFL ... LDN 0 1 HWFN ... SBS 0 COBJFAIL HWFQ ... LDX 0 ACOMMUNE1(2) HWFS ...#SKI K6COREALLF>499-499 HWFW ...( HWFY ... TRACE ACOMMUNE1(2),MFREZAC1 HWG2 ... TRACE ACOMMUNE2(2),MFREZAC2 HWG4 ...) HWG6 ... BPZ 0 %C [J TO %C IF NOT FROM COREFREEZE HWG8 ... LDCT 0 #400 HWG= ... ERS 0 ACOMMUNE1(2) [UNSET B0 HWG# ... BRN %F HWGB ...MEND HWGD ...#NOR HWGG ...) HWGH ...[??? COBJUSE SECT CENT FGN 32 DOC HWGL ...#MAC COBJUSE HWGM ...[ HWGN ...[ MACRO TO CALCULATE CORE IN USE FOR PROGRAMS. HWGQ ...[ %A - ACCUMULATOR IN WHICH TO STORE RESULT. HWGS ...[ - IF ABSENT X0 IS USED HWGW ...[ HWGY ...#STR %A HWH2 ...#SKI HWH4 ... COBJUSE 0 [USE X0 HWH6 ...#STR %A HWH8 ...( HWH= ...#SKI G3 HWH# ... LDX %A COBJUSE HWHB ...#SKI G4 HWHD ...( HWHG ... LDX %A AOBJFREE HWHH ...#UNS ISTDP HWHJ ... BZE %A MCOBJ HWHK ... SBX %A COBJFREE HWHL ... SBX %A CPAGETURNS HWHN ... ADX %A APTURNPAGS HWHQ ... SLL %A 10 [CONVERT TO WORDS(I.E. * BY 1024) HWHR ...MCOBJ HWHS ...) HWHW ...) HWHY ...#NOR HWJ2 ...[??? COBJUSRT SECT CENT FGN 32 DOC HWJ5 ...#MAC COBJUSRT HWJ6 ...[ HWJ8 ...[ MACRO TO CALCULATE CORE IN USE FOR REALTIME PROGRAMS. HWJ= ...[ %A - ACCUMULATOR IN WHICH TO STORE RESULT. HWJ# ...[ - IF ABSENT X0 IS USED HWJB ...[ HWJD ...#STR %A HWJG ...#SKI HWJJ ... COBJUSRT 0 [USE X0 HWJL ...#STR %A HWJN ...( HWJQ ...#SKI G3 HWJS ... LDX %A COBJUSRT HWJW ...#SKI G4 HWJY ...( HWK2 ... LDX %A CRTPAGES HWK4 ... ADX %A CPAGTAB HWK6 ... ADX %A APTURNPAGS HWK8 ... SLL %A 10 [CONVERT TO WORDS(I.E. * BY 1024) HWK= ...) HWK# ...) HWKB ...#NOR HX52 ...[??? COBJUNUS SECT CENT FGN 32 DOC HXJL ...#UNS ISTDP HY4= ...( HYHW ...#MAC COBJUNUSE H^3G ...[ H^H6 ...[ MACRO TO CALCULATE TOTAL FREE PROGRAM CORE/PAGES J22Q ...[ %A - ACCUMULATOR IN WHICH TO STORE RESULT J2GB ...[ - IF ABSENT X0 IS USED J322 ...#STR %A J3FL ...#SKI J3^= ... COBJUNUSE 0 [USE X0 J4DW ...#STR %A J4YG ...( J5D6 ...#SKI G3 J5XQ ... LDX %A COBJUNUSE J6CB ...#SKI G4 J6X2 ...( J7BL ... LDX %A COBJFREE J7W= ... ADX %A CPAGETURNS J8*W ... SBX %A APTURNPAGS J8TG ... BPZ %A MCOB J9*6 ... LDN %A 0 J9SQ ...MCOB J=#B ... SLL %A 10 [CONVERT TO WORDS(I.E. * BY 1024) J=S2 ...) J??L ...) J?R= ...#NOR J#=W ...) J#QG ...[??? FREEPROG SECT CENT FGN 33 DOC J*=6 ...#SKI G3 J*PQ ...( JB9B ...#UNS ISTDP JBP2 ...( JC8L ...#MAC FREEPROG JCJ* ...[ JCY4 ...[ MACRO TO RELEASE A PROGRAM BLOCK AND PUT IT ON THE FREE PROGRAM JD?R ...[ BLOCK CHAIN JDMG ...[ %A - PTR.TO OBJECT PROGRAM BLOCK JF39 ...[ %B - PTR.TO JOB BLOCK FOR PROGRAM JFBY ...#STR %A,1 JFQM ... LDX 1 %A [PTR TO PROGRAM BLOCK JG6B ...#STR %B,2 JGG5 ... LDX 2 %B [PTR TO PROGRAMS JOB BLOCK JGTS ... LDX 0 ALOGL(1) JH9H ... SBS 0 COBJUSE JHK= ... ADS 0 COBJUNUSE JHY^ ...#UNS FSHTEST JJ#N ...#SKI JJNC ...( JK46 ... BS 2,JBWASIN JKCT ... LDX 0 JOBNM(2) JKRJ ... STO 0 JOBNOWAS(1) [STO JOB NO. IN FPB JL7? ...) JLH2 ...#UNS FSHTEST JLWP ...( JM=D ... ADS 0 CINVFPB JML7 ... STOZ JOBNOWAS(1) JM^W ...) JN*K ... BS 1,AFFPB [SET FPB MARKER IN AFLAG JNP# ... LDN 2 BOBJUNUSE [BASE OF FPB CHAIN JP53 ...MNEXT LDX 0 2 JPDQ ... LDX 2 FPTR(2) [LOAD FIRST/NEXT BLOCK ON CHAIN JPSF ... BXE 2 CXOBJUN,MCHAIN [J IF END OF CHAIN JQ88 ... BXL 2 1,MNEXT JQHX ...[ CHAIN IN ADDR. ORDER ON FPB CHAIN JQXL ...MCHAIN JR?* ... LDX 2 0 JRM4 ... CHAIN 1,2 JS2R ... COREWAKE [WAKE ANY WAITERS FOR CORE JSBG ...#NOR JSW6 ...) JT*Q ...) JTTB ...[??? TRYCORE SECT CENT FGN 32 DOC JW*2 ...#SKI G3 JWSL ...( JX#= ...#UNS ISTDP JXRW ...( JY?G ...#MAC TRYCORE JYR6 ...[ J^=Q ...[ MACRO TO SEE IF A VALID FPB EXISTS FOR THE CURRENT ACTS. PROG. J^QB ...[ %A - LABEL TO BRANCH TO IF FPB DOESN'T EXIST K2=2 ...[ %B - TO CONTAIN ON EXIST ADDR. OF AREA SPECIFIED IN %C K2PL ...[ %C - ADDR. WITHIN OBJ. PROG. OF REQUIRED AREA K39= ...[ K3NW ... LDX 0 JOBNO(2) [LOAD JOB NO. FOR COMPARISION K48G ... LDN 2 BOBJUNUSE [BASE OF FPB CHAIN K4N6 ...MEXTFPB K57Q ... LDX 2 FPTR(2) [LOAD NEXT FPB K5MB ... BXU 2 CXOBJUN,MFPB [J IF NOT END OF CHAIN K672 ... LDX 2 FX2 K6LL ... LDX 1 FX1 K76= ... BRN %A [EXIT AS NO FPB FOUND K7KW ...MFPB K85G ... BXU 0 JOBNOWAS(2),MEXTFPB [J IF NOT CORRECT FPB K8K6 ... ADX 2 %C [ADD IN REQUIRED ADDR. K8N= ...#UNS CA1D K8RB ... ADX 2 CA1D K8WG ...#UNS CA1D K8^L ...#SKI K94Q ... ADN 2 A1D K9JB ...#STR %B,2 K=42 ...( K=HL ... STO 2 %B [STORE REQUIRED GEORGE ADDR. K?3= ... LDX 2 FX2 K?GW ...) K#2G ...#STR %B,1 K#G6 ... LDX 1 FX1 K#^Q ...#NOR K*FB ...) K*^2 ...) KBDL ...[??? MOBJQUOT SECT CENT FGN 32 DOC KBY= ...#UNS ECS KCCW ...( KCXG ...#MAC MOBJQUOTA KDC6 ...[ KDWQ ...[ MACRO TO OBTAIN EITHER OBJECTQUOTA MIN OR MAX KFBB ...[ %A - EITHER MIN OR MAX DEPENDING WHICH IS REQ'D KFW2 ...[ %B - ACC. IN WHICH TO STORE RESULT.IF ABSENT,X0 IS USED KG*L ...[ KGT= ...#STR MIN,%A KH#W ...#SKI KHSG ...( KJ#6 ...#STR %B KJRQ ...#SKI KK?B ... LDX 0 COBJQUOTA KKR2 ...#STR %B KL=L ... LDX %B COBJQUOTA KLQ= ...) KM9W ...#STR MIN,%A KMPG ...( KN96 ...#STR MAX,%A KNNQ ...! FIRST PARAMETER SHOULD BE EITHER MAX OR MIN KP8B ...#STR MAX,%A KPN2 ...#SKI KQ7L ...( KQM= ...#STR %B KR6W ...#SKI KRLG ... LDX 0 COBJQUOTA KS66 ...#STR %B KSKQ ... LDX %B COBJQUOTA KT5B ...) KTK2 ...) KW4L ...#NOR KWJ= ...) KX3W ...[??? SHORTFAL SECT CENT FGN 32 DOC KXHG ...#UNS ECS KY36 ...( KYGQ ...#MAC SHORTFALL K^2B ...[ K^G2 ...[ MACRO TO CALCULATE SHORTFALL WHEN A PROGRAM FAILS TO GET IN K^^L ...[ %A - ACC. IN WHICH TO STORE RESULT.IF ABSENT,X0 IS USED L2F= ...[ ASSUMES ACOMMUNE3 OF FX2 CONTAINS REQUEST SIZE L2P4 ...[ GEN0 WILL BE OVERWRITTEN L2YW ...[ L3DG ...#STR %A L3Y6 ...#SKI L4CQ ... SHORTFALL 0 L4XB ...#STR %A L5C2 ...( L5FK ... LDX %A ACHAP L5J8 ... SBX %A CHAPQUOTA L5LR ... BPZ %A MSHORT L5PB ... LDN %A 0 L5R^ ...MSHORT STO %A GEN0 L5WL ... COBJUNUSE %A L6B= ... ADX %A CFREE L6TW ... ADX %A GEN0 L7T6 ... SBX %A FREZTOT L8#Q ... ADX %A FREZFREE L8SB ... ADX %A FREZCHAP L9#2 ... NGX %A %A L9RL ... SMO FX2 L=?= ... ADX %A ACOMMUNE3 L=QW ...) L?=G ...#NOR L?Q6 ...) L#9Q ...[??? KEEPCHAP SECT CENT FGN 53 DOC L#PB ...#MAC KEEPCHAP L*92 ...[ MACRO USED TO KEEP CHAPTERS IN CORE.IT SETS UP A TABLE OF COUNTS IN L*NL ...[ FIXED CORE AND A TABLE OF CHAPTERS PER PERIPHERAL IN SEGMENT KEEPCHAP LB8= ...[ THE CHAPTER CHANGER IS ALSO MENDED. LBMW ...[ IDENTIFIERS USED ARE AS FOLLOWS LC7G ...[ JKCTABNO - MAX NO. OF TIMES KEEPCHAP MAY BE ISSUED LCM6 ...[ JKCTABLEN - MAX LENGTH OF EACH TABLE (I.E. MAX NO OF CHAPTERS + 2) LD6Q ...[ JKCTABPOS - POSITION OF CURREN TABLE LDLB ...[ JKCCHAPPOS - POSITION OF CURRENT CHAPTER IN THE TABLE LF62 ...[ JKCTABSTRT - START OF THE TABLE IN KEEPCHAP LFKL ...#OPT JKCTABPOS=0 [TABLE POSITION LG5= ...#SKI JKCTABNO*JKCTABLEN-JKCTABPOS<1$1 LGJW ...! KEEPCHAP ISSUED TOO MANY TIMES LH4G ...#SKI JKCTABNO*JKCTABLEN-JKCTABPOS LHJ6 ...( LJ3Q ...[ FIRST MEND THE CHAPTER CHANGER LJHB ...#SKI JKCTABPOS<1$1 [ONLY DO IT ONCE LK32 ...( LKGL ...#MEN CHCH LL2= ...#TRA CHKP LLFW ... BRN FCJKC [BRANCH TO FCMEND AREA LL^G ...FCRETURN LMF6 ...#END LMYQ ... FCMEND LN?7 ... FIXTRA FCJKC LNKJ ... BZE 0 XKC [J IF CHAPTER TO BE KEPT LNY2 ... ADS 3 ACTCHCH(2) LPCL ... BRN FCRETURN LPX= ...XKC SBN 1 A1 LQBW ... BS 1,AFKPCP LQWG ... SBS 3 CHCHCOUNT [SINCE WE PREVIOUSLY ADDED IT IN LRB6 ... SUNDUMP LRTQ ... ACROSS KEEPCHAP,3 LS*B ... FCEND LST2 ...[ NOW THE TABLE IN KEEPCHAP LT#L ... CHAPMOVE ON LTS= ...[ MEND PUTPER AND RELPER SO THAT THEY GO DOWN TO KEEPCHAP LW?W ...#MEN PUTPER LWRG ...#TRA JKCPUTPER LX?6 ... NULL LXQQ ...#END LY=B ...#MEN RELPER LYQ2 ...#TRA JKCRELPER L^9L ... NULL L^P= ...#END M28W ...) M2NG ...[ TABLE OF COUNTS M386 ... FCMEND M3MQ ... FIXTRA 20? M47B ... +0 M4M2 ... FCEND M56L ...[ SET UP THE TABLE IN KEEPCHAP USING THE AUXILLARY MACRO KEEPCHP1 M5L= ...#MEN KEEPCHAP M65W ...#TRA JKCTABSTRT+JKCTABPOS M6KG ... +%A M756 ... +20? M7JQ ...#END M84B ...#ALT JKCCHAPPOS=0 M8J2 ... KEEPCHP1 %B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P M9H= ... M=2W ...#ALT JKCTABPOS=JKCTABPOS+JKCTABLEN M=GG ...) M?26 ...#NOR M?FQ ...[??? KEEPCHP1 SECT CENT FGN 53 DOC M?^B ...#MAC KEEPCHP1 M#F2 ...#STR %A M#YL ...( M*D= ...#SKI JKCTABLEN-2-JKCCHAPPOS<1$1 M*XW ...! TOO MANY PARAMATERS TO KEEPCHAP MBCG ...#SKI JKCTABLEN-2-JKCCHAPPOS MBX6 ...( MCBQ ...#UNS D%A MCWB ...#SKI MDB2 ...! %A IS AN INVALID CHAPTER NAME MDTL ...#UNS D%A MF*= ...( MFSW ...#MEN KEEPCHAP MG#G ...#TRA JKCTABSTRT+JKCTABPOS+2+JKCCHAPPOS MGS6 ...#HAL K%A,0 MH?Q ...#END MHRB ...#ALT JKCCHAPPOS=JKCCHAPPOS+1 MJ?2 ...) MJQL ... KEEPCHP1 %B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P MKPW ... ML9G ...) MLP6 ...) MM8Q ...#NOR MMNB ...[??? NEWPERI SECT CENT FGN 53 DOC MN82 ...#MAC NEWPERI MNML ...[ USED IN KEEPCHAP SYSTEM WHEN A PERIPHERAL IS ONLINED MP7= ... BRN MNEWPERI MPLW ... SMO FX2 MQ6G ... STO %A ACOMMUNE1 MQL6 ... DOWN KEEPCHAP,1 MR5Q ...MNEWPERI MRKB ...#NOR MS52 ...[??? RELPERI SECT CENT FGN 53 DOC MSJL ...#MAC RELPERI MT4= ...[ USED IN KEEPCHAP SYSTEM WHEN A PERIPHERAL IS RELEASED MTHW ... BRN MRELPERI MW3G ... SMO FX2 MWH6 ... STO %A ACOMMUNE1 MX2Q ... DOWN KEEPCHAP,2 MXGB ...MRELPERI MY22 ...#NOR ^^^^ ...02117573006700000000