173. Bcs с относительной адресацией

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

Урок 173 из 356 · tests/chapter_01_cpu/test_173_BCS_relative.py

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

from emulator.cpu.instructions import bcs

def bcs_relative(cpu: CPU):
    offset = relative(cpu)
    bcs(cpu, offset)

OPCODE_TABLE[0xB0] = bcs_relative

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

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

Адресация остаётся в слое опкодов, тогда как `instructions.bcs` из шага 165 отвечает за дополняющее решение при установленном флаге переноса.

Инварианты: `0xB0 сопоставляется с bcs_relative(cpu)`; знаковый операнд считывается всегда; при установленном флаге переноса переход выполняется относительно PC после операнда, а при сброшенном флаге переноса этот PC остаётся неизменным. Флаги и память не затрагиваются. Заблуждение: BCS означает, что флаг переноса установлен, а не сброшен, и обработчик не должен дублировать преобразование в знаковое значение.

Вне рамок этого шага: подключение опкодов BEQ/BNE/BPL/BMI/BVC/BVS относится к шагам 174–179; адресация JMP — это шаг 180.

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

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