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.
This archive was generated by hypermail 2.1.3 : 2004-01-12 16:58:56 CET