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
Другие вопросы по тегам