]> git.sur5r.net Git - cc65/blob - doc/ca65.sgml
Add info about the label assignment operator
[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>19.07.2000, 29.11.2000, 02.10.2001
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                    Create a listing if assembly was ok
99   -o name               Name the output file
100   -s                    Enable smart mode
101   -t sys                Set the target system
102   -v                    Increase verbosity
103
104 Long options:
105   --auto-import         Mark unresolved symbols as import
106   --cpu type            Set cpu type
107   --debug-info          Add debug info to object file
108   --feature name        Set an emulation feature
109   --help                Help (this text)
110   --ignore-case         Ignore case of symbols
111   --include-dir dir     Set an include directory search path
112   --listing             Create a listing if assembly was ok
113   --pagelength n        Set the page length for the listing
114   --smart               Enable smart mode
115   --target sys          Set the target system
116   --verbose             Increase verbosity
117   --version             Print the assembler version
118 ---------------------------------------------------------------------------
119 </verb></tscreen>
120
121
122 <sect1>Command line options in detail<p>
123
124 Here is a description of all the command line options:
125
126 <descrip>
127
128   <label id="option--cpu">
129   <tag><tt>--cpu type</tt></tag>
130
131   Set the default for the CPU type. The option takes a parameter, which
132   may be one of
133
134         6502, 65SC02, 65C02, 65816 and sunplus
135
136   The last one (sunplus) is not available in the freeware version, because the
137   instruction set of the sunplus CPU is "proprietary and confidential".
138
139
140   <label id="option--feature">
141   <tag><tt>--feature name</tt></tag>
142
143   Enable an emulation feature. This is identical as using <tt/.FEATURE/
144   in the source with two exceptions: Feature names must be lower case, and
145   each feature must be specified by using an extra <tt/--feature/ option,
146   comma separated lists are not allowed.
147
148   See the discussion of the <tt><ref id=".FEATURE" name=".FEATURE"></tt>
149   command for a list of emulation features.
150
151
152   <label id="option-g">
153   <tag><tt>-g, --debug-info</tt></tag>
154
155   When this option (or the equivalent control command <tt/.DEBUGINFO/) is
156   used, the assembler will add a section to the object file that contains
157   all symbols (including local ones) together with the symbol values and
158   source file positions. The linker will put these additional symbols into
159   the VICE label file, so even local symbols can be seen in the VICE
160   monitor.
161
162
163   <tag><tt>-h, --help</tt></tag>
164
165   Print the short option summary shown above.
166
167
168   <tag><tt>-i, --ignore-case</tt></tag>
169
170   This option makes the assembler case insensitive on identifiers and labels.
171   This option will override the default, but may itself be overriden by the
172   <tt><ref id=".CASE" name=".CASE"></tt> control command.
173
174
175   <tag><tt>-l, --listing</tt></tag>
176
177   Generate an assembler listing. The listing file will always have the
178   name of the main input file with the extension replaced by ".lst". This
179   may change in future versions.
180
181
182   <tag><tt>-o name</tt></tag>
183
184   The default output name is the name of the input file with the extension
185   replaced by ".o". If you don't like that, you may give another name with
186   the -o option. The output file will be placed in the same directory as
187   the source file, or, if -o is given, the full path in this name is used.
188
189
190   <tag><tt>--pagelength n</tt></tag>
191
192   sets the length of a listing page in lines. See the <tt><ref
193   id=".PAGELENGTH" name=".PAGELENGTH"></tt> directive for more information.
194
195
196   <tag><tt>-s, --smart-mode</tt></tag>
197
198   In smart mode (enabled by -s or the <tt><ref id=".SMART" name=".SMART"></tt>
199   pseudo instruction) the assembler will track usage of the <tt/REP/ and
200   <tt/SEP/ instructions in 65816 mode and update the operand sizes
201   accordingly. If the operand of such an instruction cannot be evaluated by
202   the assembler (for example, because the operand is an imported symbol), a
203   warning is issued.
204
205   Beware: Since the assembler cannot trace the execution flow this may
206   lead to false results in some cases. If in doubt, use the .ixx and .axx
207   instructions to tell the assembler about the current settings. Smart
208   mode is off by default.
209
210
211   <label id="option-t">
212   <tag><tt>-t sys, --target sys</tt></tag>
213
214   Set the target system. This will enable translation of character strings
215   and character constants into the character set of the target platform.
216   The default for the target system is "none", which means that no translation
217   will take place. The assembler supports the same target systems as the
218   compiler, see there for a list.
219
220
221   <tag><tt>-v, --verbose</tt></tag>
222
223   Increase the assembler verbosity. Usually only needed for debugging
224   purposes. You may use this option more than one time for even more
225   verbose output.
226
227
228   <tag><tt>-D</tt></tag>
229
230   This option allows you to define symbols on the command line. Without a
231   value, the symbol is defined with the value zero. When giving a value,
232   you may use the '&dollar;' prefix for hexadecimal symbols. Please note
233   that for some operating systems, '&dollar;' has a special meaning, so
234   you may have to quote the expression.
235
236
237   <tag><tt>-I dir, --include-dir dir</tt></tag>
238
239   Name a directory which is searched for include files. The option may be
240   used more than once to specify more than one directory to search. The
241   current directory is always searched first before considering any
242   additional directores.
243
244
245   <tag><tt>-U, --auto-import</tt></tag>
246
247   Mark symbols that are not defined in the sources as imported symbols. This
248   should be used with care since it delays error messages about typos and such
249   until the linker is run. The compiler uses the equivalent of this switch
250   (<tt><ref id=".AUTOIMPORT" name=".AUTOIMPORT"></tt>) to enable auto imported
251   symbols for the runtime library. However, the compiler is supposed to
252   generate code that runs through the assembler without problems, something
253   which is not always true for assembler programmers.
254
255
256   <tag><tt>-V, --version</tt></tag>
257
258   Print the version number of the assembler. If you send any suggestions
259   or bugfixes, please include the version number.
260
261
262   <label id="option-W">
263   <tag><tt>-Wn</tt></tag>
264
265   Set the warning level for the assembler. Using -W2 the assembler will
266   even warn about such things like unused imported symbols. The default
267   warning level is 1, and it would probably be silly to set it to
268   something lower.
269
270 </descrip>
271 <p>
272
273
274 <sect>Input format<p>
275
276 <sect1>Assembler syntax<p>
277
278 The assembler accepts the standard 6502/65816 assembler syntax. One line may
279 contain a label (which is identified by a colon), and, in addition to the
280 label, an assembler mnemonic, a macro, or a control command (see section <ref
281 id="control-commands" name="Control Commands"> for supported control
282 commands). Alternatively, the line may contain a symbol definition using the
283 '=' token. Everything after a semicolon is handled as a comment (that is, it
284 is ignored).
285
286 Here are some examples for valid input lines:
287
288 <tscreen><verb>
289         Label:                          ; A label and a comment
290                 lda     #$20            ; A 6502 instruction plus comment
291         L1:     ldx     #$20            ; Same with label
292         L2:     .byte   "Hello world"   ; Label plus control command
293                 mymac   $20             ; Macro expansion
294                 MySym = 3*L1            ; Symbol definition
295         MaSym   = Label                 ; Another symbol
296 </verb></tscreen>
297
298 The assembler accepts
299
300 <itemize>
301 <item>all valid 6502 mnemonics when in 6502 mode (the default or after the
302       <tt><ref id=".P02" name=".P02"></tt> command was given).
303 <item>all valid 65SC02 mnemonics when in 65SC02 mode (after the
304       <tt><ref id=".PSC02" name=".PSC02"></tt> command was given).
305 <item>all valid 65C02 mnemonics when in 65C02 mode (after the
306       <tt><ref id=".PC02" name=".PC02"></tt> command was given).
307 <item>all valid 65618 mnemonics when in 65816 mode (after the
308       <tt><ref id=".P816" name=".P816"></tt> command was given).
309 <item>all valid SunPlus mnemonics when in SunPlus mode (after the
310       <tt><ref id=".SUNPLUS" name=".SUNPLUS"></tt> command was given).
311 </itemize>
312
313
314 <sect1>65816 mode<p>
315
316 In 65816 mode several aliases are accepted in addition to the official
317 mnemonics:
318
319 <tscreen><verb>
320         BGE is an alias for BCS
321         BLT is an alias for BCC
322         CPA is an alias for CMP
323         DEA is an alias for DEC A
324         INA is an alias for INC A
325         SWA is an alias for XBA
326         TAD is an alias for TCD
327         TAS is an alias for TCS
328         TDA is an alias for TDC
329         TSA is an alias for TSC
330 </verb></tscreen>
331
332 Evaluation of banked expressions in 65816 mode differs slightly from the
333 official syntax:
334
335 Instead of accepting a 24 bit address (something that is difficult for
336 the assembler to determine and would have required one more special
337 .import command), the bank and the absolute address in that bank are
338 separated by a dot:
339
340 <tscreen><verb>
341         jsl     3.$1234         ; Call subroutine at $1234 in bank 3
342 </verb></tscreen>
343
344 <sect1>Number format<p>
345
346 For literal values, the assembler accepts the widely used number formats:
347 A preceeding '&dollar;' denotes a hex value, a preceeding '%' denotes a
348 binary value, and a bare number is interpeted as a decimal. There are
349 currently no octal values and no floats.
350
351
352 <sect1>Conditional assembly<p>
353
354 Please note that when using the conditional directives (<tt/.IF/ and friends),
355 the input must consist of valid assembler tokens, even in <tt/.IF/ branches
356 that are not assembled. The reason for this behaviour is that the assembler
357 must still be able to detect the ending tokens (like <tt/.ENDIF/), so
358 conversion of the input stream into tokens still takes place. As a consequence
359 conditional assembly directives may <bf/not/ be used to prevent normal text
360 (used as a comment or similar) from being assembled. <p>
361
362
363 <sect>Expressions<p>
364
365
366 <sect1>Expression evaluation<p>
367
368 All expressions are evaluated with (at least) 32 bit precision. An
369 expression may contain constant values and any combination of internal and
370 external symbols. Expressions that cannot be evaluated at assembly time
371 are stored inside the object file for evaluation by the linker.
372 Expressions referencing imported symbols must always be evaluated by the
373 linker.
374
375
376 <sect1>Size of an expressions result<p>
377
378 Sometimes, the assembler must know about the size of the value that is the
379 result of an expression. This is usually the case, if a decision has to be
380 made, to generate a zero page or an absolute memory references. In this
381 case, the assembler has to make some assumptions about the result of an
382 expression:
383
384 <itemize>
385 <item>  If the result of an expression is constant, the actual value is
386         checked to see if it's a byte sized expression or not.
387 <item>  If the expression is explicitly casted to a byte sized expression by
388         one of the '&gt;'/'&lt;' operators, it is a byte expression.
389 <item>  If this is not the case, and the expression contains a symbol,
390         explicitly declared as zero page symbol (by one of the .importzp or
391         .exportzp instructions), then the whole expression is assumed to be
392         byte sized.
393 <item>  If the expression contains symbols that are not defined, and these
394         symbols are local symbols, the enclosing scopes are searched for a
395         symbol with the same name. If one exists and this symbol is defined,
396         it's attributes are used to determine the result size.
397 <item>  In all other cases the expression is assumed to be word sized.
398 </itemize>
399
400 Note: If the assembler is not able to evaluate the expression at assembly
401 time, the linker will evaluate it and check for range errors as soon as
402 the result is known.
403
404
405 <sect1>Boolean expressions<p>
406
407 In the context of a boolean expression, any non zero value is evaluated as
408 true, any other value to false. The result of a boolean expression is 1 if
409 it's true, and zero if it's false. There are boolean operators with extrem
410 low precedence with version 2.x (where x &gt; 0). The <tt/.AND/ and <tt/.OR/
411 operators are shortcut operators. That is, if the result of the expression is
412 already known, after evaluating the left hand side, the right hand side is
413 not evaluated.
414
415
416 <sect1>Available operators<label id="operators"><p>
417
418 Available operators sorted by precedence:
419
420 <tscreen><verb>
421     Op          Description                             Precedence
422   -------------------------------------------------------------------
423     .CONCAT     Builtin function                        0
424     .LEFT       Builtin function                        0
425     .MID        Builtin function                        0
426     .RIGHT      Builtin function                        0
427     .STRING     Builtin function                        0
428
429     *           Builtin pseudo variable (r/o)           1
430     .BLANK      Builtin function                        1
431     .CONST      Builtin function                        1
432     .CPU        Builtin pseudo variable (r/o)           1
433     .DEFINED    Builtin function                        1
434     .MATCH      Builtin function                        1
435     .TCOUNT     Builtin function                        1
436     .TIME       Builtin function                        1
437     .VERSION    Builtin function                        1
438     .XMATCH     Builtin function                        1
439     .PARAMCOUNT Builtin pseudo variable (r/o)           1
440     .REFERENCED Builtin function                        1
441     ::          Global namespace override               1
442     +           Unary plus                              1
443     -           Unary minus                             1
444     ~           Unary bitwise not                       1
445     .BITNOT     Unary bitwise not                       1
446     &lt;           Low byte operator                       1
447     &gt;           High byte operator                      1
448
449     *           Multiplication                          2   
450     /           Division                                2
451     .MOD        Modulo operation                        2
452     &amp;           Bitwise and                             2
453     .BITAND     Bitwise and                             2
454     ^           Bitwise xor                             2
455     .BITXOR     Bitwise xor                             2
456     &lt;&lt;          Shift left operator                     2
457     .SHL        Shift left operator                     2
458     &gt;&gt;          Shift right operator
459     .SHR        Shift right operator                    2
460
461     +           Binary plus                             3
462     -           Binary minus                            3
463     |           Binary or                               3
464     .BITOR      Binary or                               3
465
466     =           Compare operation (equal)               4
467     &lt;&gt;          Compare operation (not equal)           4
468     &lt;           Compare operation (less)                4
469     &gt;           Compare operation (greater)             4
470     &lt;=          Compare operation (less or equal)       4
471     &gt;=          Compare operation (greater or equal)    4
472
473     &amp;&amp;          Boolean and                             5
474     .AND        Boolean and                             5
475     .XOR        Boolean xor                             5
476
477     ||          Boolean or                              6
478     .OR         Boolean or                              6
479
480     !           Boolean not                             7
481     .NOT        Boolean not                             7
482 </verb></tscreen>
483
484
485 To force a specific order of evaluation, braces may be used as usual.
486
487 Some of the pseudo variables mentioned above need some more explanation:
488
489 <tscreen><verb>
490   *             This symbol is replaced by the value of the program
491                 counter at start of the current instruction. Note, that
492                 '*' yields a rvalue, that means, you cannot assign to it.
493                 Use <tt/.ORG/ to set the program counter in sections with
494                 absolute code.
495 </verb></tscreen>
496 <p>
497
498
499
500 <sect>Symbols and labels<p>
501
502 The assembler allows you to use symbols instead of naked values to make
503 the source more readable. There are a lot of different ways to define and
504 use symbols and labels, giving a lot of flexibility.
505
506
507 <sect1>Numeric constants<p>
508
509 Numeric constants are defined using the equal sign or the label assignment
510 operator. After doing
511
512 <tscreen><verb>
513       two = 2
514 </verb></tscreen>
515
516 may use the symbol "two" in every place where a number is expected, and it is
517 evaluated to the value 2 in this context. The label assignment operator causes
518 the same, but causes the symbol to be marked as a label, which may cause a
519 different handling in the debugger:
520
521 <tscreen><verb>
522       io := $d000
523 </verb></tscreen>
524
525 The right side can of course be an expression:
526
527 <tscreen><verb>
528       four = two * two
529 </verb></tscreen>
530
531
532 <sect1>Standard labels<p>
533
534 A label is defined by writing the name of the label at the start of the line
535 (before any instruction mnemonic, macro or pseudo directive), followed by a
536 colon. This will declare a symbol with the given name and the value of the
537 current program counter.
538
539
540 <sect1>Local labels and symbols<p>
541
542 Using the <tt><ref id=".PROC" name=".PROC"></tt> directive, it is possible to
543 create regions of code where the names of labels and symbols are local to this
544 region. They are not known outside of this region and cannot be accessed from
545 there. Such regions may be nested like PROCEDUREs in Pascal.
546
547 See the description of the <tt><ref id=".PROC" name=".PROC"></tt>
548 directive for more information.
549
550
551 <sect1>Cheap local labels<p>
552
553 Cheap local labels are defined like standard labels, but the name of the
554 label must begin with a special symbol (usually '@', but this can be
555 changed by the <tt><ref id=".LOCALCHAR" name=".LOCALCHAR"></tt>
556 directive).
557
558 Cheap local labels are visible only between two non cheap labels. As soon as a
559 standard symbol is encountered (this may also be a local symbol if inside a
560 region defined with the <tt><ref id=".PROC" name=".PROC"></tt> directive), the
561 cheap local symbol goes out of scope.
562
563 You may use cheap local labels as an easy way to reuse common label
564 names like "Loop". Here is an example:
565
566 <tscreen><verb>
567         Clear:  lda    #$00             ; Global label
568                 ldy    #$20
569         @Loop:  sta    Mem,y            ; Local label
570                 dey
571                 bne    @Loop            ; Ok
572                 rts
573         Sub:    ...                     ; New global label
574                 bne    @Loop            ; ERROR: Unknown identifier!
575 </verb></tscreen>
576
577 <sect1>Unnamed labels<p>
578
579 If you really want to write messy code, there are also unnamed
580 labels. These labels do not have a name (you guessed that already,
581 didn't you?). A colon is used to mark the absence of the name.
582
583 Unnamed labels may be accessed by using the colon plus several minus
584 or plus characters as a label designator. Using the '-' characters
585 will create a back reference (use the n'th label backwards), using
586 '+' will create a forward reference (use the n'th label in forward
587 direction). An example will help to understand this:
588
589 <tscreen><verb>
590         :       lda     (ptr1),y        ; #1
591                 cmp     (ptr2),y
592                 bne     :+              ; -> #2
593                 tax
594                 beq     :+++            ; -> #4
595                 iny
596                 bne     :-              ; -> #1
597                 inc     ptr1+1
598                 inc     ptr2+1
599                 bne     :-              ; -> #1
600
601         :       bcs     :+              ; #2 -> #3
602                 ldx     #$FF
603                 rts
604
605         :       ldx     #$01            ; #3
606         :       rts                     ; #4
607 </verb></tscreen>
608
609 As you can see from the example, unnamed labels will make even short
610 sections of code hard to understand, because you have to count labels
611 to find branch targets (this is the reason why I for my part do
612 prefer the "cheap" local labels). Nevertheless, unnamed labels are
613 convenient in some situations, so it's your decision.
614
615
616 <sect1>Using macros to define labels and constants<p>
617
618 While there are drawbacks with this approach, it may be handy in some
619 situations. Using <tt><ref id=".DEFINE" name=".DEFINE"></tt>, it is
620 possible to define symbols or constants that may be used elsewhere. Since
621 the macro facility works on a very low level, there is no scoping. On the
622 other side, you may also define string constants this way (this is not
623 possible with the other symbol types).
624
625 Example:
626
627 <tscreen><verb>
628         .DEFINE two     2
629         .DEFINE version "SOS V2.3"
630
631         four = two * two        ; Ok
632         .byte   version         ; Ok
633
634         .PROC                   ; Start local scope
635         two = 3                 ; Will give "2 = 3" - invalid!
636         .ENDPROC
637 </verb></tscreen>
638
639
640 <sect1>Symbols and <tt>.DEBUGINFO</tt><p>
641
642 If <tt><ref id=".DEBUGINFO" name=".DEBUGINFO"></tt> is enabled (or <ref
643 id="option-g" name="-g"> is given on the command line), global, local and
644 cheap local labels are written to the object file and will be available in the
645 symbol file via the linker. Unnamed labels are not written to the object file,
646 because they don't have a name which would allow to access them.
647
648
649
650 <sect>Control commands<label id="control-commands">
651
652 <p>
653 Here's a list of all control commands and a description, what they do:
654
655
656 <sect1><tt>.A16</tt><label id=".A16"><p>
657
658   Valid only in 65816 mode. Switch the accumulator to 16 bit.
659
660   Note: This command will not emit any code, it will tell the assembler to
661   create 16 bit operands for immediate accumulator adressing mode.
662
663   See also: <tt><ref id=".SMART" name=".SMART"></tt>
664
665
666 <sect1><tt>.A8</tt><label id=".A8"><p>
667
668   Valid only in 65816 mode. Switch the accumulator to 8 bit.
669
670   Note: This command will not emit any code, it will tell the assembler to
671   create 8 bit operands for immediate accu adressing mode.
672
673   See also: <tt><ref id=".SMART" name=".SMART"></tt>
674
675
676 <sect1><tt>.ADDR</tt><label id=".ADDR"><p>
677
678   Define word sized data. In 6502 mode, this is an alias for <tt/.WORD/ and
679   may be used for better readability if the data words are address values. In
680   65816 mode, the address is forced to be 16 bit wide to fit into the current
681   segment. See also <tt><ref id=".FARADDR" name=".FARADDR"></tt>. The command
682   must be followed by a sequence of (not necessarily constant) expressions.
683
684   Example:
685
686   <tscreen><verb>
687         .addr   $0D00, $AF13, _Clear
688   </verb></tscreen>
689
690   See: <tt><ref id=".FARADDR" name=".FARADDR"></tt>, <tt><ref id=".WORD"
691        name=".WORD"></tt>
692
693
694 <sect1><tt>.ALIGN</tt><label id=".ALIGN"><p>
695
696   Align data to a given boundary. The command expects a constant integer
697   argument that must be a power of two, plus an optional second argument
698   in byte range. If there is a second argument, it is used as fill value,
699   otherwise the value defined in the linker configuration file is used
700   (the default for this value is zero).
701
702   Since alignment depends on the base address of the module, you must
703   give the same (or a greater) alignment for the segment when linking.
704   The linker will give you a warning, if you don't do that.
705
706   Example:
707
708   <tscreen><verb>
709         .align  256
710   </verb></tscreen>
711
712
713 <sect1><tt>.ASCIIZ</tt><label id=".ASCIIZ"><p>
714
715   Define a string with a trailing zero.
716
717   Example:
718
719   <tscreen><verb>
720         Msg:    .asciiz "Hello world"
721   </verb></tscreen>
722
723   This will put the string "Hello world" followed by a binary zero into
724   the current segment. There may be more strings separated by commas, but
725   the binary zero is only appended once (after the last one).
726
727
728 <sect1><tt>.ASSERT</tt><label id=".ASSERT"><p>
729
730   Add an assertion. The command is followed by an expression, an action
731   specifier and a message that is output in case the assertion fails. The
732   action specifier may be one of <tt/warning/ or <tt/error/. The assertion
733   is passed to the linker and will be evaluated when segment placement has
734   been done.
735
736   Example:
737
738   <tscreen><verb>
739         .assert         * = $8000, error, "Code not at $8000"
740   </verb></tscreen>
741
742   The example assertion will check that the current location is at $8000,
743   when the output file is written, and abort with an error if this is not
744   the case. More complex expressions are possible. The action specifier
745   <tt/warning/ outputs a warning, while the <tt/error/ specifier outputs
746   an error message. In the latter case, generation if the output file is
747   suppressed.
748
749
750 <sect1><tt>.AUTOIMPORT</tt><label id=".AUTOIMPORT"><p>
751
752   Is followed by a plus or a minus character. When switched on (using a
753   +), undefined symbols are automatically marked as import instead of
754   giving errors. When switched off (which is the default so this does not
755   make much sense), this does not happen and an error message is
756   displayed. The state of the autoimport flag is evaluated when the
757   complete source was translated, before outputing actual code, so it is
758   <em/not/ possible to switch this feature on or off for separate sections
759   of code. The last setting is used for all symbols.
760
761   You should probably not use this switch because it delays error
762   messages about undefined symbols until the link stage. The cc65
763   compiler (which is supposed to produce correct assembler code in all
764   circumstances, something which is not true for most assembler
765   programmers) will insert this command to avoid importing each and every
766   routine from the runtime library.
767
768   Example:
769
770   <tscreen><verb>
771         .autoimport     +       ; Switch on auto import
772   </verb></tscreen>
773
774
775 <sect1><tt>.BLANK</tt><label id=".BLANK"><p>
776
777   Builtin function. The function evaluates its argument in braces and
778   yields "false" if the argument is non blank (there is an argument), and
779   "true" if there is no argument. As an example, the <tt/.IFBLANK/ statement
780   may be replaced by
781
782   <tscreen><verb>
783         .if     .blank(arg)
784   </verb></tscreen>
785
786
787 <sect1><tt>.BSS</tt><label id=".BSS"><p>
788
789   Switch to the BSS segment. The name of the BSS segment is always "BSS",
790   so this is a shortcut for
791
792   <tscreen><verb>
793         .segment  "BSS"
794   </verb></tscreen>
795
796   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
797
798
799 <sect1><tt>.BYT, .BYTE</tt><label id=".BYTE"><p>
800
801   Define byte sized data. Must be followed by a sequence of (byte ranged)
802   expressions or strings.
803
804   Example:
805
806   <tscreen><verb>
807         .byte   "Hello "
808         .byt    "world", $0D, $00
809   </verb></tscreen>
810
811
812 <sect1><tt>.CASE</tt><label id=".CASE"><p>
813
814   Switch on or off case sensitivity on identifiers. The default is off
815   (that is, identifiers are case sensitive), but may be changed by the
816   -i switch on the command line.
817   The command must be followed by a '+' or '-' character to switch the
818   option on or off respectively.
819
820   Example:
821
822   <tscreen><verb>
823         .case   -               ; Identifiers are not case sensitive
824   </verb></tscreen>
825
826
827 <sect1><tt>.CHARMAP</tt><label id=".CHARMAP"><p>
828
829   Apply a custom mapping for characters. The command is followed by two
830   numbers in the range 1..255. The first one is the index of the source
831   character, the second one is the mapping. The mapping applies to all
832   character and string constants when they generate output, and overrides
833   a mapping table specified with the <tt><ref id="option-t" name="-t"></tt>
834   command line switch.
835
836   Example:
837
838   <tscreen><verb>
839         .charmap        $41, $61        ; Map 'A' to 'a'
840   </verb></tscreen>
841
842
843 <sect1><tt>.CODE</tt><label id=".CODE"><p>
844
845   Switch to the CODE segment. The name of the CODE segment is always
846   "CODE", so this is a shortcut for
847
848   <tscreen><verb>
849         .segment  "CODE"
850   </verb></tscreen>
851
852   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
853
854
855 <sect1><tt>.CONDES</tt><label id=".CONDES"><p>
856
857   Export a symbol and mark it in a special way. The linker is able to build
858   tables of all such symbols. This may be used to automatically create a list
859   of functions needed to initialize linked library modules.
860
861   Note: The linker has a feature to build a table of marked routines, but it
862   is your code that must call these routines, so just declaring a symbol with
863   <tt/.CONDES/ does nothing by itself.
864
865   All symbols are exported as an absolute (16 bit) symbol. You don't need to
866   use an additional <tt><ref id=".EXPORT" name=".EXPORT"></tt> statement, this
867   is implied by <tt/.CONDES/.
868
869   <tt/.CONDES/ is followed by the type, which may be <tt/constructor/,
870   <tt/destructor/ or a numeric value between 0 and 6 (where 0 is the same as
871   specifiying <tt/constructor/ and 1 is equal to specifying <tt/destructor/).
872   The <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
873   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands are actually shortcuts
874   for <tt/.CONDES/ with a type of <tt/constructor/ resp. <tt/destructor/.
875
876   After the type, an optional priority may be specified. Higher numeric values
877   mean higher priority. If no priority is given, the default priority of 7 is
878   used. Be careful when assigning priorities to your own module constructors
879   so they won't interfere with the ones in the cc65 library.
880
881   Example:
882
883   <tscreen><verb>
884         .condes         ModuleInit, constructor
885         .condes         ModInit, 0, 16
886   </verb></tscreen>
887
888   See the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
889   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands and the separate section
890   <ref id="condes" name="Module constructors/destructors"> explaining the
891   feature in more detail.
892
893
894 <sect1><tt>.CONCAT</tt><label id=".CONCAT"><p>
895
896   Builtin function. The function allows to concatenate a list of string
897   constants separated by commas. The result is a string constant that
898   is the concatentation of all arguments. This function is most useful
899   in macros and when used together with the <tt/.STRING/ builtin function.
900   The function may be used in any case where a string constant is
901   expected.
902
903   Example:
904
905   <tscreen><verb>
906         .include        .concat ("myheader", ".", "inc")
907   </verb></tscreen>
908
909   This is the same as the command
910
911   <tscreen><verb>
912         .include        "myheader.inc"
913   </verb></tscreen>
914
915
916 <sect1><tt>.CONST</tt><label id=".CONST"><p>
917
918   Builtin function. The function evaluates its argument in braces and
919   yields "true" if the argument is a constant expression (that is, an
920   expression that yields a constant value at assembly time) and "false"
921   otherwise. As an example, the .IFCONST statement may be replaced by
922
923   <tscreen><verb>
924         .if     .const(a + 3)
925   </verb></tscreen>
926
927
928 <sect1><tt>.CONSTRUCTOR</tt><label id=".CONSTRUCTOR"><p>
929
930   Export a symbol and mark it as a module constructor. This may be used
931   together with the linker to build a table of constructor subroutines that
932   are called by the startup code.
933
934   Note: The linker has a feature to build a table of marked routines, but it
935   is your code that must call these routines, so just declaring a symbol as
936   constructor does nothing by itself.
937
938   A constructor is always exported as an absolute (16 bit) symbol. You don't
939   need to use an additional <tt/.export/ statement, this is implied by
940   <tt/.constructor/. It may have an optional priority that is separated by a
941   comma. Higher numeric values mean a higher priority. If no priority is
942   given, the default priority of 7 is used. Be careful when assigning
943   priorities to your own module constructors so they won't interfere with the
944   ones in the cc65 library.
945
946   Example:
947
948   <tscreen><verb>
949         .constructor    ModuleInit
950         .constructor    ModInit, 16
951   </verb></tscreen>
952
953   See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
954   id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands and the separate section
955   <ref id="condes" name="Module constructors/destructors"> explaining the
956   feature in more detail.
957
958
959 <sect1><tt>.CPU</tt><label id=".CPU"><p>
960
961   Reading this pseudo variable will give a constant integer value that
962   tells which CPU is currently enabled. It can also tell which instruction
963   set the CPU is able to translate. The value read from the pseudo variable
964   should be further examined by using one of the constants defined by the
965   "cpu" macro package (see <tt/<ref id=".MACPACK" name=".MACPACK">/).
966
967   It may be used to replace the .IFPxx pseudo instructions or to construct
968   even more complex expressions.
969
970   Example:
971
972   <tscreen><verb>
973         .macpack        cpu
974         .if     (.cpu .bitand CPU_ISET_65816)
975                 phx
976                 phy
977         .else
978                 txa
979                 pha
980                 tya
981                 pha
982         .endif
983   </verb></tscreen>
984
985
986 <sect1><tt>.DATA</tt><label id=".DATA"><p>
987
988   Switch to the DATA segment. The name of the DATA segment is always
989   "DATA", so this is a shortcut for
990
991   <tscreen><verb>
992         .segment  "DATA"
993   </verb></tscreen>
994
995   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
996
997
998 <sect1><tt>.DBYT</tt><label id=".DBYT"><p>
999
1000   Define word sized data with the hi and lo bytes swapped (use <tt/.WORD/ to
1001   create word sized data in native 65XX format). Must be followed by a
1002   sequence of (word ranged) expressions.
1003
1004   Example:
1005
1006   <tscreen><verb>
1007         .dbyt   $1234, $4512
1008   </verb></tscreen>
1009
1010   This will emit the bytes
1011
1012   <tscreen><verb>
1013         $12 $34 $45 $12
1014   </verb></tscreen>
1015
1016   into the current segment in that order.
1017
1018
1019 <sect1><tt>.DEBUGINFO</tt><label id=".DEBUGINFO"><p>
1020
1021   Switch on or off debug info generation. The default is off (that is,
1022   the object file will not contain debug infos), but may be changed by the
1023   -g switch on the command line.
1024   The command must be followed by a '+' or '-' character to switch the
1025   option on or off respectively.
1026
1027   Example:
1028
1029   <tscreen><verb>
1030         .debuginfo      +       ; Generate debug info
1031   </verb></tscreen>
1032
1033
1034 <sect1><tt>.DEFINE</tt><label id=".DEFINE"><p>
1035
1036   Start a define style macro definition. The command is followed by an
1037   identifier (the macro name) and optionally by a list of formal arguments
1038   in braces.
1039   See section <ref id="macros" name="Macros">.
1040
1041
1042 <sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p>
1043
1044   Builtin function. The function expects an identifier as argument in braces.
1045   The argument is evaluated, and the function yields "true" if the identifier
1046   is a symbol that is already defined somewhere in the source file up to the
1047   current position. Otherwise the function yields false. As an example, the
1048   <tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by
1049
1050   <tscreen><verb>
1051         .if     .defined(a)
1052   </verb></tscreen>
1053
1054
1055 <sect1><tt>.DESTRUCTOR</tt><label id=".DESTRUCTOR"><p>
1056
1057   Export a symbol and mark it as a module destructor. This may be used
1058   together with the linker to build a table of destructor subroutines that
1059   are called by the startup code.
1060
1061   Note: The linker has a feature to build a table of marked routines, but it
1062   is your code that must call these routines, so just declaring a symbol as
1063   constructor does nothing by itself.
1064
1065   A destructor is always exported as an absolute (16 bit) symbol. You don't
1066   need to use an additional <tt/.export/ statement, this is implied by
1067   <tt/.destructor/. It may have an optional priority that is separated by a
1068   comma. Higher numerical values mean a higher priority. If no priority is
1069   given, the default priority of 7 is used. Be careful when assigning
1070   priorities to your own module destructors so they won't interfere with the
1071   ones in the cc65 library.
1072
1073   Example:
1074
1075   <tscreen><verb>
1076         .destructor     ModuleDone
1077         .destructor     ModDone, 16
1078   </verb></tscreen>
1079
1080   See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
1081   id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> commands and the separate
1082   section <ref id="condes" name="Module constructors/destructors"> explaining
1083   the feature in more detail.
1084
1085
1086 <sect1><tt>.DWORD</tt><label id=".DWORD"><p>
1087
1088   Define dword sized data (4 bytes) Must be followed by a sequence of
1089   expressions.
1090
1091   Example:
1092
1093   <tscreen><verb>
1094         .dword  $12344512, $12FA489
1095   </verb></tscreen>
1096
1097
1098 <sect1><tt>.ELSE</tt><label id=".ELSE"><p>
1099
1100   Conditional assembly: Reverse the current condition.
1101
1102
1103 <sect1><tt>.ELSEIF</tt><label id=".ELSEIF"><p>
1104
1105   Conditional assembly: Reverse current condition and test a new one.
1106
1107
1108 <sect1><tt>.END</tt><label id=".END"><p>
1109
1110   Forced end of assembly. Assembly stops at this point, even if the command
1111   is read from an include file.
1112
1113
1114 <sect1><tt>.ENDIF</tt><label id=".ENDIF"><p>
1115
1116   Conditional assembly: Close a <tt><ref id=".IF" name=".IF..."></tt> or
1117   <tt><ref id=".ELSE" name=".ELSE"></tt> branch.
1118
1119
1120 <sect1><tt>.ENDMAC, .ENDMACRO</tt><label id=".ENDMACRO"><p>
1121
1122   End of macro definition (see section <ref id="macros" name="Macros">).
1123
1124
1125 <sect1><tt>.ENDPROC</tt><label id=".ENDPROC"><p>
1126
1127   End of local lexical level (see <tt><ref id=".PROC" name=".PROC"></tt>).
1128
1129
1130 <sect1><tt>.ENDREP, .ENDREPEAT</tt><label id=".ENDREPEAT"><p>
1131
1132   End a <tt><ref id=".REPEAT" name=".REPEAT"></tt> block.
1133
1134
1135 <sect1><tt>.ERROR</tt><label id=".ERROR"><p>
1136
1137   Force an assembly error. The assembler will output an error message
1138   preceeded by "User error" and will <em/not/ produce an object file.
1139
1140   This command may be used to check for initial conditions that must be
1141   set before assembling a source file.
1142
1143   Example:
1144
1145   <tscreen><verb>
1146         .if     foo = 1
1147         ...
1148         .elseif bar = 1
1149         ...
1150         .else
1151         .error  "Must define foo or bar!"
1152         .endif
1153   </verb></tscreen>
1154
1155   See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
1156   id=".OUT" name=".OUT"></tt> directives.
1157
1158
1159 <sect1><tt>.EXITMAC, .EXITMACRO</tt><label id=".EXITMACRO"><p>
1160
1161   Abort a macro expansion immidiately. This command is often useful in
1162   recursive macros. See separate section <ref id="macros" name="Macros">.
1163
1164
1165 <sect1><tt>.EXPORT</tt><label id=".EXPORT"><p>
1166
1167   Make symbols accessible from other modules. Must be followed by a comma
1168   separated list of symbols to export.
1169
1170   Example:
1171
1172   <tscreen><verb>
1173         .export foo, bar
1174   </verb></tscreen>
1175
1176   See: <tt><ref id=".EXPORTZP" name=".EXPORTZP"></tt>
1177
1178
1179 <sect1><tt>.EXPORTZP</tt><label id=".EXPORTZP"><p>
1180
1181   Make symbols accessible from other modules. Must be followed by a comma
1182   separated list of symbols to export. The exported symbols are explicitly
1183   marked as zero page symols.
1184
1185   Example:
1186
1187   <tscreen><verb>
1188         .exportzp  foo, bar
1189   </verb></tscreen>
1190
1191   See: <tt><ref id=".EXPORT" name=".EXPORT"></tt>
1192
1193
1194 <sect1><tt>.FARADDR</tt><label id=".FARADDR"><p>
1195
1196   Define far (24 bit) address data. The command must be followed by a
1197   sequence of (not necessarily constant) expressions.
1198
1199   Example:
1200
1201   <tscreen><verb>
1202         .faraddr        DrawCircle, DrawRectangle, DrawHexagon
1203   </verb></tscreen>
1204
1205   See: <tt><ref id=".ADDR" name=".ADDR"></tt>
1206
1207
1208 <sect1><tt>.FEATURE</tt><label id=".FEATURE"><p>
1209
1210   This directive may be used to enable one or more compatibility features
1211   of the assembler. While the use of <tt/.FEATURE/ should be avoided when
1212   possible, it may be useful when porting sources written for other
1213   assemblers. There is no way to switch a feature off, once you have
1214   enabled it, so using
1215
1216   <tscreen><verb>
1217         .FEATURE        xxx
1218   </verb></tscreen>
1219
1220   will enable the feature until end of assembly is reached.
1221
1222   The following features are available:
1223
1224   <descrip>
1225
1226   <tag><tt>dollar_is_pc</tt></tag>
1227
1228     The dollar sign may be used as an alias for the star (`*'), which
1229     gives the value of the current PC in expressions.
1230     Note: Assignment to the pseudo variable is not allowed.
1231
1232   <tag><tt>labels_without_colons</tt></tag>
1233
1234     Allow labels without a trailing colon. These labels are only accepted,
1235     if they start at the beginning of a line (no leading white space).
1236
1237   <tag><tt>loose_string_term</tt></tag>
1238
1239     Accept single quotes as well as double quotes as terminators for string
1240     constants.
1241
1242   <tag><tt>loose_char_term</tt></tag>
1243
1244     Accept single quotes as well as double quotes as terminators for char
1245     constants.
1246
1247   <tag><tt>at_in_identifiers</tt></tag>
1248
1249     Accept the at character (`@') as a valid character in identifiers. The
1250     at character is not allowed to start an identifier, even with this
1251     feature enabled.
1252
1253   <tag><tt>dollar_in_identifiers</tt></tag>
1254
1255     Accept the dollar sign (`&dollar;') as a valid character in identifiers. The
1256     at character is not allowed to start an identifier, even with this
1257     feature enabled.
1258
1259   <tag><tt>leading_dot_in_identifiers</tt></tag>
1260
1261     Accept the dot (`.') as the first character of an identifier. This may be
1262     used for example to create macro names that start with a dot emulating
1263     control directives of other assemblers. Note however, that none of the
1264     reserved keywords built into the assembler, that starts with a dot, may be
1265     overridden. When using this feature, you may also get into trouble if
1266     later versions of the assembler define new keywords starting with a dot.
1267
1268   <tag><tt>pc_assignment</tt></tag>
1269
1270     Allow assignments to the PC symbol (`*' or `&dollar;' if <tt/dollar_is_pc/
1271     is enabled). Such an assignment is handled identical to the <tt><ref
1272     id=".ORG" name=".ORG"></tt> command (which is usually not needed, so just
1273     removing the lines with the assignments may also be an option when porting
1274     code written for older assemblers).
1275
1276   </descrip>
1277
1278   It is also possible to specify features on the command line using the
1279   <tt><ref id="option--feature" name="--feature"></tt> command line option.
1280   This is useful when translating sources written for older assemblers, when
1281   you don't want to change the source code.
1282
1283   As an example, to translate sources written for Andre Fachats xa65
1284   assembler, the features
1285
1286   <verb>
1287         labels_without_colons, pc_assignment, loose_char_term
1288   </verb>
1289
1290   may be helpful. They do not make ca65 completely compatible, so you may not
1291   be able to translate the sources without changes, even when enabling these
1292   features. However, I have found several sources that translate without
1293   problems when enabling these features on the command line.
1294
1295
1296 <sect1><tt>.FILEOPT, .FOPT</tt><label id=".FOPT"><p>
1297
1298   Insert an option string into the object file. There are two forms of
1299   this command, one specifies the option by a keyword, the second
1300   specifies it as a number. Since usage of the second one needs knowledge
1301   of the internal encoding, its use is not recommended and I will only
1302   describe the first form here.
1303
1304   The command is followed by one of the keywords
1305
1306   <tscreen><verb>
1307         author
1308         comment
1309         compiler
1310   </verb></tscreen>
1311
1312   a comma and a string. The option is written into the object file
1313   together with the string value. This is currently unidirectional and
1314   there is no way to actually use these options once they are in the
1315   object file.
1316
1317   Examples:
1318
1319   <tscreen><verb>
1320         .fileopt        comment, "Code stolen from my brother"
1321         .fileopt        compiler, "BASIC 2.0"
1322         .fopt           author, "J. R. User"
1323   </verb></tscreen>
1324
1325
1326 <sect1><tt>.FORCEIMPORT</tt><label id=".FORCEIMPORT"><p>
1327
1328   Import an absolute symbol from another module. The command is followed by a
1329   comma separated list of symbols to import. The command is similar to <tt>
1330   <ref id=".IMPORT" name=".IMPORT"></tt>, but the import reference is always
1331   written to the generated object file, even if the symbol is never referenced
1332   (<tt><ref id=".IMPORT" name=".IMPORT"></tt> will not generate import
1333   references for unused symbols).
1334
1335   Example:
1336
1337   <tscreen><verb>
1338         .forceimport    needthisone, needthistoo
1339   </verb></tscreen>
1340
1341   See: <tt><ref id=".IMPORT" name=".IMPORT"></tt>
1342
1343
1344 <sect1><tt>.GLOBAL</tt><label id=".GLOBAL"><p>
1345
1346   Declare symbols as global. Must be followed by a comma separated list of
1347   symbols to declare. Symbols from the list, that are defined somewhere in the
1348   source, are exported, all others are imported. Additional <tt><ref
1349   id=".IMPORT" name=".IMPORT"></tt> or <tt><ref id=".EXPORT"
1350   name=".EXPORT"></tt> commands for the same symbol are allowed.
1351
1352   Example:
1353
1354   <tscreen><verb>
1355         .global foo, bar
1356   </verb></tscreen>
1357
1358
1359 <sect1><tt>.GLOBALZP</tt><label id=".GLOBALZP"><p>
1360
1361   Declare symbols as global. Must be followed by a comma separated list of
1362   symbols to declare. Symbols from the list, that are defined somewhere in the
1363   source, are exported, all others are imported. Additional <tt><ref
1364   id=".IMPORTZP" name=".IMPORTZP"></tt> or <tt><ref id=".EXPORTZP"
1365   name=".EXPORTZP"></tt> commands for the same symbol are allowed. The symbols
1366   in the list are explicitly marked as zero page symols.
1367
1368   Example:
1369
1370   <tscreen><verb>
1371         .globalzp foo, bar
1372   </verb></tscreen>
1373
1374
1375 <sect1><tt>.I16</tt><label id=".I16"><p>
1376
1377   Valid only in 65816 mode. Switch the index registers to 16 bit.
1378
1379   Note: This command will not emit any code, it will tell the assembler to
1380   create 16 bit operands for immediate operands.
1381
1382   See also the <tt><ref id=".I8" name=".I8"></tt> and <tt><ref id=".SMART"
1383   name=".SMART"></tt> commands.
1384
1385
1386 <sect1><tt>.I8</tt><label id=".I8"><p>
1387
1388   Valid only in 65816 mode. Switch the index registers to 8 bit.
1389
1390   Note: This command will not emit any code, it will tell the assembler to
1391   create 8 bit operands for immediate operands.
1392
1393   See also the <tt><ref id=".I16" name=".I16"></tt> and <tt><ref id=".SMART"
1394   name=".SMART"></tt> commands.
1395
1396
1397 <sect1><tt>.IF</tt><label id=".IF"><p>
1398
1399   Conditional assembly: Evalute an expression and switch assembler output
1400   on or off depending on the expression. The expression must be a constant
1401   expression, that is, all operands must be defined.
1402
1403   A expression value of zero evaluates to FALSE, any other value evaluates
1404   to TRUE.
1405
1406
1407 <sect1><tt>.IFBLANK</tt><label id=".IFBLANK"><p>
1408
1409   Conditional assembly: Check if there are any remaining tokens in this line,
1410   and evaluate to FALSE if this is the case, and to TRUE otherwise. If the
1411   condition is not true, further lines are not assembled until an <tt><ref
1412   id=".ELSE" name=".ESLE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
1413   <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
1414
1415   This command is often used to check if a macro parameter was given. Since an
1416   empty macro parameter will evaluate to nothing, the condition will evaluate
1417   to FALSE if an empty parameter was given.
1418
1419   Example:
1420
1421   <tscreen><verb>
1422         .macro     arg1, arg2
1423         .ifblank   arg2
1424                    lda     #arg1
1425         .else
1426                    lda     #arg2
1427         .endif
1428         .endmacro
1429   </verb></tscreen>
1430
1431   See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
1432
1433
1434 <sect1><tt>.IFCONST</tt><label id=".IFCONST"><p>
1435
1436   Conditional assembly: Evaluate an expression and switch assembler output
1437   on or off depending on the constness of the expression.
1438
1439   A const expression evaluates to to TRUE, a non const expression (one
1440   containing an imported or currently undefined symbol) evaluates to
1441   FALSE.
1442
1443   See also: <tt><ref id=".CONST" name=".CONST"></tt>
1444
1445
1446 <sect1><tt>.IFDEF</tt><label id=".IFDEF"><p>
1447
1448   Conditional assembly: Check if a symbol is defined. Must be followed by
1449   a symbol name. The condition is true if the the given symbol is already
1450   defined, and false otherwise.
1451
1452   See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
1453
1454
1455 <sect1><tt>.IFNBLANK</tt><label id=".IFNBLANK"><p>
1456
1457   Conditional assembly: Check if there are any remaining tokens in this line,
1458   and evaluate to TRUE if this is the case, and to FALSE otherwise. If the
1459   condition is not true, further lines are not assembled until an <tt><ref
1460   id=".ELSE" name=".ELSE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
1461   <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
1462
1463   This command is often used to check if a macro parameter was given.
1464   Since an empty macro parameter will evaluate to nothing, the condition
1465   will evaluate to FALSE if an empty parameter was given.
1466
1467   Example:
1468
1469   <tscreen><verb>
1470         .macro     arg1, arg2
1471                    lda     #arg1
1472         .ifnblank  arg2
1473                    lda     #arg2
1474         .endif
1475         .endmacro
1476   </verb></tscreen>
1477
1478   See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
1479
1480
1481 <sect1><tt>.IFNDEF</tt><label id=".IFNDEF"><p>
1482
1483   Conditional assembly: Check if a symbol is defined. Must be followed by
1484   a symbol name. The condition is true if the the given symbol is not
1485   defined, and false otherwise.
1486
1487   See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
1488
1489
1490 <sect1><tt>.IFNREF</tt><label id=".IFNREF"><p>
1491
1492   Conditional assembly: Check if a symbol is referenced. Must be followed
1493   by a symbol name. The condition is true if if the the given symbol was
1494   not referenced before, and false otherwise.
1495
1496   See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
1497
1498
1499 <sect1><tt>.IFP02</tt><label id=".IFP02"><p>
1500
1501   Conditional assembly: Check if the assembler is currently in 6502 mode
1502   (see <tt><ref id=".P02" name=".P02"></tt> command).
1503
1504
1505 <sect1><tt>.IFP816</tt><label id=".IFP816"><p>
1506
1507   Conditional assembly: Check if the assembler is currently in 65816 mode
1508   (see <tt><ref id=".P816" name=".P816"></tt> command).
1509
1510
1511 <sect1><tt>.IFPC02</tt><label id=".IFPC02"><p>
1512
1513   Conditional assembly: Check if the assembler is currently in 65C02 mode
1514   (see <tt><ref id=".PC02" name=".PC02"></tt> command).
1515
1516
1517 <sect1><tt>.IFPSC02</tt><label id=".IFPSC02"><p>
1518
1519   Conditional assembly: Check if the assembler is currently in 65SC02 mode
1520   (see <tt><ref id=".PSC02" name=".PSC02"></tt> command).
1521
1522
1523 <sect1><tt>.IFREF</tt><label id=".IFREF"><p>
1524
1525   Conditional assembly: Check if a symbol is referenced. Must be followed
1526   by a symbol name. The condition is true if if the the given symbol was
1527   referenced before, and false otherwise.
1528
1529   This command may be used to build subroutine libraries in include files
1530   (you may use separate object modules for this purpose too).
1531
1532   Example:
1533
1534   <tscreen><verb>
1535         .ifref  ToHex                   ; If someone used this subroutine
1536         ToHex:  tay                     ; Define subroutine
1537                 lda     HexTab,y
1538                 rts
1539         .endif
1540   </verb></tscreen>
1541
1542   See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
1543
1544
1545 <sect1><tt>.IMPORT</tt><label id=".IMPORT"><p>
1546
1547   Import a symbol from another module. The command is followed by a comma
1548   separated list of symbols to import.
1549
1550   Example:
1551
1552   <tscreen><verb>
1553         .import foo, bar
1554   </verb></tscreen>
1555
1556   See: <tt><ref id=".IMPORTZP" name=".IMPORTZP"></tt>
1557
1558
1559 <sect1><tt>.IMPORTZP</tt><label id=".IMPORTZP"><p>
1560
1561   Import a symbol from another module. The command is followed by a comma
1562   separated list of symbols to import. The symbols are explicitly imported
1563   as zero page symbols (that is, symbols with values in byte range).
1564
1565   Example:
1566
1567   <tscreen><verb>
1568         .importzp       foo, bar
1569   </verb></tscreen>
1570
1571   See: <tt><ref id=".IMPORT" name=".IMPORT"></tt>
1572
1573
1574 <sect1><tt>.INCBIN</tt><label id=".INCBIN"><p>
1575
1576   Include a file as binary data. The command expects a string argument
1577   that is the name of a file to include literally in the current segment.
1578   In addition to that, a start offset and a size value may be specified,
1579   separated by commas. If no size is specified, all of the file from the
1580   start offset to end-of-file is used. If no start position is specified
1581   either, zero is assume (which means that the whole file is inserted).
1582
1583   Example:
1584
1585   <tscreen><verb>
1586         ; Include whole file
1587         .incbin         "sprites.dat"
1588
1589         ; Include file starting at offset 256
1590         .incbin         "music.dat", $100
1591
1592         ; Read 100 bytes starting at offset 200
1593         .incbin         "graphics.dat", 200, 100
1594   </verb></tscreen>
1595
1596
1597 <sect1><tt>.INCLUDE</tt><label id=".INCLUDE"><p>
1598
1599   Include another file. Include files may be nested up to a depth of 16.
1600
1601   Example:
1602
1603   <tscreen><verb>
1604         .include        "subs.inc"
1605   </verb></tscreen>
1606
1607
1608 <sect1><tt>.LEFT</tt><label id=".LEFT"><p>
1609
1610   Builtin function. Extracts the left part of a given token list.
1611
1612   Syntax:
1613
1614   <tscreen><verb>
1615         .LEFT (&lt;int expr&gt;, &lt;token list&gt;)
1616   </verb></tscreen>
1617
1618   The first integer expression gives the number of tokens to extract from
1619   the token list. The second argument is the token list itself.
1620
1621   Example:
1622
1623   To check in a macro if the given argument has a '#' as first token
1624   (immidiate addressing mode), use something like this:
1625
1626   <tscreen><verb>
1627         .macro  ldax    arg
1628                 ...
1629                 .if (.match (.left (1, arg), #))
1630
1631                 ; ldax called with immidiate operand
1632                 ...
1633
1634                 .endif
1635                 ...
1636         .endmacro
1637   </verb></tscreen>
1638
1639   See also the <tt><ref id=".MID" name=".MID"></tt> and <tt><ref id=".RIGHT"
1640   name=".RIGHT"></tt> builtin functions.
1641
1642
1643 <sect1><tt>.LINECONT</tt><label id=".LINECONT"><p>
1644
1645   Switch on or off line continuations using the backslash character
1646   before a newline. The option is off by default.
1647   Note: Line continuations do not work in a comment. A backslash at the
1648   end of a comment is treated as part of the comment and does not trigger
1649   line continuation.
1650   The command must be followed by a '+' or '-' character to switch the
1651   option on or off respectively.
1652
1653   Example:
1654
1655   <tscreen><verb>
1656         .linecont       +               ; Allow line continuations
1657
1658         lda     \
1659                 #$20                    ; This is legal now
1660   </verb></tscreen>
1661
1662
1663 <sect1><tt>.LIST</tt><label id=".LIST"><p>
1664
1665   Enable output to the listing. The command must be followed by a boolean
1666   switch ("on", "off", "+" or "-") and will enable or disable listing
1667   output.
1668   The option has no effect if the listing is not enabled by the command line
1669   switch -l. If -l is used, an internal counter is set to 1. Lines are output
1670   to the listing file, if the counter is greater than zero, and suppressed if
1671   the counter is zero. Each use of <tt/.LIST/ will increment or decrement the
1672   counter.
1673
1674   Example:
1675
1676   <tscreen><verb>
1677         .list   on              ; Enable listing output
1678   </verb></tscreen>
1679
1680
1681 <sect1><tt>.LISTBYTES</tt><label id=".LISTBYTES"><p>
1682
1683   Set, how many bytes are shown in the listing for one source line. The
1684   default is 12, so the listing will show only the first 12 bytes for any
1685   source line that generates more than 12 bytes of code or data.
1686   The directive needs an argument, which is either "unlimited", or an
1687   integer constant in the range 4..255.
1688
1689   Examples:
1690
1691   <tscreen><verb>
1692         .listbytes      unlimited       ; List all bytes
1693         .listbytes      12              ; List the first 12 bytes
1694         .incbin         "data.bin"      ; Include large binary file
1695   </verb></tscreen>
1696
1697
1698 <sect1><tt>.LOCAL</tt><label id=".LOCAL"><p>
1699
1700   This command may only be used inside a macro definition. It declares a
1701   list of identifiers as local to the macro expansion.
1702
1703   A problem when using macros are labels: Since they don't change their name,
1704   you get a "duplicate symbol" error if the macro is expanded the second time.
1705   Labels declared with <tt><ref id=".LOCAL" name=".LOCAL"></tt> have their
1706   name mapped to an internal unique name (<tt/___ABCD__/) with each macro
1707   invocation.
1708
1709   Some other assemblers start a new lexical block inside a macro expansion.
1710   This has some drawbacks however, since that will not allow <em/any/ symbol
1711   to be visible outside a macro, a feature that is sometimes useful. The
1712   <tt><ref id=".LOCAL" name=".LOCAL"></tt> command is in my eyes a better way
1713   to address the problem.
1714
1715   You get an error when using <tt><ref id=".LOCAL" name=".LOCAL"></tt> outside
1716   a macro.
1717
1718
1719 <sect1><tt>.LOCALCHAR</tt><label id=".LOCALCHAR"><p>
1720
1721   Defines the character that start "cheap" local labels. You may use one
1722   of '@' and '?' as start character. The default is '@'.
1723
1724   Cheap local labels are labels that are visible only between two non
1725   cheap labels. This way you can reuse identifiers like "<tt/loop/" without
1726   using explicit lexical nesting.
1727
1728   Example:
1729
1730   <tscreen><verb>
1731         .localchar      '?'
1732
1733         Clear:  lda     #$00            ; Global label
1734         ?Loop:  sta     Mem,y           ; Local label
1735                 dey
1736                 bne     ?Loop           ; Ok
1737                 rts
1738         Sub:    ...                     ; New global label
1739                 bne     ?Loop           ; ERROR: Unknown identifier!
1740   </verb></tscreen>
1741
1742
1743 <sect1><tt>.MACPACK</tt><label id=".MACPACK"><p>
1744
1745   Insert a predefined macro package. The command is followed by an
1746   identifier specifying the macro package to insert. Available macro
1747   packages are:
1748
1749   <tscreen><verb>
1750         generic         Defines generic macros like add and sub.
1751         longbranch      Defines conditional long jump macros.
1752         cbm             Defines the scrcode macro
1753         cpu             Defines constants for the .CPU variable
1754   </verb></tscreen>
1755
1756   Including a macro package twice, or including a macro package that
1757   redefines already existing macros will lead to an error.
1758
1759   Example:
1760
1761   <tscreen><verb>
1762         .macpack        longbranch      ; Include macro package
1763
1764                 cmp     #$20            ; Set condition codes
1765                 jne     Label           ; Jump long on condition
1766   </verb></tscreen>
1767
1768   Macro packages are explained in more detail in section <ref
1769   id="macropackages" name="Macro packages">.
1770
1771
1772 <sect1><tt>.MAC, .MACRO</tt><label id=".MAC"><p>
1773
1774   Start a classic macro definition. The command is followed by an identifier
1775   (the macro name) and optionally by a comma separated list of identifiers
1776   that are macro parameters.
1777
1778   See section <ref id="macros" name="Macros">.
1779
1780
1781 <sect1><tt>.MATCH</tt><label id=".MATCH"><p>
1782
1783   Builtin function. Matches two token lists against each other. This is
1784   most useful within macros, since macros are not stored as strings, but
1785   as lists of tokens.
1786
1787   The syntax is
1788
1789   <tscreen><verb>
1790         .MATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
1791   </verb></tscreen>
1792
1793   Both token list may contain arbitrary tokens with the exception of the
1794   terminator token (comma resp. right parenthesis) and
1795
1796   <itemize>
1797   <item>end-of-line
1798   <item>end-of-file
1799   </itemize>
1800
1801   Often a macro parameter is used for any of the token lists.
1802
1803   Please note that the function does only compare tokens, not token
1804   attributes. So any number is equal to any other number, regardless of the
1805   actual value. The same is true for strings. If you need to compare tokens
1806   <em/and/ token attributes, use the <tt><ref id=".XMATCH"
1807   name=".XMATCH"></tt> function.
1808
1809   Example:
1810
1811   Assume the macro <tt/ASR/, that will shift right the accumulator by one,
1812   while honoring the sign bit. The builtin processor instructions will allow
1813   an optional "A" for accu addressing for instructions like <tt/ROL/ and
1814   <tt/ROR/. We will use the <tt><ref id=".MATCH" name=".MATCH"></tt> function
1815   to check for this and print and error for invalid calls.
1816
1817   <tscreen><verb>
1818         .macro  asr     arg
1819
1820                 .if (.not .blank(arg)) .and (.not .match (arg, a))
1821                 .error "Syntax error"
1822                 .endif
1823
1824                 cmp     #$80            ; Bit 7 into carry
1825                 lsr     a               ; Shift carry into bit 7
1826
1827         .endmacro
1828   </verb></tscreen>
1829
1830   The macro will only accept no arguments, or one argument that must be the
1831   reserved keyword "A".
1832
1833   See: <tt><ref id=".XMATCH" name=".XMATCH"></tt>
1834
1835
1836 <sect1><tt>.MID</tt><label id=".MID"><p>
1837
1838   Builtin function. Takes a starting index, a count and a token list as
1839   arguments. Will return part of the token list.
1840
1841   Syntax:
1842
1843   <tscreen><verb>
1844         .MID (&lt;int expr&gt;, &lt;int expr&gt;, &lt;token list&gt;)
1845   </verb></tscreen>
1846
1847   The first integer expression gives the starting token in the list (the
1848   first token has index 0). The second integer expression gives the number
1849   of tokens to extract from the token list. The third argument is the
1850   token list itself.
1851
1852   Example:
1853
1854   To check in a macro if the given argument has a '<tt/#/' as first token
1855   (immidiate addressing mode), use something like this:
1856
1857     <tscreen><verb>
1858         .macro  ldax    arg
1859                 ...
1860                 .if (.match (.mid (0, 1, arg), #))
1861
1862                 ; ldax called with immidiate operand
1863                 ...
1864
1865                 .endif
1866                 ...
1867         .endmacro
1868   </verb></tscreen>
1869
1870   See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".RIGHT"
1871   name=".RIGHT"></tt> builtin functions.
1872
1873
1874 <sect1><tt>.ORG</tt><label id=".ORG"><p>
1875
1876   Start a section of absolute code. The command is followed by a constant
1877   expression that gives the new PC counter location for which the code is
1878   assembled. Use <tt><ref id=".RELOC" name=".RELOC"></tt> to switch back to
1879   relocatable code.
1880
1881   Please note that you <em/do not need/ this command in most cases. Placing
1882   code at a specific address is the job of the linker, not the assembler, so
1883   there is usually no reason to assemble code to a specific address.
1884
1885   You may not switch segments while inside a section of absolute code.
1886
1887   Example:
1888
1889   <tscreen><verb>
1890         .org    $7FF            ; Emit code starting at $7FF
1891   </verb></tscreen>
1892
1893
1894 <sect1><tt>.OUT</tt><label id=".OUT"><p>
1895
1896   Output a string to the console without producing an error. This command
1897   is similiar to <tt/.ERROR/, however, it does not force an assembler error
1898   that prevents the creation of an object file.
1899
1900   Example:
1901
1902   <tscreen><verb>
1903         .out    "This code was written by the codebuster(tm)"
1904   </verb></tscreen>
1905
1906   See also the <tt><ref id=".WARNING" name=".WARNING"></tt> and <tt><ref
1907   id=".ERROR" name=".ERROR"></tt> directives.
1908
1909
1910 <sect1><tt>.P02</tt><label id=".P02"><p>
1911
1912   Enable the 6502 instruction set, disable 65SC02, 65C02 and 65816
1913   instructions. This is the default if not overridden by the
1914   <tt><ref id="option--cpu" name="--cpu"></tt> command line option.
1915
1916   See: <tt><ref id=".PC02" name=".PC02"></tt>, <tt><ref id=".PSC02"
1917   name=".PSC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
1918
1919
1920 <sect1><tt>.P816</tt><label id=".P816"><p>
1921
1922   Enable the 65816 instruction set. This is a superset of the 65SC02 and
1923   6502 instruction sets.
1924
1925   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
1926   name=".PSC02"></tt> and <tt><ref id=".PC02" name=".PC02"></tt>
1927
1928
1929 <sect1><tt>.PAGELEN, .PAGELENGTH</tt><label id=".PAGELENGTH"><p>
1930
1931   Set the page length for the listing. Must be followed by an integer
1932   constant. The value may be "unlimited", or in the range 32 to 127. The
1933   statement has no effect if no listing is generated. The default value is -1
1934   (unlimited) but may be overridden by the <tt/--pagelength/ command line
1935   option. Beware: Since ca65 is a one pass assembler, the listing is generated
1936   after assembly is complete, you cannot use multiple line lengths with one
1937   source. Instead, the value set with the last <tt/.PAGELENGTH/ is used.
1938
1939   Examples:
1940
1941   <tscreen><verb>
1942         .pagelength     66              ; Use 66 lines per listing page
1943
1944         .pagelength     unlimited       ; Unlimited page length
1945   </verb></tscreen>
1946
1947
1948 <sect1><tt>.PARAMCOUNT</tt><label id=".PARAMCOUNT"><p>
1949
1950   This builtin pseudo variable is only available in macros. It is replaced by
1951   the actual number of parameters that were given in the macro invocation.
1952
1953   Example:
1954
1955   <tscreen><verb>
1956         .macro  foo     arg1, arg2, arg3
1957         .if     .paramcount <> 3
1958         .error  "Too few parameters for macro foo"
1959         .endif
1960         ...
1961         .endmacro
1962   </verb></tscreen>
1963
1964   See section <ref id="macros" name="Macros">.
1965
1966
1967 <sect1><tt>.PC02</tt><label id=".PC02"><p>
1968
1969   Enable the 65C02 instructions set. This instruction set includes all
1970   6502 and 65SC02 instructions.
1971
1972   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
1973   name=".PSC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
1974
1975
1976 <sect1><tt>.POPSEG</tt><label id=".POPSEG"><p>
1977
1978   Pop the last pushed segment from the stack, and set it.
1979
1980   This command will switch back to the segment that was last pushed onto the
1981   segment stack using the <tt><ref id=".PUSHSEG" name=".PUSHSEG"></tt>
1982   command, and remove this entry from the stack.
1983
1984   The assembler will print an error message if the segment stack is empty
1985   when this command is issued.
1986
1987   See: <tt><ref id=".PUSHSEG" name=".PUSHSEG"></tt>
1988
1989
1990 <sect1><tt>.PROC</tt><label id=".PROC"><p>
1991
1992   Start a nested lexical level. All new symbols from now on are in the local
1993   lexical level and are not accessible from outside. Symbols defined outside
1994   this local level may be accessed as long as their names are not used for new
1995   symbols inside the level. Symbols names in other lexical levels do not
1996   clash, so you may use the same names for identifiers. The lexical level ends
1997   when the <tt><ref id=".ENDPROC" name=".ENDPROC"></tt> command is read.
1998   Lexical levels may be nested up to a depth of 16.
1999
2000   The command may be followed by an identifier, in this case the
2001   identifier is declared in the outer level as a label having the value of
2002   the program counter at the start of the lexical level.
2003
2004   Note: Macro names are always in the global level and in a separate name
2005   space. There is no special reason for this, it's just that I've never
2006   had any need for local macro definitions.
2007
2008   Example:
2009
2010   <tscreen><verb>
2011         .proc   Clear           ; Define Clear subroutine, start new level
2012                 lda     #$00
2013         L1:     sta     Mem,y   ; L1 is local and does not cause a
2014                                 ; duplicate symbol error if used in other
2015                                 ; places
2016                 dey
2017                 bne     L1      ; Reference local symbol
2018                 rts
2019         .endproc                ; Leave lexical level
2020   </verb></tscreen>
2021
2022   See: <tt><ref id=".ENDPROC" name=".ENDPROC"></tt>
2023
2024
2025 <sect1><tt>.PSC02</tt><label id=".PSC02"><p>
2026
2027   Enable the 65SC02 instructions set. This instruction set includes all
2028   6502 instructions.
2029
2030   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PC02"
2031   name=".PC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
2032
2033
2034 <sect1><tt>.PUSHSEG</tt><label id=".PUSHSEG"><p>
2035
2036   Push the currently active segment onto a stack. The entries on the stack
2037   include the name of the segment and the segment type. The stack has a size
2038   of 16 entries.
2039
2040   <tt/.PUSHSEG/ allows together with <tt><ref id=".POPSEG" name=".POPSEG"></tt>
2041   to switch to another segment and to restore the old segment later, without
2042   even knowing the name and type of the current segment.
2043
2044   The assembler will print an error message if the segment stack is already
2045   full, when this command is issued.
2046
2047   See: <tt><ref id=".POPSEG" name=".POPSEG"></tt>
2048
2049
2050 <sect1><tt>.REF, .REFERENCED</tt><label id=".REFERENCED"><p>
2051
2052   Builtin function. The function expects an identifier as argument in braces.
2053   The argument is evaluated, and the function yields "true" if the identifier
2054   is a symbol that has already been referenced somewhere in the source file up
2055   to the current position. Otherwise the function yields false. As an example,
2056   the <tt><ref id=".IFREF" name=".IFREF"></tt> statement may be replaced by
2057
2058   <tscreen><verb>
2059         .if     .referenced(a)
2060   </verb></tscreen>
2061
2062   See: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
2063
2064
2065 <sect1><tt>.REPEAT</tt><label id=".REPEAT"><p>
2066
2067   Repeat all commands between <tt/.REPEAT/ and <tt><ref id=".ENDREPEAT"
2068   name=".ENDREPEAT"></tt> constant number of times. The command is followed by
2069   a constant expression that tells how many times the commands in the body
2070   should get repeated. Optionally, a comma and an identifier may be specified.
2071   If this identifier is found in the body of the repeat statement, it is
2072   replaced by the current repeat count (starting with zero for the first time
2073   the body is repeated).
2074
2075   <tt/.REPEAT/ statements may be nested. If you use the same repeat count
2076   identifier for a nested <tt/.REPEAT/ statement, the one from the inner
2077   level will be used, not the one from the outer level.
2078
2079   Example:
2080
2081   The following macro will emit a string that is "encrypted" in that all
2082   characters of the string are XORed by the value $55.
2083
2084   <tscreen><verb>
2085         .macro  Crypt   Arg
2086                 .repeat .strlen(Arg), I
2087                 .byte   .strat(Arg, I) .xor $55
2088                 .endrep
2089         .endmacro
2090   </verb></tscreen>
2091
2092   See: <tt><ref id=".ENDREPEAT" name=".ENDREPEAT"></tt>
2093
2094
2095 <sect1><tt>.RELOC</tt><label id=".RELOC"><p>
2096
2097   Switch back to relocatable mode. See the <tt><ref id=".ORG"
2098   name=".ORG"></tt> command.
2099
2100
2101 <sect1><tt>.RES</tt><label id=".RES"><p>
2102
2103   Reserve storage. The command is followed by one or two constant
2104   expressions. The first one is mandatory and defines, how many bytes of
2105   storage should be defined. The second, optional expression must by a
2106   constant byte value that will be used as value of the data. If there
2107   is no fill value given, the linker will use the value defined in the
2108   linker configuration file (default: zero).
2109
2110   Example:
2111
2112   <tscreen><verb>
2113         ; Reserve 12 bytes of memory with value $AA
2114         .res    12, $AA
2115   </verb></tscreen>
2116
2117
2118 <sect1><tt>.RIGHT</tt><label id=".RIGHT"><p>
2119
2120   Builtin function. Extracts the right part of a given token list.
2121
2122   Syntax:
2123
2124   <tscreen><verb>
2125         .RIGHT (&lt;int expr&gt;, &lt;token list&gt;)
2126   </verb></tscreen>
2127
2128   The first integer expression gives the number of tokens to extract from
2129   the token list. The second argument is the token list itself.
2130
2131   See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".MID"
2132   name=".MID"></tt> builtin functions.
2133
2134
2135 <sect1><tt>.RODATA</tt><label id=".RODATA"><p>
2136
2137   Switch to the RODATA segment. The name of the RODATA segment is always
2138   "RODATA", so this is a shortcut for
2139
2140   <tscreen><verb>
2141         .segment  "RODATA"
2142   </verb></tscreen>
2143
2144   The RODATA segment is a segment that is used by the compiler for
2145   readonly data like string constants.
2146
2147   See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
2148
2149
2150 <sect1><tt>.SEGMENT</tt><label id=".SEGMENT"><p>
2151
2152   Switch to another segment. Code and data is always emitted into a
2153   segment, that is, a named section of data. The default segment is
2154   "CODE". There may be up to 254 different segments per object file
2155   (and up to 65534 per executable). There are shortcut commands for
2156   the most common segments ("CODE", "DATA" and "BSS").
2157
2158   The command is followed by a string containing the segment name (there
2159   are some constraints for the name - as a rule of thumb use only those
2160   segment names that would also be valid identifiers). There may also be
2161   an optional attribute separated by a comma. Valid attributes are
2162   "<tt/zeropage/" and "<tt/absolute/".
2163
2164   When specifying a segment for the first time, "absolute" is the
2165   default. For all other uses, the attribute specified the first time
2166   is the default.
2167
2168   "absolute" means that this is a segment with absolute addressing. That
2169   is, the segment will reside somewhere in core memory outside the zero
2170   page. "zeropage" means the opposite: The segment will be placed in the
2171   zero page and direct (short) addressing is possible for data in this
2172   segment.
2173
2174   Beware: Only labels in a segment with the zeropage attribute are marked
2175   as reachable by short addressing. The `*' (PC counter) operator will
2176   work as in other segments and will create absolute variable values.
2177
2178   Example:
2179
2180   <tscreen><verb>
2181         .segment "ROM2"                 ; Switch to ROM2 segment
2182         .segment "ZP2", zeropage        ; New direct segment
2183         .segment "ZP2"                  ; Ok, will use last attribute
2184         .segment "ZP2", absolute        ; Error, redecl mismatch
2185   </verb></tscreen>
2186
2187   See: <tt><ref id=".BSS" name=".BSS"></tt>, <tt><ref id=".CODE"
2188   name=".CODE"></tt>, <tt><ref id=".DATA" name=".DATA"></tt> and <tt><ref
2189   id=".RODATA" name=".RODATA"></tt>
2190
2191
2192 <sect1><tt>.SETCPU</tt><label id=".SETCPU"><p>
2193
2194   Switch the CPU instruction set. The command is followed by a string that
2195   specifies the CPU. Possible values are those that can also be supplied to
2196   the <tt><ref id="option--cpu" name="--cpu"></tt> command line option,
2197   namely: 6502, 65SC02, 65C02, 65816 and sunplus. Please note that support
2198   for the sunplus CPU is not available in the freeware version, because the
2199   instruction set of the sunplus CPU is "proprietary and confidential".
2200
2201   See: <tt><ref id=".CPU" name=".CPU"></tt>,
2202        <tt><ref id=".IFP02" name=".IFP02"></tt>,
2203        <tt><ref id=".IFP816" name=".IFP816"></tt>,
2204        <tt><ref id=".IFPC02" name=".IFPC02"></tt>,
2205        <tt><ref id=".IFPSC02" name=".IFPSC02"></tt>,
2206        <tt><ref id=".P02" name=".P02"></tt>,
2207        <tt><ref id=".P816" name=".P816"></tt>,
2208        <tt><ref id=".PC02" name=".PC02"></tt>,
2209        <tt><ref id=".PSC02" name=".PSC02"></tt>
2210
2211
2212 <sect1><tt>.SMART</tt><label id=".SMART"><p>
2213
2214   Switch on or off smart mode. The command must be followed by a '+' or
2215   '-' character to switch the option on or off respectively. The default
2216   is off (that is, the assembler doesn't try to be smart), but this
2217   default may be changed by the -s switch on the command line.
2218
2219   In smart mode the assembler will track usage of the <tt/REP/ and <tt/SEP/
2220   instructions in 65816 mode and update the operand sizes accordingly. If
2221   the operand of such an instruction cannot be evaluated by the assembler
2222   (for example, because the operand is an imported symbol), a warning is
2223   issued. Beware: Since the assembler cannot trace the execution flow this
2224   may lead to false results in some cases. If in doubt, use the <tt/.Inn/ and
2225   <tt/.Ann/ instructions to tell the assembler about the current settings.
2226
2227   Example:
2228
2229   <tscreen><verb>
2230         .smart                          ; Be smart
2231         .smart  -                       ; Stop being smart
2232   </verb></tscreen>
2233
2234
2235 <sect1><tt>.STRAT</tt><label id=".STRAT"><p>
2236
2237   Builtin function. The function accepts a string and an index as
2238   arguments and returns the value of the character at the given position
2239   as an integer value. The index is zero based.
2240
2241   Example:
2242
2243   <tscreen><verb>
2244         .macro  M       Arg
2245                 ; Check if the argument string starts with '#'
2246                 .if (.strat (Arg, 0) = '#')
2247                 ...
2248                 .endif
2249         .endmacro
2250   </verb></tscreen>
2251
2252
2253 <sect1><tt>.STRING</tt><label id=".STRING"><p>
2254
2255   Builtin function. The function accepts an argument in braces and converts
2256   this argument into a string constant. The argument may be an identifier, or
2257   a constant numeric value.
2258
2259   Since you can use a string in the first place, the use of the function may
2260   not be obvious. However, it is useful in macros, or more complex setups.
2261
2262   Example:
2263
2264   <tscreen><verb>
2265         ; Emulate other assemblers:
2266         .macro  section name
2267                 .segment        .string(name)
2268         .endmacro
2269   </verb></tscreen>
2270
2271
2272 <sect1><tt>.STRLEN</tt><label id=".STRLEN"><p>
2273
2274   Builtin function. The function accepts a string argument in braces and
2275   eveluates to the length of the string.
2276
2277   Example:
2278
2279   The following macro encodes a string as a pascal style string with
2280   a leading length byte.
2281
2282   <tscreen><verb>
2283         .macro  PString Arg
2284                 .byte   .strlen(Arg), Arg
2285         .endmacro
2286   </verb></tscreen>
2287
2288
2289 <sect1><tt>.SUNPLUS</tt><label id=".SUNPLUS"><p>
2290
2291   Enable the SunPlus instructions set. This command will not work in the
2292   freeware version of the assembler, because the instruction set is
2293   "proprietary and confidential".
2294
2295   See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
2296   name=".PSC02"></tt>, <tt><ref id=".PC02" name=".PC02"></tt>, and
2297   <tt><ref id=".P816" name=".P816"></tt>
2298
2299
2300 <sect1><tt>.TCOUNT</tt><label id=".TCOUNT"><p>
2301
2302   Builtin function. The function accepts a token list in braces. The
2303   function result is the number of tokens given as argument.
2304
2305   Example:
2306
2307   The <tt/ldax/ macro accepts the '#' token to denote immidiate addressing (as
2308   with the normal 6502 instructions). To translate it into two separate 8 bit
2309   load instructions, the '#' token has to get stripped from the argument:
2310
2311   <tscreen><verb>
2312         .macro  ldax    arg
2313                 .if (.match (.mid (0, 1, arg), #))
2314                 ; ldax called with immidiate operand
2315                 lda     #<(.right (.tcount (arg)-1, arg))
2316                 ldx     #>(.right (.tcount (arg)-1, arg))
2317                 .else
2318                 ...
2319                 .endif
2320         .endmacro
2321   </verb></tscreen>
2322
2323
2324 <sect1><tt>.TIME</tt><label id=".TIME"><p>
2325
2326   Reading this pseudo variable will give a constant integer value that
2327   represents the current time in POSIX standard (as seconds since the
2328   Epoch).
2329
2330   It may be used to encode the time of translation somewhere in the created
2331   code.
2332
2333   Example:
2334
2335   <tscreen><verb>
2336         .dword  .time   ; Place time here
2337   </verb></tscreen>
2338
2339
2340 <sect1><tt>.VERSION</tt><label id=".VERSION"><p>
2341
2342   Reading this pseudo variable will give the assembler version according to
2343   the following formula:
2344
2345         VER_MAJOR*$100 + VER_MINOR*$10 + VER_PATCH
2346
2347   It may be used to encode the assembler version or check the assembler for
2348   special features not available with older versions.
2349
2350   Example:
2351
2352   Version 2.11.1 of the assembler will return $2B1 as numerical constant when
2353   reading the pseudo variable <tt/.VERSION/.
2354
2355
2356 <sect1><tt>.WARNING</tt><label id=".WARNING"><p>
2357
2358   Force an assembly warning. The assembler will output a warning message
2359   preceeded by "User warning". This warning will always be output, even if
2360   other warnings are disabled with the <tt><ref id="option-W" name="-W0"></tt>
2361   command line option.
2362
2363   This command may be used to output possible problems when assembling
2364   the source file.
2365
2366   Example:
2367
2368   <tscreen><verb>
2369         .macro  jne     target
2370                 .local L1
2371                 .ifndef target
2372                 .warning "Forward jump in jne, cannot optimize!"
2373                 beq     L1
2374                 jmp     target
2375         L1:
2376                 .else
2377                 ...
2378                 .endif
2379         .endmacro
2380   </verb></tscreen>
2381
2382   See also the <tt><ref id=".ERROR" name=".ERROR"></tt> and <tt><ref id=".OUT"
2383   name=".OUT"></tt> directives.
2384
2385
2386 <sect1><tt>.WORD</tt><label id=".WORD"><p>
2387
2388   Define word sized data. Must be followed by a sequence of (word ranged,
2389   but not necessarily constant) expressions.
2390
2391   Example:
2392
2393   <tscreen><verb>
2394         .word   $0D00, $AF13, _Clear
2395   </verb></tscreen>
2396
2397
2398 <sect1><tt>.XMATCH</tt><label id=".XMATCH"><p>
2399
2400   Builtin function. Matches two token lists against each other. This is
2401   most useful within macros, since macros are not stored as strings, but
2402   as lists of tokens.
2403
2404   The syntax is
2405
2406   <tscreen><verb>
2407         .XMATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
2408   </verb></tscreen>
2409
2410   Both token list may contain arbitrary tokens with the exception of the
2411   terminator token (comma resp. right parenthesis) and
2412
2413   <itemize>
2414   <item>end-of-line
2415   <item>end-of-file
2416   </itemize>
2417
2418   Often a macro parameter is used for any of the token lists.
2419
2420   The function compares tokens <em/and/ token values. If you need a function
2421   that just compares the type of tokens, have a look at the <tt><ref
2422   id=".MATCH" name=".MATCH"></tt> function.
2423
2424   See: <tt><ref id=".MATCH" name=".MATCH"></tt>
2425
2426
2427 <sect1><tt>.ZEROPAGE</tt><label id=".ZEROPAGE"><p>
2428
2429   Switch to the ZEROPAGE segment and mark it as direct (zeropage) segment.
2430   The name of the ZEROPAGE segment is always "ZEROPAGE", so this is a
2431   shortcut for
2432
2433   <tscreen><verb>
2434         .segment  "ZEROPAGE", zeropage
2435   </verb></tscreen>
2436
2437   Because of the "zeropage" attribute, labels declared in this segment are
2438   addressed using direct addressing mode if possible. You <em/must/ instruct
2439   the linker to place this segment somewhere in the address range 0..$FF
2440   otherwise you will get errors.
2441
2442   See: <tt><ref id=".SEGMENT" name=".SEGMENT"></tt>
2443
2444
2445
2446 <sect>Macros<label id="macros"><p>
2447
2448
2449 <sect1>Introduction<p>
2450
2451 Macros may be thought of as "parametrized super instructions". Macros are
2452 sequences of tokens that have a name. If that name is used in the source
2453 file, the macro is "expanded", that is, it is replaced by the tokens that
2454 were specified when the macro was defined.
2455
2456
2457 <sect1>Macros without parameters<p>
2458
2459 In it's simplest form, a macro does not have parameters. Here's an
2460 example:
2461
2462 <tscreen><verb>
2463         .macro  asr             ; Arithmetic shift right
2464                 cmp     #$80    ; Put bit 7 into carry
2465                 ror             ; Rotate right with carry
2466         .endmacro
2467 </verb></tscreen>
2468
2469 The macro above consists of two real instructions, that are inserted into
2470 the code, whenever the macro is expanded. Macro expansion is simply done
2471 by using the name, like this:
2472
2473 <tscreen><verb>
2474         lda     $2010
2475         asr
2476         sta     $2010
2477 </verb></tscreen>
2478
2479
2480 <sect1>Parametrized macros<p>
2481
2482 When using macro parameters, macros can be even more useful:
2483
2484 <tscreen><verb>
2485         .macro  inc16   addr
2486                 clc
2487                 lda     addr
2488                 adc     #$01
2489                 sta     addr
2490                 lda     addr+1
2491                 adc     #$00
2492                 sta     addr+1
2493         .endmacro
2494 </verb></tscreen>
2495
2496 When calling the macro, you may give a parameter, and each occurence of
2497 the name "addr" in the macro definition will be replaced by the given
2498 parameter. So
2499
2500 <tscreen><verb>
2501         inc16   $1000
2502 </verb></tscreen>
2503
2504 will be expanded to
2505
2506 <tscreen><verb>
2507                 clc
2508                 lda     $1000
2509                 adc     #$01
2510                 sta     $1000
2511                 lda     $1000+1
2512                 adc     #$00
2513                 sta     $1000+1
2514 </verb></tscreen>
2515
2516 A macro may have more than one parameter, in this case, the parameters
2517 are separated by commas. You are free to give less parameters than the
2518 macro actually takes in the definition. You may also leave intermediate
2519 parameters empty. Empty parameters are replaced by empty space (that is,
2520 they are removed when the macro is exanded). If you have a look at our
2521 macro definition above, you will see, that replacing the "addr" parameter
2522 by nothing will lead to wrong code in most lines. To help you, writing
2523 macros with a variable parameter list, there are some control commands:
2524
2525 <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> tests the rest of the line and
2526 returns true, if there are any tokens on the remainder of the line. Since
2527 empty parameters are replaced by nothing, this may be used to test if a given
2528 parameter is empty. <tt><ref id=".IFNBLANK" name=".IFNBLANK"></tt> tests the
2529 opposite.
2530
2531 Look at this example:
2532
2533 <tscreen><verb>
2534         .macro  ldaxy   a, x, y
2535         .ifnblank       a
2536                 lda     #a
2537         .endif
2538         .ifnblank       x
2539                 ldx     #x
2540         .endif
2541         .ifnblank       y
2542                 ldy     #y
2543         .endif
2544         .endmacro
2545 </verb></tscreen>
2546
2547 This macro may be called as follows:
2548
2549 <tscreen><verb>
2550         ldaxy   1, 2, 3         ; Load all three registers
2551
2552         ldaxy   1, , 3          ; Load only a and y
2553
2554         ldaxy   , , 3           ; Load y only
2555 </verb></tscreen>
2556
2557 There's another helper command for determining, which macro parameters are
2558 valid: <tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt> This command is
2559 replaced by the parameter count given, <em/including/ intermediate empty macro
2560 parameters:
2561
2562 <tscreen><verb>
2563         ldaxy   1               ; .PARAMCOUNT = 1
2564         ldaxy   1,,3            ; .PARAMCOUNT = 3
2565         ldaxy   1,2             ; .PARAMCOUNT = 2
2566         ldaxy   1,              ; .PARAMCOUNT = 2
2567         ldaxy   1,2,3           ; .PARAMCOUNT = 3
2568 </verb></tscreen>
2569
2570
2571 <sect1>Recursive macros<p>
2572
2573 Macros may be used recursively:
2574
2575 <tscreen><verb>
2576         .macro  push    r1, r2, r3
2577                 lda     r1
2578                 pha
2579         .if     .paramcount > 1
2580                 push    r2, r3
2581         .endif
2582         .endmacro
2583 </verb></tscreen>
2584
2585 There's also a special macro to help writing recursive macros: <tt><ref
2586 id=".EXITMACRO" name=".EXITMACRO"></tt> This command will stop macro expansion
2587 immidiately:
2588
2589 <tscreen><verb>
2590         .macro  push    r1, r2, r3, r4, r5, r6, r7
2591         .ifblank        r1
2592                 ; First parameter is empty
2593                 .exitmacro
2594         .else
2595                 lda     r1
2596                 pha
2597         .endif
2598                 push    r2, r3, r4, r5, r6, r7
2599         .endmacro
2600 </verb></tscreen>
2601
2602 When expanding this macro, the expansion will push all given parameters
2603 until an empty one is encountered. The macro may be called like this:
2604
2605 <tscreen><verb>
2606         push    $20, $21, $32           ; Push 3 ZP locations
2607         push    $21                     ; Push one ZP location
2608 </verb></tscreen>
2609
2610
2611 <sect1>Local symbols inside macros<p>
2612
2613 Now, with recursive macros, <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> and
2614 <tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt>, what else do you need?
2615 Have a look at the inc16 macro above. Here is it again:
2616
2617 <tscreen><verb>
2618         .macro  inc16   addr
2619                 clc
2620                 lda     addr
2621                 adc     #$01
2622                 sta     addr
2623                 lda     addr+1
2624                 adc     #$00
2625                 sta     addr+1
2626         .endmacro
2627 </verb></tscreen>
2628
2629 If you have a closer look at the code, you will notice, that it could be
2630 written more efficiently, like this:
2631
2632 <tscreen><verb>
2633         .macro  inc16   addr
2634                 inc     addr
2635                 bne     Skip
2636                 inc     addr+1
2637         Skip:
2638         .endmacro
2639 </verb></tscreen>
2640
2641 But imagine what happens, if you use this macro twice? Since the label
2642 "Skip" has the same name both times, you get a "duplicate symbol" error.
2643 Without a way to circumvent this problem, macros are not as useful, as
2644 they could be. One solution is, to start a new lexical block inside the
2645 macro:
2646
2647 <tscreen><verb>
2648         .macro  inc16   addr
2649         .proc
2650                 inc     addr
2651                 bne     Skip
2652                 inc     addr+1
2653         Skip:
2654         .endproc
2655         .endmacro
2656 </verb></tscreen>
2657
2658 Now the label is local to the block and not visible outside. However,
2659 sometimes you want a label inside the macro to be visible outside. To make
2660 that possible, there's a new command that's only usable inside a macro
2661 definition: <tt><ref id=".LOCAL" name=".LOCAL"></tt>. <tt/.LOCAL/ declares one
2662 or more symbols as local to the macro expansion. The names of local variables
2663 are replaced by a unique name in each separate macro expansion. So we could
2664 also solve the problem above by using <tt/.LOCAL/:
2665
2666 <tscreen><verb>
2667         .macro  inc16   addr
2668                 .local  Skip            ; Make Skip a local symbol
2669                 clc
2670                 lda     addr
2671                 adc     #$01
2672                 sta     addr
2673                 bcc     Skip
2674                 inc     addr+1
2675         Skip:                           ; Not visible outside
2676         .endmacro
2677 </verb></tscreen>
2678
2679
2680 <sect1>C style macros<p>
2681
2682 Starting with version 2.5 of the assembler, there is a second macro type
2683 available: C style macros using the <tt/.DEFINE/ directive. These macros are
2684 similar to the classic macro type described above, but behaviour is sometimes
2685 different:
2686
2687 <itemize>
2688
2689 <item>  Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> may not
2690         span more than a line. You may use line continuation (see <tt><ref
2691         id=".LINECONT" name=".LINECONT"></tt>) to spread the definition over
2692         more than one line for increased readability, but the macro itself
2693         may not contain an end-of-line token.
2694
2695 <item>  Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> share
2696         the name space with classic macros, but they are detected and replaced
2697         at the scanner level. While classic macros may be used in every place,
2698         where a mnemonic or other directive is allowed, <tt><ref id=".DEFINE"
2699         name=".DEFINE"></tt> style macros are allowed anywhere in a line. So
2700         they are more versatile in some situations.
2701
2702 <item>  <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may take
2703         parameters. While classic macros may have empty parameters, this is
2704         not true for <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros.
2705         For this macro type, the number of actual parameters must match
2706         exactly the number of formal parameters.
2707
2708         To make this possible, formal parameters are enclosed in braces when
2709         defining the macro. If there are no parameters, the empty braces may
2710         be omitted.
2711
2712 <item>  Since <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may not
2713         contain end-of-line tokens, there are things that cannot be done. They
2714         may not contain several processor instructions for example. So, while
2715         some things may be done with both macro types, each type has special
2716         usages. The types complement each other.
2717
2718 </itemize>
2719
2720 Let's look at a few examples to make the advantages and disadvantages
2721 clear.
2722
2723 To emulate assemblers that use "<tt/EQU/" instead of "<tt/=/" you may use the
2724 following <tt/.DEFINE/:
2725
2726 <tscreen><verb>
2727         .define EQU     =
2728
2729         foo     EQU     $1234           ; This is accepted now
2730 </verb></tscreen>
2731
2732 You may use the directive to define string constants used elsewhere:
2733
2734 <tscreen><verb>
2735         ; Define the version number
2736         .define VERSION         "12.3a"
2737
2738         ; ... and use it
2739         .asciiz VERSION
2740 </verb></tscreen>
2741
2742 Macros with parameters may also be useful:
2743
2744 <tscreen><verb>
2745         .define DEBUG(message)  .out    message
2746
2747         DEBUG   "Assembling include file #3"
2748 </verb></tscreen>
2749
2750 Note that, while formal parameters have to be placed in braces, this is
2751 not true for the actual parameters. Beware: Since the assembler cannot
2752 detect the end of one parameter, only the first token is used. If you
2753 don't like that, use classic macros instead:
2754
2755 <tscreen><verb>
2756         .macro  message
2757                 .out    message
2758         .endmacro
2759 </verb></tscreen>
2760
2761 (This is an example where a problem can be solved with both macro types).
2762
2763
2764 <sect1>Characters in macros<p>
2765
2766 When using the <ref id="option-t" name="-t"> option, characters are translated
2767 into the target character set of the specific machine. However, this happens
2768 as late as possible. This means that strings are translated if they are part
2769 of a <tt><ref id=".BYTE" name=".BYTE"></tt> or <tt><ref id=".ASCIIZ"
2770 name=".ASCIIZ"></tt> command. Characters are translated as soon as they are
2771 used as part of an expression.
2772
2773 This behaviour is very intuitive outside of macros but may be confusing when
2774 doing more complex macros. If you compare characters against numeric values,
2775 be sure to take the translation into account.
2776
2777
2778
2779
2780 <sect>Macro packages<label id="macropackages"><p>
2781
2782 Using the <tt><ref id=".MACPACK" name=".MACPACK"></tt> directive, predefined
2783 macro packages may be included with just one command. Available macro packages
2784 are:
2785
2786
2787 <sect1><tt>.MACPACK generic</tt><p>
2788
2789 This macro package defines macros that are useful in almost any program.
2790 Currently, two macros are defined:
2791
2792 <tscreen><verb>
2793         .macro  add     Arg
2794                 clc
2795                 adc     Arg
2796         .endmacro
2797
2798         .macro  sub     Arg
2799                 sec
2800                 sbc     Arg
2801         .endmacro
2802 </verb></tscreen>
2803
2804
2805 <sect1><tt>.MACPACK longbranch</tt><p>
2806
2807 This macro package defines long conditional jumps. They are named like the
2808 short counterpart but with the 'b' replaced by a 'j'. Here is a sample
2809 definition for the "<tt/jeq/" macro, the other macros are built using the same
2810 scheme:
2811
2812 <tscreen><verb>
2813         .macro  jeq     Target
2814                 .if     .def(Target) .and ((*+2)-(Target) <= 127)
2815                 beq     Target
2816                 .else
2817                 bne     *+5
2818                 jmp     Target
2819                 .endif
2820         .endmacro
2821 </verb></tscreen>
2822
2823 All macros expand to a short branch, if the label is already defined (back
2824 jump) and is reachable with a short jump. Otherwise the macro expands to a
2825 conditional branch with the branch condition inverted, followed by an absolute
2826 jump to the actual branch target.
2827
2828 The package defines the following macros:
2829
2830 <tscreen><verb>
2831         jeq, jne, jmi, jpl, jcs, jcc, jvs, jvc
2832 </verb></tscreen>
2833
2834
2835
2836 <sect1><tt>.MACPACK cbm</tt><p>
2837
2838 The cbm macro package will define a macro named <tt/scrcode/. It takes a
2839 string as argument and places this string into memory translated into screen
2840 codes.
2841
2842
2843 <sect1><tt>.MACPACK cpu</tt><p>
2844
2845 This macro package does not define any macros but constants used to examine
2846 the value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable. For
2847 each supported CPU a constant similar to
2848
2849 <tscreen><verb>
2850     CPU_6502
2851     CPU_65SC02
2852     CPU_65C02
2853     CPU_65816
2854     CPU_SUNPLUS
2855 </verb></tscreen>
2856
2857 is defined. These constants may be used to determine the exact type of the
2858 currently enabled CPU. In addition to that, for each CPU instruction set,
2859 another constant is defined:
2860
2861 <tscreen><verb>
2862     CPU_ISET_6502
2863     CPU_ISET_65SC02
2864     CPU_ISET_65C02
2865     CPU_ISET_65816
2866     CPU_ISET_SUNPLUS
2867 </verb></tscreen>
2868
2869 The value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable may
2870 be checked with <tt/<ref id="operators" name=".BITAND">/ to determine if the
2871 currently enabled CPU supports a specific instruction set. For example the
2872 65C02 supports all instructions of the 65SC02 CPU, so it has the
2873 <tt/CPU_ISET_65SC02/ bit set in addition to its native <tt/CPU_ISET_65C02/
2874 bit. Using
2875
2876 <tscreen><verb>
2877         .if (.cpu .bitand CPU_ISET_65SC02)
2878                 lda     (sp)
2879         .else
2880                 ldy     #$00
2881                 lda     (sp),y
2882         .endif
2883 </verb></tscreen>
2884
2885 it is possible to determine if the
2886
2887 <tscreen><verb>
2888                 lda     (sp)
2889 </verb></tscreen>
2890
2891 instruction is supported, which is the case for the 65SC02, 65C02 and 65816
2892 CPUs (the latter two are upwards compatible to the 65SC02).
2893
2894
2895
2896 <sect>Module constructors/destructors<label id="condes"><p>
2897
2898 <em>Note:</em> This section applies mostly to C programs, so the explanation
2899 below uses examples from the C libraries. However, the feature may also be
2900 useful for assembler programs.
2901
2902
2903 <sect1>Module overview<p>
2904
2905 Using the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
2906 id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> keywords it it possible to export
2907 functions in a special way. The linker is able to generate tables with all
2908 functions of a specific type. Such a table will <em>only</em> include symbols
2909 from object files that are linked into a specific executable. This may be used
2910 to add initialization and cleanup code for library modules.
2911
2912 The C heap functions are an example where module initialization code is used.
2913 All heap functions (<tt>malloc</tt>, <tt>free</tt>, ...) work with a few
2914 variables that contain the start and the end of the heap, pointers to the free
2915 list and so on. Since the end of the heap depends on the size and start of the
2916 stack, it must be initialized at runtime. However, initializing these
2917 variables for programs that do not use the heap are a waste of time and
2918 memory.
2919
2920 So the central module defines a function that contains initialization code and
2921 exports this function using the <tt/.CONSTRUCTOR/ statement. If (and only if)
2922 this module is added to an executable by the linker, the initialization
2923 function will be placed into the table of constructors by the linker. The C
2924 startup code will call all constructors before <tt/main/ and all destructors
2925 after <tt/main/, so without any further work, the heap initialization code is
2926 called once the module is linked in.
2927
2928 While it would be possible to add explicit calls to initialization functions
2929 in the startup code, the new approach has several advantages:
2930
2931 <enum>
2932 <item>
2933 If a module is not included, the initialization code is not linked in and not
2934 called. So you don't pay for things you don't need.
2935
2936 <item>
2937 Adding another library that needs initialization does not mean that the
2938 startup code has to be changed. Before we had module constructors and
2939 destructors, the startup code for all systems had to be adjusted to call the
2940 new initialization code.
2941
2942 <item>
2943 The feature saves memory: Each additional initialization function needs just
2944 two bytes in the table (a pointer to the function).
2945
2946 </enum>
2947
2948
2949 <sect1>Calling order<p>
2950
2951 Both, constructors and destructors are sorted in increasing priority order by
2952 the linker when using one of the builtin linker configurations, so the
2953 functions with lower priorities come first and are followed by those with
2954 higher priorities. The C library runtime subroutine that walks over the
2955 constructor and destructor tables calls the functions starting from the top of
2956 the table - which means that functions with a high priority are called first.
2957
2958 So when using the C runtime, both constructors and destructors are called with
2959 high priority functions first, followed by low priority functions.
2960
2961
2962 <sect1>Pitfalls<p>
2963
2964 When creating and using module constructors and destructors, please take care
2965 of the following:
2966
2967 <itemize>
2968
2969 <item>
2970 The linker will only generate function tables, it will not generate code to
2971 call these functions. If you're using the feature in some other than the
2972 existing C environments, you have to write code to call all functions in a
2973 linker generated table yourself. See the <tt>condes</tt> module in the C
2974 runtime for an example on how to do this.
2975
2976 <item>
2977 The linker will only add addresses of functions that are in modules linked to
2978 the executable. This means that you have to be careful where to place the
2979 condes functions. If initialization is needed for a group of functions, be
2980 sure to place the initialization function into a module that is linked in
2981 regardless of which function is called by the user.
2982
2983 <item>
2984 The linker will generate the tables only when requested to do so by the
2985 <tt/FEATURE CONDES/ statement in the linker config file. Each table has to
2986 be requested separately.
2987
2988 <item>
2989 Constructors and destructors may have priorities. These priorities determine
2990 the order of the functions in the table. If your intialization or cleanup code
2991 does depend on other initialization or cleanup code, you have to choose the
2992 priority for the functions accordingly.
2993
2994 <item>
2995 Besides the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> and <tt><ref
2996 id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> statements, there is also a more
2997 generic command: <tt><ref id=".CONDES" name=".CONDES"></tt>. This allows to
2998 specify an additional type. Predefined types are 0 (constructor) and 1
2999 (destructor). The linker generates a separate table for each type on request.
3000
3001 </itemize>
3002
3003
3004 <sect>Porting sources from other assemblers<p>
3005
3006 Sometimes it is necessary to port code written for older assemblers to ca65.
3007 In some cases, this can be done without any changes to the source code by
3008 using the emulation features of ca65 (see <tt><ref id=".FEATURE"
3009 name=".FEATURE"></tt>). In other cases, it is necessary to make changes to the
3010 source code.
3011
3012 Probably the biggest difference is the handling of the <tt><ref id=".ORG"
3013 name=".ORG"></tt> directive. ca65 generates relocatable code, and placement is
3014 done by the linker. Most other assemblers generate absolute code, placement is
3015 done within the assembler and there is no external linker.
3016
3017 In general it is not a good idea to write new code using the emulation
3018 features of the assembler, but there may be situations where even this rule is
3019 not valid.
3020
3021 <sect1>TASS<p>
3022
3023 You need to use some of the ca65 emulation features to simulate the behaviour
3024 of such simple assemblers.
3025
3026 <enum>
3027 <item>Prepare your sourcecode like this:
3028
3029 <tscreen><verb>
3030         ; if you want TASS style labels without colons
3031         .feature labels_without_colons
3032
3033         ; if you want TASS style character constants
3034         ; ("a" instead of the default 'a')
3035         .feature loose_char_term
3036
3037                 .word *+2       ; the cbm load address
3038
3039                 [yourcode here]
3040 </verb></tscreen>
3041
3042 notice that the two emulation features are mostly useful for porting
3043 sources originally written in/for TASS, they are not needed for the
3044 actual "simple assembler operation" and are not recommended if you are
3045 writing new code from scratch.
3046
3047 <item>Replace all program counter assignments (which are not possible in ca65
3048 by default, and the respective emulation feature works different from what
3049 you'd expect) by another way to skip to another memory location, for example
3050 the <tt><ref id=".RES" name=".RES"></tt>directive.
3051
3052 <tscreen><verb>
3053         ; *=$2000
3054         .res $2000-*    ; reserve memory up to $2000
3055 </verb></tscreen>
3056
3057 notice that other than the original TASS, ca65 can never move the
3058 programmcounter backwards - think of it as if you are assembling to disc with
3059 TASS.
3060
3061 <item>Conditional assembly (<tt/.ifeq//<tt/.endif//<tt/.gogo/ etc.) must be
3062 rewritten to match ca65 syntax. Most importantly notice that due to the lack
3063 of <tt/.goto/, everything involving loops must be replaced by
3064 <tt><ref id=".REPEAT" name=".REPEAT"></tt>.
3065
3066 <item>To assemble code to a different address than it is executed at, use the
3067 <tt><ref id=".ORG" name=".ORG"></tt> directive instead of
3068 <tt/.offs/-constructs.
3069
3070 <tscreen><verb>
3071         .org $1800
3072
3073         [floppy code here]
3074
3075         .reloc  ; back to normal
3076 </verb></tscreen>
3077
3078 <item>Then assemble like this:
3079
3080 <tscreen><verb>
3081         cl65 --start-addr 0x0ffe -t none myprog.s -o myprog.prg
3082 </verb></tscreen>
3083
3084 notice that you need to use the actual start address minus two, since two
3085 bytes are used for the cbm load address.
3086
3087 </enum>
3088
3089
3090 <sect>Bugs/Feedback<p>
3091
3092 If you have problems using the assembler, if you find any bugs, or if
3093 you're doing something interesting with the assembler, I would be glad to
3094 hear from you. Feel free to contact me by email
3095 (<htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">).
3096
3097
3098
3099 <sect>Copyright<p>
3100
3101 ca65 (and all cc65 binutils) are (C) Copyright 1998-2001 Ullrich von
3102 Bassewitz. For usage of the binaries and/or sources the following
3103 conditions do apply:
3104
3105 This software is provided 'as-is', without any expressed or implied
3106 warranty.  In no event will the authors be held liable for any damages
3107 arising from the use of this software.
3108
3109 Permission is granted to anyone to use this software for any purpose,
3110 including commercial applications, and to alter it and redistribute it
3111 freely, subject to the following restrictions:
3112
3113 <enum>
3114 <item>  The origin of this software must not be misrepresented; you must not
3115         claim that you wrote the original software. If you use this software
3116         in a product, an acknowledgment in the product documentation would be
3117         appreciated but is not required.
3118 <item>  Altered source versions must be plainly marked as such, and must not
3119         be misrepresented as being the original software.
3120 <item>  This notice may not be removed or altered from any source
3121         distribution.
3122 </enum>
3123
3124
3125
3126 </article>
3127
3128
3129