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