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