  ** цHEAPASS LINKER** лINKER (RELOCATABLE) FILES ARE STORED AS*   [цODE]*   [LOCAL ADDRESSES]*   [ENTRY POINTS]*   [EXTERNALS]** [EXTERNALS]:*     NAME*     OFFSET      2 BYTES*     SIZE/OFFSET 1 BYTE** [ENTRY POINTS]:*     NAME*     VALUE       2 BYTES (3RD BYTE ADDED AT LINK TIME)** [LABELS]:*     OFFSET      2 BYTES*     # OF RELS   1 BYTE*     IF HIGH BIT SET THEN*       VALUE     3 BYTES*       SIZE/OFFSET 1 BYTE** нOTE: USES орг $020000 TO FORCE 16-BITS DURING ASSEMBLY** слй 9/99-12/99** орг $8000═рел*        дск '@0:LINK'теьтп═=═$ф9Ю;POINTER TO TEXTнеьтцхар═еьтдорг═еьтцоделен═еьтгетерр═еьтпрхеь═еьтластдеж═еьтстроут═еьтцхроут═=═$ффд2сетлфс═=═$ффбасетнам═=═$ффбдлоад═=═$ффд5поинт═=═$8дтемп═=═$фцжарпнт═=═$ф7цоунт═=═$ффбуфф═=═$0200лоададдр═=═$020000енттаб═=═$8000маьент═=═$9800еьттаб═=═$9800Ю;басиц SWITCHED OUTмаьеьт═=═$д000линкид═ент═да═$ц64линк═ент═лда═#00═ста═енттаб═ста═еррфлаг═лда═#<еьттаб═ста═еьттабтоп═лда═#>еьттаб═ста═еьттабтоп+1═лда═дорг═ста═линкаддр═лда═дорг+1═ста═линкаддр+1═лда═дорг+2═ста═линкаддр+2═лда═#<лоададдр═ста═филеаддр═лда═#>лоададдрЮ;$020000═ста═филеаддр+1═лда═#^лоададдр:лооп═ста филеаддр+2═йср неьтфиле═бне═:ц0═ймп═:доне:ц0═лда═еррфлаг═бея═:цонт:йсец═ймп═:сец:цонт═йср═строут═тьт═' $',00═лда═линкаддр+1═йср═прхеь═лда═линкаддр═йср═прхеь═лда═#13═йср цхроут═лда бинфлаг═бне :цонт1═йср═цхецкид═лда═еррфлаг═бне═:йсец═йср═строут═тьт═'  ADDEXT:',00═йср═аддеьт═лда═еррфлаг═бне═:йсец═йср═строут═дфб═13═тьт═'  ADDENT:',00═йср═аддент═лда═еррфлаг═бне═:йсец═йср═строут═дфб═13═тьт═'  FIXLOC:',00═йср═фиьлоцалс═лда═еррфлаг═бне═:сец:цонт1═лда═ластлинк═сец═сбц═филеаддр═ста═темп═лда═ластлинк+1═сбц═филеаддр+1═ста═темп+1Ю;SIZE═лда═линкаддрЮ;ADVANCE POINTER═цлц═адц═темп═ста═линкаддр═лда═линкаддр+1═адц═темп+1═ста═линкаддр+1═бцц═:цонт2═инц═линкаддр+2:цонт2═лда═ластлинк═ста═филеаддр═лда═ластлинк+1═ста═филеаддр+1═лда═ластлинк+2═лды═#00Ю;цLEARED IN неьтфиле═ймп═:лооп:доне═лда═филеаддр═сец═сбц═#<лоададдр═ста═цоделен═лда═филеаддр+1═сец═сбц═#>лоададдрЮ;сTARTS AT $1000═ста═цоделен+1═йср═строут═дфб═$0д═тьт═'RESOLVING EXTERNALS...'═дфб═$0д,00═йср═ресолже═до═0═сеи═цлцЮ;цOPY TO $020000═дфб═$фбЮ;XCE═дфб═$ц2,$30Ю;REP #$30═дфб═$а2═да═лоададдрЮ;LDX #лоададдр═дфб═$а0,00,00Ю;LDY #0000═лда═цоделен═дфб═$54,$02,$00Ю;MVN $00,$02═сец═дфб═$фб═лда═#00═пха═дфб═$абЮ;плб═цли═фин═лда═еррфлаг:сец═цмп═#1═ртсеррфлаг═дфб═00линкаддр═дс═3Ю;сUPPOSED MODULE START ADDRESSфилеаддр═дла═$010000Ю;аCTUAL START ADDRESS* рEAD NEXT FILEбинфлаг═дфб 00неьтфиле═йср═неьтцхар═бея :еьит═бцц═неьтфилеЮ;ц SET -> END OF LINE═лдь #00═стз бинфлаг═лда [теьтп],ыЮ;BINARY CHECK═цмп #'^'═бне :цопы═ста бинфлаг═ины:цопы═лда═[теьтп],ы═бея :доне═ста═буфф,ь═цмп═#224═бея═:доне═анд═#$7ф═цмп #32═бея═:доне═цмп═#13═бея═:доне*         йср цхроут═инь═ины═бне═:цопы:доне═тыа═цлц═адц═теьтп═ста═теьтп═бцц═:ц0═инц═теьтп+1═бне═:ц0═инц═теьтп+2:ц0═тьаЮ;LENGTH═лдь═#<буфф═лды═#>буфф═йср═сетнам═лда═#7═лдь═ластдеж═лды═#$фф═йср═сетлфс═лдь═филеаддр═лды═филеаддр+1═лда═филеаддр+2═ста═$б0═лда═#0═йср═лоад═бцс═:ерр═лдь═$ае═лды═$аф═лда═$б0═сть═ластлинк═сты═ластлинк+1═ста═ластлинк+2═лда═#$фф:еьит═ртс:ерр═йср═$ффццЮ;CLRCHN═йср═гетерр═инц═еррфлаг═ртс** цHECK ID*цхецкид═лда═ластлинк═сец═сбц═#2═ста═поинт═ста═ластлинк═лда═ластлинк+1═сбц═#00═ста═поинт+1═ста═ластлинк+1═лда═ластлинк+2═сбц═#00═ста═поинт+2═ста═ластлинк+2═лды═#00═лда═[поинт],ы═цмп═линкид═бне═:ерр═ины═лда═[поинт],ы═цмп═линкид+1═бне═:ерр═ртс:ерр═инц═еррфлаг═йср═строут═тьт═'NOT A LINK MODULE'═дфб═13,00*         пла*         пла═ртс** гетлинк -- гETLINK READS THE BACKWARDS LINK FROM THE FILE*   JUST READ IN AND STORES IT IN поинт AND ластлинк.** оN ENTRY: ластлинк POINTS TO THE CURRENT DATA BLOCK* оN EXIT: поинт AND ластлинк POINT TO THE NEXT DATA BLOCK*ластлинк═дс═3блоцксизе дс═2гетлинк═лда═ластлинкЮ;сTART OF LAST BLOCK═сец═сбц═#2═ста═поинт═лда═ластлинк+1═сбц═#00═ста═поинт+1═лда═ластлинк+2═сбц═#00═ста═поинт+2═лды═#0═лда═[поинт],ы═ста═блоцксизе═ины═лда═[поинт],ы═ста═блоцксизе+1═лда═поинт═сец═сбц═блоцксизе═ста═поинт═ста═ластлинк═лда═поинт+1═сбц═блоцксизе+1═ста═ластлинк+1═ста═поинт+1═лда═поинт+2═сбц═#00═ста═ластлинк+2═ста═поинт+2═ртс** аджанце -- гO TO NEXT CHUNK WITHIN DATA BLOCK*   AND UPDATE блоцксизе** оN ENTRY: .ы = SIZE OF CHUNK, поинт -> BLOCK* оN EXIT: з SET IF AT END OF BLOCK*аджанце═тыа═цлц═адц═поинт═ста═поинт═бцц═:ц1═инц═поинт+1═бне═:ц1═инц═поинт+2:ц1═сты═цоунт═лда═блоцксизе═сец═сбц═цоунт═ста═блоцксизе═бцс═атенд═дец═блоцксизе+1═бпл═атенд═инц═еррфлаг═йср═строут═тьт═'BLOCK SIZE ERROR'═дфб═13,00═пла═пла═ртсатенд═лда═блоцксизе═ора═блоцксизе+1═ртс** финджар -- лOCATE VARIABLE IN (POINT) IN TABLE** ц SET -> VAR FOUND; ц CLEAR -> NOT FOUND*финджар═лда═#<енттаб═ста═жарпнт═лда═#>енттаб═ста═жарпнт+1:лооп1═лды═#$фф:л2═ины═лда═(жарпнт),ы═бея═:нопе═бми═:тест═цмп═(поинт),ы═бея═:л2:неьт═лда═(жарпнт),ы═бми═:адд═ины═бне═:неьт:адд═ины═ины═тыа═сецЮ;+3═адц═жарпнт═ста═жарпнт═бцц═:лооп1═инц═жарпнт+1═бне═:лооп1:тест═цмп═(поинт),ы═бне═:неьт═ртс:нопе═цлц═ртс** аDD ALL ENTRY POINTS/LABELS TO THE ENTRY LIST** фORMAT OF ENTRIES IS SIMPLY NAME,ADDR (16-BIT OFFSET)* нAME IS TERMINATED BY LASTCHAR+$80*аддент═йср═гетлинкЮ;гET LINK POINTER═йср═атендЮ;цHECK IF AT END OF BLOCK═бея═:ртс:лооп═йср═финджарЮ;цHECK IF LABEL ALREADY EXISTS═бцс═:еррор:л1═лда═[поинт],ыЮ;аDD TO TABLE═ста═(жарпнт),ы═ины═анд═#$фф═бпл═:л1═лда═[поинт],ыЮ;аDDRESS VALUE═цлц═адц═линкаддрЮ;аCTUAL LOCATION═ста═(жарпнт),ы═ины═лда═[поинт],ы═адц═линкаддр+1═ста═(жарпнт),ы═ины═лда═#00═ста═(жарпнт),ы═тыа═цлц═адц═жарпнт═лда═жарпнт+1═адц═#00═цмп═#>маьент═бцс═:ерр2═йср═аджанце═бне═:лооп:ртс═ртс:еррор═инц═еррфлаг═йср═строут═тьт═'дUPLICATE ент LABEL:',00═лды═#00:лп═лда═[поинт],ы═бми═:дп═йср═цхроут═ины═бне═:лп:дп═анд═#$7ф═йср═цхроут*         пла*         пла═лда═#13═ймп═цхроут:ерр2═инц═еррфлаг═йср═строут═тьт═'тABLE OVERFLOW: TOO MANY ентS.',0D,00*         пла*         пла═ртс** аддеьт -- аDD EXTERNAL LABELS TO TABLE, TO BE FIXED UP*   LATER.  дATA BLOCK IS TERMINATED BY 00.*еьттабтоп да═$8000Ю;еND OF TABLEаддеьт═йср═гетлинк═лда═еьттабтоп═ста═темп═лда═еьттабтоп+1═ста═темп+1:лооп═лды═#00═лда═блоцксизе═ора═блоцксизе+1═бея═:доне:л1═лда═[поинт],ы═ста═(темп),ы═бми═:фиь═ины═бне═:л1:фиь═ины═лда═[поинт],ы═цлц═адц═филеаддрЮ;ACTUAL OFFSET═ста═(темп),ы═ины═лда═[поинт],ы═адц═филеаддр+1═ста═(темп),ы═ины═лда═[поинт],ы═ста═(темп),ыЮ;SIZE/OFF═ины═тыа═цлц═адц═темп═ста═темп═бцц═:ц2═инц═темп+1═лда═темп+1═цмп═#>маьеьт═бцс═:еррор:ц2═йср═аджанце═бне═:лооп:доне═лда═#00═таы═ста (темп),ы═лда═темп═ста═еьттабтоп═лда═темп+1═ста═еьттабтоп+1═ртс:еррор═инц═еррфлаг═йср═строут═тьт═'тABLE OVERFLOW: TOO MANY еьтS!',0D,00*         пла*         пла═ртс** фиьлоцалс -- фIX UP ALL "LOCAL" RELATIVE LABELS.** тHE DATA FORMAT IS PREDICATED ON THE IDEA THAT MOST OF* THE LABELS TO BE RESOLVED WILL BE PLAIN 16-BIT LABELS.** мOST ENTRIES ARE THREE BYTES: OFFSET AND NUMBER OF* TIMES TO ADD OFFSET.** иF NUMBER OF OFFSETS IS >= $80, THEN THE NEXT THREE* BYTES ARE ADDRLO ADDRHI SIZE/OFFSET -- A 16-BIT VALUE* (BANK = LINK BANK) WITH SIZE/OFFSET DETERMINING THE SIZE* OF THE NUMBER (NUMBER OF BYTES) STARTING AT BYTE* "OFFSET".** тHE LATTER METHOD MAKES INSTRUCTIONS LIKE лда #<табле* AND лда ^лабел POSSIBLE.** иF # OF OFFSETS > $C0, THEN IT IS A NEGATIVE NUMBER OF* OFFSETS, E.G. да -старт** сINCE рел FILES HAVE орг = $010000, 24-BIT ADDRESSES ARE* FIXED UP AT LINK TIME.*жал═дс═5Ю;+2 FOR STRANGE OFFSETSсизе═дфб═00Ю;сIZEбытеофф═дфб═00Ю;бYTE OFFSETфиьлоцалс═йср═гетлинк═йср═атенд═бея═:ртс:лооп═лды═#00═лда═[поинт],ыЮ;рELATIVE LOCATION═цлц═адц═филеаддрЮ;PHYSICAL LOCATION═ста═темп═ины═лда═[поинт],ы═адц═филеаддр+1═ста═темп+1═лда═филеаддр+2═адц═#00═ста═темп+2═иныЮ;.ы = 2═лда═[поинт],ы═ста═цоунтЮ;нUMBER OF OFFSETS═бея═:неьт═бпл═:адд═цмп═#$ц0═бцц═:специал*         йср дебуг:суб═лды═#00═лда═[темп],ы═сец═сбц═линкаддрЮ;LINK LOCATION═ста═[темп],ы═ины═лда═[темп],ы═сбц═линкаддр+1═ста═[темп],ы═инц═цоунтЮ;NEGATIVE═бне═:суб═бея═:лды:адд═лды═#00═лда═[темп],ы═цлц═адц═линкаддрЮ;LINK LOCATION═ста═[темп],ы═ины═лда═[темп],ы═адц═линкаддр+1═ста═[темп],ы═дец═цоунт═бне═:адд:лды═лды═#2Ю;RESTORE .ы:неьт═ины═йср═аджанце═бне═:лооп:ртс═ртс:специал═анд═#$7ф═ста═цоунт═ины═лда═[поинт],ы═ста═жал═ины═лда═[поинт],ы═ста═жал+1═лда #00═ста═жал+2═иныЮ;.ы=5═лда═[поинт],ы═анд═#$0ф═ста═бытеофф═лда═[поинт],ы═лср═лср═лср═лср═ста═сизе═лда═цоунт═бея :адйустЮ;сHOULD нот HAPPEN═лда сизе═цмп #3Ю;сериоус клудге═бне :л2Ю;аVERT THINE EYES!═лды #2Ю;LOOK AWAY, FOOL!!═лда [темп],ы═ста жал+2Ю;тO MAKE лда $030000+LABEL WORK CORRECTLY:л2═лда═линкаддр═цлц═адц═жал═ста═жал═лда═линкаддр+1═адц═жал+1═ста═жал+1═лда═линкаддр+2═адц═жал+2═ста жал+2═лда жал+2Ю;орг=$010000 FIX═бне :ц0Ю;-$010000 FOR EVERY OFFSET═лда жал+3═бне :ц1═дец жал+4:ц1═дец жал+3:ц0═дец жал+2═дец цоунт═бне═:л2:адйуст═лды═#00═лдь═бытеофф:л3═лда═жал,ь═ста═[темп],ы═инь═ины═дец═сизе═бне═:л3═лды═#5Ю;RESTORE .ы═ймп═:неьт═DO═0дебуг═йср═прхеь═лда═#'@'═йср═$ффд2═лда═темп+1═йср═прхеь═лда═темп═йср═прхеь═лда═#'('═йср═$ффд2═лды═#00═лда═(темп),ы═йср═прхеь═лда═#' '═йср═$ффд2═ины═лда═(темп),ы═йср═прхеь═лда═#')'═йср═$ффд2═лда═#' '═ймп $ффд2═FIN* рESOLVE EXTERNAL LABELSресолже═лда═#<еьттаб═ста═поинт═лда═#>еьттаб═ста═поинт+1:лооп═лды═#00═лда═(поинт),ы═бея═:ртс═йср═финджар═бцц═:ерр═ины═лда═(жарпнт),ы═ста═жал═ины═лда═(жарпнт),ы═ста═жал+1═лда═линкаддр+2═ста═жал+2═деы═лда═(поинт),ыЮ;лOCATION═ста═темп═ины═лда═(поинт),ы═ста═темп+1═лда═#^лоададдр═ста═темп+2═ины═сты═цоунтЮ;TEMP═лда═(поинт),ы═бми═:специал═анд═#$0ф═ста═бытеофф═лда═(поинт),ы═лср═лср═лср═лср═бея═:неьт═ста═сизе═лды═#00═лдь═бытеофф:л3═лда═жал,ь═ста═[темп],ы═инь═ины═дец═сизе═бне═:л3:неьт═лда═цоунт═сецЮ;ADVANCE═адц═поинт═ста поинт═бцц═:лооп═инц═поинт+1═бне═:лооп:ртс═ртс:специал═лды═#00═лдь═#2═цмп═#$ц0═бея═:лсуб═цмп═#$80═бне═:ерр═цлц:ладд═лда═[темп],ы═адц жал,ы═ста═[темп],ы═ины═деь═бне═:ладд═бея═:неьт:лсуб═лда═[темп],ыЮ;ц STARTS SET═сбц═жал,ы═ста═[темп],ы═ины═деь═бне═:лсуб═бея═:неьт:ерр═инц еррфлаг═йср строут═тьт═'UNRESOLVED еьт:',00═лды═#00:л2═лда═(поинт),ы═бми═:ц2═йср═цхроут═ины═бпл═:л2:ц2═анд═#$7ф═йср═цхроут*         пла*         пла═лда═#13═ймп═цхроут═до═0строут═пла═таь═пла═ста═:лооп+2:лооп═лда═$ц000,ь═бея═:доне═йср═$ффд2═инь═бне═:лооп═инц═:лооп+2═бне═:лооп:доне═лда═:лооп+2═пха═тьа═пха═ртс═фин