]> git.sur5r.net Git - cc65/blobdiff - doc/ld65.sgml
Fixed several address size issues
[cc65] / doc / ld65.sgml
index 112ee06fd047a03dddc1afee3667e6f198ae0122..45e231bbf086c6168d24dd4c236e43415377955c 100644 (file)
@@ -3,9 +3,9 @@
 <article>
 <title>ld65 Users Guide
 <author>Ullrich von Bassewitz, <htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">
-<date>02.12.2000
+<date>02.12.2000, 02.10.2001
 
-<abstract> 
+<abstract>
 The ld65 linker combines object files into an executable file. ld65 is highly
 configurable and uses configuration files for high flexibility.
 </abstract>
@@ -55,23 +55,33 @@ The linker is called as follows:
 ---------------------------------------------------------------------------
 Usage: ld65 [options] module ...
 Short options:
-  -h                   Help (this text)
-  -m name              Create a map file
-  -o name              Name the default output file
-  -t sys               Set the target system
-  -v                   Verbose mode
-  -vm                  Verbose map file
-  -C name              Use linker config file
-  -Ln name             Create a VICE label file
-  -Lp                  Mark write protected segments as such (VICE)
-  -S addr              Set the default start address
-  -V                   Print the linker version
+  -C name               Use linker config file
+  -L path               Specify a library search path
+  -Ln name              Create a VICE label file
+  -Lp                   Mark write protected segments as such (VICE)
+  -S addr               Set the default start address
+  -V                    Print the linker version
+  -h                    Help (this text)
+  -m name               Create a map file
+  -o name               Name the default output file
+  -t sys                Set the target system
+  -v                    Verbose mode
+  -vm                   Verbose map file
 
 Long options:
-  --help               Help (this text)
-  --mapfile name       Create a map file
-  --target sys         Set the target system
-  --version            Print the linker version
+  --cfg-path path       Specify a config file search path
+  --config name         Use linker config file
+  --dump-config name    Dump a builtin configuration
+  --help                Help (this text)
+  --lib file            Link this library
+  --lib-path path       Specify a library search path
+  --mapfile name        Create a map file
+  --module-id id        Specify a module id
+  --obj file            Link this object file
+  --obj-path path       Specify an object file search path
+  --start-addr addr     Set the default start address
+  --target sys          Set the target system
+  --version             Print the linker version
 ---------------------------------------------------------------------------
 </verb></tscreen>
 
@@ -116,19 +126,24 @@ Here is a description of all the command line options:
 
   <itemize>
   <item>none
+  <item>apple2
   <item>atari
+  <item>atmos
+  <item>c16 (works also for the c116 with memory up to 32K)
   <item>c64
   <item>c128
   <item>plus4
+  <item>cbm510 (CBM-II series with 40 column video)
   <item>cbm610 (all CBM series-II computers with 80 column video)
   <item>pet (all CBM PET systems except the 2001)
-  <item>apple2
   <item>geos
+  <item>lunix
+  <item>atmos
+  <item>nes
   </itemize>
 
   There are a few more targets defined but neither of them is actually
-  supported. See <ref id="builtin-configs" name="builtin configurations"> for
-  more information.
+  supported.
 
 
   <label id="option-v">
@@ -156,6 +171,16 @@ Here is a description of all the command line options:
   id="option-t" name="-t"></tt>.
 
 
+  <label id="option--lib-path">
+  <tag><tt>-L path, --lib-path path</tt></tag>
+
+  Specify a library search path. This option may be used more than once. It
+  adds a directory to the search path for library files. Libraries specified
+  without a path are searched in current directory, in the directory given in
+  the <tt/LD65_LIB/ environment variable, and in the list of directories
+  specified using <tt/--lib-path/.
+
+
   <tag><tt>-Ln</tt></tag>
 
   This option allows you to create a file that contains all global labels and
@@ -184,12 +209,98 @@ Here is a description of all the command line options:
   This option print the version number of the linker. If you send any
   suggestions or bugfixes, please include this number.
 
+
+  <label id="option--cfg-path">
+  <tag><tt>--cfg-path path</tt></tag>
+
+  Specify a config file search path. This option may be used more than once.
+  It adds a directory to the search path for config files. A config file given
+  with the <tt><ref id="option-C" name="-C"></tt> option that has no path in
+  its name is searched in the current directory, in the directory given in the
+  <tt/LD65_CFG/ environment variable, and in the list of directories specified
+  using <tt/--cfg-path/.
+
+
+  <tag><tt>--lib file</tt></tag>
+
+  Links a library to the output. Use this command line option instead of just
+  naming the library file, if the linker is not able to determine the file
+  type because of an unusual extension.
+
+
+  <tag><tt>--obj file</tt></tag>
+
+  Links an object file to the output. Use this command line option instead
+  of just naming the object file, if the linker is not able to determine the
+  file type because of an unusual extension.
+
+
+  <label id="option--obj-path">
+  <tag><tt>--obj-path path</tt></tag>
+
+  Specify an object file search path. This option may be used more than once.
+  It adds a directory to the search path for object files. An object file
+  passed to the linker that has no path in its name is searched in current
+  directory, in the directory given in the <tt/LD65_OBJ/ environment variable,
+  and in the list of directories specified using <tt/--obj-path/.
+
 </descrip>
 
-If one of the modules is not found in the current directory, and the module
-name does not have a path component, the value of the environment variable
-<tt/CC65_LIB/ is prepended to the name, and the linker tries to open the
-module with this new name.
+
+
+<sect>Search paths<p>
+
+Starting with version 2.10 there are now several search paths for files needed
+by the linker: One for libraries, one for object files and one for config
+files.
+
+
+<sect1>Library search path<p>
+
+The library search path contains in this order:
+
+<enum>
+<item>The current directory.
+<item>A compiled in library path which is often <tt>/usr/lib/cc65/lib</tt> on
+      Linux systems.
+<item>The value of the environment variable <tt/LD65_LIB/ if it is defined.
+<item>The value of the environment variable <tt/CC65_LIB/ if it is defined.
+      Please note that use of this environment variable is obsolete and may
+      get removed in future versions.
+<item>Any directory added with the <tt><ref id="option--lib-path"
+      name="--lib-path"></tt> option on the command line.
+</enum>
+
+
+<sect1>Object file search path<p>
+
+The object file search path contains in this order:
+
+<enum>
+<item>The current directory.
+<item>A compiled in directory which is often <tt>/usr/lib/cc65/lib</tt> on
+      Linux systems.
+<item>The value of the environment variable <tt/LD65_OBJ/ if it is defined.
+<item>The value of the environment variable <tt/CC65_LIB/ if it is defined.
+      Please note that use of this environment variable is obsolete and may
+      get removed in future versions.
+<item>Any directory added with the <tt><ref id="option--obj-path"
+      name="--obj-path"></tt> option on the command line.
+</enum>
+
+
+<sect1>Config file search path<p>
+
+The config file search path contains in this order:
+
+<enum>
+<item>The current directory.
+<item>A compiled in directory which is often <tt>/usr/lib/cc65/lib</tt> on
+      Linux systems.
+<item>The value of the environment variable <tt/LD65_CFG/ if it is defined.
+<item>Any directory added with the <tt><ref id="option--cfg-path"
+      name="--cfg-path"></tt> option on the command line.
+</enum>
 
 
 
@@ -259,7 +370,7 @@ Case is ignored for keywords, that is, section or attribute names, but it is
 
 
 
-<sect1>Introduction<p>
+<sect1>Memory areas<p>
 
 Memory areas are specified in a <tt/MEMORY/ section. Lets have a look at an
 example (this one describes the usable memory layout of the C64):
@@ -313,6 +424,9 @@ will cover other attributes later. As you may have noticed, I've used a
 comment in the example above. Comments start with a hash mark (`#'), the
 remainder of the line is ignored if this character is found.
 
+
+<sect1>Segments<p>
+
 Let's assume you have written a program for your trusty old C64, and you would
 like to run it. For testing purposes, it should run in the <tt/RAM/ area. So
 we will start to assign segments to memory sections in the <tt/SEGMENTS/
@@ -340,7 +454,7 @@ specify a segment attribute. There are five possible segment attributes:
                the VICE label file if -Lp is given
        rw      means read/write
        bss     means that this is an uninitialized segment
-       empty   will not go in any output file
+       zp      a zeropage segment
 </verb></tscreen>
 
 So, because we specified that the segment with the name BSS is of type bss,
@@ -365,10 +479,10 @@ segment, where this attribute is true, the linker will export three symbols.
 
 <tscreen><verb>
        __NAME_LOAD__   This is set to the address where the
-                       segment is loaded.
+                       segment is loaded.
        __NAME_RUN__    This is set to the run address of the
-                       segment. We will cover run addresses
-                       later.
+                       segment. We will cover run addresses
+                       later.
        __NAME_SIZE__   This is set to the segment size.
 </verb></tscreen>
 
@@ -380,6 +494,8 @@ create symbols for the last one, there's only one question left: Where does
 the linker put the data? It would be very convenient to have the data in a
 file, wouldn't it?
 
+<sect1>Output files<p>
+
 We don't have any files specified above, and indeed, this is not needed in a
 simple configuration like the one above. There is an additional attribute
 "file" that may be specified for a memory area, that gives a file name to
@@ -418,6 +534,9 @@ names here. Segments that go into <tt/ROM1/ will be written to a file named
 "rom1.bin", and segments that go into <tt/ROM2/ will be written to a file
 named "rom2.bin". The name given on the command line is ignored in both cases.
 
+
+<sect1>LOAD and RUN addresses (ROMable code)<p>
+
 Let us look now at a more complex example. Say, you've successfully tested
 your new "Super Operating System" (SOS for short) for the C64, and you
 will now go and replace the ROMs by your own code. When doing that, you
@@ -473,10 +592,10 @@ external symbols for the data segment that may be accessed from your code:
 
 <tscreen><verb>
                __DATA_LOAD__   This is set to the address where the segment
-                       is loaded, in this case, it is an address in
-                       ROM2.
+                       is loaded, in this case, it is an address in
+                       ROM2.
        __DATA_RUN__    This is set to the run address of the segment,
-                       in this case, it is an address in RAM2.
+                       in this case, it is an address in RAM2.
        __DATA_SIZE__   This is set to the segment size.
 </verb></tscreen>
 
@@ -485,6 +604,9 @@ So, what your startup code must do, is to copy <tt/__DATA_SIZE__/ bytes from
 All references to labels in the <tt/DATA/ segment are relocated to <tt/RAM2/
 by the linker, so things will work properly.
 
+
+<sect1>Other MEMORY area attributes<p>
+
 There are some other attributes not covered above. Before starting the
 reference section, I will discuss the remaining things here.
 
@@ -500,21 +622,21 @@ useful for things like a software stack, or an i/o area.
 This will define three external symbols that may be used in your code:
 
 <tscreen><verb>
-               __STACK_START__         This is set to the start of the memory
-                               area, $C000 in this example.
-       __STACK_SIZE__          The size of the area, here $1000.
+               __STACK_START__         This is set to the start of the memory
+                               area, $C000 in this example.
+       __STACK_SIZE__          The size of the area, here $1000.
         __STACK_LAST__         This is NOT the same as START+SIZE.
-                               Instead, it it defined as the first
-                               address that is not used by data. If we
-                               don't define any segments for this area,
-                               the value will be the same as START.
+                               Instead, it it defined as the first
+                               address that is not used by data. If we
+                               don't define any segments for this area,
+                               the value will be the same as START.
 </verb></tscreen>
 
 A memory section may also have a type. Valid types are
 
 <tscreen><verb>
-       ro      for readonly memory
-       rw      for read/write memory.
+       ro      for readonly memory
+       rw      for read/write memory.
 </verb></tscreen>
 
 The linker will assure, that no segment marked as read/write or bss is put
@@ -526,6 +648,9 @@ you don't like this, you may specify a byte value that is used to fill these
 areas with the "<tt/fillval/" attribute. This value is also used to fill unfilled
 areas generated by the assemblers <tt/.ALIGN/ and <tt/.RES/ directives.
 
+
+<sect1>Other SEGMENT attributes<p>
+
 Segments may be aligned to some memory boundary. Specify "<tt/align = num/" to
 request this feature. Num must be a power of two. To align all segments on a
 page boundary, use
@@ -535,7 +660,7 @@ page boundary, use
            CODE:   load = ROM1, type = ro, align = $100;
            RODATA: load = ROM2, type = ro, align = $100;
            DATA:   load = ROM2, run = RAM2, type = rw, define = yes,
-                   align = $100;
+                   align = $100;
            BSS:    load = RAM2, type = bss, define = yes, align = $100;
        }
 </verb></tscreen>
@@ -575,6 +700,12 @@ or (for the segment definitions from above)
        }
 </verb></tscreen>
 
+To suppress the warning, the linker issues if it encounters a segment that is
+not found in any of the input files, use "<tt/optional=yes/" as additional
+segment attribute. Be careful when using this attribute, because a missing
+segment may be a sign of a problem, and if you're suppressing the warning,
+there is no one left to tell you about it.
+
 File names may be empty, data from segments assigned to a memory area with
 an empty file name is discarded. This is useful, if the a memory area has
 segments assigned that are empty (for example because they are of type
@@ -587,249 +718,134 @@ name="-S"></tt> option).
 
 
 
-<sect1>Reference<p>
+<sect1>The FILES section<p>
 
+The <tt/FILES/ section is used to support other formats than straight binary
+(which is the default, so binary output files do not need an explicit entry
+in the <tt/FILES/ section).
 
+The <tt/FILES/ section lists output files and as only attribute the format of
+each output file. Assigning binary format to the default output file would
+look like this:
 
-<sect1>Builtin configurations<label id="builtin-configs"><p>
+<tscreen><verb>
+       FILES {
+           %O: format = bin;
+       }
+</verb></tscreen>
 
-Here is a list of the builin configurations for the different target
-types:
+The only other available output format is the o65 format specified by Andre
+Fachat. It is defined like this:
 
-<descrip>
-<tag><tt>none</tt></tag>
 <tscreen><verb>
-       MEMORY {
-           RAM: start = %S, size = $10000, file = %O;
-       }
-       SEGMENTS {
-           CODE: load = RAM, type = rw;
-           RODATA: load = RAM, type = rw;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
+       FILES {
+           %O: format = o65;
+       }
 </verb></tscreen>
 
-<tag><tt>atari</tt></tag>
+The necessary o65 attributes are defined in a special section labeled
+<tt/FORMAT/.
+
+
+
+<sect1>The FORMAT section<p>
+
+The <tt/FORMAT/ section is used to describe file formats. The default (binary)
+format has currently no attributes, so, while it may be listed in this
+section, the attribute list is empty. The second supported format, o65, has
+several attributes that may be defined here.
+
 <tscreen><verb>
-       MEMORY {
-           ZP: start = $82, size = $7E, type = rw;
-           HEADER: start = $0000, size = $6, file = %O;
-           RAM: start = $1F00, size = $9D1F, file = %O;
-       }
-       SEGMENTS {
-           EXEHDR: load = HEADER, type = wprot;
-           CODE: load = RAM, type = wprot, define = yes;
-           RODATA: load = RAM, type = wprot;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-           ZEROPAGE: load = ZP, type = zp;
-           AUTOSTRT: load = RAM, type = wprot;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
+    FORMATS {
+        o65: os = lunix, version = 0, type = small,
+             import = LUNIXKERNEL,
+             export = _main;
+    }
 </verb></tscreen>
 
-<tag><tt>c64</tt></tag>
+
+
+
+
+<sect1>Features<p>
+
+In addition to the <tt/MEMORY/ and <tt/SEGMENTS/ sections described above, the
+linker has features that may be enabled by an additional section labeled
+<tt/FEATURES/. Currently, one such feature is available: <tt/CONDES/ is used
+to tell the linker to emit module constructor/destructor tables.
+
 <tscreen><verb>
-       MEMORY {
-           ZP: start = $02, size = $1A, type = rw;
-           RAM: start = $7FF, size = $c801, file = %O;
-       }
-       SEGMENTS {
-           CODE: load = RAM, type = wprot;
-           RODATA: load = RAM, type = wprot;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-           ZEROPAGE: load = ZP, type = zp;
-       }
        FEATURES {
            CONDES: segment = RODATA,
                    type = constructor,
                    label = __CONSTRUCTOR_TABLE__,
                    count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
        }
+</verb></tscreen>
 
+The <tt/CONDES/ feature has several attributes:
 
-</verb></tscreen>
+<descrip>
 
-<tag><tt>c128</tt></tag>
-<tscreen><verb>
-       MEMORY {
-           ZP: start = $02, size = $1A, type = rw;
-           RAM: start = $1bff, size = $a401, file = %O;
-       }
-       SEGMENTS {
-           CODE: load = RAM, type = wprot;
-           RODATA: load = RAM, type = wprot;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-           ZEROPAGE: load = ZP, type = zp;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
-</verb></tscreen>
+  <tag><tt>segment</tt></tag>
 
-<tag><tt>plus4</tt></tag>
-<tscreen><verb>
-       MEMORY {
-           ZP: start = $02, size = $1A, type = rw;
-           RAM: start = $0fff, size = $7001, file = %O;
-       }
-       SEGMENTS {
-           CODE: load = RAM, type = wprot;
-           RODATA: load = RAM, type = wprot;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-           ZEROPAGE: load = ZP, type = zp;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
-</verb></tscreen>
+  This attribute tells the linker into which segment the table should be
+  placed. If the segment does not exist, it is created.
 
-<tag><tt>cbm610</tt></tag>
-<tscreen><verb>
-       MEMORY {
-           ZP: start = $02, size = $1A, type = rw;
-           RAM: start = $0001, size = $FFF0, file = %O;
-       }
-       SEGMENTS {
-           CODE: load = RAM, type = wprot;
-           RODATA: load = RAM, type = wprot;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-           ZEROPAGE: load = ZP, type = zp;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
-</verb></tscreen>
 
-<tag><tt>pet</tt></tag>
-<tscreen><verb>
-       MEMORY {
-           ZP: start = $02, size = $1A, type = rw;
-           RAM: start = $03FF, size = $7BFF, file = %O;
-       }
-       SEGMENTS {
-           CODE: load = RAM, type = wprot;
-           RODATA: load = RAM, type = wprot;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-           ZEROPAGE: load = ZP, type = zp;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
-</verb></tscreen>
+  <tag><tt>type</tt></tag>
 
-<tag><tt>apple2</tt></tag>
-<tscreen><verb>
-       MEMORY {
-           ZP: start = $00, size = $1A, type = rw;
-           RAM: start = $800, size = $8E00, file = %O;
-       }
-       SEGMENTS {
-           CODE: load = RAM, type = ro;
-           RODATA: load = RAM, type = ro;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-           ZEROPAGE: load = ZP, type = zp;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
-</verb></tscreen>
+  Describes the type of the routines to place in the table. Type may be
+  one of the predefined types <tt/constructor/ or <tt/destructor/, or a
+  numeric value between 0 and 6.
 
-<tag><tt>geos</tt></tag>
-<tscreen><verb>
-       MEMORY {
-           HEADER: start = $204, size = 508, file = %O;
-           RAM: start = $400, size = $7C00, file = %O;
-       }
-       SEGMENTS {
-           HEADER: load = HEADER, type = ro;
-           CODE: load = RAM, type = ro;
-           RODATA: load = RAM, type = ro;
-           DATA: load = RAM, type = rw;
-           BSS: load = RAM, type = bss, define = yes;
-       }
-       FEATURES {
-           CONDES: segment = RODATA,
-                   type = constructor,
-                   label = __CONSTRUCTOR_TABLE__,
-                   count = __CONSTRUCTOR_COUNT__;
-           CONDES: segment = RODATA,
-                   type = destructor,
-                   label = __DESTRUCTOR_TABLE__,
-                   count = __DESTRUCTOR_COUNT__;
-       }
-</verb></tscreen>
+
+  <tag><tt>label</tt></tag>
+
+  This specifies the label to use for the table. The label points to the
+  start of the table in memory and may be used from within user written
+  code.
+
+
+  <tag><tt>count</tt></tag>
+
+  This is an optional attribute. If specified, an additional symbol is
+  defined by the linker using the given name. The value of this symbol
+  is the number of entries (<em/not/ bytes) in the table. While this
+  attribute is optional, it is often useful to define it.
+
+
+  <tag><tt>order</tt></tag>
+
+  Optional attribute that takes one of the keywords <tt/increasing/ or
+  <tt/decreasing/ as an argument. Specifies the sorting order of the entries
+  within the table. The default is <tt/increasing/, which means that the
+  entries are sorted with increasing priority (the first entry has the lowest
+  priority). "Priority" is the priority specified when declaring a symbol as
+  <tt/.CONDES/ with the assembler, higher values mean higher priority. You may
+  change this behaviour by specifying <tt/decreasing/ as the argument, the
+  order of entries is reversed in this case.
+
+  Please note that the order of entries with equal priority is undefined.
 
 </descrip>
 
-The "<tt/start/" attribute for the <tt/RAM/ memory area of the CBM systems is
-two less than the actual start of the basic RAM to account for the two bytes
-load address that is needed on disk and supplied by the startup code.
+Without specifying the <tt/CONDES/ feature, the linker will not create any
+tables, even if there are <tt/condes/ entries in the object files.
+
+For more information see the <tt/.CONDES/ command in the <htmlurl
+url="ca65.html" name="ca65 manual">.
+
+
+
+<sect1>Builtin configurations<p>
+
+The builtin configurations are part of the linker source. They are also
+distributed together with the machine specific binary packages (usually in the
+doc directory) and don't have a special format. So if you need a special
+configuration, it's a good idea to start with the builtin configuration for
+your system. In a first step, just replace <tt/-t target/ by <tt/-C
+configfile/. The go on and modify the config file to suit your needs.
 
 
 
@@ -844,7 +860,7 @@ name="uz@cc65.org">).
 
 <sect>Copyright<p>
 
-ld65 (and all cc65 binutils) are (C) Copyright 1998-2000 Ullrich von
+ld65 (and all cc65 binutils) are (C) Copyright 1998-2001 Ullrich von
 Bassewitz. For usage of the binaries and/or sources the following
 conditions do apply:
 
@@ -870,4 +886,3 @@ freely, subject to the following restrictions:
 
 
 </article>
-