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) в качестве индекса.