125. Инструкция OR A

реализовать поведение ORA, не зависящее от адресации.

Урок 125 из 356 · tests/chapter_01_cpu/test_125_instruction_or_a.py

Зачем нужен этот шаг

Единый примитив ORA, ориентированный на значение, централизует правила вычисления включающего ИЛИ и установки флагов, прежде чем обработчики опкодов введут отдельные формы адресации.

На этом шаге, после того как уроки 116-124 завершают AND, добавьте только этот символ в `emulator/cpu/instructions.py`:

def or_a(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

API, ориентированный на значение, делает семантику ORA независимой от адресации. Восьмибитный результат сохраняется в A; Zero отражает равенство нулю, а Negative отражает бит 7 результата. Carry, Overflow, память, X, Y и PC не меняются, поскольку `or_a` их не затрагивает.

Заблуждение: ORA означает включающее побитовое ИЛИ, а не XOR, а `value — это не адрес на шине. Вне рамок: импорт or_a в emulator/cpu/opcodes.py` и все обработчики ORA (уроки 126-133), а также символы EOR и BIT, вводимые в уроках 134 и 143.

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_125_instruction_or_a.py -v