176. Bpl с относительной адресацией
подключить BPL к её относительному опкоду.
Урок 176 из 356 · tests/chapter_01_cpu/test_176_BPL_relative.py
Предварительное условие: на шаге 175 был подключён BNE. На этом шаге добавьте следующее в `emulator/cpu/opcodes.py`:
from emulator.cpu.instructions import bpl
def bpl_relative(cpu: CPU):
offset = relative(cpu)
bpl(cpu, offset)
OPCODE_TABLE[0x10] = bpl_relativeВстройте импорт и запись в существующий сгруппированный импорт и литерал таблицы.
Зачем нужен этот шаг
`relative считывает операнд, а instructions.bpl` из шага 168 интерпретирует «плюс» как сброшенный флаг знака перед изменением PC.
Инварианты: `0x10` сопоставляется с обработчиком с одним аргументом; оба исхода считывают знаковый операнд; при сброшенном флаге знака переход выполняется относительно PC после операнда, а при установленном флаге знака — нет. Флаги и память остаются неизменными. Заблуждение: BPL не проверяет, положительно ли смещение или PC; она проверяет только флаг знака.
Вне рамок этого шага: подключение опкодов BMI/BVC/BVS вводится шагами 177–179, а косвенная адресация JMP — это шаг 180.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_176_BPL_relative.py -v