【问题标题】:CA65: 'Range error' from 16-bit computed addressCA65:来自 16 位计算地址的“范围错误”
【发布时间】:2013-05-17 18:21:31
【问题描述】:
给定以下 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 中工作?
【问题讨论】:
标签:
assembly
6502
c64
commodore
ca65
【解决方案1】:
如果您从.scope 或.proc 中引用全局符号,有时您必须明确声明该符号在全局范围内而不是内部范围内。为此,您可以在符号前添加“paamayim nekudotayim”(冒号对)运算符:::spam。我主要通过.if 之类的东西注意到这一点。
以下在ca65中编译:
foo = $82
.scope
LDA #$ff
STA ::foo*$40
.endscope
【解决方案2】:
我不确定为什么 scope 会导致问题,但您似乎需要告诉汇编器 STA 是绝对的,而不是它推断的零页引用:
foo = $82
.scope
LDA #$ff
STA a:foo*$40
.endscope