CA65: "Ошибка диапазона" из 16-битного вычисленного адреса
Учитывая следующий код 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 ответа
Решение
Если вы имеете в виду глобальный символ изнутри .scope
или же .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