092. Asl zero page x

Добавить ASL Zero Page,X.

Урок 92 из 356 · tests/chapter_01_cpu/test_092_ASL_zero_page_x.py

На этом шаге форма Zero Page из теста 091 расширяется индексацией по X.

Файл и символы

emulator/cpu/opcodes.py: asl_zero_page_x, OPCODE_TABLE[0x16]

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

После того как тест 091 подключил обычный ASL для нулевой страницы, этот переход повторно использует уже существующий резолвер zero_page_x, так что индексация и перенос в пределах нулевой страницы остаются вопросом адресации.

Предлагаемая реализация для этого шага

# emulator/cpu/opcodes.py
def asl_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    asl(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x16: asl_zero_page_x,
}

Важные инварианты

  • эффективный адрес — это (operand + cpu.x) & 0xFF
  • считывается один байт операнда, поэтому PC увеличивается на два с учётом опкода
  • asl отвечает за запись в память и обновление Carry, Zero и Negative
  • индексация изменяет адресата, а не значение, передаваемое в asl

Распространённое заблуждение

Zero Page,X не переходит на страницу один: база 0xFE плюс X=0x03 указывает на $0001.

Вне рамок

  • ASL Absolute и Absolute,X в тестах 093-094
  • изменение zero_page_x или asl
  • точность тактов

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

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