164. Инструкция bcc
реализовать поведение ветвления при сброшенном флаге переноса.
Урок 164 из 356 · tests/chapter_01_cpu/test_164_instruction_bcc.py
Зачем нужен этот шаг
Урок 163 уже возвращает смещение со знаком и оставляет PC на следующей инструкции. BCC отвечает только за проверку сброшенного флага переноса и прибавление целевого смещения.
На этом шаге добавьте в точности эту реализацию в `emulator/cpu/instructions.py::bcc`:
def bcc(cpu: CPU, offset: int):
if not cpu.flags.get_carry_flag():
cpu.pc = (cpu.pc + offset) & 0xFFFFМаска сохраняет 16-битное адресное пространство CPU.
Инварианты: при сброшенном флаге переноса прибавляется положительный, нулевой или отрицательный `offset по модулю 0x10000`; при установленном флаге переноса PC не изменяется. Флаги, регистры, кроме PC, и память не затрагиваются. Заблуждение: BCC означает *сброшенный* флаг переноса, и эта функция инструкции не должна сама считывать операнд или преобразовывать его знак.
Вне рамок этого шага: BCS/BEQ/BNE/BPL/BMI/BVC/BVS — уроки 165-171. Импорт функций ветвления в `emulator/cpu/opcodes.py`, обработчики относительной адресации и записи таблицы кодов операций относятся к урокам 172-179.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_164_instruction_bcc.py -v