]> git.sur5r.net Git - cc65/blob - doc/ca65.sgml
Fix order of command line arguments: -o should precede -C or -t.
[cc65] / doc / ca65.sgml
1 <!doctype linuxdoc system>
2
3 <article>
4 <title>ca65 Users Guide
5 <author>Ullrich von Bassewitz, <htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">
6 <date>2000-07-19, 2000-11-29, 2001-10-02, 2005-09-08
7
8 <abstract>
9 ca65 is a powerful macro assembler for the 6502, 65C02 and 65816 CPUs. It is
10 used as a companion assembler for the cc65 crosscompiler, but it may also be
11 used as a standalone product.
12 </abstract>
13
14 <!-- Table of contents -->
15 <toc>
16
17 <!-- Begin the document -->
18
19 <sect>Overview<p>
20
21 ca65 is a replacement for the ra65 assembler that was part of the cc65 C
22 compiler, originally developed by John R. Dunning. I had some problems with
23 ra65 and the copyright does not permit some things which I wanted to be
24 possible, so I decided to write a completely new assembler/linker/archiver
25 suite for the cc65 compiler. ca65 is part of this suite.
26
27 Some parts of the assembler (code generation and some routines for symbol
28 table handling) are taken from an older crossassembler named a816 written
29 by me a long time ago.
30
31
32 <sect1>Design criteria<p>
33
34 Here's a list of the design criteria, that I considered important for the
35 development:
36
37 <itemize>
38
39 <item>  The assembler must support macros. Macros are not essential, but they
40         make some things easier, especially when you use the assembler in the
41         backend of a compiler.
42 <item>  The assembler must support the newer 65C02 and 65816 CPUs. I have been
43         thinking about a 65816 backend for the C compiler, and even my old
44         a816 assembler had support for these CPUs, so this wasn't really a
45         problem.
46 <item>  The assembler must produce relocatable code. This is necessary for the
47         compiler support, and it is more convenient.
48 <item>  Conditional assembly must be supported. This is a must for bigger
49         projects written in assembler (like Elite128).
50 <item>  The assembler must support segments, and it must support more than
51         three segments (this is the count, most other assemblers support).
52         Having more than one code segments helps developing code for systems
53         with a divided ROM area (like the C64).
54 <item>  The linker must be able to resolve arbitrary expressions. It should
55         be able to get things like
56 <tscreen><verb>
57         .import S1, S2
58         .export Special
59         Special = 2*S1 + S2/7
60 </verb></tscreen>
61         right.
62 <item>  True lexical nesting for symbols. This is very convenient for larger
63         assembly projects.
64 <item>  "Cheap" local symbols without lexical nesting for those quick, late
65         night hacks.
66 <item>  I liked the idea of "options" as Anre Fachats .o65 format has it, so I
67         introduced the concept into the object file format use by the new cc65
68         binutils.
69 <item>  The assembler will be a one pass assembler. There was no real need for
70         this decision, but I've written several multipass assemblers, and it
71         started to get boring. A one pass assembler needs much more elaborated
72         data structures, and because of that it's much more fun:-)
73 <item>  Non-GPLed code that may be used in any project without restrictions or
74         fear of "GPL infecting" other code.
75 </itemize>
76 <p>
77
78
79 <sect>Usage<p>
80
81
82 <sect1>Command line option overview<p>
83
84 The assembler accepts the following options:
85
86 <tscreen><verb>
87 ---------------------------------------------------------------------------
88 Usage: ca65 [options] file
89 Short options:
90   -D name[=value]               Define a symbol
91   -I dir                        Set an include directory search path
92   -U                            Mark unresolved symbols as import
93   -V                            Print the assembler version
94   -W n                          Set warning level n
95   -g                            Add debug info to object file
96   -h                            Help (this text)
97   -i                            Ignore case of symbols
98   -l                            Create a listing if assembly was ok
99   -mm model                     Set the memory model
100   -o name                       Name the output file
101   -s                            Enable smart mode
102   -t sys                        Set the target system
103   -v                            Increase verbosity
104
105 Long options:
106   --auto-import                 Mark unresolved symbols as import
107   --bin-include-dir dir         Set a search path for binary includes
108   --cpu type                    Set cpu type
109   --create-dep name             Create a make dependency file
110   --create-full-dep name        Create a full make dependency file
111   --debug-info                  Add debug info to object file
112   --feature name                Set an emulation feature
113   --forget-inc-paths            Forget include search paths
114   --help                        Help (this text)
115   --ignore-case                 Ignore case of symbols
116   --include-dir dir             Set an include directory search path
117   --listing                     Create a listing if assembly was ok
118   --list-bytes n                Maximum number of bytes per listing line
119   --macpack-dir dir             Set a macro package directory
120   --memory-model model          Set the memory model
121   --pagelength n                Set the page length for the listing
122   --smart                       Enable smart mode
123   --target sys                  Set the target system
124   --verbose                     Increase verbosity
125   --version                     Print the assembler version
126 ---------------------------------------------------------------------------
127 </verb></tscreen>
128
129
130 <sect1>Command line options in detail<p>
131
132 Here is a description of all the command line options:
133
134 <descrip>
135
136   <label id="option--bin-include-dir">
137   <tag><tt>--bin-include-dir dir</tt></tag>
138
139   Name a directory which is searched for binary include files. The option
140   may be used more than once to specify more than one directory to search. The
141   current directory is always searched first before considering any
142   additional directories. See also the section about <ref id="search-paths"
143   name="search paths">.
144
145
146   <label id="option--cpu">
147   <tag><tt>--cpu type</tt></tag>
148
149   Set the default for the CPU type. The option takes a parameter, which
150   may be one of
151
152         6502, 65SC02, 65C02, 65816, sunplus, sweet16, HuC6280
153
154   The sunplus cpu is not available in the freeware version, because the
155   instruction set is "proprietary and confidential".
156
157
158   <label id="option-create-dep">
159   <tag><tt>--create-dep name</tt></tag>
160
161   Tells the assembler to generate a file containing the dependency list for
162   the assembled module in makefile syntax. The output is written to a file
163   with the given name. The output does not include files passed via debug
164   information to the assembler.
165
166
167   <label id="option-create-full-dep">
168   <tag><tt>--create-full-dep name</tt></tag>
169
170   Tells the assembler to generate a file containing the dependency list for
171   the assembled module in makefile syntax. The output is written to a file
172   with the given name. The output does include files passed via debug
173   information to the assembler.
174
175
176   <label id="option--feature">
177   <tag><tt>--feature name</tt></tag>
178
179   Enable an emulation feature. This is identical as using <tt/.FEATURE/
180   in the source with two exceptions: Feature names must be lower case, and
181   each feature must be specified by using an extra <tt/--feature/ option,
182   comma separated lists are not allowed.
183
184   See the discussion of the <tt><ref id=".FEATURE" name=".FEATURE"></tt>
185   command for a list of emulation features.
186
187
188   <label id="option--forget-inc-paths">
189   <tag><tt>--forget-inc-paths</tt></tag>
190
191   Forget the builtin include paths. This is most useful when building
192   customized assembler modules, in which case the standard header files should
193   be ignored.
194
195
196   <label id="option-g">
197   <tag><tt>-g, --debug-info</tt></tag>
198
199   When this option (or the equivalent control command <tt/.DEBUGINFO/) is
200   used, the assembler will add a section to the object file that contains
201   all symbols (including local ones) together with the symbol values and
202   source file positions. The linker will put these additional symbols into
203   the VICE label file, so even local symbols can be seen in the VICE
204   monitor.
205
206
207   <label id="option-h">
208   <tag><tt>-h, --help</tt></tag>
209
210   Print the short option summary shown above.
211
212
213   <label id="option-i">
214   <tag><tt>-i, --ignore-case</tt></tag>
215
216   This option makes the assembler case insensitive on identifiers and labels.
217   This option will override the default, but may itself be overridden by the
218   <tt><ref id=".CASE" name=".CASE"></tt> control command.
219
220
221   <label id="option-l">
222   <tag><tt>-l, --listing</tt></tag>
223
224   Generate an assembler listing. The listing file will always have the
225   name of the main input file with the extension replaced by ".lst". This
226   may change in future versions.
227
228
229   <label id="option--list-bytes">
230   <tag><tt>--list-bytes n</tt></tag>
231
232   Set the maximum number of bytes printed in the listing for one line of
233   input. See the <tt><ref id=".LISTBYTES" name=".LISTBYTES"></tt> directive
234   for more information. The value zero can be used to encode an unlimited
235   number of printed bytes.
236
237
238   <label id="option--macpack-dir">
239   <tag><tt>--macpack-dir dir</tt></tag>
240
241   This options allows to specify a directory containing macro files that are
242   used instead of the builtin images when a <tt><ref id=".MACPACK"
243   name=".MACPACK"></tt> directive is encountered. If <tt>--macpack-dir</tt>
244   was specified, a <tt>.mac</tt> extension is added to the package name and
245   the resulting file is loaded from the given directory. This is most useful
246   when debugging the builtin macro packages.
247
248
249   <label id="option-mm">
250   <tag><tt>-mm model, --memory-model model</tt></tag>
251
252   Define the default memory model. Possible model specifiers are near, far and
253   huge.
254
255
256   <label id="option-o">
257   <tag><tt>-o name</tt></tag>
258
259   The default output name is the name of the input file with the extension
260   replaced by ".o". If you don't like that, you may give another name with
261   the -o option. The output file will be placed in the same directory as
262   the source file, or, if -o is given, the full path in this name is used.
263
264
265   <label id="option--pagelength">
266   <tag><tt>--pagelength n</tt></tag>
267
268   sets the length of a listing page in lines. See the <tt><ref
269   id=".PAGELENGTH" name=".PAGELENGTH"></tt> directive for more information.
270
271
272   <label id="option-s">
273   <tag><tt>-s, --smart-mode</tt></tag>
274
275   In smart mode (enabled by -s or the <tt><ref id=".SMART" name=".SMART"></tt>
276   pseudo instruction) the assembler will track usage of the <tt/REP/ and
277   <tt/SEP/ instructions in 65816 mode and update the operand sizes
278   accordingly. If the operand of such an instruction cannot be evaluated by
279   the assembler (for example, because the operand is an imported symbol), a
280   warning is issued.
281
282   Beware: Since the assembler cannot trace the execution flow this may
283   lead to false results in some cases. If in doubt, use the .ixx and .axx
284   instructions to tell the assembler about the current settings. Smart
285   mode is off by default.
286
287
288   <label id="option-t">
289   <tag><tt>-t sys, --target sys</tt></tag>
290
291   Set the target system. This will enable translation of character strings
292   and character constants into the character set of the target platform.
293   The default for the target system is "none", which means that no translation
294   will take place. The assembler supports the same target systems as the
295   compiler, see there for a list.
296
297
298   <label id="option-v">
299   <tag><tt>-v, --verbose</tt></tag>
300
301   Increase the assembler verbosity. Usually only needed for debugging
302   purposes. You may use this option more than one time for even more
303   verbose output.
304
305
306   <label id="option-D">
307   <tag><tt>-D</tt></tag>
308
309   This option allows you to define symbols on the command line. Without a
310   value, the symbol is defined with the value zero. When giving a value,
311   you may use the '&dollar;' prefix for hexadecimal symbols. Please note
312   that for some operating systems, '&dollar;' has a special meaning, so
313   you may have to quote the expression.
314
315
316   <label id="option-I">
317   <tag><tt>-I dir, --include-dir dir</tt></tag>
318
319   Name a directory which is searched for include files. The option may be
320   used more than once to specify more than one directory to search. The
321   current directory is always searched first before considering any
322   additional directories. See also the section about <ref id="search-paths"
323   name="search paths">.
324
325
326   <label id="option-U">
327   <tag><tt>-U, --auto-import</tt></tag>
328
329   Mark symbols that are not defined in the sources as imported symbols. This
330   should be used with care since it delays error messages about typos and such
331   until the linker is run. The compiler uses the equivalent of this switch
332   (<tt><ref id=".AUTOIMPORT" name=".AUTOIMPORT"></tt>) to enable auto imported
333   symbols for the runtime library. However, the compiler is supposed to
334   generate code that runs through the assembler without problems, something
335   which is not always true for assembler programmers.
336
337
338   <label id="option-V">
339   <tag><tt>-V, --version</tt></tag>
340
341   Print the version number of the assembler. If you send any suggestions
342   or bugfixes, please include the version number.
343
344
345   <label id="option-W">
346   <tag><tt>-Wn</tt></tag>
347
348   Set the warning level for the assembler. Using -W2 the assembler will
349   even warn about such things like unused imported symbols. The default
350   warning level is 1, and it would probably be silly to set it to
351   something lower.
352
353 </descrip>
354 <p>
355
356
357
358 <sect>Search paths<label id="search-paths"><p>
359
360 Normal include files are searched in the following places:
361
362 <enum>
363 <item>The current directory.
364 <item>A compiled-in directory, which is often <tt>/usr/lib/cc65/asminc</tt>
365       on Linux systems.
366 <item>The value of the environment variable <tt/CA65_INC/ if it is defined.
367 <item>A subdirectory named <tt/asminc/ of the directory defined in the
368       environment variable <tt/CC65_HOME/, if it is defined.
369 <item>Any directory added with the <tt/<ref id="option-I" name="-I">/ option
370 on the command line.
371 </enum>
372
373 Binary include files are searched in the following places:
374
375 <enum>
376 <item>The current directory.
377 <item>Any directory added with the <tt/<ref id="option--bin-include-dir"
378 name="--bin-include-dir">/ option on the command line.
379 </enum>
380
381
382
383 <sect>Input format<p>
384
385 <sect1>Assembler syntax<p>
386
387 The assembler accepts the standard 6502/65816 assembler syntax. One line may
388 contain a label (which is identified by a colon), and, in addition to the
389 label, an assembler mnemonic, a macro, or a control command (see section <ref
390 id="control-commands" name="Control Commands"> for supported control
391 commands). Alternatively, the line may contain a symbol definition using
392 the '=' token. Everything after a semicolon is handled as a comment (that is,
393 it is ignored).
394
395 Here are some examples for valid input lines:
396
397 <tscreen><verb>
398         Label:                          ; A label and a comment
399                 lda     #$20            ; A 6502 instruction plus comment
400         L1:     ldx     #$20            ; Same with label
401         L2:     .byte   "Hello world"   ; Label plus control command
402                 mymac   $20             ; Macro expansion
403                 MySym = 3*L1            ; Symbol definition
404         MaSym   = Label                 ; Another symbol
405 </verb></tscreen>
406
407 The assembler accepts
408
409 <itemize>
410 <item>all valid 6502 mnemonics when in 6502 mode (the default or after the
411       <tt><ref id=".P02" name=".P02"></tt> command was given).
412 <item>all valid 6502 mnemonics plus a set of illegal instructions when in
413       <ref id="6502X-mode" name="6502X mode">.
414 <item>all valid 65SC02 mnemonics when in 65SC02 mode (after the
415       <tt><ref id=".PSC02" name=".PSC02"></tt> command was given).
416 <item>all valid 65C02 mnemonics when in 65C02 mode (after the
417       <tt><ref id=".PC02" name=".PC02"></tt> command was given).
418 <item>all valid 65618 mnemonics when in 65816 mode (after the
419       <tt><ref id=".P816" name=".P816"></tt> command was given).
420 <item>all valid SunPlus mnemonics when in SunPlus mode (after the
421       <tt><ref id=".SUNPLUS" name=".SUNPLUS"></tt> command was given).
422 </itemize>
423
424
425 <sect1>65816 mode<p>
426
427 In 65816 mode several aliases are accepted in addition to the official
428 mnemonics:
429
430 <tscreen><verb>
431         BGE is an alias for BCS
432         BLT is an alias for BCC
433         CPA is an alias for CMP
434         DEA is an alias for DEC A
435         INA is an alias for INC A
436         SWA is an alias for XBA
437         TAD is an alias for TCD
438         TAS is an alias for TCS
439         TDA is an alias for TDC
440         TSA is an alias for TSC
441 </verb></tscreen>
442
443
444
445 <sect1>6502X mode<label id="6502X-mode"><p>
446
447 6502X mode is an extension to the normal 6502 mode. In this mode, several
448 mnemonics for illegal instructions of the NMOS 6502 CPUs are accepted. Since
449 these instructions are illegal, there are no official mnemonics for them. The
450 unofficial ones are taken from <htmlurl
451 url="http://oxyron.net/graham/opcodes02.html"
452 name="http://oxyron.net/graham/opcodes02.html">. Please note that only the
453 ones marked as "stable" are supported. The following table uses information
454 from the mentioned web page, for more information, see there.
455
456 <itemize>
457 <item><tt>ALR: A:=(A and #{imm})*2;</tt>
458 <item><tt>ANC: A:=A and #{imm};</tt> Generates opcode &dollar;0B.
459 <item><tt>ARR: A:=(A and #{imm})/2;</tt>
460 <item><tt>AXS: X:=A and X-#{imm};</tt>
461 <item><tt>DCP: {adr}:={adr}-1; A-{adr};</tt>
462 <item><tt>ISC: {adr}:={adr}+1; A:=A-{adr};</tt>
463 <item><tt>LAS: A,X,S:={adr} and S;</tt>
464 <item><tt>LAX: A,X:={adr};</tt>
465 <item><tt>RLA: {adr}:={adr}rol; A:=A and {adr};</tt>
466 <item><tt>RRA: {adr}:={adr}ror; A:=A adc {adr};</tt>
467 <item><tt>SAX: {adr}:=A and X;</tt>
468 <item><tt>SLO: {adr}:={adr}*2; A:=A or {adr};</tt>
469 <item><tt>SRE: {adr}:={adr}/2; A:=A xor {adr};</tt>
470 </itemize>
471
472
473
474 <sect1>sweet16 mode<label id="sweet16-mode"><p>
475
476 SWEET 16 is an interpreter for a pseudo 16 bit CPU written by Steve Wozniak
477 for the Apple ][ machines. It is available in the Apple ][ ROM. ca65 can
478 generate code for this pseudo CPU when switched into sweet16 mode. The
479 following is special in sweet16 mode:
480
481 <itemize>
482
483 <item>The '@' character denotes indirect addressing and is no longer available
484 for cheap local labels. If you need cheap local labels, you will have to
485 switch to another lead character using the <tt/<ref id=".LOCALCHAR"
486 name=".LOCALCHAR">/ command.
487
488 <item>Registers are specified using <tt/R0/ .. <tt/R15/. In sweet16 mode,
489 these identifiers are reserved words.
490
491 </itemize>
492
493 Please note that the assembler does neither supply the interpreter needed for
494 SWEET 16 code, nor the zero page locations needed for the SWEET 16 registers,
495 nor does it call the interpreter. All this must be done by your program. Apple
496 ][ programmers do probably know how to use sweet16 mode.
497
498 For more information about SWEET 16, see
499 <htmlurl url="http://www.6502.org/source/interpreters/sweet16.htm"
500 name="http://www.6502.org/source/interpreters/sweet16.htm">.
501
502
503 <sect1>Number format<p>
504
505 For literal values, the assembler accepts the widely used number formats: A
506 preceding '&dollar;' or a trailing 'h' denotes a hex value, a preceding '%'
507 denotes a binary value, and a bare number is interpreted as a decimal. There
508 are currently no octal values and no floats.
509
510
511 <sect1>Conditional assembly<p>
512
513 Please note that when using the conditional directives (<tt/.IF/ and friends),
514 the input must consist of valid assembler tokens, even in <tt/.IF/ branches
515 that are not assembled. The reason for this behaviour is that the assembler
516 must still be able to detect the ending tokens (like <tt/.ENDIF/), so
517 conversion of the input stream into tokens still takes place. As a consequence
518 conditional assembly directives may <bf/not/ be used to prevent normal text
519 (used as a comment or similar) from being assembled. <p>
520
521
522 <sect>Expressions<p>
523
524
525 <sect1>Expression evaluation<p>
526
527 All expressions are evaluated with (at least) 32 bit precision. An
528 expression may contain constant values and any combination of internal and
529 external symbols. Expressions that cannot be evaluated at assembly time
530 are stored inside the object file for evaluation by the linker.
531 Expressions referencing imported symbols must always be evaluated by the
532 linker.
533
534
535 <sect1>Size of an expression result<p>
536
537 Sometimes, the assembler must know about the size of the value that is the
538 result of an expression. This is usually the case, if a decision has to be
539 made, to generate a zero page or an absolute memory references. In this
540 case, the assembler has to make some assumptions about the result of an
541 expression:
542
543 <itemize>
544 <item>  If the result of an expression is constant, the actual value is
545         checked to see if it's a byte sized expression or not.
546 <item>  If the expression is explicitly casted to a byte sized expression by
547         one of the '&gt;', '&lt;' or '^' operators, it is a byte expression.
548 <item>  If this is not the case, and the expression contains a symbol,
549         explicitly declared as zero page symbol (by one of the .importzp or
550         .exportzp instructions), then the whole expression is assumed to be
551         byte sized.
552 <item>  If the expression contains symbols that are not defined, and these
553         symbols are local symbols, the enclosing scopes are searched for a
554         symbol with the same name. If one exists and this symbol is defined,
555         it's attributes are used to determine the result size.
556 <item>  In all other cases the expression is assumed to be word sized.
557 </itemize>
558
559 Note: If the assembler is not able to evaluate the expression at assembly
560 time, the linker will evaluate it and check for range errors as soon as
561 the result is known.
562
563
564 <sect1>Boolean expressions<p>
565
566 In the context of a boolean expression, any non zero value is evaluated as
567 true, any other value to false. The result of a boolean expression is 1 if
568 it's true, and zero if it's false. There are boolean operators with extreme
569 low precedence with version 2.x (where x &gt; 0). The <tt/.AND/ and <tt/.OR/
570 operators are shortcut operators. That is, if the result of the expression is
571 already known, after evaluating the left hand side, the right hand side is
572 not evaluated.
573
574
575 <sect1>Constant expressions<p>
576
577 Sometimes an expression must evaluate to a constant without looking at any
578 further input. One such example is the <tt/<ref id=".IF" name=".IF">/ command
579 that decides if parts of the code are assembled or not. An expression used in
580 the <tt/.IF/ command cannot reference a symbol defined later, because the
581 decision about the <tt/.IF/ must be made at the point when it is read. If the
582 expression used in such a context contains only constant numerical values,
583 there is no problem. When unresolvable symbols are involved it may get harder
584 for the assembler to determine if the expression is actually constant, and it
585 is even possible to create expressions that aren't recognized as constant.
586 Simplifying the expressions will often help.
587
588 In cases where the result of the expression is not needed immediately, the
589 assembler will delay evaluation until all input is read, at which point all
590 symbols are known. So using arbitrary complex constant expressions is no
591 problem in most cases.
592
593
594
595 <sect1>Available operators<label id="operators"><p>
596
597 <table>
598 <tabular ca="clc">
599 <bf/Operator/| <bf/Description/| <bf/Precedence/@<hline>
600 | Built-in string functions| 0@
601 ||~@
602 | Built-in pseudo-variables| 1@
603 | Built-in pseudo-functions| 1@
604 +| Unary positive| 1@
605 -| Unary negative| 1@
606 &tilde;<newline>
607 .BITNOT| Unary bitwise not| 1@
608 &lt;<newline>
609 .LOBYTE| Unary low-byte operator| 1@
610 &gt;<newline>
611 .HIBYTE| Unary high-byte operator| 1@
612 ^<newline>
613 .BANKBYTE| Unary bank-byte operator| 1@
614 ||~@
615 *| Multiplication| 2@
616 /| Division| 2@
617 .MOD| Modulo operator| 2@
618 &amp;<newline>
619 .BITAND| Bitwise and| 2@
620 ^<newline>
621 .BITXOR| Binary bitwise xor| 2@
622 &lt;&lt;<newline>
623 .SHL| Shift-left operator| 2@
624 &gt;&gt;<newline>
625 .SHR| Shift-right operator| 2@
626 ||~@
627 +| Binary addition| 3@
628 -| Binary subtraction| 3@
629 &verbar;<newline>
630 .BITOR| Bitwise or| 3@
631 ||~@
632 = | Compare operator (equal)| 4@
633 &lt;&gt;| Compare operator (not equal)| 4@
634 &lt;| Compare operator (less)| 4@
635 &gt;| Compare operator (greater)| 4@
636 &lt;=| Compare operator (less or equal)| 4@
637 &gt;=| Compare operator (greater or equal)| 4@
638 ||~@
639 &amp;&amp;<newline>
640 .AND| Boolean and| 5@
641 .XOR| Boolean xor| 5@
642 ||~@
643 &verbar;&verbar;<newline>
644 .OR| Boolean or| 6@
645 ||~@
646 !<newline>
647 .NOT| Boolean not| 7@<hline>
648 </tabular>
649 <caption>Available operators, sorted by precedence
650 </table>
651
652 To force a specific order of evaluation, parentheses may be used, as usual.
653
654
655
656 <sect>Symbols and labels<p>
657
658 A symbol or label is an identifier that starts with a letter and is followed
659 by letters and digits. Depending on some features enabled (see
660 <tt><ref id="at_in_identifiers" name="at_in_identifiers"></tt>,
661 <tt><ref id="dollar_in_identifiers" name="dollar_in_identifiers"></tt> and
662 <tt><ref id="leading_dot_in_identifiers" name="leading_dot_in_identifiers"></tt>)
663 other characters may be present. Use of identifiers consisting of a single
664 character will not work in all cases, because some of these identifiers are
665 reserved keywords (for example "A" is not a valid identifier for a label,
666 because it is the keyword for the accumulator).
667
668 The assembler allows you to use symbols instead of naked values to make
669 the source more readable. There are a lot of different ways to define and
670 use symbols and labels, giving a lot of flexibility.
671
672 <sect1>Numeric constants<p>
673
674 Numeric constants are defined using the equal sign or the label assignment
675 operator. After doing
676
677 <tscreen><verb>
678       two = 2
679 </verb></tscreen>
680
681 may use the symbol "two" in every place where a number is expected, and it is
682 evaluated to the value 2 in this context. The label assignment operator causes
683 the same, but causes the symbol to be marked as a label, which may cause a
684 different handling in the debugger:
685
686 <tscreen><verb>
687       io := $d000
688 </verb></tscreen>
689
690 The right side can of course be an expression:
691
692 <tscreen><verb>
693       four = two * two
694 </verb></tscreen>
695
696
697 <sect1>Standard labels<p>
698
699 A label is defined by writing the name of the label at the start of the line
700 (before any instruction mnemonic, macro or pseudo directive), followed by a
701 colon. This will declare a symbol with the given name and the value of the
702 current program counter.
703
704
705 <sect1>Local labels and symbols<p>
706
707 Using the <tt><ref id=".PROC" name=".PROC"></tt> directive, it is possible to
708 create regions of code where the names of labels and symbols are local to this
709 region. They are not known outside of this region and cannot be accessed from
710 there. Such regions may be nested like PROCEDUREs in Pascal.
711
712 See the description of the <tt><ref id=".PROC" name=".PROC"></tt>
713 directive for more information.
714
715
716 <sect1>Cheap local labels<p>
717
718 Cheap local labels are defined like standard labels, but the name of the
719 label must begin with a special symbol (usually '@', but this can be
720 changed by the <tt><ref id=".LOCALCHAR" name=".LOCALCHAR"></tt>
721 directive).
722
723 Cheap local labels are visible only between two non cheap labels. As soon as a
724 standard symbol is encountered (this may also be a local symbol if inside a
725 region defined with the <tt><ref id=".PROC" name=".PROC"></tt> directive), the
726 cheap local symbol goes out of scope.
727
728 You may use cheap local labels as an easy way to reuse common label
729 names like "Loop". Here is an example:
730
731 <tscreen><verb>
732         Clear:  lda    #$00             ; Global label
733                 ldy    #$20
734         @Loop:  sta    Mem,y            ; Local label
735                 dey
736                 bne    @Loop            ; Ok
737                 rts
738         Sub:    ...                     ; New global label
739                 bne    @Loop            ; ERROR: Unknown identifier!
740 </verb></tscreen>
741
742 <sect1>Unnamed labels<p>
743
744 If you really want to write messy code, there are also unnamed labels. These
745 labels do not have a name (you guessed that already, didn't you?). A colon is
746 used to mark the absence of the name.
747
748 Unnamed labels may be accessed by using the colon plus several minus or plus
749 characters as a label designator. Using the '-' characters will create a back
750 reference (use the n'th label backwards), using '+' will create a forward
751 reference (use the n'th label in forward direction). An example will help to
752 understand this:
753
754 <tscreen><verb>
755         :       lda     (ptr1),y        ; #1
756                 cmp     (ptr2),y
757                 bne     :+              ; -> #2
758                 tax
759                 beq     :+++            ; -> #4
760                 iny
761                 bne     :-              ; -> #1
762                 inc     ptr1+1
763                 inc     ptr2+1
764                 bne     :-              ; -> #1
765
766         :       bcs     :+              ; #2 -> #3
767                 ldx     #$FF
768                 rts
769
770         :       ldx     #$01            ; #3
771         :       rts                     ; #4
772 </verb></tscreen>
773
774 As you can see from the example, unnamed labels will make even short
775 sections of code hard to understand, because you have to count labels
776 to find branch targets (this is the reason why I for my part do
777 prefer the "cheap" local labels). Nevertheless, unnamed labels are
778 convenient in some situations, so it's your decision.
779
780
781 <sect1>Using macros to define labels and constants<p>
782
783 While there are drawbacks with this approach, it may be handy in some
784 situations. Using <tt><ref id=".DEFINE" name=".DEFINE"></tt>, it is
785 possible to define symbols or constants that may be used elsewhere. Since
786 the macro facility works on a very low level, there is no scoping. On the
787 other side, you may also define string constants this way (this is not
788 possible with the other symbol types).
789
790 Example:
791
792 <tscreen><verb>
793         .DEFINE two     2
794         .DEFINE version "SOS V2.3"
795
796         four = two * two        ; Ok
797         .byte   version         ; Ok
798
799         .PROC                   ; Start local scope
800         two = 3                 ; Will give "2 = 3" - invalid!
801         .ENDPROC
802 </verb></tscreen>
803
804
805 <sect1>Symbols and <tt>.DEBUGINFO</tt><p>
806
807 If <tt><ref id=".DEBUGINFO" name=".DEBUGINFO"></tt> is enabled (or <ref
808 id="option-g" name="-g"> is given on the command line), global, local and
809 cheap local labels are written to the object file and will be available in the
810 symbol file via the linker. Unnamed labels are not written to the object file,
811 because they don't have a name which would allow to access them.
812
813
814
815 <sect>Scopes<label id="scopes"><p>
816
817 ca65 implements several sorts of scopes for symbols.
818
819 <sect1>Global scope<p>
820
821 All (non cheap local) symbols that are declared outside of any nested scopes
822 are in global scope.
823
824
825 <sect1>Cheap locals<p>
826
827 A special scope is the scope for cheap local symbols. It lasts from one non
828 local symbol to the next one, without any provisions made by the programmer.
829 All other scopes differ in usage but use the same concept internally.
830
831
832 <sect1>Generic nested scopes<p>
833
834 A nested scoped for generic use is started with <tt/<ref id=".SCOPE"
835 name=".SCOPE">/ and closed with <tt/<ref id=".ENDSCOPE" name=".ENDSCOPE">/.
836 The scope can have a name, in which case it is accessible from the outside by
837 using <ref id="scopesyntax" name="explicit scopes">. If the scope does not
838 have a name, all symbols created within the scope are local to the scope, and
839 aren't accessible from the outside.
840
841 A nested scope can access symbols from the local or from enclosing scopes by
842 name without using explicit scope names. In some cases there may be
843 ambiguities, for example if there is a reference to a local symbol that is not
844 yet defined, but a symbol with the same name exists in outer scopes:
845
846 <tscreen><verb>
847         .scope  outer
848                 foo     = 2
849                 .scope  inner
850                         lda     #foo
851                         foo     = 3
852                 .endscope
853         .endscope
854 </verb></tscreen>
855
856 In the example above, the <tt/lda/ instruction will load the value 3 into the
857 accumulator, because <tt/foo/ is redefined in the scope. However:
858
859 <tscreen><verb>
860         .scope  outer
861                 foo     = $1234
862                 .scope  inner
863                         lda     foo,x
864                         foo     = $12
865                 .endscope
866         .endscope
867 </verb></tscreen>
868
869 Here, <tt/lda/ will still load from <tt/$12,x/, but since it is unknown to the
870 assembler that <tt/foo/ is a zeropage symbol when translating the instruction,
871 absolute mode is used instead. In fact, the assembler will not use absolute
872 mode by default, but it will search through the enclosing scopes for a symbol
873 with the given name. If one is found, the address size of this symbol is used.
874 This may lead to errors:
875
876 <tscreen><verb>
877         .scope  outer
878                 foo     = $12
879                 .scope  inner
880                         lda     foo,x
881                         foo     = $1234
882                 .endscope
883         .endscope
884 </verb></tscreen>
885
886 In this case, when the assembler sees the symbol <tt/foo/ in the <tt/lda/
887 instruction, it will search for an already defined symbol <tt/foo/. It will
888 find <tt/foo/ in scope <tt/outer/, and a close look reveals that it is a
889 zeropage symbol. So the assembler will use zeropage addressing mode. If
890 <tt/foo/ is redefined later in scope <tt/inner/, the assembler tries to change
891 the address in the <tt/lda/ instruction already translated, but since the new
892 value needs absolute addressing mode, this fails, and an error message "Range
893 error" is output.
894
895 Of course the most simple solution for the problem is to move the definition
896 of <tt/foo/ in scope <tt/inner/ upwards, so it precedes its use. There may be
897 rare cases when this cannot be done. In these cases, you can use one of the
898 address size override operators:
899
900 <tscreen><verb>
901         .scope  outer
902                 foo     = $12
903                 .scope  inner
904                         lda     a:foo,x
905                         foo     = $1234
906                 .endscope
907         .endscope
908 </verb></tscreen>
909
910 This will cause the <tt/lda/ instruction to be translated using absolute
911 addressing mode, which means changing the symbol reference later does not
912 cause any errors.
913
914
915 <sect1>Nested procedures<p>
916
917 A nested procedure is created by use of <tt/<ref id=".PROC" name=".PROC">/. It
918 differs from a <tt/<ref id=".SCOPE" name=".SCOPE">/ in that it must have a
919 name, and a it will introduce a symbol with this name in the enclosing scope.
920 So
921
922 <tscreen><verb>
923         .proc   foo
924                 ...
925         .endproc
926 </verb></tscreen>
927
928 is actually the same as
929
930 <tscreen><verb>
931         foo:
932         .scope  foo
933                 ...
934         .endscope
935 </verb></tscreen>
936
937 This is the reason why a procedure must have a name. If you want a scope
938 without a name, use <tt/<ref id=".SCOPE" name=".SCOPE">/.
939
940 <bf/Note:/ As you can see from the example above, scopes and symbols live in
941 different namespaces. There can be a symbol named <tt/foo/ and a scope named
942 <tt/foo/ without any conflicts (but see the section titled <ref
943 id="scopesearch" name="&quot;Scope search order&quot;">).
944
945
946 <sect1>Structs, unions and enums<p>
947
948 Structs, unions and enums are explained in a <ref id="structs" name="separate
949 section">, I do only cover them here, because if they are declared with a
950 name, they open a nested scope, similar to <tt/<ref id=".SCOPE"
951 name=".SCOPE">/. However, when no name is specified, the behaviour is
952 different: In this case, no new scope will be opened, symbols declared within
953 a struct, union, or enum declaration will then be added to the enclosing scope
954 instead.
955
956
957 <sect1>Explicit scope specification<label id="scopesyntax"><p>
958
959 Accessing symbols from other scopes is possible by using an explicit scope
960 specification, provided that the scope where the symbol lives in has a name.
961 The namespace token (<tt/::/) is used to access other scopes:
962
963 <tscreen><verb>
964         .scope  foo
965         bar:    .word   0
966         .endscope
967
968                 ...
969                 lda     foo::bar        ; Access foo in scope bar
970 </verb></tscreen>
971
972 The only way to deny access to a scope from the outside is to declare a scope
973 without a name (using the <tt/<ref id=".SCOPE" name=".SCOPE">/ command).
974
975 A special syntax is used to specify the global scope: If a symbol or scope is
976 preceded by the namespace token, the global scope is searched:
977
978 <tscreen><verb>
979         bar     = 3
980
981         .scope  foo
982                 bar     = 2
983                 lda     #::bar  ; Access the global bar (which is 3)
984         .endscope
985 </verb></tscreen>
986
987
988 <sect1>Scope search order<label id="scopesearch"><p>
989
990 The assembler searches for a scope in a similar way as for a symbol. First, it
991 looks in the current scope, and then it walks up the enclosing scopes until
992 the scope is found.
993
994 However, one important thing to note when using explicit scope syntax is, that
995 a symbol may be accessed before it is defined, but a scope may <bf/not/ be
996 used without a preceding definition. This means that in the following
997 example:
998
999 <tscreen><verb>
1000         .scope  foo
1001                 bar     = 3
1002         .endscope
1003
1004         .scope  outer
1005                 lda     #foo::bar  ; Will load 3, not 2!
1006                 .scope  foo
1007                         bar     = 2
1008                 .endscope
1009         .endscope
1010 </verb></tscreen>
1011
1012 the reference to the scope <tt/foo/ will use the global scope, and not the
1013 local one, because the local one is not visible at the point where it is
1014 referenced.
1015
1016 Things get more complex if a complete chain of scopes is specified:
1017
1018 <tscreen><verb>
1019         .scope  foo
1020                 .scope  outer
1021                         .scope  inner
1022                                 bar = 1
1023                         .endscope
1024                 .endscope
1025                 .scope  another
1026                         .scope  nested
1027                                 lda     #outer::inner::bar      ; 1
1028                         .endscope
1029                 .endscope
1030         .endscope
1031
1032         .scope  outer
1033                 .scope  inner
1034                         bar = 2
1035                 .endscope
1036         .endscope
1037 </verb></tscreen>
1038
1039 When <tt/outer::inner::bar/ is referenced in the <tt/lda/ instruction, the
1040 assembler will first search in the local scope for a scope named <tt/outer/.
1041 Since none is found, the enclosing scope (<tt/another/) is checked. There is
1042 still no scope named <tt/outer/, so scope <tt/foo/ is checked, and finally
1043 scope <tt/outer/ is found. Within this scope, <tt/inner/ is searched, and in
1044 this scope, the assembler looks for a symbol named <tt/bar/.
1045
1046 Please note that once the anchor scope is found, all following scopes
1047 (<tt/inner/ in this case) are expected to be found exactly in this scope. The
1048 assembler will search the scope tree only for the first scope (if it is not
1049 anchored in the root scope). Starting from there on, there is no flexibility,
1050 so if the scope named <tt/outer/ found by the assembler does not contain a
1051 scope named <tt/inner/, this would be an error, even if such a pair does exist
1052 (one level up in global scope).
1053
1054 Ambiguities that may be introduced by this search algorithm may be removed by
1055 anchoring the scope specification in the global scope. In the example above,
1056 if you want to access the "other" symbol <tt/bar/, you would have to write:
1057
1058 <tscreen><verb>
1059         .scope  foo
1060                 .scope  outer
1061                         .scope  inner
1062                                 bar = 1
1063                         .endscope
1064                 .endscope
1065                 .scope  another
1066                         .scope  nested
1067                                 lda     #::outer::inner::bar    ; 2
1068                         .endscope
1069                 .endscope
1070         .endscope
1071
1072         .scope  outer
1073                 .scope  inner
1074                         bar = 2
1075                 .endscope
1076         .endscope
1077 </verb></tscreen>
1078
1079
1080 <sect>Address sizes and memory models<label id="address-sizes"><p>
1081
1082 <sect1>Address sizes<p>
1083
1084 ca65 assigns each segment and each symbol an address size. This is true, even
1085 if the symbol is not used as an address. You may also think of a value range
1086 of the symbol instead of an address size.
1087
1088 Possible address sizes are:
1089
1090 <itemize>
1091 <item>Zeropage or direct (8 bits)
1092 <item>Absolute (16 bits)
1093 <item>Far (24 bits)
1094 <item>Long (32 bits)
1095 </itemize>
1096
1097 Since the assembler uses default address sizes for the segments and symbols,
1098 it is usually not necessary to override the default behaviour. In cases, where
1099 it is necessary, the following keywords may be used to specify address sizes:
1100
1101 <itemize>
1102 <item>DIRECT, ZEROPAGE or ZP for zeropage addressing (8 bits).
1103 <item>ABSOLUTE, ABS or NEAR for absolute addressing (16 bits).
1104 <item>FAR for far addressing (24 bits).
1105 <item>LONG or DWORD for long addressing (32 bits).
1106 </itemize>
1107
1108
1109 <sect1>Address sizes of segments<p>
1110
1111 The assembler assigns an address size to each segment. Since the
1112 representation of a label within this segment is "segment start + offset",
1113 labels will inherit the address size of the segment they are declared in.
1114
1115 The address size of a segment may be changed, by using an optional address
1116 size modifier. See the <tt/<ref id=".SEGMENT" name="segment directive">/ for
1117 an explanation on how this is done.
1118
1119
1120 <sect1>Address sizes of symbols<p>
1121
1122
1123
1124
1125 <sect1>Memory models<p>
1126
1127 The default address size of a segment depends on the memory model used. Since
1128 labels inherit the address size from the segment they are declared in,
1129 changing the memory model is an easy way to change the address size of many
1130 symbols at once.
1131
1132
1133
1134
1135 <sect>Pseudo variables<label id="pseudo-variables"><p>
1136
1137 Pseudo variables are readable in all cases, and in some special cases also
1138 writable.
1139
1140 <sect1><tt>*</tt><p>
1141
1142   Reading this pseudo variable will return the program counter at the start
1143   of the current input line.
1144
1145   Assignment to this variable is possible when <tt/<ref id=".FEATURE"
1146   name=".FEATURE pc_assignment">/ is used. Note: You should not use
1147   assignments to <tt/*/, use <tt/<ref id=".ORG" name=".ORG">/ instead.
1148
1149
1150 <sect1><tt>.CPU</tt><label id=".CPU"><p>
1151
1152   Reading this pseudo variable will give a constant integer value that
1153   tells which CPU is currently enabled. It can also tell which instruction
1154   set the CPU is able to translate. The value read from the pseudo variable
1155   should be further examined by using one of the constants defined by the
1156   "cpu" macro package (see <tt/<ref id=".MACPACK" name=".MACPACK">/).
1157
1158   It may be used to replace the .IFPxx pseudo instructions or to construct
1159   even more complex expressions.
1160
1161   Example:
1162
1163   <tscreen><verb>
1164         .macpack        cpu
1165         .if     (.cpu .bitand CPU_ISET_65816)
1166                 phx
1167                 phy
1168         .else
1169                 txa
1170                 pha
1171                 tya
1172                 pha
1173         .endif
1174   </verb></tscreen>
1175
1176
1177 <sect1><tt>.PARAMCOUNT</tt><label id=".PARAMCOUNT"><p>
1178
1179   This builtin pseudo variable is only available in macros. It is replaced by
1180   the actual number of parameters that were given in the macro invocation.
1181
1182   Example:
1183
1184   <tscreen><verb>
1185         .macro  foo     arg1, arg2, arg3
1186         .if     .paramcount <> 3
1187         .error  "Too few parameters for macro foo"
1188         .endif
1189         ...
1190         .endmacro
1191   </verb></tscreen>
1192
1193   See section <ref id="macros" name="Macros">.
1194
1195
1196 <sect1><tt>.TIME</tt><label id=".TIME"><p>
1197
1198   Reading this pseudo variable will give a constant integer value that
1199   represents the current time in POSIX standard (as seconds since the
1200   Epoch).
1201
1202   It may be used to encode the time of translation somewhere in the created
1203   code.
1204
1205   Example:
1206
1207   <tscreen><verb>
1208         .dword  .time   ; Place time here
1209   </verb></tscreen>
1210
1211
1212 <sect1><tt>.VERSION</tt><label id=".VERSION"><p>
1213
1214   Reading this pseudo variable will give the assembler version according to
1215   the following formula:
1216
1217         VER_MAJOR*$100 + VER_MINOR*$10 + VER_PATCH
1218
1219   It may be used to encode the assembler version or check the assembler for
1220   special features not available with older versions.
1221
1222   Example:
1223
1224   Version 2.11.1 of the assembler will return $2B1 as numerical constant when
1225   reading the pseudo variable <tt/.VERSION/.
1226
1227
1228
1229 <sect>Pseudo functions<label id="pseudo-functions"><p>
1230
1231 Pseudo functions expect their arguments in parenthesis, and they have a result,
1232 either a string or an expression.
1233
1234
1235 <sect1><tt>.BANKBYTE</tt><label id=".BANKBYTE"><p>
1236
1237   The function returns the bank byte (that is, bits 16-23) of its argument.
1238   It works identical to the '^' operator.
1239
1240   See: <tt><ref id=".HIBYTE" name=".HIBYTE"></tt>,
1241        <tt><ref id=".LOBYTE" name=".LOBYTE"></tt>
1242
1243
1244 <sect1><tt>.BLANK</tt><label id=".BLANK"><p>
1245
1246   Builtin function. The function evaluates its argument in braces and yields
1247   "false" if the argument is non blank (there is an argument), and "true" if
1248   there is no argument.  The token list that makes up the function argument
1249   may optionally be enclosed in curly braces. This allows the inclusion of
1250   tokens that would otherwise terminate the list (the closing right
1251   parenthesis). The curly braces are not considered part of the list, a list
1252   just consisting of curly braces is considered to be empty.
1253
1254   As an example, the <tt/.IFBLANK/ statement may be replaced by
1255
1256   <tscreen><verb>
1257         .if     .blank({arg})
1258   </verb></tscreen>
1259
1260
1261
1262 <sect1><tt>.CONCAT</tt><label id=".CONCAT"><p>
1263
1264   Builtin string function. The function allows to concatenate a list of string
1265   constants separated by commas. The result is a string constant that is the
1266   concatenation of all arguments. This function is most useful in macros and
1267   when used together with the <tt/.STRING/ builtin function. The function may
1268   be used in any case where a string constant is expected.
1269
1270   Example:
1271
1272   <tscreen><verb>
1273         .include        .concat ("myheader", ".", "inc")
1274   </verb></tscreen>
1275
1276   This is the same as the command
1277
1278   <tscreen><verb>
1279         .include        "myheader.inc"
1280   </verb></tscreen>
1281
1282
1283 <sect1><tt>.CONST</tt><label id=".CONST"><p>
1284
1285   Builtin function. The function evaluates its argument in braces and
1286   yields "true" if the argument is a constant expression (that is, an
1287   expression that yields a constant value at assembly time) and "false"
1288   otherwise. As an example, the .IFCONST statement may be replaced by
1289
1290   <tscreen><verb>
1291         .if     .const(a + 3)
1292   </verb></tscreen>
1293
1294
1295 <sect1><tt>.HIBYTE</tt><label id=".HIBYTE"><p>
1296
1297   The function returns the high byte (that is, bits 8-15) of its argument.
1298   It works identical to the '>' operator.
1299
1300   See: <tt><ref id=".LOBYTE" name=".LOBYTE"></tt>,
1301        <tt><ref id=".BANKBYTE" name=".BANKBYTE"></tt>
1302
1303
1304 <sect1><tt>.HIWORD</tt><label id=".HIWORD"><p>
1305
1306   The function returns the high word (that is, bits 16-31) of its argument.
1307
1308   See: <tt><ref id=".LOWORD" name=".LOWORD"></tt>
1309
1310
1311 <sect1><tt>.IDENT</tt><label id=".IDENT"><p>
1312
1313   The function expects a string as its argument, and converts this argument
1314   into an identifier. If the string starts with the current <tt/<ref
1315   id=".LOCALCHAR" name=".LOCALCHAR">/, it will be converted into a cheap local
1316   identifier, otherwise it will be converted into a normal identifier.
1317
1318   Example:
1319
1320   <tscreen><verb>
1321         .macro  makelabel       arg1, arg2
1322                 .ident (.concat (arg1, arg2)):
1323         .endmacro
1324
1325                 makelabel       "foo", "bar"
1326
1327                 .word           foobar          ; Valid label
1328   </verb></tscreen>
1329
1330
1331 <sect1><tt>.LEFT</tt><label id=".LEFT"><p>
1332
1333   Builtin function. Extracts the left part of a given token list.
1334
1335   Syntax:
1336
1337   <tscreen><verb>
1338         .LEFT (&lt;int expr&gt;, &lt;token list&gt;)
1339   </verb></tscreen>
1340
1341   The first integer expression gives the number of tokens to extract from
1342   the token list. The second argument is the token list itself. The token
1343   list may optionally be enclosed into curly braces. This allows the
1344   inclusion of tokens that would otherwise terminate the list (the closing
1345   right paren in the given case).
1346
1347   Example:
1348
1349   To check in a macro if the given argument has a '#' as first token
1350   (immediate addressing mode), use something like this:
1351
1352   <tscreen><verb>
1353         .macro  ldax    arg
1354                 ...
1355                 .if (.match (.left (1, {arg}), #))
1356
1357                 ; ldax called with immediate operand
1358                 ...
1359
1360                 .endif
1361                 ...
1362         .endmacro
1363   </verb></tscreen>
1364
1365   See also the <tt><ref id=".MID" name=".MID"></tt> and <tt><ref id=".RIGHT"
1366   name=".RIGHT"></tt> builtin functions.
1367
1368
1369 <sect1><tt>.LOBYTE</tt><label id=".LOBYTE"><p>
1370
1371   The function returns the low byte (that is, bits 0-7) of its argument.
1372   It works identical to the '<' operator.
1373
1374   See: <tt><ref id=".HIBYTE" name=".HIBYTE"></tt>,
1375        <tt><ref id=".BANKBYTE" name=".BANKBYTE"></tt>
1376
1377
1378 <sect1><tt>.LOWORD</tt><label id=".LOWORD"><p>
1379
1380   The function returns the low word (that is, bits 0-15) of its argument.
1381
1382   See: <tt><ref id=".HIWORD" name=".HIWORD"></tt>
1383
1384
1385 <sect1><tt>.MATCH</tt><label id=".MATCH"><p>
1386
1387   Builtin function. Matches two token lists against each other. This is
1388   most useful within macros, since macros are not stored as strings, but
1389   as lists of tokens.
1390
1391   The syntax is
1392
1393   <tscreen><verb>
1394         .MATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
1395   </verb></tscreen>
1396
1397   Both token list may contain arbitrary tokens with the exception of the
1398   terminator token (comma resp. right parenthesis) and
1399
1400   <itemize>
1401   <item>end-of-line
1402   <item>end-of-file
1403   </itemize>
1404
1405   The token lists may optionally be enclosed into curly braces. This allows
1406   the inclusion of tokens that would otherwise terminate the list (the closing
1407   right paren in the given case). Often a macro parameter is used for any of
1408   the token lists.
1409
1410   Please note that the function does only compare tokens, not token
1411   attributes. So any number is equal to any other number, regardless of the
1412   actual value. The same is true for strings. If you need to compare tokens
1413   <em/and/ token attributes, use the <tt><ref id=".XMATCH"
1414   name=".XMATCH"></tt> function.
1415
1416   Example:
1417
1418   Assume the macro <tt/ASR/, that will shift right the accumulator by one,
1419   while honoring the sign bit. The builtin processor instructions will allow
1420   an optional "A" for accu addressing for instructions like <tt/ROL/ and
1421   <tt/ROR/. We will use the <tt><ref id=".MATCH" name=".MATCH"></tt> function
1422   to check for this and print and error for invalid calls.
1423
1424   <tscreen><verb>
1425         .macro  asr     arg
1426
1427                 .if (.not .blank(arg)) .and (.not .match ({arg}, a))
1428                 .error "Syntax error"
1429                 .endif
1430
1431                 cmp     #$80            ; Bit 7 into carry
1432                 lsr     a               ; Shift carry into bit 7
1433
1434         .endmacro
1435   </verb></tscreen>
1436
1437   The macro will only accept no arguments, or one argument that must be the
1438   reserved keyword "A".
1439
1440   See: <tt><ref id=".XMATCH" name=".XMATCH"></tt>
1441
1442
1443 <sect1><tt>.MAX</tt><label id=".MAX"><p>
1444
1445   Builtin function. The result is the larger of two values.
1446
1447   The syntax is
1448
1449   <tscreen><verb>
1450         .MAX (&lt;value #1&gt;, &lt;value #2&gt;)
1451   </verb></tscreen>
1452
1453   Example:
1454
1455   <tscreen><verb>
1456         ; Reserve space for the larger of two data blocks
1457         savearea:       .max (.sizeof (foo), .sizeof (bar))
1458   </verb></tscreen>
1459
1460   See: <tt><ref id=".MIN" name=".MIN"></tt>
1461
1462
1463 <sect1><tt>.MID</tt><label id=".MID"><p>
1464
1465   Builtin function. Takes a starting index, a count and a token list as
1466   arguments. Will return part of the token list.
1467
1468   Syntax:
1469
1470   <tscreen><verb>
1471         .MID (&lt;int expr&gt;, &lt;int expr&gt;, &lt;token list&gt;)
1472   </verb></tscreen>
1473
1474   The first integer expression gives the starting token in the list (the first
1475   token has index 0). The second integer expression gives the number of tokens
1476   to extract from the token list. The third argument is the token list itself.
1477   The token list may optionally be enclosed into curly braces. This allows the
1478   inclusion of tokens that would otherwise terminate the list (the closing
1479   right paren in the given case).
1480
1481   Example:
1482
1483   To check in a macro if the given argument has a '<tt/#/' as first token
1484   (immediate addressing mode), use something like this:
1485
1486     <tscreen><verb>
1487         .macro  ldax    arg
1488                 ...
1489                 .if (.match (.mid (0, 1, {arg}), #))
1490
1491                 ; ldax called with immediate operand
1492                 ...
1493
1494                 .endif
1495                 ...
1496         .endmacro
1497   </verb></tscreen>
1498
1499   See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".RIGHT"
1500   name=".RIGHT"></tt> builtin functions.
1501
1502
1503 <sect1><tt>.MIN</tt><label id=".MIN"><p>
1504
1505   Builtin function. The result is the smaller of two values.
1506
1507   The syntax is
1508
1509   <tscreen><verb>
1510         .MIN (&lt;value #1&gt;, &lt;value #2&gt;)
1511   </verb></tscreen>
1512
1513   Example:
1514
1515   <tscreen><verb>
1516         ; Reserve space for some data, but 256 bytes minimum
1517         savearea:       .min (.sizeof (foo), 256)
1518   </verb></tscreen>
1519
1520   See: <tt><ref id=".MAX" name=".MAX"></tt>
1521
1522
1523 <sect1><tt>.REF, .REFERENCED</tt><label id=".REFERENCED"><p>
1524
1525   Builtin function. The function expects an identifier as argument in braces.
1526   The argument is evaluated, and the function yields "true" if the identifier
1527   is a symbol that has already been referenced somewhere in the source file up
1528   to the current position. Otherwise the function yields false. As an example,
1529   the <tt><ref id=".IFREF" name=".IFREF"></tt> statement may be replaced by
1530
1531   <tscreen><verb>
1532         .if     .referenced(a)
1533   </verb></tscreen>
1534
1535   See: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
1536
1537
1538 <sect1><tt>.RIGHT</tt><label id=".RIGHT"><p>
1539
1540   Builtin function. Extracts the right part of a given token list.
1541
1542   Syntax:
1543
1544   <tscreen><verb>
1545         .RIGHT (&lt;int expr&gt;, &lt;token list&gt;)
1546   </verb></tscreen>
1547
1548   The first integer expression gives the number of tokens to extract from the
1549   token list. The second argument is the token list itself.  The token list
1550   may optionally be enclosed into curly braces. This allows the inclusion of
1551   tokens that would otherwise terminate the list (the closing right paren in
1552   the given case).
1553
1554   See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".MID"
1555   name=".MID"></tt> builtin functions.
1556
1557
1558 <sect1><tt>.SIZEOF</tt><label id=".SIZEOF"><p>
1559
1560   <tt/.SIZEOF/ is a pseudo function that returns the size of its argument. The
1561   argument can be a struct/union, a struct member, a procedure, or a label. In
1562   case of a procedure or label, its size is defined by the amount of data
1563   placed in the segment where the label is relative to. If a line of code
1564   switches segments (for example in a macro) data placed in other segments
1565   does not count for the size.
1566
1567   Please note that a symbol or scope must exist, before it is used together with
1568   <tt/.SIZEOF/ (this may get relaxed later, but will always be true for scopes).
1569   A scope has preference over a symbol with the same name, so if the last part
1570   of a name represents both, a scope and a symbol, the scope is chosen over the
1571   symbol.
1572
1573   After the following code:
1574
1575   <tscreen><verb>
1576         .struct Point                   ; Struct size = 4
1577                 xcoord  .word
1578                 xcoord  .word
1579         .endstruct
1580
1581         P:      .tag    Point           ; Declare a point
1582         @P:     .tag    Point           ; Declare another point
1583
1584         .code
1585         .proc   Code
1586                 nop
1587                 .proc   Inner
1588                         nop
1589                 .endproc
1590                 nop
1591         .endproc
1592
1593         .proc   Data
1594         .data                           ; Segment switch!!!
1595                 .res    4
1596         .endproc
1597   </verb></tscreen>
1598
1599   <descrip>
1600     <tag><tt/.sizeof(Point)/</tag>
1601     will have the value 4, because this is the size of struct <tt/Point/.
1602
1603     <tag><tt/.sizeof(Point::xcoord)/</tag>
1604     will have the value 2, because this is the size of the member <tt/xcoord/
1605     in struct <tt/Point/.
1606
1607     <tag><tt/.sizeof(P)/</tag>
1608     will have the value 4, this is the size of the data declared on the same
1609     source line as the label <tt/P/, which is in the same segment that <tt/P/
1610     is relative to.
1611
1612     <tag><tt/.sizeof(@P)/</tag>
1613     will have the value 4, see above. The example demonstrates that <tt/.SIZEOF/
1614     does also work for cheap local symbols.
1615
1616     <tag><tt/.sizeof(Code)/</tag>
1617     will have the value 3, since this is amount of data emitted into the code
1618     segment, the segment that was active when <tt/Code/ was entered. Note that
1619     this value includes the amount of data emitted in child scopes (in this
1620     case <tt/Code::Inner/).
1621
1622     <tag><tt/.sizeof(Code::Inner)/</tag>
1623     will have the value 1 as expected.
1624
1625     <tag><tt/.sizeof(Data)/</tag>
1626     will have the value 0. Data is emitted within the scope <tt/Data/, but since
1627     the segment is switched after entry, this data is emitted into another
1628     segment.
1629   </descrip>
1630
1631
1632 <sect1><tt>.STRAT</tt><label id=".STRAT"><p>
1633
1634   Builtin function. The function accepts a string and an index as
1635   arguments and returns the value of the character at the given position
1636   as an integer value. The index is zero based.
1637
1638   Example:
1639
1640   <tscreen><verb>
1641         .macro  M       Arg
1642                 ; Check if the argument string starts with '#'
1643                 .if (.strat (Arg, 0) = '#')
1644                 ...
1645                 .endif
1646         .endmacro
1647   </verb></tscreen>
1648
1649
1650 <sect1><tt>.SPRINTF</tt><label id=".SPRINTF"><p>
1651
1652   Builtin function. It expects a format string as first argument. The number
1653   and type of the following arguments depend on the format string. The format
1654   string is similar to the one of the C <tt/printf/ function. Missing things
1655   are: Length modifiers, variable width.
1656
1657   The result of the function is a string.
1658
1659   Example:
1660
1661   <tscreen><verb>
1662         num     = 3
1663
1664         ; Generate an identifier:
1665         .ident (.sprintf ("%s%03d", "label", num)):
1666   </verb></tscreen>
1667
1668
1669 <sect1><tt>.STRING</tt><label id=".STRING"><p>
1670
1671   Builtin function. The function accepts an argument in braces and converts
1672   this argument into a string constant. The argument may be an identifier, or
1673   a constant numeric value.
1674
1675   Since you can use a string in the first place, the use of the function may
1676   not be obvious. However, it is useful in macros, or more complex setups.
1677
1678   Example:
1679
1680   <tscreen><verb>
1681         ; Emulate other assemblers:
1682         .macro  section name
1683                 .segment        .string(name)
1684         .endmacro
1685   </verb></tscreen>
1686
1687
1688 <sect1><tt>.STRLEN</tt><label id=".STRLEN"><p>
1689
1690   Builtin function. The function accepts a string argument in braces and
1691   evaluates to the length of the string.
1692
1693   Example:
1694
1695   The following macro encodes a string as a pascal style string with
1696   a leading length byte.
1697
1698   <tscreen><verb>
1699         .macro  PString Arg
1700                 .byte   .strlen(Arg), Arg
1701         .endmacro
1702   </verb></tscreen>
1703
1704
1705 <sect1><tt>.TCOUNT</tt><label id=".TCOUNT"><p>
1706
1707   Builtin function. The function accepts a token list in braces. The function
1708   result is the number of tokens given as argument. The token list may
1709   optionally be enclosed into curly braces which are not considered part of
1710   the list and not counted. Enclosement in curly braces allows the inclusion
1711   of tokens that would otherwise terminate the list (the closing right paren
1712   in the given case).
1713
1714   Example:
1715
1716   The <tt/ldax/ macro accepts the '#' token to denote immediate addressing (as
1717   with the normal 6502 instructions). To translate it into two separate 8 bit
1718   load instructions, the '#' token has to get stripped from the argument:
1719
1720   <tscreen><verb>
1721         .macro  ldax    arg
1722                 .if (.match (.mid (0, 1, {arg}), #))
1723                 ; ldax called with immediate operand
1724                 lda     #<(.right (.tcount ({arg})-1, {arg}))
1725                 ldx     #>(.right (.tcount ({arg})-1, {arg}))
1726                 .else
1727                 ...
1728                 .endif
1729         .endmacro
1730   </verb></tscreen>
1731
1732
1733 <sect1><tt>.XMATCH</tt><label id=".XMATCH"><p>
1734
1735   Builtin function. Matches two token lists against each other. This is
1736   most useful within macros, since macros are not stored as strings, but
1737   as lists of tokens.
1738
1739   The syntax is
1740
1741   <tscreen><verb>
1742         .XMATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
1743   </verb></tscreen>
1744
1745   Both token list may contain arbitrary tokens with the exception of the
1746   terminator token (comma resp. right parenthesis) and
1747
1748   <itemize>
1749   <item>end-of-line
1750   <item>end-of-file
1751   </itemize>
1752
1753   The token lists may optionally be enclosed into curly braces. This allows
1754   the inclusion of tokens that would otherwise terminate the list (the closing
1755   right paren in the given case). Often a macro parameter is used for any of
1756   the token lists.
1757
1758   The function compares tokens <em/and/ token values. If you need a function
1759   that just compares the type of tokens, have a look at the <tt><ref
1760   id=".MATCH" name=".MATCH"></tt> function.
1761
1762   See: <tt><ref id=".MATCH" name=".MATCH"></tt>
1763
1764
1765
1766 <sect>Control commands<label id="control-commands"><p>
1767
1768 Here's a list of all control commands and a description, what they do:
1769
1770
1771 <sect1><tt>.A16</tt><label id=".A16"><p>
1772
1773   Valid only in 65816 mode. Switch the accumulator to 16 bit.
1774
1775   Note: This command will not emit any code, it will tell the assembler to
1776   create 16 bit operands for immediate accumulator addressing mode.
1777
1778   See also: <tt><ref id=".SMART" name=".SMART"></tt>
1779
1780
1781 <sect1><tt>.A8</tt><label id=".A8"><p>
1782
1783   Valid only in 65816 mode. Switch the accumulator to 8 bit.
1784
1785   Note: This command will not emit any code, it will tell the assembler to
1786   create 8 bit operands for immediate accu addressing mode.
1787
1788   See also: <tt><ref id=".SMART" name=".SMART"></tt>
1789
1790
1791 <sect1><tt>.ADDR</tt><label id=".ADDR"><p>
1792
1793   Define word sized data. In 6502 mode, this is an alias for <tt/.WORD/ and
1794   may be used for better readability if the data words are address values. In
1795   65816 mode, the address is forced to be 16 bit wide to fit into the current
1796   segment. See also <tt><ref id=".FARADDR" name=".FARADDR"></tt>. The command
1797   must be followed by a sequence of (not necessarily constant) expressions.
1798
1799   Example:
1800
1801   <tscreen><verb>
1802         .addr   $0D00, $AF13, _Clear
1803   </verb></tscreen>
1804
1805   See: <tt><ref id=".FARADDR" name=".FARADDR"></tt>, <tt><ref id=".WORD"
1806        name=".WORD"></tt>
1807
1808
1809 <sect1><tt>.ALIGN</tt><label id=".ALIGN"><p>
1810
1811   Align data to a given boundary. The command expects a constant integer
1812   argument that must be a power of two, plus an optional second argument
1813   in byte range. If there is a second argument, it is used as fill value,
1814   otherwise the value defined in the linker configuration file is used
1815   (the default for this value is zero).
1816
1817   Since alignment depends on the base address of the module, you must
1818   give the same (or a greater) alignment for the segment when linking.
1819   The linker will give you a warning, if you don't do that.
1820
1821   Example:
1822
1823   <tscreen><verb>
1824         .align  256
1825   </verb></tscreen>
1826
1827
1828 <sect1><tt>.ASCIIZ</tt><label id=".ASCIIZ"><p>
1829
1830   Define a string with a trailing zero.
1831
1832   Example:
1833
1834   <tscreen><verb>
1835         Msg:    .asciiz "Hello world"
1836   </verb></tscreen>
1837
1838   This will put the string "Hello world" followed by a binary zero into
1839   the current segment. There may be more strings separated by commas, but
1840   the binary zero is only appended once (after the last one).
1841
1842
1843 <sect1><tt>.ASSERT</tt><label id=".ASSERT"><p>
1844
1845   Add an assertion. The command is followed by an expression, an action
1846   specifier, and an optional message that is output in case the assertion
1847   fails. If no message was given, the string "Assertion failed" is used. The
1848   action specifier may be one of <tt/warning/, <tt/error/, <tt/ldwarning/ or
1849   <tt/lderror/. In the former two cases, the assertion is evaluated by the
1850   assembler if possible, and in any case, it's also passed to the linker in
1851   the object file (if one is generated). The linker will then evaluate the
1852   expression when segment placement has been done.
1853
1854   Example:
1855
1856   <tscreen><verb>
1857         .assert         * = $8000, error, "Code not at $8000"
1858   </verb></tscreen>
1859
1860   The example assertion will check that the current location is at $8000,
1861   when the output file is written, and abort with an error if this is not
1862   the case. More complex expressions are possible. The action specifier
1863   <tt/warning/ outputs a warning, while the <tt/error/ specifier outputs
1864   an error message. In the latter case, generation of the output file is
1865   suppressed in both the assembler and linker.
1866
1867
1868 <sect1><tt>.AUTOIMPORT</tt><label id=".AUTOIMPORT"><p>
1869
1870   Is followed by a plus or a minus character. When switched on (using a
1871   +), undefined symbols are automatically marked as import instead of
1872   giving errors. When switched off (which is the default so this does not
1873   make much sense), this does not happen and an error message is
1874   displayed. The state of the autoimport flag is evaluated when the
1875   complete source was translated, before outputting actual code, so it is
1876   <em/not/ possible to switch this feature on or off for separate sections
1877   of code. The last setting is used for all symbols.
1878
1879   You should probably not use this switch because it delays error
1880   messages about undefined symbols until the link stage. The cc65
1881   compiler (which is supposed to produce correct assembler code in all
1882   circumstances, something which is not true for most assembler
1883   programmers) will insert this command to avoid importing each and every
1884   routine from the runtime library.
1885
1886   Example:
1887
1888   <tscreen><verb>
1889         .autoimport     +       ; Switch on auto import
1890   </verb></tscreen>
1891
1892 <sect1><tt>.BANKBYTES</tt><label id=".BANKBYTES"><p>
1893
1894   Define byte sized data by extracting only the bank byte (that is, bits 16-23) from
1895   each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
1896   the operator '^' prepended to each expression in its list.
1897
1898   Example:
1899
1900   <tscreen><verb>
1901         .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
1902
1903         TableLookupLo:   .lobytes   MyTable
1904         TableLookupHi:   .hibytes   MyTable
1905         TableLookupBank: .bankbytes MyTable
1906   </verb></tscreen>
1907
1908   which is equivalent to
1909
1910   <tscreen><verb>
1911         TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
1912         TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
1913         TableLookupBank: .byte ^TableItem0, ^TableItem1, ^TableItem2, ^TableItem3
1914   </verb></tscreen>
1915
1916   See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
1917             <tt><ref id=".HIBYTES" name=".HIBYTES"></tt>,
1918             <tt><ref id=".LOBYTES" name=".LOBYTES"></tt>
1919
1920
1921 <sect1><tt>.BSS</tt><label id=".BSS"><p>
1922
1923   Switch to the BSS segment. The name of the BSS segment is always "BSS",
1924   so this is a shortcut for
1925
1926   <tscreen><verb>
1927         .segment  "BSS"
1928   </verb></tscreen>
1929
1930   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
1931
1932
1933 <sect1><tt>.BYT, .BYTE</tt><label id=".BYTE"><p>
1934
1935   Define byte sized data. Must be followed by a sequence of (byte ranged)
1936   expressions or strings.
1937
1938   Example:
1939
1940   <tscreen><verb>
1941         .byte   "Hello "
1942         .byt    "world", $0D, $00
1943   </verb></tscreen>
1944
1945
1946 <sect1><tt>.CASE</tt><label id=".CASE"><p>
1947
1948   Switch on or off case sensitivity on identifiers. The default is off
1949   (that is, identifiers are case sensitive), but may be changed by the
1950   -i switch on the command line.
1951   The command must be followed by a '+' or '-' character to switch the
1952   option on or off respectively.
1953
1954   Example:
1955
1956   <tscreen><verb>
1957         .case   -               ; Identifiers are not case sensitive
1958   </verb></tscreen>
1959
1960
1961 <sect1><tt>.CHARMAP</tt><label id=".CHARMAP"><p>
1962
1963   Apply a custom mapping for characters. The command is followed by two
1964   numbers in the range 1..255. The first one is the index of the source
1965   character, the second one is the mapping. The mapping applies to all
1966   character and string constants when they generate output, and overrides
1967   a mapping table specified with the <tt><ref id="option-t" name="-t"></tt>
1968   command line switch.
1969
1970   Example:
1971
1972   <tscreen><verb>
1973         .charmap        $41, $61        ; Map 'A' to 'a'
1974   </verb></tscreen>
1975
1976
1977 <sect1><tt>.CODE</tt><label id=".CODE"><p>
1978
1979   Switch to the CODE segment. The name of the CODE segment is always
1980   "CODE", so this is a shortcut for
1981
1982   <tscreen><verb>
1983         .segment  "CODE"
1984   </verb></tscreen>
1985
1986   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
1987
1988
1989 <sect1><tt>.CONDES</tt><label id=".CONDES"><p>
1990
1991   Export a symbol and mark it in a special way. The linker is able to build
1992   tables of all such symbols. This may be used to automatically create a list
1993   of functions needed to initialize linked library modules.
1994
1995   Note: The linker has a feature to build a table of marked routines, but it
1996   is your code that must call these routines, so just declaring a symbol with
1997   <tt/.CONDES/ does nothing by itself.
1998
1999   All symbols are exported as an absolute (16 bit) symbol. You don't need to
2000   use an additional <tt><ref id=".EXPORT" name=".EXPORT"></tt> statement, this
2001   is implied by <tt/.CONDES/.
2002
2003   <tt/.CONDES/ is followed by the type, which may be <tt/constructor/,
2004   <tt/destructor/ or a numeric value between 0 and 6 (where 0 is the same as
2005   specifying <tt/constructor/ and 1 is equal to specifying <tt/destructor/).
2006   The <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
2007   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
2008   name=".INTERRUPTOR"></tt> commands are actually shortcuts for <tt/.CONDES/
2009   with a type of <tt/constructor/ resp. <tt/destructor/ or <tt/interruptor/.
2010
2011   After the type, an optional priority may be specified. Higher numeric values
2012   mean higher priority. If no priority is given, the default priority of 7 is
2013   used. Be careful when assigning priorities to your own module constructors
2014   so they won't interfere with the ones in the cc65 library.
2015
2016   Example:
2017
2018   <tscreen><verb>
2019         .condes         ModuleInit, constructor
2020         .condes         ModInit, 0, 16
2021   </verb></tscreen>
2022
2023   See the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
2024   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
2025   name=".INTERRUPTOR"></tt> commands and the separate section <ref id="condes"
2026   name="Module constructors/destructors"> explaining the feature in more
2027   detail.
2028
2029
2030 <sect1><tt>.CONSTRUCTOR</tt><label id=".CONSTRUCTOR"><p>
2031
2032   Export a symbol and mark it as a module constructor. This may be used
2033   together with the linker to build a table of constructor subroutines that
2034   are called by the startup code.
2035
2036   Note: The linker has a feature to build a table of marked routines, but it
2037   is your code that must call these routines, so just declaring a symbol as
2038   constructor does nothing by itself.
2039
2040   A constructor is always exported as an absolute (16 bit) symbol. You don't
2041   need to use an additional <tt/.export/ statement, this is implied by
2042   <tt/.constructor/. It may have an optional priority that is separated by a
2043   comma. Higher numeric values mean a higher priority. If no priority is
2044   given, the default priority of 7 is used. Be careful when assigning
2045   priorities to your own module constructors so they won't interfere with the
2046   ones in the cc65 library.
2047
2048   Example:
2049
2050   <tscreen><verb>
2051         .constructor    ModuleInit
2052         .constructor    ModInit, 16
2053   </verb></tscreen>
2054
2055   See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
2056   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands and the separate section
2057   <ref id="condes" name="Module constructors/destructors"> explaining the
2058   feature in more detail.
2059
2060
2061 <sect1><tt>.DATA</tt><label id=".DATA"><p>
2062
2063   Switch to the DATA segment. The name of the DATA segment is always
2064   "DATA", so this is a shortcut for
2065
2066   <tscreen><verb>
2067         .segment  "DATA"
2068   </verb></tscreen>
2069
2070   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
2071
2072
2073 <sect1><tt>.DBYT</tt><label id=".DBYT"><p>
2074
2075   Define word sized data with the hi and lo bytes swapped (use <tt/.WORD/ to
2076   create word sized data in native 65XX format). Must be followed by a
2077   sequence of (word ranged) expressions.
2078
2079   Example:
2080
2081   <tscreen><verb>
2082         .dbyt   $1234, $4512
2083   </verb></tscreen>
2084
2085   This will emit the bytes
2086
2087   <tscreen><verb>
2088         $12 $34 $45 $12
2089   </verb></tscreen>
2090
2091   into the current segment in that order.
2092
2093
2094 <sect1><tt>.DEBUGINFO</tt><label id=".DEBUGINFO"><p>
2095
2096   Switch on or off debug info generation. The default is off (that is,
2097   the object file will not contain debug infos), but may be changed by the
2098   -g switch on the command line.
2099   The command must be followed by a '+' or '-' character to switch the
2100   option on or off respectively.
2101
2102   Example:
2103
2104   <tscreen><verb>
2105         .debuginfo      +       ; Generate debug info
2106   </verb></tscreen>
2107
2108
2109 <sect1><tt>.DEFINE</tt><label id=".DEFINE"><p>
2110
2111   Start a define style macro definition. The command is followed by an
2112   identifier (the macro name) and optionally by a list of formal arguments
2113   in braces.
2114   See section <ref id="macros" name="Macros">.
2115
2116
2117 <sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p>
2118
2119   Builtin function. The function expects an identifier as argument in braces.
2120   The argument is evaluated, and the function yields "true" if the identifier
2121   is a symbol that is already defined somewhere in the source file up to the
2122   current position. Otherwise the function yields false. As an example, the
2123   <tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by
2124
2125   <tscreen><verb>
2126         .if     .defined(a)
2127   </verb></tscreen>
2128
2129
2130 <sect1><tt>.DESTRUCTOR</tt><label id=".DESTRUCTOR"><p>
2131
2132   Export a symbol and mark it as a module destructor. This may be used
2133   together with the linker to build a table of destructor subroutines that
2134   are called by the startup code.
2135
2136   Note: The linker has a feature to build a table of marked routines, but it
2137   is your code that must call these routines, so just declaring a symbol as
2138   constructor does nothing by itself.
2139
2140   A destructor is always exported as an absolute (16 bit) symbol. You don't
2141   need to use an additional <tt/.export/ statement, this is implied by
2142   <tt/.destructor/. It may have an optional priority that is separated by a
2143   comma. Higher numerical values mean a higher priority. If no priority is
2144   given, the default priority of 7 is used. Be careful when assigning
2145   priorities to your own module destructors so they won't interfere with the
2146   ones in the cc65 library.
2147
2148   Example:
2149
2150   <tscreen><verb>
2151         .destructor     ModuleDone
2152         .destructor     ModDone, 16
2153   </verb></tscreen>
2154
2155   See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
2156   id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> commands and the separate
2157   section <ref id="condes" name="Module constructors/destructors"> explaining
2158   the feature in more detail.
2159
2160
2161 <sect1><tt>.DWORD</tt><label id=".DWORD"><p>
2162
2163   Define dword sized data (4 bytes) Must be followed by a sequence of
2164   expressions.
2165
2166   Example:
2167
2168   <tscreen><verb>
2169         .dword  $12344512, $12FA489
2170   </verb></tscreen>
2171
2172
2173 <sect1><tt>.ELSE</tt><label id=".ELSE"><p>
2174
2175   Conditional assembly: Reverse the current condition.
2176
2177
2178 <sect1><tt>.ELSEIF</tt><label id=".ELSEIF"><p>
2179
2180   Conditional assembly: Reverse current condition and test a new one.
2181
2182
2183 <sect1><tt>.END</tt><label id=".END"><p>
2184
2185   Forced end of assembly. Assembly stops at this point, even if the command
2186   is read from an include file.
2187
2188
2189 <sect1><tt>.ENDENUM</tt><label id=".ENDENUM"><p>
2190
2191   End a <tt><ref id=".ENUM" name=".ENUM"></tt> declaration.
2192
2193
2194 <sect1><tt>.ENDIF</tt><label id=".ENDIF"><p>
2195
2196   Conditional assembly: Close a <tt><ref id=".IF" name=".IF..."></tt> or
2197   <tt><ref id=".ELSE" name=".ELSE"></tt> branch.
2198
2199
2200 <sect1><tt>.ENDMAC, .ENDMACRO</tt><label id=".ENDMACRO"><p>
2201
2202   End of macro definition (see section <ref id="macros" name="Macros">).
2203
2204
2205 <sect1><tt>.ENDPROC</tt><label id=".ENDPROC"><p>
2206
2207   End of local lexical level (see <tt><ref id=".PROC" name=".PROC"></tt>).
2208
2209
2210 <sect1><tt>.ENDREP, .ENDREPEAT</tt><label id=".ENDREPEAT"><p>
2211
2212   End a <tt><ref id=".REPEAT" name=".REPEAT"></tt> block.
2213
2214
2215 <sect1><tt>.ENDSCOPE</tt><label id=".ENDSCOPE"><p>
2216
2217   End of local lexical level (see <tt/<ref id=".SCOPE" name=".SCOPE">/).
2218
2219
2220 <sect1><tt>.ENDSTRUCT</tt><label id=".ENDSTRUCT"><p>
2221
2222   Ends a struct definition. See the <tt/<ref id=".STRUCT" name=".STRUCT">/
2223   command and the separate section named <ref id="structs" name="&quot;Structs
2224   and unions&quot;">.
2225
2226
2227 <sect1><tt>.ENUM</tt><label id=".ENUM"><p>
2228
2229   Start an enumeration. This directive is very similar to the C <tt/enum/
2230   keyword. If a name is given, a new scope is created for the enumeration,
2231   otherwise the enumeration members are placed in the enclosing scope.
2232
2233   In the enumeration body, symbols are declared. The first symbol has a value
2234   of zero, and each following symbol will get the value of the preceding plus
2235   one. This behaviour may be overridden by an explicit assignment. Two symbols
2236   may have the same value.
2237
2238   Example:
2239
2240   <tscreen><verb>
2241         .enum   errorcodes
2242                 no_error
2243                 file_error
2244                 parse_error
2245         .endenum
2246   </verb></tscreen>
2247
2248   Above example will create a new scope named <tt/errorcodes/ with three
2249   symbols in it that get the values 0, 1 and 2 respectively. Another way
2250   to write this would have been:
2251
2252   <tscreen><verb>
2253         .scope  errorcodes
2254                 no_error        = 0
2255                 file_error      = 1
2256                 parse_error     = 2
2257         .endscope
2258   </verb></tscreen>
2259
2260   Please note that explicit scoping must be used to access the identifiers:
2261
2262   <tscreen><verb>
2263         .word   errorcodes::no_error
2264   </verb></tscreen>
2265
2266   A more complex example:
2267
2268   <tscreen><verb>
2269         .enum
2270                 EUNKNOWN        = -1
2271                 EOK
2272                 EFILE
2273                 EBUSY
2274                 EAGAIN
2275                 EWOULDBLOCK     = EAGAIN
2276         .endenum
2277   </verb></tscreen>
2278
2279   In this example, the enumeration does not have a name, which means that the
2280   members will be visible in the enclosing scope and can be used in this scope
2281   without explicit scoping. The first member (<tt/EUNKNOWN/) has the value -1.
2282   The value for the following members is incremented by one, so <tt/EOK/ would
2283   be zero and so on. <tt/EWOULDBLOCK/ is an alias for <tt/EGAIN/, so it has an
2284   override for the value using an already defined symbol.
2285
2286
2287 <sect1><tt>.ERROR</tt><label id=".ERROR"><p>
2288
2289   Force an assembly error. The assembler will output an error message
2290   preceded by "User error" and will <em/not/ produce an object file.
2291
2292   This command may be used to check for initial conditions that must be
2293   set before assembling a source file.
2294
2295   Example:
2296
2297   <tscreen><verb>
2298         .if     foo = 1
2299         ...
2300         .elseif bar = 1
2301         ...
2302         .else
2303         .error  "Must define foo or bar!"
2304         .endif
2305   </verb></tscreen>
2306
2307   See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
2308   id=".OUT" name=".OUT"></tt> directives.
2309
2310
2311 <sect1><tt>.EXITMAC, .EXITMACRO</tt><label id=".EXITMACRO"><p>
2312
2313   Abort a macro expansion immediately. This command is often useful in
2314   recursive macros. See separate section <ref id="macros" name="Macros">.
2315
2316
2317 <sect1><tt>.EXPORT</tt><label id=".EXPORT"><p>
2318
2319   Make symbols accessible from other modules. Must be followed by a comma
2320   separated list of symbols to export, with each one optionally followed by an
2321   address specification and (also optional) an assignment. Using an additional
2322   assignment in the export statement allows to define and export a symbol in
2323   one statement. The default is to export the symbol with the address size it
2324   actually has. The assembler will issue a warning, if the symbol is exported
2325   with an address size smaller than the actual address size.
2326
2327   Examples:
2328
2329   <tscreen><verb>
2330         .export foo
2331         .export bar: far
2332         .export foobar: far = foo * bar
2333         .export baz := foobar, zap: far = baz - bar
2334   </verb></tscreen>
2335
2336   As with constant definitions, using <tt/:=/ instead of <tt/=/ marks the
2337   symbols as a label.
2338
2339   See: <tt><ref id=".EXPORTZP" name=".EXPORTZP"></tt>
2340
2341
2342 <sect1><tt>.EXPORTZP</tt><label id=".EXPORTZP"><p>
2343
2344   Make symbols accessible from other modules. Must be followed by a comma
2345   separated list of symbols to export. The exported symbols are explicitly
2346   marked as zero page symbols. An assignment may be included in the
2347   <tt/.EXPORTZP/ statement. This allows to define and export a symbol in one
2348   statement.
2349
2350   Examples:
2351
2352   <tscreen><verb>
2353         .exportzp  foo, bar
2354         .exportzp  baz := &dollar;02
2355   </verb></tscreen>
2356
2357   See: <tt><ref id=".EXPORT" name=".EXPORT"></tt>
2358
2359
2360 <sect1><tt>.FARADDR</tt><label id=".FARADDR"><p>
2361
2362   Define far (24 bit) address data. The command must be followed by a
2363   sequence of (not necessarily constant) expressions.
2364
2365   Example:
2366
2367   <tscreen><verb>
2368         .faraddr        DrawCircle, DrawRectangle, DrawHexagon
2369   </verb></tscreen>
2370
2371   See: <tt><ref id=".ADDR" name=".ADDR"></tt>
2372
2373
2374 <sect1><tt>.FEATURE</tt><label id=".FEATURE"><p>
2375
2376   This directive may be used to enable one or more compatibility features
2377   of the assembler. While the use of <tt/.FEATURE/ should be avoided when
2378   possible, it may be useful when porting sources written for other
2379   assemblers. There is no way to switch a feature off, once you have
2380   enabled it, so using
2381
2382   <tscreen><verb>
2383         .FEATURE        xxx
2384   </verb></tscreen>
2385
2386   will enable the feature until end of assembly is reached.
2387
2388   The following features are available:
2389
2390   <descrip>
2391
2392   <tag><tt>at_in_identifiers</tt><label id="at_in_identifiers"></tag>
2393
2394     Accept the at character (`@') as a valid character in identifiers. The
2395     at character is not allowed to start an identifier, even with this
2396     feature enabled.
2397
2398   <tag><tt>c_comments</tt></tag>
2399
2400     Allow C like comments using <tt>/*</tt> and <tt>*/</tt> as left and right
2401     comment terminators. Note that C comments may not be nested. There's also a
2402     pitfall when using C like comments: All statements must be terminated by
2403     "end-of-line". Using C like comments, it is possible to hide the newline,
2404     which results in error messages. See the following non working example:
2405
2406     <tscreen><verb>
2407         lda     #$00  /* This comment hides the newline
2408 */      sta     $82
2409     </verb></tscreen>
2410
2411   <tag><tt>dollar_in_identifiers</tt><label id="dollar_in_identifiers"></tag>
2412
2413     Accept the dollar sign (`&dollar;') as a valid character in identifiers. The
2414     dollar character is not allowed to start an identifier, even with this
2415     feature enabled.
2416
2417   <tag><tt>dollar_is_pc</tt></tag>
2418
2419     The dollar sign may be used as an alias for the star (`*'), which
2420     gives the value of the current PC in expressions.
2421     Note: Assignment to the pseudo variable is not allowed.
2422
2423   <tag><tt>labels_without_colons</tt></tag>
2424
2425     Allow labels without a trailing colon. These labels are only accepted,
2426     if they start at the beginning of a line (no leading white space).
2427
2428   <tag><tt>leading_dot_in_identifiers</tt><label id="leading_dot_in_identifiers"></tag>
2429
2430     Accept the dot (`.') as the first character of an identifier. This may be
2431     used for example to create macro names that start with a dot emulating
2432     control directives of other assemblers. Note however, that none of the
2433     reserved keywords built into the assembler, that starts with a dot, may be
2434     overridden. When using this feature, you may also get into trouble if
2435     later versions of the assembler define new keywords starting with a dot.
2436
2437   <tag><tt>loose_char_term</tt></tag>
2438
2439     Accept single quotes as well as double quotes as terminators for char
2440     constants.
2441
2442   <tag><tt>loose_string_term</tt></tag>
2443
2444     Accept single quotes as well as double quotes as terminators for string
2445     constants.
2446
2447   <tag><tt>missing_char_term</tt></tag>
2448
2449     Accept single quoted character constants where the terminating quote is
2450     missing.
2451     <tscreen><verb>
2452         lda     #'a
2453     </verb></tscreen>
2454     <bf/Note:/ This does not work in conjunction with <tt/.FEATURE
2455     loose_string_term/, since in this case the input would be ambiguous.
2456
2457   <tag><tt>org_per_seg</tt><label id="org_per_seg"></tag>
2458
2459     This feature makes relocatable/absolute mode local to the current segment.
2460     Using <tt><ref id=".ORG" name=".ORG"></tt> when <tt/org_per_seg/ is in
2461     effect will only enable absolute mode for the current segment. Dito for
2462     <tt><ref id=".RELOC" name=".RELOC"></tt>.
2463
2464   <tag><tt>pc_assignment</tt></tag>
2465
2466     Allow assignments to the PC symbol (`*' or `&dollar;' if <tt/dollar_is_pc/
2467     is enabled). Such an assignment is handled identical to the <tt><ref
2468     id=".ORG" name=".ORG"></tt> command (which is usually not needed, so just
2469     removing the lines with the assignments may also be an option when porting
2470     code written for older assemblers).
2471
2472   <tag><tt>ubiquitous_idents</tt></tag>
2473
2474     Allow the use of instructions names as names for macros and symbols. This
2475     makes it possible to "overload" instructions by defining a macro with the
2476     same name. This does also make it possible to introduce hard to find errors
2477     in your code, so be careful!
2478
2479   </descrip>
2480
2481   It is also possible to specify features on the command line using the
2482   <tt><ref id="option--feature" name="--feature"></tt> command line option.
2483   This is useful when translating sources written for older assemblers, when
2484   you don't want to change the source code.
2485
2486   As an example, to translate sources written for Andre Fachats xa65
2487   assembler, the features
2488
2489   <verb>
2490         labels_without_colons, pc_assignment, loose_char_term
2491   </verb>
2492
2493   may be helpful. They do not make ca65 completely compatible, so you may not
2494   be able to translate the sources without changes, even when enabling these
2495   features. However, I have found several sources that translate without
2496   problems when enabling these features on the command line.
2497
2498
2499 <sect1><tt>.FILEOPT, .FOPT</tt><label id=".FOPT"><p>
2500
2501   Insert an option string into the object file. There are two forms of
2502   this command, one specifies the option by a keyword, the second
2503   specifies it as a number. Since usage of the second one needs knowledge
2504   of the internal encoding, its use is not recommended and I will only
2505   describe the first form here.
2506
2507   The command is followed by one of the keywords
2508
2509   <tscreen><verb>
2510         author
2511         comment
2512         compiler
2513   </verb></tscreen>
2514
2515   a comma and a string. The option is written into the object file
2516   together with the string value. This is currently unidirectional and
2517   there is no way to actually use these options once they are in the
2518   object file.
2519
2520   Examples:
2521
2522   <tscreen><verb>
2523         .fileopt        comment, "Code stolen from my brother"
2524         .fileopt        compiler, "BASIC 2.0"
2525         .fopt           author, "J. R. User"
2526   </verb></tscreen>
2527
2528
2529 <sect1><tt>.FORCEIMPORT</tt><label id=".FORCEIMPORT"><p>
2530
2531   Import an absolute symbol from another module. The command is followed by a
2532   comma separated list of symbols to import. The command is similar to <tt>
2533   <ref id=".IMPORT" name=".IMPORT"></tt>, but the import reference is always
2534   written to the generated object file, even if the symbol is never referenced
2535   (<tt><ref id=".IMPORT" name=".IMPORT"></tt> will not generate import
2536   references for unused symbols).
2537
2538   Example:
2539
2540   <tscreen><verb>
2541         .forceimport    needthisone, needthistoo
2542   </verb></tscreen>
2543
2544   See: <tt><ref id=".IMPORT" name=".IMPORT"></tt>
2545
2546
2547 <sect1><tt>.GLOBAL</tt><label id=".GLOBAL"><p>
2548
2549   Declare symbols as global. Must be followed by a comma separated list of
2550   symbols to declare. Symbols from the list, that are defined somewhere in the
2551   source, are exported, all others are imported. Additional <tt><ref
2552   id=".IMPORT" name=".IMPORT"></tt> or <tt><ref id=".EXPORT"
2553   name=".EXPORT"></tt> commands for the same symbol are allowed.
2554
2555   Example:
2556
2557   <tscreen><verb>
2558         .global foo, bar
2559   </verb></tscreen>
2560
2561
2562 <sect1><tt>.GLOBALZP</tt><label id=".GLOBALZP"><p>
2563
2564   Declare symbols as global. Must be followed by a comma separated list of
2565   symbols to declare. Symbols from the list, that are defined somewhere in the
2566   source, are exported, all others are imported. Additional <tt><ref
2567   id=".IMPORTZP" name=".IMPORTZP"></tt> or <tt><ref id=".EXPORTZP"
2568   name=".EXPORTZP"></tt> commands for the same symbol are allowed. The symbols
2569   in the list are explicitly marked as zero page symbols.
2570
2571   Example:
2572
2573   <tscreen><verb>
2574         .globalzp foo, bar
2575   </verb></tscreen>
2576
2577 <sect1><tt>.HIBYTES</tt><label id=".HIBYTES"><p>
2578
2579   Define byte sized data by extracting only the high byte (that is, bits 8-15) from
2580   each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
2581   the operator '>' prepended to each expression in its list.
2582
2583   Example:
2584
2585   <tscreen><verb>
2586         .lobytes         $1234, $2345, $3456, $4567
2587         .hibytes         $fedc, $edcb, $dcba, $cba9
2588   </verb></tscreen>
2589
2590   which is equivalent to
2591
2592   <tscreen><verb>
2593         .byte            $34, $45, $56, $67
2594         .byte            $fe, $ed, $dc, $cb
2595   </verb></tscreen>
2596
2597   Example:
2598
2599   <tscreen><verb>
2600         .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
2601
2602         TableLookupLo:   .lobytes MyTable
2603         TableLookupHi:   .hibytes MyTable
2604   </verb></tscreen>
2605
2606   which is equivalent to
2607
2608   <tscreen><verb>
2609         TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
2610         TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
2611   </verb></tscreen>
2612
2613   See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
2614             <tt><ref id=".LOBYTES" name=".LOBYTES"></tt>,
2615             <tt><ref id=".BANKBYTES" name=".BANKBYTES"></tt>
2616
2617
2618 <sect1><tt>.I16</tt><label id=".I16"><p>
2619
2620   Valid only in 65816 mode. Switch the index registers to 16 bit.
2621
2622   Note: This command will not emit any code, it will tell the assembler to
2623   create 16 bit operands for immediate operands.
2624
2625   See also the <tt><ref id=".I8" name=".I8"></tt> and <tt><ref id=".SMART"
2626   name=".SMART"></tt> commands.
2627
2628
2629 <sect1><tt>.I8</tt><label id=".I8"><p>
2630
2631   Valid only in 65816 mode. Switch the index registers to 8 bit.
2632
2633   Note: This command will not emit any code, it will tell the assembler to
2634   create 8 bit operands for immediate operands.
2635
2636   See also the <tt><ref id=".I16" name=".I16"></tt> and <tt><ref id=".SMART"
2637   name=".SMART"></tt> commands.
2638
2639
2640 <sect1><tt>.IF</tt><label id=".IF"><p>
2641
2642   Conditional assembly: Evaluate an expression and switch assembler output
2643   on or off depending on the expression. The expression must be a constant
2644   expression, that is, all operands must be defined.
2645
2646   A expression value of zero evaluates to FALSE, any other value evaluates
2647   to TRUE.
2648
2649
2650 <sect1><tt>.IFBLANK</tt><label id=".IFBLANK"><p>
2651
2652   Conditional assembly: Check if there are any remaining tokens in this line,
2653   and evaluate to FALSE if this is the case, and to TRUE otherwise. If the
2654   condition is not true, further lines are not assembled until an <tt><ref
2655   id=".ELSE" name=".ESLE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
2656   <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
2657
2658   This command is often used to check if a macro parameter was given. Since an
2659   empty macro parameter will evaluate to nothing, the condition will evaluate
2660   to FALSE if an empty parameter was given.
2661
2662   Example:
2663
2664   <tscreen><verb>
2665         .macro     arg1, arg2
2666         .ifblank   arg2
2667                    lda     #arg1
2668         .else
2669                    lda     #arg2
2670         .endif
2671         .endmacro
2672   </verb></tscreen>
2673
2674   See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
2675
2676
2677 <sect1><tt>.IFCONST</tt><label id=".IFCONST"><p>
2678
2679   Conditional assembly: Evaluate an expression and switch assembler output
2680   on or off depending on the constness of the expression.
2681
2682   A const expression evaluates to to TRUE, a non const expression (one
2683   containing an imported or currently undefined symbol) evaluates to
2684   FALSE.
2685
2686   See also: <tt><ref id=".CONST" name=".CONST"></tt>
2687
2688
2689 <sect1><tt>.IFDEF</tt><label id=".IFDEF"><p>
2690
2691   Conditional assembly: Check if a symbol is defined. Must be followed by
2692   a symbol name. The condition is true if the the given symbol is already
2693   defined, and false otherwise.
2694
2695   See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
2696
2697
2698 <sect1><tt>.IFNBLANK</tt><label id=".IFNBLANK"><p>
2699
2700   Conditional assembly: Check if there are any remaining tokens in this line,
2701   and evaluate to TRUE if this is the case, and to FALSE otherwise. If the
2702   condition is not true, further lines are not assembled until an <tt><ref
2703   id=".ELSE" name=".ELSE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
2704   <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
2705
2706   This command is often used to check if a macro parameter was given.
2707   Since an empty macro parameter will evaluate to nothing, the condition
2708   will evaluate to FALSE if an empty parameter was given.
2709
2710   Example:
2711
2712   <tscreen><verb>
2713         .macro     arg1, arg2
2714                    lda     #arg1
2715         .ifnblank  arg2
2716                    lda     #arg2
2717         .endif
2718         .endmacro
2719   </verb></tscreen>
2720
2721   See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
2722
2723
2724 <sect1><tt>.IFNDEF</tt><label id=".IFNDEF"><p>
2725
2726   Conditional assembly: Check if a symbol is defined. Must be followed by
2727   a symbol name. The condition is true if the the given symbol is not
2728   defined, and false otherwise.
2729
2730   See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
2731
2732
2733 <sect1><tt>.IFNREF</tt><label id=".IFNREF"><p>
2734
2735   Conditional assembly: Check if a symbol is referenced. Must be followed
2736   by a symbol name. The condition is true if if the the given symbol was
2737   not referenced before, and false otherwise.
2738
2739   See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
2740
2741
2742 <sect1><tt>.IFP02</tt><label id=".IFP02"><p>
2743
2744   Conditional assembly: Check if the assembler is currently in 6502 mode
2745   (see <tt><ref id=".P02" name=".P02"></tt> command).
2746
2747
2748 <sect1><tt>.IFP816</tt><label id=".IFP816"><p>
2749
2750   Conditional assembly: Check if the assembler is currently in 65816 mode
2751   (see <tt><ref id=".P816" name=".P816"></tt> command).
2752
2753
2754 <sect1><tt>.IFPC02</tt><label id=".IFPC02"><p>
2755
2756   Conditional assembly: Check if the assembler is currently in 65C02 mode
2757   (see <tt><ref id=".PC02" name=".PC02"></tt> command).
2758
2759
2760 <sect1><tt>.IFPSC02</tt><label id=".IFPSC02"><p>
2761
2762   Conditional assembly: Check if the assembler is currently in 65SC02 mode
2763   (see <tt><ref id=".PSC02" name=".PSC02"></tt> command).
2764
2765
2766 <sect1><tt>.IFREF</tt><label id=".IFREF"><p>
2767
2768   Conditional assembly: Check if a symbol is referenced. Must be followed
2769   by a symbol name. The condition is true if if the the given symbol was
2770   referenced before, and false otherwise.
2771
2772   This command may be used to build subroutine libraries in include files
2773   (you may use separate object modules for this purpose too).
2774
2775   Example:
2776
2777   <tscreen><verb>
2778         .ifref  ToHex                   ; If someone used this subroutine
2779         ToHex:  tay                     ; Define subroutine
2780                 lda     HexTab,y
2781                 rts
2782         .endif
2783   </verb></tscreen>
2784
2785   See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
2786
2787
2788 <sect1><tt>.IMPORT</tt><label id=".IMPORT"><p>
2789
2790   Import a symbol from another module. The command is followed by a comma
2791   separated list of symbols to import, with each one optionally followed by
2792   an address specification.
2793
2794   Example:
2795
2796   <tscreen><verb>
2797         .import foo
2798         .import bar: zeropage
2799   </verb></tscreen>
2800
2801   See: <tt><ref id=".IMPORTZP" name=".IMPORTZP"></tt>
2802
2803
2804 <sect1><tt>.IMPORTZP</tt><label id=".IMPORTZP"><p>
2805
2806   Import a symbol from another module. The command is followed by a comma
2807   separated list of symbols to import. The symbols are explicitly imported
2808   as zero page symbols (that is, symbols with values in byte range).
2809
2810   Example:
2811
2812   <tscreen><verb>
2813         .importzp       foo, bar
2814   </verb></tscreen>
2815
2816   See: <tt><ref id=".IMPORT" name=".IMPORT"></tt>
2817
2818
2819 <sect1><tt>.INCBIN</tt><label id=".INCBIN"><p>
2820
2821   Include a file as binary data. The command expects a string argument
2822   that is the name of a file to include literally in the current segment.
2823   In addition to that, a start offset and a size value may be specified,
2824   separated by commas. If no size is specified, all of the file from the
2825   start offset to end-of-file is used. If no start position is specified
2826   either, zero is assumed (which means that the whole file is inserted).
2827
2828   Example:
2829
2830   <tscreen><verb>
2831         ; Include whole file
2832         .incbin         "sprites.dat"
2833
2834         ; Include file starting at offset 256
2835         .incbin         "music.dat", $100
2836
2837         ; Read 100 bytes starting at offset 200
2838         .incbin         "graphics.dat", 200, 100
2839   </verb></tscreen>
2840
2841
2842 <sect1><tt>.INCLUDE</tt><label id=".INCLUDE"><p>
2843
2844   Include another file. Include files may be nested up to a depth of 16.
2845
2846   Example:
2847
2848   <tscreen><verb>
2849         .include        "subs.inc"
2850   </verb></tscreen>
2851
2852
2853 <sect1><tt>.INTERRUPTOR</tt><label id=".INTERRUPTOR"><p>
2854
2855   Export a symbol and mark it as an interruptor. This may be used together
2856   with the linker to build a table of interruptor subroutines that are called
2857   in an interrupt.
2858
2859   Note: The linker has a feature to build a table of marked routines, but it
2860   is your code that must call these routines, so just declaring a symbol as
2861   interruptor does nothing by itself.
2862
2863   An interruptor is always exported as an absolute (16 bit) symbol. You don't
2864   need to use an additional <tt/.export/ statement, this is implied by
2865   <tt/.interruptor/. It may have an optional priority that is separated by a
2866   comma. Higher numeric values mean a higher priority. If no priority is
2867   given, the default priority of 7 is used. Be careful when assigning
2868   priorities to your own module constructors so they won't interfere with the
2869   ones in the cc65 library.
2870
2871   Example:
2872
2873   <tscreen><verb>
2874         .interruptor    IrqHandler
2875         .interruptor    Handler, 16
2876   </verb></tscreen>
2877
2878   See the <tt><ref id=".CONDES" name=".CONDES"></tt> command and the separate
2879   section <ref id="condes" name="Module constructors/destructors"> explaining
2880   the feature in more detail.
2881
2882
2883 <sect1><tt>.LINECONT</tt><label id=".LINECONT"><p>
2884
2885   Switch on or off line continuations using the backslash character
2886   before a newline. The option is off by default.
2887   Note: Line continuations do not work in a comment. A backslash at the
2888   end of a comment is treated as part of the comment and does not trigger
2889   line continuation.
2890   The command must be followed by a '+' or '-' character to switch the
2891   option on or off respectively.
2892
2893   Example:
2894
2895   <tscreen><verb>
2896         .linecont       +               ; Allow line continuations
2897
2898         lda     \
2899                 #$20                    ; This is legal now
2900   </verb></tscreen>
2901
2902
2903 <sect1><tt>.LIST</tt><label id=".LIST"><p>
2904
2905   Enable output to the listing. The command must be followed by a boolean
2906   switch ("on", "off", "+" or "-") and will enable or disable listing
2907   output.
2908   The option has no effect if the listing is not enabled by the command line
2909   switch -l. If -l is used, an internal counter is set to 1. Lines are output
2910   to the listing file, if the counter is greater than zero, and suppressed if
2911   the counter is zero. Each use of <tt/.LIST/ will increment or decrement the
2912   counter.
2913
2914   Example:
2915
2916   <tscreen><verb>
2917         .list   on              ; Enable listing output
2918   </verb></tscreen>
2919
2920
2921 <sect1><tt>.LISTBYTES</tt><label id=".LISTBYTES"><p>
2922
2923   Set, how many bytes are shown in the listing for one source line. The
2924   default is 12, so the listing will show only the first 12 bytes for any
2925   source line that generates more than 12 bytes of code or data.
2926   The directive needs an argument, which is either "unlimited", or an
2927   integer constant in the range 4..255.
2928
2929   Examples:
2930
2931   <tscreen><verb>
2932         .listbytes      unlimited       ; List all bytes
2933         .listbytes      12              ; List the first 12 bytes
2934         .incbin         "data.bin"      ; Include large binary file
2935   </verb></tscreen>
2936
2937
2938 <sect1><tt>.LOBYTES</tt><label id=".LOBYTES"><p>
2939
2940   Define byte sized data by extracting only the low byte (that is, bits 0-7) from
2941   each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
2942   the operator '<' prepended to each expression in its list.
2943
2944   Example:
2945
2946   <tscreen><verb>
2947         .lobytes         $1234, $2345, $3456, $4567
2948         .hibytes         $fedc, $edcb, $dcba, $cba9
2949   </verb></tscreen>
2950
2951   which is equivalent to
2952
2953   <tscreen><verb>
2954         .byte            $34, $45, $56, $67
2955         .byte            $fe, $ed, $dc, $cb
2956   </verb></tscreen>
2957
2958   Example:
2959
2960   <tscreen><verb>
2961         .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
2962
2963         TableLookupLo:   .lobytes MyTable
2964         TableLookupHi:   .hibytes MyTable
2965   </verb></tscreen>
2966
2967   which is equivalent to
2968
2969   <tscreen><verb>
2970         TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
2971         TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
2972   </verb></tscreen>
2973
2974   See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
2975             <tt><ref id=".HIBYTES" name=".HIBYTES"></tt>,
2976             <tt><ref id=".BANKBYTES" name=".BANKBYTES"></tt>
2977
2978
2979 <sect1><tt>.LOCAL</tt><label id=".LOCAL"><p>
2980
2981   This command may only be used inside a macro definition. It declares a
2982   list of identifiers as local to the macro expansion.
2983
2984   A problem when using macros are labels: Since they don't change their name,
2985   you get a "duplicate symbol" error if the macro is expanded the second time.
2986   Labels declared with <tt><ref id=".LOCAL" name=".LOCAL"></tt> have their
2987   name mapped to an internal unique name (<tt/___ABCD__/) with each macro
2988   invocation.
2989
2990   Some other assemblers start a new lexical block inside a macro expansion.
2991   This has some drawbacks however, since that will not allow <em/any/ symbol
2992   to be visible outside a macro, a feature that is sometimes useful. The
2993   <tt><ref id=".LOCAL" name=".LOCAL"></tt> command is in my eyes a better way
2994   to address the problem.
2995
2996   You get an error when using <tt><ref id=".LOCAL" name=".LOCAL"></tt> outside
2997   a macro.
2998
2999
3000 <sect1><tt>.LOCALCHAR</tt><label id=".LOCALCHAR"><p>
3001
3002   Defines the character that start "cheap" local labels. You may use one
3003   of '@' and '?' as start character. The default is '@'.
3004
3005   Cheap local labels are labels that are visible only between two non
3006   cheap labels. This way you can reuse identifiers like "<tt/loop/" without
3007   using explicit lexical nesting.
3008
3009   Example:
3010
3011   <tscreen><verb>
3012         .localchar      '?'
3013
3014         Clear:  lda     #$00            ; Global label
3015         ?Loop:  sta     Mem,y           ; Local label
3016                 dey
3017                 bne     ?Loop           ; Ok
3018                 rts
3019         Sub:    ...                     ; New global label
3020                 bne     ?Loop           ; ERROR: Unknown identifier!
3021   </verb></tscreen>
3022
3023
3024 <sect1><tt>.MACPACK</tt><label id=".MACPACK"><p>
3025
3026   Insert a predefined macro package. The command is followed by an
3027   identifier specifying the macro package to insert. Available macro
3028   packages are:
3029
3030   <tscreen><verb>
3031         atari           Defines the scrcode macro.
3032         cbm             Defines the scrcode macro.
3033         cpu             Defines constants for the .CPU variable.
3034         generic         Defines generic macros like add and sub.
3035         longbranch      Defines conditional long jump macros.
3036   </verb></tscreen>
3037
3038   Including a macro package twice, or including a macro package that
3039   redefines already existing macros will lead to an error.
3040
3041   Example:
3042
3043   <tscreen><verb>
3044         .macpack        longbranch      ; Include macro package
3045                          
3046                 cmp     #$20            ; Set condition codes
3047                 jne     Label           ; Jump long on condition
3048   </verb></tscreen>
3049
3050   Macro packages are explained in more detail in section <ref
3051   id="macropackages" name="Macro packages">.
3052
3053
3054 <sect1><tt>.MAC, .MACRO</tt><label id=".MAC"><p>
3055
3056   Start a classic macro definition. The command is followed by an identifier
3057   (the macro name) and optionally by a comma separated list of identifiers
3058   that are macro parameters.
3059
3060   See section <ref id="macros" name="Macros">.
3061
3062
3063 <sect1><tt>.ORG</tt><label id=".ORG"><p>
3064
3065   Start a section of absolute code. The command is followed by a constant
3066   expression that gives the new PC counter location for which the code is
3067   assembled. Use <tt><ref id=".RELOC" name=".RELOC"></tt> to switch back to
3068   relocatable code.
3069
3070   By default, absolute/relocatable mode is global (valid even when switching
3071   segments). Using <tt>.FEATURE <ref id="org_per_seg" name="org_per_seg"></tt>
3072   it can be made segment local.
3073
3074   Please note that you <em/do not need/ <tt/.ORG/ in most cases. Placing
3075   code at a specific address is the job of the linker, not the assembler, so
3076   there is usually no reason to assemble code to a specific address.
3077
3078   Example:
3079
3080   <tscreen><verb>
3081         .org    $7FF            ; Emit code starting at $7FF
3082   </verb></tscreen>
3083
3084
3085 <sect1><tt>.OUT</tt><label id=".OUT"><p>
3086
3087   Output a string to the console without producing an error. This command
3088   is similar to <tt/.ERROR/, however, it does not force an assembler error
3089   that prevents the creation of an object file.
3090
3091   Example:
3092
3093   <tscreen><verb>
3094         .out    "This code was written by the codebuster(tm)"
3095   </verb></tscreen>
3096
3097   See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
3098   id=".ERROR" name=".ERROR"></tt> directives.
3099
3100
3101 <sect1><tt>.P02</tt><label id=".P02"><p>
3102
3103   Enable the 6502 instruction set, disable 65SC02, 65C02 and 65816
3104   instructions. This is the default if not overridden by the
3105   <tt><ref id="option--cpu" name="--cpu"></tt> command line option.
3106
3107   See: <tt><ref id=".PC02" name=".PC02"></tt>, <tt><ref id=".PSC02"
3108   name=".PSC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
3109
3110
3111 <sect1><tt>.P816</tt><label id=".P816"><p>
3112
3113   Enable the 65816 instruction set. This is a superset of the 65SC02 and
3114   6502 instruction sets.
3115
3116   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
3117   name=".PSC02"></tt> and <tt><ref id=".PC02" name=".PC02"></tt>
3118
3119
3120 <sect1><tt>.PAGELEN, .PAGELENGTH</tt><label id=".PAGELENGTH"><p>
3121
3122   Set the page length for the listing. Must be followed by an integer
3123   constant. The value may be "unlimited", or in the range 32 to 127. The
3124   statement has no effect if no listing is generated. The default value is -1
3125   (unlimited) but may be overridden by the <tt/--pagelength/ command line
3126   option. Beware: Since ca65 is a one pass assembler, the listing is generated
3127   after assembly is complete, you cannot use multiple line lengths with one
3128   source. Instead, the value set with the last <tt/.PAGELENGTH/ is used.
3129
3130   Examples:
3131
3132   <tscreen><verb>
3133         .pagelength     66              ; Use 66 lines per listing page
3134
3135         .pagelength     unlimited       ; Unlimited page length
3136   </verb></tscreen>
3137
3138
3139 <sect1><tt>.PC02</tt><label id=".PC02"><p>
3140
3141   Enable the 65C02 instructions set. This instruction set includes all
3142   6502 and 65SC02 instructions.
3143
3144   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
3145   name=".PSC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
3146
3147
3148 <sect1><tt>.POPCPU</tt><label id=".POPCPU"><p>
3149
3150   Pop the last CPU setting from the stack, and activate it.
3151
3152   This command will switch back to the CPU that was last pushed onto the CPU
3153   stack using the <tt><ref id=".PUSHCPU" name=".PUSHCPU"></tt> command, and
3154   remove this entry from the stack.
3155
3156   The assembler will print an error message if the CPU stack is empty when
3157   this command is issued.
3158
3159   See: <tt><ref id=".CPU" name=".CPU"></tt>, <tt><ref id=".PUSHCPU"
3160   name=".PUSHCPU"></tt>, <tt><ref id=".SETCPU" name=".SETCPU"></tt>
3161
3162
3163 <sect1><tt>.POPSEG</tt><label id=".POPSEG"><p>
3164
3165   Pop the last pushed segment from the stack, and set it.
3166
3167   This command will switch back to the segment that was last pushed onto the
3168   segment stack using the <tt><ref id=".PUSHSEG" name=".PUSHSEG"></tt>
3169   command, and remove this entry from the stack.
3170
3171   The assembler will print an error message if the segment stack is empty
3172   when this command is issued.
3173
3174   See: <tt><ref id=".PUSHSEG" name=".PUSHSEG"></tt>
3175
3176
3177 <sect1><tt>.PROC</tt><label id=".PROC"><p>
3178
3179   Start a nested lexical level with the given name and adds a symbol with this
3180   name to the enclosing scope. All new symbols from now on are in the local
3181   lexical level and are accessible from outside only via <ref id="scopesyntax"
3182   name="explicit scope specification">. Symbols defined outside this local
3183   level may be accessed as long as their names are not used for new symbols
3184   inside the level. Symbols names in other lexical levels do not clash, so you
3185   may use the same names for identifiers. The lexical level ends when the
3186   <tt><ref id=".ENDPROC" name=".ENDPROC"></tt> command is read. Lexical levels
3187   may be nested up to a depth of 16 (this is an artificial limit to protect
3188   against errors in the source).
3189
3190   Note: Macro names are always in the global level and in a separate name
3191   space. There is no special reason for this, it's just that I've never
3192   had any need for local macro definitions.
3193
3194   Example:
3195
3196   <tscreen><verb>
3197         .proc   Clear           ; Define Clear subroutine, start new level
3198                 lda     #$00
3199         L1:     sta     Mem,y   ; L1 is local and does not cause a
3200                                 ; duplicate symbol error if used in other
3201                                 ; places
3202                 dey
3203                 bne     L1      ; Reference local symbol
3204                 rts
3205         .endproc                ; Leave lexical level
3206   </verb></tscreen>
3207
3208   See: <tt/<ref id=".ENDPROC" name=".ENDPROC">/ and <tt/<ref id=".SCOPE"
3209   name=".SCOPE">/
3210
3211
3212 <sect1><tt>.PSC02</tt><label id=".PSC02"><p>
3213
3214   Enable the 65SC02 instructions set. This instruction set includes all
3215   6502 instructions.
3216
3217   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PC02"
3218   name=".PC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
3219
3220
3221 <sect1><tt>.PUSHCPU</tt><label id=".PUSHCPU"><p>
3222
3223   Push the currently active CPU onto a stack. The stack has a size of 8
3224   entries.
3225
3226   <tt/.PUSHCPU/ allows together with <tt><ref id=".POPCPU"
3227   name=".POPCPU"></tt> to switch to another CPU and to restore the old CPU
3228   later, without knowledge of the current CPU setting.
3229
3230   The assembler will print an error message if the CPU stack is already full,
3231   when this command is issued.
3232
3233   See: <tt><ref id=".CPU" name=".CPU"></tt>, <tt><ref id=".POPCPU"
3234   name=".POPCPU"></tt>, <tt><ref id=".SETCPU" name=".SETCPU"></tt>
3235
3236
3237 <sect1><tt>.PUSHSEG</tt><label id=".PUSHSEG"><p>
3238
3239   Push the currently active segment onto a stack. The entries on the stack
3240   include the name of the segment and the segment type. The stack has a size
3241   of 16 entries.
3242
3243   <tt/.PUSHSEG/ allows together with <tt><ref id=".POPSEG" name=".POPSEG"></tt>
3244   to switch to another segment and to restore the old segment later, without
3245   even knowing the name and type of the current segment.
3246
3247   The assembler will print an error message if the segment stack is already
3248   full, when this command is issued.
3249
3250   See: <tt><ref id=".POPSEG" name=".POPSEG"></tt>
3251
3252
3253 <sect1><tt>.RELOC</tt><label id=".RELOC"><p>
3254
3255   Switch back to relocatable mode. See the <tt><ref id=".ORG"
3256   name=".ORG"></tt> command.
3257
3258
3259 <sect1><tt>.REPEAT</tt><label id=".REPEAT"><p>
3260
3261   Repeat all commands between <tt/.REPEAT/ and <tt><ref id=".ENDREPEAT"
3262   name=".ENDREPEAT"></tt> constant number of times. The command is followed by
3263   a constant expression that tells how many times the commands in the body
3264   should get repeated. Optionally, a comma and an identifier may be specified.
3265   If this identifier is found in the body of the repeat statement, it is
3266   replaced by the current repeat count (starting with zero for the first time
3267   the body is repeated).
3268
3269   <tt/.REPEAT/ statements may be nested. If you use the same repeat count
3270   identifier for a nested <tt/.REPEAT/ statement, the one from the inner
3271   level will be used, not the one from the outer level.
3272
3273   Example:
3274
3275   The following macro will emit a string that is "encrypted" in that all
3276   characters of the string are XORed by the value $55.
3277
3278   <tscreen><verb>
3279         .macro  Crypt   Arg
3280                 .repeat .strlen(Arg), I
3281                 .byte   .strat(Arg, I) ^ $55
3282                 .endrep
3283         .endmacro
3284   </verb></tscreen>
3285
3286   See: <tt><ref id=".ENDREPEAT" name=".ENDREPEAT"></tt>
3287
3288
3289 <sect1><tt>.RES</tt><label id=".RES"><p>
3290
3291   Reserve storage. The command is followed by one or two constant
3292   expressions. The first one is mandatory and defines, how many bytes of
3293   storage should be defined. The second, optional expression must by a
3294   constant byte value that will be used as value of the data. If there
3295   is no fill value given, the linker will use the value defined in the
3296   linker configuration file (default: zero).
3297
3298   Example:
3299
3300   <tscreen><verb>
3301         ; Reserve 12 bytes of memory with value $AA
3302         .res    12, $AA
3303   </verb></tscreen>
3304
3305
3306 <sect1><tt>.RODATA</tt><label id=".RODATA"><p>
3307
3308   Switch to the RODATA segment. The name of the RODATA segment is always
3309   "RODATA", so this is a shortcut for
3310
3311   <tscreen><verb>
3312         .segment  "RODATA"
3313   </verb></tscreen>
3314
3315   The RODATA segment is a segment that is used by the compiler for
3316   readonly data like string constants.
3317
3318   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
3319
3320
3321 <sect1><tt>.SCOPE</tt><label id=".SCOPE"><p>
3322
3323   Start a nested lexical level with the given name. All new symbols from now
3324   on are in the local lexical level and are accessible from outside only via
3325   <ref id="scopesyntax" name="explicit scope specification">. Symbols defined
3326   outside this local level may be accessed as long as their names are not used
3327   for new symbols inside the level. Symbols names in other lexical levels do
3328   not clash, so you may use the same names for identifiers. The lexical level
3329   ends when the <tt><ref id=".ENDSCOPE" name=".ENDSCOPE"></tt> command is
3330   read. Lexical levels may be nested up to a depth of 16 (this is an
3331   artificial limit to protect against errors in the source).
3332
3333   Note: Macro names are always in the global level and in a separate name
3334   space. There is no special reason for this, it's just that I've never
3335   had any need for local macro definitions.
3336
3337   Example:
3338
3339   <tscreen><verb>
3340         .scope  Error                   ; Start new scope named Error
3341                 None = 0                ; No error
3342                 File = 1                ; File error
3343                 Parse = 2               ; Parse error
3344         .endscope                       ; Close lexical level
3345
3346                 ...
3347                 lda #Error::File        ; Use symbol from scope Error
3348   </verb></tscreen>
3349
3350   See: <tt/<ref id=".ENDSCOPE" name=".ENDSCOPE">/ and <tt/<ref id=".PROC"
3351   name=".PROC">/
3352
3353
3354 <sect1><tt>.SEGMENT</tt><label id=".SEGMENT"><p>
3355
3356   Switch to another segment. Code and data is always emitted into a
3357   segment, that is, a named section of data. The default segment is
3358   "CODE". There may be up to 254 different segments per object file
3359   (and up to 65534 per executable). There are shortcut commands for
3360   the most common segments ("CODE", "DATA" and "BSS").
3361
3362   The command is followed by a string containing the segment name (there are
3363   some constraints for the name - as a rule of thumb use only those segment
3364   names that would also be valid identifiers). There may also be an optional
3365   address size separated by a colon. See the section covering <tt/<ref
3366   id="address-sizes" name="address sizes">/ for more information.
3367
3368   The default address size for a segment depends on the memory model specified
3369   on the command line. The default is "absolute", which means that you don't
3370   have to use an address size modifier in most cases.
3371
3372   "absolute" means that the is a segment with 16 bit (absolute) addressing.
3373   That is, the segment will reside somewhere in core memory outside the zero
3374   page. "zeropage" (8 bit) means that the segment will be placed in the zero
3375   page and direct (short) addressing is possible for data in this segment.
3376
3377   Beware: Only labels in a segment with the zeropage attribute are marked
3378   as reachable by short addressing. The `*' (PC counter) operator will
3379   work as in other segments and will create absolute variable values.
3380
3381   Please note that a segment cannot have two different address sizes. A
3382   segment specified as zeropage cannot be declared as being absolute later.
3383
3384   Examples:
3385
3386   <tscreen><verb>
3387         .segment "ROM2"                 ; Switch to ROM2 segment
3388         .segment "ZP2": zeropage        ; New direct segment
3389         .segment "ZP2"                  ; Ok, will use last attribute
3390         .segment "ZP2": absolute        ; Error, redecl mismatch
3391   </verb></tscreen>
3392
3393   See: <tt><ref id=".BSS" name=".BSS"></tt>, <tt><ref id=".CODE"
3394   name=".CODE"></tt>, <tt><ref id=".DATA" name=".DATA"></tt> and <tt><ref
3395   id=".RODATA" name=".RODATA"></tt>
3396
3397
3398 <sect1><tt>.SETCPU</tt><label id=".SETCPU"><p>
3399
3400   Switch the CPU instruction set. The command is followed by a string that
3401   specifies the CPU. Possible values are those that can also be supplied to
3402   the <tt><ref id="option--cpu" name="--cpu"></tt> command line option,
3403   namely: 6502, 6502X, 65SC02, 65C02, 65816, sunplus and HuC6280. Please
3404   note that support for the sunplus CPU is not available in the freeware
3405   version, because the instruction set of the sunplus CPU is "proprietary
3406   and confidential".
3407
3408   See: <tt><ref id=".CPU" name=".CPU"></tt>,
3409        <tt><ref id=".IFP02" name=".IFP02"></tt>,
3410        <tt><ref id=".IFP816" name=".IFP816"></tt>,
3411        <tt><ref id=".IFPC02" name=".IFPC02"></tt>,
3412        <tt><ref id=".IFPSC02" name=".IFPSC02"></tt>,
3413        <tt><ref id=".P02" name=".P02"></tt>,
3414        <tt><ref id=".P816" name=".P816"></tt>,
3415        <tt><ref id=".PC02" name=".PC02"></tt>,
3416        <tt><ref id=".PSC02" name=".PSC02"></tt>
3417
3418
3419 <sect1><tt>.SMART</tt><label id=".SMART"><p>
3420
3421   Switch on or off smart mode. The command must be followed by a '+' or '-'
3422   character to switch the option on or off respectively. The default is off
3423   (that is, the assembler doesn't try to be smart), but this default may be
3424   changed by the -s switch on the command line.
3425
3426   In smart mode the assembler will do the following:
3427
3428   <itemize>
3429   <item>Track usage of the <tt/REP/ and <tt/SEP/ instructions in 65816 mode
3430         and update the operand sizes accordingly. If the operand of such an
3431         instruction cannot be evaluated by the assembler (for example, because
3432         the operand is an imported symbol), a warning is issued. Beware: Since
3433         the assembler cannot trace the execution flow this may lead to false
3434         results in some cases. If in doubt, use the <tt/.Inn/ and <tt/.Ann/
3435         instructions to tell the assembler about the current settings.
3436   <item>In 65816 mode, replace a <tt/RTS/ instruction by <tt/RTL/ if it is
3437         used within a procedure declared as <tt/far/, or if the procedure has
3438         no explicit address specification, but it is <tt/far/ because of the
3439         memory model used.
3440   </itemize>
3441
3442   Example:
3443
3444   <tscreen><verb>
3445         .smart                          ; Be smart
3446         .smart  -                       ; Stop being smart
3447   </verb></tscreen>
3448
3449   See: <tt><ref id=".A16" name=".A16"></tt>,
3450        <tt><ref id=".A8" name=".A8"></tt>,
3451        <tt><ref id=".I16" name=".I16"></tt>,
3452        <tt><ref id=".I8" name=".I8"></tt>
3453
3454
3455 <sect1><tt>.STRUCT</tt><label id=".STRUCT"><p>
3456
3457   Starts a struct definition. Structs are covered in a separate section named
3458   <ref id="structs" name="&quot;Structs and unions&quot;">.
3459
3460   See: <tt><ref id=".ENDSTRUCT" name=".ENDSTRUCT"></tt>
3461
3462
3463 <sect1><tt>.SUNPLUS</tt><label id=".SUNPLUS"><p>
3464
3465   Enable the SunPlus instructions set. This command will not work in the
3466   freeware version of the assembler, because the instruction set is
3467   "proprietary and confidential".
3468
3469   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
3470   name=".PSC02"></tt>, <tt><ref id=".PC02" name=".PC02"></tt>, and
3471   <tt><ref id=".P816" name=".P816"></tt>
3472
3473
3474 <sect1><tt>.TAG</tt><label id=".TAG"><p>
3475
3476   Allocate space for a struct or union.
3477
3478   Example:
3479
3480   <tscreen><verb>
3481         .struct Point
3482                 xcoord  .word
3483                 ycoord  .word
3484         .endstruct
3485
3486         .bss
3487                 .tag    Point           ; Allocate 4 bytes
3488   </verb></tscreen>
3489
3490
3491 <sect1><tt>.WARNING</tt><label id=".WARNING"><p>
3492
3493   Force an assembly warning. The assembler will output a warning message
3494   preceded by "User warning". This warning will always be output, even if
3495   other warnings are disabled with the <tt><ref id="option-W" name="-W0"></tt>
3496   command line option.
3497
3498   This command may be used to output possible problems when assembling
3499   the source file.
3500
3501   Example:
3502
3503   <tscreen><verb>
3504         .macro  jne     target
3505                 .local L1
3506                 .ifndef target
3507                 .warning "Forward jump in jne, cannot optimize!"
3508                 beq     L1
3509                 jmp     target
3510         L1:
3511                 .else
3512                 ...
3513                 .endif
3514         .endmacro
3515   </verb></tscreen>
3516
3517   See also the <tt><ref id=".ERROR" name=".ERROR"></tt> and <tt><ref id=".OUT"
3518   name=".OUT"></tt> directives.
3519
3520
3521 <sect1><tt>.WORD</tt><label id=".WORD"><p>
3522
3523   Define word sized data. Must be followed by a sequence of (word ranged,
3524   but not necessarily constant) expressions.
3525
3526   Example:
3527
3528   <tscreen><verb>
3529         .word   $0D00, $AF13, _Clear
3530   </verb></tscreen>
3531
3532
3533 <sect1><tt>.ZEROPAGE</tt><label id=".ZEROPAGE"><p>
3534
3535   Switch to the ZEROPAGE segment and mark it as direct (zeropage) segment.
3536   The name of the ZEROPAGE segment is always "ZEROPAGE", so this is a
3537   shortcut for
3538
3539   <tscreen><verb>
3540         .segment  "ZEROPAGE", zeropage
3541   </verb></tscreen>
3542
3543   Because of the "zeropage" attribute, labels declared in this segment are
3544   addressed using direct addressing mode if possible. You <em/must/ instruct
3545   the linker to place this segment somewhere in the address range 0..$FF
3546   otherwise you will get errors.
3547
3548   See: <tt><ref id=".SEGMENT" name=".SEGMENT"></tt>
3549
3550
3551
3552 <sect>Macros<label id="macros"><p>
3553
3554
3555 <sect1>Introduction<p>
3556
3557 Macros may be thought of as "parametrized super instructions". Macros are
3558 sequences of tokens that have a name. If that name is used in the source
3559 file, the macro is "expanded", that is, it is replaced by the tokens that
3560 were specified when the macro was defined.
3561
3562
3563 <sect1>Macros without parameters<p>
3564
3565 In it's simplest form, a macro does not have parameters. Here's an
3566 example:
3567
3568 <tscreen><verb>
3569         .macro  asr             ; Arithmetic shift right
3570                 cmp     #$80    ; Put bit 7 into carry
3571                 ror             ; Rotate right with carry
3572         .endmacro
3573 </verb></tscreen>
3574
3575 The macro above consists of two real instructions, that are inserted into
3576 the code, whenever the macro is expanded. Macro expansion is simply done
3577 by using the name, like this:
3578
3579 <tscreen><verb>
3580         lda     $2010
3581         asr
3582         sta     $2010
3583 </verb></tscreen>
3584
3585
3586 <sect1>Parametrized macros<p>
3587
3588 When using macro parameters, macros can be even more useful:
3589
3590 <tscreen><verb>
3591         .macro  inc16   addr
3592                 clc
3593                 lda     addr
3594                 adc     #$01
3595                 sta     addr
3596                 lda     addr+1
3597                 adc     #$00
3598                 sta     addr+1
3599         .endmacro
3600 </verb></tscreen>
3601
3602 When calling the macro, you may give a parameter, and each occurrence of
3603 the name "addr" in the macro definition will be replaced by the given
3604 parameter. So
3605
3606 <tscreen><verb>
3607         inc16   $1000
3608 </verb></tscreen>
3609
3610 will be expanded to
3611
3612 <tscreen><verb>
3613                 clc
3614                 lda     $1000
3615                 adc     #$01
3616                 sta     $1000
3617                 lda     $1000+1
3618                 adc     #$00
3619                 sta     $1000+1
3620 </verb></tscreen>
3621
3622 A macro may have more than one parameter, in this case, the parameters
3623 are separated by commas. You are free to give less parameters than the
3624 macro actually takes in the definition. You may also leave intermediate
3625 parameters empty. Empty parameters are replaced by empty space (that is,
3626 they are removed when the macro is expanded). If you have a look at our
3627 macro definition above, you will see, that replacing the "addr" parameter
3628 by nothing will lead to wrong code in most lines. To help you, writing
3629 macros with a variable parameter list, there are some control commands:
3630
3631 <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> tests the rest of the line and
3632 returns true, if there are any tokens on the remainder of the line. Since
3633 empty parameters are replaced by nothing, this may be used to test if a given
3634 parameter is empty. <tt><ref id=".IFNBLANK" name=".IFNBLANK"></tt> tests the
3635 opposite.
3636
3637 Look at this example:
3638
3639 <tscreen><verb>
3640         .macro  ldaxy   a, x, y
3641         .ifnblank       a
3642                 lda     #a
3643         .endif
3644         .ifnblank       x
3645                 ldx     #x
3646         .endif
3647         .ifnblank       y
3648                 ldy     #y
3649         .endif
3650         .endmacro
3651 </verb></tscreen>
3652
3653 This macro may be called as follows:
3654
3655 <tscreen><verb>
3656         ldaxy   1, 2, 3         ; Load all three registers
3657
3658         ldaxy   1, , 3          ; Load only a and y
3659
3660         ldaxy   , , 3           ; Load y only
3661 </verb></tscreen>
3662
3663 There's another helper command for determining, which macro parameters are
3664 valid: <tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt> This command is
3665 replaced by the parameter count given, <em/including/ intermediate empty macro
3666 parameters:
3667
3668 <tscreen><verb>
3669         ldaxy   1               ; .PARAMCOUNT = 1
3670         ldaxy   1,,3            ; .PARAMCOUNT = 3
3671         ldaxy   1,2             ; .PARAMCOUNT = 2
3672         ldaxy   1,              ; .PARAMCOUNT = 2
3673         ldaxy   1,2,3           ; .PARAMCOUNT = 3
3674 </verb></tscreen>
3675
3676 Macro parameters may optionally be enclosed into curly braces. This allows the
3677 inclusion of tokens that would otherwise terminate the parameter (the comma in
3678 case of a macro parameter).
3679
3680 <tscreen><verb>
3681         .macro  foo     arg1, arg2
3682                 ...
3683         .endmacro
3684
3685                 foo     ($00,x)         ; Two parameters passed
3686                 foo     {($00,x)}       ; One parameter passed
3687 </verb></tscreen>
3688
3689 In the first case, the macro is called with two parameters: '<tt/(&dollar;00/'
3690 and 'x)'. The comma is not passed to the macro, since it is part of the
3691 calling sequence, not the parameters.
3692
3693 In the second case, '(&dollar;00,x)' is passed to the macro, this time
3694 including the comma.
3695
3696
3697 <sect1>Detecting parameter types<p>
3698
3699 Sometimes it is nice to write a macro that acts differently depending on the
3700 type of the argument supplied. An example would be a macro that loads a 16 bit
3701 value from either an immediate operand, or from memory. The <tt/<ref
3702 id=".MATCH" name=".MATCH">/ and <tt/<ref id=".XMATCH" name=".XMATCH">/
3703 functions will allow you to do exactly this:
3704
3705 <tscreen><verb>
3706         .macro  ldax    arg
3707                 .if (.match (.left (1, {arg}), #))
3708                     ; immediate mode
3709                     lda     #<(.right (.tcount ({arg})-1, {arg}))
3710                     ldx     #>(.right (.tcount ({arg})-1, {arg}))
3711                 .else
3712                     ; assume absolute or zero page
3713                     lda     arg
3714                     ldx     1+(arg)
3715                 .endif
3716         .endmacro
3717 </verb></tscreen>
3718
3719 Using the <tt/<ref id=".MATCH" name=".MATCH">/ function, the macro is able to
3720 check if its argument begins with a hash mark. If so, two immediate loads are
3721 emitted, Otherwise a load from an absolute zero page memory location is
3722 assumed. Please note how the curly braces are used to enclose parameters to
3723 pseudo functions handling token lists. This is necessary, because the token
3724 lists may include commas or parens, which would be treated by the assembler
3725 as end-of-list.
3726
3727 The macro can be used as
3728
3729 <tscreen><verb>
3730         foo:    .word   $5678
3731         ...
3732                 ldax    #$1234          ; X=$12, A=$34
3733         ...
3734                 ldax    foo             ; X=$56, A=$78
3735 </verb></tscreen>
3736
3737
3738 <sect1>Recursive macros<p>
3739
3740 Macros may be used recursively:
3741
3742 <tscreen><verb>
3743         .macro  push    r1, r2, r3
3744                 lda     r1
3745                 pha
3746         .if     .paramcount > 1
3747                 push    r2, r3
3748         .endif
3749         .endmacro
3750 </verb></tscreen>
3751
3752 There's also a special macro to help writing recursive macros: <tt><ref
3753 id=".EXITMACRO" name=".EXITMACRO"></tt> This command will stop macro expansion
3754 immediately:
3755
3756 <tscreen><verb>
3757         .macro  push    r1, r2, r3, r4, r5, r6, r7
3758         .ifblank        r1
3759                 ; First parameter is empty
3760                 .exitmacro
3761         .else
3762                 lda     r1
3763                 pha
3764         .endif
3765                 push    r2, r3, r4, r5, r6, r7
3766         .endmacro
3767 </verb></tscreen>
3768
3769 When expanding this macro, the expansion will push all given parameters
3770 until an empty one is encountered. The macro may be called like this:
3771
3772 <tscreen><verb>
3773         push    $20, $21, $32           ; Push 3 ZP locations
3774         push    $21                     ; Push one ZP location
3775 </verb></tscreen>
3776
3777
3778 <sect1>Local symbols inside macros<p>
3779
3780 Now, with recursive macros, <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> and
3781 <tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt>, what else do you need?
3782 Have a look at the inc16 macro above. Here is it again:
3783
3784 <tscreen><verb>
3785         .macro  inc16   addr
3786                 clc
3787                 lda     addr
3788                 adc     #$01
3789                 sta     addr
3790                 lda     addr+1
3791                 adc     #$00
3792                 sta     addr+1
3793         .endmacro
3794 </verb></tscreen>
3795
3796 If you have a closer look at the code, you will notice, that it could be
3797 written more efficiently, like this:
3798
3799 <tscreen><verb>
3800         .macro  inc16   addr
3801                 inc     addr
3802                 bne     Skip
3803                 inc     addr+1
3804         Skip:
3805         .endmacro
3806 </verb></tscreen>
3807
3808 But imagine what happens, if you use this macro twice? Since the label
3809 "Skip" has the same name both times, you get a "duplicate symbol" error.
3810 Without a way to circumvent this problem, macros are not as useful, as
3811 they could be. One solution is, to start a new lexical block inside the
3812 macro:
3813
3814 <tscreen><verb>
3815         .macro  inc16   addr
3816         .proc
3817                 inc     addr
3818                 bne     Skip
3819                 inc     addr+1
3820         Skip:
3821         .endproc
3822         .endmacro
3823 </verb></tscreen>
3824
3825 Now the label is local to the block and not visible outside. However,
3826 sometimes you want a label inside the macro to be visible outside. To make
3827 that possible, there's a new command that's only usable inside a macro
3828 definition: <tt><ref id=".LOCAL" name=".LOCAL"></tt>. <tt/.LOCAL/ declares one
3829 or more symbols as local to the macro expansion. The names of local variables
3830 are replaced by a unique name in each separate macro expansion. So we could
3831 also solve the problem above by using <tt/.LOCAL/:
3832
3833 <tscreen><verb>
3834         .macro  inc16   addr
3835                 .local  Skip            ; Make Skip a local symbol
3836                 clc
3837                 lda     addr
3838                 adc     #$01
3839                 sta     addr
3840                 bcc     Skip
3841                 inc     addr+1
3842         Skip:                           ; Not visible outside
3843         .endmacro
3844 </verb></tscreen>
3845
3846
3847 <sect1>C style macros<p>
3848
3849 Starting with version 2.5 of the assembler, there is a second macro type
3850 available: C style macros using the <tt/.DEFINE/ directive. These macros are
3851 similar to the classic macro type described above, but behaviour is sometimes
3852 different:
3853
3854 <itemize>
3855
3856 <item>  Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> may not
3857         span more than a line. You may use line continuation (see <tt><ref
3858         id=".LINECONT" name=".LINECONT"></tt>) to spread the definition over
3859         more than one line for increased readability, but the macro itself
3860         may not contain an end-of-line token.
3861
3862 <item>  Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> share
3863         the name space with classic macros, but they are detected and replaced
3864         at the scanner level. While classic macros may be used in every place,
3865         where a mnemonic or other directive is allowed, <tt><ref id=".DEFINE"
3866         name=".DEFINE"></tt> style macros are allowed anywhere in a line. So
3867         they are more versatile in some situations.
3868
3869 <item>  <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may take
3870         parameters. While classic macros may have empty parameters, this is
3871         not true for <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros.
3872         For this macro type, the number of actual parameters must match
3873         exactly the number of formal parameters.
3874
3875         To make this possible, formal parameters are enclosed in braces when
3876         defining the macro. If there are no parameters, the empty braces may
3877         be omitted.
3878
3879 <item>  Since <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may not
3880         contain end-of-line tokens, there are things that cannot be done. They
3881         may not contain several processor instructions for example. So, while
3882         some things may be done with both macro types, each type has special
3883         usages. The types complement each other.
3884
3885 </itemize>
3886
3887 Let's look at a few examples to make the advantages and disadvantages
3888 clear.
3889
3890 To emulate assemblers that use "<tt/EQU/" instead of "<tt/=/" you may use the
3891 following <tt/.DEFINE/:
3892
3893 <tscreen><verb>
3894         .define EQU     =
3895
3896         foo     EQU     $1234           ; This is accepted now
3897 </verb></tscreen>
3898
3899 You may use the directive to define string constants used elsewhere:
3900
3901 <tscreen><verb>
3902         ; Define the version number
3903         .define VERSION         "12.3a"
3904
3905         ; ... and use it
3906         .asciiz VERSION
3907 </verb></tscreen>
3908
3909 Macros with parameters may also be useful:
3910
3911 <tscreen><verb>
3912         .define DEBUG(message)  .out    message
3913
3914         DEBUG   "Assembling include file #3"
3915 </verb></tscreen>
3916
3917 Note that, while formal parameters have to be placed in braces, this is
3918 not true for the actual parameters. Beware: Since the assembler cannot
3919 detect the end of one parameter, only the first token is used. If you
3920 don't like that, use classic macros instead:
3921
3922 <tscreen><verb>
3923         .macro  message
3924                 .out    message
3925         .endmacro
3926 </verb></tscreen>
3927
3928 (This is an example where a problem can be solved with both macro types).
3929
3930
3931 <sect1>Characters in macros<p>
3932
3933 When using the <ref id="option-t" name="-t"> option, characters are translated
3934 into the target character set of the specific machine. However, this happens
3935 as late as possible. This means that strings are translated if they are part
3936 of a <tt><ref id=".BYTE" name=".BYTE"></tt> or <tt><ref id=".ASCIIZ"
3937 name=".ASCIIZ"></tt> command. Characters are translated as soon as they are
3938 used as part of an expression.
3939
3940 This behaviour is very intuitive outside of macros but may be confusing when
3941 doing more complex macros. If you compare characters against numeric values,
3942 be sure to take the translation into account.
3943
3944
3945
3946
3947 <sect>Macro packages<label id="macropackages"><p>
3948
3949 Using the <tt><ref id=".MACPACK" name=".MACPACK"></tt> directive, predefined
3950 macro packages may be included with just one command. Available macro packages
3951 are:
3952
3953
3954 <sect1><tt>.MACPACK generic</tt><p>
3955
3956 This macro package defines macros that are useful in almost any program.
3957 Currently defined macros are:
3958
3959 <tscreen><verb>
3960         .macro  add     Arg
3961                 clc
3962                 adc     Arg
3963         .endmacro
3964
3965         .macro  sub     Arg
3966                 sec
3967                 sbc     Arg
3968         .endmacro
3969
3970         .macro  bge     Arg
3971                 bcs     Arg
3972         .endmacro
3973
3974         .macro  blt     Arg
3975                 bcc     Arg
3976         .endmacro
3977
3978         .macro  bgt     Arg
3979                 .local  L
3980                 beq     L
3981                 bcs     Arg
3982         L:
3983         .endmacro
3984
3985         .macro  ble     Arg
3986                 beq     Arg
3987                 bcc     Arg
3988         .endmacro
3989 </verb></tscreen>
3990
3991
3992 <sect1><tt>.MACPACK longbranch</tt><p>
3993
3994 This macro package defines long conditional jumps. They are named like the
3995 short counterpart but with the 'b' replaced by a 'j'. Here is a sample
3996 definition for the "<tt/jeq/" macro, the other macros are built using the same
3997 scheme:
3998
3999 <tscreen><verb>
4000         .macro  jeq     Target
4001                 .if     .def(Target) .and ((*+2)-(Target) <= 127)
4002                 beq     Target
4003                 .else
4004                 bne     *+5
4005                 jmp     Target
4006                 .endif
4007         .endmacro
4008 </verb></tscreen>
4009
4010 All macros expand to a short branch, if the label is already defined (back
4011 jump) and is reachable with a short jump. Otherwise the macro expands to a
4012 conditional branch with the branch condition inverted, followed by an absolute
4013 jump to the actual branch target.
4014
4015 The package defines the following macros:
4016
4017 <tscreen><verb>
4018         jeq, jne, jmi, jpl, jcs, jcc, jvs, jvc
4019 </verb></tscreen>
4020
4021
4022
4023 <sect1><tt>.MACPACK cbm</tt><p>
4024
4025 The cbm macro package will define a macro named <tt/scrcode/. It takes a
4026 string as argument and places this string into memory translated into screen
4027 codes.
4028
4029
4030 <sect1><tt>.MACPACK cpu</tt><p>
4031
4032 This macro package does not define any macros but constants used to examine
4033 the value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable. For
4034 each supported CPU a constant similar to
4035
4036 <tscreen><verb>
4037     CPU_6502
4038     CPU_65SC02
4039     CPU_65C02
4040     CPU_65816
4041     CPU_SUNPLUS
4042     CPU_SWEET16
4043     CPU_HUC6280
4044 </verb></tscreen>
4045
4046 is defined. These constants may be used to determine the exact type of the
4047 currently enabled CPU. In addition to that, for each CPU instruction set,
4048 another constant is defined:
4049
4050 <tscreen><verb>
4051     CPU_ISET_6502
4052     CPU_ISET_65SC02
4053     CPU_ISET_65C02
4054     CPU_ISET_65816
4055     CPU_ISET_SUNPLUS
4056     CPU_ISET_SWEET16
4057     CPU_ISET_HUC6280
4058 </verb></tscreen>
4059
4060 The value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable may
4061 be checked with <tt/<ref id="operators" name=".BITAND">/ to determine if the
4062 currently enabled CPU supports a specific instruction set. For example the
4063 65C02 supports all instructions of the 65SC02 CPU, so it has the
4064 <tt/CPU_ISET_65SC02/ bit set in addition to its native <tt/CPU_ISET_65C02/
4065 bit. Using
4066
4067 <tscreen><verb>
4068         .if (.cpu .bitand CPU_ISET_65SC02)
4069                 lda     (sp)
4070         .else
4071                 ldy     #$00
4072                 lda     (sp),y
4073         .endif
4074 </verb></tscreen>
4075
4076 it is possible to determine if the
4077
4078 <tscreen><verb>
4079                 lda     (sp)
4080 </verb></tscreen>
4081
4082 instruction is supported, which is the case for the 65SC02, 65C02 and 65816
4083 CPUs (the latter two are upwards compatible to the 65SC02).
4084
4085
4086
4087 <sect>Predefined constants<label id="predefined-constants"><p>
4088
4089 For better orthogonality, the assembler defines similar symbols as the
4090 compiler, depending on the target system selected:
4091
4092 <itemize>
4093 <item><tt/__APPLE2__/ - Target system is <tt/apple2/
4094 <item><tt/__APPLE2ENH__/ - Target system is <tt/apple2enh/
4095 <item><tt/__ATARI__/ - Target system is <tt/atari/
4096 <item><tt/__ATMOS__/ - Target system is <tt/atmos/
4097 <item><tt/__BBC__/ - Target system is <tt/bbc/
4098 <item><tt/__C128__/ - Target system is <tt/c128/
4099 <item><tt/__C16__/ - Target system is <tt/c16/
4100 <item><tt/__C64__/ - Target system is <tt/c64/
4101 <item><tt/__CBM__/ - Target is a Commodore system
4102 <item><tt/__CBM510__/ - Target system is <tt/cbm510/
4103 <item><tt/__CBM610__/ - Target system is <tt/cbm610/
4104 <item><tt/__GEOS__/ - Target system is <tt/geos/
4105 <item><tt/__LUNIX__/ - Target system is <tt/lunix/
4106 <item><tt/__NES__/ - Target system is <tt/nes/
4107 <item><tt/__PET__/ - Target system is <tt/pet/
4108 <item><tt/__PLUS4__/ - Target system is <tt/plus4/
4109 <item><tt/__SUPERVISION__/ - Target system is <tt/supervision/
4110 <item><tt/__VIC20__/ - Target system is <tt/vic20/
4111 </itemize>
4112
4113
4114 <sect>Structs and unions<label id="structs"><p>
4115
4116 <sect1>Structs and unions Overview<p>
4117
4118 Structs and unions are special forms of <ref id="scopes" name="scopes">.  They
4119 are to some degree comparable to their C counterparts. Both have a list of
4120 members. Each member allocates storage and may optionally have a name, which,
4121 in case of a struct, is the offset from the beginning and, in case of a union,
4122 is always zero.
4123
4124
4125 <sect1>Declaration<p>
4126
4127 Here is an example for a very simple struct with two members and a total size
4128 of 4 bytes:
4129
4130 <tscreen><verb>
4131       .struct Point
4132               xcoord  .word
4133               ycoord  .word
4134       .endstruct
4135 </verb></tscreen>
4136
4137 A union shares the total space between all its members, its size is the same
4138 as that of the largest member.
4139
4140 A struct or union must not necessarily have a name. If it is anonymous, no
4141 local scope is opened, the identifiers used to name the members are placed
4142 into the current scope instead.
4143
4144 A struct may contain unnamed members and definitions of local structs. The
4145 storage allocators may contain a multiplier, as in the example below:
4146
4147 <tscreen><verb>
4148       .struct Circle
4149               .struct Point
4150                       .word   2         ; Allocate two words
4151               .endstruct
4152               Radius  .word
4153       .endstruct
4154 </verb></tscreen>
4155
4156
4157 <sect1>The <tt/.TAG/ keyword<p>
4158
4159 Using the <ref id=".TAG" name=".TAG"> keyword, it is possible to reserve space
4160 for an already defined struct or unions within another struct:
4161
4162 <tscreen><verb>
4163       .struct Point
4164               xcoord  .word
4165               ycoord  .word
4166       .endstruct
4167
4168       .struct Circle
4169               Origin  .tag    Point
4170               Radius  .byte
4171       .endstruct
4172 </verb></tscreen>
4173
4174 Space for a struct or union may be allocated using the <ref id=".TAG"
4175 name=".TAG"> directive.
4176
4177 <tscreen><verb>
4178         C:      .tag    Circle
4179 </verb></tscreen>
4180
4181 Currently, members are just offsets from the start of the struct or union. To
4182 access a field of a struct, the member offset has to be added to the address
4183 of the struct itself:
4184
4185 <tscreen><verb>
4186         lda     C+Circle::Radius        ; Load circle radius into A
4187 </verb></tscreen>
4188
4189 This may change in a future version of the assembler.
4190
4191
4192 <sect1>Limitations<p>
4193
4194 Structs and unions are currently implemented as nested symbol tables (in fact,
4195 they were a by-product of the improved scoping rules). Currently, the
4196 assembler has no idea of types. This means that the <ref id=".TAG"
4197 name=".TAG"> keyword will only allocate space. You won't be able to initialize
4198 variables declared with <ref id=".TAG" name=".TAG">, and adding an embedded
4199 structure to another structure with <ref id=".TAG" name=".TAG"> will not make
4200 this structure accessible by using the '::' operator.
4201
4202
4203
4204 <sect>Module constructors/destructors<label id="condes"><p>
4205
4206 <em>Note:</em> This section applies mostly to C programs, so the explanation
4207 below uses examples from the C libraries. However, the feature may also be
4208 useful for assembler programs.
4209
4210
4211 <sect1>Module constructors/destructors Overview<p>
4212
4213 Using the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
4214 id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
4215 name=".INTERRUPTOR"></tt> keywords it it possible to export functions in a
4216 special way. The linker is able to generate tables with all functions of a
4217 specific type. Such a table will <em>only</em> include symbols from object
4218 files that are linked into a specific executable. This may be used to add
4219 initialization and cleanup code for library modules, or a table of interrupt
4220 handler functions.
4221
4222 The C heap functions are an example where module initialization code is used.
4223 All heap functions (<tt>malloc</tt>, <tt>free</tt>, ...) work with a few
4224 variables that contain the start and the end of the heap, pointers to the free
4225 list and so on. Since the end of the heap depends on the size and start of the
4226 stack, it must be initialized at runtime. However, initializing these
4227 variables for programs that do not use the heap are a waste of time and
4228 memory.
4229
4230 So the central module defines a function that contains initialization code and
4231 exports this function using the <tt/.CONSTRUCTOR/ statement. If (and only if)
4232 this module is added to an executable by the linker, the initialization
4233 function will be placed into the table of constructors by the linker. The C
4234 startup code will call all constructors before <tt/main/ and all destructors
4235 after <tt/main/, so without any further work, the heap initialization code is
4236 called once the module is linked in.
4237
4238 While it would be possible to add explicit calls to initialization functions
4239 in the startup code, the new approach has several advantages:
4240
4241 <enum>
4242 <item>
4243 If a module is not included, the initialization code is not linked in and not
4244 called. So you don't pay for things you don't need.
4245
4246 <item>
4247 Adding another library that needs initialization does not mean that the
4248 startup code has to be changed. Before we had module constructors and
4249 destructors, the startup code for all systems had to be adjusted to call the
4250 new initialization code.
4251
4252 <item>
4253 The feature saves memory: Each additional initialization function needs just
4254 two bytes in the table (a pointer to the function).
4255
4256 </enum>
4257
4258
4259 <sect1>Calling order<p>
4260
4261 The symbols are sorted in increasing priority order by the linker when using
4262 one of the builtin linker configurations, so the functions with lower
4263 priorities come first and are followed by those with higher priorities. The C
4264 library runtime subroutine that walks over the function tables calls the
4265 functions starting from the top of the table - which means that functions with
4266 a high priority are called first.
4267
4268 So when using the C runtime, functions are called with high priority functions
4269 first, followed by low priority functions.
4270
4271
4272 <sect1>Pitfalls<p>
4273
4274 When using these special symbols, please take care of the following:
4275
4276 <itemize>
4277
4278 <item>
4279 The linker will only generate function tables, it will not generate code to
4280 call these functions. If you're using the feature in some other than the
4281 existing C environments, you have to write code to call all functions in a
4282 linker generated table yourself. See the <tt/condes/ and <tt/callirq/ modules
4283 in the C runtime for an example on how to do this.
4284
4285 <item>
4286 The linker will only add addresses of functions that are in modules linked to
4287 the executable. This means that you have to be careful where to place the
4288 condes functions. If initialization or an irq handler is needed for a group of
4289 functions, be sure to place the function into a module that is linked in
4290 regardless of which function is called by the user.
4291
4292 <item>
4293 The linker will generate the tables only when requested to do so by the
4294 <tt/FEATURE CONDES/ statement in the linker config file. Each table has to
4295 be requested separately.
4296
4297 <item>
4298 Constructors and destructors may have priorities. These priorities determine
4299 the order of the functions in the table. If your initialization or cleanup code
4300 does depend on other initialization or cleanup code, you have to choose the
4301 priority for the functions accordingly.
4302
4303 <item>
4304 Besides the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
4305 id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
4306 name=".INTERRUPTOR"></tt> statements, there is also a more generic command:
4307 <tt><ref id=".CONDES" name=".CONDES"></tt>. This allows to specify an
4308 additional type. Predefined types are 0 (constructor), 1 (destructor) and 2
4309 (interruptor). The linker generates a separate table for each type on request.
4310
4311 </itemize>
4312
4313
4314 <sect>Porting sources from other assemblers<p>
4315
4316 Sometimes it is necessary to port code written for older assemblers to ca65.
4317 In some cases, this can be done without any changes to the source code by
4318 using the emulation features of ca65 (see <tt><ref id=".FEATURE"
4319 name=".FEATURE"></tt>). In other cases, it is necessary to make changes to the
4320 source code.
4321
4322 Probably the biggest difference is the handling of the <tt><ref id=".ORG"
4323 name=".ORG"></tt> directive. ca65 generates relocatable code, and placement is
4324 done by the linker. Most other assemblers generate absolute code, placement is
4325 done within the assembler and there is no external linker.
4326
4327 In general it is not a good idea to write new code using the emulation
4328 features of the assembler, but there may be situations where even this rule is
4329 not valid.
4330
4331 <sect1>TASS<p>
4332
4333 You need to use some of the ca65 emulation features to simulate the behaviour
4334 of such simple assemblers.
4335
4336 <enum>
4337 <item>Prepare your sourcecode like this:
4338
4339 <tscreen><verb>
4340         ; if you want TASS style labels without colons
4341         .feature labels_without_colons
4342
4343         ; if you want TASS style character constants
4344         ; ("a" instead of the default 'a')
4345         .feature loose_char_term
4346
4347                 .word *+2       ; the cbm load address
4348
4349                 [yourcode here]
4350 </verb></tscreen>
4351
4352 notice that the two emulation features are mostly useful for porting
4353 sources originally written in/for TASS, they are not needed for the
4354 actual "simple assembler operation" and are not recommended if you are
4355 writing new code from scratch.
4356
4357 <item>Replace all program counter assignments (which are not possible in ca65
4358 by default, and the respective emulation feature works different from what
4359 you'd expect) by another way to skip to memory locations, for example the
4360 <tt><ref id=".RES" name=".RES"></tt> directive.
4361
4362 <tscreen><verb>
4363         ; *=$2000
4364         .res $2000-*    ; reserve memory up to $2000
4365 </verb></tscreen>
4366
4367 Please note that other than the original TASS, ca65 can never move the program
4368 counter backwards - think of it as if you are assembling to disk with TASS.
4369
4370 <item>Conditional assembly (<tt/.ifeq//<tt/.endif//<tt/.goto/ etc.) must be
4371 rewritten to match ca65 syntax. Most importantly notice that due to the lack
4372 of <tt/.goto/, everything involving loops must be replaced by
4373 <tt><ref id=".REPEAT" name=".REPEAT"></tt>.
4374
4375 <item>To assemble code to a different address than it is executed at, use the
4376 <tt><ref id=".ORG" name=".ORG"></tt> directive instead of
4377 <tt/.offs/-constructs.
4378
4379 <tscreen><verb>
4380         .org $1800
4381
4382         [floppy code here]
4383
4384         .reloc  ; back to normal
4385 </verb></tscreen>
4386
4387 <item>Then assemble like this:
4388
4389 <tscreen><verb>
4390         cl65 --start-addr 0x0ffe -t none myprog.s -o myprog.prg
4391 </verb></tscreen>
4392
4393 Note that you need to use the actual start address minus two, since two bytes
4394 are used for the cbm load address.
4395
4396 </enum>
4397
4398
4399 <sect>Bugs/Feedback<p>
4400
4401 If you have problems using the assembler, if you find any bugs, or if
4402 you're doing something interesting with the assembler, I would be glad to
4403 hear from you. Feel free to contact me by email
4404 (<htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">).
4405
4406
4407
4408 <sect>Copyright<p>
4409
4410 ca65 (and all cc65 binutils) are (C) Copyright 1998-2003 Ullrich von
4411 Bassewitz. For usage of the binaries and/or sources the following
4412 conditions do apply:
4413
4414 This software is provided 'as-is', without any expressed or implied
4415 warranty.  In no event will the authors be held liable for any damages
4416 arising from the use of this software.
4417
4418 Permission is granted to anyone to use this software for any purpose,
4419 including commercial applications, and to alter it and redistribute it
4420 freely, subject to the following restrictions:
4421
4422 <enum>
4423 <item>  The origin of this software must not be misrepresented; you must not
4424         claim that you wrote the original software. If you use this software
4425         in a product, an acknowledgment in the product documentation would be
4426         appreciated but is not required.
4427 <item>  Altered source versions must be plainly marked as such, and must not
4428         be misrepresented as being the original software.
4429 <item>  This notice may not be removed or altered from any source
4430         distribution.
4431 </enum>
4432
4433
4434
4435 </article>
4436
4437
4438