mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
Improved the compiler documentation, a little bit.
This commit is contained in:
parent
bbb6f89731
commit
b49fd26d16
@ -3,7 +3,7 @@
|
||||
<article>
|
||||
<title>cc65 Users Guide
|
||||
<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
|
||||
<date>2015-04-21
|
||||
<date>2015-05-26
|
||||
|
||||
<abstract>
|
||||
cc65 is a C compiler for 6502 targets. It supports several 6502 based home
|
||||
@ -558,10 +558,10 @@ and the one defined by the ISO standard:
|
||||
be passed as parameters by value. However, struct assignment *is*
|
||||
possible.
|
||||
<p>
|
||||
<item> Most of the C library is available only with the fastcall calling
|
||||
convention (<ref id="extension-fastcall" name="see below">). It means
|
||||
that you must not mix pointers to those functions with pointers to
|
||||
user-written, cdecl functions.
|
||||
<item> Most of the C library is available with only the fastcall calling
|
||||
convention (<ref id="extension-fastcall" name="see below">). It means
|
||||
that you must not mix pointers to those functions with pointers to
|
||||
user-written, cdecl functions (the calling conventions are incompatible).
|
||||
<p>
|
||||
<item> The <tt/volatile/ keyword doesn't have an effect. This is not as bad
|
||||
as it sounds, since the 6502 has so few registers that it isn't
|
||||
@ -600,30 +600,30 @@ This cc65 version has some extensions to the ISO C standard.
|
||||
<p>
|
||||
|
||||
<label id="extension-fastcall">
|
||||
<item> The normal calling convention -- for non-variadic functions -- is
|
||||
named "fastcall". The syntax for a function declaration that
|
||||
<em/explicitly/ uses fastcall is
|
||||
<item> The normal calling convention -- for non-variadic functions -- is
|
||||
named "fastcall". The syntax for a function declaration that
|
||||
<em/explicitly/ uses fastcall is
|
||||
|
||||
<tscreen><verb>
|
||||
<return type> fastcall <function name> (<parameter list>)
|
||||
</verb></tscreen>
|
||||
or
|
||||
<tscreen><verb>
|
||||
<return type> __fastcall__ <function name> (<parameter list>)
|
||||
</verb></tscreen>
|
||||
An example would be
|
||||
<tscreen><verb>
|
||||
void __fastcall__ f (unsigned char c)
|
||||
</verb></tscreen>
|
||||
The first form of the fastcall keyword is in the user namespace and can
|
||||
therefore be disabled with the <tt><ref id="option--standard"
|
||||
<tscreen><verb>
|
||||
<return type> fastcall <function name> (<parameter list>)
|
||||
</verb></tscreen>
|
||||
or
|
||||
<tscreen><verb>
|
||||
<return type> __fastcall__ <function name> (<parameter list>)
|
||||
</verb></tscreen>
|
||||
An example is
|
||||
<tscreen><verb>
|
||||
void __fastcall__ f (unsigned char c)
|
||||
</verb></tscreen>
|
||||
The first form of the fastcall keyword is in the user namespace and can
|
||||
therefore be disabled with the <tt><ref id="option--standard"
|
||||
name="--standard"></tt> command line option.
|
||||
|
||||
For functions that are <tt/fastcall/, the rightmost parameter is not
|
||||
pushed on the stack but left in the primary register when the function
|
||||
is called. That significantly reduces the cost of calling functions.
|
||||
<newline><newline>
|
||||
<p>
|
||||
For functions that are <tt/fastcall/, the rightmost parameter is not
|
||||
pushed on the stack but left in the primary register when the function
|
||||
is called. That significantly reduces the cost of calling those functions.
|
||||
<newline><newline>
|
||||
<p>
|
||||
|
||||
<item> There is another calling convention named "cdecl". Variadic functions
|
||||
(their prototypes have an ellipsis [<tt/.../]) always use that
|
||||
@ -636,14 +636,14 @@ This cc65 version has some extensions to the ISO C standard.
|
||||
<tscreen><verb>
|
||||
<return type> __cdecl__ <function name> (<parameter list>)
|
||||
</verb></tscreen>
|
||||
An example would be
|
||||
An example is
|
||||
<tscreen><verb>
|
||||
int * __cdecl__ f (unsigned char c)
|
||||
int* __cdecl__ f (unsigned char c)
|
||||
</verb></tscreen>
|
||||
|
||||
The first form of the cdecl keyword is in the user namespace;
|
||||
and therefore, can be disabled with the <tt><ref id="option--standard"
|
||||
name="--standard"></tt> command-line option.
|
||||
and therefore, can be disabled with the <tt/<ref id="option--standard"
|
||||
name="--standard">/ command-line option.
|
||||
|
||||
For functions that are <tt/cdecl/, the rightmost parameter is pushed
|
||||
onto the stack before the function is called. That increases the cost
|
||||
@ -701,7 +701,7 @@ This cc65 version has some extensions to the ISO C standard.
|
||||
</verb></tscreen>
|
||||
|
||||
Since the variable is of type <tt/void/ you may not use it as is.
|
||||
However, taking the address of the variable results in a <tt/void */
|
||||
However, taking the address of the variable results in a <tt/void*/
|
||||
which may be passed to any function expecting a pointer.
|
||||
|
||||
See the <url url="geos.html" name="GEOS library document"> for examples
|
||||
|
@ -597,7 +597,7 @@ variable which is stored in the zero page memory space in order to allow
|
||||
for retrieval of each character in the string via the indirect indexed
|
||||
addressing mode.
|
||||
|
||||
The assembly language routine is stored in a file named
|
||||
The assembly language routine is stored in a file names
|
||||
"rs232_tx.s" and is shown below:
|
||||
|
||||
<tscreen><code>
|
||||
@ -681,7 +681,7 @@ all of the behind-the-scene work is transparent to the user.
|
||||
#define TX_FIFO_FULL (FIFO_STATUS & 0x01)
|
||||
#define RX_FIFO_EMPTY (FIFO_STATUS & 0x02)
|
||||
|
||||
extern void wait (void);
|
||||
extern void wait ();
|
||||
extern void __fastcall__ rs232_tx (char *str);
|
||||
|
||||
int main () {
|
||||
|
Loading…
Reference in New Issue
Block a user