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_8API, ориентированный на значение, делает семантику 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