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