046. Ldy 绝对,X
添加 LDY 绝对,X 寻址($BC)。
第 46 / 356 · tests/chapter_01_cpu/test_046_LDY_absolute_x.py
要更新的文件
emulator/cpu/opcodes.py位置
opcodes imports of absolute_x and ldy
opcodes.ldy_absolute_x
opcodes.OPCODE_TABLE[$BC]为什么需要这一步
本课通过复用绝对,X 地址解析来完成 LDY 操作码家族,然后读取有效地址并套用已有的 ldy 行为。
完整示例实现
# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import absolute_x
from emulator.cpu.instructions import ldy
def ldy_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
ldy(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xBC: ldy_absolute_x,
}重要不变量
- $BC 映射到 ldy_absolute_x 并消耗两个操作数字节
- 加到解码出的 16 位基址上的是 X,而不是 Y
- 有效地址会先被读取,其值再传递给 ldy
ldy根据加载到的字节更新 Zero 和 Negative
常见误区
LDY 绝对,X 不会用目的寄存器 Y 进行变址;该编码明确使用的是 X。
范围之外
- STY 操作码处理函数
- 跨页周期惩罚
- 对 absolute_x 的修改
运行本课
uv run pytest tests/chapter_01_cpu/test_046_LDY_absolute_x.py -v