]> git.sur5r.net Git - cc65/blob - doc/ca65.sgml
added info that time.h is safe to be used
[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>19.07.2000, 29.11.2000, 02.10.2001
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   -o name               Name the output file
100   -s                    Enable smart mode
101   -t sys                Set the target system
102   -v                    Increase verbosity
103
104 Long options:
105   --auto-import         Mark unresolved symbols as import
106   --cpu type            Set cpu type
107   --debug-info          Add debug info to object file
108   --feature name        Set an emulation feature
109   --help                Help (this text)
110   --ignore-case         Ignore case of symbols
111   --include-dir dir     Set an include directory search path
112   --listing             Create a listing if assembly was ok
113   --pagelength n        Set the page length for the listing
114   --smart               Enable smart mode
115   --target sys          Set the target system
116   --verbose             Increase verbosity
117   --version             Print the assembler version
118 ---------------------------------------------------------------------------
119 </verb></tscreen>
120
121
122 <sect1>Command line options in detail<p>
123
124 Here is a description of all the command line options:
125
126 <descrip>
127
128   <tag><tt>--cpu type</tt></tag>
129
130   Set the default for the CPU type. The option takes a parameter, which
131   may be one of
132
133         6502, 65C02, 65816 and sunplus
134
135   The latter (sunplus) is not available in the freeware version, because the
136   instruction set of the sunplus CPU is "confidential".
137
138
139   <label id="option--feature">
140   <tag><tt>--feature name</tt></tag>
141
142   Enable an emulation feature. This is identical as using <tt/.FEATURE/
143   in the source with two exceptions: Feature names must be lower case, and
144   each feature must be specified by using an extra <tt/--feature/ option,
145   comma separated lists are not allowed.
146
147   See the discussion of the <tt><ref id=".FEATURE" name=".FEATURE"></tt>
148   command for a list of emulation features.
149
150
151   <label id="option-g">
152   <tag><tt>-g, --debug-info</tt></tag>
153
154   When this option (or the equivalent control command <tt/.DEBUGINFO/) is
155   used, the assembler will add a section to the object file that contains
156   all symbols (including local ones) together with the symbol values and
157   source file positions. The linker will put these additional symbols into
158   the VICE label file, so even local symbols can be seen in the VICE
159   monitor.
160
161
162   <tag><tt>-h, --help</tt></tag>
163
164   Print the short option summary shown above.
165
166
167   <tag><tt>-i, --ignore-case</tt></tag>
168
169   This option makes the assembler case insensitive on identifiers and labels.
170   This option will override the default, but may itself be overriden by the
171   <tt><ref id=".CASE" name=".CASE"></tt> control command.
172
173
174   <tag><tt>-l, --listing</tt></tag>
175
176   Generate an assembler listing. The listing file will always have the
177   name of the main input file with the extension replaced by ".lst". This
178   may change in future versions.
179
180
181   <tag><tt>-o name</tt></tag>
182
183   The default output name is the name of the input file with the extension
184   replaced by ".o". If you don't like that, you may give another name with
185   the -o option. The output file will be placed in the same directory as
186   the source file, or, if -o is given, the full path in this name is used.
187
188
189   <tag><tt>--pagelength n</tt></tag>
190
191   sets the length of a listing page in lines. See the <tt><ref
192   id=".PAGELENGTH" name=".PAGELENGTH"></tt> directive for more information.
193
194
195   <tag><tt>-s, --smart-mode</tt></tag>
196
197   In smart mode (enabled by -s or the <tt><ref id=".SMART" name=".SMART"></tt>
198   pseudo instruction) the assembler will track usage of the <tt/REP/ and
199   <tt/SEP/ instructions in 65816 mode and update the operand sizes
200   accordingly. If the operand of such an instruction cannot be evaluated by
201   the assembler (for example, because the operand is an imported symbol), a
202   warning is issued.
203
204   Beware: Since the assembler cannot trace the execution flow this may
205   lead to false results in some cases. If in doubt, use the .ixx and .axx
206   instructions to tell the assembler about the current settings. Smart
207   mode is off by default.
208
209
210   <label id="option-t">
211   <tag><tt>-t sys, --target sys</tt></tag>
212
213   Set the target system. This will enable translation of character strings
214   and character constants into the character set of the target platform.
215   The default for the target system is "none", which means that no translation
216   will take place. The assembler supports the same target systems as the
217   compiler, see there for a list.
218
219
220   <tag><tt>-v, --verbose</tt></tag>
221
222   Increase the assembler verbosity. Usually only needed for debugging
223   purposes. You may use this option more than one time for even more
224   verbose output.
225
226
227   <tag><tt>-D</tt></tag>
228
229   This option allows you to define symbols on the command line. Without a
230   value, the symbol is defined with the value zero. When giving a value,
231   you may use the '&dollar;' prefix for hexadecimal symbols. Please note
232   that for some operating systems, '&dollar;' has a special meaning, so
233   you may have to quote the expression.
234
235
236   <tag><tt>-I dir, --include-dir dir</tt></tag>
237
238   Name a directory which is searched for include files. The option may be
239   used more than once to specify more than one directory to search. The
240   current directory is always searched first before considering any
241   additional directores.
242
243
244   <tag><tt>-U, --auto-import</tt></tag>
245
246   Mark symbols that are not defined in the sources as imported symbols. This
247   should be used with care since it delays error messages about typos and such
248   until the linker is run. The compiler uses the equivalent of this switch
249   (<tt><ref id=".AUTOIMPORT" name=".AUTOIMPORT"></tt>) to enable auto imported
250   symbols for the runtime library. However, the compiler is supposed to
251   generate code that runs through the assembler without problems, something
252   which is not always true for assembler programmers.
253
254
255   <tag><tt>-V, --version</tt></tag>
256
257   Print the version number of the assembler. If you send any suggestions
258   or bugfixes, please include the version number.
259
260
261   <label id="option-W">
262   <tag><tt>-Wn</tt></tag>
263
264   Set the warning level for the assembler. Using -W2 the assembler will
265   even warn about such things like unused imported symbols. The default
266   warning level is 1, and it would probably be silly to set it to
267   something lower.
268
269 </descrip>
270 <p>
271
272
273 <sect>Input format<p>
274
275 The assembler accepts the standard 6502/65816 assembler syntax. One line may
276 contain a label (which is identified by a colon), and, in addition to the
277 label, an assembler mnemonic, a macro, or a control command (see section <ref
278 id="control-commands" name="Control Commands"> for supported control
279 commands). Alternatively, the line may contain a symbol definition using the
280 '=' token. Everything after a semicolon is handled as a comment (that is, it
281 is ignored).
282
283 Here are some examples for valid input lines:
284
285 <tscreen><verb>
286         Label:                          ; A label and a comment
287                 lda     #$20            ; A 6502 instruction plus comment
288         L1:     ldx     #$20            ; Same with label
289         L2:     .byte   "Hello world"   ; Label plus control command
290                 mymac   $20             ; Macro expansion
291                 MySym = 3*L1            ; Symbol definition
292         MaSym   = Label                 ; Another symbol
293 </verb></tscreen>
294
295 The assembler accepts all valid 6502 mnemonics when in 6502 mode (the
296 default). The assembler accepts all valid 65SC02 mnemonics when in 65SC02 mode
297 (after a <tt><ref id=".PC02" name=".PC02"></tt> command is found). The
298 assembler accepts all valid 65816 mnemonics with a few exceptions after a
299 .P816 command is found. These exceptions are listed below.
300
301 In 65816 mode several aliases are accepted in addition to the official
302 mnemonics:
303
304 <tscreen><verb>
305         BGE is an alias for BCS
306         BLT is an alias for BCC
307         CPA is an alias for CMP
308         DEA is an alias for DEC A
309         INA is an alias for INC A
310         SWA is an alias for XBA
311         TAD is an alias for TCD
312         TAS is an alias for TCS
313         TDA is an alias for TDC
314         TSA is an alias for TSC
315 </verb></tscreen>
316
317 Evaluation of banked expressions in 65816 mode differs slightly from the
318 official syntax:
319
320 Instead of accepting a 24 bit address (something that is difficult for
321 the assembler to determine and would have required one more special
322 .import command), the bank and the absolute address in that bank are
323 separated by a dot:
324
325 <tscreen><verb>
326         jsl     3.$1234         ; Call subroutine at $1234 in bank 3
327 </verb></tscreen>
328
329 For literal values, the assembler accepts the widely used number formats:
330 A preceeding '&dollar;' denotes a hex value, a preceeding '%' denotes a
331 binary value, and a bare number is interpeted as a decimal. There are
332 currently no octal values and no floats.
333 <p>
334
335
336 <sect>Expressions<p>
337
338
339 <sect1>Expression evaluation<p>
340
341 All expressions are evaluated with (at least) 32 bit precision. An
342 expression may contain constant values and any combination of internal and
343 external symbols. Expressions that cannot be evaluated at assembly time
344 are stored inside the object file for evaluation by the linker.
345 Expressions referencing imported symbols must always be evaluated by the
346 linker.
347
348
349 <sect1>Size of an expressions result<p>
350
351 Sometimes, the assembler must know about the size of the value that is the
352 result of an expression. This is usually the case, if a decision has to be
353 made, to generate a zero page or an absolute memory references. In this
354 case, the assembler has to make some assumptions about the result of an
355 expression:
356
357 <itemize>
358 <item>  If the result of an expression is constant, the actual value is
359         checked to see if it's a byte sized expression or not.
360 <item>  If the expression is explicitly casted to a byte sized expression by
361         one of the '&gt;'/'&lt;' operators, it is a byte expression.
362 <item>  If this is not the case, and the expression contains a symbol,
363         explicitly declared as zero page symbol (by one of the .importzp or
364         .exportzp instructions), then the whole expression is assumed to be
365         byte sized.
366 <item>  If the expression contains symbols that are not defined, and these
367         symbols are local symbols, the enclosing scopes are searched for a
368         symbol with the same name. If one exists and this symbol is defined,
369         it's attributes are used to determine the result size.
370 <item>  In all other cases the expression is assumed to be word sized.
371 </itemize>
372
373 Note: If the assembler is not able to evaluate the expression at assembly
374 time, the linker will evaluate it and check for range errors as soon as
375 the result is known.
376
377
378 <sect1>Boolean expressions<p>
379
380 In the context of a boolean expression, any non zero value is evaluated as
381 true, any other value to false. The result of a boolean expression is 1 if
382 it's true, and zero if it's false. There are boolean operators with extrem
383 low precedence with version 2.x (where x &gt; 0). The <tt/.AND/ and <tt/.OR/
384 operators are shortcut operators. That is, if the result of the expression is
385 already known, after evaluating the left hand side, the right hand side is
386 not evaluated.
387
388
389 <sect1>Available operators<p>
390
391 Available operators sorted by precedence:
392
393 <tscreen><verb>
394     Op          Description                             Precedence
395   -------------------------------------------------------------------
396     .CONCAT     Builtin function                        0
397     .LEFT       Builtin function                        0
398     .MID        Builtin function                        0
399     .RIGHT      Builtin function                        0
400     .STRING     Builtin function                        0
401
402     *           Builtin pseudo variable (r/o)           1
403     .BLANK      Builtin function                        1
404     .CONST      Builtin function                        1
405     .CPU        Builtin pseudo variable (r/o)           1
406     .DEFINED    Builtin function                        1
407     .MATCH      Builtin function                        1
408     .TCOUNT     Builtin function                        1
409     .XMATCH     Builtin function                        1
410     .PARAMCOUNT Builtin pseudo variable (r/o)           1
411     .REFERENCED Builtin function                        1
412     ::          Global namespace override               1
413     +           Unary plus                              1
414     -           Unary minus                             1
415     ~           Unary bitwise not                       1
416     .BITNOT     Unary bitwise not                       1
417     &lt;           Low byte operator                       1
418     &gt;           High byte operator                      1
419
420     *           Multiplication                          2
421     /           Division                                2
422     .MOD        Modulo operation                        2
423     &amp;           Bitwise and                             2
424     .BITAND     Bitwise and                             2
425     ^           Bitwise xor                             2
426     .BITXOR     Bitwise xor                             2
427     &lt;&lt;          Shift left operator                     2
428     .SHL        Shift left operator                     2
429     &gt;&gt;          Shift right operator
430     .SHR        Shift right operator                    2
431
432     +           Binary plus                             3
433     -           Binary minus                            3
434     |           Binary or                               3
435     .BITOR      Binary or                               3
436
437     =           Compare operation (equal)               4
438     &lt;&gt;          Compare operation (not equal)           4
439     &lt;           Compare operation (less)                4
440     &gt;           Compare operation (greater)             4
441     &lt;=          Compare operation (less or equal)       4
442     &gt;=          Compare operation (greater or equal)    4
443
444     &amp;&amp;          Boolean and                             5
445     .AND        Boolean and                             5
446     .XOR        Boolean xor                             5
447
448     ||          Boolean or                              6
449     .OR         Boolean or                              6
450
451     !           Boolean not                             7
452     .NOT        Boolean not                             7
453 </verb></tscreen>
454
455
456 To force a specific order of evaluation, braces may be used as usual.
457
458 Some of the pseudo variables mentioned above need some more explanation:
459
460 <tscreen><verb>
461   *             This symbol is replaced by the value of the program
462                 counter at start of the current instruction. Note, that
463                 '*' yields a rvalue, that means, you cannot assign to it.
464                 Use <tt/.ORG/ to set the program counter in sections with
465                 absolute code.
466 </verb></tscreen>
467 <p>
468
469
470
471 <sect>Symbols and labels<p>
472
473 The assembler allows you to use symbols instead of naked values to make
474 the source more readable. There are a lot of different ways to define and
475 use symbols and labels, giving a lot of flexibility.
476
477
478 <sect1>Numeric constants<p>
479
480 Numeric constants are defined using the equal sign. After doing
481
482 <tscreen><verb>
483       two = 2
484 </verb></tscreen>
485
486 may use the symbol "two" in every place where a number is expected, and it is
487 evaluated to the value 2 in this context. An example would be
488
489 <tscreen><verb>
490       four = two * two
491 </verb></tscreen>
492
493
494 <sect1>Standard labels<p>
495
496 A label is defined by writing the name of the label at the start of the line
497 (before any instruction mnemonic, macro or pseudo directive), followed by a
498 colon. This will declare a symbol with the given name and the value of the
499 current program counter.
500
501
502 <sect1>Local labels and symbols<p>
503
504 Using the <tt><ref id=".PROC" name=".PROC"></tt> directive, it is possible to
505 create regions of code where the names of labels and symbols are local to this
506 region. They are not known outside of this region and cannot be accessed from
507 there. Such regions may be nested like PROCEDUREs in Pascal.
508
509 See the description of the <tt><ref id=".PROC" name=".PROC"></tt>
510 directive for more information.
511
512
513 <sect1>Cheap local labels<p>
514
515 Cheap local labels are defined like standard labels, but the name of the
516 label must begin with a special symbol (usually '@', but this can be
517 changed by the <tt><ref id=".LOCALCHAR" name=".LOCALCHAR"></tt>
518 directive).
519
520 Cheap local labels are visible only between two non cheap labels. As soon as a
521 standard symbol is encountered (this may also be a local symbol if inside a
522 region defined with the <tt><ref id=".PROC" name=".PROC"></tt> directive), the
523 cheap local symbol goes out of scope.
524
525 You may use cheap local labels as an easy way to reuse common label
526 names like "Loop". Here is an example:
527
528 <tscreen><verb>
529         Clear:  lda    #$00             ; Global label
530                 ldy    #$20
531         @Loop:  sta    Mem,y            ; Local label
532                 dey
533                 bne    @Loop            ; Ok
534                 rts
535         Sub:    ...                     ; New global label
536                 bne    @Loop            ; ERROR: Unknown identifier!
537 </verb></tscreen>
538
539 <sect1>Unnamed labels<p>
540
541 If you really want to write messy code, there are also unnamed
542 labels. These labels do not have a name (you guessed that already,
543 didn't you?). A colon is used to mark the absence of the name.
544
545 Unnamed labels may be accessed by using the colon plus several minus
546 or plus characters as a label designator. Using the '-' characters
547 will create a back reference (use the n'th label backwards), using
548 '+' will create a forward reference (use the n'th label in forward
549 direction). An example will help to understand this:
550
551 <tscreen><verb>
552         :       lda     (ptr1),y        ; #1
553                 cmp     (ptr2),y
554                 bne     :+              ; -> #2
555                 tax
556                 beq     :+++            ; -> #4
557                 iny
558                 bne     :-              ; -> #1
559                 inc     ptr1+1
560                 inc     ptr2+1
561                 bne     :-              ; -> #1
562
563         :       bcs     :+              ; #2 -> #3
564                 ldx     #$FF
565                 rts
566
567         :       ldx     #$01            ; #3
568         :       rts                     ; #4
569 </verb></tscreen>
570
571 As you can see from the example, unnamed labels will make even short
572 sections of code hard to understand, because you have to count labels
573 to find branch targets (this is the reason why I for my part do
574 prefer the "cheap" local labels). Nevertheless, unnamed labels are
575 convenient in some situations, so it's your decision.
576
577
578 <sect1>Using macros to define labels and constants<p>
579
580 While there are drawbacks with this approach, it may be handy in some
581 situations. Using <tt><ref id=".DEFINE" name=".DEFINE"></tt>, it is
582 possible to define symbols or constants that may be used elsewhere. Since
583 the macro facility works on a very low level, there is no scoping. On the
584 other side, you may also define string constants this way (this is not
585 possible with the other symbol types).
586
587 Example:
588
589 <tscreen><verb>
590         .DEFINE two     2
591         .DEFINE version "SOS V2.3"
592
593         four = two * two        ; Ok
594         .byte   version         ; Ok
595
596         .PROC                   ; Start local scope
597         two = 3                 ; Will give "2 = 3" - invalid!
598         .ENDPROC
599 </verb></tscreen>
600
601
602 <sect1>Symbols and <tt>.DEBUGINFO</tt><p>
603
604 If <tt><ref id=".DEBUGINFO" name=".DEBUGINFO"></tt> is enabled (or <ref
605 id="option-g" name="-g"> is given on the command line), global, local and
606 cheap local labels are written to the object file and will be available in the
607 symbol file via the linker. Unnamed labels are not written to the object file,
608 because they don't have a name which would allow to access them.
609
610
611
612 <sect>Control commands<label id="control-commands">
613
614 <p>
615 Here's a list of all control commands and a description, what they do:
616
617
618 <sect1><tt>.A16</tt><label id=".A16"><p>
619
620   Valid only in 65816 mode. Switch the accumulator to 16 bit.
621
622   Note: This command will not emit any code, it will tell the assembler to
623   create 16 bit operands for immediate accumulator adressing mode.
624
625   See also: <tt><ref id=".SMART" name=".SMART"></tt>
626
627
628 <sect1><tt>.A8</tt><label id=".A8"><p>
629
630   Valid only in 65816 mode. Switch the accumulator to 8 bit.
631
632   Note: This command will not emit any code, it will tell the assembler to
633   create 8 bit operands for immediate accu adressing mode.
634
635   See also: <tt><ref id=".SMART" name=".SMART"></tt>
636
637
638 <sect1><tt>.ADDR</tt><label id=".ADDR"><p>
639
640   Define word sized data. In 6502 mode, this is an alias for <tt/.WORD/ and
641   may be used for better readability if the data words are address values. In
642   65816 mode, the address is forced to be 16 bit wide to fit into the current
643   segment. See also <tt><ref id=".FARADDR" name=".FARADDR"></tt>. The command
644   must be followed by a sequence of (not necessarily constant) expressions.
645
646   Example:
647
648   <tscreen><verb>
649         .addr   $0D00, $AF13, _Clear
650   </verb></tscreen>
651
652   See: <tt><ref id=".FARADDR" name=".FARADDR"></tt>, <tt><ref id=".WORD"
653        name=".WORD"></tt>
654
655
656 <sect1><tt>.ALIGN</tt><label id=".ALIGN"><p>
657
658   Align data to a given boundary. The command expects a constant integer
659   argument that must be a power of two, plus an optional second argument
660   in byte range. If there is a second argument, it is used as fill value,
661   otherwise the value defined in the linker configuration file is used
662   (the default for this value is zero).
663
664   Since alignment depends on the base address of the module, you must
665   give the same (or a greater) alignment for the segment when linking.
666   The linker will give you a warning, if you don't do that.
667
668   Example:
669
670   <tscreen><verb>
671         .align  256
672   </verb></tscreen>
673
674
675 <sect1><tt>.ASCIIZ</tt><label id=".ASCIIZ"><p>
676
677   Define a string with a trailing zero.
678
679   Example:
680
681   <tscreen><verb>
682         Msg:    .asciiz "Hello world"
683   </verb></tscreen>
684
685   This will put the string "Hello world" followed by a binary zero into
686   the current segment. There may be more strings separated by commas, but
687   the binary zero is only appended once (after the last one).
688
689
690 <sect1><tt>.AUTOIMPORT</tt><label id=".AUTOIMPORT"><p>
691
692   Is followed by a plus or a minus character. When switched on (using a
693   +), undefined symbols are automatically marked as import instead of
694   giving errors. When switched off (which is the default so this does not
695   make much sense), this does not happen and an error message is
696   displayed. The state of the autoimport flag is evaluated when the
697   complete source was translated, before outputing actual code, so it is
698   <em/not/ possible to switch this feature on or off for separate sections
699   of code. The last setting is used for all symbols.
700
701   You should probably not use this switch because it delays error
702   messages about undefined symbols until the link stage. The cc65
703   compiler (which is supposed to produce correct assembler code in all
704   circumstances, something which is not true for most assembler
705   programmers) will insert this command to avoid importing each and every
706   routine from the runtime library.
707
708   Example:
709
710   <tscreen><verb>
711         .autoimport     +       ; Switch on auto import
712   </verb></tscreen>
713
714
715 <sect1><tt>.BLANK</tt><label id=".BLANK"><p>
716
717   Builtin function. The function evaluates its argument in braces and
718   yields "false" if the argument is non blank (there is an argument), and
719   "true" if there is no argument. As an example, the <tt/.IFBLANK/ statement
720   may be replaced by
721
722   <tscreen><verb>
723         .if     .blank(arg)
724   </verb></tscreen>
725
726
727 <sect1><tt>.BSS</tt><label id=".BSS"><p>
728
729   Switch to the BSS segment. The name of the BSS segment is always "BSS",
730   so this is a shortcut for
731
732   <tscreen><verb>
733         .segment  "BSS"
734   </verb></tscreen>
735
736   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
737
738
739 <sect1><tt>.BYT, .BYTE</tt><label id=".BYTE"><p>
740
741   Define byte sized data. Must be followed by a sequence of (byte ranged)
742   expressions or strings.
743
744   Example:
745
746   <tscreen><verb>
747         .byte   "Hello "
748         .byt    "world", $0D, $00
749   </verb></tscreen>
750
751
752 <sect1><tt>.CASE</tt><label id=".CASE"><p>
753
754   Switch on or off case sensitivity on identifiers. The default is off
755   (that is, identifiers are case sensitive), but may be changed by the
756   -i switch on the command line.
757   The command must be followed by a '+' or '-' character to switch the
758   option on or off respectively.
759
760   Example:
761
762   <tscreen><verb>
763         .case   -               ; Identifiers are not case sensitive
764   </verb></tscreen>
765
766
767 <sect1><tt>.CODE</tt><label id=".CODE"><p>
768
769   Switch to the CODE segment. The name of the CODE segment is always
770   "CODE", so this is a shortcut for
771
772   <tscreen><verb>
773         .segment  "CODE"
774   </verb></tscreen>
775
776   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
777
778
779 <sect1><tt>.CONDES</tt><label id=".CONDES"><p>
780
781   Export a symbol and mark it in a special way. The linker is able to build
782   tables of all such symbols. This may be used to automatically create a list
783   of functions needed to initialize linked library modules.
784
785   Note: The linker has a feature to build a table of marked routines, but it
786   is your code that must call these routines, so just declaring a symbol with
787   <tt/.CONDES/ does nothing by itself.
788
789   All symbols are exported as an absolute (16 bit) symbol. You don't need to
790   use an additional <tt><ref id=".EXPORT" name=".EXPORT"></tt> statement, this
791   is implied by <tt/.CONDES/.
792
793   <tt/.CONDES/ is followed by the type, which may be <tt/constructor/,
794   <tt/destructor/ or a numeric value between 0 and 6 (where 0 is the same as
795   specifiying <tt/constructor/ and 1 is equal to specifying <tt/destructor/).
796   The <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
797   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands are actually shortcuts
798   for <tt/.CONDES/ with a type of <tt/constructor/ resp. <tt/destructor/.
799
800   After the type, an optional priority may be specified. If no priority is
801   given, the default priority of 7 is used. Be careful when assigning
802   priorities to your own module constructors so they won't interfere with the
803   ones in the cc65 library.
804
805   Example:
806
807   <tscreen><verb>
808         .condes         ModuleInit, constructor
809         .condes         ModInit, 0, 16
810   </verb></tscreen>
811
812   See the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
813   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands and the separate section
814   <ref id="condes" name="Module constructors/destructors"> explaining the
815   feature in more detail.
816
817
818 <sect1><tt>.CONCAT</tt><label id=".CONCAT"><p>
819
820   Builtin function. The function allows to concatenate a list of string
821   constants separated by commas. The result is a string constant that
822   is the concatentation of all arguments. This function is most useful
823   in macros and when used together with the <tt/.STRING/ builtin function.
824   The function may be used in any case where a string constant is
825   expected.
826
827   Example:
828
829   <tscreen><verb>
830         .include        .concat ("myheader", ".", "inc")
831   </verb></tscreen>
832
833   This is the same as the command
834
835   <tscreen><verb>
836         .include        "myheader.inc"
837   </verb></tscreen>
838
839
840 <sect1><tt>.CONST</tt><label id=".CONST"><p>
841
842   Builtin function. The function evaluates its argument in braces and
843   yields "true" if the argument is a constant expression (that is, an
844   expression that yields a constant value at assembly time) and "false"
845   otherwise. As an example, the .IFCONST statement may be replaced by
846
847   <tscreen><verb>
848         .if     .const(a + 3)
849   </verb></tscreen>
850
851
852 <sect1><tt>.CONSTRUCTOR</tt><label id=".CONSTRUCTOR"><p>
853
854   Export a symbol and mark it as a module constructor. This may be used
855   together with the linker to build a table of constructor subroutines that
856   are called by the startup code.
857
858   Note: The linker has a feature to build a table of marked routines, but it
859   is your code that must call these routines, so just declaring a symbol as
860   constructor does nothing by itself.
861
862   A constructor is always exported as an absolute (16 bit) symbol. You don't
863   need to use an additional <tt/.export/ statement, this is implied by
864   <tt/.constructor/. It may have an optional priority that is separated by a
865   comma. If no priority is given, the default priority of 7 is used. Be
866   careful when assigning priorities to your own module constructors so they
867   won't interfere with the ones in the cc65 library.
868
869   Example:
870
871   <tscreen><verb>
872         .constructor    ModuleInit
873         .constructor    ModInit, 16
874   </verb></tscreen>
875
876   See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
877   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands and the separate section
878   <ref id="condes" name="Module constructors/destructors"> explaining the
879   feature in more detail.
880
881
882 <sect1><tt>.CPU</tt><label id=".CPU"><p>
883
884   Reading this pseudo variable will give a constant integer value that
885   tells which instruction set is currently enabled. Possible values are:
886
887   <tscreen><verb>
888         0 -->   6502
889         1 -->   65SC02
890         2 -->   65SC816
891         3 -->   SunPlus SPC
892   </verb></tscreen>
893
894   It may be used to replace the .IFPxx pseudo instructions or to construct
895   even more complex expressions.
896
897   Example:
898
899   <tscreen><verb>
900         .if     (.cpu = 0) .or (.cpu = 1)
901                 txa
902                 pha
903                 tya
904                 pha
905         .else
906                 phx
907                 phy
908         .endif
909   </verb></tscreen>
910
911
912 <sect1><tt>.DATA</tt><label id=".DATA"><p>
913
914   Switch to the DATA segment. The name of the DATA segment is always
915   "DATA", so this is a shortcut for
916
917   <tscreen><verb>
918         .segment  "DATA"
919   </verb></tscreen>
920
921   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
922
923
924 <sect1><tt>.DBYT</tt><label id=".DBYT"><p>
925
926   Define word sized data with the hi and lo bytes swapped (use <tt/.WORD/ to
927   create word sized data in native 65XX format). Must be followed by a
928   sequence of (word ranged) expressions.
929
930   Example:
931
932   <tscreen><verb>
933         .dbyt   $1234, $4512
934   </verb></tscreen>
935
936   This will emit the bytes
937
938   <tscreen><verb>
939         $12 $34 $45 $12
940   </verb></tscreen>
941
942   into the current segment in that order.
943
944
945 <sect1><tt>.DEBUGINFO</tt><label id=".DEBUGINFO"><p>
946
947   Switch on or off debug info generation. The default is off (that is,
948   the object file will not contain debug infos), but may be changed by the
949   -g switch on the command line.
950   The command must be followed by a '+' or '-' character to switch the
951   option on or off respectively.
952
953   Example:
954
955   <tscreen><verb>
956         .debuginfo      +       ; Generate debug info
957   </verb></tscreen>
958
959
960 <sect1><tt>.DEFINE</tt><label id=".DEFINE"><p>
961
962   Start a define style macro definition. The command is followed by an
963   identifier (the macro name) and optionally by a list of formal arguments
964   in braces.
965   See section <ref id="macros" name="Macros">.
966
967
968 <sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p>
969
970   Builtin function. The function expects an identifier as argument in braces.
971   The argument is evaluated, and the function yields "true" if the identifier
972   is a symbol that is already defined somewhere in the source file up to the
973   current position. Otherwise the function yields false. As an example, the
974   <tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by
975
976   <tscreen><verb>
977         .if     .defined(a)
978   </verb></tscreen>
979
980
981 <sect1><tt>.DESTRUCTOR</tt><label id=".DESTRUCTOR"><p>
982
983   Export a symbol and mark it as a module destructor. This may be used
984   together with the linker to build a table of destructor subroutines that
985   are called by the startup code.
986
987   Note: The linker has a feature to build a table of marked routines, but it
988   is your code that must call these routines, so just declaring a symbol as
989   constructor does nothing by itself.
990
991   A destructor is always exported as an absolute (16 bit) symbol. You don't
992   need to use an additional <tt/.export/ statement, this is implied by
993   <tt/.destructor/. It may have an optional priority that is separated by a
994   comma. If no priority is given, the default priority of 7 is used. Be
995   careful when assigning priorities to your own module destructors so they
996   won't interfere with the ones in the cc65 library.
997
998   Example:
999
1000   <tscreen><verb>
1001         .destructor     ModuleDone
1002         .destructor     ModDone, 16
1003   </verb></tscreen>
1004
1005   See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
1006   id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> commands and the separate
1007   section <ref id="condes" name="Module constructors/destructors"> explaining
1008   the feature in more detail.
1009
1010
1011 <sect1><tt>.DWORD</tt><label id=".DWORD"><p>
1012
1013   Define dword sized data (4 bytes) Must be followed by a sequence of
1014   expressions.
1015
1016   Example:
1017
1018   <tscreen><verb>
1019         .dword  $12344512, $12FA489
1020   </verb></tscreen>
1021
1022
1023 <sect1><tt>.ELSE</tt><label id=".ELSE"><p>
1024
1025   Conditional assembly: Reverse the current condition.
1026
1027
1028 <sect1><tt>.ELSEIF</tt><label id=".ELSEIF"><p>
1029
1030   Conditional assembly: Reverse current condition and test a new one.
1031
1032
1033 <sect1><tt>.END</tt><label id=".END"><p>
1034
1035   Forced end of assembly. Assembly stops at this point, even if the command
1036   is read from an include file.
1037
1038
1039 <sect1><tt>.ENDIF</tt><label id=".ENDIF"><p>
1040
1041   Conditional assembly: Close a <tt><ref id=".IF" name=".IF..."></tt> or
1042   <tt><ref id=".ELSE" name=".ELSE"></tt> branch.
1043
1044
1045 <sect1><tt>.ENDMAC, .ENDMACRO</tt><label id=".ENDMACRO"><p>
1046
1047   End of macro definition (see section <ref id="macros" name="Macros">).
1048
1049
1050 <sect1><tt>.ENDPROC</tt><label id=".ENDPROC"><p>
1051
1052   End of local lexical level (see <tt><ref id=".PROC" name=".PROC"></tt>).
1053
1054
1055 <sect1><tt>.ENDREP, .ENDREPEAT</tt><label id=".ENDREPEAT"><p>
1056
1057   End a <tt><ref id=".REPEAT" name=".REPEAT"></tt> block.
1058
1059
1060 <sect1><tt>.ERROR</tt><label id=".ERROR"><p>
1061
1062   Force an assembly error. The assembler will output an error message
1063   preceeded by "User error" and will <em/not/ produce an object file.
1064
1065   This command may be used to check for initial conditions that must be
1066   set before assembling a source file.
1067
1068   Example:
1069
1070   <tscreen><verb>
1071         .if     foo = 1
1072         ...
1073         .elseif bar = 1
1074         ...
1075         .else
1076         .error  "Must define foo or bar!"
1077         .endif
1078   </verb></tscreen>
1079
1080   See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
1081   id=".OUT" name=".OUT"></tt> directives.
1082
1083
1084 <sect1><tt>.EXITMAC, .EXITMACRO</tt><label id=".EXITMACRO"><p>
1085
1086   Abort a macro expansion immidiately. This command is often useful in
1087   recursive macros. See separate section <ref id="macros" name="Macros">.
1088
1089
1090 <sect1><tt>.EXPORT</tt><label id=".EXPORT"><p>
1091
1092   Make symbols accessible from other modules. Must be followed by a comma
1093   separated list of symbols to export.
1094
1095   Example:
1096
1097   <tscreen><verb>
1098         .export foo, bar
1099   </verb></tscreen>
1100
1101   See: <tt><ref id=".EXPORTZP" name=".EXPORTZP"></tt>
1102
1103
1104 <sect1><tt>.EXPORTZP</tt><label id=".EXPORTZP"><p>
1105
1106   Make symbols accessible from other modules. Must be followed by a comma
1107   separated list of symbols to export. The exported symbols are explicitly
1108   marked as zero page symols.
1109
1110   Example:
1111
1112   <tscreen><verb>
1113         .exportzp  foo, bar
1114   </verb></tscreen>
1115
1116   See: <tt><ref id=".EXPORT" name=".EXPORT"></tt>
1117
1118
1119 <sect1><tt>.FARADDR</tt><label id=".FARADDR"><p>
1120
1121   Define far (24 bit) address data. The command must be followed by a
1122   sequence of (not necessarily constant) expressions.
1123
1124   Example:
1125
1126   <tscreen><verb>
1127         .faraddr        DrawCircle, DrawRectangle, DrawHexagon
1128   </verb></tscreen>
1129
1130   See: <tt><ref id=".ADDR" name=".ADDR"></tt>
1131
1132
1133 <sect1><tt>.FEATURE</tt><label id=".FEATURE"><p>
1134
1135   This directive may be used to enable one or more compatibility features
1136   of the assembler. While the use of <tt/.FEATURE/ should be avoided when
1137   possible, it may be useful when porting sources written for other
1138   assemblers. There is no way to switch a feature off, once you have
1139   enabled it, so using
1140
1141   <tscreen><verb>
1142         .FEATURE        xxx
1143   </verb></tscreen>
1144
1145   will enable the feature until end of assembly is reached.
1146
1147   The following features are available:
1148
1149   <descrip>
1150
1151   <tag><tt>dollar_is_pc</tt></tag>
1152
1153     The dollar sign may be used as an alias for the star (`*'), which
1154     gives the value of the current PC in expressions.
1155     Note: Assignment to the pseudo variable is not allowed.
1156
1157   <tag><tt>labels_without_colons</tt></tag>
1158
1159     Allow labels without a trailing colon. These labels are only accepted,
1160     if they start at the beginning of a line (no leading white space).
1161
1162   <tag><tt>loose_string_term</tt></tag>
1163
1164     Accept single quotes as well as double quotes as terminators for string
1165     constants.
1166
1167   <tag><tt>loose_char_term</tt></tag>
1168
1169     Accept single quotes as well as double quotes as terminators for char
1170     constants.
1171
1172   <tag><tt>at_in_identifiers</tt></tag>
1173
1174     Accept the at character (`@') as a valid character in identifiers. The
1175     at character is not allowed to start an identifier, even with this
1176     feature enabled.
1177
1178   <tag><tt>dollar_in_identifiers</tt></tag>
1179
1180     Accept the dollar sign (`&dollar;') as a valid character in identifiers. The
1181     at character is not allowed to start an identifier, even with this
1182     feature enabled.
1183
1184   <tag><tt>leading_dot_in_identifiers</tt></tag>
1185
1186     Accept the dot (`.') as the first character of an identifier. This may be
1187     used for example to create macro names that start with a dot emulating
1188     control directives of other assemblers. Note however, that none of the
1189     reserved keywords built into the assembler, that starts with a dot, may be
1190     overridden. When using this feature, you may also get into trouble if
1191     later versions of the assembler define new keywords starting with a dot.
1192
1193   <tag><tt>pc_assignment</tt></tag>
1194
1195     Allow assignments to the PC symbol (`*' or `&dollar;' if <tt/dollar_is_pc/
1196     is enabled). Such an assignment is handled identical to the <tt><ref
1197     id=".ORG" name=".ORG"></tt> command (which is usually not needed, so just
1198     removing the lines with the assignments may also be an option when porting
1199     code written for older assemblers).
1200
1201   </descrip>
1202
1203   It is also possible to specify features on the command line using the
1204   <tt><ref id="option--feature" name="--feature"></tt> command line option.
1205   This is useful when translating sources written for older assemblers, when
1206   you don't want to change the source code.
1207
1208   As an example, to translate sources written for Andre Fachats xa65
1209   assembler, the features
1210
1211   <verb>
1212         labels_without_colons, pc_assignment, loose_char_term
1213   </verb>
1214
1215   may be helpful. They do not make ca65 completely compatible, so you may not
1216   be able to translate the sources without changes, even when enabling these
1217   features. However, I have found several sources that translate without
1218   problems when enabling these features on the command line.
1219
1220
1221 <sect1><tt>.FILEOPT, .FOPT</tt><label id=".FOPT"><p>
1222
1223   Insert an option string into the object file. There are two forms of
1224   this command, one specifies the option by a keyword, the second
1225   specifies it as a number. Since usage of the second one needs knowledge
1226   of the internal encoding, its use is not recommended and I will only
1227   describe the first form here.
1228
1229   The command is followed by one of the keywords
1230
1231   <tscreen><verb>
1232         author
1233         comment
1234         compiler
1235   </verb></tscreen>
1236
1237   a comma and a string. The option is written into the object file
1238   together with the string value. This is currently unidirectional and
1239   there is no way to actually use these options once they are in the
1240   object file.
1241
1242   Examples:
1243
1244   <tscreen><verb>
1245         .fileopt        comment, "Code stolen from my brother"
1246         .fileopt        compiler, "BASIC 2.0"
1247         .fopt           author, "J. R. User"
1248   </verb></tscreen>
1249
1250
1251 <sect1><tt>.GLOBAL</tt><label id=".GLOBAL"><p>
1252
1253   Declare symbols as global. Must be followed by a comma separated list of
1254   symbols to declare. Symbols from the list, that are defined somewhere in the
1255   source, are exported, all others are imported. Additional <tt><ref
1256   id=".IMPORT" name=".IMPORT"></tt> or <tt><ref id=".EXPORT"
1257   name=".EXPORT"></tt> commands for the same symbol are allowed.
1258
1259   Example:
1260
1261   <tscreen><verb>
1262         .global foo, bar
1263   </verb></tscreen>
1264
1265
1266 <sect1><tt>.GLOBALZP</tt><label id=".GLOBALZP"><p>
1267
1268   Declare symbols as global. Must be followed by a comma separated list of
1269   symbols to declare. Symbols from the list, that are defined somewhere in the
1270   source, are exported, all others are imported. Additional <tt><ref
1271   id=".IMPORTZP" name=".IMPORTZP"></tt> or <tt><ref id=".EXPORTZP"
1272   name=".EXPORTZP"></tt> commands for the same symbol are allowed. The symbols
1273   in the list are explicitly marked as zero page symols.
1274
1275   Example:
1276
1277   <tscreen><verb>
1278         .globalzp foo, bar
1279   </verb></tscreen>
1280
1281
1282 <sect1><tt>.I16</tt><label id=".I16"><p>
1283
1284   Valid only in 65816 mode. Switch the index registers to 16 bit.
1285
1286   Note: This command will not emit any code, it will tell the assembler to
1287   create 16 bit operands for immediate operands.
1288
1289   See also the <tt><ref id=".I8" name=".I8"></tt> and <tt><ref id=".SMART"
1290   name=".SMART"></tt> commands.
1291
1292
1293 <sect1><tt>.I8</tt><label id=".I8"><p>
1294
1295   Valid only in 65816 mode. Switch the index registers to 8 bit.
1296
1297   Note: This command will not emit any code, it will tell the assembler to
1298   create 8 bit operands for immediate operands.
1299
1300   See also the <tt><ref id=".I16" name=".I16"></tt> and <tt><ref id=".SMART"
1301   name=".SMART"></tt> commands.
1302
1303
1304 <sect1><tt>.IF</tt><label id=".IF"><p>
1305
1306   Conditional assembly: Evalute an expression and switch assembler output
1307   on or off depending on the expression. The expression must be a constant
1308   expression, that is, all operands must be defined.
1309
1310   A expression value of zero evaluates to FALSE, any other value evaluates
1311   to TRUE.
1312
1313
1314 <sect1><tt>.IFBLANK</tt><label id=".IFBLANK"><p>
1315
1316   Conditional assembly: Check if there are any remaining tokens in this line,
1317   and evaluate to FALSE if this is the case, and to TRUE otherwise. If the
1318   condition is not true, further lines are not assembled until an <tt><ref
1319   id=".ELSE" name=".ESLE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
1320   <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
1321
1322   This command is often used to check if a macro parameter was given. Since an
1323   empty macro parameter will evaluate to nothing, the condition will evaluate
1324   to FALSE if an empty parameter was given.
1325
1326   Example:
1327
1328   <tscreen><verb>
1329         .macro     arg1, arg2
1330         .ifblank   arg2
1331                    lda     #arg1
1332         .else
1333                    lda     #arg2
1334         .endif
1335         .endmacro
1336   </verb></tscreen>
1337
1338   See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
1339
1340
1341 <sect1><tt>.IFCONST</tt><label id=".IFCONST"><p>
1342
1343   Conditional assembly: Evaluate an expression and switch assembler output
1344   on or off depending on the constness of the expression.
1345
1346   A const expression evaluates to to TRUE, a non const expression (one
1347   containing an imported or currently undefined symbol) evaluates to
1348   FALSE.
1349
1350   See also: <tt><ref id=".CONST" name=".CONST"></tt>
1351
1352
1353 <sect1><tt>.IFDEF</tt><label id=".IFDEF"><p>
1354
1355   Conditional assembly: Check if a symbol is defined. Must be followed by
1356   a symbol name. The condition is true if the the given symbol is already
1357   defined, and false otherwise.
1358
1359   See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
1360
1361
1362 <sect1><tt>.IFNBLANK</tt><label id=".IFNBLANK"><p>
1363
1364   Conditional assembly: Check if there are any remaining tokens in this line,
1365   and evaluate to TRUE if this is the case, and to FALSE otherwise. If the
1366   condition is not true, further lines are not assembled until an <tt><ref
1367   id=".ELSE" name=".ELSE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
1368   <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
1369
1370   This command is often used to check if a macro parameter was given.
1371   Since an empty macro parameter will evaluate to nothing, the condition
1372   will evaluate to FALSE if an empty parameter was given.
1373
1374   Example:
1375
1376   <tscreen><verb>
1377         .macro     arg1, arg2
1378                    lda     #arg1
1379         .ifnblank  arg2
1380                    lda     #arg2
1381         .endif
1382         .endmacro
1383   </verb></tscreen>
1384
1385   See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
1386
1387
1388 <sect1><tt>.IFNDEF</tt><label id=".IFNDEF"><p>
1389
1390   Conditional assembly: Check if a symbol is defined. Must be followed by
1391   a symbol name. The condition is true if the the given symbol is not
1392   defined, and false otherwise.
1393
1394   See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
1395
1396
1397 <sect1><tt>.IFNREF</tt><label id=".IFNREF"><p>
1398
1399   Conditional assembly: Check if a symbol is referenced. Must be followed
1400   by a symbol name. The condition is true if if the the given symbol was
1401   not referenced before, and false otherwise.
1402
1403   See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
1404
1405
1406 <sect1><tt>.IFP02</tt><label id=".IFP02"><p>
1407
1408   Conditional assembly: Check if the assembler is currently in 6502 mode
1409   (see <tt><ref id=".P02" name=".P02"></tt> command).
1410
1411
1412 <sect1><tt>.IFP816</tt><label id=".IFP816"><p>
1413
1414   Conditional assembly: Check if the assembler is currently in 65816 mode
1415   (see <tt><ref id=".P816" name=".P816"></tt> command).
1416
1417
1418 <sect1><tt>.IFPC02</tt><label id=".IFPC02"><p>
1419
1420   Conditional assembly: Check if the assembler is currently in 65C02 mode
1421   (see <tt><ref id=".PC02" name=".PC02"></tt> command).
1422
1423
1424 <sect1><tt>.IFREF</tt><label id=".IFREF"><p>
1425
1426   Conditional assembly: Check if a symbol is referenced. Must be followed
1427   by a symbol name. The condition is true if if the the given symbol was
1428   referenced before, and false otherwise.
1429
1430   This command may be used to build subroutine libraries in include files
1431   (you may use separate object modules for this purpose too).
1432
1433   Example:
1434
1435   <tscreen><verb>
1436         .ifref  ToHex                   ; If someone used this subroutine
1437         ToHex:  tay                     ; Define subroutine
1438                 lda     HexTab,y
1439                 rts
1440         .endif
1441   </verb></tscreen>
1442
1443   See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
1444
1445
1446 <sect1><tt>.IMPORT</tt><label id=".IMPORT"><p>
1447
1448   Import a symbol from another module. The command is followed by a comma
1449   separated list of symbols to import.
1450
1451   Example:
1452
1453   <tscreen><verb>
1454         .import foo, bar
1455   </verb></tscreen>
1456
1457   See: <tt><ref id=".IMPORTZP" name=".IMPORTZP"></tt>
1458
1459
1460 <sect1><tt>.IMPORTZP</tt><label id=".IMPORTZP"><p>
1461
1462   Import a symbol from another module. The command is followed by a comma
1463   separated list of symbols to import. The symbols are explicitly imported
1464   as zero page symbols (that is, symbols with values in byte range).
1465
1466   Example:
1467
1468   <tscreen><verb>
1469         .importzp       foo, bar
1470   </verb></tscreen>
1471
1472   See: <tt><ref id=".IMPORT" name=".IMPORT"></tt>
1473
1474
1475 <sect1><tt>.INCBIN</tt><label id=".INCBIN"><p>
1476
1477   Include a file as binary data. The command expects a string argument
1478   that is the name of a file to include literally in the current segment.
1479   In addition to that, a start offset and a size value may be specified,
1480   separated by commas. If no size is specified, all of the file from the
1481   start offset to end-of-file is used. If no start position is specified
1482   either, zero is assume (which means that the whole file is inserted).
1483
1484   Example:
1485
1486   <tscreen><verb>
1487         ; Include whole file
1488         .incbin         "sprites.dat"
1489
1490         ; Include file starting at offset 256
1491         .incbin         "music.dat", $100
1492
1493         ; Read 100 bytes starting at offset 200
1494         .incbin         "graphics.dat", 200, 100
1495   </verb></tscreen>
1496
1497
1498 <sect1><tt>.INCLUDE</tt><label id=".INCLUDE"><p>
1499
1500   Include another file. Include files may be nested up to a depth of 16.
1501
1502   Example:
1503
1504   <tscreen><verb>
1505         .include        "subs.inc"
1506   </verb></tscreen>
1507
1508
1509 <sect1><tt>.LEFT</tt><label id=".LEFT"><p>
1510
1511   Builtin function. Extracts the left part of a given token list.
1512
1513   Syntax:
1514
1515   <tscreen><verb>
1516         .LEFT (&lt;int expr&gt;, &lt;token list&gt;)
1517   </verb></tscreen>
1518
1519   The first integer expression gives the number of tokens to extract from
1520   the token list. The second argument is the token list itself.
1521
1522   Example:
1523
1524   To check in a macro if the given argument has a '#' as first token
1525   (immidiate addressing mode), use something like this:
1526
1527   <tscreen><verb>
1528         .macro  ldax    arg
1529                 ...
1530                 .if (.match (.left (1, arg), #))
1531
1532                 ; ldax called with immidiate operand
1533                 ...
1534
1535                 .endif
1536                 ...
1537         .endmacro
1538   </verb></tscreen>
1539
1540   See also the <tt><ref id=".MID" name=".MID"></tt> and <tt><ref id=".RIGHT"
1541   name=".RIGHT"></tt> builtin functions.
1542
1543
1544 <sect1><tt>.LINECONT</tt><label id=".LINECONT"><p>
1545
1546   Switch on or off line continuations using the backslash character
1547   before a newline. The option is off by default.
1548   Note: Line continuations do not work in a comment. A backslash at the
1549   end of a comment is treated as part of the comment and does not trigger
1550   line continuation.
1551   The command must be followed by a '+' or '-' character to switch the
1552   option on or off respectively.
1553
1554   Example:
1555
1556   <tscreen><verb>
1557         .linecont       +               ; Allow line continuations
1558
1559         lda     \
1560                 #$20                    ; This is legal now
1561   </verb></tscreen>
1562
1563
1564 <sect1><tt>.LIST</tt><label id=".LIST"><p>
1565
1566   Enable output to the listing. The command must be followed by a boolean
1567   switch ("on", "off", "+" or "-") and will enable or disable listing
1568   output.
1569   The option has no effect if the listing is not enabled by the command line
1570   switch -l. If -l is used, an internal counter is set to 1. Lines are output
1571   to the listing file, if the counter is greater than zero, and suppressed if
1572   the counter is zero. Each use of <tt/.LIST/ will increment or decrement the
1573   counter.
1574
1575   Example:
1576
1577   <tscreen><verb>
1578         .list   on              ; Enable listing output
1579   </verb></tscreen>
1580
1581
1582 <sect1><tt>.LISTBYTES</tt><label id=".LISTBYTES"><p>
1583
1584   Set, how many bytes are shown in the listing for one source line. The
1585   default is 12, so the listing will show only the first 12 bytes for any
1586   source line that generates more than 12 bytes of code or data.
1587   The directive needs an argument, which is either "unlimited", or an
1588   integer constant in the range 4..255.
1589
1590   Examples:
1591
1592   <tscreen><verb>
1593         .listbytes      unlimited       ; List all bytes
1594         .listbytes      12              ; List the first 12 bytes
1595         .incbin         "data.bin"      ; Include large binary file
1596   </verb></tscreen>
1597
1598
1599 <sect1><tt>.LOCAL</tt><label id=".LOCAL"><p>
1600
1601   This command may only be used inside a macro definition. It declares a
1602   list of identifiers as local to the macro expansion.
1603
1604   A problem when using macros are labels: Since they don't change their name,
1605   you get a "duplicate symbol" error if the macro is expanded the second time.
1606   Labels declared with <tt><ref id=".LOCAL" name=".LOCAL"></tt> have their
1607   name mapped to an internal unique name (<tt/___ABCD__/) with each macro
1608   invocation.
1609
1610   Some other assemblers start a new lexical block inside a macro expansion.
1611   This has some drawbacks however, since that will not allow <em/any/ symbol
1612   to be visible outside a macro, a feature that is sometimes useful. The
1613   <tt><ref id=".LOCAL" name=".LOCAL"></tt> command is in my eyes a better way
1614   to address the problem.
1615
1616   You get an error when using <tt><ref id=".LOCAL" name=".LOCAL"></tt> outside
1617   a macro.
1618
1619
1620 <sect1><tt>.LOCALCHAR</tt><label id=".LOCALCHAR"><p>
1621
1622   Defines the character that start "cheap" local labels. You may use one
1623   of '@' and '?' as start character. The default is '@'.
1624
1625   Cheap local labels are labels that are visible only between two non
1626   cheap labels. This way you can reuse identifiers like "<tt/loop/" without
1627   using explicit lexical nesting.
1628
1629   Example:
1630
1631   <tscreen><verb>
1632         .localchar      '?'
1633
1634         Clear:  lda     #$00            ; Global label
1635         ?Loop:  sta     Mem,y           ; Local label
1636                 dey
1637                 bne     ?Loop           ; Ok
1638                 rts
1639         Sub:    ...                     ; New global label
1640                 bne     ?Loop           ; ERROR: Unknown identifier!
1641   </verb></tscreen>
1642
1643
1644 <sect1><tt>.MACPACK</tt><label id=".MACPACK"><p>
1645
1646   Insert a predefined macro package. The command is followed by an
1647   identifier specifying the macro package to insert. Available macro
1648   packages are:
1649
1650   <tscreen><verb>
1651         generic         Defines generic macros like add and sub.
1652         longbranch      Defines conditional long jump macros.
1653   </verb></tscreen>
1654
1655   Including a macro package twice, or including a macro package that
1656   redefines already existing macros will lead to an error.
1657
1658   Example:
1659
1660   <tscreen><verb>
1661         .macpack        longbranch      ; Include macro package
1662
1663                 cmp     #$20            ; Set condition codes
1664                 jne     Label           ; Jump long on condition
1665   </verb></tscreen>
1666
1667   Macro packages are explained in more detail in section <ref
1668   id="macropackages" name="Macro packages">).
1669
1670
1671 <sect1><tt>.MAC, .MACRO</tt><label id=".MAC"><p>
1672
1673   Start a classic macro definition. The command is followed by an identifier
1674   (the macro name) and optionally by a comma separated list of identifiers
1675   that are macro parameters.
1676
1677   See section <ref id="macros" name="Macros">.
1678
1679
1680 <sect1><tt>.MATCH</tt><label id=".MATCH"><p>
1681
1682   Builtin function. Matches two token lists against each other. This is
1683   most useful within macros, since macros are not stored as strings, but
1684   as lists of tokens.
1685
1686   The syntax is
1687
1688   <tscreen><verb>
1689         .MATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
1690   </verb></tscreen>
1691
1692   Both token list may contain arbitrary tokens with the exception of the
1693   terminator token (comma resp. right parenthesis) and
1694
1695   <itemize>
1696   <item>end-of-line
1697   <item>end-of-file
1698   </itemize>
1699
1700   Often a macro parameter is used for any of the token lists.
1701
1702   Please note that the function does only compare tokens, not token
1703   attributes. So any number is equal to any other number, regardless of the
1704   actual value. The same is true for strings. If you need to compare tokens
1705   <em/and/ token attributes, use the <tt><ref id=".XMATCH"
1706   name=".XMATCH"></tt> function.
1707
1708   Example:
1709
1710   Assume the macro <tt/ASR/, that will shift right the accumulator by one,
1711   while honoring the sign bit. The builtin processor instructions will allow
1712   an optional "A" for accu addressing for instructions like <tt/ROL/ and
1713   <tt/ROR/. We will use the <tt><ref id=".MATCH" name=".MATCH"></tt> function
1714   to check for this and print and error for invalid calls.
1715
1716   <tscreen><verb>
1717         .macro  asr     arg
1718
1719                 .if (.not .blank(arg)) .and (.not .match (arg, a))
1720                 .error "Syntax error"
1721                 .endif
1722
1723                 cmp     #$80            ; Bit 7 into carry
1724                 lsr     a               ; Shift carry into bit 7
1725
1726         .endmacro
1727   </verb></tscreen>
1728
1729   The macro will only accept no arguments, or one argument that must be the
1730   reserved keyword "A".
1731
1732   See: <tt><ref id=".XMATCH" name=".XMATCH"></tt>
1733
1734
1735 <sect1><tt>.MID</tt><label id=".MID"><p>
1736
1737   Builtin function. Takes a starting index, a count and a token list as
1738   arguments. Will return part of the token list.
1739
1740   Syntax:
1741
1742   <tscreen><verb>
1743         .MID (&lt;int expr&gt;, &lt;int expr&gt;, &lt;token list&gt;)
1744   </verb></tscreen>
1745
1746   The first integer expression gives the starting token in the list (the
1747   first token has index 0). The second integer expression gives the number
1748   of tokens to extract from the token list. The third argument is the
1749   token list itself.
1750
1751   Example:
1752
1753   To check in a macro if the given argument has a '<tt/#/' as first token
1754   (immidiate addressing mode), use something like this:
1755
1756     <tscreen><verb>
1757         .macro  ldax    arg
1758                 ...
1759                 .if (.match (.mid (0, 1, arg), #))
1760
1761                 ; ldax called with immidiate operand
1762                 ...
1763
1764                 .endif
1765                 ...
1766         .endmacro
1767   </verb></tscreen>
1768
1769   See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".RIGHT"
1770   name=".RIGHT"></tt> builtin functions.
1771
1772
1773 <sect1><tt>.ORG</tt><label id=".ORG"><p>
1774
1775   Start a section of absolute code. The command is followed by a constant
1776   expression that gives the new PC counter location for which the code is
1777   assembled. Use <tt><ref id=".RELOC" name=".RELOC"></tt> to switch back to
1778   relocatable code.
1779
1780   Please note that you <em/do not need/ this command in most cases. Placing
1781   code at a specific address is the job of the linker, not the assembler, so
1782   there is usually no reason to assemble code to a specific address.
1783
1784   You may not switch segments while inside a section of absolute code.
1785
1786   Example:
1787
1788   <tscreen><verb>
1789         .org    $7FF            ; Emit code starting at $7FF
1790   </verb></tscreen>
1791
1792
1793 <sect1><tt>.OUT</tt><label id=".OUT"><p>
1794
1795   Output a string to the console without producing an error. This command
1796   is similiar to <tt/.ERROR/, however, it does not force an assembler error
1797   that prevents the creation of an object file.
1798
1799   Example:
1800
1801   <tscreen><verb>
1802         .out    "This code was written by the codebuster(tm)"
1803   </verb></tscreen>
1804
1805   See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
1806   id=".ERROR" name=".ERROR"></tt> directives.
1807
1808
1809 <sect1><tt>.P02</tt><label id=".P02"><p>
1810
1811   Enable the 6502 instruction set, disable 65C02 and 65816 instructions.
1812   This is the default if not overridden by the <tt/--cpu/ command line
1813   option.
1814
1815   See: <tt><ref id=".PC02" name=".PC02"></tt> and <tt><ref id=".P816"
1816   name=".P816"></tt>
1817
1818
1819 <sect1><tt>.P816</tt><label id=".P816"><p>
1820
1821   Enable the 65816 instruction set. This is a superset of the 65C02 and
1822   6502 instruction sets.
1823
1824   See: <tt><ref id=".P02" name=".P02"></tt> and <tt><ref id=".PC02"
1825   name=".PC02"></tt>
1826
1827
1828 <sect1><tt>.PAGELEN, .PAGELENGTH</tt><label id=".PAGELENGTH"><p>
1829
1830   Set the page length for the listing. Must be followed by an integer
1831   constant. The value may be "unlimited", or in the range 32 to 127. The
1832   statement has no effect if no listing is generated. The default value is -1
1833   (unlimited) but may be overridden by the <tt/--pagelength/ command line
1834   option. Beware: Since ca65 is a one pass assembler, the listing is generated
1835   after assembly is complete, you cannot use multiple line lengths with one
1836   source. Instead, the value set with the last <tt/.PAGELENGTH/ is used.
1837
1838   Examples:
1839
1840   <tscreen><verb>
1841         .pagelength     66              ; Use 66 lines per listing page
1842
1843         .pagelength     unlimited       ; Unlimited page length
1844   </verb></tscreen>
1845
1846
1847 <sect1><tt>.PARAMCOUNT</tt><label id=".PARAMCOUNT"><p>
1848
1849   This builtin pseudo variable is only available in macros. It is replaced by
1850   the actual number of parameters that were given in the macro invocation.
1851
1852   Example:
1853
1854   <tscreen><verb>
1855         .macro  foo     arg1, arg2, arg3
1856         .if     .paramcount <> 3
1857         .error  "Too few parameters for macro foo"
1858         .endif
1859         ...
1860         .endmacro
1861   </verb></tscreen>
1862
1863   See section <ref id="macros" name="Macros">.
1864
1865
1866 <sect1><tt>.PC02</tt><label id=".PC02"><p>
1867
1868   Enable the 65C02 instructions set. This instruction set includes all
1869   6502 instructions.
1870
1871   See: <tt><ref id=".P02" name=".P02"></tt> and <tt><ref id=".P816"
1872   name=".P816"></tt>
1873
1874
1875 <sect1><tt>.PROC</tt><label id=".PROC"><p>
1876
1877   Start a nested lexical level. All new symbols from now on are in the local
1878   lexical level and are not accessible from outside. Symbols defined outside
1879   this local level may be accessed as long as their names are not used for new
1880   symbols inside the level. Symbols names in other lexical levels do not
1881   clash, so you may use the same names for identifiers. The lexical level ends
1882   when the <tt><ref id=".ENDPROC" name=".ENDPROC"></tt> command is read.
1883   Lexical levels may be nested up to a depth of 16.
1884
1885   The command may be followed by an identifier, in this case the
1886   identifier is declared in the outer level as a label having the value of
1887   the program counter at the start of the lexical level.
1888
1889   Note: Macro names are always in the global level and in a separate name
1890   space. There is no special reason for this, it's just that I've never
1891   had any need for local macro definitions.
1892
1893   Example:
1894
1895   <tscreen><verb>
1896         .proc   Clear           ; Define Clear subroutine, start new level
1897                 lda     #$00
1898         L1:     sta     Mem,y   ; L1 is local and does not cause a
1899                                 ; duplicate symbol error if used in other
1900                                 ; places
1901                 dey
1902                 bne     L1      ; Reference local symbol
1903                 rts
1904         .endproc                ; Leave lexical level
1905   </verb></tscreen>
1906
1907   See: <tt><ref id=".ENDPROC" name=".ENDPROC"></tt>
1908
1909
1910 <sect1><tt>.REF, .REFERENCED</tt><label id=".REFERENCED"><p>
1911
1912   Builtin function. The function expects an identifier as argument in braces.
1913   The argument is evaluated, and the function yields "true" if the identifier
1914   is a symbol that has already been referenced somewhere in the source file up
1915   to the current position. Otherwise the function yields false. As an example,
1916   the <tt><ref id=".IFREF" name=".IFREF"></tt> statement may be replaced by
1917
1918   <tscreen><verb>
1919         .if     .referenced(a)
1920   </verb></tscreen>
1921
1922   See: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
1923
1924
1925 <sect1><tt>.REPEAT</tt><label id=".REPEAT"><p>
1926
1927   Repeat all commands between <tt/.REPEAT/ and <tt><ref id=".ENDREPEAT"
1928   name=".ENDREPEAT"></tt> constant number of times. The command is followed by
1929   a constant expression that tells how many times the commands in the body
1930   should get repeated. Optionally, a comma and an identifier may be specified.
1931   If this identifier is found in the body of the repeat statement, it is
1932   replaced by the current repeat count (starting with zero for the first time
1933   the body is repeated).
1934
1935   <tt/.REPEAT/ statements may be nested. If you use the same repeat count
1936   identifier for a nested <tt/.REPEAT/ statement, the one from the inner
1937   level will be used, not the one from the outer level.
1938
1939   Example:
1940
1941   The following macro will emit a string that is "encrypted" in that all
1942   characters of the string are XORed by the value $55.
1943
1944   <tscreen><verb>
1945         .macro  Crypt   Arg
1946                 .repeat .strlen(Arg), I
1947                 .byte   .strat(Arg, I) .xor $55
1948                 .endrep
1949         .endmacro
1950   </verb></tscreen>
1951
1952   See: <tt><ref id=".ENDREPEAT" name=".ENDREPEAT"></tt>
1953
1954
1955 <sect1><tt>.RELOC</tt><label id=".RELOC"><p>
1956
1957   Switch back to relocatable mode. See the <tt><ref id=".ORG"
1958   name=".ORG"></tt> command.
1959
1960
1961 <sect1><tt>.RES</tt><label id=".RES"><p>
1962
1963   Reserve storage. The command is followed by one or two constant
1964   expressions. The first one is mandatory and defines, how many bytes of
1965   storage should be defined. The second, optional expression must by a
1966   constant byte value that will be used as value of the data. If there
1967   is no fill value given, the linker will use the value defined in the
1968   linker configuration file (default: zero).
1969
1970   Example:
1971
1972   <tscreen><verb>
1973         ; Reserve 12 bytes of memory with value $AA
1974         .res    12, $AA
1975   </verb></tscreen>
1976
1977
1978 <sect1><tt>.RIGHT</tt><label id=".RIGHT"><p>
1979
1980   Builtin function. Extracts the right part of a given token list.
1981
1982   Syntax:
1983
1984   <tscreen><verb>
1985         .RIGHT (&lt;int expr&gt;, &lt;token list&gt;)
1986   </verb></tscreen>
1987
1988   The first integer expression gives the number of tokens to extract from
1989   the token list. The second argument is the token list itself.
1990
1991   See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".MID"
1992   name=".MID"></tt> builtin functions.
1993
1994
1995 <sect1><tt>.RODATA</tt><label id=".RODATA"><p>
1996
1997   Switch to the RODATA segment. The name of the RODATA segment is always
1998   "RODATA", so this is a shortcut for
1999
2000   <tscreen><verb>
2001         .segment  "RODATA"
2002   </verb></tscreen>
2003
2004   The RODATA segment is a segment that is used by the compiler for
2005   readonly data like string constants.
2006
2007   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
2008
2009
2010 <sect1><tt>.SEGMENT</tt><label id=".SEGMENT"><p>
2011
2012   Switch to another segment. Code and data is always emitted into a
2013   segment, that is, a named section of data. The default segment is
2014   "CODE". There may be up to 254 different segments per object file
2015   (and up to 65534 per executable). There are shortcut commands for
2016   the most common segments ("CODE", "DATA" and "BSS").
2017
2018   The command is followed by a string containing the segment name (there
2019   are some constraints for the name - as a rule of thumb use only those
2020   segment names that would also be valid identifiers). There may also be
2021   an optional attribute separated by a comma. Valid attributes are
2022   "<tt/zeropage/" and "<tt/absolute/".
2023
2024   When specifying a segment for the first time, "absolute" is the
2025   default. For all other uses, the attribute specified the first time
2026   is the default.
2027
2028   "absolute" means that this is a segment with absolute addressing. That
2029   is, the segment will reside somewhere in core memory outside the zero
2030   page. "zeropage" means the opposite: The segment will be placed in the
2031   zero page and direct (short) addressing is possible for data in this
2032   segment.
2033
2034   Beware: Only labels in a segment with the zeropage attribute are marked
2035   as reachable by short addressing. The `*' (PC counter) operator will
2036   work as in other segments and will create absolute variable values.
2037
2038   Example:
2039
2040   <tscreen><verb>
2041         .segment "ROM2"                 ; Switch to ROM2 segment
2042         .segment "ZP2", zeropage        ; New direct segment
2043         .segment "ZP2"                  ; Ok, will use last attribute
2044         .segment "ZP2", absolute        ; Error, redecl mismatch
2045   </verb></tscreen>
2046
2047   See: <tt><ref id=".BSS" name=".BSS"></tt>, <tt><ref id=".CODE"
2048   name=".CODE"></tt>, <tt><ref id=".DATA" name=".DATA"></tt> and <tt><ref
2049   id=".RODATA" name=".RODATA"></tt>
2050
2051
2052 <sect1><tt>.SMART</tt><label id=".SMART"><p>
2053
2054   Switch on or off smart mode. The command must be followed by a '+' or
2055   '-' character to switch the option on or off respectively. The default
2056   is off (that is, the assembler doesn't try to be smart), but this
2057   default may be changed by the -s switch on the command line.
2058
2059   In smart mode the assembler will track usage of the <tt/REP/ and <tt/SEP/
2060   instructions in 65816 mode and update the operand sizes accordingly. If
2061   the operand of such an instruction cannot be evaluated by the assembler
2062   (for example, because the operand is an imported symbol), a warning is
2063   issued. Beware: Since the assembler cannot trace the execution flow this
2064   may lead to false results in some cases. If in doubt, use the <tt/.Inn/ and
2065   <tt/.Ann/ instructions to tell the assembler about the current settings.
2066
2067   Example:
2068
2069   <tscreen><verb>
2070         .smart                          ; Be smart
2071         .smart  -                       ; Stop being smart
2072   </verb></tscreen>
2073
2074
2075 <sect1><tt>.STRAT</tt><label id=".STRAT"><p>
2076
2077   Builtin function. The function accepts a string and an index as
2078   arguments and returns the value of the character at the given position
2079   as an integer value. The index is zero based.
2080
2081   Example:
2082
2083   <tscreen><verb>
2084         .macro  M       Arg
2085                 ; Check if the argument string starts with '#'
2086                 .if (.strat (Arg, 0) = '#')
2087                 ...
2088                 .endif
2089         .endmacro
2090   </verb></tscreen>
2091
2092
2093 <sect1><tt>.STRING</tt><label id=".STRING"><p>
2094
2095   Builtin function. The function accepts an argument in braces and converts
2096   this argument into a string constant. The argument may be an identifier, or
2097   a constant numeric value.
2098
2099   Since you can use a string in the first place, the use of the function may
2100   not be obvious. However, it is useful in macros, or more complex setups.
2101
2102   Example:
2103
2104   <tscreen><verb>
2105         ; Emulate other assemblers:
2106         .macro  section name
2107                 .segment        .string(name)
2108         .endmacro
2109   </verb></tscreen>
2110
2111
2112 <sect1><tt>.STRLEN</tt><label id=".STRLEN"><p>
2113
2114   Builtin function. The function accepts a string argument in braces and
2115   eveluates to the length of the string.
2116
2117   Example:
2118
2119   The following macro encodes a string as a pascal style string with
2120   a leading length byte.
2121
2122   <tscreen><verb>
2123         .macro  PString Arg
2124                 .byte   .strlen(Arg), Arg
2125         .endmacro
2126   </verb></tscreen>
2127
2128
2129 <sect1><tt>.TCOUNT</tt><label id=".TCOUNT"><p>
2130
2131   Builtin function. The function accepts a token list in braces. The
2132   function result is the number of tokens given as argument.
2133
2134   Example:
2135
2136   The <tt/ldax/ macro accepts the '#' token to denote immidiate addressing (as
2137   with the normal 6502 instructions). To translate it into two separate 8 bit
2138   load instructions, the '#' token has to get stripped from the argument:
2139
2140   <tscreen><verb>
2141         .macro  ldax    arg
2142                 .if (.match (.mid (0, 1, arg), #))
2143                 ; ldax called with immidiate operand
2144                 lda     #<(.right (.tcount (arg)-1, arg))
2145                 ldx     #>(.right (.tcount (arg)-1, arg))
2146                 .else
2147                 ...
2148                 .endif
2149         .endmacro
2150   </verb></tscreen>
2151
2152
2153 <sect1><tt>.WARNING</tt><label id=".WARNING"><p>
2154
2155   Force an assembly warning. The assembler will output a warning message
2156   preceeded by "User warning". This warning will always be output, even if
2157   other warnings are disabled with the <tt><ref id="option-W" name="-W0"></tt>
2158   command line option.
2159
2160   This command may be used to output possible problems when assembling
2161   the source file.
2162
2163   Example:
2164
2165   <tscreen><verb>
2166         .macro  jne     target
2167                 .local L1
2168                 .ifndef target
2169                 .warning "Forward jump in jne, cannot optimize!"
2170                 beq     L1
2171                 jmp     target
2172         L1:
2173                 .else
2174                 ...
2175                 .endif
2176         .endmacro
2177   </verb></tscreen>
2178
2179   See also the <tt><ref id=".ERROR" name=".ERROR"></tt> and <tt><ref id=".OUT"
2180   name=".OUT"></tt> directives.
2181
2182
2183 <sect1><tt>.WORD</tt><label id=".WORD"><p>
2184
2185   Define word sized data. Must be followed by a sequence of (word ranged,
2186   but not necessarily constant) expressions.
2187
2188   Example:
2189
2190   <tscreen><verb>
2191         .word   $0D00, $AF13, _Clear
2192   </verb></tscreen>
2193
2194
2195 <sect1><tt>.XMATCH</tt><label id=".XMATCH"><p>
2196
2197   Builtin function. Matches two token lists against each other. This is
2198   most useful within macros, since macros are not stored as strings, but
2199   as lists of tokens.
2200
2201   The syntax is
2202
2203   <tscreen><verb>
2204         .XMATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
2205   </verb></tscreen>
2206
2207   Both token list may contain arbitrary tokens with the exception of the
2208   terminator token (comma resp. right parenthesis) and
2209
2210   <itemize>
2211   <item>end-of-line
2212   <item>end-of-file
2213   </itemize>
2214
2215   Often a macro parameter is used for any of the token lists.
2216
2217   The function compares tokens <em/and/ token values. If you need a function
2218   that just compares the type of tokens, have a look at the <tt><ref
2219   id=".MATCH" name=".MATCH"></tt> function.
2220
2221   See: <tt><ref id=".MATCH" name=".MATCH"></tt>
2222
2223
2224 <sect1><tt>.ZEROPAGE</tt><label id=".ZEROPAGE"><p>
2225
2226   Switch to the ZEROPAGE segment and mark it as direct (zeropage) segment.
2227   The name of the ZEROPAGE segment is always "ZEROPAGE", so this is a
2228   shortcut for
2229
2230   <tscreen><verb>
2231         .segment  "ZEROPAGE", zeropage
2232   </verb></tscreen>
2233
2234   Because of the "zeropage" attribute, labels declared in this segment are
2235   addressed using direct addressing mode if possible. You <em/must/ instruct
2236   the linker to place this segment somewhere in the address range 0..$FF
2237   otherwise you will get errors.
2238
2239   See: <tt><ref id=".SEGMENT" name=".SEGMENT"></tt>
2240
2241
2242
2243 <sect>Macros<label id="macros"><p>
2244
2245
2246 <sect1>Introduction<p>
2247
2248 Macros may be thought of as "parametrized super instructions". Macros are
2249 sequences of tokens that have a name. If that name is used in the source
2250 file, the macro is "expanded", that is, it is replaced by the tokens that
2251 were specified when the macro was defined.
2252
2253
2254 <sect1>Macros without parameters<p>
2255
2256 In it's simplest form, a macro does not have parameters. Here's an
2257 example:
2258
2259 <tscreen><verb>
2260         .macro  asr             ; Arithmetic shift right
2261                 cmp     #$80    ; Put bit 7 into carry
2262                 ror             ; Rotate right with carry
2263         .endmacro
2264 </verb></tscreen>
2265
2266 The macro above consists of two real instructions, that are inserted into
2267 the code, whenever the macro is expanded. Macro expansion is simply done
2268 by using the name, like this:
2269
2270 <tscreen><verb>
2271         lda     $2010
2272         asr
2273         sta     $2010
2274 </verb></tscreen>
2275
2276
2277 <sect1>Parametrized macros<p>
2278
2279 When using macro parameters, macros can be even more useful:
2280
2281 <tscreen><verb>
2282         .macro  inc16   addr
2283                 clc
2284                 lda     addr
2285                 adc     #$01
2286                 sta     addr
2287                 lda     addr+1
2288                 adc     #$00
2289                 sta     addr+1
2290         .endmacro
2291 </verb></tscreen>
2292
2293 When calling the macro, you may give a parameter, and each occurence of
2294 the name "addr" in the macro definition will be replaced by the given
2295 parameter. So
2296
2297 <tscreen><verb>
2298         inc16   $1000
2299 </verb></tscreen>
2300
2301 will be expanded to
2302
2303 <tscreen><verb>
2304                 clc
2305                 lda     $1000
2306                 adc     #$01
2307                 sta     $1000
2308                 lda     $1000+1
2309                 adc     #$00
2310                 sta     $1000+1
2311 </verb></tscreen>
2312
2313 A macro may have more than one parameter, in this case, the parameters
2314 are separated by commas. You are free to give less parameters than the
2315 macro actually takes in the definition. You may also leave intermediate
2316 parameters empty. Empty parameters are replaced by empty space (that is,
2317 they are removed when the macro is exanded). If you have a look at our
2318 macro definition above, you will see, that replacing the "addr" parameter
2319 by nothing will lead to wrong code in most lines. To help you, writing
2320 macros with a variable parameter list, there are some control commands:
2321
2322 <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> tests the rest of the line and
2323 returns true, if there are any tokens on the remainder of the line. Since
2324 empty parameters are replaced by nothing, this may be used to test if a given
2325 parameter is empty. <tt><ref id=".IFNBLANK" name=".IFNBLANK"></tt> tests the
2326 opposite.
2327
2328 Look at this example:
2329
2330 <tscreen><verb>
2331         .macro  ldaxy   a, x, y
2332         .ifnblank       a
2333                 lda     #a
2334         .endif
2335         .ifnblank       x
2336                 ldx     #x
2337         .endif
2338         .ifnblank       y
2339                 ldy     #y
2340         .endif
2341         .endmacro
2342 </verb></tscreen>
2343
2344 This macro may be called as follows:
2345
2346 <tscreen><verb>
2347         ldaxy   1, 2, 3         ; Load all three registers
2348
2349         ldaxy   1, , 3          ; Load only a and y
2350
2351         ldaxy   , , 3           ; Load y only
2352 </verb></tscreen>
2353
2354 There's another helper command for determining, which macro parameters are
2355 valid: <tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt> This command is
2356 replaced by the parameter count given, <em/including/ intermediate empty macro
2357 parameters:
2358
2359 <tscreen><verb>
2360         ldaxy   1               ; .PARAMCOUNT = 1
2361         ldaxy   1,,3            ; .PARAMCOUNT = 3
2362         ldaxy   1,2             ; .PARAMCOUNT = 2
2363         ldaxy   1,              ; .PARAMCOUNT = 2
2364         ldaxy   1,2,3           ; .PARAMCOUNT = 3
2365 </verb></tscreen>
2366
2367
2368 <sect1>Recursive macros<p>
2369
2370 Macros may be used recursively:
2371
2372 <tscreen><verb>
2373         .macro  push    r1, r2, r3
2374                 lda     r1
2375                 pha
2376         .if     .paramcount > 1
2377                 push    r2, r3
2378         .endif
2379         .endmacro
2380 </verb></tscreen>
2381
2382 There's also a special macro to help writing recursive macros: <tt><ref
2383 id=".EXITMACRO" name=".EXITMACRO"></tt> This command will stop macro expansion
2384 immidiately:
2385
2386 <tscreen><verb>
2387         .macro  push    r1, r2, r3, r4, r5, r6, r7
2388         .ifblank        r1
2389                 ; First parameter is empty
2390                 .exitmacro
2391         .else
2392                 lda     r1
2393                 pha
2394         .endif
2395                 push    r2, r3, r4, r5, r6, r7
2396         .endmacro
2397 </verb></tscreen>
2398
2399 When expanding this macro, the expansion will push all given parameters
2400 until an empty one is encountered. The macro may be called like this:
2401
2402 <tscreen><verb>
2403         push    $20, $21, $32           ; Push 3 ZP locations
2404         push    $21                     ; Push one ZP location
2405 </verb></tscreen>
2406
2407
2408 <sect1>Local symbols inside macros<p>
2409
2410 Now, with recursive macros, <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> and
2411 <tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt>, what else do you need?
2412 Have a look at the inc16 macro above. Here is it again:
2413
2414 <tscreen><verb>
2415         .macro  inc16   addr
2416                 clc
2417                 lda     addr
2418                 adc     #$01
2419                 sta     addr
2420                 lda     addr+1
2421                 adc     #$00
2422                 sta     addr+1
2423         .endmacro
2424 </verb></tscreen>
2425
2426 If you have a closer look at the code, you will notice, that it could be
2427 written more efficiently, like this:
2428
2429 <tscreen><verb>
2430         .macro  inc16   addr
2431                 inc     addr
2432                 bne     Skip
2433                 inc     addr+1
2434         Skip:
2435         .endmacro
2436 </verb></tscreen>
2437
2438 But imagine what happens, if you use this macro twice? Since the label
2439 "Skip" has the same name both times, you get a "duplicate symbol" error.
2440 Without a way to circumvent this problem, macros are not as useful, as
2441 they could be. One solution is, to start a new lexical block inside the
2442 macro:
2443
2444 <tscreen><verb>
2445         .macro  inc16   addr
2446         .proc
2447                 inc     addr
2448                 bne     Skip
2449                 inc     addr+1
2450         Skip:
2451         .endproc
2452         .endmacro
2453 </verb></tscreen>
2454
2455 Now the label is local to the block and not visible outside. However,
2456 sometimes you want a label inside the macro to be visible outside. To make
2457 that possible, there's a new command that's only usable inside a macro
2458 definition: <tt><ref id=".LOCAL" name=".LOCAL"></tt>. <tt/.LOCAL/ declares one
2459 or more symbols as local to the macro expansion. The names of local variables
2460 are replaced by a unique name in each separate macro expansion. So we could
2461 also solve the problem above by using <tt/.LOCAL/:
2462
2463 <tscreen><verb>
2464         .macro  inc16   addr
2465                 .local  Skip            ; Make Skip a local symbol
2466                 clc
2467                 lda     addr
2468                 adc     #$01
2469                 sta     addr
2470                 bcc     Skip
2471                 inc     addr+1
2472         Skip:                           ; Not visible outside
2473         .endmacro
2474 </verb></tscreen>
2475
2476
2477 <sect1>C style macros<p>
2478
2479 Starting with version 2.5 of the assembler, there is a second macro type
2480 available: C style macros using the <tt/.DEFINE/ directive. These macros are
2481 similar to the classic macro type described above, but behaviour is sometimes
2482 different:
2483
2484 <itemize>
2485
2486 <item>  Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> may not
2487         span more than a line. You may use line continuation (see <tt><ref
2488         id=".LINECONT" name=".LINECONT"></tt>) to spread the definition over
2489         more than one line for increased readability, but the macro itself
2490         may not contain an end-of-line token.
2491
2492 <item>  Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> share
2493         the name space with classic macros, but they are detected and replaced
2494         at the scanner level. While classic macros may be used in every place,
2495         where a mnemonic or other directive is allowed, <tt><ref id=".DEFINE"
2496         name=".DEFINE"></tt> style macros are allowed anywhere in a line. So
2497         they are more versatile in some situations.
2498
2499 <item>  <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may take
2500         parameters. While classic macros may have empty parameters, this is
2501         not true for <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros.
2502         For this macro type, the number of actual parameters must match
2503         exactly the number of formal parameters.
2504
2505         To make this possible, formal parameters are enclosed in braces when
2506         defining the macro. If there are no parameters, the empty braces may
2507         be omitted.
2508
2509 <item>  Since <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may not
2510         contain end-of-line tokens, there are things that cannot be done. They
2511         may not contain several processor instructions for example. So, while
2512         some things may be done with both macro types, each type has special
2513         usages. The types complement each other.
2514
2515 </itemize>
2516
2517 Let's look at a few examples to make the advantages and disadvantages
2518 clear.
2519
2520 To emulate assemblers that use "<tt/EQU/" instead of "<tt/=/" you may use the
2521 following <tt/.DEFINE/:
2522
2523 <tscreen><verb>
2524         .define EQU     =
2525
2526         foo     EQU     $1234           ; This is accepted now
2527 </verb></tscreen>
2528
2529 You may use the directive to define string constants used elsewhere:
2530
2531 <tscreen><verb>
2532         ; Define the version number
2533         .define VERSION         "12.3a"
2534
2535         ; ... and use it
2536         .asciiz VERSION
2537 </verb></tscreen>
2538
2539 Macros with parameters may also be useful:
2540
2541 <tscreen><verb>
2542         .define DEBUG(message)  .out    message
2543
2544         DEBUG   "Assembling include file #3"
2545 </verb></tscreen>
2546
2547 Note that, while formal parameters have to be placed in braces, this is
2548 not true for the actual parameters. Beware: Since the assembler cannot
2549 detect the end of one parameter, only the first token is used. If you
2550 don't like that, use classic macros instead:
2551
2552 <tscreen><verb>
2553         .macro  message
2554                 .out    message
2555         .endmacro
2556 </verb></tscreen>
2557
2558 (This is an example where a problem can be solved with both macro types).
2559
2560
2561 <sect1>Characters in macros<p>
2562
2563 When using the <ref id="option-t" name="-t"> option, characters are translated
2564 into the target character set of the specific machine. However, this happens
2565 as late as possible. This means that strings are translated if they are part
2566 of a <tt><ref id=".BYTE" name=".BYTE"></tt> or <tt><ref id=".ASCIIZ"
2567 name=".ASCIIZ"></tt> command. Characters are translated as soon as they are
2568 used as part of an expression.
2569
2570 This behaviour is very intuitive outside of macros but may be confusing when
2571 doing more complex macros. If you compare characters against numeric values,
2572 be sure to take the translation into account.
2573
2574
2575
2576
2577 <sect>Macro packages<label id="macropackages"><p>
2578
2579 Using the <tt><ref id=".MACPACK" name=".MACPACK"></tt> directive, predefined
2580 macro packages may be included with just one command. Available macro packages
2581 are:
2582
2583
2584 <sect1><tt>.MACPACK generic</tt><p>
2585
2586 This macro package defines macros that are useful in almost any program.
2587 Currently, two macros are defined:
2588
2589 <tscreen><verb>
2590         .macro  add     Arg
2591                 clc
2592                 adc     Arg
2593         .endmacro
2594
2595         .macro  sub     Arg
2596                 sec
2597                 sbc     Arg
2598         .endmacro
2599 </verb></tscreen>
2600
2601
2602 <sect1><tt>.MACPACK longbranch</tt><p>
2603
2604 This macro package defines long conditional jumps. They are named like the
2605 short counterpart but with the 'b' replaced by a 'j'. Here is a sample
2606 definition for the "<tt/jeq/" macro, the other macros are built using the same
2607 scheme:
2608
2609 <tscreen><verb>
2610         .macro  jeq     Target
2611                 .if     .def(Target) .and ((*+2)-(Target) <= 127)
2612                 beq     Target
2613                 .else
2614                 bne     *+5
2615                 jmp     Target
2616                 .endif
2617         .endmacro
2618 </verb></tscreen>
2619
2620 All macros expand to a short branch, if the label is already defined (back
2621 jump) and is reachable with a short jump. Otherwise the macro expands to a
2622 conditional branch with the branch condition inverted, followed by an absolute
2623 jump to the actual branch target.
2624
2625 The package defines the following macros:
2626
2627 <tscreen><verb>
2628         jeq, jne, jmi, jpl, jcs, jcc, jvs, jvc
2629 </verb></tscreen>
2630
2631
2632
2633 <sect>Module constructors/destructors<label id="condes"><p>
2634
2635 <em>Note:</em> This section applies mostly to C programs, so the explanation
2636 below uses examples from the C libraries. However, the feature may also be
2637 useful for assembler programs.
2638
2639
2640 <sect1>Module overview<p>
2641
2642 Using the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
2643 id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> keywords it it possible to export
2644 functions in a special way. The linker is able to generate tables with all
2645 functions of a specific type. Such a table will <em>only</em> include symbols
2646 from object files that are linked into a specific executable. This may be used
2647 to add initialization and cleanup code for library modules.
2648
2649 The C heap functions are an example where module initialization code is used.
2650 All heap functions (<tt>malloc</tt>, <tt>free</tt>, ...) work with a few
2651 variables that contain the start and the end of the heap, pointers to the free
2652 list and so on. Since the end of the heap depends on the size and start of the
2653 stack, it must be initialized at runtime. However, initializing these
2654 variables for programs that do not use the heap are a waste of time and
2655 memory.
2656
2657 So the central module defines a function that contains initialization code and
2658 exports this function using the <tt/.CONSTRUCTOR/ statement. If (and only if)
2659 this module is added to an executable by the linker, the initialization
2660 function will be placed into the table of constructors by the linker. The C
2661 startup code will call all constructors before <tt/main/ and all destructors
2662 after <tt/main/, so without any further work, the heap initialization code is
2663 called once the module is linked in.
2664
2665 While it would be possible to add explicit calls to initialization functions
2666 in the startup code, the new approach has several advantages:
2667
2668 <enum>
2669 <item>
2670 If a module is not included, the initialization code is not linked in and not
2671 called. So you don't pay for things you don't need.
2672
2673 <item>
2674 Adding another library that needs initialization does not mean that the
2675 startup code has to be changed. Before we had module constructors and
2676 destructors, the startup code for all systems had to be adjusted to call the
2677 new initialization code.
2678
2679 <item>
2680 The feature saves memory: Each additional initialization function needs just
2681 two bytes in the table (a pointer to the function).
2682
2683 </enum>
2684
2685
2686 <sect1>Pitfalls<p>
2687
2688 When creating and using module constructors and destructors, please take care
2689 of the following:
2690
2691 <itemize>
2692
2693 <item>
2694 The linker will only generate function tables, it will not generate code to
2695 call these functions. If you're using the feature in some other than the
2696 existing C environments, you have to write code to call all functions in a
2697 linker generated table yourself. See the <tt>condes</tt> module in the C
2698 runtime for an example on how to do this.
2699
2700 <item>
2701 The linker will only add addresses of functions that are in modules linked to
2702 the executable. This means that you have to be careful where to place the
2703 condes functions. If initialization is needed for a group of functions, be
2704 sure to place the initialization function into a module that is linked in
2705 regardless of which function is called by the user.
2706
2707 <item>
2708 The linker will generate the tables only when requested to do so by the
2709 <tt/FEATURE CONDES/ statement in the linker config file. Each table has to
2710 be requested separately.
2711
2712 <item>
2713 Constructors and destructors may have priorities. These priorities determine
2714 the order of the functions in the table. If your intialization or cleanup code
2715 does depend on other intiialization or cleanup code, you have to choose the
2716 priority for the functions accordingly.
2717
2718 <item>
2719 Besides the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
2720 id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> statements, there is also a more
2721 generic command: <tt><ref id=".CONDES" name=".CONDES"></tt>. This allows to
2722 specify an additional type. Predefined types are 0 (constructor) and 1
2723 (destructor). The linker generates a separate table for each type on request.
2724
2725 </itemize>
2726
2727
2728
2729
2730
2731 <sect>Bugs/Feedback<p>
2732
2733 If you have problems using the assembler, if you find any bugs, or if
2734 you're doing something interesting with the assembler, I would be glad to
2735 hear from you. Feel free to contact me by email
2736 (<htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">).
2737
2738
2739
2740 <sect>Copyright<p>
2741
2742 ca65 (and all cc65 binutils) are (C) Copyright 1998-2001 Ullrich von
2743 Bassewitz. For usage of the binaries and/or sources the following
2744 conditions do apply:
2745
2746 This software is provided 'as-is', without any expressed or implied
2747 warranty.  In no event will the authors be held liable for any damages
2748 arising from the use of this software.
2749
2750 Permission is granted to anyone to use this software for any purpose,
2751 including commercial applications, and to alter it and redistribute it
2752 freely, subject to the following restrictions:
2753
2754 <enum>
2755 <item>  The origin of this software must not be misrepresented; you must not
2756         claim that you wrote the original software. If you use this software
2757         in a product, an acknowledgment in the product documentation would be
2758         appreciated but is not required.
2759 <item>  Altered source versions must be plainly marked as such, and must not
2760         be misrepresented as being the original software.
2761 <item>  This notice may not be removed or altered from any source
2762         distribution.
2763 </enum>
2764
2765
2766
2767 </article>
2768
2769
2770