172. Bcc с относительной адресацией

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

Урок 172 из 356 · tests/chapter_01_cpu/test_172_BCC_relative.py

На этом шаге добавьте эти фрагменты в `emulator/cpu/opcodes.py`:

from emulator.cpu.instructions import bcc
from emulator.cpu.addressing_modes import relative

def bcc_relative(cpu: CPU):
    offset = relative(cpu)
    bcc(cpu, offset)

OPCODE_TABLE[0x90] = bcc_relative

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

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

`CPU.step уже считал опкод, relative считывает однобайтовый операнд и преобразует его в знаковый, а bcc` из шага 164 применяет это смещение только при сброшенном флаге переноса.

Инварианты: опкод `0x90 сопоставляется с обработчиком с одним аргументом; на любом пути операнд считывается, поэтому невыполненный переход завершается на 0x8002, а переход со смещением +5 ведёт на 0x8007`. Сам обработчик не изменяет флаги и память. Заблуждение: смещение задаётся относительно PC после операнда, а не относительно адреса опкода, и оно должно считываться даже тогда, когда флаг переноса не даёт выполнить переход.

Вне рамок этого шага: обработчики/записи таблицы для BCS, BEQ, BNE, BPL, BMI, BVC и BVS — это шаги 173–179. Косвенная адресация JMP начинается с шага 180.

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

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