给定以下 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
呢?
如果您从.scope
or内部引用全局符号.proc
,有时您必须明确声明该符号在全局范围内而不是内部范围内。为此,您可以在符号前添加“paamayim nekudotayim”(冒号对)运算符:::spam
。我注意到这一点主要是与.if
.
以下在 ca65 中编译:
foo = $82
.scope
LDA #$ff
STA ::foo*$40
.endscope
我不确定为什么scope
会导致问题,但看起来您需要告诉汇编器 STA 是绝对的,而不是它推断的零页引用:
foo = $82
.scope
LDA #$ff
STA a:foo*$40
.endscope