134. Instruction or e
реализовать независимое от адресации поведение EOR.
Урок 134 из 356 · tests/chapter_01_cpu/test_134_instruction_or_e.py
Зачем нужен этот шаг
Централизация семантики исключающего ИЛИ в ориентированном на значение примитиве позволяет каждому последующему опкоду EOR разделять идентичное поведение аккумулятора и флагов Zero/Negative.
На этом шаге, после всей работы над ORA, добавьте ровно этот символ в `emulator/cpu/instructions.py`:
def or_e(cpu: CPU, value: int):
result_8 = (cpu.a ^ value) & 0xFF
# Flags:
cpu.flags.set_zero_flag(result_8 == 0)
cpu.flags.set_negative_flag((result_8 & 0b1000_0000) != 0)
cpu.a = result_8Сигнатура, ориентированная на значение, отделяет семантику EOR от адресации. XOR маскируется до восьми бит, сохраняется в A и используется для вычисления Zero и Negative. Carry, Overflow, память, X, Y и PC неизменны, поскольку `or_e` их не затрагивает.
Заблуждение: несмотря на имя вспомогательной функции `or_e, EOR — это исключающее ИЛИ (^), а не включающее ИЛИ, и value не является адресом. Вне рамок: импорт or_e в emulator/cpu/opcodes.py`, каждый опкод EOR (135-142) и BIT (143-145).
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_134_instruction_or_e.py -v