Печатаю на экран в 6502 сборке
В мониторе я написал
STA $01, y to store the value at the pointer
Однако, когда я нажимаю ввод в этой строке, он говорит, что инструкция недействительна?
Любые идеи...?
Печатаю на экран в 6502 сборке
В мониторе я написал
STA $01, y to store the value at the pointer
Однако, когда я нажимаю ввод в этой строке, он говорит, что инструкция недействительна?
Любые идеи...?
Скорее всего, вам нужен режим адресации косвенная индексация
STA ($01), Y
Где, например.
A = '@', Y = 81, Mem dump:
0001 00
0002 04
И результат будет:
01234 <-- columns
+--------
0 |
1 |
2 | @
|
rows
Адрес zp, y можно использовать только с регистром X:
STX $01,y
Ассемблеры 6502 в этом случае обычно генерируют инструкцию с абсолютным y-индексом, потому что y-indexed с нулевой страницей доступен только для LDX
и STX
. Похоже, ваш сборщик мониторов недостаточно умен для этого.
И поскольку в вашем комментарии говорится об указателе, вам, вероятно, следует сохранить указатель на нулевой странице:
LDA #<screen
STA ptr
LDA #>screen
STA ptr+1
а затем используйте косвенную адресацию с постиндексированием, например:
STA (ptr),Y
Некоторые мониторы используют количество вводимых цифр для выбора между режимами адресации с нулевым индексом и абсолютным индексом. Обратите внимание, что семантика двух режимов не одинакова. Помимо того, что sta $0001,x
и sta $0001,y
- три байта, а sta $01,x
- два, первые две инструкции будут писать по адресу $ 0100, когда индексный регистр равен $ FF, последняя всегда будет сохранять адрес нулевой страницы (в данном случае $ 00). Это позволяет использовать, например, lda $FF,x
для извлечения байта из адреса (x-1), хотя обычно режим индексирования нулевой страницы доступен только с x (не y) в качестве индекса.