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