mirror of
https://github.com/cc65/cc65.git
synced 2025-01-30 12:33:15 +00:00
Document the new ubiquitous_idents feature
git-svn-id: svn://svn.cc65.org/cc65/trunk@2982 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
c3d510a9bc
commit
9b96998e76
150
doc/ca65.sgml
150
doc/ca65.sgml
@ -909,7 +909,58 @@ if you want to access the "other" symbol <tt/bar/, you would have to write:
|
|||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
|
|
||||||
<sect>Address sizes<label id="address-sizes"><p>
|
<sect>Address sizes and memory models<label id="address-sizes"><p>
|
||||||
|
|
||||||
|
<sect1>Address sizes<p>
|
||||||
|
|
||||||
|
ca65 assigns each segment and each symbol an address size. This is true, even
|
||||||
|
if the symbol is not used as an address. You may also think of a value range
|
||||||
|
of the symbol instead of an address size.
|
||||||
|
|
||||||
|
Possible address sizes are:
|
||||||
|
|
||||||
|
<itemize>
|
||||||
|
<item>Zeropage or direct (8 bits)
|
||||||
|
<item>Absolute (16 bits)
|
||||||
|
<item>Far (24 bits)
|
||||||
|
<item>Long (32 bits)
|
||||||
|
<itemize>
|
||||||
|
|
||||||
|
Since the assembler uses default address sizes for the segments and symbols,
|
||||||
|
it is usually not necessary to override the default behaviour. In cases, where
|
||||||
|
it is necessary, the following keywords may be used to specify address sizes:
|
||||||
|
|
||||||
|
<itemize>
|
||||||
|
<item>DIRECT, ZEROPAGE or ZP for zeropage addressing (8 bits).
|
||||||
|
<item>ABSOLUTE, ABS or NEAR for absolute addressing (16 bits).
|
||||||
|
<item>FAR for far addressing (24 bits).
|
||||||
|
<item>LONG or DWORD for long addressing (32 bits).
|
||||||
|
<itemize>
|
||||||
|
|
||||||
|
|
||||||
|
<sect1>Address sizes of segments<p>
|
||||||
|
|
||||||
|
The assembler assigns an address size to each segment. Since the
|
||||||
|
representation of a label within this segment is "segment start + offset",
|
||||||
|
labels will inherit the address size of the segment they are declared in.
|
||||||
|
|
||||||
|
The address size of a segment may be changed, by using an optional address
|
||||||
|
size modifier. See the <tt/<ref id=".SEGMENT" name="segment directive">/ for
|
||||||
|
an explanation on how this is done.
|
||||||
|
|
||||||
|
|
||||||
|
<sect1>Address sizes of symbols<p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<sect1>Memory models<p>
|
||||||
|
|
||||||
|
The default address size of a segment depends on the memory model used. Since
|
||||||
|
labels inherit the address size from the segment they are declared in,
|
||||||
|
changing the memory model is an easy way to change the address size of many
|
||||||
|
symbols at once.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2025,27 +2076,6 @@ Here's a list of all control commands and a description, what they do:
|
|||||||
|
|
||||||
<descrip>
|
<descrip>
|
||||||
|
|
||||||
<tag><tt>dollar_is_pc</tt></tag>
|
|
||||||
|
|
||||||
The dollar sign may be used as an alias for the star (`*'), which
|
|
||||||
gives the value of the current PC in expressions.
|
|
||||||
Note: Assignment to the pseudo variable is not allowed.
|
|
||||||
|
|
||||||
<tag><tt>labels_without_colons</tt></tag>
|
|
||||||
|
|
||||||
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>loose_string_term</tt></tag>
|
|
||||||
|
|
||||||
Accept single quotes as well as double quotes as terminators for string
|
|
||||||
constants.
|
|
||||||
|
|
||||||
<tag><tt>loose_char_term</tt></tag>
|
|
||||||
|
|
||||||
Accept single quotes as well as double quotes as terminators for char
|
|
||||||
constants.
|
|
||||||
|
|
||||||
<tag><tt>at_in_identifiers</tt></tag>
|
<tag><tt>at_in_identifiers</tt></tag>
|
||||||
|
|
||||||
Accept the at character (`@') as a valid character in identifiers. The
|
Accept the at character (`@') as a valid character in identifiers. The
|
||||||
@ -2058,6 +2088,17 @@ Here's a list of all control commands and a description, what they do:
|
|||||||
at character is not allowed to start an identifier, even with this
|
at character is not allowed to start an identifier, even with this
|
||||||
feature enabled.
|
feature enabled.
|
||||||
|
|
||||||
|
<tag><tt>dollar_is_pc</tt></tag>
|
||||||
|
|
||||||
|
The dollar sign may be used as an alias for the star (`*'), which
|
||||||
|
gives the value of the current PC in expressions.
|
||||||
|
Note: Assignment to the pseudo variable is not allowed.
|
||||||
|
|
||||||
|
<tag><tt>labels_without_colons</tt></tag>
|
||||||
|
|
||||||
|
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></tag>
|
||||||
|
|
||||||
Accept the dot (`.') as the first character of an identifier. This may be
|
Accept the dot (`.') as the first character of an identifier. This may be
|
||||||
@ -2067,13 +2108,15 @@ Here's a list of all control commands and a description, what they do:
|
|||||||
overridden. When using this feature, you may also get into trouble if
|
overridden. When using this feature, you may also get into trouble if
|
||||||
later versions of the assembler define new keywords starting with a dot.
|
later versions of the assembler define new keywords starting with a dot.
|
||||||
|
|
||||||
<tag><tt>pc_assignment</tt></tag>
|
<tag><tt>loose_char_term</tt></tag>
|
||||||
|
|
||||||
Allow assignments to the PC symbol (`*' or `$' if <tt/dollar_is_pc/
|
Accept single quotes as well as double quotes as terminators for char
|
||||||
is enabled). Such an assignment is handled identical to the <tt><ref
|
constants.
|
||||||
id=".ORG" name=".ORG"></tt> command (which is usually not needed, so just
|
|
||||||
removing the lines with the assignments may also be an option when porting
|
<tag><tt>loose_string_term</tt></tag>
|
||||||
code written for older assemblers).
|
|
||||||
|
Accept single quotes as well as double quotes as terminators for string
|
||||||
|
constants.
|
||||||
|
|
||||||
<tag><tt>missing_char_term</tt></tag>
|
<tag><tt>missing_char_term</tt></tag>
|
||||||
|
|
||||||
@ -2085,6 +2128,21 @@ 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
|
<bf/Note:/ This does not work in conjunction with <tt/.FEATURE
|
||||||
loose_string_term/, since in this case the input would be ambigous.
|
loose_string_term/, since in this case the input would be ambigous.
|
||||||
|
|
||||||
|
<tag><tt>pc_assignment</tt></tag>
|
||||||
|
|
||||||
|
Allow assignments to the PC symbol (`*' or `$' if <tt/dollar_is_pc/
|
||||||
|
is enabled). Such an assignment is handled identical to the <tt><ref
|
||||||
|
id=".ORG" name=".ORG"></tt> command (which is usually not needed, so just
|
||||||
|
removing the lines with the assignments may also be an option when porting
|
||||||
|
code written for older assemblers).
|
||||||
|
|
||||||
|
<tag><tt>ubiquitous_idents</tt></tag>
|
||||||
|
|
||||||
|
Allow the use of instructions names as names for macros and symbols. This
|
||||||
|
makes it possible to "overload" instructions by defining a macro with the
|
||||||
|
same name. This does also make it possible to introduce hard to find errors
|
||||||
|
in your code, so be careful!
|
||||||
|
|
||||||
</descrip>
|
</descrip>
|
||||||
|
|
||||||
It is also possible to specify features on the command line using the
|
It is also possible to specify features on the command line using the
|
||||||
@ -2823,33 +2881,35 @@ Here's a list of all control commands and a description, what they do:
|
|||||||
(and up to 65534 per executable). There are shortcut commands for
|
(and up to 65534 per executable). There are shortcut commands for
|
||||||
the most common segments ("CODE", "DATA" and "BSS").
|
the most common segments ("CODE", "DATA" and "BSS").
|
||||||
|
|
||||||
The command is followed by a string containing the segment name (there
|
The command is followed by a string containing the segment name (there are
|
||||||
are some constraints for the name - as a rule of thumb use only those
|
some constraints for the name - as a rule of thumb use only those segment
|
||||||
segment names that would also be valid identifiers). There may also be
|
names that would also be valid identifiers). There may also be an optional
|
||||||
an optional attribute separated by a comma. Valid attributes are
|
address size separated by a colon. See the section covering <tt/<ref
|
||||||
"<tt/zeropage/" and "<tt/absolute/".
|
id="address-sizes" name="address sizes">/ for more information.
|
||||||
|
|
||||||
When specifying a segment for the first time, "absolute" is the
|
The default address size for a segment depends on the memory model specified
|
||||||
default. For all other uses, the attribute specified the first time
|
on the command line. The default is "absolute", which means that you don't
|
||||||
is the default.
|
have to use an address size modifier in most cases.
|
||||||
|
|
||||||
"absolute" means that this is a segment with absolute addressing. That
|
"absolute" means that the is a segment with 16 bit (absolute) addressing.
|
||||||
is, the segment will reside somewhere in core memory outside the zero
|
That is, the segment will reside somewhere in core memory outside the zero
|
||||||
page. "zeropage" means the opposite: The segment will be placed in the
|
page. "zeropage" (8 bit) means that the segment will be placed in the zero
|
||||||
zero page and direct (short) addressing is possible for data in this
|
page and direct (short) addressing is possible for data in this segment.
|
||||||
segment.
|
|
||||||
|
|
||||||
Beware: Only labels in a segment with the zeropage attribute are marked
|
Beware: Only labels in a segment with the zeropage attribute are marked
|
||||||
as reachable by short addressing. The `*' (PC counter) operator will
|
as reachable by short addressing. The `*' (PC counter) operator will
|
||||||
work as in other segments and will create absolute variable values.
|
work as in other segments and will create absolute variable values.
|
||||||
|
|
||||||
Example:
|
Please note that a segment cannot have two different address sizes. A
|
||||||
|
segment specified as zeropage cannot be declared as being absolute later.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
.segment "ROM2" ; Switch to ROM2 segment
|
.segment "ROM2" ; Switch to ROM2 segment
|
||||||
.segment "ZP2", zeropage ; New direct segment
|
.segment "ZP2": zeropage ; New direct segment
|
||||||
.segment "ZP2" ; Ok, will use last attribute
|
.segment "ZP2" ; Ok, will use last attribute
|
||||||
.segment "ZP2", absolute ; Error, redecl mismatch
|
.segment "ZP2": absolute ; Error, redecl mismatch
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
See: <tt><ref id=".BSS" name=".BSS"></tt>, <tt><ref id=".CODE"
|
See: <tt><ref id=".BSS" name=".BSS"></tt>, <tt><ref id=".CODE"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user