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