CA65:来自16位计算地址的“范围错误”

时间:2013-05-17 18:21:32

标签: assembly 6502 c64 commodore ca65

鉴于以下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

那么我如何才能在.scope内完成这项工作?

2 个答案:

答案 0 :(得分:4)

如果您在.scope.proc内引用全局符号,有时您必须明确声明该符号位于全局范围内而不是内部范围。您可以通过在符号::spam之前添加“paamayim nekudotayim”(冒号对)运算符来执行此操作。我注意到这一点主要是.if

以下编译在ca65中:

foo = $82

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

答案 1 :(得分:3)

我不确定scope导致问题的原因,但看起来您需要告诉汇编程序STA是绝对的,而不是它推断的Zero Page引用:

foo = $82

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