094. Asl absolute x

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

Урок 94 из 356 · tests/chapter_01_cpu/test_094_ASL_absolute_x.py

На этом шаге завершается последовательность режимов адресации ASL добавлением Absolute,X.

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

emulator/cpu/opcodes.py: asl_absolute_x, OPCODE_TABLE[0x1E]

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

Это финальный переход в адресации ASL. Он объединяет уже существующий резолвер absolute_x с реализацией asl для памяти, введённой ранее.

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

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

OPCODE_TABLE = {
    # existing entries unchanged
    0x1E: asl_absolute_x,
}

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

  • 16-битную базу в порядке little-endian нужно декодировать до прибавления X
  • инструкция по-прежнему занимает три байта; X — это регистр, а не ещё один операнд
  • asl отвечает за чтение/изменение/запись и обновление флагов по эффективному адресу
  • аккумулятор не изменяется

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

Для 1E 00 02 с X=0x04 X прибавляется к $0200, а не к какому-либо из байтов операнда.

Вне рамок

  • LSR, вводимый тестами 095-101
  • изменение absolute_x или asl
  • пересечение страниц и точность тактов цикла чтения/изменения/записи

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

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