]> git.sur5r.net Git - cc65/blobdiff - doc/ca65.sgml
Removed the - now unused - empty builtin configuration (was used for the ace
[cc65] / doc / ca65.sgml
index f67ca40cd3a792850f61c5a1a7d22fa9ab94b0d8..eb09a2735299deac03e6b0fa048a287583158cfa 100644 (file)
@@ -3,7 +3,7 @@
 <article>
 <title>ca65 Users Guide
 <author>Ullrich von Bassewitz, <htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">
-<date>19.07.2000, 29.11.2000, 02.10.2001
+<date>2000-07-19, 2000-11-29, 2001-10-02, 2005-09-08
 
 <abstract>
 ca65 is a powerful macro assembler for the 6502, 65C02 and 65816 CPUs. It is
@@ -88,34 +88,37 @@ The assembler accepts the following options:
 Usage: ca65 [options] file
 Short options:
   -D name[=value]      Define a symbol
-  -I dir               Set an include directory search path
-  -U                   Mark unresolved symbols as import
-  -V                   Print the assembler version
-  -W n                 Set warning level n
-  -g                   Add debug info to object file
-  -h                   Help (this text)
-  -i                   Ignore case of symbols
-  -l                   Create a listing if assembly was ok
-  -o name              Name the output file
-  -s                   Enable smart mode
-  -t sys                Set the target system
-  -v                   Increase verbosity
+  -I dir               Set an include directory search path
+  -U                   Mark unresolved symbols as import
+  -V                   Print the assembler version
+  -W n                 Set warning level n
+  -g                   Add debug info to object file
+  -h                   Help (this text)
+  -i                   Ignore case of symbols
+  -l                   Create a listing if assembly was ok
+  -mm model            Set the memory model
+  -o name              Name the output file
+  -s                   Enable smart mode
+  -t sys               Set the target system
+  -v                   Increase verbosity
 
 Long options:
   --auto-import                Mark unresolved symbols as import
-  --cpu type           Set cpu type
+  --cpu type           Set cpu type
   --debug-info         Add debug info to object file
-  --feature name        Set an emulation feature
-  --help               Help (this text)
+  --feature name       Set an emulation feature
+  --help               Help (this text)
   --ignore-case                Ignore case of symbols
   --include-dir dir    Set an include directory search path
-  --list-bytes n        Maximum number of bytes per listing line
-  --listing            Create a listing if assembly was ok
+  --listing            Create a listing if assembly was ok
+  --list-bytes n       Maximum number of bytes per listing line
+  --macpack-dir dir    Set a macro package directory
+  --memory-model model Set the memory model
   --pagelength n       Set the page length for the listing
-  --smart              Enable smart mode
-  --target sys          Set the target system
-  --verbose            Increase verbosity
-  --version            Print the assembler version
+  --smart              Enable smart mode
+  --target sys         Set the target system
+  --verbose            Increase verbosity
+  --version            Print the assembler version
 ---------------------------------------------------------------------------
 </verb></tscreen>
 
@@ -132,7 +135,7 @@ Here is a description of all the command line options:
   Set the default for the CPU type. The option takes a parameter, which
   may be one of
 
-               6502, 65SC02, 65C02, 65816, sunplus, sweet16
+               6502, 65SC02, 65C02, 65816, sunplus, sweet16, HuC6280
 
   The sunplus cpu is not available in the freeware version, because the
   instruction set is "proprietary and confidential".
@@ -188,6 +191,22 @@ Here is a description of all the command line options:
   number of printed bytes.
 
 
+  <tag><tt>--macpack-dir dir</tt></tag>
+
+  This options allows to specify a directory containing macro files that are
+  used instead of the builtin images when a <tt><ref id=".MACPACK"
+  name=".MACPACK"></tt> directive is encountered. If <tt>--macpack-dir</tt>
+  was specified, a <tt>.mac</tt> extension is added to the package name and
+  the resulting file is loaded from the given directory. This is most useful
+  when debugging the builtin macro packages.
+
+
+  <tag><tt>-mm model, --memory-model model</tt></tag>
+
+  Define the default memory model. Possible model specifiers are near, far and
+  huge.
+
+
   <tag><tt>-o name</tt></tag>
 
   The default output name is the name of the input file with the extension
@@ -289,7 +308,7 @@ contain a label (which is identified by a colon), and, in addition to the
 label, an assembler mnemonic, a macro, or a control command (see section <ref
 id="control-commands" name="Control Commands"> for supported control
 commands). Alternatively, the line may contain a symbol definition using
-the '=' token. Everything after a semicolon is handled as a comment (that is, 
+the '=' token. Everything after a semicolon is handled as a comment (that is,
 it is ignored).
 
 Here are some examples for valid input lines:
@@ -334,7 +353,7 @@ mnemonics:
        DEA is an alias for DEC A
         INA is an alias for INC A
        SWA is an alias for XBA
-       TAD is an alias for TCD
+       TAD is an alias for TCD
        TAS is an alias for TCS
        TDA is an alias for TDC
        TSA is an alias for TSC
@@ -494,72 +513,81 @@ problem in most cases.
 
 <sect1>Available operators<label id="operators"><p>
 
-Available operators sorted by precedence:
-
-<tscreen><verb>
-    Op                 Description                             Precedence
-  -------------------------------------------------------------------
-                Builtin string functions                0
-
-                Builtin pseudo variables                1
-                Builtin pseudo functions                       1
-    +                  Unary plus                              1
-    -                  Unary minus                             1
-    ~                  Unary bitwise not                       1
-    .BITNOT            Unary bitwise not                       1
-    &lt;          Low byte operator                       1
-    &gt;          High byte operator                      1
-    ^           Bank byte operator                      1
-
-    *                  Multiplication                          2
-    /                  Division                                2
-    .MOD               Modulo operation                        2
-    &amp;                  Bitwise and                             2
-    .BITAND            Bitwise and                             2
-    ^                  Bitwise xor                             2
-    .BITXOR            Bitwise xor                             2
-    &lt;&lt;                 Shift left operator                     2
-    .SHL               Shift left operator                     2
-    &gt;&gt;                 Shift right operator
-    .SHR               Shift right operator                    2
-
-    +                  Binary plus                             3
-    -                  Binary minus                            3
-    |                  Binary or                               3
-    .BITOR             Binary or                               3
-
-    =                  Compare operation (equal)               4
-    &lt;&gt;         Compare operation (not equal)           4
-    &lt;                  Compare operation (less)                4
-    &gt;                  Compare operation (greater)             4
-    &lt;=                 Compare operation (less or equal)       4
-    &gt;=                 Compare operation (greater or equal)    4
-
-    &amp;&amp;         Boolean and                             5
-    .AND               Boolean and                             5
-    .XOR               Boolean xor                             5
-
-    ||         Boolean or                              6
-    .OR                Boolean or                              6
-
-    !                  Boolean not                             7
-    .NOT               Boolean not                             7
-</verb></tscreen>
-
-
-To force a specific order of evaluation, braces may be used as usual.
-
-<p>
+<table>
+<tabular ca="clc">
+<bf/Operator/| <bf/Description/| <bf/Precedence/@<hline>
+| Built-in string functions| 0@
+||~@
+| Built-in pseudo-variables| 1@
+| Built-in pseudo-functions| 1@
++| Unary positive| 1@
+-| Unary negative| 1@
+&tilde;<newline>
+.BITNOT| Unary bitwise not| 1@
+&lt;<newline>
+.LOBYTE| Unary low-byte operator| 1@
+&gt;<newline>
+.HIBYTE| Unary high-byte operator| 1@
+^<newline>
+.BANKBYTE| Unary bank-byte operator| 1@
+||~@
+*| Multiplication| 2@
+/| Division| 2@
+.MOD| Modulo operator| 2@
+&amp;<newline>
+.BITAND| Bitwise and| 2@
+^<newline>
+.BITXOR| Binary bitwise xor| 2@
+&lt;&lt;<newline>
+.SHL| Shift-left operator| 2@
+&gt;&gt;<newline>
+.SHR| Shift-right operator| 2@
+||~@
++| Binary addition| 3@
+-| Binary subtraction| 3@
+&verbar;<newline>
+.BITOR| Bitwise or| 3@
+||~@
+= | Compare operator (equal)| 4@
+&lt;&gt;| Compare operator (not equal)| 4@
+&lt;| Compare operator (less)| 4@
+&gt;| Compare operator (greater)| 4@
+&lt;=| Compare operator (less or equal)| 4@
+&gt;=| Compare operator (greater or equal)| 4@
+||~@
+&amp;&amp;<newline>
+.AND| Boolean and| 5@
+.XOR| Boolean xor| 5@
+||~@
+&verbar;&verbar;<newline>
+.OR| Boolean or| 6@
+||~@
+!<newline>
+.NOT| Boolean not| 7@<hline>
+</tabular>
+<caption>Available operators, sorted by precedence
+</table>
+
+To force a specific order of evaluation, parentheses may be used, as usual.
 
 
 
 <sect>Symbols and labels<p>
 
+A symbol or label is an identifier that starts with a letter and is followed
+by letters and digits. Depending on some features enabled (see
+<tt><ref id="at_in_identifiers" name="at_in_identifiers"></tt>,
+<tt><ref id="dollar_in_identifiers" name="dollar_in_identifiers"></tt> and
+<tt><ref id="leading_dot_in_identifiers" name="leading_dot_in_identifiers"></tt>)
+other characters may be present. Use of identifiers consisting of a single
+character will not work in all cases, because some of these identifiers are
+reserved keywords (for example "A" is not a valid identifier for a label,
+because it is the keyword for the accumulator).
+
 The assembler allows you to use symbols instead of naked values to make
 the source more readable. There are a lot of different ways to define and
 use symbols and labels, giving a lot of flexibility.
 
-
 <sect1>Numeric constants<p>
 
 Numeric constants are defined using the equal sign or the label assignment
@@ -1711,7 +1739,7 @@ Here's a list of all control commands and a description, what they do:
   when the output file is written, and abort with an error if this is not
   the case. More complex expressions are possible. The action specifier
   <tt/warning/ outputs a warning, while the <tt/error/ specifier outputs
-  an error message. In the latter case, generation if the output file is
+  an error message. In the latter case, generation of the output file is
   suppressed in both the assembler and linker.
 
 
@@ -1739,6 +1767,34 @@ Here's a list of all control commands and a description, what they do:
        .autoimport     +       ; Switch on auto import
   </verb></tscreen>
 
+<sect1><tt>.BANKBYTES</tt><label id=".BANKBYTES"><p>
+
+  Define byte sized data by extracting only the bank byte (that is, bits 16-23) from
+  each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
+  the operator '^' prepended to each expression in its list.
+
+  Example:
+
+  <tscreen><verb>
+        .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
+
+       TableLookupLo:   .lobytes   MyTable
+       TableLookupHi:   .hibytes   MyTable
+       TableLookupBank: .bankbytes MyTable
+  </verb></tscreen>
+
+  which is equivalent to
+
+  <tscreen><verb>
+        TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
+       TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
+       TableLookupBank: .byte ^TableItem0, ^TableItem1, ^TableItem2, ^TableItem3
+  </verb></tscreen>
+
+  See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
+            <tt><ref id=".HIBYTES" name=".HIBYTES"></tt>,
+            <tt><ref id=".LOBYTES" name=".LOBYTES"></tt>
+
 
 <sect1><tt>.BSS</tt><label id=".BSS"><p>
 
@@ -2139,19 +2195,25 @@ Here's a list of all control commands and a description, what they do:
 <sect1><tt>.EXPORT</tt><label id=".EXPORT"><p>
 
   Make symbols accessible from other modules. Must be followed by a comma
-  separated list of symbols to export, with each one optionally followed by
-  an address specification. The default is to export the symbol with the
-  address size it actually has. The assembler will issue a warning, if the
-  symbol is exported with an address size smaller than the actual address
-  size.
+  separated list of symbols to export, with each one optionally followed by an
+  address specification and (also optional) an assignment. Using an additional
+  assignment in the export statement allows to define and export a symbol in
+  one statement. The default is to export the symbol with the address size it
+  actually has. The assembler will issue a warning, if the symbol is exported
+  with an address size smaller than the actual address size.
 
-  Example:
+  Examples:
 
   <tscreen><verb>
        .export foo
         .export bar: far
+        .export foobar: far = foo * bar
+        .export baz := foobar, zap: far = baz - bar
   </verb></tscreen>
 
+  As with constant definitions, using <tt/:=/ instead of <tt/=/ marks the
+  symbols as a label.
+
   See: <tt><ref id=".EXPORTZP" name=".EXPORTZP"></tt>
 
 
@@ -2159,12 +2221,15 @@ Here's a list of all control commands and a description, what they do:
 
   Make symbols accessible from other modules. Must be followed by a comma
   separated list of symbols to export. The exported symbols are explicitly
-  marked as zero page symbols.
+  marked as zero page symbols. An assignment may be included in the
+  <tt/.EXPORTZP/ statement. This allows to define and export a symbol in one
+  statement.
 
-  Example:
+  Examples:
 
   <tscreen><verb>
        .exportzp  foo, bar
+        .exportzp  baz := &dollar;02
   </verb></tscreen>
 
   See: <tt><ref id=".EXPORT" name=".EXPORT"></tt>
@@ -2202,16 +2267,29 @@ Here's a list of all control commands and a description, what they do:
 
   <descrip>
 
-  <tag><tt>at_in_identifiers</tt></tag>
+  <tag><tt>at_in_identifiers</tt><label id="at_in_identifiers"></tag>
 
     Accept the at character (`@') as a valid character in identifiers. The
     at character is not allowed to start an identifier, even with this
     feature enabled.
 
-  <tag><tt>dollar_in_identifiers</tt></tag>
+  <tag><tt>c_comments</tt></tag>
+
+    Allow C like comments using <tt>/*</tt> and <tt>*/</tt> as left and right
+    comment terminators. Note that C comments may not be nested. There's also a
+    pitfall when using C like comments: All statements must be terminated by
+    "end-of-line". Using C like comments, it is possible to hide the newline,
+    which results in error messages. See the following non working example:
+
+    <tscreen><verb>
+        lda     #$00  /* This comment hides the newline
+*/      sta     $82
+    </verb></tscreen>
+
+  <tag><tt>dollar_in_identifiers</tt><label id="dollar_in_identifiers"></tag>
 
     Accept the dollar sign (`&dollar;') as a valid character in identifiers. The
-    at character is not allowed to start an identifier, even with this
+    dollar character is not allowed to start an identifier, even with this
     feature enabled.
 
   <tag><tt>dollar_is_pc</tt></tag>
@@ -2225,7 +2303,7 @@ Here's a list of all control commands and a description, what they do:
     Allow labels without a trailing colon. These labels are only accepted,
     if they start at the beginning of a line (no leading white space).
 
-  <tag><tt>leading_dot_in_identifiers</tt></tag>
+  <tag><tt>leading_dot_in_identifiers</tt><label id="leading_dot_in_identifiers"></tag>
 
     Accept the dot (`.') as the first character of an identifier. This may be
     used for example to create macro names that start with a dot emulating
@@ -2254,6 +2332,13 @@ Here's a list of all control commands and a description, what they do:
     <bf/Note:/ This does not work in conjunction with <tt/.FEATURE
     loose_string_term/, since in this case the input would be ambiguous.
 
+  <tag><tt>org_per_seg</tt><label id="org_per_seg"></tag>
+
+    This feature makes relocatable/absolute mode local to the current segment.
+    Using <tt><ref id=".ORG" name=".ORG"></tt> when <tt/org_per_seg/ is in
+    effect will only enable absolute mode for the current segment. Dito for
+    <tt><ref id=".RELOC" name=".RELOC"></tt>.
+
   <tag><tt>pc_assignment</tt></tag>
 
     Allow assignments to the PC symbol (`*' or `&dollar;' if <tt/dollar_is_pc/
@@ -2367,6 +2452,46 @@ Here's a list of all control commands and a description, what they do:
                .globalzp foo, bar
   </verb></tscreen>
 
+<sect1><tt>.HIBYTES</tt><label id=".HIBYTES"><p>
+
+  Define byte sized data by extracting only the high byte (that is, bits 8-15) from
+  each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
+  the operator '>' prepended to each expression in its list.
+
+  Example:
+
+  <tscreen><verb>
+        .lobytes         $1234, $2345, $3456, $4567
+       .hibytes         $fedc, $edcb, $dcba, $cba9
+  </verb></tscreen>
+
+  which is equivalent to
+
+  <tscreen><verb>
+        .byte            $34, $45, $56, $67
+       .byte            $fe, $ed, $dc, $cb
+  </verb></tscreen>
+
+  Example:
+
+  <tscreen><verb>
+        .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
+
+       TableLookupLo:   .lobytes MyTable
+       TableLookupHi:   .hibytes MyTable
+  </verb></tscreen>
+
+  which is equivalent to
+
+  <tscreen><verb>
+        TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
+       TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
+  </verb></tscreen>
+
+  See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
+            <tt><ref id=".LOBYTES" name=".LOBYTES"></tt>,
+            <tt><ref id=".BANKBYTES" name=".BANKBYTES"></tt>
+
 
 <sect1><tt>.I16</tt><label id=".I16"><p>
 
@@ -2688,6 +2813,47 @@ Here's a list of all control commands and a description, what they do:
   </verb></tscreen>
 
 
+<sect1><tt>.LOBYTES</tt><label id=".LOBYTES"><p>
+
+  Define byte sized data by extracting only the low byte (that is, bits 0-7) from
+  each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
+  the operator '<' prepended to each expression in its list.
+
+  Example:
+
+  <tscreen><verb>
+        .lobytes         $1234, $2345, $3456, $4567
+       .hibytes         $fedc, $edcb, $dcba, $cba9
+  </verb></tscreen>
+
+  which is equivalent to
+
+  <tscreen><verb>
+        .byte            $34, $45, $56, $67
+       .byte            $fe, $ed, $dc, $cb
+  </verb></tscreen>
+
+  Example:
+
+  <tscreen><verb>
+        .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
+
+       TableLookupLo:   .lobytes MyTable
+       TableLookupHi:   .hibytes MyTable
+  </verb></tscreen>
+
+  which is equivalent to
+
+  <tscreen><verb>
+        TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
+       TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
+  </verb></tscreen>
+
+  See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
+            <tt><ref id=".HIBYTES" name=".HIBYTES"></tt>,
+            <tt><ref id=".BANKBYTES" name=".BANKBYTES"></tt>
+
+
 <sect1><tt>.LOCAL</tt><label id=".LOCAL"><p>
 
   This command may only be used inside a macro definition. It declares a
@@ -2740,10 +2906,11 @@ Here's a list of all control commands and a description, what they do:
   packages are:
 
   <tscreen><verb>
+        atari           Defines the scrcode macro.
+        cbm             Defines the scrcode macro.
+        cpu             Defines constants for the .CPU variable.
        generic         Defines generic macros like add and sub.
        longbranch      Defines conditional long jump macros.
-        cbm             Defines the scrcode macro
-        cpu             Defines constants for the .CPU variable
   </verb></tscreen>
 
   Including a macro package twice, or including a macro package that
@@ -2778,12 +2945,14 @@ Here's a list of all control commands and a description, what they do:
   assembled. Use <tt><ref id=".RELOC" name=".RELOC"></tt> to switch back to
   relocatable code.
 
-  Please note that you <em/do not need/ this command in most cases. Placing
+  By default, absolute/relocatable mode is global (valid even when switching
+  segments). Using <tt>.FEATURE <ref id="org_per_seg" name="org_per_seg"></tt>
+  it can be made segment local.
+
+  Please note that you <em/do not need/ <tt/.ORG/ in most cases. Placing
   code at a specific address is the job of the linker, not the assembler, so
   there is usually no reason to assemble code to a specific address.
 
-  You may not switch segments while inside a section of absolute code.
-
   Example:
 
   <tscreen><verb>
@@ -2928,6 +3097,12 @@ Here's a list of all control commands and a description, what they do:
   See: <tt><ref id=".POPSEG" name=".POPSEG"></tt>
 
 
+<sect1><tt>.RELOC</tt><label id=".RELOC"><p>
+
+  Switch back to relocatable mode. See the <tt><ref id=".ORG"
+  name=".ORG"></tt> command.
+
+
 <sect1><tt>.REPEAT</tt><label id=".REPEAT"><p>
 
   Repeat all commands between <tt/.REPEAT/ and <tt><ref id=".ENDREPEAT"
@@ -2958,12 +3133,6 @@ Here's a list of all control commands and a description, what they do:
   See: <tt><ref id=".ENDREPEAT" name=".ENDREPEAT"></tt>
 
 
-<sect1><tt>.RELOC</tt><label id=".RELOC"><p>
-
-  Switch back to relocatable mode. See the <tt><ref id=".ORG"
-  name=".ORG"></tt> command.
-
-
 <sect1><tt>.RES</tt><label id=".RES"><p>
 
   Reserve storage. The command is followed by one or two constant
@@ -3019,7 +3188,7 @@ Here's a list of all control commands and a description, what they do:
                 None = 0                ; No error
                 File = 1                ; File error
                 Parse = 2               ; Parse error
-       .endproc                        ; Close lexical level
+       .endscope                       ; Close lexical level
 
                 ...
                 lda #Error::File        ; Use symbol from scope Error
@@ -3078,10 +3247,10 @@ Here's a list of all control commands and a description, what they do:
   Switch the CPU instruction set. The command is followed by a string that
   specifies the CPU. Possible values are those that can also be supplied to
   the <tt><ref id="option--cpu" name="--cpu"></tt> command line option,
-  namely: 6502, 6502X, 65SC02, 65C02, 65816 and sunplus. Please note that
-  support for the sunplus CPU is not available in the freeware version,
-  because the instruction set of the sunplus CPU is "proprietary and
-  confidential".
+  namely: 6502, 6502X, 65SC02, 65C02, 65816, sunplus and HuC6280. Please
+  note that support for the sunplus CPU is not available in the freeware
+  version, because the instruction set of the sunplus CPU is "proprietary
+  and confidential".
 
   See: <tt><ref id=".CPU" name=".CPU"></tt>,
        <tt><ref id=".IFP02" name=".IFP02"></tt>,
@@ -3698,6 +3867,7 @@ each supported CPU a constant similar to
     CPU_65816
     CPU_SUNPLUS
     CPU_SWEET16
+    CPU_HUC6280
 </verb></tscreen>
 
 is defined. These constants may be used to determine the exact type of the
@@ -3711,6 +3881,7 @@ another constant is defined:
     CPU_ISET_65816
     CPU_ISET_SUNPLUS
     CPU_ISET_SWEET16
+    CPU_ISET_HUC6280
 </verb></tscreen>
 
 The value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable may
@@ -3746,31 +3917,30 @@ For better orthogonality, the assembler defines similar symbols as the
 compiler, depending on the target system selected:
 
 <itemize>
-<item><tt/__ACE__/ - Target system is <tt/ace/
-<item><tt/__APPLE2__",/ - Target system is <tt/apple2/
-<item><tt/__APPLE2ENH__",/ - Target system is <tt/apple2enh/
+<item><tt/__APPLE2__/ - Target system is <tt/apple2/
+<item><tt/__APPLE2ENH__/ - Target system is <tt/apple2enh/
 <item><tt/__ATARI__/ - Target system is <tt/atari/
-<item><tt/__ATMOS__",/ - Target system is <tt/atmos/
-<item><tt/__BBC__",/ - Target system is <tt/bbc/
+<item><tt/__ATMOS__/ - Target system is <tt/atmos/
+<item><tt/__BBC__/ - Target system is <tt/bbc/
 <item><tt/__C128__/ - Target system is <tt/c128/
 <item><tt/__C16__/ - Target system is <tt/c16/
 <item><tt/__C64__/ - Target system is <tt/c64/
 <item><tt/__CBM__/ - Target is a Commodore system
 <item><tt/__CBM510__/ - Target system is <tt/cbm510/
 <item><tt/__CBM610__/ - Target system is <tt/cbm610/
-<item><tt/__GEOS__",/ - Target system is <tt/geos/
-<item><tt/__LUNIX__",/ - Target system is <tt/lunix/
-<item><tt/__NES__",/ - Target system is <tt/nes/
+<item><tt/__GEOS__/ - Target system is <tt/geos/
+<item><tt/__LUNIX__/ - Target system is <tt/lunix/
+<item><tt/__NES__/ - Target system is <tt/nes/
 <item><tt/__PET__/ - Target system is <tt/pet/
 <item><tt/__PLUS4__/ - Target system is <tt/plus4/
-<item><tt/__SUPERVISION__",/ - Target system is <tt/supervision/
+<item><tt/__SUPERVISION__/ - Target system is <tt/supervision/
 <item><tt/__VIC20__/ - Target system is <tt/vic20/
 </itemize>
 
 
 <sect>Structs and unions<label id="structs"><p>
 
-<sect1>Overview<p>
+<sect1>Structs and unions Overview<p>
 
 Structs and unions are special forms of <ref id="scopes" name="scopes">.  They
 are to some degree comparable to their C counterparts. Both have a list of
@@ -3865,7 +4035,7 @@ below uses examples from the C libraries. However, the feature may also be
 useful for assembler programs.
 
 
-<sect1>Overview<p>
+<sect1>Module constructors/destructors Overview<p>
 
 Using the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
 id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
@@ -4013,17 +4183,16 @@ writing new code from scratch.
 
 <item>Replace all program counter assignments (which are not possible in ca65
 by default, and the respective emulation feature works different from what
-you'd expect) by another way to skip to another memory location, for example
-the <tt><ref id=".RES" name=".RES"></tt>directive.
+you'd expect) by another way to skip to memory locations, for example the
+<tt><ref id=".RES" name=".RES"></tt> directive.
 
 <tscreen><verb>
         ; *=$2000
         .res $2000-*    ; reserve memory up to $2000
 </verb></tscreen>
 
-notice that other than the original TASS, ca65 can never move the
-programmcounter backwards - think of it as if you are assembling to disc with
-TASS.
+Please note that other than the original TASS, ca65 can never move the program
+counter backwards - think of it as if you are assembling to disk with TASS.
 
 <item>Conditional assembly (<tt/.ifeq//<tt/.endif//<tt/.goto/ etc.) must be
 rewritten to match ca65 syntax. Most importantly notice that due to the lack
@@ -4048,8 +4217,8 @@ of <tt/.goto/, everything involving loops must be replaced by
         cl65 --start-addr 0x0ffe -t none myprog.s -o myprog.prg
 </verb></tscreen>
 
-notice that you need to use the actual start address minus two, since two
-bytes are used for the cbm load address.
+Note that you need to use the actual start address minus two, since two bytes
+are used for the cbm load address.
 
 </enum>