080. Инструкция inx

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

Урок 80 из 356 · tests/chapter_01_cpu/test_080_instruction_inx.py

На этом шаге добавьте только emulator/cpu/instructions.py:inx. Опкод 0xE8 — это урок 081, а dex и опкод 0xCA — это уроки 082–083.

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

INX — это подразумеваемое поведение регистра, поэтому ему не нужна вспомогательная функция адресации или обращение к шине. Примитив выполняет 8-битную арифметику и устанавливает флаги непосредственно по новому значению X.

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

def inx(cpu: CPU):
    result = cpu.x + 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)

    cpu.x = result_8

Инварианты: X остаётся восьмибитным ($FF + 1 == $00); Zero и Negative отражают замаскированный результат; A, Y, память, Carry и Overflow остаются без изменений; сам примитив не извлекает операнды и не продвигает PC.

Типичная ошибка: INX — это не INC для памяти с X в качестве адреса. Он изменяет регистр X напрямую и принимает только cpu.

Вне области действия: импорт и отображение inx, добавление dex и отображение 0xCA относятся к урокам 081–083.

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

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