正如迈克尔在 OP 评论中所描述的那样,LAX 是一个很好的解决方案,只要您:
- 正在为原始的 NMOS 6502 编写,
- 对使用未记录的操作码没有哲学上的反对意见,并且
- 不需要保存(或以其他方式保护)累加器 (.A) 内容
LAX 从内存位置加载 .A 和 .X 值,或立即值零(见下文)。寻址模式:
Mnemonic Bytes Cycles
LAX #00 AB 00 2
LAX abcd AF cd ab 4
LAX abcd,Y BF cd ab 4 (+1 if crossing page boundary)
LAX ab A7 ab 3
LAX ab,Y B7 ab 4
LAX (ab,X) A3 ab 6
LAX (ab),Y B3 ab 5 (+1 if crossing page boundary)
LAX被记录LAX #nn
为缺少立即寻址模式( 4 个周期 ( )。LAX #$00
LDA #$00; LDX #$00
LDA #$00; TAX
此 DASM 宏注入字节序列以响应自定义助记符(ZAX
、零 .A 和 .X):
MAC ZAX
DC.W #$00AB ; [2] LAX Immediate Zero (only stable when operand is zero)
ENDM
这是我编写的文本位图渲染例程的简短摘录,该例程使用 LAX 来索引字节对地址表:
.dodraw LAX (_TEXTADDR),Y ; [5] get first character of pair from text-buffer
LDA _CHARTABL,X ; [4] get first glyph data address lo-byte
STA _GLYPADD1 ; [3] ZP set first glyph data address lo-byte
LDA _CHARTABH,X ; [4] get first glyph data address hi-byte
STA _GLYPADD1+1 ; [3] ZP set first glyph data address hi-byte
etc...