[cc65] Global/local labels and scopes (ca65)

Date view Thread view Subject view

From: Mats Andrén (matan325_at_student.liu.se)
Date: 2004-01-12 16:57:43


Hello there!

I just recently started using ca65 and I've been reading the 
ca65-documentation about scopes, local and global labels, and such. As far 
as I have understood, there is no way of simply declaring a label Global 
within a scope? Sometimes, when working with selfmodifying code (for 
optimization purposes) I find it useful to "break" the .scope-hierarchy. 
So, If I have some code like this:

;------------------------------------------------------
; MY EXAMPLE SUBROUTINE, WITH TWO DIFFERENT ENTRYPOINTS

EntrypointA:
.scope
       lda #$xx
       sta dest+1
       lda #$yy
       sta dest+2
       jmp MainFunction

EntrypointB:
       lda #$zz
       sta dest+1
       lda #$ww
       sta dest+2
       jmp MainFunction

MainFunction:
       jsr calculatesomevalue
dest: sta $ffff
       rts
.endscope

;------------------------------------------------------
; MAIN PROGRAM
       ...
       jsr EntrypointA
       jsr EntrypointB
       ...

;------------------------------------------------------

...it does not work out at all, of course, even though I still find this a 
sensible way to structure asm-code in some occasions.

Either I'll have to do one .scope/.endscope-pair for each Entrypoint to 
make EntrypointB being a globally visible lable, wich means I have to use 
some extensive naming scheme to keep track of all the scopes. "dest" would 
then loose it's local scope-"feeling", since I would have to preceed all 
access to it with some specific scope-information (scoopex::dest f.ex.) to 
access it.

..or either I'd have to put all the Entrypoints within a named scope (let's 
say "thisfunction") and access them with scope specific information, like this:

       jsr thisfunction::EntrypointA
       jsr thisfunction::EntrypointB

While it may not look so bad here in my example, it would introduce quite 
some naming overhead into my project (which I am converting right now from 
DASM-sources). The possibility to just declare EntrypointB as Global would 
be so much easier than all that explicit naming stuff. What do you say? Am 
I simply fucked up, or is there actually some sense in this? :) Maybe it is 
actually already possible to do this, only I haven't realized how to do it 
nicely?

I'm using:
ca65 V2.10.0 - (C) Copyright 1998-2003 Ullrich von Bassewitz

That should be 2004 now, right? :)

ca65 rules! Have a nice day!

(Also I have some problems using the BSS-segments, but that's another 
issue. Couldn't really find any code examples using it. Any hints on where 
to look?)

/Autoboy

----------------------------------------------------------------------
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 : 2004-01-12 16:58:56 CET