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

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

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

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

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

Есть идеи...?

4 ответа

Решение

Режим адресации, который вы, скорее всего, хотите, индексируется косвенно

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-индексированную инструкцию, поскольку zeropage 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) в качестве индекса.

Другие вопросы по тегам