]> git.sur5r.net Git - cc65/blob - doc/cc65.sgml
Minor update by Oliver Schmidt
[cc65] / doc / cc65.sgml
1 <!doctype linuxdoc system>
2
3 <article>
4 <title>cc65 Users Guide
5 <author>Ullrich von Bassewitz, <htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">
6 <date>03.09.2000, 02.10.2001, 2005-8-1
7
8 <abstract>
9 cc65 is a C compiler for 6502 targets. It supports several 6502 based home
10 computers like the Commodore and Atari machines, but it is easily retargetable.
11 </abstract>
12
13 <!-- Table of contents -->
14 <toc>
15
16 <!-- Begin the document -->
17
18
19 <sect>Overview<p>
20
21 cc65 was originally a C compiler for the Atari 8-bit machines written by
22 John R. Dunning. In prior releases I've described the compiler by listing
23 up the changes made by me. I have made many more changes in the meantime
24 (and rewritten major parts of the compiler), so I will no longer do that,
25 since the list would be too large and of no use to anyone. Instead I will
26 describe the compiler in respect to the ANSI/ISO C standard. In fact, I'm
27 planning a complete rewrite (that is, a complete new compiler) for the
28 next release, since there are too many limitations in the current code,
29 and removing these limitations would mean a rewrite of many more parts of
30 the compiler.
31
32 There are separate documents named <url url="library.html"> and <url
33 url="funcref.html"> that cover the library that is available for the compiler.
34 If you know C, and are interested in doing actual programming, the library
35 documentation is probably of much more use than this document.
36
37 If you need some hints for getting the best code out of the compiler, you
38 may have a look at <url url="coding.html"> which covers some code generation
39 issues.
40
41
42
43 <sect>Usage<p>
44
45 The compiler translates C files into files containing assembly code that
46 may be translated by the ca65 macroassembler (for more information about
47 the assembler, have a look at <url url="ca65.html">).
48
49
50 <sect1>Command line option overview<p>
51
52 The compiler may be called as follows:
53
54 <tscreen><verb>
55 ---------------------------------------------------------------------------
56 Usage: cc65 [options] file
57 Short options:
58   -Cl                   Make local variables static
59   -Dsym[=defn]          Define a symbol
60   -I dir                Set an include directory search path
61   -O                    Optimize code
62   -Oi                   Optimize code, inline more code
63   -Or                   Enable register variables
64   -Os                   Inline some known functions
65   -T                    Include source as comment
66   -V                    Print the compiler version number
67   -W                    Suppress warnings
68   -d                    Debug mode
69   -g                    Add debug info to object file
70   -h                    Help (this text)
71   -j                    Default characters are signed
72   -o name               Name the output file
73   -r                    Enable register variables
74   -t sys                Set the target system
75   -v                    Increase verbosity
76
77 Long options:
78   --add-source          Include source as comment
79   --bss-name seg        Set the name of the BSS segment
80   --check-stack         Generate stack overflow checks
81   --code-name seg       Set the name of the CODE segment
82   --codesize x          Accept larger code by factor x
83   --cpu type            Set cpu type
84   --create-dep          Create a make dependency file
85   --data-name seg       Set the name of the DATA segment
86   --debug               Debug mode
87   --debug-info          Add debug info to object file
88   --forget-inc-paths    Forget include search paths
89   --help                Help (this text)
90   --include-dir dir     Set an include directory search path
91   --register-space b    Set space available for register variables
92   --register-vars       Enable register variables
93   --rodata-name seg     Set the name of the RODATA segment
94   --signed-chars        Default characters are signed
95   --standard std        Language standard (c89, c99, cc65)
96   --static-locals       Make local variables static
97   --target sys          Set the target system
98   --verbose             Increase verbosity
99   --version             Print the compiler version number
100   --writable-strings    Make string literals writable
101 ---------------------------------------------------------------------------
102 </verb></tscreen>
103
104
105 <sect1>Command line options in detail<p>
106
107 Here is a description of all the command line options:
108
109 <descrip>
110
111   <tag><tt>--bss-name seg</tt></tag>
112
113   Set the name of the bss segment.
114
115
116   <tag><tt>--check-stack</tt></tag>
117
118   Tells the compiler to generate code that checks for stack overflows. See
119   <tt><ref id="pragma-checkstack" name="#pragma&nbsp;checkstack"></tt> for an
120   explanation of this feature.
121
122
123   <tag><tt>--code-name seg</tt></tag>
124
125   Set the name of the code segment.
126
127
128   <label id="option-codesize">
129   <tag><tt>--codesize x</tt></tag>
130
131   This options allows finer control about speed vs. size decisions in the code
132   generation and optimization phases. It gives the allowed size increase
133   factor (in percent). The default is 100 when not using <tt/-Oi/ and 200 when
134   using <tt/-Oi/ (<tt/-Oi/ is the same as <tt/--codesize&nbsp;200/).
135
136
137   <tag><tt>--cpu CPU</tt></tag>
138
139   A new, still experimental option. You may specify "6502" or "65C02" as
140   the CPU. 6502 is the default, so this will not change anything.
141   Specifying 65C02 will use a few 65C02 instructions when generating code.
142   Don't expect too much from this option: It is still new (and may have
143   bugs), and the additional instructions for the 65C02 are not that
144   overwhelming.
145
146
147   <tag><tt>--create-dep</tt></tag>
148
149   Tells the compiler to generate a file containing the dependency list for
150   the compiled module in makefile syntax. The file is named as the C input
151   file with the extension replaced by <tt/.u/.
152
153
154   <tag><tt>-d, --debug</tt></tag>
155
156   Enables debug mode, something that should not be needed for mere
157   mortals:-)
158
159
160   <tag><tt>-D sym[=definition]</tt></tag>
161
162   Define a macro on the command line. If no definition is given, the macro
163   is defined to the value "1".
164
165
166   <tag><tt>--forget-inc-paths</tt></tag>
167
168   Forget the builtin include paths. This is most useful when building
169   customized C or runtime libraries, in which case the standard header
170   files should be ignored.
171
172
173   <tag><tt>-g, --debug-info</tt></tag>
174
175   This will cause the compiler to insert a <tt/.DEBUGINFO/ command into the
176   generated assembler code. This will cause the assembler to include all
177   symbols in a special section in the object file.
178
179
180   <tag><tt>-h, --help</tt></tag>
181
182   Print the short option summary shown above.
183
184
185   <tag><tt>-o name</tt></tag>
186
187   Specify the name of the output file. If you don't specify a name, the
188   name of the C input file is used, with the extension replaced by ".s".
189
190
191   <tag><tt>-r, --register-vars</tt></tag>
192
193   <tt/-r/ will make the compiler honor the <tt/register/ keyword. Local
194   variables may be placed in registers (which are actually zero page
195   locations). There is some overhead involved with register variables, since
196   the old contents of the registers must be saved and restored. Since register
197   variables are of limited use without the optimizer, there is also a combined
198   switch: <tt/-Or/ will enable both, the optimizer and register variables.
199
200   For more information about register variables see <ref id="regvars"
201   name="register variables">.
202
203   The compiler setting can also be changed within the source file by using
204   <tt><ref id="pragma-regvars" name="#pragma&nbsp;regvars"></tt>.
205
206
207   <tag><tt>--register-space</tt></tag>
208
209   This option takes a numeric parameter and is used to specify, how much
210   zero page register space is available. Please note that just giving this
211   option will not increase or decrease by itself, it will just tell the
212   compiler about the available space. You will have to allocate that space
213   yourself using an assembler module with the necessary allocations, and a
214   linker configuration that matches the assembler module. The default value
215   for this option is 6 (bytes).
216
217   If you don't know what all this means, please don't use this option.
218
219
220   <tag><tt>--rodata-name seg</tt></tag>
221
222   Set the name of the rodata segment (the segment used for readonly data).
223
224
225   <tag><tt>-j, --signed-chars</tt></tag>
226
227   Using this option, you can make the default characters signed. Since the
228   6502 has no provisions for sign extending characters (which is needed on
229   almost any load operation), this will make the code larger and slower. A
230   better way is to declare characters explicitly as "signed" if needed. You
231   can also use <tt><ref id="pragma-signedchars"
232   name="#pragma&nbsp;signedchars"></tt> for better control of this option.
233
234
235   <label id="option--standard">
236   <tag><tt>--standard std</tt></tag>
237
238   This option allows to set the language standard supported. The argument is
239   one of
240   <itemize>
241   <item>c89
242   <item>c99
243   <item>cc65
244   </itemize>
245
246
247   <tag><tt>-t target, --target target</tt></tag>
248
249   This option is used to set the target system. The target system
250   determines things like the character set that is used for strings and
251   character constants. The following target systems are supported:
252
253   <itemize>
254   <item>none
255   <item>apple2
256   <item>apple2enh
257   <item>atari
258   <item>atmos
259   <item>c16 (works also for the c116 with memory up to 32K)
260   <item>c64
261   <item>c128
262   <item>cbm510 (CBM-II series with 40 column video)
263   <item>cbm610 (all CBM-II II computers with 80 column video)
264   <item>geos
265   <item>lunix
266   <item>lynx
267   <item>nes
268   <item>pet (all CBM PET systems except the 2001)
269   <item>plus4
270   <item>supervision
271   <item>vic20
272   </itemize>
273
274   <tag><tt>-v, --verbose</tt></tag>
275
276   Using this option, the compiler will be somewhat more verbose if errors
277   or warnings are encountered.
278
279
280   <tag><tt>--writable-strings</tt></tag>
281
282   Make string literals writable by placing them into the data segment instead
283   of the rodata segment.
284
285
286   <tag><tt>-Cl, --static-locals</tt></tag>
287
288   Use static storage for local variables instead of storage on the stack.
289   Since the stack is emulated in software, this gives shorter and usually
290   faster code, but the code is no longer reentrant. The difference between
291   <tt/-Cl/ and declaring local variables as static yourself is, that
292   initializer code is executed each time, the function is entered. So when
293   using
294
295   <tscreen><verb>
296         void f (void)
297         {
298             unsigned a = 1;
299             ...
300         }
301   </verb></tscreen>
302
303   the variable <tt/a/ will always have the value <tt/1/ when entering the
304   function and using <tt/-Cl/, while in
305
306   <tscreen><verb>
307         void f (void)
308         {
309             static unsigned a = 1;
310             ....
311         }
312   </verb></tscreen>
313
314   the variable <tt/a/ will have the value <tt/1/ only the first time that the
315   function is entered, and will keep the old value from one call of the
316   function to the next.
317
318   You may also use <tt><ref id="pragma-staticlocals"
319   name="#pragma&nbsp;staticlocals"></tt> to change this setting in your
320   sources.
321
322
323   <tag><tt>-I dir, --include-dir dir</tt></tag>
324
325   Set a directory where the compiler searches for include files. You may
326   use this option multiple times to add more than one directory to the
327   search list.
328
329
330   <label id="option-O">
331   <tag><tt>-O, -Oi, -Or, -Os</tt></tag>
332
333   Enable an optimizer run over the produced code.
334
335   Using <tt/-Oi/, the code generator will inline some code where otherwise a
336   runtime functions would have been called, even if the generated code is
337   larger. This will not only remove the overhead for a function call, but will
338   make the code visible for the optimizer. <tt/-Oi/ is an alias for
339   <tt/--codesize&nbsp;200/.
340
341   <tt/-Or/ will make the compiler honor the <tt/register/ keyword. Local
342   variables may be placed in registers (which are actually zero page
343   locations). There is some overhead involved with register variables, since
344   the old contents of the registers must be saved and restored. In addition,
345   the current implementation does not make good use of register variables, so
346   using <tt/-Or/ may make your program even slower and larger. Use with care!
347
348   Using <tt/-Os/ will force the compiler to inline some known functions from
349   the C library like strlen. Note: This has two consequences:
350   <p>
351   <itemize>
352   <item>You may not use names of standard C functions in your own code. If you
353         do that, your program is not standard compliant anyway, but using
354         <tt/-Os/ will actually break things.
355         <p>
356   <item>The inlined string and memory functions will not handle strings or
357         memory areas larger than 255 bytes. Similarly, the inlined <tt/is..()/
358         functions will not work with values outside the char. range (such as
359         <tt/EOF/).
360         <p>
361   </itemize>
362   <p>
363   It is possible to concatenate the modifiers for <tt/-O/. For example, to
364   enable register variables and inlining of known functions, you may use
365   <tt/-Ors/.
366
367
368   <tag><tt>-T, --add-source</tt></tag>
369
370   This include the source code as comments in the generated code. This is
371   normally not needed.
372
373
374   <tag><tt>-V, --version</tt></tag>
375
376   Print the version number of the compiler. When submitting a bug report,
377   please include the operating system you're using, and the compiler
378   version.
379
380
381   <label id="option-W">
382   <tag><tt>-W</tt></tag>
383
384   This option will suppress any warnings generated by the compiler. Since
385   any source file may be written in a manner that it will not produce
386   compiler warnings, using this option is usually not a good idea.
387
388 </descrip><p>
389
390
391 <sect>Input and output<p>
392
393 The compiler will accept one C file per invocation and create a file with
394 the same base name, but with the extension replaced by ".s". The output
395 file contains assembler code suitable for the use with the ca65 macro
396 assembler.
397
398 In addition to the paths named in the <tt/-I/ option on the command line, the
399 directory named in the environment variable <tt/CC65_INC/ is added to the
400 search path for include files on startup.
401
402
403
404 <sect>Differences to the ISO standard<p>
405
406 Here is a list of differences between the language, the compiler accepts,
407 and the one defined by the ISO standard:
408
409 <itemize>
410
411 <item>  The compiler allows unnamed parameters in parameter lists. The
412         compiler will not issue warnings about unused parameters that don't
413         have a name. This feature can be disabled with the <tt><ref
414         id="option--standard" name="--standard"></tt> command line option.
415         <p>
416 <item>  The compiler has some additional keywords:
417         <p>
418         <itemize>
419         <item><tt/asm/
420         <item><tt/__asm__/
421         <item><tt/fastcall/
422         <item><tt/__fastcall__/
423         <item><tt/__AX__/
424         <item><tt/__EAX__/
425         <item><tt/__func__/
426         <item><tt/__attribute__/
427         </itemize>
428         <p>
429         The keywords without the underlines can be disabled with the
430         <tt><ref id="option--standard" name="--standard"></tt> command line
431         option.
432         <p>
433 <item>  The datatypes "float" and "double" are not available.
434         <p>
435 <item>  The compiler does not support bit fields.
436         <p>
437 <item>  C Functions may not return structs (or unions), and structs may not
438         be passed as parameters by value. However, struct assignment *is*
439         possible.
440         <p>
441 <item>  Part of the C library is available only with fastcall calling
442         conventions (see below).  It means that you must not mix pointers to
443         those functions with pointers to user-written, not-fastcall functions.
444         <p>
445 </itemize>
446
447 There may be some more minor differences I'm currently not aware of. The
448 biggest problem is the missing float data type. With this limitation in
449 mind, you should be able to write fairly portable code.
450
451
452
453 <sect>Extensions<p>
454
455 This cc65 version has some extensions to the ISO C standard.
456
457 <itemize>
458
459 <item>  The compiler allows to insert assembler statements into the output
460         file. The syntax is
461
462         <tscreen><verb>
463         asm (&lt;string literal&gt;[, optional parameters]) ;
464         </verb></tscreen>
465         or
466         <tscreen><verb>
467         __asm__ (&lt;string literal&gt;[, optional parameters]) ;
468         </verb></tscreen>
469
470         The first form is in the user namespace and is disabled if the <tt/-A/
471         switch is given.
472
473         There is a whole section covering inline assembler statements,
474         <ref id="inline-asm" name="see there">.
475         <p>
476
477 <item>  There is a special calling convention named "fastcall".
478         The syntax for a function declaration using fastcall is
479
480         <tscreen><verb>
481         &lt;return type&gt; fastcall &lt;function name&gt; (&lt;parameter list&gt;)
482         </verb></tscreen>
483         or
484         <tscreen><verb>
485         &lt;return type&gt; __fastcall__ &lt;function name&gt; (&lt;parameter list&gt;)
486         </verb></tscreen>
487         An example would be
488         <tscreen><verb>
489         void __fastcall__ f (unsigned char c)
490         </verb></tscreen>
491         The first form of the fastcall keyword is in the user namespace and can
492         therefore be disabled with the <tt><ref id="option--standard"
493         name="--standard"></tt> command line option.
494
495         For functions declared as <tt/fastcall/, the rightmost parameter is not
496         pushed on the stack but left in the primary register when the function
497         is called. This will reduce the cost when calling assembler functions
498         significantly, especially when the function itself is rather small.
499         <p>
500
501 <item>  There are two pseudo variables named <tt/__AX__/ and <tt/__EAX__/.
502         Both refer to the primary register that is used by the compiler to
503         evaluate expressions or return function results. <tt/__AX__/ is of
504         type <tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/
505         respectively. The pseudo variables may be used as lvalue and rvalue as
506         every other variable. They are most useful together with short
507         sequences of assembler code. For example, the macro
508
509         <tscreen><verb>
510         #define hi(x)           \
511             (__AX__ = (x),      \
512              asm ("txa"),       \
513              asm ("ldx #$00"),  \
514              __AX__)
515         </verb></tscreen>
516
517         will give the high byte of any unsigned value.
518         <p>
519
520 <item>  Inside a function, the identifier <tt/__func__/ gives the name of the
521         current function as a string. Outside of functions, <tt/__func__/ is
522         undefined.
523         Example:
524
525         <tscreen><verb>
526         #define PRINT_DEBUG(s)  printf ("%s: %s\n", __func__, s);
527         </verb></tscreen>
528
529         The macro will print the name of the current function plus a given
530         string.
531         <p>
532
533 <item>  cc65 allows the initialization of <tt/void/ variables. This may be
534         used to create variable structures that are more compatible with
535         interfaces written for assembler languages. Here is an example:
536
537         <tscreen><verb>
538         void GCmd = {   (char)3, (unsigned)0x2000, (unsigned)0x3000 };
539         </verb></tscreen>
540
541         This will be translated as follows:
542
543         <tscreen><verb>
544         _GCmd:
545                 .byte   3
546                 .word   $2000
547                 .word   $3000
548         </verb></tscreen>
549
550         Since the variable is of type <tt/void/ you may not use it as is.
551         However, taking the address of the variable results in a <tt/void*/
552         which may be passed to any function expecting a pointer.
553
554         See the <url url="geos.html" name="GEOS library document"> for examples
555         on how to use this feature.
556         <p>
557
558 <item>  cc65 implements flexible array struct members as defined in the C99 ISO
559         standard. As an extension, these fields may be initialized. There are
560         several exceptions, however (which is probably the reason why the
561         standard does not define this feature, because it is highly
562         unorthogonal). Flexible array members cannot be initialized ...
563
564         <itemize>
565         <item>... when defining an array of structs with flexible
566                 members.
567         <item>... if such a struct is a member field of another struct
568                 which is not the last field.
569         <item>... if the struct which contains a flexible array member is
570                 declared as <tt/register/, and the size and compiler settings
571                 do allow the compiler actually to place the struct into the
572                 register bank in the zero page.
573         </itemize>
574
575         Please note that -- as defined in the ISO C standard -- the <tt/sizeof/
576         operator returns the struct size with the flexible array member having
577         size zero, even if it is initialized.
578         <p>
579
580 </itemize>
581 <p>
582
583
584 <sect>Predefined macros<p>
585
586 The compiler defines several macros at startup:
587
588 <descrip>
589
590   <tag><tt>__CC65__</tt></tag>
591
592   This macro is always defined. Its value is the version number of the
593   compiler in hex.  For example, version 2.10.1 of the compiler has this macro
594   defined as <tt/0x02A1/.
595
596   <tag><tt>__APPLE2__</tt></tag>
597
598   This macro is defined if the target is the Apple ][ (-t apple2).
599
600   <tag><tt>__APPLE2ENH__</tt></tag>
601
602   This macro is defined if the target is the enhanced Apple //e (-t apple2enh).
603
604   <tag><tt>__ATARI__</tt></tag>
605
606   This macro is defined if the target is one of the Atari computers
607   (400/800/130XL/800XL).
608
609   <tag><tt>__ATMOS__</tt></tag>
610
611   This macro is defined if the target is the Oric Atmos (-t atmos).
612
613   <tag><tt>__CBM__</tt></tag>
614
615   This macro is defined if the target system is one of the CBM targets.
616
617   <tag><tt>__C16__</tt></tag>
618
619   This macro is defined if the target is the c16 (-t c16).
620
621   <tag><tt>__C64__</tt></tag>
622
623   This macro is defined if the target is the c64 (-t c64).
624
625   <tag><tt>__C128__</tt></tag>
626
627   This macro is defined if the target is the c128 (-t c128).
628
629   <tag><tt>__CBM510__</tt></tag>
630
631   This macro is defined if the target is the CBM 500 series of computers.
632
633   <tag><tt>__CBM610__</tt></tag>
634
635   This macro is defined if the target is one of the CBM 600/700 family of
636   computers (called B series in the US).
637
638   <tag><tt>__GEOS__</tt></tag>
639
640   This macro is defined if you are compiling for the GEOS system (-t geos).
641
642   <tag><tt>__LUNIX__</tt></tag>
643
644   This macro is defined if you are compiling for the LUnix system (-t lunix).
645
646   <tag><tt>__LYNX__</tt></tag>
647
648   This macro is defined if the target is the Atari Lynx (-t lynx).
649
650   <tag><tt>__NES__</tt></tag>
651
652   This macro is defined if the target is the NES (-t nes).
653
654   <tag><tt>__PET__</tt></tag>
655
656   This macro is defined if the target is the PET family of computers (-t pet).
657
658   <tag><tt>__PLUS4__</tt></tag>
659
660   This macro is defined if the target is the plus/4 (-t plus4).
661
662   <tag><tt>__SUPERVISION__</tt></tag>
663
664   This macro is defined if the target is the supervision (-t supervision).
665
666   <tag><tt>__VIC20__</tt></tag>
667
668   This macro is defined if the target is the vic20 (-t vic20).
669
670   <tag><tt>__FILE__</tt></tag>
671
672   This macro expands to a string containing the name of the C source file.
673
674   <tag><tt>__LINE__</tt></tag>
675
676   This macro expands to the current line number.
677
678   <tag><tt>__CC65_STD__</tt></tag>
679
680   This macro is defined to one of the following depending on the <tt><ref
681   id="option--standard" name="--standard"></tt> command line option:
682   <itemize>
683   <item><tt/__CC65_STD_C89__/
684   <item><tt/__CC65_STD_C99__/
685   <item><tt/__CC65_STD_CC65__/
686   </itemize>
687
688   <tag><tt>__OPT__</tt></tag>
689
690   Is defined if the compiler was called with the <tt/-O/ command line option.
691
692   <tag><tt>__OPT_i__</tt></tag>
693
694   Is defined if the compiler was called with the <tt/-Oi/ command line option.
695
696   <tag><tt>__OPT_r__</tt></tag>
697
698   Is defined if the compiler was called with the <tt/-Or/ command line option.
699
700   <tag><tt>__OPT_s__</tt></tag>
701
702   Is defined if the compiler was called with the <tt/-Os/ command line option.
703
704 </descrip>
705
706
707 <sect>&num;pragmas<label id="pragmas"><p>
708
709 The compiler understands some pragmas that may be used to change code
710 generation and other stuff. Some of these pragmas understand a special form:
711 If the first parameter is <tt/push/, the old value is saved onto a stack
712 before changing it. The value may later be restored by using the <tt/pop/
713 parameter with the <tt/#pragma/.
714
715 <sect1><tt>#pragma bssseg (&lsqb;push,&rsqb;&lt;name&gt;)</tt><p>
716
717   This pragma changes the name used for the BSS segment (the BSS segment
718   is used to store uninitialized data). The argument is a string enclosed
719   in double quotes.
720
721   Note: The default linker configuration file does only map the standard
722   segments. If you use other segments, you have to create a new linker
723   configuration file.
724
725   Beware: The startup code will zero only the default BSS segment. If you
726   use another BSS segment, you have to do that yourself, otherwise
727   uninitialized variables do not have the value zero.
728
729   The <tt/#pragma/ understands the push and pop parameters as explained above.
730
731   Example:
732   <tscreen><verb>
733         #pragma bssseg ("MyBSS")
734   </verb></tscreen>
735
736
737 <sect1><tt>#pragma charmap (&lt;index&gt;, &lt;code&gt;)</tt><p>
738
739   Each literal string and each literal character in the source is translated
740   by use of a translation table. This translation table is preset when the
741   compiler is started depending on the target system, for example to map
742   ISO-8859-1 characters into PETSCII if the target is a commodore machine.
743
744   This pragma allows to change entries in the translation table, so the
745   translation for individual characters, or even the complete table may be
746   adjusted.
747
748   Both arguments are assumed to be unsigned characters with a valid range of
749   1-255.
750
751   Beware of two pitfalls:
752
753     <itemize>
754     <item>The character index is actually the code of the character in the
755           C source, so character mappings do always depend on the source
756           character set. This means that <tt/#pragma&nbsp;charmap/ is not
757           portable -- it depends on the build environment.
758     <item>While it is possible to use character literals as indices, the
759           result may be somewhat unexpected, since character literals are
760           itself translated. For this reason I would suggest to avoid
761           character literals and use numeric character codes instead.
762     </itemize>
763
764   Example:
765   <tscreen><verb>
766         /* Use a space wherever an 'a' occurs in ISO-8859-1 source */
767         #pragma charmap (0x61, 0x20);
768   </verb></tscreen>
769
770
771 <sect1><tt>#pragma checkstack ([push,]on|off)</tt><label id="pragma-checkstack"><p>
772
773   Tells the compiler to insert calls to a stack checking subroutine to detect
774   stack overflows. The stack checking code will lead to somewhat larger and
775   slower programs, so you may want to use this pragma when debugging your
776   program and switch it off for the release version. If a stack overflow is
777   detected, the program is aborted.
778
779   If the argument is "off", stack checks are disabled (the default), otherwise
780   they're enabled.
781
782   The <tt/#pragma/ understands the push and pop parameters as explained above.
783
784 <sect1><tt>#pragma codeseg ([push,]&lt;name&gt;)</tt><p>
785
786   This pragma changes the name used for the CODE segment (the CODE segment
787   is used to store executable code). The argument is a string enclosed in
788   double quotes.
789
790   Note: The default linker configuration file does only map the standard
791   segments. If you use other segments, you have to create a new linker
792   configuration file.
793
794   The <tt/#pragma/ understands the push and pop parameters as explained above.
795
796   Example:
797   <tscreen><verb>
798         #pragma codeseg ("MyCODE")
799   </verb></tscreen>
800
801
802 <sect1><tt>#pragma codesize ([push,]&lt;int&gt;)</tt><label id="pragma-codesize"><p>
803
804   This pragma allows finer control about speed vs. size decisions in the code
805   generation and optimization phase. It gives the allowed size increase factor
806   (in percent). The default is can be changed by use of the <tt/<ref
807   id="option-codesize" name="--codesize">/ compiler option.
808
809   The <tt/#pragma/ understands the push and pop parameters as explained above.
810
811
812 <sect1><tt>#pragma dataseg ([push,]&lt;name&gt;)</tt><p>
813
814   This pragma changes the name used for the DATA segment (the DATA segment
815   is used to store initialized data). The argument is a string enclosed in
816   double quotes.
817
818   Note: The default linker configuration file does only map the standard
819   segments. If you use other segments, you have to create a new linker
820   configuration file.
821
822   The <tt/#pragma/ understands the push and pop parameters as explained above.
823
824   Example:
825   <tscreen><verb>
826         #pragma dataseg ("MyDATA")
827   </verb></tscreen>
828
829
830 <sect1><tt>#pragma optimize ([push,]on|off)</tt><label id="pragma-optimize"><p>
831
832   Switch optimization on or off. If the argument is "off", optimization is
833   disabled, otherwise it is enabled. Please note that this pragma only effects
834   whole functions. The setting in effect when the function is encountered will
835   determine if the generated code is optimized or not.
836
837   Optimization and code generation is also controlled by the <ref
838   id="pragma-codesize" name="codesize pragma">.
839
840   The default is "off", but may be changed with the <tt/<ref name="-O"
841   id="option-O">/ compiler option.
842
843   The <tt/#pragma/ understands the push and pop parameters as explained above.
844
845
846 <sect1><tt>#pragma rodataseg ([push,]&lt;name&gt;)</tt><p>
847
848   This pragma changes the name used for the RODATA segment (the RODATA
849   segment is used to store readonly data). The argument is a string
850   enclosed in double quotes.
851
852   Note: The default linker configuration file does only map the standard
853   segments. If you use other segments, you have to create a new linker
854   configuration file.
855
856   The <tt/#pragma/ understands the push and pop parameters as explained above.
857
858   Example:
859   <tscreen><verb>
860         #pragma rodataseg ("MyRODATA")
861   </verb></tscreen>
862
863
864 <sect1><tt>#pragma regvaraddr ([push,]on|off)</tt><p>
865
866   The compiler does not allow to take the address of register variables.
867   The regvaraddr pragma changes this. Taking the address of a register
868   variable is allowed after using this pragma with "on" as argument.
869   Using "off" as an argument switches back to the default behaviour.
870
871   Beware: The C standard does not allow taking the address of a variable
872   declared as register. So your programs become non-portable if you use
873   this pragma. In addition, your program may not work. This is usually the
874   case if a subroutine is called with the address of a register variable,
875   and this subroutine (or a subroutine called from there) uses
876   register variables. So be careful with this #pragma.
877
878   The <tt/#pragma/ understands the push and pop parameters as explained above.
879
880   Example:
881   <tscreen><verb>
882         #pragma regvaraddr(on)  /* Allow taking the address
883                                  * of register variables
884                                  */
885   </verb></tscreen>
886
887
888 <sect1><tt>#pragma regvars ([push,]on|off)</tt><label id="pragma-regvars"><p>
889
890   Enables or disables use of register variables. If register variables are
891   disabled (the default), the <tt/register/ keyword is ignored. Register
892   variables are explained in more detail in <ref id="regvars" name="a separate
893   chapter">.
894
895   The <tt/#pragma/ understands the push and pop parameters as explained above.
896
897
898 <sect1><tt>#pragma signedchars ([push,]on|off)</tt><label id="pragma-signedchars"><p>
899
900   Changes the signedness of the default character type. If the argument is
901   "on", default characters are signed, otherwise characters are unsigned.
902   The compiler default is to make characters unsigned since this creates a
903   lot better code. This default may be overridden by the <tt/--signed-chars/
904   command line option.
905
906   The <tt/#pragma/ understands the push and pop parameters as explained above.
907
908
909 <sect1><tt>#pragma staticlocals ([push,]on|off)</tt><label id="pragma-staticlocals"<p>
910
911   Use variables in the bss segment instead of variables on the stack. This
912   pragma changes the default set by the compiler option <tt/-Cl/. If the
913   argument is "on", local variables are allocated in the BSS segment,
914   leading to shorter and in most cases faster, but non-reentrant code.
915
916   The <tt/#pragma/ understands the push and pop parameters as explained above.
917
918
919 <sect1><tt>#pragma warn ([push,]on|off)</tt><label id="pragma-warn"><p>
920
921   Switch compiler warnings on or off. If the argument is "off", warnings are
922   disabled, otherwise they're enabled. The default is "on", but may be changed
923   with the <tt/<ref name="-W" id="option-W">/ compiler option.
924
925   The <tt/#pragma/ understands the push and pop parameters as explained above.
926
927
928 <sect1><tt>#pragma zpsym (&lt;name&gt;)</tt><p>
929
930   Tell the compiler that the -- previously as external declared -- symbol with
931   the given name is a zero page symbol (usually from an assembler file).
932   The compiler will create a matching import declaration for the assembler.
933
934   Example:
935   <tscreen><verb>
936         extern int foo;
937         #pragma zpsym ("foo");  /* foo is in the zeropage */
938   </verb></tscreen>
939
940
941
942
943 <sect>Register variables<label id="regvars"><p>
944
945 The runtime for all supported platforms has 6 bytes of zero page space
946 available for register variables (this could be increased, but I think it's a
947 good value). So you can declare register variables up to a total size of 6 per
948 function. The compiler will allocate register space on a "first come, first
949 served" base and convert any <tt/register/ declarations that exceed the
950 available register space silently to <tt/auto/. Parameters can also be
951 declared as <tt/register/, this will in fact give slightly shorter code than
952 using a register variable.
953
954 Since a function must save the current values of the registers on entry and
955 restore them on exit, there is an overhead associated with register variables,
956 and this overhead is quite high (about 20 bytes per variable). This means that
957 just declaring anything as <tt/register/ is not a good idea.
958
959 The best use for register variables are pointers, especially those that point
960 to structures. The magic number here is about 3 uses of a struct field: If the
961 function contains this number or even more, the generated code will be usually
962 shorter and faster when using a register variable for the struct pointer. The
963 reason for this is that the register variable can in many cases be used as a
964 pointer directly. Having a pointer in an auto variable means that this pointer
965 must first be copied into a zero page location, before it can be dereferenced.
966
967 Second best use for register variables are counters. However, there is not
968 much difference in the code generated for counters, so you will need at least
969 100 operations on this variable (for example in a loop) to make it worth the
970 trouble. The only savings you get here are by the use of a zero page variable
971 instead of one on the stack or in the data segment.
972
973 Register variables must be explicitly enabled by using <tt/-Or/ or <tt/-r/ on
974 the command line. Register variables are only accepted on function top level,
975 register variables declared in interior blocks are silently converted to
976 <tt/auto/. With register variables disabled, all variables declared as
977 <tt/register/ are actually auto variables.
978
979 Please take care when using register variables: While they are helpful and can
980 lead to a tremendous speedup when used correctly, improper usage will cause
981 bloated code and a slowdown.
982
983
984
985 <sect>Inline assembler<label id="inline-asm"><p>
986
987 The compiler allows to insert assembler statements into the output file. The
988 syntax is
989
990 <tscreen><verb>
991         asm (&lt;string literal&gt;[, optional parameters]) ;
992 </verb></tscreen>
993 or
994 <tscreen><verb>
995         __asm__ (&lt;string literal&gt;[, optional parameters]) ;
996 </verb></tscreen>
997 <p>
998
999 The first form is in the user namespace and is disabled by <tt><ref
1000 id="option--standard" name="--standard"></tt> if the argument is not <tt/cc65/.
1001
1002 The asm statement may be used inside a function and on global file level. An
1003 inline assembler statement is a primary expression, so it may also be used as
1004 part of an expression. Please note however that the result of an expression
1005 containing just an inline assembler statement is always of type <tt/void/.
1006
1007 The contents of the string literal are preparsed by the compiler and inserted
1008 into the generated assembly output, so that the can be further processed by
1009 the backend and especially the optimizer. For this reason, the compiler does
1010 only allow regular 6502 opcodes to be used with the inline assembler. Pseudo
1011 instructions (like <tt/.import/, <tt/.byte/ and so on) are <em/not/ allowed,
1012 even if the ca65 assembler (which is used to translate the generated assembler
1013 code) would accept them. The builtin inline assembler is not a replacement for
1014 the full blown macro assembler which comes with the compiler.
1015
1016 Note: Inline assembler statements are subject to all optimizations done by the
1017 compiler. There is currently no way to protect an inline assembler statement
1018 from being moved or removed completely by the optimizer. If in doubt, check
1019 the generated assembler output, or disable optimizations.
1020
1021 The string literal may contain format specifiers from the following list. For
1022 each format specifier, an argument is expected which is inserted instead of
1023 the format specifier before passing the assembly code line to the backend.
1024
1025 <itemize>
1026   <item><tt/%b/ - Numerical 8-bit value
1027   <item><tt/%w/ - Numerical 16-bit value
1028   <item><tt/%l/ - Numerical 32-bit value
1029   <item><tt/%v/ - Assembler name of a (global) variable or function
1030   <item><tt/%o/ - Stack offset of a (local) variable
1031   <item><tt/%g/ - Assembler name of a C label
1032   <item><tt/%s/ - The argument is converted to a string
1033   <item><tt/%%/ - The % sign itself
1034 </itemize><p>
1035
1036 Using these format specifiers, you can access C <tt/#defines/, variables or
1037 similar stuff from the inline assembler. For example, to load the value of
1038 a C <tt/#define/ into the Y register, one would use
1039
1040 <tscreen><verb>
1041         #define OFFS  23
1042         __asm__ ("ldy #%b", OFFS);
1043 </verb></tscreen>
1044
1045 Or, to access a struct member of a static variable:
1046
1047 <tscreen><verb>
1048         typedef struct {
1049             unsigned char x;
1050             unsigned char y;
1051             unsigned char color;
1052         } pixel_t;
1053         static pixel_t pixel;
1054         __asm__ ("ldy #%b", offsetof(pixel_t, color));
1055         __asm__ ("lda %v,y", pixel);
1056 </verb></tscreen>
1057 <p>
1058
1059 Note: Do not embed the assembler labels that are used as names of global
1060 variables or functions into your asm statements. Code like this
1061
1062 <tscreen><verb>
1063         int foo;
1064         int bar () { return 1; }
1065         __asm__ ("lda _foo");           /* DON'T DO THAT! */
1066         ...
1067         __asm__ ("jsr _bar");           /* DON'T DO THAT EITHER! */
1068 </verb></tscreen>
1069 <p>
1070
1071 may stop working if the way, the compiler generates these names is changed in
1072 a future version. Instead use the format specifiers from the table above:
1073
1074 <tscreen><verb>
1075         __asm__ ("lda %v", foo);        /* OK */
1076         ...
1077         __asm__ ("jsr %v", bar);        /* OK */
1078 </verb></tscreen>
1079 <p>
1080
1081
1082 <sect>Bugs/Feedback<p>
1083
1084 If you have problems using the compiler, if you find any bugs, or if you're
1085 doing something interesting with it, I would be glad to hear from you. Feel
1086 free to contact me by email (<htmlurl url="mailto:uz@cc65.org"
1087 name="uz@cc65.org">).
1088
1089
1090
1091 <sect>Copyright<p>
1092
1093 This is the original compiler copyright:
1094
1095 <tscreen><verb>
1096 --------------------------------------------------------------------------
1097   -*- Mode: Text -*-
1098
1099      This is the copyright notice for RA65, LINK65, LIBR65, and other
1100   Atari 8-bit programs.  Said programs are Copyright 1989, by John R.
1101   Dunning.  All rights reserved, with the following exceptions:
1102
1103       Anyone may copy or redistribute these programs, provided that:
1104
1105   1:  You don't charge anything for the copy.  It is permissable to
1106       charge a nominal fee for media, etc.
1107
1108   2:  All source code and documentation for the programs is made
1109       available as part of the distribution.
1110
1111   3:  This copyright notice is preserved verbatim, and included in
1112       the distribution.
1113
1114       You are allowed to modify these programs, and redistribute the
1115   modified versions, provided that the modifications are clearly noted.
1116
1117       There is NO WARRANTY with this software, it comes as is, and is
1118   distributed in the hope that it may be useful.
1119
1120       This copyright notice applies to any program which contains
1121   this text, or the refers to this file.
1122
1123       This copyright notice is based on the one published by the Free
1124   Software Foundation, sometimes known as the GNU project.  The idea
1125   is the same as theirs, ie the software is free, and is intended to
1126   stay that way.  Everybody has the right to copy, modify, and re-
1127   distribute this software.  Nobody has the right to prevent anyone
1128   else from copying, modifying or redistributing it.
1129
1130 --------------------------------------------------------------------------
1131 </verb></tscreen>
1132
1133 Small parts of the compiler (parts of the preprocessor and main parser) are
1134 still covered by this copyright. The main portion is covered by the usual
1135 cc65 license, which reads:
1136
1137 This software is provided 'as-is', without any expressed or implied
1138 warranty.  In no event will the authors be held liable for any damages
1139 arising from the use of this software.
1140
1141 Permission is granted to anyone to use this software for any purpose,
1142 including commercial applications, and to alter it and redistribute it
1143 freely, subject to the following restrictions:
1144
1145 <enum>
1146 <item>  The origin of this software must not be misrepresented; you must not
1147         claim that you wrote the original software. If you use this software
1148         in a product, an acknowledgment in the product documentation would be
1149         appreciated but is not required.
1150 <item>  Altered source versions must be plainly marked as such, and must not
1151         be misrepresented as being the original software.
1152 <item>  This notice may not be removed or altered from any source
1153         distribution.
1154 </enum>
1155
1156 </article>
1157