Re: [cc65] register vars

Date view Thread view Subject view

From: Ullrich von Bassewitz (uz_at_musoftware.de)
Date: 2003-01-20 07:16:53


Good morning!

Sorry for the delay, I'm still very busy with my new flat, so please bear with
me.

On Sat, Jan 18, 2003 at 02:21:07AM +0100, Stephan Lesch wrote:
> is there a way to use statically-declared register variables?

There are some ways, but using the "register" keyword is none of them. The
compiler accepts the "register" keyword for globals (as well as "auto"), but
this is an error in the compiler - it should issue an error message, but does
not. The problem is fixed, see the "Known Bugs" page.

Using static zero page locations:

  1. Use numeric addresses and hide them behind a define:

        #define XPos (*(unsigned char*)0xFC)
        ...
        XPos = 3;

  2. Declare the variables in an assembler module, export them using
     ".exportzp", and tell the compiler using the "#pragma zpsym" statement:

        ------------------foo.s---------------
        .exportzp       _XPos
        .zeropage
        _XPos:  .res    1
        --------------------------------------

        ------------------bar.c---------------
        extern unsigned char XPos;
        #pragma zpsym ("XPos")
        XPos = 3;
        --------------------------------------

     You may have to change the linker config when using this method, because
     the standard zeropage segment does not have any space left, so the
     variable declared in foo.s will generate a segment overflow.

Note that all this is not portable, neither to other C compilers, nor between
the supported machines (because of the zero page address used).

> I tried it with V 2.9.0, but the register vars declared on top level are
> mapped to the same zp location:

This is because the compiler should not accept the declaration in the first
place.

Regards


        Uz


-- 
Ullrich von Bassewitz                                  uz_at_musoftware.de
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.


Date view Thread view Subject view

This archive was generated by hypermail 2.1.3 : 2003-01-20 07:17:22 CET