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