home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / MBUG / MBUG112.ARC / PROLINK.LBR / PROLINK.HYP / PROLINK.HYP
Text File  |  1979-12-31  |  22KB  |  477 lines

  1. ;
  2.            Prolink (TM) Microsoft Compatible Linkage Editor
  3.  
  4. 0 - Overview                          N - ORIGIN
  5. 1 - Command lines                     Q - SETLOC
  6. 2 - Expressions and Symbols           V - EVAL
  7. 3 - Filenames                         D - DUMP
  8. 4 - $MEMRY and ?MEMRY                 P - PATCH
  9. 5 - ?BEG? and ?END?                   X - SEED
  10. 6 - Re-defineable symbols             Y - SYMFIL
  11.                                       T - SORT
  12. H - HELP and STAT                     G - PURGE
  13. R - READ                              Z - RESOLVE
  14. K - LINK                              U - UNDEF, UNREF, MULDEF, and SYMBOL
  15. L - LOAD                              F - DEFINE and REDEF
  16. S - SEARCH                            W - WRSYM
  17. O - OUTFIL                            A - ABORT and RESET
  18. E - EXIT and CLOSE
  19. : 0
  20.                                    Overview
  21.  
  22. ProLink is a Microsoft-format linkage editor for computers employing the Z80
  23. microprocessor and running CP/M and compatible operating systems.
  24.  
  25. ProLink is a command-driven linker, and provides an interactive environment for
  26. the generation of object program modules.  In addition to the basic link and
  27. library search commands, ProLink provides an array of commands for symbol file
  28. control, object module placement, "hot-patching" the object image, automatic
  29. operation from batch execution files, "add-on" modules, and more.
  30.  
  31. ProLink is an in-memory single pass linkage editor, and is thus quite fast; it
  32. is intended strictly for assembly-language modules (rather than "high-level"
  33. compiler output, which is NOT supported by ProLink) and supports all Microsoft-
  34. format relocation bases.
  35. : 1
  36.                                 Command lines
  37.  
  38. When ProLink is initially invoked (by typing PROLINK at the CP/M command
  39. prompt), you may optionally specify a command line to be executed when ProLink
  40. loads.    For example, from CP/M command level, you might type
  41.  
  42.               PROLINK LINK FOO;EXIT
  43.  
  44. Note that everything after "PROLINK" is an input command line to ProLink, and
  45. is executed just as if you had typed it at the ProLink command prompt.    All
  46. ProLink commands are valid from the CP/M command line; when any such command
  47. line is completed (or if no command line is entered) you'll see the ProLink
  48. input prompt (the '*' character), which is ProLink's signal that it's ready to
  49. accept another line of input. (Note that an "EXIT" command in the input stream,
  50. as is given in the example above, will cause ProLink to write its output file
  51. and return immediately to CP/M, without prompting you for any additional
  52. input).
  53. : 2
  54.                            Expressions and Symbols
  55.  
  56. ProLink expressions are integer numbers; the components (and the result of
  57. evaluation) are unsigned 16-bit integers.  Valid operators are "+", "-", "*"
  58. and "/" (add, subtract, multiply, divide).  Symbol names (from any linked
  59. modules already in memory) may also be included.  Thus, the following are legal
  60. expressions:
  61.  
  62.                 PATCH+3
  63.                 NMEMPL/4
  64.                 6*8+9
  65.                 ((NMEMPL+3)/(6+9)+1)/8
  66.  
  67. It is important to note that numeric constants are considered to be hexadecimal
  68. as a default.  To avoid confusion with symbols, all constants beginning with
  69. letters 'A' to 'F' should be preceeded with a leading zero (thus, 0FFA1, not
  70. FFA1; the latter would be interpreted by ProLink as a symbol).    You can specify
  71. a decimal number by preceeding the number with a pound sign ("#"); thus the
  72. constant 10 is 10 hex, or 16 decimal, while #10 is 10 decimal, or 0A hex.
  73. : 3
  74.                                   Filenames
  75.  
  76. Any file specification may be preceeded with a user number, as long as a colon
  77. separates the file name from the user specification.  This holds true whether
  78. or not a drive specification is also present (this is often called the "ZCPR
  79. style" naming convention).  Thus the following are legal filenames:
  80.  
  81.               B3:OBJECT.REL
  82.               C:MXO-SM13.HEX
  83.               3:SYSLIB.REL
  84. : N
  85.                               The ORIGIN command
  86.  
  87. ORIGIN is used to set the beginning address of your output file.  By setting an
  88. ORIGIN, you change the EXECUTION ADDRESS of the output code, but NOT its
  89. position in the output file (that is, the first byte of output still occupies
  90. the first position in the output file).
  91.  
  92. If you don't specify an ORIGIN address, ProLink will default to 100H.  You
  93. should be aware that ProLink's default origin will include a 3-byte jump field
  94. at 100H that is filled in with a jump to your program's entry point at linkage
  95. time. If you change the origin, ProLink will not generate this jump
  96. instruction, and the code segment (CSEG) of your first module must begin your
  97. program.
  98.  
  99. Occasionally, you'll want to defeat this jump-field generation, even when
  100. loading programs at 100H (for example, Echelon's ZCPR3 utilities must start at
  101. exactly 100H, without the jump field).    You can do this by explicitly setting
  102. the origin:
  103.  
  104.                ORIGIN 100
  105. : K
  106.                                The LINK command
  107.  
  108. The most fundamental command of ProLink's set is the LINK command.  Its syntax
  109. is:
  110.  
  111.     LINK <module-name>[,<module-name>] ...
  112.  
  113. You can link several files with one LINK command:
  114.  
  115.          LINK FOO,MATHPAK,IOPACK,FORMAT
  116.  
  117. Multiple link commands may be used instead, with the same result.
  118. : S
  119.                               The SEARCH command
  120.  
  121. Use the SEARCH command after one or more LINK commands, to "pull in" often-used
  122. routines from your library of code modules.  For example,
  123.  
  124.               LINK DBSEARCH,FNPARS
  125.               SEARCH SYSLIB
  126.  
  127. In this example, DBSEARCH.REL and FNPARS.REL are unconditionally linked into
  128. the output file, and SYSLIB.REL is searched for needed subroutines to satisfy
  129. unresolved references from DBSEARCH and FNPARS.
  130.  
  131. If your assembler supports a library-search pseudo-op (e.g., ".REQUEST" in
  132. Microsoft's MACRO-80 assembler), ProLink will automatically search all such
  133. requested libraries just prior to closing the output file (with the CLOSE or
  134. EXIT commands).  To use this feature, the requested libraries must be available
  135. on the current drive, in the current user area.
  136. : L
  137.                                The LOAD command
  138.  
  139. The LOAD command is used to load Intel "hex" format files, binary "image"
  140. files, or symbol files.  Its syntax is as follows:
  141.  
  142.      LOAD <filename.typ>[,<filename.typ>] ...
  143.  
  144. LOAD uses the filetype to distinguish "hex", binary, and symbol files.    The
  145. default type is HEX.
  146.  
  147. If you specify "SYM" as a filetype, LOAD will load symbols into its internal
  148. symbol table.  Note that symbol files written by ProLink are fully compatible
  149. with this format; thus, SYM files written by ProLink may be safely reloaded in
  150. a later ProLink session, or used under Digital Research's SID or ZSID
  151. debuggers.
  152.  
  153. Any filetype other than HEX or SYM (or blank) will be considered an "image"
  154. file.  Typically these are COM files, but can also be overlay files, or even
  155. ASCII text files.  Image files are loaded into memory starting at the current
  156. PC value (viewable with the STAT command, and changeable with the SETLOC
  157. command), and must fit in available memory
  158. : A
  159.                          The ABORT and RESET commands
  160.  
  161. The ABORT command exits the current session, without writing a file or
  162. otherwise disturbing anything on the disk.
  163.  
  164. During a linkage session, you might find that you want to start over for some
  165. reason.  The RESET command will restore ProLink to its start-up state; any
  166. program currently being linked will be removed from memory, and ProLink's
  167. internal variables (including the default value of ORIGIN) will be reset.
  168.  
  169. The RESET and ABORT commands takes no command line arguments.
  170. : O
  171.                               The OUTFIL command
  172.  
  173. The OUTFIL command is used to specify a name for your output file.  Its syntax
  174. is as follows:
  175.  
  176.             OUTFIL <filename>
  177.  
  178. If you omit the OUTFIL command, ProLink will build an output name using the
  179. name of your first input file: it will use the first eight characters of that
  180. name, stripping off the filetype (generally "REL") and forming a filetype of
  181. "COM".
  182. : E
  183.                   Closing the edit: EXIT and CLOSE commands
  184.  
  185. EXIT is the "normal" method of ending the linkage; it writes the output file,
  186. and exits to CP/M.
  187.  
  188. CLOSE will write the output file in the same way, but, instead of exiting to
  189. CP/M, ProLink will do an automatic RESET command and return to command level.
  190. Thus, you're ready for another linkage session.
  191.  
  192. The syntax is identical for CLOSE and EXIT, and is illustrated here for CLOSE:
  193.  
  194.                CLOSE [<filename>]
  195.  
  196. The optional filename overrides any name that may have been specified with the
  197. OUTFIL command.
  198.  
  199. Both EXIT and CLOSE will print a list of any unresolved symbols (if any remain
  200. unresolved), as well as a list of multiply-defined symbols (if multiply defined
  201. symbols exist).  Following any such list, ProLink will print a one-line message
  202. containing the starting and ending addresses, followed by the size of the
  203. output file (in 256-byte pages).
  204. : R
  205.                    Automating the process: the READ command
  206.  
  207. The syntax of the READ command is as follows:
  208.  
  209.               READ <filename> [$E]
  210.  
  211. ProLink will then take its input from the specified file.  Note that, if no
  212. filetype is specified, ProLink will look for a file of type "LNK".  Thus, you
  213. should create READ files with a "LNK" filetype.
  214.  
  215. Normally, ProLink will not echo the command lines it is executing from a READ
  216. file.  However, the "$E" option will override this, and each command will be
  217. displayed on your screen just prior to its execution (this is especially useful
  218. when "debugging" a READ file).
  219.  
  220. A READ file may contain any valid ProLink command EXCEPT another READ command
  221. (i.e., READ files may not be nested).
  222.  
  223. You can place a comment within a READ file (or at command level from the
  224. keyboard, for that matter) by placing a period (".") in the first character
  225. position of a line.
  226. : H
  227.                           The HELP and STAT commands
  228.  
  229. HELP prints a list of available commands on the screen.  Useful as a memory
  230. jogger, but it doesn't give any information about command syntax.  You'll have
  231. to refer to the User's Guide for that.
  232.  
  233. STAT may be used to display the status of the linkage at any particular time.
  234. STAT prints information such as output filename, symbol filename, state of the
  235. linkage, memory statistics, etc.
  236.  
  237. HELP and STAT do not take any command line arguments.
  238. : V
  239.                                The EVAL command
  240.  
  241. EVAL is a general-purpose expression evaluator.  Its syntax is
  242.  
  243.           EVAL <expression>[,<expression>] ...
  244.  
  245. EVAL is most useful for determining symbol values, but it can also come in
  246. handy for doing quick arithmetic calculations.
  247.  
  248. EVAL prints its result both in hexadecimal and decimal (the decimal value is
  249. printed with a leading pound sign).
  250. : D
  251.                                The DUMP command
  252.  
  253. DUMP displays memory from the image under construction, in the DDT-style
  254. combined hex and ASCII.  The syntax for the DUMP command is
  255.  
  256.           DUMP [<start-adrs>] [+][<end-address>]
  257.  
  258. If no start or end address is entered, DUMP will display from the previous
  259. ending DUMP address (or the program origin if no previous DUMP has been
  260. performed) for a length of 128 bytes.  If a start-address is entered without an
  261. ending address, 128 bytes will be displayed.  The ending address prefixed with
  262. the optional '+' specifier causes the end-address to be considered a count of
  263. bytes to display, rather than an actual ending address.
  264.  
  265. Note that "D" is a shorthand synonym for "DUMP".
  266. : Y
  267.                               The SYMFIL command
  268.  
  269. SYMFIL is used to specify a symbol file name, to turn on the symbol file
  270. (ProLink, as a default, does not write a symbol file), and to control the "X"
  271. symbol option.    Its syntax is
  272.  
  273.           SYMFIL [<filespec>] [$ON] [$OFF] [$X]
  274.  
  275. At least one of the four optional arguments must be present, and no more than
  276. one of the "$" options may be present in a single command line.
  277.  
  278. The <filespec> field is used to change the name of the symbol file written by
  279. ProLink; just specifying the name, however, does not cause ProLink to write a
  280. symbol file: the "$ON" option must be used for this.
  281.  
  282. If no filespec is entered, ProLink will generate its own name, using the first
  283. eight characters of the output file name, with "SYM" appended as the filetype.
  284.  
  285. The "$X" option toggles the x-symbol option on and off.
  286. : U
  287.                 The UNDEF, UNREF, MULDEF, and SYMBOL commands
  288.  
  289. The UNDEF command may be used at any time to display all undefined symbols on
  290. the terminal.  An automatic UNDEF is done when the output file is written, if
  291. any undefined symbols exist.
  292.  
  293. The UNREF command displays on the terminal a list of symbols that are defined,
  294. but not referenced.  This is useful for detecting blocks of code that are no
  295. longer referenced globally (if they are not referenced in the module in which
  296. they are defined, they may then be safely deleted).  Such symbols, if
  297. referenced in their local modules, may have their global attribute removed.
  298.  
  299. The MULDEF command is used to display any multiply-defined symbols on the
  300. terminal.  An automatic MULDEF is done when the output file is written, if any
  301. multiply-defined symbols exist.
  302.  
  303. The SYMBOL command is used to display the current symbol table on the terminal.
  304. Note that "SYMBOLS" is a synonym for "SYMBOL", and that the command takes no
  305. command line arguments.
  306. : T
  307.                     Sorting the symbols: the SORT command
  308.  
  309. As a default, ProLink does not sort its symbols, but writes them in the order
  310. in which they are encountered.    Some symbolic debuggers require a sorted symbol
  311. table, and you can use the SORT command to accomplish this.
  312.  
  313. SORT uses a simple bubble sort, and may take long periods of time with large
  314. symbol tables.    You may safely stop the sort at any time with a control-C from
  315. the keyboard, without damage to the symbol table.
  316.  
  317. SORT takes no command line options.
  318. : F
  319.                         The DEFINE and REDEF commands
  320.  
  321. Occasionally, you might find the need to add your own symbols, or redefine
  322. existing ones.    The DEFINE and REDEF commands provide this capability.    Both
  323. commands take the same command line syntax, which we'll specify only for
  324. DEFINE, as follows:
  325.  
  326.         DEFINE <symbol-name> <expression>
  327.  
  328. The DEFINE command requires that the symbol-name specified be either non-
  329. existant, or non-defined; the latter implies that the symbol can exist in the
  330. table by virtue of previous references by other modules, but that it must not
  331. yet be defined.  If <symbol-name> IS defined, the DEFINE command will draw an
  332. error message, and the symbol's value will not be changed.  Note that if no
  333. references exist, DEFINE will create a new entry for the symbol, and then
  334. define it with a value specified by <expression>.
  335.  
  336. The REDEF command requires that the argument symbol-name be an existing,
  337. defined symbol; if it is non-existant (or not defined), the REDEF command cause
  338. an error message, but no new symbol will be created.  If <symbol-name> is
  339. found, the old value will be lost, and the new value (specified by
  340. <expression>) will be substituted in its place.
  341. : G
  342.                               The PURGE command
  343.  
  344. The PURGE command is used to delete symbols from the symbol table.  Its syntax
  345. is
  346.  
  347.          PURGE <symbol-name>[,<symbol-name>] ...
  348.  
  349. PURGE will delete each of the symbols from the list, including any references
  350. to the symbol (i.e., if you PURGE a symbol, you remove not only its definition,
  351. but any references ProLink has formed for the symbol.  So unless you load new
  352. modules with references to a purged symbol AFTER a purge, ProLink will not
  353. issue a "not-defined" diagnostic when the output file is written).
  354.  
  355. PURGE will print a "not-found" message for any symbols in the list that it
  356. can't locate; this will not, however, stop the PURGE command: it will continue
  357. with any remaining symbols in the list.
  358. : W
  359.                               The WRSYM command
  360.  
  361. The WRSYM command writes out the current symbol table to a disk file.  It takes
  362. an optional filename argument:
  363.  
  364.                WRSYM [<filename>]
  365.  
  366. Note that if a <filename> spec is present, this name overrides any filename
  367. specified by the SYMFIL command (which is used if <filename> is omitted).
  368. Also, a filename specified to WRSYM changes any SYMFIL-specified name.
  369. : 4
  370.                               $MEMRY and ?MEMRY
  371.  
  372. $MEMRY is a special variable name recognized by most Microsoft-compatible
  373. linkers, and must be a 2-byte storage area within any of the linked object
  374. modules.  On encountering this symbol, ProLink will insert the first free
  375. memory address at this word location.  Thus, a "main" module may include
  376.  
  377.               PUBLIC $MEMRY
  378.               ....
  379.               $MEMRY: DS 2
  380.  
  381. The base address of free memory is then available to all object modules by
  382. performing
  383.  
  384.                LHLD $MEMRY
  385. : 5
  386.                                ?BEG? and ?END?
  387.  
  388. The symbol '?BEG?' contains the base address of the linked output image;
  389. '?END?' contains the ending address (which is actually the base of the "free"
  390. area).    Thus, rather than loading a word value from memory to locate the base
  391. of the free area (as is done with $MEMRY and ?MEMRY), you simply reference
  392. ?END?.    For example,
  393.  
  394.             EXTRN ?END?,?BEG?
  395.             LXI H,?END?
  396.             LXI D,?BEG?
  397.  
  398. In this example, HL obtains the end of linked program, and DE the beginning.
  399. : 6
  400.                             Re-defineable symbols
  401.  
  402. ProLink supports a special kind of symbol, called a re-defineable symbol.  Such
  403. a symbol may be defined more than once, and each succeeding definition
  404. definition will map to a unique symbol.
  405.  
  406. Re-defineable symbols always end with the special character '@'; the first
  407. definition of such a symbol maps the '@' character to the character 'A', the
  408. second to 'B', and so on.  This lets you have multiple (and likely, similar)
  409. modules, each with an identical entry name, say "TRMDR@" (one might be for an
  410. ADM3A, another for a Hazeltine 1500, etc).  The first module encountered with
  411. such a name will be redefined by ProLink to have the name "TRMDRA", the second,
  412. "TRMDRB", etc.    Each module might have an initialization entry point with a re-
  413. defineable symbol; thus "TINIT@" would be re-defined by ProLink as TINITA,
  414. TINITB, etc.
  415. : P
  416.                     Modifying the image: the PATCH command
  417.  
  418. Once your program is loaded, and resident in ProLink's memory, you can make
  419. changes to the generated image by using the PATCH command.  The syntax of the
  420. PATCH command is as follows:
  421.  
  422.    PATCH [<adrs-expression>]=<patch-value>[,<patch-value>] ...
  423.  
  424. The <adrs-expression> specifies where to begin patching the image; usually,
  425. this expression will be given relative to a global symbol name (e.g.,
  426. CMDTBL+3).  <adrs-expression> is NOT optional on the first PATCH command of a
  427. session; after that, the PATCH command will remember where the last patch
  428. ended, and continue patching at the next successive location (unless a new
  429. address is specified by NOT omitting <adrs-expression>.
  430.  
  431. Byte expressions, word expressions, and strings may be freely intermixed:
  432.  
  433.        PATCH CMDTBL="DUMP",DUMPCM,"GOTO",GOTOCM,0
  434.        PATCH SOMESG="Version 1.0",0,NXTMSG
  435. : X
  436.                                The SEED command
  437.  
  438. Generally, the SEED value used with the 'X' option of the SYMFIL command (see
  439. description in the preceeding section) is set to the value of the symbol ?END?
  440. plus one.  You can use the SEED command, however, to provide your own starting
  441. SEED value.   The syntax of the SEED command is as follows:
  442.  
  443.             SEED <expression>
  444.  
  445. where <expression> is the initial value you want to use for seed.
  446. : Z
  447.                      Modular add-ons: the RESOLVE command
  448.  
  449. ProLink supports a modular programming contruct that, while it must be used
  450. with great care, encourages the use of "add-on" code blocks that may be added
  451. or removed at will, and thus produce custom or specialized versions of your
  452. programs, without the cumbersome and error-prone conditional assembly
  453. techniques that have traditionally been used for this purpose.    This construct
  454. is embodied in the RESOLVE command.
  455.  
  456.               RESOLVE <symbol-name>
  457.  
  458. Basicly, the RESOLVE command specifies a symbol that is used to resolve ALL
  459. otherwise undefined globals, at the conclusion of the linkage editing session.
  460. : Q
  461.                               The SETLOC command
  462.  
  463.                SETLOC <expression>
  464.  
  465. Generally, the location counter should be considered the "next" load address;
  466. at start-up, its value is the same as ORIGIN (if you specified an origin; if
  467. not, the default origin is 100H, but the location counter is set to 103H, to
  468. leave room for the ProLink-generated jump to your program's entry point).
  469. After using one of the LINK, SEARCH or LOAD commands to load a module into
  470. memory, ProLink will move the location counter up to the first free memory cell
  471. AFTER the loaded module.  The next LINK, SEARCH or LOAD command will then begin
  472. loading immediately after the first.
  473.  
  474. Using the SETLOC command, however, you may freely change this "next-load"
  475. location.  You might move it backward, to overload a new module in an area of
  476. an old.  Or you can move it forward, creating a "hole" in the generated image.
  477.