178. Bvc с относительной адресацией

подключить BVC к её относительному опкоду.

Урок 178 из 356 · tests/chapter_01_cpu/test_178_BVC_relative.py

Предварительное условие: на шаге 177 был подключён BMI. На этом шаге добавьте следующее в `emulator/cpu/opcodes.py`:

from emulator.cpu.instructions import bvc

def bvc_relative(cpu: CPU):
    offset = relative(cpu)
    bvc(cpu, offset)

OPCODE_TABLE[0x50] = bvc_relative

Импорт и запись следует добавить к существующему сгруппированному импорту и литералу таблицы.

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

Обработчик декодирует один знаковый операнд, а затем `instructions.bvc` из шага 170 принимает решение о переходе при сброшенном флаге переполнения.

Инварианты: опкод `0x50` всегда считывает свой операнд; при сброшенном флаге переполнения смещение применяется относительно PC после операнда, а при установленном флаге переполнения PC остаётся на том же месте. Ни флаг, ни память не изменяются. Заблуждение: BVC не сбрасывает флаг переполнения и не выводит переполнение из смещения перехода; она лишь проверяет текущий флаг.

Вне рамок этого шага: подключение опкода BVS — это шаг 179. Косвенная адресация JMP следует на шаге 180.

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

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