179. Bvs с относительной адресацией

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

Урок 179 из 356 · tests/chapter_01_cpu/test_179_BVS_relative.py

Предварительное условие: на шаге 171 была добавлена `instructions.bvs. На этом шаге добавьте эти фрагменты в emulator/cpu/opcodes.py`:

from emulator.cpu.instructions import bvs

def bvs_relative(cpu: CPU):
    offset = relative(cpu)
    bvs(cpu, offset)

OPCODE_TABLE[0x70] = bvs_relative

Встройте импорт и сопоставление в существующие сгруппированные структуры.

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

`relative считывает смещение и преобразует его в знаковое, а затем instructions.bvs` из шага 171 выполняет переход относительно PC после операнда, когда флаг переполнения установлен.

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

Вне рамок этого шага: шаг 180 независимо добавляет `addressing_modes.indirect для JMP. Инструкция jmp` и API опкодов абсолютного/косвенного JMP появляются только на последующих шагах 181–183 и не должны добавляться здесь.

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

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