]> git.sur5r.net Git - cc65/blob - doc/cc65.sgml
Added explanation for --codesize
[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
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 is a separate document named "library.txt" that covers the library
33 available for the compiler. If you know C and are interested in doing
34 actual programming, the library documentation is probably of much more use
35 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 "coding.txt" which covers some code generation issues.
39
40
41
42 <sect>Usage<p>
43
44 The compiler translates C files into files containing assembler code that
45 may be translated by the ca65 macroassembler (for more information about
46 the assembler, have a look at ca65.txt).
47
48
49 <sect1>Command line option overview<p>
50
51 The compiler may be called as follows:
52
53 <tscreen><verb>
54 ---------------------------------------------------------------------------
55 Usage: cc65 [options] file
56 Short options:
57   -d                    Debug mode
58   -g                    Add debug info to object file
59   -h                    Help (this text)
60   -j                    Default characters are signed
61   -o name               Name the output file
62   -t sys                Set the target system
63   -v                    Increase verbosity
64   -A                    Strict ANSI mode
65   -Cl                   Make local variables static
66   -Dsym[=defn]          Define a symbol
67   -I dir                Set an include directory search path
68   -O                    Optimize code
69   -Oi                   Optimize code, inline more code
70   -Or                   Enable register variables
71   -Os                   Inline some known functions
72   -T                    Include source as comment
73   -V                    Print the compiler version number
74   -W                    Suppress warnings
75
76 Long options:
77   --ansi                Strict ANSI mode
78   --bss-name seg        Set the name of the BSS segment
79   --check-stack         Generate stack overflow checks
80   --code-name seg       Set the name of the CODE segment
81   --codesize x          Accept larger code by factor x
82   --cpu type            Set cpu type
83   --data-name seg       Set the name of the DATA segment
84   --debug               Debug mode
85   --debug-info          Add debug info to object file
86   --help                Help (this text)
87   --include-dir dir     Set an include directory search path
88   --rodata-name seg     Set the name of the RODATA segment
89   --signed-chars        Default characters are signed
90   --static-locals       Make local variables static
91   --target sys          Set the target system
92   --verbose             Increase verbosity
93   --version             Print the compiler version number
94 ---------------------------------------------------------------------------
95 </verb></tscreen>
96
97
98 <sect1>Command line options in detail<p>
99
100 Here is a description of all the command line options:
101
102 <descrip>
103
104   <label id="option-A">
105   <tag><tt>-A, --ansi</tt></tag>
106
107   This option disables any compiler exensions. Have a look at section 5
108   for a discussion of compiler extensions. In addition, the macro
109   <tt/__STRICT_ANSI__/ is defined, when using one of these options.
110
111
112   <tag><tt>--bss-name seg</tt></tag>
113
114   Set the name of the bss segment.
115
116
117   <tag><tt>--check-stack</tt></tag>
118
119   Tells the compiler to generate code that checks for stack overflows. See
120   <tt><ref id="pragma-checkstack" name="#pragma checkstack"></tt> for an
121   explanation of this feature.
122
123
124   <tag><tt>--code-name seg</tt></tag>
125
126   Set the name of the code segment.
127
128
129   <tag><tt>--codesize x</tt></tag>
130
131   This options allows finer control about speed vs. size decisions in the
132   code generation phase. It gives the allowed size increase factor (in 
133   percent). The default is 100 when not using <tt/-Oi/ and 200 when using
134   <tt/-Oi/ (<tt/-Oi/ is the same as <tt/--codesize 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>-d, --debug</tt></tag>
148
149   Enables debug mode, something that should not be needed for mere
150   mortals:-)
151
152
153   <tag><tt>-D sym[=definition]</tt></tag>
154
155   Define a macro on the command line. If no definition is given, the macro
156   is defined to the value "1".
157
158
159   <tag><tt>-g, --debug-info</tt></tag>
160
161   This will cause the compiler to insert a <tt/.DEBUGINFO/ command into the
162   generated assembler code. This will cause the assembler to include all
163   symbols in a special section in the object file.
164
165
166   <tag><tt>-h, --help</tt></tag>
167
168   Print the short option summary shown above.
169
170
171   <tag><tt>--rodata-name seg</tt></tag>
172
173   Set the name of the rodata segment (the segment used for readonly data).
174
175
176   <tag><tt>-j, --signed-chars</tt></tag>
177
178   Using this option, you can make the default characters signed. Since the
179   6502 has no provisions for sign extending characters (which is needed on
180   almost any load operation), this will make the code larger and slower. A
181   better way is to declare characters explicitly as "signed" if needed. You
182   can also use <tt><ref id="pragma-signedchars" name="#pragma
183   signedchars"></tt> for better control of this option.
184
185
186   <tag><tt>-t target, --target target</tt></tag>
187
188   This option is used to set the target system. The target system
189   determines things like the character set that is used for strings and
190   character constants. The following target systems are supported:
191
192   <itemize>
193   <item>none
194   <item>atari
195   <item>c64
196   <item>c128
197   <item>plus4
198   <item>cbm610 (all CBM series-II computers with 80 column video)
199   <item>pet (all CBM PET systems except the 2001)
200   <item>apple2
201   <item>geos
202   </itemize>
203
204   <tag><tt>-v, --verbose</tt></tag>
205
206   Using this option, the compiler will be somewhat more verbose if errors
207   or warnings are encountered.
208
209
210   <tag><tt>-Cl, --static-locals</tt></tag>
211
212   Use static storage for local variables instead of storage on the stack.
213   Since the stack is emulated in software, this gives shorter and usually
214   faster code, but the code is no longer reentrant. The difference between
215   <tt/-Cl/ and declaring local variables as static yourself is, that
216   initializer code is executed each time, the function is entered. So when
217   using
218
219   <tscreen><verb>
220         void f (void)
221         {
222             unsigned a = 1;
223             ...
224         }
225   </verb></tscreen>
226
227   the variable a will always have the value 1 when entering the function
228   and using <tt/-Cl/, while in
229
230   <tscreen><verb>
231         void f (void)
232         {
233             static unsigned a = 1;
234             ....
235         }
236   </verb></tscreen>
237
238   the variable a will have the value 1 only the first time, the function
239   is entered, and will keep the old value from one call of the function to
240   the next.
241
242   You may also use <tt><ref id="pragma-staticlocals" name="#pragma
243   staticlocals"></tt> to change this setting in your sources.
244
245
246   <tag><tt>-I dir, --include-dir dir</tt></tag>
247
248   Set a directory where the compiler searches for include files. You may
249   use this option multiple times to add more than one directory to the
250   search list.
251
252
253   <tag><tt>-o name</tt></tag>
254
255   Specify the name of the output file. If you don't specify a name, the
256   name of the C input file is used, with the extension replaced by ".s".
257
258
259   <tag><tt>-O, -Oi, -Or, -Os</tt></tag>
260
261   Enable an optimizer run over the produced code.
262
263   Using <tt/-Oi/, the code generator will inline some code where otherwise a
264   runtime functions would have been called, even if the generated code is
265   larger. This will not only remove the overhead for a function call, but will
266   make the code visible for the optimizer. <tt/-Oi/ is an alias for
267   <tt/--codesize 200/.
268
269   <tt/-Or/ will make the compiler honor the <tt/register/ keyword. Local
270   variables may be placed in registers (which are actually zero page
271   locations). There is some overhead involved with register variables, since
272   the old contents of the registers must be saved and restored. In addition,
273   the current implementation does not make good use of register variables, so
274   using <tt/-Or/ may make your program even slower and larger. Use with care!
275
276   Using <tt/-Os/ will force the compiler to inline some known functions from
277   the C library like strlen. Note: This has two consequences:
278   <p>
279   <itemize>
280   <item>You may not use names of standard C functions in your own code. If you
281         do that, your program is not standard compliant anyway, but using
282         <tt/-Os/ will actually break things.
283         <p>
284   <item>The inlined string and memory functions will not handle strings or
285         memory areas larger than 255 bytes. Similar, the inlined <tt/is..()/
286         functions will not work with values outside char range.
287         <p>
288   </itemize>
289   <p>
290   It is possible to concatenate the modifiers for <tt/-O/. For example, to
291   enable register variables and inlining of known functions, you may use
292   <tt/-Ors/.
293
294
295   <tag><tt>-T</tt></tag>
296
297   This include the source code as comments in the generated code. This is
298   normally not needed.
299
300
301   <tag><tt>-V, --version</tt></tag>
302
303   Print the version number of the compiler. When submitting a bug report,
304   please include the operating system you're using, and the compiler
305   version.
306
307
308   <tag><tt>-W</tt></tag>
309
310   This option will suppress any warnings generated by the compiler. Since
311   any source file may be written in a manner that it will not produce
312   compiler warnings, using this option is usually not a good idea.
313
314 </descrip><p>
315
316
317 <sect>Input and output<p>
318
319 The compiler will accept one C file per invocation and create a file with
320 the same base name, but with the extension replaced by ".s". The output
321 file contains assembler code suitable for the use with the ca65 macro
322 assembler.
323
324 In addition to the paths named in the <tt/-I/ option on the command line, the
325 directory named in the environment variable <tt/CC65_INC/ is added to the
326 search path for include files on startup.
327
328
329
330 <sect>Differences to the ISO standard<p>
331
332 Here is a list of differences between the language, the compiler accepts,
333 and the one defined by the ISO standard:
334
335 <itemize>
336
337 <item>  The compiler allows single line comments that start with //. This
338         feature is disabled in strict ANSI mode.
339         <p>
340 <item>  The compiler allows unnamed parameters in parameter lists. The
341         compiler will not issue warnings about unused parameters that don't
342         have a name. This feature is disabled in strict ANSI mode.
343         <p>
344 <item>  The compiler has some additional keywords:
345         <p>
346         <itemize>
347         <item><tt/asm/
348         <item><tt/__asm__/
349         <item><tt/fastcall/
350         <item><tt/__fastcall__/
351         <item><tt/__AX__/
352         <item><tt/__EAX__/
353         <item><tt/__func__/
354         <item><tt/__attribute__/
355         </itemize>
356         <p>
357         The keywords without the underlines are disabled in strict ANSI mode.
358         <p>
359 <item>  The datatypes "float" and "double" are not available.
360         <p>
361 <item>  The compiler does not support bit fields.
362         <p>
363 <item>  Initialization of local variables is only possible for scalar data
364         types (that is, not for arrays and structs).
365         <p>
366 <item>  Because of the "wrong" order of the parameters on the stack, there is
367         an additional macro needed to access parameters in a variable
368         parameter list in a C function.
369         <p>
370 <item>  Functions may not return structs. However, struct assignment *is*
371         possible.
372         <p>
373 <item>  Part of the C library is available only with fastcall calling
374         conventions (see below). This means, that you may not mix pointers to
375         those functions with pointers to user written functions.
376         <p>
377 </itemize>
378
379 There may be some more minor differences, I'm currently not aware off. The
380 biggest problem is the missing float data type. With this limitation in
381 mind, you should be able to write fairly portable code.
382
383
384
385 <sect>Extensions<p>
386
387 This cc65 version has some extensions to the ISO C standard.
388
389 <itemize>
390
391 <item>  The compiler allows // comments (like in C++ and in the proposed C9x
392         standard). This feature is disabled by <tt><ref id="option-A"
393         name="-A"></tt>.
394         <p>
395
396 <item>  The compiler allows to insert assembler statements into the output
397         file. The syntax is
398
399         <tscreen><verb>
400         asm (&lt;string literal&gt;) ;
401         </verb></tscreen>
402         or
403         <tscreen><verb>
404         __asm__ (&lt;string literal&gt;) ;
405         </verb></tscreen>
406
407         The first form is in the user namespace and is disabled if the <tt/-A/
408         switch is given.
409
410         The given string is inserted literally into the output file, and a
411         newline is appended. The statements in this string are not checked by
412         the compiler, so be careful!
413
414         The asm statement may be used inside a function and on global file
415         level.
416         <p>
417
418 <item>  There is a special calling convention named "fastcall". This calling
419         convention is currently only usable for functions written in
420         assembler. The syntax for a function declaration using fastcall is
421
422         <tscreen><verb>
423         <tt/&lt;return type&gt; fastcall &lt;function name&gt; (&lt;parameter list&gt;)/
424         </verb></tscreen>
425         or
426         <tscreen><verb>
427         <tt/&lt;return type&gt; __fastcall__ &lt;function name&gt; (&lt;parameter list&gt;)/
428         </verb></tscreen>
429         An example would be
430         <tscreen><verb>
431         <tt/void __fastcall__ f (unsigned char c)/
432         </verb></tscreen>
433         The first form of the fastcall keyword is in the user namespace and is
434         therefore disabled in strict ANSI mode.
435
436         For functions declared as <tt/fastcall/, the rightmost parameter is not
437         pushed on the stack but left in the primary register when the function
438         is called. This will reduce the cost when calling assembler functions
439         significantly, especially when the function itself is rather small.
440         <p>
441
442 <item>  There are two pseudo variables named <tt/__AX__/ and <tt/__EAX__/.
443         Both refer to the primary register that is used by the compiler to
444         evaluate expressions or return function results. <tt/__AX__/ is of
445         type <tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/
446         respectively. The pseudo variables may be used as lvalue and rvalue as
447         every other variable. They are most useful together with short
448         sequences of assembler code. For example, the macro
449
450         <tscreen><verb>
451         #define hi(x) (__AX__=(x),asm("\ttxa\n\tldx\t#$00",__AX__)
452         </verb></tscreen>
453
454         will give the high byte of any unsigned value.
455         <p>
456
457 <item>  Inside a function, the identifier <tt/__func__/ gives the name of the
458         current function as a string. Outside of functions, <tt/__func__/ is
459         undefined.
460         Example:
461
462         <tscreen><verb>
463         #define PRINT_DEBUG(s)  printf ("%s: %s\n", __func__, s);
464         </verb></tscreen>
465
466         The macro will print the name of the current function plus a given
467         string.
468         <p>
469
470 <item>  cc65 allows the initialization of <tt/void/ variables. This may be
471         used to create variable structures that are more compatible with
472         interfaces written for assembler languages. Here is an example:
473
474         <tscreen><verb>
475         void GCmd = {   (char)3, (unsigned)0x2000, (unsigned)0x3000 };
476         </verb></tscreen>
477
478         This will be translated as follows:
479
480         <tscreen><verb>
481         _GCmd:
482                 .byte   3
483                 .word   $2000
484                 .word   $3000
485         </verb></tscreen>
486
487         Since the variable is of type <tt/void/ you may not use it as is.
488         However, taking the address of the variable results in a <tt/void*/
489         which may be passed to any function expecting a pointer.
490
491         See the <htmlurl url="geos.html" name="GEOS library"> for examples on
492         how to use this feature.
493         <p>
494
495 </itemize>
496 <p>
497
498
499 <sect>Predefined macros<p>
500
501 The compiler defines several macros at startup:
502
503 <descrip>
504
505   <tag><tt>__CC65__</tt></tag>
506
507   This macro is always defined. Its value is the version number of the
508   compiler in hex. Version 2.0.1 of the compiler will have this macro defined
509   as 0x0201.
510
511   <tag><tt>__CBM__</tt></tag>
512
513   This macro is defined if the target system is one of the CBM targets.
514
515   <tag><tt>__C64__</tt></tag>
516
517   This macro is defined if the target is the c64 (-t c64).
518
519   <tag><tt>__C128__</tt></tag>
520
521   This macro is defined if the target is the c128 (-t c128).
522
523   <tag><tt>__PLUS4__</tt></tag>
524
525   This macro is defined if the target is the plus/4 (-t plus4).
526
527   <tag><tt>__CBM610__</tt></tag>
528
529   This macro is defined if the target is one of the CBM 600/700 family of
530   computers (called B series in the US).
531
532   <tag><tt>__PET__</tt></tag>
533
534   This macro is defined if the target is the PET family of computers (-t pet).
535
536   <tag><tt>__ATARI__</tt></tag>
537
538   This macro is defined if the target is one of the Atari computers
539   (400/800/130XL/800XL).
540
541   <tag><tt>__APPLE2__</tt></tag>
542
543   This macro is defined if the target is the Apple ][ (-t apple2).
544
545   <tag><tt>__GEOS__</tt></tag>
546
547   This macro is defined if you are compiling for the GEOS system (-t geos).
548
549   <tag><tt>__FILE__</tt></tag>
550
551   This macro expands to a string containing the name of the C source file.
552
553   <tag><tt>__LINE__</tt></tag>
554
555   This macro expands to the current line number.
556
557   <tag><tt>__STRICT_ANSI__</tt></tag>
558
559   This macro is defined to 1 if the <tt/-A/ compiler option was given, and
560   undefined otherwise.
561
562   <tag><tt>__OPT__</tt></tag>
563
564   Is defined if the compiler was called with the <tt/-O/ command line option.
565
566   <tag><tt>__OPT_i__</tt></tag>
567
568   Is defined if the compiler was called with the <tt/-Oi/ command line option.
569
570   <tag><tt>__OPT_r__</tt></tag>
571
572   Is defined if the compiler was called with the <tt/-Or/ command line option.
573
574   <tag><tt>__OPT_s__</tt></tag>
575
576   Is defined if the compiler was called with the <tt/-Os/ command line option.
577
578 </descrip>
579
580
581 <sect>#pragmas<label id="pragmas"><p>
582
583 The compiler understands some pragmas that may be used to change code
584 generation and other stuff.
585
586
587 <sect1><tt>#pragma bssseg (&lt;name&gt;)</tt><p>
588
589   This pragma changes the name used for the BSS segment (the BSS segment
590   is used to store uninitialized data). The argument is a string enclosed
591   in double quotes.
592
593   Note: The default linker configuration file does only map the standard
594   segments. If you use other segments, you have to create a new linker
595   configuration file.
596
597   Beware: The startup code will zero only the default BSS segment. If you
598   use another BSS segment, you have to do that yourself, otherwise
599   uninitialized variables do not have the value zero.
600
601   Example:
602   <tscreen><verb>
603         #pragma bssseg ("MyBSS")
604   </verb></tscreen>
605
606
607 <sect1><tt>#pragma checkstack (&lt;const int&gt;)</tt><label
608 id="pragma-checkstack"><p>
609
610   Tells the compiler to insert calls to a stack checking subroutine to detect
611   stack overflows. The stack checking code will lead to somewhat larger and
612   slower programs, so you may want to use this pragma when debugging your
613   program and switch it off for the release version. If a stack overflow is
614   detected, the program is aborted.
615
616   If the argument is zero, stack checks are disabled (the default), otherwise
617   they're enabled.
618
619
620 <sect1><tt>#pragma codeseg (&lt;name&gt;)</tt><p>
621
622   This pragma changes the name used for the CODE segment (the CODE segment
623   is used to store executable code). The argument is a string enclosed in
624   double quotes.
625
626   Note: The default linker configuration file does only map the standard
627   segments. If you use other segments, you have to create a new linker
628   configuration file.
629
630   Example:
631   <tscreen><verb>
632         #pragma bssseg ("MyCODE")
633   </verb></tscreen>
634
635
636 <sect1><tt>#pragma dataseg (&lt;name&gt;)</tt><p>
637
638   This pragma changes the name used for the DATA segment (the DATA segment
639   is used to store initialized data). The argument is a string enclosed in
640   double quotes.
641
642   Note: The default linker configuration file does only map the standard
643   segments. If you use other segments, you have to create a new linker
644   configuration file.
645
646   Example:
647   <tscreen><verb>
648         #pragma bssseg ("MyDATA")
649   </verb></tscreen>
650
651
652 <sect1><tt>#pragma rodataseg (&lt;name&gt;)</tt><p>
653
654   This pragma changes the name used for the RODATA segment (the RODATA
655   segment is used to store readonly data). The argument is a string
656   enclosed in double quotes.
657
658   Note: The default linker configuration file does only map the standard
659   segments. If you use other segments, you have to create a new linker
660   configuration file.
661
662   Example:
663   <tscreen><verb>
664         #pragma bssseg ("MyRODATA")
665   </verb></tscreen>
666
667
668 <sect1><tt>#pragma regvaraddr (&lt;const int&gt;)</tt><p>
669
670   The compiler does not allow to take the address of register variables.
671   The regvaraddr pragma changes this. Taking the address of a register
672   variable is allowed after using this pragma, if the argument is not
673   zero. Using an argument of zero changes back to the default behaviour.
674
675   Beware: The C standard does not allow taking the address of a variable
676   declared as register. So your programs become non-portable if you use
677   this pragma. In addition, your program may not work. This is usually the
678   case if a subroutine is called with the address of a register variable,
679   and this subroutine (or a subroutine called from there) uses itself
680   register variables. So be careful with this #pragma.
681
682   Example:
683   <tscreen><verb>
684         #pragma regvaraddr(1)   /* Allow taking the address
685                                  * of register variables
686                                  */
687   </verb></tscreen>
688
689
690 <sect1><tt>#pragma signedchars (&lt;const int&gt;)</tt><label
691 id="pragma-signedchars"><p>
692
693   Changes the signedness of the default character type. If the argument
694   is not zero, default characters are signed, otherwise characters are
695   unsigned. The compiler default is to make characters unsigned since this
696   creates a lot better code. This default may be overridden by the
697   <tt/--signed-chars/ command line option.
698
699
700 <sect1><tt>#pragma staticlocals (&lt;const int&gt;)</tt><label
701 id="pragma-staticlocals"<p>
702
703   Use variables in the bss segment instead of variables on the stack. This
704   pragma changes the default set by the compiler option <tt/-Cl/. If the
705   argument is not zero, local variables are allocated in the BSS segment,
706   leading to shorter and in most cases faster, but non-reentrant code.
707
708
709 <sect1><tt>#pragma zpsym (&lt;name&gt;)</tt><p>
710
711   Tell the compiler that the - previously as external declared - symbol with
712   the given name is a zero page symbol (usually from an assembler file).
713   The compiler will create a matching import declaration for the assembler.
714
715   Example:
716   <tscreen><verb>
717         extern int foo;
718         #pragma zpsym ("foo");  /* foo is in the zeropage */
719   </verb></tscreen>
720
721
722
723
724 <sect>Bugs/Feedback<p>
725
726 If you have problems using the compiler, if you find any bugs, or if you're
727 doing something interesting with it, I would be glad to hear from you. Feel
728 free to contact me by email (<htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">).
729
730
731
732 <sect>Copyright<p>
733
734 This is the original compiler copyright:
735
736 <tscreen><verb>
737 --------------------------------------------------------------------------
738   -*- Mode: Text -*-
739
740      This is the copyright notice for RA65, LINK65, LIBR65, and other
741   Atari 8-bit programs.  Said programs are Copyright 1989, by John R.
742   Dunning.  All rights reserved, with the following exceptions:
743
744       Anyone may copy or redistribute these programs, provided that:
745
746   1:  You don't charge anything for the copy.  It is permissable to
747       charge a nominal fee for media, etc.
748
749   2:  All source code and documentation for the programs is made
750       available as part of the distribution.
751
752   3:  This copyright notice is preserved verbatim, and included in
753       the distribution.
754
755       You are allowed to modify these programs, and redistribute the
756   modified versions, provided that the modifications are clearly noted.
757
758       There is NO WARRANTY with this software, it comes as is, and is
759   distributed in the hope that it may be useful.
760
761       This copyright notice applies to any program which contains
762   this text, or the refers to this file.
763
764       This copyright notice is based on the one published by the Free
765   Software Foundation, sometimes known as the GNU project.  The idea
766   is the same as theirs, ie the software is free, and is intended to
767   stay that way.  Everybody has the right to copy, modify, and re-
768   distribute this software.  Nobody has the right to prevent anyone
769   else from copying, modifying or redistributing it.
770
771 --------------------------------------------------------------------------
772 </verb></tscreen>
773
774 In acknowledgment of this copyright, I will place my own changes to the
775 compiler under the same copyright. Please note however, that the library
776 and all binutils are covered by another copyright, and that I'm planning
777 to do a complete rewrite of the compiler, after which the compiler
778 copyright will also change.
779
780 For the list of changes requested by this copyright see newvers.txt.
781
782
783 </article>
784