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