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