3

给定以下 CA65 代码:

foo = $82

.scope
        LDA #$ff
        STA foo*$40
.endscope

我收到此错误消息:

foo.s(5): Error: Range error (8320 not in [0..255])

有趣的是,以下版本按预期工作:

foo = $82

        LDA #$ff
        STA foo*$40

那么我如何让这个在 a 中工作.scope呢?

4

2 回答 2

4

如果您从.scopeor内部引用全局符号.proc,有时您必须明确声明该符号在全局范围内而不是内部范围内。为此,您可以在符号前添加“paamayim nekudotayim”(冒号对)运算符:::spam。我注意到这一点主要是与.if.

以下在 ca65 中编译:

foo = $82

.scope
        LDA #$ff
        STA ::foo*$40
.endscope
于 2013-09-05T13:19:52.040 回答
3

我不确定为什么scope会导致问题,但看起来您需要告诉汇编器 STA 是绝对的,而不是它推断的零页引用:

foo = $82

.scope
        LDA #$ff
        STA a:foo*$40
.endscope
于 2013-05-17T18:36:09.290 回答