131. 绝对,Y ORA
添加 ORA absolute,Y 操作码 ``0x19``。
第 131 / 356 · tests/chapter_01_cpu/test_131_ORA_absolute_y.py
此步骤存在的原因
以 Y 变址的绝对寻址形式让 ORA 能够通过任一变址寄存器实现等效访问,并继续复用同一个与寻址方式无关的原语。
在此步骤中,继第 125-130 课之后,`or_a 及 ORA 的前五种寻址模式已经存在。请在 emulator/cpu/opcodes.py` 中准确添加以下内容:
def ora_absolute_y(cpu: CPU):
addr = absolute_y(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x19: ora_absolute_y,
}`emulator/cpu/addressing_modes.py::absolute_y 获取小端序基址字并加上 Y;处理函数随后读取该有效地址,并将读到的值传给 emulator/cpu/instructions.py::or_a`。A 与 Z/N 可能改变;Carry/Overflow、内存、X 和 Y 保持不变,操作码加字使 PC 前进三个字节。
常见误解:Y 变址的是解码后的地址,而不是任一操作数字节,处理函数必须读取内存,而不是直接对地址本身做或运算。不在本步骤范围内:ORA (indirect,X)/(indirect),Y(第 132-133 课)以及所有 EOR/BIT 相关工作(第 134-145 课)。
运行本课
uv run pytest tests/chapter_01_cpu/test_131_ORA_absolute_y.py -v