CASCODE
(George Source)
Macros used: APSETTAB, BXE, BXGE, BXL, BXU, CHANBASE, FIXTRA, JBC, LABFIX, TRACEIF, TRANSFIX
- CASCODE.txt
22FL #SEG CASCODE 22LS ...#OPT K0CASCODE=0 22S2 ...#LIS K0CASCODE 22^= # 23DW # 23YG # THIS SEGMENT CONTAINS DATA THAT IS USED BY FIXED CORE ROUTINES 24D6 # ONLY.THE ADDRESSES OF DATA MAY CHANGE WHEN FIXED IS RECOMPILED 24XQ # SO NO REFERENCE SHOULD BE MADE TO THESE ITEMS BY NON-FIXED CORE 25CB # OVERLAY CHAPTERS 25X2 # 26BL # THIS IS A FIXED CORE SEGMENT.IT CONTAINS FIXED CORE 26W= # WORDS AND CODE FOR THE ALTERNATIVE CORE ALLOCATION SYSTEM 27*W # (STRUCTURED FREE CORE). 27TG # THE CODE CONSISTS OF ROUTINES ENTERED FROM SEGMENT COREALL 28*6 # WHICH WOULD OTHERWISE BE TOO LONG. 28SQ # 29#B FIXTRA K1CASCODE 29S2 # 2=?L #UNS ISFCON 2=R= ( 2?=W ...# THE FOLLOWING WORDS UP TO AND INCLUDING CASTAB ARE 2?QG ...# REQUIRED IN THIS ORDER BY SEGMENT PERFCAS 2#=6 CASFOUND 2#PQ #REP 16 2*9B +0 2*P2 CASSPLIT 2B8L #REP 16 2BN= +0 2C7W CASCHAPS +0 2CMG CASIFPB +0 2D76 CASVFPB +0 2DLQ CASAMAL +0 2F6B CASFAIL +0 2FL2 CASK7 +0 2G5L CASMILL +0 2GK= BFRING1 CHANBASE 2H4W BFRING02 CHANBASE 2HJG BFRING03 CHANBASE 2J46 BFRING04 CHANBASE 2JHQ BFRING05 CHANBASE 2K3B BFRING06 CHANBASE 2KH2 BFRING07 CHANBASE 2L2L BFRING08 CHANBASE 2LG= BFRING09 CHANBASE 2L^W BFRING10 CHANBASE 2MFG BFRING11 CHANBASE 2M^6 BFRING12 CHANBASE 2NDQ BFRING13 CHANBASE 2NYB BFRING14 CHANBASE 2PD2 BFRING15 CHANBASE 2PXL BFRING16 CHANBASE 2QC= CASTAB 2QWW #REP 16 2RBG +0 2RW6 CASMID 2S*Q #REP 16 2STB +0 2T*2 #DEF CMIDSIZE1=CASMID 2TJS ...CASLNK +0 2TNP ...CAS1024 +1024 2TP5 ...BFTEMP CHANBASE 2TPF ...BF64 CHANBASE 2TPT ...CXFT +BFTEMP 2TQ9 ...CX64 +BF64 2TQK ...CASQUICK +128 2TQ^ ...CASQAM +0 2TR* ...CASQAME +0 2TRP ...CASPOOLGC +0 2TS5 ...CASGC +0 2TS= ...CASST1 +0 2TSC ...CASST7 +0 2TSL # 2W#= # IN THE STRUCTURED FREE CORE SYSTEM FREE BLOCKS ARE RINGED ON TO 2WRW # SIZE RINGS THROUGH THEIR SIZE RING POINTERS. THEY REMAIN ON THE 2X?G # FREE CORE CHAIN. EACH SIZE RING HOLDS A RANGE OF SIZES IN 2XR6 # ASCENDING ORDER OF SIZE. THE SIZE RANGE FOR EACH RING IS 2Y=Q # DETERMINED BY A FIXED CORE TABLE. 2YQB # 2^=2 # THIS SUBROUTINE SEARCHES THE SIZE RINGS TO FIND A BLOCK BIG 2^PL # ENOUGH TO SATISFY THE REQUEST. IT RETURNS TO THE CALLING ROUTINE 329= # IF UNSUCCESSFUL. IF SUCCESSFUL IT BRANCHES TO PROCESS THE BLOCK. 32NW # IT IS USED BY THE FREEIN MACRO, IN WHICH CASE ONLY THE APPROPRIAT 338G # SIZE RING IS SEARCHED, RETURNING THE ADDRESS OF THE BLOCK BEHIND 33N6 # WHICH THE FREED BLOCK SHOULD BE CHAINED. 347Q # 34MB # GEN4 CONTAINS THE 'REQUIRED' AMOUNT. 3572 # X7 NEG. IF ENTRY FROM FREEIN ROUTINE, LINK ADDRESS OTHERWISE. 35LL # ON EXIT,X0 X1 X2 OVERWRITTEN - FOR FREEIN X1 CONTAINS ADDRESS. 366= # 36KW # S = BLOCK SIZE, R = REQUIRED SIZE 375G # 37K6 LABFIX HZRNG 37SY ... LDX 2 GEN4 384Q SRINGBEG 38JB ... BXL 2 CAS1024,SMALL 3942 ... LDCH 2 CASTAB+15 [GET LAST RING NO 39HL ... BRN SRG 3=3= SMALL 3=GW SRL 2 4 [DIVIDE R BY 16 3?2G SBN 2 1 [ADJUST SO THAT 1 = POSITION 0, ETC. 3?G6 SRC 2 2 [X2 NOW A CHAR. POINTER 3?^Q LDCH 2 CASTAB(2) [PICK UP RING NUMBER - X2 NOW RINGNO 3#FB SRG 3#^2 SLL 2 1 [MPY BY 2 -EACH ENTRY IS 2 WORDS 3*=B ... LDX 1 BFRING1(2) 3*HQ ... BXL 1 FVARST,NEXTRING [J IF EMPTY 3*T6 ... LDX 0 ASFCSIZE(1) 3B6G ... BXGE 0 GEN4,SFCYES [GO DIRECT IF BIG ENUF 3BCW LDX 1 BFRING1+BPTR(2) 3BXG LDX 0 ASFCSIZE(1) [SIZE OF LAST BLK IN RING IS LARGEST 3CC6 SBX 0 GEN4 3CWQ BNG 0 NEXTRING [J IF NONE BIG ENOUGH 3DBB SRL 2 1 [RESTORE ORIGINAL RING NO. 3DW2 LDX 0 CMIDSIZE1(2) [FIND MIDPOINT SIZE 3F*L SLL 2 1 3FT= BXL 0 GEN4,SRCHRINGB [J IF MIDSIZE < R TO BACKWARDS SEARCH 3G#W LDX 1 BFRING1(2) 3YG2 # THIS ROUTINE SEARCHES A SIZE RING FORWARDS UNTIL BIG ENOUGH 3Y^L # BLOCK FOUND 3^F= # 3^YW SRCHRINGF 42DG LDX 0 ASFCSIZE(1) 42Y6 ... BXGE 0 GEN4,SFCYES [I IF S>R 44WL LDX 1 FPTR(1) 45B= BRN SRCHRINGF 45BW ...NEXTRING 45CG ... BZE 7 SFRADDR [J IF ENTRY FROM FREEIN ROUTINE 45D6 ... SRL 2 1 [RESTORE ORIGINAL RING NUMBER 45DQ ... ADN 2 1 [MOVE TO NEXT RING NO. 45FB ... LDCH 0 CASTAB+15 [GET LARGEST RING NO IN USE 45G2 ... BXGE 0 2,SRG [J IF STILL MORE TO TRY 45GL ... EXIT 7 0 [ELSE EXIT 45H= ...# 45HW ...# 45JG ...# RING SEARCH ROUTINES. ENTERED KNOWING BIG ENOUGH BLOCK THERE 45K6 ...# 45KQ ...# THIS ROUTINE SEARCHES A SIZE RING BACKWARDS UNTIL EITHER 45LB ...# FIRST BLK OF RING - SO 1ST BLOCK SMALLEST TO SATISFY R 45M2 ...# OR BLOCK FOUND SMALLER THAN R - SO TAKE THE NEXT ONE FORWARD 45ML ...# 45N= ...# 45NW ...SRCHRINGB 45PG ... LDX 1 BPTR(1) 45Q6 ... LDX 0 ASFCSIZE(1) 45QQ ... SBX 0 GEN4 [S - R 45RB ... BNG 0 SPTNXT [J IF R > S 45S2 ... BZE 0 SFCYES [J IF MATCH 45SL ... BRN SRCHRINGB 45T= ...# 45TW # 46*G SPTNXT 46T6 LDX 1 FPTR(1) 47#Q SFCYES 47KT ... BZE 7 NFRIN1 [J IF ENTRY FROM FREEIN ROUTINE 47W^ ... LDX 3 FPTR(1) 47^J ... LDX 0 BPTR(1) 4847 ... SMO 0 486Q ... STO 3 FPTR 489* ... STO 0 BPTR(3) [DERING BLOCK 48#2 SBN 1 ASFCFPTR [PT TO START OF SELECTED BLK 48RL SRL 2 1 [RESTORE ORIGINAL RING NUMBER 49?= TRACEIF ARNGTR,99,199,1,SFCSIZE 49QW TRACEIF ARNGTR,99,199,2,RINGNO 4==G #UNS ICASSTATS 4=Q6 ( 4?9Q LDN 7 1 4?PB ADS 7 CASFOUND(2) [ADD TO COUNT OF FOUND IN THIS RING 4#92 ) 4#NL TRANSFIX BRN,HNTST 4B7G # 4BM6 # 4C6Q # ENTRY FROM FREEIN ROUTINE IN COREALL. FOR FREEIN MACRO. 4CLB # CHAINS BLOCK POINTED TO BY X1 INTO ITS SIZE RING IN 4D62 # STRUCTURED FREE CORE SYSTEM. 4DKL # X0, X2 OVERWRITTEN. X1 REMAINS POINTING TO THE BLOCK ON EXIT. 4F5= # 4F*4 ... FIXTRA ISFCM0 4FJW LABFIX HZFRIN 4FKG ...[IF LL AREA BLK BUNG ON LAST RING TO STOP TOO EARLY USE 4FL6 ... STO 0 CASLNK 4FLQ ... BXL 1 CTOP,NOTLL [J IF NOT IN LL AREA 4FMB ... LDCH 2 CASTAB+15 [LAST RING NO 4FN2 ... STO 1 CASST1 4FNL ... STO 7 CASST7 4FP= ... LDN 7 0 4FPW ... LDX 0 GEN4 4FQG ... STO 0 ASFCSIZE+ASFCFPTR(1) 4FR6 ... LDX 0 ASIZE(1) 4FRQ ... STO 0 GEN4 4FSB ... BRN SRG 4FT2 ...NOTLL 4FTL ...[ DO QUICK CHECK FOR FAST CASE OF SMALLEST BLOCK... 4FW= ...[MUST BE ON FRONT OF FIRST SIZE RING 4FWW ... LDX 2 ASIZE(1) 4FXG ... BXU 2 CASQUICK,NFR2 [DROP THRU IF SMALLEST 4FY6 ... ADN 1 ASFCFPTR 4FYQ ... STO 2 ASFCSIZE(1) [SET SIZE WORD 4F^B ... LDN 2 BFRING1 [BASE OF RING 1 4G22 ... TRANSFIX CALL 0,ACHAIN 4G2L ... SBN 1 ASFCFPTR [BACK TO THE FRONT 4G3= ... BRN (CASLNK) [ALL DONE 4G3W ...NFR2 4G?J ... STO 1 CASST1 [STR BLOCK ADDRESS 4GH= ... STO 7 CASST7 [AND X7 4GQY ... LDN 7 0 [SET MARKER 4G^Q ... LDX 0 GEN4 4H8J ... STO 0 ASFCSIZE+ASFCFPTR(1) 4HCF ... [SAVE GEN4 TEMP IN SIZE WORD 4J32 STO 2 GEN4 [X2 & GEN4 CONTAIN 'REQUIRD' SIZE (R) 4JGL BRN SRINGBEG [FIND SIZE RING AND POSITION IN IT 4JMS ...SFRADDR 4JT2 ... LDN 1 BFRING1(2) [GET RING BASE 4K2= NFRIN1 4KFW # X1 = ADDR OF SIZE RING PTR OF NEXT BIGGEST BLK IN RING, 4K^G # OR THE RING BASE (I.E. THIS BLOCK BIGGEST IN RING) 4L39 ...#SKI K6COREALL 4L4Y ...( 4L6M ... LDX 1 BPTR(1) 4L8B ... TRANSFIX CALL 0 ,CHECKCHN 4L=5 ... LDX 2 1 [ADDRESS PREVIOUS BLK, FOR CHAINING 4L?S ...) 4L*H ...#SKI K6COREALL 4LC= ...#SKI 4LF6 LDX 2 BPTR(1) [ADDRESS PREVIOUS BLK, FOR CHAINING 4LYQ ... LDX 1 CASST1 [POINT TO OUR BLOCK 4MDB ADN 1 ASFCFPTR [POINT TO SIZE RING POINTER 4MY2 TRANSFIX CALL 0,ACHAIN [CHAIN BLK IN SIZE RING 4N7S ... LDX 7 ASFCSIZE(1) [GET OLD GEN4 4NCL LDX 0 GEN4 4NX= STO 0 ASFCSIZE(1) [DUPLICATE OF SIZE AFTER RING PTRS 4P4D ... STO 7 GEN4 4P9L ...[ RESTORE GEN4 4PBW SBN 1 ASFCFPTR [POINT TO START OF BLOCK AGAIN 4PWG ... LDX 7 CASST7 [RESTORE X7 4QB6 ... BRN (CASLNK) [EXIT 4QBD ... FIXTRA ISFCMLL 4QBQ ... LABFIX LLQK 4QC4 ... STO 0 CASLNK 4QCB ... LDCH 2 CASTAB+15 [RING FOR POSSIBLE LLBLOCKS 4QCN ... SLL 2 1 4QD2 ... LDX 1 BFRING1(2) 4QD# ...R2 BXL 1 FVARST,(CASLNK) [J IF NOTHING THERE 4QDL ... BXL 1 CTOP,R1 [ J IF NOT IN LL AREA 4QDY ... LDX 0 ASFCSIZE(1) 4QF= ... BXGE 0 GEN4,XLL [J IF BIG ENUF 4QFJ ...R1 LDX 1 FPTR(1) 4QFW ... BRN R2 4QG8 ...XLL SBS 0 CFREE [ADJUST AMOUNT OF FREE LEFT 4QGG ... TRANSFIX CALL 0,ADECH [DERING FROM STRUCTURE 4QGS ... LDX 2 FX2 4QH6 ... SBN 1 ASFCFPTR [X1->START OF BLOCK 4QHD ... TRANSFIX CALL 0,CHAN [CHAIN AFTER CUUR ACT 4QHQ ... TRANSFIX BRN ,GOTENUF 4QJ4 ...[ 4QJB ...[IF RING SEARCH FAILS,TRY QUICK AMAL HERE BY LOOK UP FREE CORE CHAIN 4QJN ...[TO SEE IF CAN AMAL ENUF ON ADJACENT BLOX.IF SO,GO TO UNIT IN COREALL 4QK2 ...[OTHERWISE EXIT.UNIT EXPECTS X2->FREE BLOCK TO START FROM 4QK# ...[ 4QKL ... LABFIX QAMALG 4QKY ... LDX 2 BFTEMP 4QL= ...QAM BXE 2 CXFT,(7) [GIVE UP 4QLJ ... LDX 3 2 [WHERE TO GO FROM NEXT 4QLW ...QAM2 4QM8 ... LDX 1 ASIZE(2) [RUNNING TOTAL 4QMG ...QAM1 ADX 2 ASIZE(2) [X2->NEXT 4QMS ... BXGE 1 GEN4,UNIT [J IF ENUF 4QN6 ... JBC NOTF,2,AFFREE [J IF NOT FREE 4QND ... ADX 1 ASIZE(2) [UPDATE RUNNING TOTAL 4QNQ ... BXU 3 BPTR(2),QAM1 [J IF THIS BLOCK NOT NEXT ON FREE CHAIN 4QP4 ... LDX 3 2 [MORE EFFICIENT TO GO ON FROM THIS NEXT TIME 4QPB ... BRN QAM1 4QPF ...UNIT 4QPJ ... LDX 0 2 4QPM ... ADX 0 ASIZE(2) 4QPQ ... SBX 2 1 [X2 -> 1ST BLOCK NOW 4QPT ... TXL 0 CTOP 4QPY ... TRANSFIX BCS,UNIT 4QQ3 ... TRANSFIX BRN,ISFCONE 4QQ# ...NOTF LDX 2 FPTR(3) [GET NEXT TO INSPECT 4QQL ... BRN QAM 4QQY ...[ 4QR= ...[ 4QRJ ...[FOR QUICK AMALG AFTER FREECORE 4QRW ...[ 4QS8 ... LABFIX QAMALG1 4QSG ... LDX 2 CNAFRA [X1->BLOCK FREED 4QSS ... LDX 3 BFTEMP+BPTR [ONLY LOOK AT 1,SO SET END CONDITION 4QT6 ... BRN QAM2 4QTQ # 4R*B ) 4RT2 [ 4S#L [ 4SS= [ ICT DATA 4T?W [ 4TRG #UNS ICTON 4W?6 ( 4WQQ [ 4X=B [ DEFINED BY OVERLAY IDENTIFIERS COS COULD CHANGE DEPENDING 4XQ2 [ ON WHETHER SFC ON OR NOT.STILL NEED UNIVERSALS FOR RES TIME MACS 4Y9L [ 4YP= #DEF GMEL0=GMEL 4^6= ...OASFDUMP +0 [WORK WORD FOR ASF 4^8W OACTLIS +OACTLIST0,+OACTLIST1,+OACTLIST2,+OACTLIST3 4^NG OGMEL1 5286 +OGMEL2,+GMEL,#20000000,#01000000,+GPDA,0 52MQ OGMEL2 537B +OGMEL3,+OGMEL1,#20000000,#02000000,+GPDA,0 53M2 OGMEL3 546L +BPROG,+OGMEL2,#20000000,#03000000,+GPDA,0 54BD ...OGAMREXEC -1,#37777777,60*64,30*64 54L= OACTLIST0 +OACTLIST0,+OACTLIST0 555W OACTLIST1 +OACTLIST1,+OACTLIST1 55KG OACTLIST2 +OACTLIST2,+OACTLIST2 5656 OACTLIST3 +OACTLIST3,+OACTLIST3 56JQ OAPTYPETAB 574B APSETTAB GENERAL 57J2 APSETTAB IPCA 583L APSETTAB AMSCAN 58H= +2 [ACTCDT 592W APSETTAB ACTDOC 59GG +1 [ACTUNJAM 5=26 +1 [AEWIND 5=FQ APSETTAB ACTLF 5=^B APSETTAB CONSA 5?F2 +1 [ASWINT 5?YL APSETTAB AMOP 5#D= APSETTAB BSA 5#XW #20000000 [APET 5*CG #20000000 [AOLPT 5*X6 +2 [CPAT 5BBQ OAPSUBTYPE 5BWB #32332333 5CB2 #REP 5 5CTL #33333333 5D*= #33333323 5DSW #33333333 5F#G #31111113 [IPCA 5FS6 #11333333 [AMSCAN 5G?Q ... #11313333 [ACTDOC 5GRB #31212333 [ACTLF 5H?2 ... #33121033 [CONSA 5HQL ... #11000333 [AMOP 5J== #03333333 5JPW #13333333 5K9G #03001023 [BSA 5KP6 #REP 5 5L8Q #33333333 5LNB #33333331 5M82 #33311330 5MML -1 5N7= [ 5NLW [ NOW ALTER UNIVERSALS 5P6G [ 5PHG ...#ALT ASFDUMP=OASFDUMP 5PL6 #ALT ACTLIS=OACTLIS 5Q5Q #ALT ACTLIST0=OACTLIST0 5QKB #ALT ACTLIST1=OACTLIST1 5R52 #ALT ACTLIST2=OACTLIST2 5RJL #ALT ACTLIST3=OACTLIST3 5S4= #ALT GMEL1=OGMEL1 5SHW #ALT GMEL2=OGMEL2 5T3G #ALT GMEL3=OGMEL3 5T?# ...#ALT GAMREXEC=OGAMREXEC 5TH6 #ALT APTYPETAB=OAPTYPETAB 5W2Q #ALT APSUBTYPE=OAPSUBTYPE 5WGB ) 5WQ8 ... FIXTRA CASCODEND [FOR USE BY PM 5X22 #END ^^^^ ...056321210063