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