071. Инструкция inc

добавить примитив инструкции INC.

Урок 71 из 356 · tests/chapter_01_cpu/test_071_instruction_inc.py

На этом шаге добавьте только emulator/cpu/instructions.py:inc. Импорт опкода, обработчики и записи в таблице относятся к урокам 072–075.

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

INC — это операция чтения-модификации-записи в памяти. Выделение арифметики в один примитив инструкции позволяет каждому последующему обработчику режима адресации вычислить адрес и делегировать одинаковое изменение значения и поведение флагов.

Рекомендуемая реализация в emulator/cpu/instructions.py, после sbc:

def inc(cpu: CPU, address: int):
    value = cpu.bus.read(address)
    result = value + 1
    result_8 = result & 0xFF

    # Set flags
    cpu.flags.set_negative_flag((result_8 & 0b1000_0000) != 0)
    cpu.flags.set_zero_flag(result_8 == 0)

    # Set value on address
    cpu.bus.write(address, result_8)

Инварианты: address — это эффективный адрес, а не значение операнда; байт читается и записывается через cpu.bus; маскирование обеспечивает 8-битный перенос через ноль; Zero и Negative отражают замаскированный результат; Carry, Overflow и A/X/Y остаются без изменений.

Типичная ошибка: не инкрементируйте A и не передавайте cpu.bus.read(address) в inc. INC самостоятельно читает байт из памяти и записывает результат обратно по тому же адресу.

Вне области действия: подключение опкода не входит в шаг 071; интеграция от zero page до absolute-X рассматривается в уроках 072–075.

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

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