## The Linker Description

### ... Invoking ASlink

####

       Starting  ASlink without any arguments provides the following
    option list and then exits:

    Usage: [-Options] [-Option with arg] file
    Usage: [-Options] [-Option with arg] outfile file1 [file2 ...]
      -h   or NO ARGUMENTS  Show this help list
      -p   Echo commands to stdout (default)
      -n   No echo of commands to stdout
    Alternates to Command Line Input:
      -c                   ASlink >> prompt input
      -f   file[.lnk]      Command File input
    Librarys:
      -k   Library path specification, one per -k
      -l   Library file specification, one per -l
    Relocation:
      -b   area base address=expression
      -g   global symbol=expression
    Map format:
      -m   Map output generated as (out)file[.map]
      -m1    Linker generated symbols included in (out)file[.map]
      -w   Wide listing format for map file
      -x   Hexidecimal (default)
      -d   Decimal
      -q   Octal
    Output:
      -i   Intel Hex as (out)file[.i--]
      -i1    Legacy: start address record type set to 1
      -s   Motorola S Record as (out)file[.s--]
      -t   Tandy CoCo Disk BASIC binary as (out)file[.bi-]
      -j   NoICE Debug output as (out)file[.noi]
      -y   SDCDB Debug output as (out)file[.cdb]
      -o   Linked file/library object output enable (default)
      -v   Linked file/library object output disable
    List:
      -u   Update listing file(s) with link data as file(s)[.rst]
    Case Sensitivity:
      -z   Disable Case Sensitivity for Symbols
    End:
      -e   or null line terminates input

                                  NOTE

         When  ASlink  is  invoked  with  a single filename the
         created output file will have the same filename as the
         .rel file.

         When  ASlink  is  invoked  with multiple filenames the
         first filename is the output filename and the  remain-
         ing  filenames  are  linked  together  into the output
         filename.

    Most  sytems  require  the  options to be entered on the command
    line:

      aslink [-Options] [-Options with args] file

      aslink [-Options] [-Options with args] outfile file1 [file2 ...]

    Some  systems  may  request  the  arguments  after the linker is
    started at a system specific prompt:

      aslink
      argv: -[options] -[option arg] file

      aslink
      argv: [-Options] [-Options with args] outfile file1 [file2 ...]

    The linker commands are explained in some more detail:

        1.  -h        or NO ARGUMENTS Show this help list
            Simply prints the help list on stdout.

        2.  -c        ASlink >> prompt mode.
            The  ASlink >>  prompt  mode reads linker commands from
            stdin.

        3.  -f file   Command file mode.
            The  command file mode imports linker commands from the
            specified file (extension must be  .lnk),  imported  -c
            and  -f  commands  are ignored.  If the directory path,
            for a file to be linked, is not specified in  the  com-
            mand  file  then  the  path  defaults  to the .lnk file
            directory path.

        4.  -p/-n     enable/disable echoing commands to stdout.

        5.  -i/-s/-t  Intel  Hex (file.i--), Motorola S (file.s--),
            or Tandy Color Computer  Disk  Basic  (file.bi-)  image
            output file.

        6.  -i1       Legacy:  start address record type set to 1
            Use the type 1 record to indicate the program start ad-
            dress instead of record type 3.  Record type 1 was used
            in some older tools.

        7.  -o/-v     Specifies      that     subsequent     linked
            files/libraries will generate object  output  (default)
            or  suppress  object  output.  (if option -i, -s, or -t
            was specified)

        8.  -z        Disable Case Sensitivity for Symbols

        9.  -m        Generate  a  map  file (file.map).  This file
            contains a list of the symbols (by area) with  absolute
            addresses, sizes of linked areas, and other linking in-
            formation.

       10.  -m1       Linker    generated   symbols   included   in
            (out)file[.map]
            The linker creates internal symbols for each area (area
            segment) input during the linking process but  normally
            suppresses  their  inclusion in the map file.  This op-
            tion enables their inclusion in the map file.

       11.  -w        Specifies  that a wide listing format be used
            for the map file.

       12.  -xdq      Specifies  the  number radix for the map file
            (Hexidecimal, Decimal, or Octal).

       13.  -u        Generate  an  updated listing file (file.rst)
            derived from the relocated addresses and data from  the
            linker  and  the hint file (file.hlr) output by the as-
            sembler.

       14.  file      File(s)  to  be  linked.  Files may be on the
            same line as the above options or on a separate line(s)
            one file per line or multiple files separated by spaces
            or tabs.

       15.  -b  area=expression
            (one definition per line in a linker command file.)
            This  specifies  an area base address where the expres-
            sion may contain constants and/or defined symbols  from
            the linked files.

       16.  -g  symbol=expression
            (one definition per line in a linker command file.)
            This  specifies  the value for the symbol where the ex-
            pression may contain constants and/or  defined  symbols
            from the linked files.

       17.  -k  library directory path
            (one definition per line in a linker command file.)
            This  specifies one possible path to an object library.
            More than one path is allowed.

       18.  -l  library file specification
            (one definition per line in a linker command file.)
            This  specifies a possible library file.  More than one
            file is allowed.

       19.  -e  or null line, terminates input to the linker.

##### Return to the Linker Index

### ... Library Path(s) and File(s)

####

       The process of resolving undefined symbols after scanning the
    input object  files  includes  the  scanning  of  object  module
    libraries.   The  linker will search through all combinations of
    the library path specifications (input by the -k option) and the
    library  file  specifications (input by the -l option) that lead
    to an existing library file.  Each library file contains a  list
    (one  file  per  line)  of  modules  included in this particular
    library.  Each existing object module is scanned for a match  to
    the undefined symbol.  The first module containing the symbol is
    then linked with the previous modules to resolve the symbol  de-
    finition.   The  library  object  modules are rescanned until no
    more symbols can be resolved.   The  scanning  algorithm  allows
    resolution  of  back references.  No errors are reported for non
    existant library files or object modules.

       The  library  file  specification may be formed in one of two
    ways:

         1.  If  the  library  file  contained an absolute path/file
             specification  then  this  is   the   object   module's
             path/file.
             (i.e.  C:\...  or C:/...)

         2.  If  the  library  file  contains  a  relative path/file
             specification then the concatenation of  the  path  and
             this  file  specification  becomes  the object module's
             path/file.
             (i.e.  \...  or /...)

       As  an example, assume there exists a library file termio.lib
    in the syslib directory specifying the following object modules:

    \6809\io_disk        first object module
    d:\special\io_comm   second object module

    and the following parameters were specified to the linker:

    -k c:\iosystem\    the first path
    -k c:\syslib\      the second path

    -l termio          the first library file
    -l io              the second library file (no such file)

    The  linker  will attempt to use the following object modules to
    resolve any undefined symbols:

    c:\syslib\6809\io_disk.rel     (concatenated path/file)
    d:\special\io_comm.rel         (absolute path/file)

    all  other path(s)/file(s) don't exist.  (No errors are reported
    for non existant path(s)/file(s).)

##### Return to the Linker Index

### ... ASlink Processing

####

       The  linker  processes  the  files  in  the  order  they  are
    presented.  The first pass through the input files  is  used  to
    define  all  program  areas, the section area sizes, and symbols
    defined or referenced.  Undefined symbols will initiate a search
    of any specified library file(s) and the importing of the module
    containing the symbol definition.  After the first pass  the  -b
    (area  base  address) definitions, if any, are processed and the
    areas linked.

       The  area  linking proceeds by first examining the area types
    ABS, CON, REL, OVR and PAG.  Absolute areas (ABS) from  separate
    object modules are always overlayed and have been assembled at a
    specific address, these are not normally relocated (if a -b com-
    mand  is  used  on an absolute area the area will be relocated).
    Relative areas (normally defined as REL|CON) have a base address
    of  0x0000  as read from the object files, the -b command speci-
    fies the beginning address of the area.  All subsequent relative
    areas  will  be  concatenated  with  proceeding  relative areas.
    Where specific ordering is desired, the first linker input  file
    should  have  the area definitions in the desired order.  At the
    completion of the area linking all area  addresses  and  lengths
    have  been determined.  The areas of type PAG are verified to be
    on a 256 byte boundary and that the length does not  exceed  256
    bytes.  Any errors are noted on stderr and in the map file.

    The  linker  also  automatically  generates two symbols for each
    linked program area:

        'a_<area>'      The starting address of the area.

        'l_<area>'      The length of the area.

    and two symbols for each area segment:

        'm_<area>_n'    The boundary modulus of the area segment.

        's_<area>_n'    The starting address of the area segment.

    The  appended  '_n'  signifies  the area segment number within a
    linked area.

       These  symbols  are in general only useful diagnostically and
    are not visible externally.  However if the -m1 linker option is
    used these symbols will be output to the map file.

       Next  the  global symbol definitions (-g option), if any, are
    processed.  The symbol definitions have been delayed until  this
    point because the absolute addresses of all internal symbols are
    known and can be used in the expression calculations.

       Before  continuing  with the linking process the symbol table
    is scanned to determine if any symbols have been referenced  but
    not defined.  Undefined symbols are listed on the stderr device.
    If a .module directive was included in the  assembled  file  the
    module  making  the reference to this undefined variable will be
    printed.

       Constants  defined  as global in more than one module will be
    flagged as multiple definitions if their values are not  identi-
    cal.

       After  the  preceeding  processes are complete the linker may
    output a map file (-m option).  This file provides the following
    information:

         1.  Global symbol values and label absolute addresses

         2.  Defined areas and there lengths

         3.  Remaining undefined symbols

         4.  List of modules linked

         5.  List of library modules linked

         6.  List of -b and -g definitions

       The final step of the linking process is performed during the
    second pass of the input files.  As the xxx.rel files  are  read
    the code is relocated by substituting the physical addresses for
    the referenced symbols and areas and may  be  output  in  Intel,
    Motorola, or Tandy CoCo Disk Basic formats.  The number of files
    linked and symbols defined/referenced is limited by the  proces-
    sor  space  available to build the area/symbol lists.  If the -u
    option is specified then the listing files (file.lst) associated
    with  the  relocation  files  (file.rel) are scanned and used to
    create a new file (file.rst) which has all  addresses  and  data
    relocated to their final values.

       The  -o/-v  options  allow the simple creation of loadable or
    overlay modules.  Loadable and overlay modules normally need  to
    be  linked  with  a  main module(s) to resolve external symbols.
    The -o/-v options can be used to enable object  output  for  the
    loadable  or overlay module(s) and suppress the object code from
    the linked main module(s).  The -o/-v  options  can  be  applied
    repeatedly  to specify a single linked file, groups of files, or
    libraries for object code inclusion or suppression.

##### Return to the Linker Index

### ... Linker V5.xx (V4.xx) Input Format

####

       The  linkers'  input  object file is an ascii file containing
    the information needed by the linker  to  bind  multiple  object
    modules into a complete loadable memory image.

    The object module contains the following designators:

            [XDQ][HL][234]
                    X       Hexidecimal radix
                    D       Decimal radix
                    Q       Octal radix

                    H       Most significant byte first
                    L       Least significant byte first

                    2       16-Bit Addressing
                    3       24-Bit Addressing
                    4       32-Bit Addressing

            H       Header
            M       Module
            G       Merge Mode
            B       Bank
            A       Area
            S       Symbol
            T       Object code
            R       Relocation information
            P       Paging information

####

- Object Module Format
- Header Line
- Module Line
- Merge Mode Line
- Symbol Line
- Area Line
- Bank Line
- T Line
- R Line
- P Line
- Return to the Linker Index

####

    Object Module Format

       The   first   line   of   an   object   module  contains  the
    [XDQ][HL][234] format specifier  (i.e.   XH2  indicates  a  hex-
    idecimal  file  with  most significant byte first and 16-bit ad-
    dressing) for the following designators.

##### => Section Index

####

    Header Line

            H aa areas gg global symbols

       The  header  line  specifies  the number of areas(aa) and the
    number of global symbols(gg) defined or referenced in  this  ob-
    ject module segment.

##### => Section Index

####

    Module Line

            M name

       The  module  line  specifies  the module name from which this
    header segment was assembled.  The module line will  not  appear
    if the .module directive was not used in the source program.

##### => Section Index

####

    Merge Mode Line

            G nn ii 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

       The  mode  structure  contains  the specification (or partial
    specification) of one of the assemblers' merge  modes.   Sixteen
    bits  may  be  specified  on a single line.  Each assembler must
    specify at least one merge mode.  The merging specification  al-
    lows  arbitrarily defined active bits and bit positions.  The 32
    element arrays are indexed from 0 to 31.  Index 0 corresponds to
    bit  0,  ...,  and  31 corresponds to bit 31 of a normal integer
    value.

         1.   nn is merge mode number

         2.   ii is the beginning bit position of the following data

         3.   00 ...  merge mode bit elements

                The value of the element specifies if the normal in-
                teger bit is active (bit <7> is set, 0x80) and  what
                destination  bit  (bits  <4:0>,  0  -  31) should be
                loaded with this normal integer bit.

##### => Section Index

####

    Bank Line

            B string base nn size nn map nn flags nn fsfx string

       The  B  line  defines  a  bank name as 'string'.  A bank is a
    structure containing a collection of areas.  The bank is treated
    as  a  unique linking structure seperate from other banks.  Each
    bank can have a unique base  address  (starting  address).   The
    size  specification  may  be  used to signal the overflow of the
    banks' allocated space.  The Linker combines all areas  included
    within  a  bank  as  seperate from other areas.  The code from a
    bank may be output to a unique file by specifying the File  Suf-
    fix  parameter  (fsfx).   This allows the seperation of multiple
    data and code segments into  isolated  output  files.   The  map
    parameter  is  for  NOICE processing.  The flags indicate if the
    parameters have been set.

##### => Section Index

####

    Area Line

            A label size ss flags ff [bank bb] [bndry mm]

       The  area  line  defines the area label, the size (ss) of the
    area in bytes, the area  flags  (ff),  the  optional  [bank  bb]
    specifies  the  bank  this area is a member of, and the optional
    [bndry mm] which specifies the boundary modulus  for  this  area
    segment.  The area flags specify the ABS, REL, CON, OVR, and PAG
    parameters:

            OVR/CON  (0x04/0x00 i.e.  bit position 2)

            ABS/REL  (0x08/0x00 i.e.  bit position 3)

            PAG      (0x10 i.e.  bit position 4)

       The  bank label is optional and only specified if the area is
    to be included within a bank.

       When  this area (area segment) is linked and their is a boun-
    dary modulus specified then the code/data beginning address will
    be  increased to match the boundary modulus.  This will also in-
    crease the area (area segment) size by the same amount.

##### => Section Index

####

    Symbol Line

            S string Defnnnn

                    or

            S string Refnnnn

       The  symbol line defines (Def) or references (Ref) the symbol
    'string' with the value nnnn.  The defined value is relative  to
    the  current  area  base  address.   References to constants and
    external global symbols will always appear before the first area
    definition.  References to external symbols will have a value of
    zero.

##### => Section Index

####

    T Line

            T xx xx nn nn nn nn nn ...

       The  T  line contains the assembled code output by the assem-
    bler with xx xx being the offset address from the  current  area
    base address and nn being the assembled instructions and data in
    byte format.  (xx xx and nn nn can be 2, 3, or 4 bytes as speci-
    fied by the .REL file header.)

##### => Section Index

####

    R Line

            R 0 0 nn nn n1 n2 xx xx ...

       The R line provides the relocation information to the linker.
    The nn nn value is the current area index, i.e.  which area  the
    current  values  were  assembled.  Relocation information is en-
    coded in groups of 4 bytes:

         1.  n1 is the relocation mode and object format.
             1.  bits <1:0> specify the number of bytes to output
             2.  bits <2:3> normal(0x00) /   MSB   (0x0C)
                            signed(0x04) / unsigned(0x08)
             3.  bit 4  normal(0x00)/page   '0' (0x10) reference
             4.  bit 5  normal(0x00)/page 'nnn' (0x20) reference
                        PAGX mode if both bits are set (0x30)
             5.  bit 6  normal(0x00)/PC relative(0x40) relocation
             6.  bit 7  relocatable area(0x00)/symbol(0x80)

         2.  n2 is a byte index and a merge mode index
             1.  bits <3:0>  are a byte index into the corresponding
                 (i.e.  preceeding) T line data (i.e.  a pointer  to
                 the data to be updated by the relocation).
             2.  bits <7:4> are an index into a selected merge mode.
                 Currently mode 0 simply specifies to  use  standard
                 byte processing modes and merging is ignored.

         3.  xx xx  is the area/symbol index for the area/symbol be-
             ing referenced.  the corresponding area/symbol is found
             in the header area/symbol lists.

    The groups of 4 bytes are repeated for each item requiring relo-
    cation in the preceeding T line.

##### => Section Index

####

    P Line

            P 0 0 nn nn n1 n2 xx xx

       The  P  line provides the paging information to the linker as
    specified by a .setdp directive.  The format of  the  relocation
    information is identical to that of the R line.  The correspond-
    ing T line has the following information:
            T xx xx aa aa bb bb

       Where  aa aa is the area reference number which specifies the
    selected page area and bb bb is the base address  of  the  page.
    bb bb will require relocation processing if the 'n1 n2 xx xx' is
    specified in the P line.  The linker will verify that  the  base
    address is on a 256 byte boundary and that the page length of an
    area defined with the PAG type is not larger than 256 bytes.

       The  linker  defaults any direct page references to the first
    area defined in the input REL file.  All ASxxxx assemblers  will
    specify the _CODE area first, making this the default page area.

##### => Section Index

####

    24-Bit and 32-Bit Addressing

       When  24-bit  or  32-bit  addressing is specified in the file
    format line [XDQ][HL][234] then the S and T Lines have  modified
    formats:
            S string Defnnnnnn                      (24-bit)
            S string Refnnnnnn                      (24-bit)
            T xx xx xx nn nn nn nn nn ...           (24-bit)

            S string Defnnnnnnnn                    (32-bit)
            S string Refnnnnnnnn                    (32-bit)
            T xx xx xx xx nn nn nn nn nn ...        (32-bit)

       The  multibyte  formats for byte data replace the 2-byte form
    for 16-bit data with 3-byte or 4-byte data for 24-bit or  32-bit
    data  respectively.  The 2nd byte format (also named MSB) always
    uses the second byte of the 2, 3, or 4-byte data.

##### => Section Index

### ... Linker V5.xx (V4.xx) Error Messages

####

       The linker provides detailed error messages allowing the pro-
    grammer to quickly find the errant code.   As  the  linker  com-
    pletes  pass 1  over  the  input  file(s)  it  reports  any page
    boundary or page length errors as follows:

    ?ASlink-Warning-Paged Area PAGE0 Boundary Error

    and/or

    ?ASlink-Warning-Paged Area PAGE0 Length Error

    where PAGE0 is the paged area.

       Also  during  Pass   1  any bank size (length) errors will be
    reported as follows:

    ?ASlink-Warning-Size limit exceeded in bank BANK
    where BANK is the bank name.

       During  Pass  two the linker reads the T, R, and P lines per-
    forming the necessary relocations and  outputting  the  absolute
    code.  Various errors may be reported during this process
    The P line processing can produce only one possible error:

    ?ASlink-Warning-Page Definition Boundary Error
             file        module      pgarea    pgoffset
      PgDef  t6809l      t6809l      PAGE0         0001

    The error message specifies the file and module where the .setdp
    direct was issued and indicates  the  page  area  and  the  page
    offset value determined after relocation.

    The R line processing produces various error messages:

    ?ASlink-Warning-Signed value error
    ?ASlink-Warning-Unsigned value error
    ?ASlink-Warning-Byte PCR relocation error
    ?ASlink-Warning-Word PCR relocation error
    ?ASlink-Warning-3-Byte PCR relocation error
    ?ASlink-Warning-4-Byte PCR relocation error
    ?ASlink-Warning-Page0 relocation error
    ?ASlink-Warning-PageN relocation error
    ?ASlink-Warning-PageX relocation error
    ?ASlink-Warning-Signed Merge Bit Range error
    ?ASlink-Warning-Unsigned/Overflow Merge Bit Range error

    These  error  messages  also specify the file, module, area, and
    offset within the area of the code referencing (Refby)  and  de-
    fining (Defin) the symbol:

    ?ASlink-Warning-Signed value error for symbol  two56
             file        module      area        offset
      Refby  t           Pagetest    PROGRAM     0006
      Defin  t           Pagetest    DIRECT      0100

    If the symbol is defined in the same module as the reference the
    linker is unable to report the symbol name.  The assembler list-
    ing  file(s) should be examined at the offset from the specified
    area to locate the offending code.

       The errors are:

         1.  The  Signed value error indicates an indexing value ex-
             ceeded the maximum negative or maximum  positive  value
             for the current variable size.

         2.  The  Unsigned  value  error indicates an indexing value
             was greater than maximum positive value for the current
             variable size.

         3.  The  byte PCR error is caused by exceeding the pc rela-
             tive byte branch range.

         4.  The  word PCR error is caused by exceeding the pc rela-
             tive word branch range.

         5.  The  3-byte PCR error is caused by exceeding the pc re-
             lative 3-byte branch range.

         6.  The  4-byte PCR error is caused by exceeding the pc re-
             lative 4-byte branch range.

         7.  The  Page0  error is generated if the direct page vari-
             able is not in the page0 range of 0 to 255.

         8.  The  PageN  error is generated if the direct page vari-
             able is not within the Nth page range of 0 to 255.

         9.  The  PageX  error is generated if the direct page vari-
             able is not within the extended page range.

        10.  The  Signed Merge Bit Range error indicates an indexing
             value exceeded the maximum negative or maximum positive
             value for the current signed merge variable size.

        11.  The  Unsigned/Overflow  Merge Bit Range error indicates
             an indexing value was  greater  than  maximum  positive
             value for the current unsigned merge variable size.

##### Return to the Linker Index

### ... Linker V3.xx Input Format

####

       The  linkers'  input  object file is an ascii file containing
    the information needed by the linker  to  bind  multiple  object
    modules into a complete loadable memory image.

    The object module contains the following designators:

            [XDQ][HL][234]
                    X       Hexidecimal radix
                    D       Decimal radix
                    Q       Octal radix

                    H       Most significant byte first
                    L       Least significant byte first

                    2       16-Bit Addressing
                    3       24-Bit Addressing
                    4       32-Bit Addressing

    		  H       Header
            M       Module
            A       Area
            S       Symbol
            T       Object code
            R       Relocation information
            P       Paging information

####

- Object Module Format
- Header Line
- Module Line
- Symbol Line
- Area Line
- T Line
- R Line
- P Line
- Return to the Linker Index

####

    Object Module Format

       The   first   line   of   an   object   module  contains  the
    [XDQ][HL][234] format specifier  (i.e.   XH2  indicates  a  hex-
    idecimal  file  with  most significant byte first and 16-bit ad-
    dressing) for the following designators.

##### => Section Index

####

    Header Line

            H aa areas gg global symbols

       The  header  line  specifies  the number of areas(aa) and the
    number of global symbols(gg) defined or referenced in  this  ob-
    ject module segment.

##### => Section Index

####

    Module Line

            M name

       The  module  line  specifies  the module name from which this
    header segment was assembled.  The module line will  not  appear
    if the .module directive was not used in the source program.

##### => Section Index

####

    Symbol Line

            S string Defnnnn

                    or

            S string Refnnnn

       The  symbol line defines (Def) or references (Ref) the symbol
    'string' with the value nnnn.  The defined value is relative  to
    the  current  area  base  address.   References to constants and
    external global symbols will always appear before the first area
    definition.  References to external symbols will have a value of
    zero.

##### => Section Index

####

    Area Line

            A label size ss flags ff

       The  area  line  defines the area label, the size (ss) of the
    area in bytes, and the area flags (ff).  The area flags  specify
    the ABS, REL, CON, OVR, and PAG parameters:

            OVR/CON  (0x04/0x00 i.e.  bit position 2)

            ABS/REL  (0x08/0x00 i.e.  bit position 3)

            PAG      (0x10 i.e.  bit position 4)

##### => Section Index

####

    T Line

            T xx xx nn nn nn nn nn ...

       The  T  line contains the assembled code output by the assem-
    bler with xx xx being the offset address from the  current  area
    base address and nn being the assembled instructions and data in
    byte format.

##### => Section Index

####

    R Line

            R 0 0 nn nn n1 n2 xx xx ...

       The R line provides the relocation information to the linker.
    The nn nn value is the current area index, i.e.  which area  the
    current  values  were  assembled.  Relocation information is en-
    coded in groups of 4 bytes:

         1.  n1  is  the  relocation mode and object format, for the
             adhoc extension modes refer to asxxxx.h or aslink.h
             1.  bit 0  word(0x00)/byte(0x01)
             2.  bit 1  relocatable area(0x00)/symbol(0x02)
             3.  bit 2  normal(0x00)/PC relative(0x04) relocation
             4.  bit 3  1-byte(0x00)/2-byte(0x08)  object format
             5.  bit 4  signed(0x00)/unsigned(0x10) byte data
             6.  bit 5  normal(0x00)/page '0'(0x20) reference
             7.  bit 6  normal(0x00)/page 'nnn'(0x40) reference
             8.  bit 7  LSB  byte(0x00)/MSB  byte(0x80)

         2.  n2  is  a byte index into the corresponding (i.e.  pre-
             ceeding) T line data (i.e.  a pointer to the data to be
             updated  by  the  relocation).   The T line data may be
             1-byte or  2-byte  byte  data  format  or  2-byte  word
             format.

         3.  xx xx  is the area/symbol index for the area/symbol be-
             ing referenced.  the corresponding area/symbol is found
             in the header area/symbol lists.

    The groups of 4 bytes are repeated for each item requiring relo-
    cation in the preceeding T line.

##### => Section Index

####

    P Line

            P 0 0 nn nn n1 n2 xx xx

       The  P  line provides the paging information to the linker as
    specified by a .setdp directive.  The format of  the  relocation
    information is identical to that of the R line.  The correspond-
    ing T line has the following information:
            T xx xx aa aa bb bb

       Where  aa aa is the area reference number which specifies the
    selected page area and bb bb is the base address  of  the  page.
    bb bb will require relocation processing if the 'n1 n2 xx xx' is
    specified in the P line.  The linker will verify that  the  base
    address is on a 256 byte boundary and that the page length of an
    area defined with the PAG type is not larger than 256 bytes.

       The  linker  defaults any direct page references to the first
    area defined in the input REL file.  All ASxxxx assemblers  will
    specify the _CODE area first, making this the default page area.

##### => Section Index

####

    24-Bit and 32-Bit Addressing

       When  24-bit  or  32-bit  addressing is specified in the file
    format line [XDQ][HL][234] then the S and T Lines have  modified
    formats:
            S string Defnnnnnn                      (24-bit)
            S string Refnnnnnn                      (24-bit)
            T xx xx xx nn nn nn nn nn ...           (24-bit)

            S string Defnnnnnnnn                    (32-bit)
            S string Refnnnnnnnn                    (32-bit)
            T xx xx xx xx nn nn nn nn nn ...        (32-bit)

       The  multibyte  formats for byte data replace the 2-byte form
    for 16-bit data with 3-byte or 4-byte data for 24-bit or  32-bit
    data  respectively.  The 2nd byte format (also named MSB) always
    uses the second byte of the 2, 3, or 4-byte data.

##### => Section Index

### ... Linker V3.xx Error Messages

####

       The linker provides detailed error messages allowing the pro-
    grammer to quickly find the errant code.   As  the  linker  com-
    pletes  pass 1  over  the  input  file(s)  it  reports  any page
    boundary or page length errors as follows:

    ?ASlink-Warning-Paged Area PAGE0 Boundary Error

    and/or

    ?ASlink-Warning-Paged Area PAGE0 Length Error

    where PAGE0 is the paged area.

       During  Pass  two the linker reads the T, R, and P lines per-
    forming the necessary relocations and  outputting  the  absolute
    code.  Various errors may be reported during this process.

    The P line processing can produce only one possible error:

    ?ASlink-Warning-Page Definition Boundary Error
             file        module      pgarea      pgoffset
      PgDef  t6809l      t6809l      PAGE0       0001

    The error message specifies the file and module where the .setdp
    direct was issued and indicates  the  page  area  and  the  page
    offset value determined after relocation.

    The R line processing produces various errors:

    ?ASlink-Warning-Byte PCR relocation error for symbol  bra2
    ?ASlink-Warning-Unsigned Byte error for symbol  two56
    ?ASlink-Warning-Page0 relocation error for symbol  ltwo56
    ?ASlink-Warning-Page Mode relocation error for symbol  two56
    ?ASlink-Warning-Page Mode relocation error
    ?ASlink-Warning-2K Page relocation error
    ?ASlink-Warning-512K Page relocation error

    These  error  messages  also specify the file, module, area, and
    offset within the area of the code referencing (Refby)  and  de-
    fining (Defin) the symbol:

    ?ASlink-Warning-Unsigned Byte error for symbol  two56
             file        module      area        offset
      Refby  t6800l      t6800l      DIRECT      0015
      Defin  tconst      tconst      .  .ABS.    0100

    If the symbol is defined in the same module as the reference the
    linker is unable to report the symbol name.  The assembler list-
    ing  file(s) should be examined at the offset from the specified
    area to locate the offending code.

       The errors are:

         1.  The  byte PCR error is caused by exceeding the pc rela-
             tive byte branch range.

         2.  The Unsigned byte error indicates an indexing value was
             negative or larger than 255.

         3.  The  Page0  error is generated if the direct page vari-
             able is not in the page0 range of 0 to 255.

         4.  The page mode error is generated if the direct variable
             is not within the current direct page (6809).

         5.  The  2K  Page  relocation  error  is  generated  if the
             destination is not within the current  2K  page  (8051,
             DS8xCxxx).

         6.  The  512K  Page  relocation  error  is generated if the
             destination  is  not  within  the  current  512K   page
             (DS80C390).

##### Return to the Linker Index

### ... Hint File Format For Relocated Listings

####

       The  hint file is an ascii file containing information needed
    by the linker to convert the listing file into a relocated list-
    ing  file.   Each  line  in the .hlr file coresponds to a single
    line in the listing file.  The text line usually contains 3 or 4
    parameters  in  the radix selected for the assembler as shown in
    the following table:

    Line Position:  123456789012
                    ------------
    Octal:           111 222 333
    Decimal:         111 222 333
    Hex:             11 22 33

    Parameter 1 specifies the parameters listed in the line.
    A bit is set for each listing option enabled during the
    assembly of the line.

            BIT 0   - LIST_ERR      Error Code(s)
            BIT 1   - LIST_LOC      Location
            BIT 2   - LIST_BIN      Generated Binary Value(s)
            BIT 3   - LIST_EQT      Assembler Equate Value
            BIT 4   - LIST_CYC      Opcode Cycles
            BIT 5   - LIST_LIN      Line Numbers
            BIT 6   - LIST_SRC      Assembler Source Code
            BIT 7   - HLR_NLST      Listing Inhibited

    Parameter 2 is the internal assembler listing mode
    value specified for this line during the assembly process:

            0 - NLIST       No listing
            1 - SLIST       Source only
            2 - ALIST       Address only
            3 - BLIST       Address only with allocation
            4 - CLIST       Code
            5 - ELIST       Equate only
            6 - ILIST       IF conditional evaluation

    Parameter 3 is the number of output bytes listed
    for this line.

       The  4th  parameter  is only output if an equate references a
    value in a different area.  The area name is output in the  fol-
    lowing format following the 3 parameters described above:

    Line Position:  123456789012
                    ------------
    Area Name:       equatearea

       When the line number is present it is prepended to the 3 or 4
    parameters described  above.   The  line  number  is  always  in
    decimal in the following format:

    Line Position:  1234567
                    -------
    Decimal:          LLLLL

       Thus the four formats (for each radix) that may be present in
    a .hlr file are:

    Line Position:  123456789012345678901234567890
                    ------------------------------
                     11 22 33
                     11 22 33 equatearea
                      LLLLL 11 22 33
                      LLLLL 11 22 33 equatearea

       The  linker understands these formats without any user inter-
    action.

       If  a  hint  file  does not exist then the linker attempts to
    convert the list file to a relocated list file using some  basic
    assumptions  about the parameters listed in each line.  The con-
    version without a hint file  requires  at  least  these  listing
    parameters:   LOC,  BIN,  MEB, and ME.  The 'equate' values will
    not be updated.

##### Return to the Linker Index

### ... Intel IHX Output Format (16-Bit)

####

    Record Mark Field    -  This  field  signifies  the  start  of a
                            record, and consists of an  ascii  colon
                            (:).

    Record Length Field  -  This   field   consists   of  two  ascii
                            characters which indicate the number  of
                            data   bytes   in   this   record.   The
                            characters are the result of  converting
                            the  number  of  bytes  in binary to two
                            ascii characters, high digit first.   An
                            End  of  File  record contains two ascii
                            zeros in this field.

    Load Address Field   -  This  field  consists  of the four ascii
                            characters which result from  converting
                            the  the  binary value of the address in
                            which to begin loading this record.  The
                            order is as follows:

                                High digit of high byte of address.
                                Low digit of high byte of address.
                                High digit of low byte of address.
                                Low digit of low byte of address.

                            In an End of File record this field con-
                            sists of either four ascii zeros or  the
                            program  entry  address.

    Record Type Field    -  This  field  identifies the record type,
                            which is either 0 for data, 1 for an End
                            of  File,  or  3  for  a  start  address
                            record.   It  consists  of   two   ascii
                            characters,  with  the high digit of the
                            record type first, followed by  the  low
                            digit  of  the record type.  The default
                            start address record type is 3,  however
                            the  -i1 option can override the default
                            and use the type 1 record.

    Data Field           -  This  field consists of the actual data,
                            converted to two ascii characters,  high
                            digit first.  There are no data bytes in
                            the End of File record.

    Checksum Field       -  The  checksum  field is the 8 bit binary
                            sum of the record length field, the load
                            address  field,  the  record type field,
                            and the data field.  This  sum  is  then
                            negated  (2's  complement) and converted
                            to  two  ascii  characters,  high  digit
                            first.

##### Return to the Linker Index

### ... Intel I86 Output Format (24 or 32-Bit)

####

    Record Mark Field    -  This  field  signifies  the  start  of a
                            record, and consists of an  ascii  colon
                            (:).

    Record Length Field  -  This   field   consists   of  two  ascii
                            characters which indicate the number  of
                            data   bytes   in   this   record.   The
                            characters are the result of  converting
                            the  number  of  bytes  in binary to two
                            ascii characters, high digit first.   An
                            End  of  File  record contains two ascii
                            zeros in this field.

    Load Address Field   -  This  field  consists  of the four ascii
                            characters which result from  converting
                            the  the  binary value of the address in
                            which to begin loading this record.  The
                            order is as follows:

                                High digit of high byte of address.
                                Low digit of high byte of address.
                                High digit of low byte of address.
                                Low digit of low byte of address.

                            In an End of File record this field con-
                            sists of either four ascii zeros or  the
                            program  entry  address.

    Record Type Field    -  This  field  identifies the record type,
                            which is either 0 for data, 1 for an End
                            of File, 3 for a start address, or 4 for
                            a segment record.  It  consists  of  two
                            ascii characters, with the high digit of
                            the record type first, followed  by  the
                            low  digit  of  the  record  type.   The
                            default start address record type is  3,
                            however  the -i1 option can override the
                            default and use the type 1 record.

    Data Field           -  This  field consists of the actual data,
                            converted to two ascii characters,  high
                            digit first.  There are no data bytes in
                            the End of File record.

    Checksum Field       -  The  checksum  field is the 8 bit binary
                            sum of the record length field, the load
                            address  field,  the  record type field,
                            and the data field.  This  sum  is  then
                            negated  (2's  complement) and converted
                            to  two  ascii  characters,  high  digit
                            first.

##### Return to the Linker Index

### ... Motorola S1-S9 Output Format (16-Bit)

####

    Record Type Field    -  This  field  signifies  the  start  of a
                            record and  identifies  the  the  record
                            type as follows:

                                Ascii S1 - Data Record
                                Ascii S9 - End of File Record

    Record Length Field  -  This  field  specifies the record length
                            which includes the  address,  data,  and
                            checksum   fields.   The  8  bit  record
                            length value is converted to  two  ascii
                            characters, high digit first.

    Load Address Field   -  This  field  consists  of the four ascii
                            characters which result from  converting
                            the  the  binary value of the address in
                            which to begin loading this record.  The
                            order is as follows:

                                High digit of high byte of address.
                                Low digit of high byte of address.
                                High digit of low byte of address.
                                Low digit of low byte of address.

                            In an End of File record this field con-
                            sists of either four ascii zeros or  the
                            program  entry  address.

    Data Field           -  This  field consists of the actual data,
                            converted to two ascii characters,  high
                            digit first.  There are no data bytes in
                            the End of File record.

    Checksum Field       -  The  checksum  field is the 8 bit binary
                            sum of the record length field, the load
                            address field, and the data field.  This
                            sum is then  complemented  (1's  comple-
                            ment)   and   converted   to  two  ascii
                            characters, high digit first.

##### Return to the Linker Index

### ... Motorola S2-S8 Output Format (24-Bit)

####

    Record Type Field    -  This  field  signifies  the  start  of a
                            record and  identifies  the  the  record
                            type as follows:

                                Ascii S2 - Data Record
                                Ascii S8 - End of File Record

    Record Length Field  -  This  field  specifies the record length
                            which includes the  address,  data,  and
                            checksum   fields.   The  8  bit  record
                            length value is converted to  two  ascii
                            characters, high digit first.

    Load Address Field   -  This  field  consists  of  the six ascii
                            characters which result from  converting
                            the  the  binary value of the address in
                            which to begin loading this record.  The
                            order is as follows:

                                High digit of 3rd byte of address.
                                Low digit of 3rd byte of address.
                                High digit of high byte of address.
                                Low digit of high byte of address.
                                High digit of low byte of address.
                                Low digit of low byte of address.

                            In an End of File record this field con-
                            sists of either six ascii zeros  or  the
                            program  entry  address.

    Data Field           -  This  field consists of the actual data,
                            converted to two ascii characters,  high
                            digit first.  There are no data bytes in
                            the End of File record.

    Checksum Field       -  The  checksum  field is the 8 bit binary
                            sum of the record length field, the load
                            address field, and the data field.  This
                            sum is then  complemented  (1's  comple-
                            ment)   and   converted   to  two  ascii
                            characters, high digit first.

##### Return to the Linker Index

### ... Motorola S3-S7 Output Format (32-Bit)

####

    Record Type Field    -  This  field  signifies  the  start  of a
                            record and  identifies  the  the  record
                            type as follows:

                                Ascii S3 - Data Record
                                Ascii S7 - End of File Record

    Record Length Field  -  This  field  specifies the record length
                            which includes the  address,  data,  and
                            checksum   fields.   The  8  bit  record
                            length value is converted to  two  ascii
                            characters, high digit first.

    Load Address Field   -  This  field  consists of the eight ascii
                            characters which result from  converting
                            the  the  binary value of the address in
                            which to begin loading this record.  The
                            order is as follows:

                                High digit of 4th byte of address.
                                Low digit of 4th byte of address.
                                High digit of 3rd byte of address.
                                Low digit of 3rd byte of address.
                                High digit of high byte of address.
                                Low digit of high byte of address.
                                High digit of low byte of address.
                                Low digit of low byte of address.

                            In an End of File record this field con-
                            sists of either eight ascii zeros or the
                            program  entry  address.

    Data Field           -  This  field consists of the actual data,
                            converted to two ascii characters,  high
                            digit first.  There are no data bytes in
                            the End of File record.

    Checksum Field       -  The  checksum  field is the 8 bit binary
                            sum of the record length field, the load
                            address field, and the data field.  This
                            sum is then  complemented  (1's  comple-
                            ment)   and   converted   to  two  ascii
                            characters, high digit first.

##### Return to the Linker Index

### ... Tandy Color Computer Disk Basic Format

####

    Record Preamble      -  This  field  is either $00 (for start of
                            new record) or $FF (for last  record  in
                            file).

    Record Length Field  -  This  field specifies the number of data
                            bytes which follows the  address  field.
                            The  length  is  in  binary  MSB  to LSB
                            order.

                                16-Bit Length - 2-bytes
                                24-Bit Length - 3-bytes
                                32-Bit Length - 4-bytes

    Load Address Field   -  This field consists of the address where
                            the record will be loaded  into  memory.
                            The  address  is  in  binary  MSB to LSB
                            order.

                                16-Bit Address - 2-bytes
                                24-Bit Address - 3-bytes
                                32-Bit Address - 4-bytes

    Data Field           -  This field consists of the actual binary
                            data.

       After  the  last  code  segment,  a final record like the one
    above is placed.  In this final segment, the Record Preamble  is
    $FF,  the Record Length Field is $0000 and the Load Adress Field
    is the execution address.

##### Return to the Linker Index

####

... Exit the ASxxxx Documentation

... Home Page

######

Last Updated: March 2021