143. Instruction bit

реализовать независимое от режима адресации поведение BIT.

Урок 143 из 356 · tests/chapter_01_cpu/test_143_instruction_bit.py

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

BIT имеет необычную семантику флагов: Z определяется как A AND value, тогда как N и V копируют биты операнда, поэтому один общий примитив предотвращает расхождение обработчиков разных режимов адресации.

На этом шаге, после уроков по EOR, добавьте в `emulator/cpu/instructions.py` ровно следующий символ:

def bit(cpu: CPU, value: int):
    result_8 = (cpu.a & value) & 0xFF

    # Flags:
    cpu.flags.set_zero_flag(result_8 == 0)
    cpu.flags.set_negative_flag((value & 0b1000_0000) != 0)
    cpu.flags.set_overflow_flag((value & 0b0100_0000) != 0)

BIT разделяет проверку на ноль и два копируемых бита операнда: Z отражает `A & value`, тогда как N и V отражают биты 7 и 6 значения. A, Carry, память, X, Y и PC неизменны; перезаписываются только Z/N/V.

Заблуждение: BIT не сохраняет `A & value в A и не вычисляет N/V по результату этого AND. Вне рамок урока: импорт bit в emulator/cpu/opcodes.py` и подключение опкодов для нулевой страницы и абсолютного режима — уроки 144–145.

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

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