我在 6502 组件中打印到屏幕上
在我写的监视器中
STA $01, y to store the value at the pointer
但是,当我在此行上按 Enter 时,它说指令无效?
有任何想法吗...?
您最可能想要的寻址模式是间接索引
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 索引仅适用于LDX
和STX
。看起来您的监视器组装者不够聪明,无法做到这一点。
而且因为您的评论说的是指针,所以您可能应该将指针存储在第零页上:
LDA #<screen
STA ptr
LDA #>screen
STA ptr+1
然后使用间接后索引寻址,如:
STA (ptr),Y
某些监视器使用您键入的位数在零页索引和绝对索引寻址模式之间进行选择。请注意,这两种模式的语义并不相同。sta $0001,x
除了andsta $0001,y
是三个字节,而是两个的事实之外sta $01,x
,前两条指令将在索引寄存器为 $FF 时写入地址 $0100,后者将始终存储到零页地址(在本例中为 $00)。这使得使用例如lda $FF,x
从地址 (x-1) 获取字节成为可能,尽管通常零页索引模式仅适用于 x(而不是 y)作为索引。