6502 Инструкция по сборке недействительна

Печатаю на экран в 6502 сборке

В мониторе я написал

            STA $01, y    to store the value at the pointer

Однако, когда я нажимаю ввод в этой строке, он говорит, что инструкция недействительна?

Любые идеи...?


person Surz    schedule 13.03.2014    source источник


Ответы (4)


Скорее всего, вам нужен режим адресации косвенная индексация

STA ($01), Y

Где, например.

A = '@', Y = 81,   Mem dump:

0001  00
0002  04

И результат будет:

     01234 <-- columns
    +--------
 0  | 
 1  |
 2  | @
    |
rows
person Aki Suihkonen    schedule 13.03.2014

Адрес zp, y можно использовать только с регистром X:

STX $01,y
person Jens Björnhager    schedule 13.03.2014
comment
Я должен писать на экран, используя косвенную постиндексированную адресацию (нулевая страница), и читать строку, используя адресацию с абсолютным индексом. Разве это не делается с помощью y register? - person Surz; 13.03.2014

Ассемблеры 6502 в этом случае обычно генерируют инструкцию с абсолютным y-индексом, потому что y-indexed с нулевой страницей доступен только для LDX и STX. Похоже, ваш сборщик мониторов недостаточно умен для этого.

И поскольку в вашем комментарии говорится об указателе, вам, вероятно, следует сохранить указатель на нулевой странице:

LDA #<screen
STA ptr
LDA #>screen
STA ptr+1

а затем используйте косвенную адресацию с постиндексированием, например:

STA (ptr),Y
person 0xF    schedule 23.06.2014

Некоторые мониторы используют количество вводимых цифр для выбора между режимами адресации с нулевым индексом и абсолютным индексом. Обратите внимание, что семантика двух режимов не одинакова. Помимо того, что sta $0001,x и sta $0001,y - три байта, а sta $01,x - два, первые две инструкции будут писать по адресу $ 0100, когда индексный регистр равен $ FF, последняя всегда будет сохранять адрес нулевой страницы (в данном случае $ 00). Это позволяет использовать, например, lda $FF,x для извлечения байта из адреса (x-1), хотя обычно режим индексирования нулевой страницы доступен только с x (не y) в качестве индекса.

person supercat    schedule 25.10.2017