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