072. Inc zero page

подключить INC Zero Page (`0xE6`).

Урок 72 из 356 · tests/chapter_01_cpu/test_072_INC_zero_page.py

На этом шаге, имея emulator/cpu/instructions.py:inc из урока 071 в качестве предпосылки, добавьте только подключение zero page в emulator/cpu/opcodes.py.

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

Обработчики опкодов преобразуют байты инструкции в эффективный адрес. Повторное использование addressing_modes.zero_page сохраняет извлечение операнда и продвижение PC, тогда как instructions.inc остаётся независимым от режима адресации.

Рекомендуемая реализация в emulator/cpu/opcodes.py:

from emulator.cpu.instructions import lda, sta, ldx, stx, ldy, sty, tax, txa, tay, tya, adc, sbc, inc

def inc_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    inc(cpu, addr)

Добавьте следующую запись в существующую OPCODE_TABLE:

0xE6: inc_zero_page,

Обработчик добавлен в секцию # ------ INC Opcodes, а отображение добавлено в OPCODE_TABLE.

Инварианты: zero_page(cpu) потребляет один байт операнда, возвращает адрес в нулевой странице и продвигает PC один раз; обработчик делегирует одну операцию чтения-модификации-записи в inc; 0xE6 отображается на объект функции; длина инструкции — два байта; INC по-прежнему изменяет только память и Z/N.

Типичная ошибка: байт операнда является адресом, а не байтом для инкремента. Не читайте его в обработчике и не дублируйте арифметику INC в нём.

Вне области действия: inc_zero_page_x, inc_absolute и inc_absolute_x, а также их отображения 0xF6, 0xEE и 0xFE — это уроки 073–075.

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

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